Name: series-workflow76xn7 Phase: Succeeded StartedAt: 2026-09-01 19:51:17 +0000 UTC FinishedAt: 2026-09-01 23:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[0] Phase: Succeeded StartedAt: 2026-09-01 19:51:17 +0000 UTC FinishedAt: 2026-09-01 20:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 19:51:17 +0000 UTC FinishedAt: 2026-09-01 20:11:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UDF_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UDF_FS" ], "series_id": "9fc80e06-681b-4ad0-8a1f-7f557f12264b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "udf_get_extendedattr", "udf_add_extendedattr", "udf_write_inode", "__udf_iget" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VERl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkZl9nZXRfZXh0ZW5kZWRhdHRyJiMzNDssCiAgICAmIzM0O3VkZl9hZGRfZXh0ZW5kZWRhdHRyJiMzNDssCiAgICAmIzM0O3VkZl93cml0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtfX3VkZl9pZ2V0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzYW5pdHkgYW5kIGJvdW5kcyBjaGVja2luZyBmb3IgVURGIGZpbGVzeXN0ZW0gZXh0ZW5kZWQgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5IGZvciBkZXZpY2VTcGVjIGF0dHJpYnV0ZXMgb24gc3BlY2lhbCBkZXZpY2UgaW5vZGVzIChjaGFyYWN0ZXIvYmxvY2sgZGV2aWNlcykuIEl0IGludHJvZHVjZXMgYHVkZl9kZXZpY2Vfc3BlY192YWxpZCgpYCB0byB2YWxpZGF0ZSBhdHRyaWJ1dGUgYW5kIGltcGxlbWVudGF0aW9uLXVzZSBsZW5ndGhzIGFnYWluc3QgYnVmZmVyIGJvdW5kcywgcHJvcGVybHkgaGFuZGxlcyBgRVJSX1BUUmAgZXJyb3IgcmV0dXJucyBmcm9tIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpYCBhbmQgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyKClgLCBhbmQgZml4ZXMgbG9vcCBib3VuZGFyeSBjaGVja3Mgd2hlbiBpdGVyYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcy5cblxuVGhlc2UgY2hhbmdlcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBvbiBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMsIHdoaWNoIGZhbGwgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgVURGIGRldmljZSBzcGVjaWZpY2F0aW9uIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIGZpeGVzIGVycm9yIGhhbmRsaW5nL3Byb3BhZ2F0aW9uIGZvciBjb3JydXB0ZWQgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiBVREYgZmlsZXN5c3RlbSBpbm9kZSByZWFkL3dyaXRlIHBhdGhzLiBUaGlzIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBieSBtb3VudGluZyBhbmQgcmVhZGluZy93cml0aW5nIGNyYWZ0ZWQgVURGIGZpbGVzeXN0ZW0gaW1hZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmY0MDhjNzM4ZGE5ODk0NTlhOGJmMDg1M2RhYTdjMTQxZWZmYzc0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMjA6MDg6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuY1xuaW5kZXggZTQ1ZTU0NmE3MzlhOS4uOGJhYmMyZmJjZTlhMSAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvaW5vZGUuY1xuQEAgLTEzMzYsNiAmIzQzOzEzMzYsMjYgQEAgaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFZlcmlmeSB2YWxpZGl0eSBvZiBzdHJ1Y3QgZGV2aWNlU3BlYyBvbiBkaXNrLiB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpIGhhc1xuJiM0MzsgKiBhbHJlYWR5IHZlcmlmaWVkIHRoZSBnZW5lcmljIGhlYWRlciBhbmQgbWFkZSBzdXJlIGF0dHJpYnV0ZSBmaXRzIGluIHRoZVxuJiM0MzsgKiBpbm9kZSBzbyB3ZSBqdXN0IGhhdmUgdG8gbWFrZSBzdXJlIGF0dHJpYnV0ZSBzcGFjZSBpcyBsYXJnZSBlbm91Z2ggZm9yXG4mIzQzOyAqIGRldmljZVNwZWMgc3RydWN0IGFuZCByZXF1aXJlZCBpbXBVc2UgaW5mb3JtYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoc3RydWN0IGRldmljZVNwZWMgKmRzZWEpXG4mIzQzO3tcbiYjNDM7XHR1MzIgYXR0cl9sZW5ndGgsIGltcF91c2VfbGVuZ3RoO1xuJiM0MztcbiYjNDM7XHRhdHRyX2xlbmd0aCA9IGxlMzJfdG9fY3B1KGRzZWEtXHUwMDNlYXR0ckxlbmd0aCk7XG4mIzQzO1x0aW1wX3VzZV9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLVx1MDAzZWltcFVzZUxlbmd0aCk7XG4mIzQzO1x0aWYgKGF0dHJfbGVuZ3RoIFx1MDAzYyBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpIHx8XG4mIzQzO1x0ICAgIGltcF91c2VfbGVuZ3RoIFx1MDAzYyBzaXplb2Yoc3RydWN0IHJlZ2lkKSB8fFxuJiM0MztcdCAgICBpbXBfdXNlX2xlbmd0aCBcdTAwM2UgYXR0cl9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIE1heGltdW0gbGVuZ3RoIG9mIGxpbmtlZCBsaXN0IGZvcm1lZCBieSBJQ0IgaGllcmFyY2h5LiBUaGUgY2hvc2VuIG51bWJlciBpc1xuICAqIGFyYml0cmFyeSAtIGp1c3QgdGhhdCB3ZSBob3BlZnVsbHkgZG9uJiMzOTt0IGxpbWl0IGFueSByZWFsIHVzZSBvZiByZXdyaXR0ZW5cbkBAIC0xNjU0LDEzICYjNDM7MTY3NCwxOSBAQCBzdGF0aWMgaW50IHVkZl9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgaGlkZGVuX2lub2RlKVxuIFx0aWYgKFNfSVNDSFIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuIFx0XHRcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XG4tXHRcdGlmIChkc2VhKSB7XG4tXHRcdFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS1cdTAwM2VpX21vZGUsXG4mIzQzO1xuJiM0MztcdFx0aWYgKElTX0VSUihkc2VhKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKGRzZWEpO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdC8qIERldmljZSBpbm9kZXMgbXVzdCBoYXZlIGEgZGV2aWNlIHNwZWMgYXR0cmlidXRlICovXG4mIzQzO1x0XHRpZiAoIWRzZWEgfHwgIXVkZl9kZXZpY2Vfc3BlY192YWxpZChkc2VhKSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUZTQ09SUlVQVEVEO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9tb2RlLFxuIFx0XHRcdFx0TUtERVYobGUzMl90b19jcHUoZHNlYS1cdTAwM2VtYWpvckRldmljZUlkZW50KSxcbiBcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGRzZWEtXHUwMDNlbWlub3JEZXZpY2VJZGVudCkpKTtcbi1cdFx0XHQvKiBEZXZlbG9wZXIgSUQgPz8/ICovXG4tXHRcdH0gZWxzZVxuLVx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0cmV0ID0gMDtcbiBvdXQ6XG5AQCAtMTc1Nyw2ICYjNDM7MTc4Myw3IEBAIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHVuc2lnbmVkIGNoYXIgYmxvY2tzaXplX2JpdHMgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4gXHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLFxuIFx0XHRcdHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLVx1MDAzZWlfc2IsIFx1MDAyNmlpbmZvLVx1MDAzZWlfbG9jYXRpb24sIDApKTtcbkBAIC0xODE2LDExICYjNDM7MTg0MywyMSBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0XHRzdHJ1Y3QgcmVnaWQgKmVpZDtcbiBcdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuIFx0XHRcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XG4mIzQzO1xuJiM0MztcdFx0LyogVmFsaWRpdHkgb2YgZXh0ZW5kZWQgYXR0cnMgd2FzIGNoZWNrZWQgb24gbG9hZCAqL1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRShJU19FUlIoZHNlYSkpKSB7XG4mIzQzO1x0XHRcdGVyciA9IFBUUl9FUlIoZHNlYSk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKCFkc2VhKSB7XG4gXHRcdFx0ZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKVxuIFx0XHRcdFx0dWRmX2FkZF9leHRlbmRlZGF0dHIoaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICYjNDM7XG4gXHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IHJlZ2lkKSwgMTIsIDB4Myk7XG4mIzQzO1x0XHRcdGlmIChJU19FUlIoZHNlYSkpIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSBQVFJfRVJSKGRzZWEpO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdGRzZWEtXHUwMDNlYXR0clR5cGUgPSBjcHVfdG9fbGUzMigxMik7XG4gXHRcdFx0ZHNlYS1cdTAwM2VhdHRyU3VidHlwZSA9IDE7XG4gXHRcdFx0ZHNlYS1cdTAwM2VhdHRyTGVuZ3RoID0gY3B1X3RvX2xlMzIoXG5AQCAtMTk2Miw2ICYjNDM7MTk5OSwxMSBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0dW5sb2NrX2J1ZmZlcihiaCk7XG4mIzQzO1x0YnJlbHNlKGJoKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8sXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL21pc2MuYyBiL2ZzL3VkZi9taXNjLmNcbmluZGV4IDY5MjhlMzc4ZmJiZGMuLmEyMDg0ZGZiZmJkNjYgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvbWlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvbWlzYy5jXG5AQCAtNTgsNyAmIzQzOzU4LDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsXG4gXHRcdFx0XHRcdGNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fFxuIFx0XHRcdCAgICBsZTMyX3RvX2NwdShlYWhkLVx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XG4gXHRcdFx0XHRcdGlpbmZvLVx1MDAzZWlfbG9jYXRpb24ubG9naWNhbEJsb2NrTnVtKVxuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVGU0NPUlJVUFRFRCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0c3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXG5AQCAtMTIyLDcgJiM0MzsxMjIsNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3Qgc2l6ZSxcbiBcdFx0cmV0dXJuIChzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqKVx1MDAyNmVhW29mZnNldF07XG4gXHR9XG4gXG4tXHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbiB9XG4gXG4gc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsXG5AQCAtMTQ0LDcgJiM0MzsxNDQsNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcbiBcdFx0XHRcdGNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fFxuIFx0XHQgICAgbGUzMl90b19jcHUoZWFoZC1cdTAwM2VkZXNjVGFnLnRhZ0xvY2F0aW9uKSAhPVxuIFx0XHRcdFx0aWluZm8tXHUwMDNlaV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0pXG4tXHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xuIFxuIFx0XHRpZiAodHlwZSBcdTAwM2MgMjA0OClcbiBcdFx0XHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xuQEAgLTE1MywxNiAmIzQzOzE1MywxNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcbiBcdFx0ZWxzZVxuIFx0XHRcdG9mZnNldCA9IGxlMzJfdG9fY3B1KGVhaGQtXHUwMDNlYXBwQXR0ckxvY2F0aW9uKTtcbiBcbi1cdFx0d2hpbGUgKG9mZnNldCAmIzQzOyBzaXplb2YoKmdhZikgXHUwMDNjIGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIpIHtcbiYjNDM7XHRcdHdoaWxlIChvZmZzZXQgXHUwMDNjXG4mIzQzO1x0XHQgICAgICAgaWluZm8tXHUwMDNlaV9sZW5FQXR0ciAtIHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkpIHtcbiBcdFx0XHR1aW50MzJfdCBhdHRyTGVuZ3RoO1xuIFxuIFx0XHRcdGdhZiA9IChzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqKVx1MDAyNmVhW29mZnNldF07XG4gXHRcdFx0YXR0ckxlbmd0aCA9IGxlMzJfdG9fY3B1KGdhZi1cdTAwM2VhdHRyTGVuZ3RoKTtcbiBcbiBcdFx0XHQvKiBEZXRlY3QgdW5kZXJzaXplZCBlbGVtZW50cyBhbmQgYnVmZmVyIG92ZXJmbG93cyAqL1xuLVx0XHRcdGlmICgoYXR0ckxlbmd0aCBcdTAwM2Mgc2l6ZW9mKCpnYWYpKSB8fFxuLVx0XHRcdCAgICAoYXR0ckxlbmd0aCBcdTAwM2UgKGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIgLSBvZmZzZXQpKSlcbi1cdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRpZiAoYXR0ckxlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBnZW5lcmljRm9ybWF0KSB8fFxuJiM0MztcdFx0XHQgICAgYXR0ckxlbmd0aCBcdTAwM2UgaWluZm8tXHUwMDNlaV9sZW5FQXR0ciAtIG9mZnNldClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbiBcbiBcdFx0XHRpZiAobGUzMl90b19jcHUoZ2FmLVx1MDAzZWF0dHJUeXBlKSA9PSB0eXBlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0XHRnYWYtXHUwMDNlYXR0clN1YnR5cGUgPT0gc3VidHlwZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVREZfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZGZfZ2V0X2V4dGVuZGVkYXR0ciYjMzQ7LAogICAgJiMzNDt1ZGZfYWRkX2V4dGVuZGVkYXR0ciYjMzQ7LAogICAgJiMzNDt1ZGZfd3JpdGVfaW5vZGUmIzM0OywKICAgICYjMzQ7X191ZGZfaWdldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIFVERiBkZXZpY2Ugc3BlY2lmaWNhdGlvbiBleHRlbmRlZCBhdHRyaWJ1dGVzIGFuZCBmaXhlcyBlcnJvciBoYW5kbGluZy9wcm9wYWdhdGlvbiBmb3IgY29ycnVwdGVkIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gVURGIGZpbGVzeXN0ZW0gaW5vZGUgcmVhZC93cml0ZSBwYXRocy4gVGhpcyBpcyBkaXJlY3RseSByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIHJlYWRpbmcvd3JpdGluZyBjcmFmdGVkIFVERiBmaWxlc3lzdGVtIGltYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZmNDA4YzczOGRhOTg5NDU5YThiZjA4NTNkYWE3YzE0MWVmZmM3NDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIwOjA4OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuYwppbmRleCBlNDVlNTQ2YTczOWE5Li44YmFiYzJmYmNlOWExIDEwMDY0NAotLS0gYS9mcy91ZGYvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvaW5vZGUuYwpAQCAtMTMzNiw2ICYjNDM7MTMzNiwyNiBAQCBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzOy8qCiYjNDM7ICogVmVyaWZ5IHZhbGlkaXR5IG9mIHN0cnVjdCBkZXZpY2VTcGVjIG9uIGRpc2suIHVkZl9nZXRfZXh0ZW5kZWRhdHRyKCkgaGFzCiYjNDM7ICogYWxyZWFkeSB2ZXJpZmllZCB0aGUgZ2VuZXJpYyBoZWFkZXIgYW5kIG1hZGUgc3VyZSBhdHRyaWJ1dGUgZml0cyBpbiB0aGUKJiM0MzsgKiBpbm9kZSBzbyB3ZSBqdXN0IGhhdmUgdG8gbWFrZSBzdXJlIGF0dHJpYnV0ZSBzcGFjZSBpcyBsYXJnZSBlbm91Z2ggZm9yCiYjNDM7ICogZGV2aWNlU3BlYyBzdHJ1Y3QgYW5kIHJlcXVpcmVkIGltcFVzZSBpbmZvcm1hdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoc3RydWN0IGRldmljZVNwZWMgKmRzZWEpCiYjNDM7ewomIzQzOwl1MzIgYXR0cl9sZW5ndGgsIGltcF91c2VfbGVuZ3RoOwomIzQzOwomIzQzOwlhdHRyX2xlbmd0aCA9IGxlMzJfdG9fY3B1KGRzZWEtJmd0O2F0dHJMZW5ndGgpOwomIzQzOwlpbXBfdXNlX2xlbmd0aCA9IGxlMzJfdG9fY3B1KGRzZWEtJmd0O2ltcFVzZUxlbmd0aCk7CiYjNDM7CWlmIChhdHRyX2xlbmd0aCAmbHQ7IHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgfHwKJiM0MzsJICAgIGltcF91c2VfbGVuZ3RoICZsdDsgc2l6ZW9mKHN0cnVjdCByZWdpZCkgfHwKJiM0MzsJICAgIGltcF91c2VfbGVuZ3RoICZndDsgYXR0cl9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogTWF4aW11bSBsZW5ndGggb2YgbGlua2VkIGxpc3QgZm9ybWVkIGJ5IElDQiBoaWVyYXJjaHkuIFRoZSBjaG9zZW4gbnVtYmVyIGlzCiAgKiBhcmJpdHJhcnkgLSBqdXN0IHRoYXQgd2UgaG9wZWZ1bGx5IGRvbiYjMzk7dCBsaW1pdCBhbnkgcmVhbCB1c2Ugb2YgcmV3cml0dGVuCkBAIC0xNjU0LDEzICYjNDM7MTY3NCwxOSBAQCBzdGF0aWMgaW50IHVkZl9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgaGlkZGVuX2lub2RlKQogCWlmIChTX0lTQ0hSKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJc3RydWN0IGRldmljZVNwZWMgKmRzZWEgPQogCQkJKHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTsKLQkJaWYgKGRzZWEpIHsKLQkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtJmd0O2lfbW9kZSwKJiM0MzsKJiM0MzsJCWlmIChJU19FUlIoZHNlYSkpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKGRzZWEpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwkJLyogRGV2aWNlIGlub2RlcyBtdXN0IGhhdmUgYSBkZXZpY2Ugc3BlYyBhdHRyaWJ1dGUgKi8KJiM0MzsJCWlmICghZHNlYSB8fCAhdWRmX2RldmljZV9zcGVjX3ZhbGlkKGRzZWEpKSB7CiYjNDM7CQkJcmV0ID0gLUVGU0NPUlJVUFRFRDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtJmd0O2lfbW9kZSwKIAkJCQlNS0RFVihsZTMyX3RvX2NwdShkc2VhLSZndDttYWpvckRldmljZUlkZW50KSwKIAkJCQkgICAgICBsZTMyX3RvX2NwdShkc2VhLSZndDttaW5vckRldmljZUlkZW50KSkpOwotCQkJLyogRGV2ZWxvcGVyIElEID8/PyAqLwotCQl9IGVsc2UKLQkJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSAwOwogb3V0OgpAQCAtMTc1Nyw2ICYjNDM7MTc4Myw3IEBAIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtJmd0O2lfc2IpOwogCXVuc2lnbmVkIGNoYXIgYmxvY2tzaXplX2JpdHMgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpOwomIzQzOwlpbnQgZXJyOwogCiAJYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsCiAJCQl1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0mZ3Q7aV9zYiwgJmFtcDtpaW5mby0mZ3Q7aV9sb2NhdGlvbiwgMCkpOwpAQCAtMTgxNiwxMSAmIzQzOzE4NDMsMjEgQEAgaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIAkJc3RydWN0IHJlZ2lkICplaWQ7CiAJCXN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID0KIAkJCShzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7CiYjNDM7CiYjNDM7CQkvKiBWYWxpZGl0eSBvZiBleHRlbmRlZCBhdHRycyB3YXMgY2hlY2tlZCBvbiBsb2FkICovCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKElTX0VSUihkc2VhKSkpIHsKJiM0MzsJCQllcnIgPSBQVFJfRVJSKGRzZWEpOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KIAkJaWYgKCFkc2VhKSB7CiAJCQlkc2VhID0gKHN0cnVjdCBkZXZpY2VTcGVjICopCiAJCQkJdWRmX2FkZF9leHRlbmRlZGF0dHIoaW5vZGUsCiAJCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgJiM0MzsKIAkJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCByZWdpZCksIDEyLCAweDMpOwomIzQzOwkJCWlmIChJU19FUlIoZHNlYSkpIHsKJiM0MzsJCQkJZXJyID0gUFRSX0VSUihkc2VhKTsKJiM0MzsJCQkJZ290byBvdXRfdW5sb2NrOwomIzQzOwkJCX0KIAkJCWRzZWEtJmd0O2F0dHJUeXBlID0gY3B1X3RvX2xlMzIoMTIpOwogCQkJZHNlYS0mZ3Q7YXR0clN1YnR5cGUgPSAxOwogCQkJZHNlYS0mZ3Q7YXR0ckxlbmd0aCA9IGNwdV90b19sZTMyKApAQCAtMTk2Miw2ICYjNDM7MTk5OSwxMSBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCXNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJdW5sb2NrX2J1ZmZlcihiaCk7CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubywKZGlmZiAtLWdpdCBhL2ZzL3VkZi9taXNjLmMgYi9mcy91ZGYvbWlzYy5jCmluZGV4IDY5MjhlMzc4ZmJiZGMuLmEyMDg0ZGZiZmJkNjYgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9taXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWRmL21pc2MuYwpAQCAtNTgsNyAmIzQzOzU4LDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsCiAJCQkJCWNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fAogCQkJICAgIGxlMzJfdG9fY3B1KGVhaGQtJmd0O2Rlc2NUYWcudGFnTG9jYXRpb24pICE9CiAJCQkJCWlpbmZvLSZndDtpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSkKLQkJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCQkJcmV0dXJuIEVSUl9QVFIoLUVGU0NPUlJVUFRFRCk7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihpbm9kZS0mZ3Q7aV9zYik7CiAKQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsCiAJCXJldHVybiAoc3RydWN0IGdlbmVyaWNGb3JtYXQgKikmYW1wO2VhW29mZnNldF07CiAJfQogCi0JcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwogfQogCiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSwKQEAgLTE0NCw3ICYjNDM7MTQ0LDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsCiAJCQkJY3B1X3RvX2xlMTYoVEFHX0lERU5UX0VBSEQpIHx8CiAJCSAgICBsZTMyX3RvX2NwdShlYWhkLSZndDtkZXNjVGFnLnRhZ0xvY2F0aW9uKSAhPQogCQkJCWlpbmZvLSZndDtpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSkKLQkJCXJldHVybiBOVUxMOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpOwogCiAJCWlmICh0eXBlICZsdDsgMjA0OCkKIAkJCW9mZnNldCA9IHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYyk7CkBAIC0xNTMsMTYgJiM0MzsxNTMsMTcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsCiAJCWVsc2UKIAkJCW9mZnNldCA9IGxlMzJfdG9fY3B1KGVhaGQtJmd0O2FwcEF0dHJMb2NhdGlvbik7CiAKLQkJd2hpbGUgKG9mZnNldCAmIzQzOyBzaXplb2YoKmdhZikgJmx0OyBpaW5mby0mZ3Q7aV9sZW5FQXR0cikgewomIzQzOwkJd2hpbGUgKG9mZnNldCAmbHQ7CiYjNDM7CQkgICAgICAgaWluZm8tJmd0O2lfbGVuRUF0dHIgLSBzaXplb2Yoc3RydWN0IGdlbmVyaWNGb3JtYXQpKSB7CiAJCQl1aW50MzJfdCBhdHRyTGVuZ3RoOwogCiAJCQlnYWYgPSAoc3RydWN0IGdlbmVyaWNGb3JtYXQgKikmYW1wO2VhW29mZnNldF07CiAJCQlhdHRyTGVuZ3RoID0gbGUzMl90b19jcHUoZ2FmLSZndDthdHRyTGVuZ3RoKTsKIAogCQkJLyogRGV0ZWN0IHVuZGVyc2l6ZWQgZWxlbWVudHMgYW5kIGJ1ZmZlciBvdmVyZmxvd3MgKi8KLQkJCWlmICgoYXR0ckxlbmd0aCAmbHQ7IHNpemVvZigqZ2FmKSkgfHwKLQkJCSAgICAoYXR0ckxlbmd0aCAmZ3Q7IChpaW5mby0mZ3Q7aV9sZW5FQXR0ciAtIG9mZnNldCkpKQotCQkJCWJyZWFrOwomIzQzOwkJCWlmIChhdHRyTGVuZ3RoICZsdDsgc2l6ZW9mKHN0cnVjdCBnZW5lcmljRm9ybWF0KSB8fAomIzQzOwkJCSAgICBhdHRyTGVuZ3RoICZndDsgaWluZm8tJmd0O2lfbGVuRUF0dHIgLSBvZmZzZXQpCiYjNDM7CQkJCXJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpOwogCiAJCQlpZiAobGUzMl90b19jcHUoZ2FmLSZndDthdHRyVHlwZSkgPT0gdHlwZSAmYW1wOyZhbXA7CiAJCQkJCWdhZi0mZ3Q7YXR0clN1YnR5cGUgPT0gc3VidHlwZSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkxNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFVERiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSBpdHMgZnV6emluZyBwb3RlbnRpYWwuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGEgc29saWQgYW5hbHlzaXMgaW52b2x2ZXMgZmlndXJpbmcgb3V0IGlmIGl0JiMzOTtzIFdvcnRoRnV6emluZywgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLCBrZXkgc3ltYm9scyB0byB0YXJnZXQsIGFuZCB0aGUgdW5kZXJseWluZyByZWFzb25pbmcuCgpGaXJzdCwgSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYGZzL3VkZi9pbm9kZS5jYCBhbmQgYGZzL3VkZi9taXNjLmNgLiBMZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIGhhcHBlbmluZzogaXQmIzM5O3MgYWxsIGFib3V0IFVERiBmaWxlc3lzdGVtIGRldmljZSBzcGVjaWZpY2F0aW9uIHZhbGlkYXRpb24gYW5kIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFNwZWNpZmljYWxseTogYHVkZl9kZXZpY2Vfc3BlY192YWxpZGAgdmFsaWRhdGVzIHRoZSBgc3RydWN0IGRldmljZVNwZWNgLCBgdWRmX3JlYWRfaW5vZGVgIGlzIGhhbmRsaW5nIGVycm9ycyBpbiBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGFuZCB2YWxpZGF0aW5nIHRoZSBkZXZpY2Ugc3BlY3MsIGFuZCB0aGUgYHVkZl93cml0ZV9pbm9kZWAgaXMgZG9pbmcgc2ltaWxhciBlcnJvciBjaGVja3MsIHNwZWNpZmljYWxseSBhcm91bmQgaGFuZGxpbmcgYEVSUl9QVFJgIHJldHVybnMgZnJvbSBmdW5jdGlvbnMgbGlrZSBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHJgLiBUaG9zZSBmdW5jdGlvbnMgYWxzbyBub3cgZXhwbGljaXRseSByZXR1cm4gYEVSUl9QVFIoLi4uKWAgcmF0aGVyIHRoYW4gYE5VTExgIG9uIGVycm9ycy4gVGhpcyBpcyBjcnVjaWFsIGZvciBkZXRlY3RpbmcgYW5kIGhhbmRsaW5nIGNvcnJ1cHRpb24uCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uOiBpcyBVREYgYWNjZXNzaWJsZSB0byBhIHN0YW5kYXJkIGZ1enplcj8gR2l2ZW4gaXQmIzM5O3MgYSBkaXNrIGZpbGVzeXN0ZW0gKGBmcy91ZGYvYCksIEkga25vdyBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlLiBGaWxlc3lzdGVtcyBhcmUgb2Z0ZW4gbW91bnRlZCB2aWEgbG9vcCBkZXZpY2VzLCBhbmQgZnV6emluZyBmaWxlc3lzdGVtIGltYWdlcyBpcyBjb21tb24gcHJhY3RpY2UgKHN5emthbGxlciBkb2VzIHRoaXMpLiBUaGlzIHNlZW1zIHByb21pc2luZy4KClRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlIGRldGFpbHMuIFRpbWUgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayBgZnMvdWRmL0tjb25maWdgIGFuZCBgZnMvdWRmL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBVREYgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgdGVsbCBtZSB0aGUgcmVxdWlyZWQgYEVuYWJsZUNvbmZpZ3NgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVREZfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWRmL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3VkZi9LY29uZmlnOjI6Y29uZmlnIFVERl9GU1xuZnMvdWRmL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VERiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHJlYWRpbmcgYGZzL3VkZi9LY29uZmlnYCwgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIFVERiBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gYGZzL3VkZi9LY29uZmlnYC4gVGltZSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkmIzM5O3JlIHN0cnVjdHVyZWQgZm9yIHRoZSBVREYgZmlsZXN5c3RlbS4gSW1tZWRpYXRlbHksIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUgc2V0dGluZ3Mg4oCTIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBvcHRpb25zIGZvciBlbmFibGluZy9kaXNhYmxpbmcgVURGIHN1cHBvcnQgZW50aXJlbHksIG5hdHVyYWxseS4gUHJvYmFibHkgYSBtb2R1bGUgb3B0aW9uIHRvbzsgZ290dGEgYmUgZmxleGlibGUgb24gdGhhdCBmcm9udC4KCkkmIzM5O20gc2Nhbm5pbmcgZm9yIGZpbmVyLWdyYWluZWQgY29udHJvbHMuIEFyZSB0aGVyZSBvcHRpb25zIGZvciBoYW5kbGluZyBzcGVjaWZpYyBVREYgdmVyc2lvbnM/IE9yIHBlcmhhcHMgZmxhZ3MgdG8gZW5hYmxlL2Rpc2FibGUgY2VydGFpbiBVREYgZXh0ZW5zaW9ucz8gSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHNvbWUgZ3JhbnVsYXJpdHkgaGVyZSwgZ2l2ZW4gdGhlIHZhcmlvdXMgcmV2aXNpb25zIGFuZCBmZWF0dXJlcyBpbXBsZW1lbnRlZCBvdmVyIHRpbWUuIFRoaW5ncyBsaWtlIGhhbmRsaW5nIGxvbmcgZmlsZW5hbWVzIG9yIHN1cHBvcnQgZm9yIHNwZWNpZmljIG1ldGFkYXRhIGZvcm1hdHMuCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgbXVzdCBiZSBlbmFibGVkIGZvciBVREYgdG8gZnVuY3Rpb24gcHJvcGVybHk/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMgb24gYmxvY2sgZHJpdmVycywgU0NTSSBsYXllcnMsIG9yIHNwZWNpZmljIG1lZGlhIGZvcm1hdHM/IEFuZCBjb252ZXJzZWx5LCBkb2VzIGVuYWJsaW5nIFVERiBjb25mbGljdCB3aXRoIGFueSBvdGhlciBmaWxlc3lzdGVtIG9wdGlvbnM/IEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGVzZSByZWxhdGlvbnNoaXBzIHRvIGF2b2lkIHBvdGVudGlhbCBidWlsZCBjb25mbGljdHMgYW5kIGVuc3VyZSB0aGUgcmVzdWx0aW5nIGtlcm5lbCBpbWFnZSBpcyBhcyBsZWFuIGFuZCBmdW5jdGlvbmFsIGFzIHBvc3NpYmxlLgoKSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBkZWZhdWx0IHZhbHVlcyBhc3NpZ25lZCB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBcmUgc2Vuc2libGUgZGVmYXVsdHMgcHJvdmlkZWQ/IEFyZSB0aGV5IGFwcHJvcHJpYXRlIGZvciBtb3N0IGNvbW1vbiB1c2UgY2FzZXMsIG9yIG1pZ2h0IEkgbmVlZCB0byB0d2VhayB0aGVtIGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IGhhcmR3YXJlIGFuZCBzdG9yYWdlIGVudmlyb25tZW50PyBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIGNoZWNrIGZvciBoZWxwIHRleHQgdG8gc2VlIGhvdyB3ZWxsIGl0IGV4cGxhaW5zIHRoZSBvcHRpb25zLiBHb29kIGhlbHAgdGV4dCBpcyBjcnVjaWFsIGZvciBndWlkaW5nIHVzZXJzLCBlc3BlY2lhbGx5IGxlc3MtZXhwZXJpZW5jZWQgb25lcy4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljLiBBcmUgdGhlcmUgYW55IGZlYXR1cmVzIGdhdGVkIGJlaGluZCBjZXJ0YWluIGhhcmR3YXJlIHBsYXRmb3Jtcywga2VybmVsIHZlcnNpb25zLCBvciBvdGhlciBjb21waWxlLXRpbWUgY29uZGl0aW9ucz8gVW5kZXJzdGFuZGluZyB0aGVzZSBjb25kaXRpb25zIGlzIGtleSB0byBlbnN1cmluZyB0aGF0IHRoZSBVREYgZmlsZXN5c3RlbSBiZWhhdmVzIGFzIGV4cGVjdGVkIGFuZCB0aGF0IHRoZSBidWlsZCBpcyBvcHRpbWl6ZWQgZm9yIG15IHNwZWNpZmljIG5lZWRzLiBUaGlzIEtjb25maWcgZmlsZSBpcyBnb2luZyB0byB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBvZiBVREYgc3VwcG9ydCBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3VkZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFVERl9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VURGIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNTpcdFx0c2VsZWN0IENSQ19JVFVfVFxuICAgNjpcdFx0c2VsZWN0IE5MU1xuICAgNzpcdFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBpcyBhIGZpbGUgc3lzdGVtIHVzZWQgb24gc29tZSBDRC1ST01zIGFuZCBEVkRzLiBTaW5jZSB0aGVcbiAgMTA6XHRcdCAgZmlsZSBzeXN0ZW0gaXMgc3VwcG9ydGVkIGJ5IG11bHRpcGxlIG9wZXJhdGluZyBzeXN0ZW1zIGFuZCBpcyBtb3JlXG4gIDExOlx0XHQgIGNvbXBhdGlibGUgd2l0aCBzdGFuZGFyZCB1bml4IGZpbGUgc3lzdGVtcywgaXQgaXMgYWxzbyBzdWl0YWJsZSBmb3JcbiAgMTI6XHRcdCAgcmVtb3ZhYmxlIFVTQiBkaXNrcy4gU2F5IFkgaWYgeW91IGludGVuZCB0byBtb3VudCBEVkQgZGlzY3Mgb3IgQ0RSVyYjMzk7c1xuICAxMzpcdFx0ICB3cml0dGVuIGluIHBhY2tldCBtb2RlLCBvciBpZiB5b3Ugd2FudCB0byB1c2UgVURGIGZvciByZW1vdmFibGUgVVNCXG4gIDE0Olx0XHQgIGRpc2tzLiBQbGVhc2UgcmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWRmLnJzdFx1MDAzZS5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdWRmLlxuICAxODpcdFxuICAxOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIFVERiBFeHRlbmRlZCBBdHRyaWJ1dGUgSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFVERiBmaWxlc3lzdGVtIGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgVURGIGNvZGUuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGZzL3VkZi9pbm9kZS5jYCBhbmQgYGZzL3VkZi9taXNjLmNgLiBJIHdhbnQgdG8gc2VlIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzLCBkZXRlcm1pbmUgdGhlaXIgdmlzaWJpbGl0eSAoYXJlIHRoZXkgZXhwb3J0ZWQgb3IgaW50ZXJuYWw/KSwgYW5kIGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGRlc2lnbi4KCk5leHQsIEkmIzM5O2xsIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAuIEkgd2FudCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIFRoZW4sIEkgbmVlZCB0byBzZWUgKndobyogaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIOKAkyB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBmaWxlc3lzdGVtLCBvciBwb3RlbnRpYWxseSBldmVuIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhcmUgcmVseWluZyBvbiBpdD8gSWRlbnRpZnlpbmcgYWxsIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gaXRzIHVzYWdlIGNvbnRleHQgYW5kIGhlbHAgbWUgc3BvdCBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGRhdGEgaW50ZWdyaXR5LCBhY2Nlc3MgY29udHJvbCwgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGVzcGVjaWFsbHkgd2l0aGluIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAgaXRzZWxmLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgbWlzaGFuZGxlZCBvciBjb3VsZCBiZSBleHBsb2l0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRmX2dldF9leHRlbmRlZGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWRmL2lub2RlLmM9MTI4MD1pbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXG4tLVxuZnMvdWRmL2lub2RlLmMtMTMzOS0vKlxuZnMvdWRmL2lub2RlLmM6MTM0MDogKiBWZXJpZnkgdmFsaWRpdHkgb2Ygc3RydWN0IGRldmljZVNwZWMgb24gZGlzay4gdWRmX2dldF9leHRlbmRlZGF0dHIoKSBoYXNcbmZzL3VkZi9pbm9kZS5jLTEzNDEtICogYWxyZWFkeSB2ZXJpZmllZCB0aGUgZ2VuZXJpYyBoZWFkZXIgYW5kIG1hZGUgc3VyZSBhdHRyaWJ1dGUgZml0cyBpbiB0aGVcbi0tXG5mcy91ZGYvaW5vZGUuYz0xMzY2PXN0YXRpYyBpbnQgdWRmX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBoaWRkZW5faW5vZGUpXG4tLVxuZnMvdWRmL2lub2RlLmMtMTY3NS1cdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuZnMvdWRmL2lub2RlLmM6MTY3NjpcdFx0XHQoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpO1xuZnMvdWRmL2lub2RlLmMtMTY3Ny1cbi0tXG5mcy91ZGYvaW5vZGUuYz0xNzc0PWludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4tLVxuZnMvdWRmL2lub2RlLmMtMTg0NC1cdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuZnMvdWRmL2lub2RlLmM6MTg0NTpcdFx0XHQoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpO1xuZnMvdWRmL2lub2RlLmMtMTg0Ni1cbi0tXG5mcy91ZGYvbWlzYy5jPTI3PXN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLFxuLS1cbmZzL3VkZi9taXNjLmMtMTI3LVxuZnMvdWRmL21pc2MuYzoxMjg6c3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsXG5mcy91ZGYvbWlzYy5jLTEyOS1cdFx0XHRcdFx0ICAgdWludDhfdCBzdWJ0eXBlKVxuLS1cbmZzL3VkZi91ZGZkZWNsLmg9MTg0PWV4dGVybiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICosIHVpbnQzMl90LFxuZnMvdWRmL3VkZmRlY2wuaC0xODUtXHRcdFx0XHRcdFx0ICB1aW50MzJfdCwgdWludDhfdCk7XG5mcy91ZGYvdWRmZGVjbC5oOjE4NjpleHRlcm4gc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqLCB1aW50MzJfdCxcbmZzL3VkZi91ZGZkZWNsLmgtMTg3LVx0XHRcdFx0XHRcdCAgdWludDhfdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgQ29kZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgSSYjMzk7bSBhbHJlYWR5IGxvb2tpbmcgaW50byB0aGlzIGFyZWEsIGJ1dCBsZXQmIzM5O3Mgbm90IGdldCB0dW5uZWwgdmlzaW9uLiBJJiMzOTttIGRlZXAgaW4gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGFuZCBpdHMgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvZGUgcmlnaHQgbm93LCBidXQgYSBjcnVjaWFsIG5leHQgc3RlcCBoZXJlIGlzIHRvIGFsc28gdmVyaWZ5IHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGFjdHVhbGx5ICp1c2luZyogdGhpcyBgdWRmX2FkZF9leHRlbmRlZGF0dHJgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZG93bnN0cmVhbSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlLCBhbmQgZmluZGluZyB0aGUgY2FsbGVycyBpcyBmdW5kYW1lbnRhbCB0byB0aGF0LiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIHVuZGVyc3RhbmQgKndoYXQqIGl0IGRvZXMgaGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZXJlKiBpdCYjMzk7cyBiZWluZyB1c2VkIHRvby4gVGhhdCBjYWxsIGdyYXBoIGlzIGltcG9ydGFudCBmb3IgcmlzayBhc3Nlc3NtZW50IGFuZCBpbXBhY3QgYW5hbHlzaXMuIFNvIEkmIzM5O2xsIGNoZWNrIGl0cyBjYWxsZXJzIGFuZCBidWlsZCB0aGF0IG1lbnRhbCBtYXAgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRmX2FkZF9leHRlbmRlZGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWRmL2lub2RlLmM9MTc3ND1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL3VkZi9pbm9kZS5jLTE4NTMtXHRcdFx0ZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKVxuZnMvdWRmL2lub2RlLmM6MTg1NDpcdFx0XHRcdHVkZl9hZGRfZXh0ZW5kZWRhdHRyKGlub2RlLFxuZnMvdWRmL2lub2RlLmMtMTg1NS1cdFx0XHRcdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgJiM0Mztcbi0tXG5mcy91ZGYvbWlzYy5jLTI2LVxuZnMvdWRmL21pc2MuYzoyNzpzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3Qgc2l6ZSxcbmZzL3VkZi9taXNjLmMtMjgtXHRcdFx0XHRcdCAgIHVpbnQzMl90IHR5cGUsIHVpbnQ4X3QgbG9jKVxuLS1cbmZzL3VkZi91ZGZkZWNsLmg9MTgxPWV4dGVybiB2b2lkIHVkZl91cGRhdGVfZXh0cmFfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCBtb2RlKTtcbi0tXG5mcy91ZGYvdWRmZGVjbC5oLTE4My0vKiBtaXNjLmMgKi9cbmZzL3VkZi91ZGZkZWNsLmg6MTg0OmV4dGVybiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICosIHVpbnQzMl90LFxuZnMvdWRmL3VkZmRlY2wuaC0xODUtXHRcdFx0XHRcdFx0ICB1aW50MzJfdCwgdWludDhfdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMzcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFVERiBGaWxlc3lzdGVtIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGUgVURGIGZpbGVzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AgYW5kIHRoYXQgYXJlIGxpa2VseSBlbnRyeSBwb2ludHMgb3Igc3ltYm9scyB0aGF0IG1pZ2h0IGJlIG1vZGlmaWVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBhIGdvb2Qgd2F5IHRvIHF1aWNrbHkgaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LCBlc3BlY2lhbGx5IHdoZW4gSSYjMzk7bSBsb29raW5nIGZvciBob3cgZGF0YSBpcyBhY2Nlc3NlZCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIHN5c3RlbS4KCkZpcnN0LCBJJiMzOTttIGV4YW1pbmluZyBgZnMvdWRmL2lub2RlLmNgLiBJIHNlZSBgdWRmX3dyaXRlX2lub2RlYCBpcyBub24tc3RhdGljLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBsaWtlbHkgaW52b2x2ZWQgaW4gd3JpdGluZyBpbm9kZSBkYXRhLCBhbmQgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhpcyBzcGVjaWZpYyBmaWxlLiBgdWRmX3JlYWRfaW5vZGVgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdHMgdXNhZ2UgaXMgbGltaXRlZCB0byB0aGlzIGZpbGUsIHdoaWNoIGlzIGNhbGxlZCBieSBgX191ZGZfaWdldGAgYW5kIGB1ZGZfaWdldGAuIGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWRgIGlzIGFsc28gYSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uOyBzbyBub3QgdGhhdCBpbnRlcmVzdGluZyBmb3Igb3VyIGN1cnJlbnQgZ29hbC4KCk5leHQsIEkmIzM5O20gbW92aW5nIG9uIHRvIGBmcy91ZGYvbWlzYy5jYC4gSGVyZSwgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCBhbmQgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYCBhcmUgbm9uLXN0YXRpYyBhbmQgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYWxsb3cgYWRkaW5nIG9yIGZldGNoaW5nIG9mIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIEl0IG1ha2VzIHNlbnNlLCBhcyBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBhIGNvbW1vbiB3YXkgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIG1ldGFkYXRhIHRvIGEgZmlsZS4gVGhlc2Ugd2lsbCBwcm92aWRlIGdlbmVyaWMgRm9ybWF0IHN0cnVjdHVyZXMgYW5kIHNob3VsZCBiZSBjYXJlZnVsbHkgcmV2aWV3ZWQuIEZpbmFsbHksIG5vdGluZyB0aGF0IGB1ZGZfaWdldGAgYW5kIGBfX3VkZl9pZ2V0YCBhcmUgaW4gYGlub2RlLmNgLCBhcmUgaW1wb3J0YW50IGVudHJ5cG9pbnRzIGZvciByZWFkaW5nIGlub2Rlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRmX3JlYWRfaW5vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWRmL2lub2RlLmMtMTgtICogIDEyLzA2Lzk4IGJsZiAgcGFydGl0aW9uIHN1cHBvcnQgaW4gdWRmX2lnZXQsIHVkZl9ibG9ja19tYXBcbmZzL3VkZi9pbm9kZS5jOjE5OiAqICAgICAgICAgICAgICAgIGFuZCB1ZGZfcmVhZF9pbm9kZVxuZnMvdWRmL2lub2RlLmMtMjAtICogIDEyLzEyLzk4ICAgICAgcmV3cm90ZSB1ZGZfYmxvY2tfbWFwIHRvIGhhbmRsZSBuZXh0IGV4dGVudHMgYW5kIGRlc2NzIGFjcm9zc1xuLS1cbmZzL3VkZi9pbm9kZS5jPTEzNDU9c3RhdGljIGJvb2wgdWRmX2RldmljZV9zcGVjX3ZhbGlkKHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhKVxuLS1cbmZzL3VkZi9pbm9kZS5jLTEzNjUtXG5mcy91ZGYvaW5vZGUuYzoxMzY2OnN0YXRpYyBpbnQgdWRmX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBoaWRkZW5faW5vZGUpXG5mcy91ZGYvaW5vZGUuYy0xMzY3LXtcbi0tXG5mcy91ZGYvaW5vZGUuYz0yMDA5PXN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubyxcbi0tXG5mcy91ZGYvaW5vZGUuYy0yMDI3LVx0bWVtY3B5KFx1MDAyNlVERl9JKGlub2RlKS1cdTAwM2VpX2xvY2F0aW9uLCBpbm8sIHNpemVvZihzdHJ1Y3Qga2VybmVsX2xiX2FkZHIpKTtcbmZzL3VkZi9pbm9kZS5jOjIwMjg6XHRlcnIgPSB1ZGZfcmVhZF9pbm9kZShpbm9kZSwgaGlkZGVuX2lub2RlKTtcbmZzL3VkZi9pbm9kZS5jLTIwMjktXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVURGIEZpbGVzeXN0ZW0mIzM5O3MgaS1ub2RlIEhhbmRsaW5nKioKClJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGktbm9kZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBVREYgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRob3NlIGN1c3RvbSBVREYtc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGZzL3VkZi9pbm9kZS5jYCwgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYF9fdWRmX2lnZXRgIGFuZCBgdWRmX2lnZXRgLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGRpZmZlcmVuY2VzIGFuZCBzaGFyZWQgcmVzcG9uc2liaWxpdGllcywgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG51YW5jZXMgb2YgVURGJiMzOTtzIG1ldGFkYXRhIHN0b3JhZ2UgYW5kIHJldHJpZXZhbC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgaW4gZmV0Y2hpbmcgYW5kIGluaXRpYWxpemluZyBpLW5vZGUgZGF0YSBmcm9tIHRoZSBkaXNjLiBJIGFudGljaXBhdGUgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4gYXJvdW5kIHRoZSBoYW5kbGluZyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIG9yIHNwZWNpZmljIFVERiBzdHJ1Y3R1cmVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy91ZGYvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAwNTpcdFx0YnJlbHNlKGJoKTtcbjIwMDY6XHRcdHJldHVybiBlcnI7XG4yMDA3Olx0fVxuMjAwODpcdFxuMjAwOTpcdHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubyxcbjIwMTA6XHRcdFx0XHQgYm9vbCBoaWRkZW5faW5vZGUpXG4yMDExOlx0e1xuMjAxMjpcdFx0dW5zaWduZWQgbG9uZyBibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCBpbm8sIDApO1xuMjAxMzpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBibG9jayk7XG4yMDE0Olx0XHRpbnQgZXJyO1xuMjAxNTpcdFxuMjAxNjpcdFx0aWYgKCFpbm9kZSlcbjIwMTc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4yMDE4Olx0XG4yMDE5Olx0XHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX05FVykpIHtcbjIwMjA6XHRcdFx0aWYgKFVERl9JKGlub2RlKS1cdTAwM2VpX2hpZGRlbiAhPSBoaWRkZW5faW5vZGUpIHtcbjIwMjE6XHRcdFx0XHRpcHV0KGlub2RlKTtcbjIwMjI6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbjIwMjM6XHRcdFx0fVxuMjAyNDpcdFx0XHRyZXR1cm4gaW5vZGU7XG4yMDI1Olx0XHR9XG4yMDI2Olx0XG4yMDI3Olx0XHRtZW1jcHkoXHUwMDI2VURGX0koaW5vZGUpLVx1MDAzZWlfbG9jYXRpb24sIGlubywgc2l6ZW9mKHN0cnVjdCBrZXJuZWxfbGJfYWRkcikpO1xuMjAyODpcdFx0ZXJyID0gdWRmX3JlYWRfaW5vZGUoaW5vZGUsIGhpZGRlbl9pbm9kZSk7XG4yMDI5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4yMDMwOlx0XHRcdGlnZXRfZmFpbGVkKGlub2RlKTtcbjIwMzE6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjIwMzI6XHRcdH1cbjIwMzM6XHRcdHVubG9ja19uZXdfaW5vZGUoaW5vZGUpO1xuMjAzNDpcdFxuMjAzNTpcdFx0cmV0dXJuIGlub2RlO1xuMjAzNjpcdH1cbjIwMzc6XHRcbjIwMzg6XHRpbnQgdWRmX3NldHVwX2luZGlyZWN0X2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgdWRmX3BibGtfdCBibG9jayxcbjIwMzk6XHRcdFx0XHQgICAgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcylcbjIwNDA6XHR7XG4yMDQxOlx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbjIwNDI6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4yMDQzOlx0XHRzdHJ1Y3QgYWxsb2NFeHREZXNjICphZWQ7XG4yMDQ0Olx0XHRzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIG5lcG9zO1xuMjA0NTpcdFx0c3RydWN0IGtlcm5lbF9sYl9hZGRyIG5lbG9jO1xuMjA0NjpcdFx0aW50IHZlciwgYWRzaXplO1xuMjA0NzpcdFx0aW50IGVyciA9IDA7XG4yMDQ4Olx0XG4yMDQ5Olx0XHRpZiAoVURGX0koaW5vZGUpLVx1MDAzZWlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk2MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBVREYgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmaWxlcyBiZXNpZGVzIHdoYXQmIzM5O3MgbWVudGlvbmVkIGluIHRoZSBpbml0aWFsIGRlc2NyaXB0aW9uLiBUaGVuLCBsZXQmIzM5O3MgZ28gb3ZlciB0aGUgZGlmZiBhZ2FpbiwgcGFydGljdWxhcmx5IGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgaW4gYGZzL3VkZi9pbm9kZS5jYCBpbnZvbHZpbmcgYHVkZl9kZXZpY2Vfc3BlY192YWxpZGAsIGB1ZGZfcmVhZF9pbm9kZWAsIGFuZCBgdWRmX3dyaXRlX2lub2RlYCwgYW5kIGFsc28gYGZzL3VkZi9taXNjLmNgLCB3aGVyZSB3ZSBzZWUgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCBhbmQgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYCBiZWluZyBtb2RpZmllZC4KCkhtbSwgaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IFllcywgYWJzb2x1dGVseS4gVGhpcyBhZGRyZXNzZXMgc29tZSBjcnVjaWFsIHZ1bG5lcmFiaWxpdGllczogYm91bmRzIGNoZWNrcyBhbmQgdmFsaWRpdHkgY2hlY2tzLCBhbmQgZXJyb3IgcHJvcGFnYXRpb24gYXJlIGltcHJvdmVkIGZvciBoYW5kbGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzIHdpdGhpbiB0aGUgVURGIGZpbGVzeXN0ZW0gY29kZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGlzc3VlcyByZWxhdGVkIHRvIHNwZWNpYWwgZGV2aWNlIGlub2RlcyBhbmQgdGhlIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cmAgZnVuY3Rpb25zLiBUaGlzIG1lYW5zIG1hbGZvcm1lZCBVREYgZmlsZXN5c3RlbSBpbWFnZXMgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciB0aGVzZSBjb2RlIHBhdGhzIGR1cmluZyBhIG1vdW50IG9wZXJhdGlvbiwgaW5vZGUgbG9va3VwcywgcmVhZHMsIG9yIGV2ZW4gd3JpdGViYWNrcy4gVGhhdCYjMzk7cyBhIHRleHRib29rIGNhc2UgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgQ09ORklHIHNldHRpbmdzIGFyZS4gSW4gdGhlIGBmcy91ZGYvS2NvbmZpZ2AgZmlsZSwgd2UgaGF2ZSBgY29uZmlnIFVERl9GU2AsIHdoaWNoIHNlbGVjdHMgQlVGRkVSX0hFQUQsIENSQ19JVFVfVCwgTkxTLCBhbmQgTEVHQUNZX0RJUkVDVF9JTy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGRlcGVuZCBvbiBhbnl0aGluZyBlbHNlIGNyaXRpY2FsLiBUaW1lIHRvIGNoZWNrIGBmcy91ZGYvS2NvbmZpZ2AgYW5kIGBmcy9LY29uZmlnYCBmb3IgZGVwZW5kZW5jaWVzIGFyb3VuZCBgVURGX0ZTYC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtVREZfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9MTA1PW9iai0kKENPTkZJR19PUkFOR0VGU19GUykgICAgICAgJiM0Mzs9IG9yYW5nZWZzL1xuZnMvTWFrZWZpbGU6MTA2Om9iai0kKENPTkZJR19VREZfRlMpXHRcdCYjNDM7PSB1ZGYvXG5mcy9NYWtlZmlsZS0xMDctb2JqLSQoQ09ORklHX1NVTl9PUEVOUFJPTUZTKVx0JiM0Mzs9IG9wZW5wcm9tZnMvXG4tLVxuZnMvdWRmL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3VkZi9LY29uZmlnOjI6Y29uZmlnIFVERl9GU1xuZnMvdWRmL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VERiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvdWRmL01ha2VmaWxlLTUtXG5mcy91ZGYvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVURGX0ZTKSAmIzQzOz0gdWRmLm9cbmZzL3VkZi9NYWtlZmlsZS03LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODI1CgkJCQkJCQlvdXRwdXQ6IDEyMAoJCQkJCQkJdGhvdWdodHM6IDI5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVERiBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24gZm9yIEZ1enppbmcgRm9jdXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIFVERiBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgVURGX0ZTYC4gTXkgZm9jdXMgbm93IGlzIG9uIGlkZW50aWZ5aW5nIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoaXMgcmlnaHQuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhvc2Ugbm9uLXN0YXRpYyBzeW1ib2xzLCB0aGUgZm9jdXMgc3ltYm9scywgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gSSBoYXZlIHRoZXNlIG9uZXMgYWxyZWFkeTogYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYCwgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCwgYHVkZl93cml0ZV9pbm9kZWAsIGFuZCBgX191ZGZfaWdldGAuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBpbXBvcnRhbnQgc3ltYm9scyBvciBlbnRyeSBwb2ludHMgdGhhdCBJJiMzOTt2ZSBtaXNzZWQuICBBaCwgYHVkZl9yZWFkX2lub2RlYCBpcyBzdGF0aWMuIFRoYXQgb25lJiMzOTtzIG5vdCBnb2luZyB0byBiZSBvbiB0aGUgbGlzdC4gSSBzZWUgdGhhdCBgX191ZGZfaWdldGAgY2FsbHMgaXQsIGJ1dCB0aGUgZm9ybWVyIGlzIHRoZSBtb3JlIGltcG9ydGFudCB0YXJnZXQuIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAgaXMgZXhwb3J0ZWQsIHNvIGl0JiMzOTtzIGdvb2QsIG5vbi1zdGF0aWMuICBMaWtld2lzZSwgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYy4gYHVkZl93cml0ZV9pbm9kZWAgaXMgYWxzbyBleHBvcnRlZCwgYW5kIHRoZXJlZm9yZSBub24tc3RhdGljLgoKT2theSwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMgZm9yIEZvY3VzU3ltYm9scy4gIFRoZSBnb2FsIGlzIHRvIHBpbnBvaW50IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBhcmUgd29ydGggaGVhdnkgZnV6emluZywgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFdlIHdhbnQgdG8gYWltIGZvciB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgdGhvc2UgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMsIHdoaWNoIHRoZSBjb21waWxlciBpbmxpbmVzIGFueXdheS4gVGhhdCBtYWtlcyBzZW5zZS4KClNvLCB0YWtpbmcgYWxsIG9mIHRoYXQgaW50byBhY2NvdW50LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgc3ltYm9sczoKCiogICBgdWRmX2dldF9leHRlbmRlZGF0dHJgCiogICBgdWRmX2FkZF9leHRlbmRlZGF0dHJgCiogICBgdWRmX3dyaXRlX2lub2RlYAoqICAgYF9fdWRmX2lnZXRgCgpBbmQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZSBpczoKCiogICBgVURGX0ZTYAoKQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCYjMzk7cyBnZXQgdGhlc2UgY2hhbmdlcyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VERl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkZl9nZXRfZXh0ZW5kZWRhdHRyJiMzNDssCiAgICAmIzM0O3VkZl9hZGRfZXh0ZW5kZWRhdHRyJiMzNDssCiAgICAmIzM0O3VkZl93cml0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtfX3VkZl9pZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgVURGIGRldmljZSBzcGVjaWZpY2F0aW9uIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIGZpeGVzIGVycm9yIGhhbmRsaW5nL3Byb3BhZ2F0aW9uIGZvciBjb3JydXB0ZWQgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiBVREYgZmlsZXN5c3RlbSBpbm9kZSByZWFkL3dyaXRlIHBhdGhzLiBUaGlzIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBieSBtb3VudGluZyBhbmQgcmVhZGluZy93cml0aW5nIGNyYWZ0ZWQgVURGIGZpbGVzeXN0ZW0gaW1hZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVREZfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZGZfZ2V0X2V4dGVuZGVkYXR0ciYjMzQ7LAogICAgJiMzNDt1ZGZfYWRkX2V4dGVuZGVkYXR0ciYjMzQ7LAogICAgJiMzNDt1ZGZfd3JpdGVfaW5vZGUmIzM0OywKICAgICYjMzQ7X191ZGZfaWdldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIFVERiBkZXZpY2Ugc3BlY2lmaWNhdGlvbiBleHRlbmRlZCBhdHRyaWJ1dGVzIGFuZCBmaXhlcyBlcnJvciBoYW5kbGluZy9wcm9wYWdhdGlvbiBmb3IgY29ycnVwdGVkIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gVURGIGZpbGVzeXN0ZW0gaW5vZGUgcmVhZC93cml0ZSBwYXRocy4gVGhpcyBpcyBkaXJlY3RseSByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIHJlYWRpbmcvd3JpdGluZyBjcmFmdGVkIFVERiBmaWxlc3lzdGVtIGltYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc2FuaXR5IGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIFVERiBmaWxlc3lzdGVtIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSBmb3IgZGV2aWNlU3BlYyBhdHRyaWJ1dGVzIG9uIHNwZWNpYWwgZGV2aWNlIGlub2RlcyAoY2hhcmFjdGVyL2Jsb2NrIGRldmljZXMpLiBJdCBpbnRyb2R1Y2VzIGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoKWAgdG8gdmFsaWRhdGUgYXR0cmlidXRlIGFuZCBpbXBsZW1lbnRhdGlvbi11c2UgbGVuZ3RocyBhZ2FpbnN0IGJ1ZmZlciBib3VuZHMsIHByb3Blcmx5IGhhbmRsZXMgYEVSUl9QVFJgIGVycm9yIHJldHVybnMgZnJvbSBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cigpYCwgYW5kIGZpeGVzIGxvb3AgYm91bmRhcnkgY2hlY2tzIHdoZW4gaXRlcmF0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMuXG5cblRoZXNlIGNoYW5nZXMgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb24gY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBmYWxsIHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZjQwOGM3MzhkYTk4OTQ1OWE4YmYwODUzZGFhN2MxNDFlZmZjNzQ5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAyMDowODo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggZTQ1ZTU0NmE3MzlhOS4uOGJhYmMyZmJjZTlhMSAxMDA2NDQKLS0tIGEvZnMvdWRmL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWRmL2lub2RlLmMKQEAgLTEzMzYsNiAmIzQzOzEzMzYsMjYgQEAgaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKQogCXJldHVybiBlcnI7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFZlcmlmeSB2YWxpZGl0eSBvZiBzdHJ1Y3QgZGV2aWNlU3BlYyBvbiBkaXNrLiB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpIGhhcwomIzQzOyAqIGFscmVhZHkgdmVyaWZpZWQgdGhlIGdlbmVyaWMgaGVhZGVyIGFuZCBtYWRlIHN1cmUgYXR0cmlidXRlIGZpdHMgaW4gdGhlCiYjNDM7ICogaW5vZGUgc28gd2UganVzdCBoYXZlIHRvIG1ha2Ugc3VyZSBhdHRyaWJ1dGUgc3BhY2UgaXMgbGFyZ2UgZW5vdWdoIGZvcgomIzQzOyAqIGRldmljZVNwZWMgc3RydWN0IGFuZCByZXF1aXJlZCBpbXBVc2UgaW5mb3JtYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgdWRmX2RldmljZV9zcGVjX3ZhbGlkKHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhKQomIzQzO3sKJiM0MzsJdTMyIGF0dHJfbGVuZ3RoLCBpbXBfdXNlX2xlbmd0aDsKJiM0MzsKJiM0MzsJYXR0cl9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLSZndDthdHRyTGVuZ3RoKTsKJiM0MzsJaW1wX3VzZV9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLSZndDtpbXBVc2VMZW5ndGgpOwomIzQzOwlpZiAoYXR0cl9sZW5ndGggJmx0OyBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpIHx8CiYjNDM7CSAgICBpbXBfdXNlX2xlbmd0aCAmbHQ7IHNpemVvZihzdHJ1Y3QgcmVnaWQpIHx8CiYjNDM7CSAgICBpbXBfdXNlX2xlbmd0aCAmZ3Q7IGF0dHJfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogLyoKICAqIE1heGltdW0gbGVuZ3RoIG9mIGxpbmtlZCBsaXN0IGZvcm1lZCBieSBJQ0IgaGllcmFyY2h5LiBUaGUgY2hvc2VuIG51bWJlciBpcwogICogYXJiaXRyYXJ5IC0ganVzdCB0aGF0IHdlIGhvcGVmdWxseSBkb24mIzM5O3QgbGltaXQgYW55IHJlYWwgdXNlIG9mIHJld3JpdHRlbgpAQCAtMTY1NCwxMyAmIzQzOzE2NzQsMTkgQEAgc3RhdGljIGludCB1ZGZfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGhpZGRlbl9pbm9kZSkKIAlpZiAoU19JU0NIUihpbm9kZS0mZ3Q7aV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLSZndDtpX21vZGUpKSB7CiAJCXN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID0KIAkJCShzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7Ci0JCWlmIChkc2VhKSB7Ci0JCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLSZndDtpX21vZGUsCiYjNDM7CiYjNDM7CQlpZiAoSVNfRVJSKGRzZWEpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihkc2VhKTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCS8qIERldmljZSBpbm9kZXMgbXVzdCBoYXZlIGEgZGV2aWNlIHNwZWMgYXR0cmlidXRlICovCiYjNDM7CQlpZiAoIWRzZWEgfHwgIXVkZl9kZXZpY2Vfc3BlY192YWxpZChkc2VhKSkgewomIzQzOwkJCXJldCA9IC1FRlNDT1JSVVBURUQ7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLSZndDtpX21vZGUsCiAJCQkJTUtERVYobGUzMl90b19jcHUoZHNlYS0mZ3Q7bWFqb3JEZXZpY2VJZGVudCksCiAJCQkJICAgICAgbGUzMl90b19jcHUoZHNlYS0mZ3Q7bWlub3JEZXZpY2VJZGVudCkpKTsKLQkJCS8qIERldmVsb3BlciBJRCA/Pz8gKi8KLQkJfSBlbHNlCi0JCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gMDsKIG91dDoKQEAgLTE3NTcsNiAmIzQzOzE3ODMsNyBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLSZndDtpX3NiKTsKIAl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTsKJiM0MzsJaW50IGVycjsKIAogCWJoID0gc2JfZ2V0YmxrKGlub2RlLSZndDtpX3NiLAogCQkJdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtJmd0O2lfc2IsICZhbXA7aWluZm8tJmd0O2lfbG9jYXRpb24sIDApKTsKQEAgLTE4MTYsMTEgJiM0MzsxODQzLDIxIEBAIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJCXN0cnVjdCByZWdpZCAqZWlkOwogCQlzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSA9CiAJCQkoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpOwomIzQzOwomIzQzOwkJLyogVmFsaWRpdHkgb2YgZXh0ZW5kZWQgYXR0cnMgd2FzIGNoZWNrZWQgb24gbG9hZCAqLwomIzQzOwkJaWYgKFdBUk5fT05fT05DRShJU19FUlIoZHNlYSkpKSB7CiYjNDM7CQkJZXJyID0gUFRSX0VSUihkc2VhKTsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiAJCWlmICghZHNlYSkgewogCQkJZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKQogCQkJCXVkZl9hZGRfZXh0ZW5kZWRhdHRyKGlub2RlLAogCQkJCQkJICAgICBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICYjNDM7CiAJCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgcmVnaWQpLCAxMiwgMHgzKTsKJiM0MzsJCQlpZiAoSVNfRVJSKGRzZWEpKSB7CiYjNDM7CQkJCWVyciA9IFBUUl9FUlIoZHNlYSk7CiYjNDM7CQkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCQl9CiAJCQlkc2VhLSZndDthdHRyVHlwZSA9IGNwdV90b19sZTMyKDEyKTsKIAkJCWRzZWEtJmd0O2F0dHJTdWJ0eXBlID0gMTsKIAkJCWRzZWEtJmd0O2F0dHJMZW5ndGggPSBjcHVfdG9fbGUzMigKQEAgLTE5NjIsNiAmIzQzOzE5OTksMTEgQEAgaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIAlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CXVubG9ja19idWZmZXIoYmgpOwomIzQzOwlicmVsc2UoYmgpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8sCmRpZmYgLS1naXQgYS9mcy91ZGYvbWlzYy5jIGIvZnMvdWRmL21pc2MuYwppbmRleCA2OTI4ZTM3OGZiYmRjLi5hMjA4NGRmYmZiZDY2IDEwMDY0NAotLS0gYS9mcy91ZGYvbWlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9taXNjLmMKQEAgLTU4LDcgJiM0Mzs1OCw3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLAogCQkJCQljcHVfdG9fbGUxNihUQUdfSURFTlRfRUFIRCkgfHwKIAkJCSAgICBsZTMyX3RvX2NwdShlYWhkLSZndDtkZXNjVGFnLnRhZ0xvY2F0aW9uKSAhPQogCQkJCQlpaW5mby0mZ3Q7aV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0pCi0JCQkJcmV0dXJuIE5VTEw7CiYjNDM7CQkJCXJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtJmd0O2lfc2IpOwogCkBAIC0xMjIsNyAmIzQzOzEyMiw3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLAogCQlyZXR1cm4gKHN0cnVjdCBnZW5lcmljRm9ybWF0ICopJmFtcDtlYVtvZmZzZXRdOwogCX0KIAotCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKIH0KIAogc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsCkBAIC0xNDQsNyAmIzQzOzE0NCw3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCB0eXBlLAogCQkJCWNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fAogCQkgICAgbGUzMl90b19jcHUoZWFoZC0mZ3Q7ZGVzY1RhZy50YWdMb2NhdGlvbikgIT0KIAkJCQlpaW5mby0mZ3Q7aV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0pCi0JCQlyZXR1cm4gTlVMTDsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTsKIAogCQlpZiAodHlwZSAmbHQ7IDIwNDgpCiAJCQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpOwpAQCAtMTUzLDE2ICYjNDM7MTUzLDE3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCB0eXBlLAogCQllbHNlCiAJCQlvZmZzZXQgPSBsZTMyX3RvX2NwdShlYWhkLSZndDthcHBBdHRyTG9jYXRpb24pOwogCi0JCXdoaWxlIChvZmZzZXQgJiM0Mzsgc2l6ZW9mKCpnYWYpICZsdDsgaWluZm8tJmd0O2lfbGVuRUF0dHIpIHsKJiM0MzsJCXdoaWxlIChvZmZzZXQgJmx0OwomIzQzOwkJICAgICAgIGlpbmZvLSZndDtpX2xlbkVBdHRyIC0gc2l6ZW9mKHN0cnVjdCBnZW5lcmljRm9ybWF0KSkgewogCQkJdWludDMyX3QgYXR0ckxlbmd0aDsKIAogCQkJZ2FmID0gKHN0cnVjdCBnZW5lcmljRm9ybWF0ICopJmFtcDtlYVtvZmZzZXRdOwogCQkJYXR0ckxlbmd0aCA9IGxlMzJfdG9fY3B1KGdhZi0mZ3Q7YXR0ckxlbmd0aCk7CiAKIAkJCS8qIERldGVjdCB1bmRlcnNpemVkIGVsZW1lbnRzIGFuZCBidWZmZXIgb3ZlcmZsb3dzICovCi0JCQlpZiAoKGF0dHJMZW5ndGggJmx0OyBzaXplb2YoKmdhZikpIHx8Ci0JCQkgICAgKGF0dHJMZW5ndGggJmd0OyAoaWluZm8tJmd0O2lfbGVuRUF0dHIgLSBvZmZzZXQpKSkKLQkJCQlicmVhazsKJiM0MzsJCQlpZiAoYXR0ckxlbmd0aCAmbHQ7IHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkgfHwKJiM0MzsJCQkgICAgYXR0ckxlbmd0aCAmZ3Q7IGlpbmZvLSZndDtpX2xlbkVBdHRyIC0gb2Zmc2V0KQomIzQzOwkJCQlyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTsKIAogCQkJaWYgKGxlMzJfdG9fY3B1KGdhZi0mZ3Q7YXR0clR5cGUpID09IHR5cGUgJmFtcDsmYW1wOwogCQkJCQlnYWYtJmd0O2F0dHJTdWJ0eXBlID09IHN1YnR5cGUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTExCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVURGIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgVURGIGZpbGVzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvdWRmL2lub2RlLmNgIGFuZCBgZnMvdWRmL21pc2MuY2AuIEl0IGFwcGVhcnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlbmhhbmNlZCBlcnJvciBoYW5kbGluZyBhbmQgdmFsaWRhdGlvbiBhcm91bmQgZXh0ZW5kZWQgYXR0cmlidXRlcywgbGlrZWx5IHRvIGltcHJvdmUgdGhlIG92ZXJhbGwgcm9idXN0bmVzcyBhbmQgc3RhYmlsaXR5IG9mIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLgoKRmlyc3QsIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHVkZl9kZXZpY2Vfc3BlY192YWxpZCgpYC4gVGhpcyBzdWdnZXN0cyB3ZSBhcmUgdmFsaWRhdGluZyB0aGUgYHN0cnVjdCBkZXZpY2VTcGVjYCB3aXRoaW4gYHVkZl9yZWFkX2lub2RlKClgLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyBpbm9kZSByZWFkcy4gVGhpcyBpcyBzbWFydCwgd2Ugc2hvdWxkIGJlIGRvaW5nIHRoaXMgdmFsaWRhdGlvbi4KClRoZSBjaGFuZ2VzIGluIGB1ZGZfcmVhZF9pbm9kZSgpYCBub3cgaW5jb3Jwb3JhdGUgZXJyb3IgaGFuZGxpbmcgZm9yIHRoZSBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgY2FsbCwgc3BlY2lmaWNhbGx5IGNoZWNraW5nIGZvciBgSVNfRVJSKGRzZWEpYCBhbmQgYXBwbHlpbmcgb3VyIG5ldyB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBUaGlzIG1lYW5zIHRoZSBjb2RlIGlzIG5vdyBncmFjZWZ1bGx5IGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgZnJvbSBhdHRyaWJ1dGUgcmV0cmlldmFsIGFuZCBwcmV2ZW50aW5nIGNvcnJ1cHRlZCBkYXRhIGZyb20gcHJvcGFnYXRpbmcuCgpJbiBgdWRmX3dyaXRlX2lub2RlKClgLCB3ZSBzZWUgc2ltaWxhciBlcnJvciBoYW5kbGluZyBhcm91bmQgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHIoKWAsIGp1bXBpbmcgdG8gYG91dF91bmxvY2tgIGFuZCByZXR1cm5pbmcgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgZmlsZXN5c3RlbSBjb3JydXB0aW9uIGR1cmluZyBpbm9kZSB3cml0ZXMuCgpGaW5hbGx5LCBpbiBgZnMvdWRmL21pc2MuY2AsIHRoZSBjaGFuZ2VzIHRvIHRoZSByZXR1cm4gdmFsdWVzIG9mIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cigpYCBhbmQgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGZyb20gYE5VTExgIHRvIGBFUlJfUFRSKC4uLilgIGFyZSBzaWduaWZpY2FudC4gVGhpcyBpcyBhIGNydWNpYWwgaW1wcm92ZW1lbnQgaW4gZXJyb3IgcmVwb3J0aW5nLiBQcmV2aW91c2x5IGEgYE5VTExgIHJldHVybiBjb3VsZCBiZSBhbWJpZ3VvdXMuIFRoZSBpbnRyb2R1Y3Rpb24gb2Ygc3BlY2lmaWMgZXJyb3IgY29kZXMgbGlrZSBgRVJSX1BUUigtRUZTQ09SUlVQVEVEKWAgZm9yIGJvdW5kcyBjaGVja3Mgd2l0aGluIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpYCBpcyBwYXJ0aWN1bGFybHkgaGVscGZ1bCBmb3IgZGVidWdnaW5nLiBUaGUgdXNlIG9mIGVycm9yIHBvaW50ZXJzIGNsYXJpZmllcyBlcnJvciBwYXRocywgYW5kIGVuYWJsZXMgYmV0dGVyIGRlYnVnZ2luZy4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHdpZGVyIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gaWRlbnRpZnkgKmFsbCogY2FsbGVycyBvZiBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHJgIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBsb2NhbGl6ZWQsIG9yIGlmIHRoZXJlIGFyZSBrbm9jay1vbiBlZmZlY3RzIGVsc2V3aGVyZS4gVGhpcyB3aWRlciByZXZpZXcgaXMgZXNzZW50aWFsIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBhbnkgb3RoZXIgY29kZSBwYXRocyBuZWVkIHRvIGJlIGFkanVzdGVkIHRvIGhhbmRsZSB0aGUgbmV3IGBFUlJfUFRSKC4uLilgIHJldHVybiB2YWx1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkZl8oZ2V0fGFkZClfZXh0ZW5kZWRhdHRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3VkZi9pbm9kZS5jPTEyODA9aW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKVxuLS1cbmZzL3VkZi9pbm9kZS5jLTEzMzktLypcbmZzL3VkZi9pbm9kZS5jOjEzNDA6ICogVmVyaWZ5IHZhbGlkaXR5IG9mIHN0cnVjdCBkZXZpY2VTcGVjIG9uIGRpc2suIHVkZl9nZXRfZXh0ZW5kZWRhdHRyKCkgaGFzXG5mcy91ZGYvaW5vZGUuYy0xMzQxLSAqIGFscmVhZHkgdmVyaWZpZWQgdGhlIGdlbmVyaWMgaGVhZGVyIGFuZCBtYWRlIHN1cmUgYXR0cmlidXRlIGZpdHMgaW4gdGhlXG4tLVxuZnMvdWRmL2lub2RlLmM9MTM2Nj1zdGF0aWMgaW50IHVkZl9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgaGlkZGVuX2lub2RlKVxuLS1cbmZzL3VkZi9pbm9kZS5jLTE2NzUtXHRcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cbmZzL3VkZi9pbm9kZS5jOjE2NzY6XHRcdFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcbmZzL3VkZi9pbm9kZS5jLTE2NzctXG4tLVxuZnMvdWRmL2lub2RlLmM9MTc3ND1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL3VkZi9pbm9kZS5jLTE4NDQtXHRcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cbmZzL3VkZi9pbm9kZS5jOjE4NDU6XHRcdFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcbmZzL3VkZi9pbm9kZS5jLTE4NDYtXG4tLVxuZnMvdWRmL2lub2RlLmMtMTg1My1cdFx0XHRkc2VhID0gKHN0cnVjdCBkZXZpY2VTcGVjICopXG5mcy91ZGYvaW5vZGUuYzoxODU0Olx0XHRcdFx0dWRmX2FkZF9leHRlbmRlZGF0dHIoaW5vZGUsXG5mcy91ZGYvaW5vZGUuYy0xODU1LVx0XHRcdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSAmIzQzO1xuLS1cbmZzL3VkZi9taXNjLmMtMjYtXG5mcy91ZGYvbWlzYy5jOjI3OnN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLFxuZnMvdWRmL21pc2MuYy0yOC1cdFx0XHRcdFx0ICAgdWludDMyX3QgdHlwZSwgdWludDhfdCBsb2MpXG4tLVxuZnMvdWRmL21pc2MuYy0xMjctXG5mcy91ZGYvbWlzYy5jOjEyODpzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcbmZzL3VkZi9taXNjLmMtMTI5LVx0XHRcdFx0XHQgICB1aW50OF90IHN1YnR5cGUpXG4tLVxuZnMvdWRmL3VkZmRlY2wuaD0xODE9ZXh0ZXJuIHZvaWQgdWRmX3VwZGF0ZV9leHRyYV9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bW9kZV90IG1vZGUpO1xuLS1cbmZzL3VkZi91ZGZkZWNsLmgtMTgzLS8qIG1pc2MuYyAqL1xuZnMvdWRmL3VkZmRlY2wuaDoxODQ6ZXh0ZXJuIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKiwgdWludDMyX3QsXG5mcy91ZGYvdWRmZGVjbC5oLTE4NS1cdFx0XHRcdFx0XHQgIHVpbnQzMl90LCB1aW50OF90KTtcbmZzL3VkZi91ZGZkZWNsLmg6MTg2OmV4dGVybiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICosIHVpbnQzMl90LFxuZnMvdWRmL3VkZmRlY2wuaC0xODctXHRcdFx0XHRcdFx0ICB1aW50OF90KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUyMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBVREYgRXh0ZW5kZWQgQXR0cmlidXRlIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIFVERiBmaWxlc3lzdGVtIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGZzL3VkZi9taXNjLmNgLiBJIG5lZWQgdG8gcmV2aWV3IHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHJgLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIFVERiBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBvbi1kaXNrIGZvcm1hdC4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG51YW5jZXMgaW4gaG93IGF0dHJpYnV0ZXMgYXJlIHN0b3JlZCwgaW5kZXhlZCwgYW5kIHJldHJpZXZlZC4gQXJlIHRoZXJlIGFueSBwYXJ0aWN1bGFyIGVycm9yIGNvbmRpdGlvbnMgdGhhdCBhcmUgaGFuZGxlZCBkZWxpY2F0ZWx5PyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIHRoZSBhcHByb2FjaD8gUGVyaGFwcyBzb21lIGludGVyZXN0aW5nIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIHRoYXQgd2VyZSBhcHBsaWVkIGluIHRoZSBwYXN0LiBUaGlzIGRlZXAgZGl2ZSBpcyBjcnVjaWFsIGZvciBbKippbnNlcnQgc3BlY2lmaWMgcmVhc29uIG9yIHRhc2ssIGUuZy4sIHVuZGVyc3RhbmRpbmcgYSByZXBvcnRlZCBwZXJmb3JtYW5jZSBpc3N1ZSwgcHJlcGFyaW5nIGZvciBhIHBvdGVudGlhbCBzZWN1cml0eSBhdWRpdCwgb3IgZXh0ZW5kaW5nIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgZmVhdHVyZXMuKipdLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZXZpbCBpbiB0aGUgZGV0YWlscyBoZXJlLCBhbmQgdGhhdCYjMzk7cyBwcmVjaXNlbHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3VkZi9taXNjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qXG4gICAzOlx0ICogbWlzYy5jXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBQVVJQT1NFXG4gICA2Olx0ICpcdE1pc2NlbGxhbmVvdXMgcm91dGluZXMgZm9yIHRoZSBPU1RBLVVERih0bSkgZmlsZXN5c3RlbS5cbiAgIDc6XHQgKlxuICAgODpcdCAqIENPUFlSSUdIVFxuICAgOTpcdCAqICAoQykgMTk5OCBEYXZlIEJveW50b25cbiAgMTA6XHQgKiAgKEMpIDE5OTgtMjAwNCBCZW4gRmVubmVtYVxuICAxMTpcdCAqICAoQykgMTk5OS0yMDAwIFN0ZWxpYXMgQ29tcHV0aW5nIEluY1xuICAxMjpcdCAqXG4gIDEzOlx0ICogSElTVE9SWVxuICAxNDpcdCAqXG4gIDE1Olx0ICogIDA0LzE5Lzk5IGJsZiAgcGFydGlhbCBzdXBwb3J0IGZvciByZWFkaW5nL3dyaXRpbmcgc3BlY2lmaWMgRUEmIzM5O3NcbiAgMTY6XHQgKi9cbiAgMTc6XHRcbiAgMTg6XHQjaW5jbHVkZSBcJiMzNDt1ZGZkZWNsLmhcJiMzNDtcbiAgMTk6XHRcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAgMjI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMtaXR1LXQuaFx1MDAzZVxuICAyMzpcdFxuICAyNDpcdCNpbmNsdWRlIFwmIzM0O3VkZl9pLmhcJiMzNDtcbiAgMjU6XHQjaW5jbHVkZSBcJiMzNDt1ZGZfc2IuaFwmIzM0O1xuICAyNjpcdFxuICAyNzpcdHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLFxuICAyODpcdFx0XHRcdFx0XHQgICB1aW50MzJfdCB0eXBlLCB1aW50OF90IGxvYylcbiAgMjk6XHR7XG4gIDMwOlx0XHR1aW50OF90ICplYSA9IE5VTEwsICphZCA9IE5VTEw7XG4gIDMxOlx0XHRpbnQgb2Zmc2V0O1xuICAzMjpcdFx0dWludDE2X3QgY3JjbGVuO1xuICAzMzpcdFx0c3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTtcbiAgMzQ6XHRcbiAgMzU6XHRcdGVhID0gaWluZm8tXHUwMDNlaV9kYXRhO1xuICAzNjpcdFx0aWYgKGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIpIHtcbiAgMzc6XHRcdFx0YWQgPSBpaW5mby1cdTAwM2VpX2RhdGEgJiM0MzsgaWluZm8tXHUwMDNlaV9sZW5FQXR0cjtcbiAgMzg6XHRcdH0gZWxzZSB7XG4gIDM5Olx0XHRcdGFkID0gZWE7XG4gIDQwOlx0XHRcdHNpemUgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYyk7XG4gIDQxOlx0XHR9XG4gIDQyOlx0XG4gIDQzOlx0XHRvZmZzZXQgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIC0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSAtXG4gIDQ0Olx0XHRcdGlpbmZvLVx1MDAzZWlfbGVuQWxsb2M7XG4gIDQ1Olx0XG4gIDQ2Olx0XHQvKiBUT0RPIC0gQ2hlY2sgZm9yIEZyZWVFQVNwYWNlICovXG4gIDQ3Olx0XG4gIDQ4Olx0XHRpZiAobG9jIFx1MDAyNiAweDAxIFx1MDAyNlx1MDAyNiBvZmZzZXQgXHUwMDNlPSBzaXplKSB7XG4gIDQ5Olx0XHRcdHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjICplYWhkO1xuICA1MDpcdFx0XHRlYWhkID0gKHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjICopZWE7XG4gIDUxOlx0XG4gIDUyOlx0XHRcdGlmIChpaW5mby1cdTAwM2VpX2xlbkFsbG9jKVxuICA1MzpcdFx0XHRcdG1lbW1vdmUoXHUwMDI2YWRbc2l6ZV0sIGFkLCBpaW5mby1cdTAwM2VpX2xlbkFsbG9jKTtcbiAgNTQ6XHRcbiAgNTU6XHRcdFx0aWYgKGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIpIHtcbiAgNTY6XHRcdFx0XHQvKiBjaGVjayBjaGVja3N1bS9jcmMgKi9cbiAgNTc6XHRcdFx0XHRpZiAoZWFoZC1cdTAwM2VkZXNjVGFnLnRhZ0lkZW50ICE9XG4gIDU4Olx0XHRcdFx0XHRcdGNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fFxuICA1OTpcdFx0XHRcdCAgICBsZTMyX3RvX2NwdShlYWhkLVx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XG4gIDYwOlx0XHRcdFx0XHRcdGlpbmZvLVx1MDAzZWlfbG9jYXRpb24ubG9naWNhbEJsb2NrTnVtKVxuICA2MTpcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVGU0NPUlJVUFRFRCk7XG4gIDYyOlx0XHRcdH0gZWxzZSB7XG4gIDYzOlx0XHRcdFx0c3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gIDY0Olx0XG4gIDY1Olx0XHRcdFx0c2l6ZSAtPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xuICA2NjpcdFx0XHRcdGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIgJiM0Mzs9XG4gIDY3Olx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xuICA2ODpcdFx0XHRcdGVhaGQtXHUwMDNlZGVzY1RhZy50YWdJZGVudCA9IGNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKTtcbiAgNjk6XHRcdFx0XHRpZiAoc2JpLVx1MDAzZXNfdWRmcmV2IFx1MDAzZT0gMHgwMjAwKVxuICA3MDpcdFx0XHRcdFx0ZWFoZC1cdTAwM2VkZXNjVGFnLmRlc2NWZXJzaW9uID0gY3B1X3RvX2xlMTYoMyk7XG4gIDcxOlx0XHRcdFx0ZWxzZVxuICA3MjpcdFx0XHRcdFx0ZWFoZC1cdTAwM2VkZXNjVGFnLmRlc2NWZXJzaW9uID0gY3B1X3RvX2xlMTYoMik7XG4gIDczOlx0XHRcdFx0ZWFoZC1cdTAwM2VkZXNjVGFnLnRhZ1NlcmlhbE51bSA9XG4gIDc0Olx0XHRcdFx0XHRcdGNwdV90b19sZTE2KHNiaS1cdTAwM2VzX3NlcmlhbF9udW1iZXIpO1xuICA3NTpcdFx0XHRcdGVhaGQtXHUwMDNlZGVzY1RhZy50YWdMb2NhdGlvbiA9IGNwdV90b19sZTMyKFxuICA3NjpcdFx0XHRcdFx0XHRpaW5mby1cdTAwM2VpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSk7XG4gIDc3Olx0XHRcdFx0ZWFoZC1cdTAwM2VpbXBBdHRyTG9jYXRpb24gPSBjcHVfdG9fbGUzMigweEZGRkZGRkZGKTtcbiAgNzg6XHRcdFx0XHRlYWhkLVx1MDAzZWFwcEF0dHJMb2NhdGlvbiA9IGNwdV90b19sZTMyKDB4RkZGRkZGRkYpO1xuICA3OTpcdFx0XHR9XG4gIDgwOlx0XG4gIDgxOlx0XHRcdG9mZnNldCA9IGlpbmZvLVx1MDAzZWlfbGVuRUF0dHI7XG4gIDgyOlx0XHRcdGlmICh0eXBlIFx1MDAzYyAyMDQ4KSB7XG4gIDgzOlx0XHRcdFx0aWYgKGxlMzJfdG9fY3B1KGVhaGQtXHUwMDNlYXBwQXR0ckxvY2F0aW9uKSBcdTAwM2NcbiAgODQ6XHRcdFx0XHRcdFx0aWluZm8tXHUwMDNlaV9sZW5FQXR0cikge1xuICA4NTpcdFx0XHRcdFx0dWludDMyX3QgYWFsID1cbiAgODY6XHRcdFx0XHRcdFx0bGUzMl90b19jcHUoZWFoZC1cdTAwM2VhcHBBdHRyTG9jYXRpb24pO1xuICA4NzpcdFx0XHRcdFx0bWVtbW92ZShcdTAwMjZlYVtvZmZzZXQgLSBhYWwgJiM0Mzsgc2l6ZV0sXG4gIDg4Olx0XHRcdFx0XHRcdFx1MDAyNmVhW2FhbF0sIG9mZnNldCAtIGFhbCk7XG4gIDg5Olx0XHRcdFx0XHRvZmZzZXQgLT0gYWFsO1xuICA5MDpcdFx0XHRcdFx0ZWFoZC1cdTAwM2VhcHBBdHRyTG9jYXRpb24gPVxuICA5MTpcdFx0XHRcdFx0XHRcdGNwdV90b19sZTMyKGFhbCAmIzQzOyBzaXplKTtcbiAgOTI6XHRcdFx0XHR9XG4gIDkzOlx0XHRcdFx0aWYgKGxlMzJfdG9fY3B1KGVhaGQtXHUwMDNlaW1wQXR0ckxvY2F0aW9uKSBcdTAwM2NcbiAgOTQ6XHRcdFx0XHRcdFx0aWluZm8tXHUwMDNlaV9sZW5FQXR0cikge1xuICA5NTpcdFx0XHRcdFx0dWludDMyX3QgaWFsID1cbiAgOTY6XHRcdFx0XHRcdFx0bGUzMl90b19jcHUoZWFoZC1cdTAwM2VpbXBBdHRyTG9jYXRpb24pO1xuICA5NzpcdFx0XHRcdFx0bWVtbW92ZShcdTAwMjZlYVtvZmZzZXQgLSBpYWwgJiM0Mzsgc2l6ZV0sXG4gIDk4Olx0XHRcdFx0XHRcdFx1MDAyNmVhW2lhbF0sIG9mZnNldCAtIGlhbCk7XG4gIDk5Olx0XHRcdFx0XHRvZmZzZXQgLT0gaWFsO1xuIDEwMDpcdFx0XHRcdFx0ZWFoZC1cdTAwM2VpbXBBdHRyTG9jYXRpb24gPVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzgzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBzcGVjaWZpY2FsbHkgb24gbGluZXMgMTAxIHRvIDE4MCBvZiBgZnMvdWRmL21pc2MuY2AuIEkga25vdyB0aGlzIGlzIGEgc3BlY2lmaWMgY2h1bmssIGFuZCBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgYXNwZWN0IG9mIFVERiBmaWxlc3lzdGVtIG1pc2MgZnVuY3Rpb25zIOKAkyBlaXRoZXIgaW5pdGlhbGl6YXRpb24sIGVycm9yIGhhbmRsaW5nLCBvciBwZXJoYXBzIHNvbWUgbG93LWxldmVsIEkvTyBvcGVyYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgc29tZSBpbnRlcm5hbCBmdW5jdGlvbiBjYWxscywgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBhbmQgbGlrZWx5IHNvbWUgY29uZGl0aW9uYWwgbG9naWMuIEtub3dpbmcgVURGLCBJIHN1c3BlY3QgdGhlcmUmIzM5O2xsIGJlIGEgZGVjZW50IGFtb3VudCBvZiBiaXQtbWFza2luZyBhbmQgc3RydWN0dXJlIGFjY2VzcyBpbnZvbHZlZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHBhcnRpY3VsYXIgc2VnbWVudCB0b3VjaGVzIHVwb24gbWV0YWRhdGEgcmVhZHMsIGJsb2NrIGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgZmlsZXN5c3RlbSBqb3VybmFsaW5nIHJlbGF0ZWQgdG8gVURGLiBSZWFkeSB0byBhbmFseXplLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3VkZi9taXNjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMTpcdFx0XHRcdFx0XHRcdGNwdV90b19sZTMyKGlhbCAmIzQzOyBzaXplKTtcbiAxMDI6XHRcdFx0XHR9XG4gMTAzOlx0XHRcdH0gZWxzZSBpZiAodHlwZSBcdTAwM2MgNjU1MzYpIHtcbiAxMDQ6XHRcdFx0XHRpZiAobGUzMl90b19jcHUoZWFoZC1cdTAwM2VhcHBBdHRyTG9jYXRpb24pIFx1MDAzY1xuIDEwNTpcdFx0XHRcdFx0XHRpaW5mby1cdTAwM2VpX2xlbkVBdHRyKSB7XG4gMTA2Olx0XHRcdFx0XHR1aW50MzJfdCBhYWwgPVxuIDEwNzpcdFx0XHRcdFx0XHRsZTMyX3RvX2NwdShlYWhkLVx1MDAzZWFwcEF0dHJMb2NhdGlvbik7XG4gMTA4Olx0XHRcdFx0XHRtZW1tb3ZlKFx1MDAyNmVhW29mZnNldCAtIGFhbCAmIzQzOyBzaXplXSxcbiAxMDk6XHRcdFx0XHRcdFx0XHUwMDI2ZWFbYWFsXSwgb2Zmc2V0IC0gYWFsKTtcbiAxMTA6XHRcdFx0XHRcdG9mZnNldCAtPSBhYWw7XG4gMTExOlx0XHRcdFx0XHRlYWhkLVx1MDAzZWFwcEF0dHJMb2NhdGlvbiA9XG4gMTEyOlx0XHRcdFx0XHRcdFx0Y3B1X3RvX2xlMzIoYWFsICYjNDM7IHNpemUpO1xuIDExMzpcdFx0XHRcdH1cbiAxMTQ6XHRcdFx0fVxuIDExNTpcdFx0XHQvKiByZXdyaXRlIENSQyAmIzQzOyBjaGVja3N1bSBvZiBlYWhkICovXG4gMTE2Olx0XHRcdGNyY2xlbiA9IHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYykgLSBzaXplb2Yoc3RydWN0IHRhZyk7XG4gMTE3Olx0XHRcdGVhaGQtXHUwMDNlZGVzY1RhZy5kZXNjQ1JDTGVuZ3RoID0gY3B1X3RvX2xlMTYoY3JjbGVuKTtcbiAxMTg6XHRcdFx0ZWFoZC1cdTAwM2VkZXNjVGFnLmRlc2NDUkMgPSBjcHVfdG9fbGUxNihjcmNfaXR1X3QoMCwgKGNoYXIgKillYWhkICYjNDM7XG4gMTE5Olx0XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB0YWcpLCBjcmNsZW4pKTtcbiAxMjA6XHRcdFx0ZWFoZC1cdTAwM2VkZXNjVGFnLnRhZ0NoZWNrc3VtID0gdWRmX3RhZ19jaGVja3N1bShcdTAwMjZlYWhkLVx1MDAzZWRlc2NUYWcpO1xuIDEyMTpcdFx0XHRpaW5mby1cdTAwM2VpX2xlbkVBdHRyICYjNDM7PSBzaXplO1xuIDEyMjpcdFx0XHRyZXR1cm4gKHN0cnVjdCBnZW5lcmljRm9ybWF0ICopXHUwMDI2ZWFbb2Zmc2V0XTtcbiAxMjM6XHRcdH1cbiAxMjQ6XHRcbiAxMjU6XHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIDEyNjpcdH1cbiAxMjc6XHRcbiAxMjg6XHRzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcbiAxMjk6XHRcdFx0XHRcdFx0ICAgdWludDhfdCBzdWJ0eXBlKVxuIDEzMDpcdHtcbiAxMzE6XHRcdHN0cnVjdCBnZW5lcmljRm9ybWF0ICpnYWY7XG4gMTMyOlx0XHR1aW50OF90ICplYSA9IE5VTEw7XG4gMTMzOlx0XHR1aW50MzJfdCBvZmZzZXQ7XG4gMTM0Olx0XHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xuIDEzNTpcdFxuIDEzNjpcdFx0ZWEgPSBpaW5mby1cdTAwM2VpX2RhdGE7XG4gMTM3Olx0XG4gMTM4Olx0XHRpZiAoaWluZm8tXHUwMDNlaV9sZW5FQXR0cikge1xuIDEzOTpcdFx0XHRzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYyAqZWFoZDtcbiAxNDA6XHRcdFx0ZWFoZCA9IChzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYyAqKWVhO1xuIDE0MTpcdFxuIDE0MjpcdFx0XHQvKiBjaGVjayBjaGVja3N1bS9jcmMgKi9cbiAxNDM6XHRcdFx0aWYgKGVhaGQtXHUwMDNlZGVzY1RhZy50YWdJZGVudCAhPVxuIDE0NDpcdFx0XHRcdFx0Y3B1X3RvX2xlMTYoVEFHX0lERU5UX0VBSEQpIHx8XG4gMTQ1Olx0XHRcdCAgICBsZTMyX3RvX2NwdShlYWhkLVx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XG4gMTQ2Olx0XHRcdFx0XHRpaW5mby1cdTAwM2VpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSlcbiAxNDc6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbiAxNDg6XHRcbiAxNDk6XHRcdFx0aWYgKHR5cGUgXHUwMDNjIDIwNDgpXG4gMTUwOlx0XHRcdFx0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjKTtcbiAxNTE6XHRcdFx0ZWxzZSBpZiAodHlwZSBcdTAwM2MgNjU1MzYpXG4gMTUyOlx0XHRcdFx0b2Zmc2V0ID0gbGUzMl90b19jcHUoZWFoZC1cdTAwM2VpbXBBdHRyTG9jYXRpb24pO1xuIDE1MzpcdFx0XHRlbHNlXG4gMTU0Olx0XHRcdFx0b2Zmc2V0ID0gbGUzMl90b19jcHUoZWFoZC1cdTAwM2VhcHBBdHRyTG9jYXRpb24pO1xuIDE1NTpcdFxuIDE1NjpcdFx0XHR3aGlsZSAob2Zmc2V0IFx1MDAzY1xuIDE1NzpcdFx0XHQgICAgICAgaWluZm8tXHUwMDNlaV9sZW5FQXR0ciAtIHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkpIHtcbiAxNTg6XHRcdFx0XHR1aW50MzJfdCBhdHRyTGVuZ3RoO1xuIDE1OTpcdFxuIDE2MDpcdFx0XHRcdGdhZiA9IChzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqKVx1MDAyNmVhW29mZnNldF07XG4gMTYxOlx0XHRcdFx0YXR0ckxlbmd0aCA9IGxlMzJfdG9fY3B1KGdhZi1cdTAwM2VhdHRyTGVuZ3RoKTtcbiAxNjI6XHRcbiAxNjM6XHRcdFx0XHQvKiBEZXRlY3QgdW5kZXJzaXplZCBlbGVtZW50cyBhbmQgYnVmZmVyIG92ZXJmbG93cyAqL1xuIDE2NDpcdFx0XHRcdGlmIChhdHRyTGVuZ3RoIFx1MDAzYyBzaXplb2Yoc3RydWN0IGdlbmVyaWNGb3JtYXQpIHx8XG4gMTY1Olx0XHRcdFx0ICAgIGF0dHJMZW5ndGggXHUwMDNlIGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIgLSBvZmZzZXQpXG4gMTY2Olx0XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbiAxNjc6XHRcbiAxNjg6XHRcdFx0XHRpZiAobGUzMl90b19jcHUoZ2FmLVx1MDAzZWF0dHJUeXBlKSA9PSB0eXBlIFx1MDAyNlx1MDAyNlxuIDE2OTpcdFx0XHRcdFx0XHRnYWYtXHUwMDNlYXR0clN1YnR5cGUgPT0gc3VidHlwZSlcbiAxNzA6XHRcdFx0XHRcdHJldHVybiBnYWY7XG4gMTcxOlx0XHRcdFx0ZWxzZVxuIDE3MjpcdFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBhdHRyTGVuZ3RoO1xuIDE3MzpcdFx0XHR9XG4gMTc0Olx0XHR9XG4gMTc1Olx0XG4gMTc2Olx0XHRyZXR1cm4gTlVMTDtcbiAxNzc6XHR9XG4gMTc4Olx0XG4gMTc5Olx0LypcbiAxODA6XHQgKiB1ZGZfcmVhZF90YWdnZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHBsYXlpbmcgdGhlIHJvbGU6CgoqKkRlZXAgRGl2ZSBpbnRvIFVERiBJbm9kZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGdyYXNwIG9uIGhvdyB0aGUgVURGIGZpbGVzeXN0ZW0gaGFuZGxlcyBpdHMgaW5vZGVzLCBzcGVjaWZpY2FsbHkgdGhlIGB1ZGZfcmVhZF9pbm9kZWAgYW5kIGB1ZGZfd3JpdGVfaW5vZGVgIGZ1bmN0aW9ucy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoZSBjcnVjaWFsIGNvbnRleHQgaXMgdXN1YWxseSBhIGZldyBsaW5lcyBhcm91bmQgdGhlIHByaW1hcnkgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGZzL3VkZi9pbm9kZS5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoZSBsaW5lcyBiZXR3ZWVuIDE2NTAgYW5kIDE4ODAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBkZXRhaWxlZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgVURGIG1ldGFkYXRhIHN0cnVjdHVyZXMuIEkgZXhwZWN0IHRvIHNlZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHJlYWQsIHdyaXR0ZW4sIGFuZCBwb3RlbnRpYWxseSBjYWNoZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgZmxvdyB3aXRoaW4gdGhhdCByYW5nZSBpcyBrZXkuIEtub3dpbmcgdGhlIGxvZ2ljIGluIHRoYXQgc21hbGwgc2NvcGUgc2hvdWxkIHF1aWNrbHkgYWxsb3cgZm9yIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBicm9hZGVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdWRmL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NjA6XHRcdGNhc2UgSUNCVEFHX0ZJTEVfVFlQRV9NQUlOOlxuMTY2MTpcdFx0XHR1ZGZfZGVidWcoXCYjMzQ7TUVUQURBVEEgRklMRS0tLS0tXFxuXCYjMzQ7KTtcbjE2NjI6XHRcdFx0YnJlYWs7XG4xNjYzOlx0XHRjYXNlIElDQlRBR19GSUxFX1RZUEVfTUlSUk9SOlxuMTY2NDpcdFx0XHR1ZGZfZGVidWcoXCYjMzQ7TUVUQURBVEEgTUlSUk9SIEZJTEUtLS0tLVxcblwmIzM0Oyk7XG4xNjY1Olx0XHRcdGJyZWFrO1xuMTY2NjpcdFx0Y2FzZSBJQ0JUQUdfRklMRV9UWVBFX0JJVE1BUDpcbjE2Njc6XHRcdFx0dWRmX2RlYnVnKFwmIzM0O01FVEFEQVRBIEJJVE1BUCBGSUxFLS0tLS1cXG5cJiMzNDspO1xuMTY2ODpcdFx0XHRicmVhaztcbjE2Njk6XHRcdGRlZmF1bHQ6XG4xNjcwOlx0XHRcdHVkZl9lcnIoaW5vZGUtXHUwMDNlaV9zYiwgXCYjMzQ7KGlubyAlbGx1KSBmYWlsZWQgdW5rbm93biBmaWxlIHR5cGU9JXVcXG5cJiMzNDssXG4xNjcxOlx0XHRcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIGZlLVx1MDAzZWljYlRhZy5maWxlVHlwZSk7XG4xNjcyOlx0XHRcdGdvdG8gb3V0O1xuMTY3MzpcdFx0fVxuMTY3NDpcdFx0aWYgKFNfSVNDSFIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbjE2NzU6XHRcdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuMTY3NjpcdFx0XHRcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XG4xNjc3Olx0XG4xNjc4Olx0XHRcdGlmIChJU19FUlIoZHNlYSkpIHtcbjE2Nzk6XHRcdFx0XHRyZXQgPSBQVFJfRVJSKGRzZWEpO1xuMTY4MDpcdFx0XHRcdGdvdG8gb3V0O1xuMTY4MTpcdFx0XHR9XG4xNjgyOlx0XHRcdC8qIERldmljZSBpbm9kZXMgbXVzdCBoYXZlIGEgZGV2aWNlIHNwZWMgYXR0cmlidXRlICovXG4xNjgzOlx0XHRcdGlmICghZHNlYSB8fCAhdWRmX2RldmljZV9zcGVjX3ZhbGlkKGRzZWEpKSB7XG4xNjg0Olx0XHRcdFx0cmV0ID0gLUVGU0NPUlJVUFRFRDtcbjE2ODU6XHRcdFx0XHRnb3RvIG91dDtcbjE2ODY6XHRcdFx0fVxuMTY4NzpcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfbW9kZSxcbjE2ODg6XHRcdFx0XHRcdE1LREVWKGxlMzJfdG9fY3B1KGRzZWEtXHUwMDNlbWFqb3JEZXZpY2VJZGVudCksXG4xNjg5Olx0XHRcdFx0XHQgICAgICBsZTMyX3RvX2NwdShkc2VhLVx1MDAzZW1pbm9yRGV2aWNlSWRlbnQpKSk7XG4xNjkwOlx0XHR9XG4xNjkxOlx0XHRyZXQgPSAwO1xuMTY5MjpcdG91dDpcbjE2OTM6XHRcdGJyZWxzZShiaCk7XG4xNjk0Olx0XHRyZXR1cm4gcmV0O1xuMTY5NTpcdH1cbjE2OTY6XHRcbjE2OTc6XHRzdGF0aWMgaW50IHVkZl9hbGxvY19pX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHNpemUpXG4xNjk4Olx0e1xuMTY5OTpcdFx0c3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTtcbjE3MDA6XHRcdGlpbmZvLVx1MDAzZWlfZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4xNzAxOlx0XHRpZiAoIWlpbmZvLVx1MDAzZWlfZGF0YSlcbjE3MDI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNzAzOlx0XHRyZXR1cm4gMDtcbjE3MDQ6XHR9XG4xNzA1Olx0XG4xNzA2Olx0c3RhdGljIHVtb2RlX3QgdWRmX2NvbnZlcnRfcGVybWlzc2lvbnMoc3RydWN0IGZpbGVFbnRyeSAqZmUpXG4xNzA3Olx0e1xuMTcwODpcdFx0dW1vZGVfdCBtb2RlO1xuMTcwOTpcdFx0dWludDMyX3QgcGVybWlzc2lvbnM7XG4xNzEwOlx0XHR1aW50MzJfdCBmbGFncztcbjE3MTE6XHRcbjE3MTI6XHRcdHBlcm1pc3Npb25zID0gbGUzMl90b19jcHUoZmUtXHUwMDNlcGVybWlzc2lvbnMpO1xuMTcxMzpcdFx0ZmxhZ3MgPSBsZTE2X3RvX2NwdShmZS1cdTAwM2VpY2JUYWcuZmxhZ3MpO1xuMTcxNDpcdFxuMTcxNTpcdFx0bW9kZSA9XHQoKHBlcm1pc3Npb25zKSBcdTAwMjYgMDAwNykgfFxuMTcxNjpcdFx0XHQoKHBlcm1pc3Npb25zIFx1MDAzZVx1MDAzZSAyKSBcdTAwMjYgMDA3MCkgfFxuMTcxNzpcdFx0XHQoKHBlcm1pc3Npb25zIFx1MDAzZVx1MDAzZSA0KSBcdTAwMjYgMDcwMCkgfFxuMTcxODpcdFx0XHQoKGZsYWdzIFx1MDAyNiBJQ0JUQUdfRkxBR19TRVRVSUQpID8gU19JU1VJRCA6IDApIHxcbjE3MTk6XHRcdFx0KChmbGFncyBcdTAwMjYgSUNCVEFHX0ZMQUdfU0VUR0lEKSA/IFNfSVNHSUQgOiAwKSB8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIGB1ZGZfd3JpdGVfaW5vZGVgIEZ1bmN0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IFVERiBmaWxlIHN5c3RlbSBpbnRlcm5hbHMgYWdhaW4uIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0LCBJIHRoaW5rIHdlIHNob3VsZCBmb2N1cyBvbiB0aGUgYHVkZl93cml0ZV9pbm9kZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIGNvZGUgYmV0d2VlbiBsaW5lcyAxODIwIGFuZCAxODgwLiBUaGF0IHNlY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGNvcmUgbG9naWMgb2Ygd3JpdGluZyBpbm9kZSBkYXRhIHdpdGhpbiB0aGUgVURGIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIFVuZGVyc3RhbmRpbmcgdGhhdCBzZWN0aW9uIHdpbGwgaG9wZWZ1bGx5IGdpdmUgbWUgYSBtdWNoIGJldHRlciBwZXJzcGVjdGl2ZSBvbiBob3cgdGhlIGZpbGVzeXN0ZW0gYWN0dWFsbHkgZnVuY3Rpb25zLCBub3QganVzdCB0aGVvcmV0aWNhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3VkZi9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODMwOlx0XG4xODMxOlx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rIFx1MDAzZSAwKVxuMTgzMjpcdFx0XHRmZS1cdTAwM2VmaWxlTGlua0NvdW50ID0gY3B1X3RvX2xlMTYoaW5vZGUtXHUwMDNlaV9ubGluayAtIDEpO1xuMTgzMzpcdFx0ZWxzZSB7XG4xODM0Olx0XHRcdGlmIChpaW5mby1cdTAwM2VpX2hpZGRlbilcbjE4MzU6XHRcdFx0XHRmZS1cdTAwM2VmaWxlTGlua0NvdW50ID0gY3B1X3RvX2xlMTYoMCk7XG4xODM2Olx0XHRcdGVsc2VcbjE4Mzc6XHRcdFx0XHRmZS1cdTAwM2VmaWxlTGlua0NvdW50ID0gY3B1X3RvX2xlMTYoaW5vZGUtXHUwMDNlaV9ubGluayk7XG4xODM4Olx0XHR9XG4xODM5Olx0XG4xODQwOlx0XHRmZS1cdTAwM2VpbmZvcm1hdGlvbkxlbmd0aCA9IGNwdV90b19sZTY0KGlub2RlLVx1MDAzZWlfc2l6ZSk7XG4xODQxOlx0XG4xODQyOlx0XHRpZiAoU19JU0NIUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuMTg0MzpcdFx0XHRzdHJ1Y3QgcmVnaWQgKmVpZDtcbjE4NDQ6XHRcdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuMTg0NTpcdFx0XHRcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XG4xODQ2Olx0XG4xODQ3Olx0XHRcdC8qIFZhbGlkaXR5IG9mIGV4dGVuZGVkIGF0dHJzIHdhcyBjaGVja2VkIG9uIGxvYWQgKi9cbjE4NDg6XHRcdFx0aWYgKFdBUk5fT05fT05DRShJU19FUlIoZHNlYSkpKSB7XG4xODQ5Olx0XHRcdFx0ZXJyID0gUFRSX0VSUihkc2VhKTtcbjE4NTA6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xODUxOlx0XHRcdH1cbjE4NTI6XHRcdFx0aWYgKCFkc2VhKSB7XG4xODUzOlx0XHRcdFx0ZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKVxuMTg1NDpcdFx0XHRcdFx0dWRmX2FkZF9leHRlbmRlZGF0dHIoaW5vZGUsXG4xODU1Olx0XHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICYjNDM7XG4xODU2Olx0XHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IHJlZ2lkKSwgMTIsIDB4Myk7XG4xODU3Olx0XHRcdFx0aWYgKElTX0VSUihkc2VhKSkge1xuMTg1ODpcdFx0XHRcdFx0ZXJyID0gUFRSX0VSUihkc2VhKTtcbjE4NTk6XHRcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE4NjA6XHRcdFx0XHR9XG4xODYxOlx0XHRcdFx0ZHNlYS1cdTAwM2VhdHRyVHlwZSA9IGNwdV90b19sZTMyKDEyKTtcbjE4NjI6XHRcdFx0XHRkc2VhLVx1MDAzZWF0dHJTdWJ0eXBlID0gMTtcbjE4NjM6XHRcdFx0XHRkc2VhLVx1MDAzZWF0dHJMZW5ndGggPSBjcHVfdG9fbGUzMihcbjE4NjQ6XHRcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICYjNDM7XG4xODY1Olx0XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCByZWdpZCkpO1xuMTg2NjpcdFx0XHRcdGRzZWEtXHUwMDNlaW1wVXNlTGVuZ3RoID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCByZWdpZCkpO1xuMTg2NzpcdFx0XHR9XG4xODY4Olx0XHRcdGVpZCA9IChzdHJ1Y3QgcmVnaWQgKilkc2VhLVx1MDAzZWltcFVzZTtcbjE4Njk6XHRcdFx0bWVtc2V0KGVpZCwgMCwgc2l6ZW9mKCplaWQpKTtcbjE4NzA6XHRcdFx0c3RyY3B5KGVpZC1cdTAwM2VpZGVudCwgVURGX0lEX0RFVkVMT1BFUik7XG4xODcxOlx0XHRcdGVpZC1cdTAwM2VpZGVudFN1ZmZpeFswXSA9IFVERl9PU19DTEFTU19VTklYO1xuMTg3MjpcdFx0XHRlaWQtXHUwMDNlaWRlbnRTdWZmaXhbMV0gPSBVREZfT1NfSURfTElOVVg7XG4xODczOlx0XHRcdGRzZWEtXHUwMDNlbWFqb3JEZXZpY2VJZGVudCA9IGNwdV90b19sZTMyKGltYWpvcihpbm9kZSkpO1xuMTg3NDpcdFx0XHRkc2VhLVx1MDAzZW1pbm9yRGV2aWNlSWRlbnQgPSBjcHVfdG9fbGUzMihpbWlub3IoaW5vZGUpKTtcbjE4NzU6XHRcdH1cbjE4NzY6XHRcbjE4Nzc6XHRcdGlmIChpaW5mby1cdTAwM2VpX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCKVxuMTg3ODpcdFx0XHRsYl9yZWNvcmRlZCA9IDA7IC8qIE5vIGV4dGVudHMgPVx1MDAzZSBubyBibG9ja3MhICovXG4xODc5Olx0XHRlbHNlXG4xODgwOlx0XHRcdGxiX3JlY29yZGVkID1cbjE4ODE6XHRcdFx0XHQoaW5vZGUtXHUwMDNlaV9ibG9ja3MgJiM0MzsgKDEgXHUwMDNjXHUwMDNjIChibG9ja3NpemVfYml0cyAtIDkpKSAtIDEpIFx1MDAzZVx1MDAzZVxuMTg4MjpcdFx0XHRcdChibG9ja3NpemVfYml0cyAtIDkpO1xuMTg4MzpcdFxuMTg4NDpcdFx0aWYgKGlpbmZvLVx1MDAzZWlfZWZlID09IDApIHtcbjE4ODU6XHRcdFx0bWVtY3B5KGJoLVx1MDAzZWJfZGF0YSAmIzQzOyBzaXplb2Yoc3RydWN0IGZpbGVFbnRyeSksXG4xODg2Olx0XHRcdCAgICAgICBpaW5mby1cdTAwM2VpX2RhdGEsXG4xODg3Olx0XHRcdCAgICAgICBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIC0gc2l6ZW9mKHN0cnVjdCBmaWxlRW50cnkpKTtcbjE4ODg6XHRcdFx0ZmUtXHUwMDNlbG9naWNhbEJsb2Nrc1JlY29yZGVkID0gY3B1X3RvX2xlNjQobGJfcmVjb3JkZWQpO1xuMTg4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM4NgoJCQkJCQkJb3V0cHV0OiAxOTkKCQkJCQkJCXRob3VnaHRzOiA3MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFVERiBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZ2h0ZW5pbmcgdXAgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGluZyBpbiB0aGUgVURGIGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSB0byBwcmV2ZW50IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgcmVhZHMuIEkgc2VlIHNldmVyYWwga2V5IGNoYW5nZXM6IGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoKWAgaXMgZ2V0dGluZyBtb3JlIHJvYnVzdCB3aXRoIGl0cyB2YWxpZGF0aW9uLCBjaGVja2luZyBsZW5ndGhzIGFuZCBtYWtpbmcgc3VyZSBgYXR0cl9sZW5ndGhgLCBgaW1wX3VzZV9sZW5ndGhgLCBhbmQgdGhlIHNpemVzIG9mIHRoZSBzdHJ1Y3R1cmVzIHRoZXkgcmVsYXRlIHRvIGFyZSBhbGwgc2FuZS4gIGB1ZGZfcmVhZF9pbm9kZSgpYCBhbmQgYHVkZl93cml0ZV9pbm9kZSgpYCBhcmUgbm93IGV4cGxpY2l0bHkgaGFuZGxpbmcgdGhlIGVycm9yIHJldHVybnMgZnJvbSBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cigpYCwgd2hpY2ggaXMgYSBnb29kIGRlZmVuc2l2ZSBtZWFzdXJlLiAgUmV0dXJuaW5nIGBFUlJfUFRSKC1FRlNDT1JSVVBURUQpYCBpbnN0ZWFkIG9mIGBOVUxMYCBvciBzaWxlbnRseSBicmVha2luZyBvdXQgaXMgYWxzbyBhIGdyZWF0IHN0ZXAgdG93YXJkcyBwcm9wZXIgZXJyb3IgcmVwb3J0aW5nLiAgQW5kIHRoYXQgYm91bmRzIGNoZWNrIGZpeCBpbiBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgaXMgY3J1Y2lhbCAtIHRoYXQgcG90ZW50aWFsIG92ZXJmbG93IHdhcyBhIHRpY2tpbmcgdGltZSBib21iLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEtNU0FOLiAgV2UgbmVlZCB0byBldmFsdWF0ZSBpZiB3ZSBuZWVkIHRvIHJ1biBhIEtNU0FOIHNlc3Npb24gd2l0aCB0aGlzLiAgS0FTQU4gaXMgZ29pbmcgdG8gY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgc3R1ZmYgdGhhdCB3ZSBhcmUgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgaW4gdGhlIHBhdGNoLCB0aGVzZSBhcmUgZXNzZW50aWFsbHkgZmlsZXN5c3RlbSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGFyZSBiZWluZyBwcm90ZWN0ZWQgYWdhaW5zdC4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBkZWFscyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IGludHJvZHVjZXMgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBObyBjb3BpZXMgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBicmFuY2hpbmcgb3IgY29udHJvbCBmbG93LiBgdWRmX3dyaXRlX2lub2RlYCBpcyBldmVuIGV4cGxpY2l0bHkgaW5pdGlhbGl6aW5nIGBlaWRgIHdpdGggYG1lbXNldCgpYC4gVGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgdGlnaHRlbmluZyB1cCBleGlzdGluZyBkYXRhIHN0cnVjdHVyZXMgYW5kIHZhbGlkYXRpbmcgZGlzayBkYXRhLCBub3QgaW50cm9kdWNpbmcgbmV3IHNvdXJjZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIENvcnJ1cHRlZCBkaXNrIHJlYWRzIHdpbGwgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGVycm9yIGNoZWNraW5nLgoKSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoYXQgTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UuICBJdCBwZXJmZWN0bHkgbWF0Y2hlcyBvdXIgZXN0YWJsaXNoZWQgY3JpdGVyaWE6ICB0aGUgbWFpbiByaXNrcyBhcmUgb3V0LW9mLWJvdW5kcywgb3ZlcmZsb3dzLCBhbmQgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFsbCBpc3N1ZXMgdGhhdCBLQVNBTiBzaG91bGQgaGFuZGxlLiBBbGwgdGhlIHN0cnVjdHVyZXMgaW50cm9kdWNlZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGJlaW5nIGludHJvZHVjZWQgb3IgaW5mb3JtYXRpb24gbGVha3MuCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkmIzM5O20gY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNhbml0eSBhbmQgYm91bmRzIGNoZWNraW5nIGZvciBVREYgZmlsZXN5c3RlbSBleHRlbmRlZCBhdHRyaWJ1dGVzLCBzcGVjaWZpY2FsbHkgZm9yIGRldmljZVNwZWMgYXR0cmlidXRlcyBvbiBzcGVjaWFsIGRldmljZSBpbm9kZXMgKGNoYXJhY3Rlci9ibG9jayBkZXZpY2VzKS4gSXQgaW50cm9kdWNlcyBgdWRmX2RldmljZV9zcGVjX3ZhbGlkKClgIHRvIHZhbGlkYXRlIGF0dHJpYnV0ZSBhbmQgaW1wbGVtZW50YXRpb24tdXNlIGxlbmd0aHMgYWdhaW5zdCBidWZmZXIgYm91bmRzLCBwcm9wZXJseSBoYW5kbGVzIGBFUlJfUFRSYCBlcnJvciByZXR1cm5zIGZyb20gYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHIoKWAsIGFuZCBmaXhlcyBsb29wIGJvdW5kYXJ5IGNoZWNrcyB3aGVuIGl0ZXJhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzLlxuXG5UaGVzZSBjaGFuZ2VzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcywgd2hpY2ggZmFsbCB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc2FuaXR5IGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIFVERiBmaWxlc3lzdGVtIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSBmb3IgZGV2aWNlU3BlYyBhdHRyaWJ1dGVzIG9uIHNwZWNpYWwgZGV2aWNlIGlub2RlcyAoY2hhcmFjdGVyL2Jsb2NrIGRldmljZXMpLiBJdCBpbnRyb2R1Y2VzIGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoKWAgdG8gdmFsaWRhdGUgYXR0cmlidXRlIGFuZCBpbXBsZW1lbnRhdGlvbi11c2UgbGVuZ3RocyBhZ2FpbnN0IGJ1ZmZlciBib3VuZHMsIHByb3Blcmx5IGhhbmRsZXMgYEVSUl9QVFJgIGVycm9yIHJldHVybnMgZnJvbSBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cigpYCwgYW5kIGZpeGVzIGxvb3AgYm91bmRhcnkgY2hlY2tzIHdoZW4gaXRlcmF0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMuXG5cblRoZXNlIGNoYW5nZXMgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb24gY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBmYWxsIHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDowODo1OC45ODM4MjM1NDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU3NjcxMTYxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVURGX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRmX2dldF9leHRlbmRlZGF0dHJcIixcbiAgICBcInVkZl9hZGRfZXh0ZW5kZWRhdHRyXCIsXG4gICAgXCJ1ZGZfd3JpdGVfaW5vZGVcIixcbiAgICBcIl9fdWRmX2lnZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc2FuaXR5IGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIFVERiBmaWxlc3lzdGVtIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSBmb3IgZGV2aWNlU3BlYyBhdHRyaWJ1dGVzIG9uIHNwZWNpYWwgZGV2aWNlIGlub2RlcyAoY2hhcmFjdGVyL2Jsb2NrIGRldmljZXMpLiBJdCBpbnRyb2R1Y2VzIGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoKWAgdG8gdmFsaWRhdGUgYXR0cmlidXRlIGFuZCBpbXBsZW1lbnRhdGlvbi11c2UgbGVuZ3RocyBhZ2FpbnN0IGJ1ZmZlciBib3VuZHMsIHByb3Blcmx5IGhhbmRsZXMgYEVSUl9QVFJgIGVycm9yIHJldHVybnMgZnJvbSBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cigpYCwgYW5kIGZpeGVzIGxvb3AgYm91bmRhcnkgY2hlY2tzIHdoZW4gaXRlcmF0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMuXFxuXFxuVGhlc2UgY2hhbmdlcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBvbiBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMsIHdoaWNoIGZhbGwgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBVREYgZGV2aWNlIHNwZWNpZmljYXRpb24gZXh0ZW5kZWQgYXR0cmlidXRlcyBhbmQgZml4ZXMgZXJyb3IgaGFuZGxpbmcvcHJvcGFnYXRpb24gZm9yIGNvcnJ1cHRlZCBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIFVERiBmaWxlc3lzdGVtIGlub2RlIHJlYWQvd3JpdGUgcGF0aHMuIFRoaXMgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IG1vdW50aW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgY3JhZnRlZCBVREYgZmlsZXN5c3RlbSBpbWFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjA4OjU4Ljk4MzgzMDE1M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNDg5MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmY0MDhjNzM4ZGE5ODk0NTlhOGJmMDg1M2RhYTdjMTQxZWZmYzc0OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDIwOjA4OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmNcXG5pbmRleCBlNDVlNTQ2YTczOWE5Li44YmFiYzJmYmNlOWExIDEwMDY0NFxcbi0tLSBhL2ZzL3VkZi9pbm9kZS5jXFxuKysrIGIvZnMvdWRmL2lub2RlLmNcXG5AQCAtMTMzNiw2ICsxMzM2LDI2IEBAIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbmV3c2l6ZSlcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rLypcXG4rICogVmVyaWZ5IHZhbGlkaXR5IG9mIHN0cnVjdCBkZXZpY2VTcGVjIG9uIGRpc2suIHVkZl9nZXRfZXh0ZW5kZWRhdHRyKCkgaGFzXFxuKyAqIGFscmVhZHkgdmVyaWZpZWQgdGhlIGdlbmVyaWMgaGVhZGVyIGFuZCBtYWRlIHN1cmUgYXR0cmlidXRlIGZpdHMgaW4gdGhlXFxuKyAqIGlub2RlIHNvIHdlIGp1c3QgaGF2ZSB0byBtYWtlIHN1cmUgYXR0cmlidXRlIHNwYWNlIGlzIGxhcmdlIGVub3VnaCBmb3JcXG4rICogZGV2aWNlU3BlYyBzdHJ1Y3QgYW5kIHJlcXVpcmVkIGltcFVzZSBpbmZvcm1hdGlvbi5cXG4rICovXFxuK3N0YXRpYyBib29sIHVkZl9kZXZpY2Vfc3BlY192YWxpZChzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSlcXG4re1xcbitcXHR1MzIgYXR0cl9sZW5ndGgsIGltcF91c2VfbGVuZ3RoO1xcbitcXG4rXFx0YXR0cl9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLVxcdTAwM2VhdHRyTGVuZ3RoKTtcXG4rXFx0aW1wX3VzZV9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLVxcdTAwM2VpbXBVc2VMZW5ndGgpO1xcbitcXHRpZiAoYXR0cl9sZW5ndGggXFx1MDAzYyBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpIHx8XFxuK1xcdCAgICBpbXBfdXNlX2xlbmd0aCBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgcmVnaWQpIHx8XFxuK1xcdCAgICBpbXBfdXNlX2xlbmd0aCBcXHUwMDNlIGF0dHJfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIC8qXFxuICAqIE1heGltdW0gbGVuZ3RoIG9mIGxpbmtlZCBsaXN0IGZvcm1lZCBieSBJQ0IgaGllcmFyY2h5LiBUaGUgY2hvc2VuIG51bWJlciBpc1xcbiAgKiBhcmJpdHJhcnkgLSBqdXN0IHRoYXQgd2UgaG9wZWZ1bGx5IGRvbid0IGxpbWl0IGFueSByZWFsIHVzZSBvZiByZXdyaXR0ZW5cXG5AQCAtMTY1NCwxMyArMTY3NCwxOSBAQCBzdGF0aWMgaW50IHVkZl9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgaGlkZGVuX2lub2RlKVxcbiBcXHRpZiAoU19JU0NIUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIFxcdFxcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cXG4gXFx0XFx0XFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcXG4tXFx0XFx0aWYgKGRzZWEpIHtcXG4tXFx0XFx0XFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9tb2RlLFxcbitcXG4rXFx0XFx0aWYgKElTX0VSUihkc2VhKSkge1xcbitcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGRzZWEpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHQvKiBEZXZpY2UgaW5vZGVzIG11c3QgaGF2ZSBhIGRldmljZSBzcGVjIGF0dHJpYnV0ZSAqL1xcbitcXHRcXHRpZiAoIWRzZWEgfHwgIXVkZl9kZXZpY2Vfc3BlY192YWxpZChkc2VhKSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUZTQ09SUlVQVEVEO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX21vZGUsXFxuIFxcdFxcdFxcdFxcdE1LREVWKGxlMzJfdG9fY3B1KGRzZWEtXFx1MDAzZW1ham9yRGV2aWNlSWRlbnQpLFxcbiBcXHRcXHRcXHRcXHQgICAgICBsZTMyX3RvX2NwdShkc2VhLVxcdTAwM2VtaW5vckRldmljZUlkZW50KSkpO1xcbi1cXHRcXHRcXHQvKiBEZXZlbG9wZXIgSUQgPz8/ICovXFxuLVxcdFxcdH0gZWxzZVxcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXHRyZXQgPSAwO1xcbiBvdXQ6XFxuQEAgLTE3NTcsNiArMTc4Myw3IEBAIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIFxcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gXFx0dW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbiBcXHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0YmggPSBzYl9nZXRibGsoaW5vZGUtXFx1MDAzZWlfc2IsXFxuIFxcdFxcdFxcdHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLVxcdTAwM2VpX3NiLCBcXHUwMDI2aWluZm8tXFx1MDAzZWlfbG9jYXRpb24sIDApKTtcXG5AQCAtMTgxNiwxMSArMTg0MywyMSBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHRcXHRzdHJ1Y3QgcmVnaWQgKmVpZDtcXG4gXFx0XFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxcbiBcXHRcXHRcXHQoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpO1xcbitcXG4rXFx0XFx0LyogVmFsaWRpdHkgb2YgZXh0ZW5kZWQgYXR0cnMgd2FzIGNoZWNrZWQgb24gbG9hZCAqL1xcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKElTX0VSUihkc2VhKSkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihkc2VhKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmICghZHNlYSkge1xcbiBcXHRcXHRcXHRkc2VhID0gKHN0cnVjdCBkZXZpY2VTcGVjICopXFxuIFxcdFxcdFxcdFxcdHVkZl9hZGRfZXh0ZW5kZWRhdHRyKGlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgK1xcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgcmVnaWQpLCAxMiwgMHgzKTtcXG4rXFx0XFx0XFx0aWYgKElTX0VSUihkc2VhKSkge1xcbitcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGRzZWEpO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0ZHNlYS1cXHUwMDNlYXR0clR5cGUgPSBjcHVfdG9fbGUzMigxMik7XFxuIFxcdFxcdFxcdGRzZWEtXFx1MDAzZWF0dHJTdWJ0eXBlID0gMTtcXG4gXFx0XFx0XFx0ZHNlYS1cXHUwMDNlYXR0ckxlbmd0aCA9IGNwdV90b19sZTMyKFxcbkBAIC0xOTYyLDYgKzE5OTksMTEgQEAgaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4gXFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK291dF91bmxvY2s6XFxuK1xcdHVubG9ja19idWZmZXIoYmgpO1xcbitcXHRicmVsc2UoYmgpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8sXFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9taXNjLmMgYi9mcy91ZGYvbWlzYy5jXFxuaW5kZXggNjkyOGUzNzhmYmJkYy4uYTIwODRkZmJmYmQ2NiAxMDA2NDRcXG4tLS0gYS9mcy91ZGYvbWlzYy5jXFxuKysrIGIvZnMvdWRmL21pc2MuY1xcbkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLFxcbiBcXHRcXHRcXHRcXHRcXHRjcHVfdG9fbGUxNihUQUdfSURFTlRfRUFIRCkgfHxcXG4gXFx0XFx0XFx0ICAgIGxlMzJfdG9fY3B1KGVhaGQtXFx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XFxuIFxcdFxcdFxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuIFxcbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsXFxuIFxcdFxcdHJldHVybiAoc3RydWN0IGdlbmVyaWNGb3JtYXQgKilcXHUwMDI2ZWFbb2Zmc2V0XTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcXG5AQCAtMTQ0LDcgKzE0NCw3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCB0eXBlLFxcbiBcXHRcXHRcXHRcXHRjcHVfdG9fbGUxNihUQUdfSURFTlRfRUFIRCkgfHxcXG4gXFx0XFx0ICAgIGxlMzJfdG9fY3B1KGVhaGQtXFx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XFxuIFxcdFxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSlcXG4tXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xcbiBcXG4gXFx0XFx0aWYgKHR5cGUgXFx1MDAzYyAyMDQ4KVxcbiBcXHRcXHRcXHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xcbkBAIC0xNTMsMTYgKzE1MywxNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRvZmZzZXQgPSBsZTMyX3RvX2NwdShlYWhkLVxcdTAwM2VhcHBBdHRyTG9jYXRpb24pO1xcbiBcXG4tXFx0XFx0d2hpbGUgKG9mZnNldCArIHNpemVvZigqZ2FmKSBcXHUwMDNjIGlpbmZvLVxcdTAwM2VpX2xlbkVBdHRyKSB7XFxuK1xcdFxcdHdoaWxlIChvZmZzZXQgXFx1MDAzY1xcbitcXHRcXHQgICAgICAgaWluZm8tXFx1MDAzZWlfbGVuRUF0dHIgLSBzaXplb2Yoc3RydWN0IGdlbmVyaWNGb3JtYXQpKSB7XFxuIFxcdFxcdFxcdHVpbnQzMl90IGF0dHJMZW5ndGg7XFxuIFxcbiBcXHRcXHRcXHRnYWYgPSAoc3RydWN0IGdlbmVyaWNGb3JtYXQgKilcXHUwMDI2ZWFbb2Zmc2V0XTtcXG4gXFx0XFx0XFx0YXR0ckxlbmd0aCA9IGxlMzJfdG9fY3B1KGdhZi1cXHUwMDNlYXR0ckxlbmd0aCk7XFxuIFxcbiBcXHRcXHRcXHQvKiBEZXRlY3QgdW5kZXJzaXplZCBlbGVtZW50cyBhbmQgYnVmZmVyIG92ZXJmbG93cyAqL1xcbi1cXHRcXHRcXHRpZiAoKGF0dHJMZW5ndGggXFx1MDAzYyBzaXplb2YoKmdhZikpIHx8XFxuLVxcdFxcdFxcdCAgICAoYXR0ckxlbmd0aCBcXHUwMDNlIChpaW5mby1cXHUwMDNlaV9sZW5FQXR0ciAtIG9mZnNldCkpKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0aWYgKGF0dHJMZW5ndGggXFx1MDAzYyBzaXplb2Yoc3RydWN0IGdlbmVyaWNGb3JtYXQpIHx8XFxuK1xcdFxcdFxcdCAgICBhdHRyTGVuZ3RoIFxcdTAwM2UgaWluZm8tXFx1MDAzZWlfbGVuRUF0dHIgLSBvZmZzZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGxlMzJfdG9fY3B1KGdhZi1cXHUwMDNlYXR0clR5cGUpID09IHR5cGUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0XFx0Z2FmLVxcdTAwM2VhdHRyU3VidHlwZSA9PSBzdWJ0eXBlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDowODo1OS40NTc4NDIxODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjg4ODAxODYyNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVERl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkZl9nZXRfZXh0ZW5kZWRhdHRyXCIsXG4gICAgXCJ1ZGZfYWRkX2V4dGVuZGVkYXR0clwiLFxuICAgIFwidWRmX3dyaXRlX2lub2RlXCIsXG4gICAgXCJfX3VkZl9pZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBVREYgZGV2aWNlIHNwZWNpZmljYXRpb24gZXh0ZW5kZWQgYXR0cmlidXRlcyBhbmQgZml4ZXMgZXJyb3IgaGFuZGxpbmcvcHJvcGFnYXRpb24gZm9yIGNvcnJ1cHRlZCBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIFVERiBmaWxlc3lzdGVtIGlub2RlIHJlYWQvd3JpdGUgcGF0aHMuIFRoaXMgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IG1vdW50aW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgY3JhZnRlZCBVREYgZmlsZXN5c3RlbSBpbWFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZmNDA4YzczOGRhOTg5NDU5YThiZjA4NTNkYWE3YzE0MWVmZmM3NDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDIwOjA4OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuY1xuaW5kZXggZTQ1ZTU0NmE3MzlhOS4uOGJhYmMyZmJjZTlhMSAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9pbm9kZS5jXG4rKysgYi9mcy91ZGYvaW5vZGUuY1xuQEAgLTEzMzYsNiArMTMzNiwyNiBAQCBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbisvKlxuKyAqIFZlcmlmeSB2YWxpZGl0eSBvZiBzdHJ1Y3QgZGV2aWNlU3BlYyBvbiBkaXNrLiB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpIGhhc1xuKyAqIGFscmVhZHkgdmVyaWZpZWQgdGhlIGdlbmVyaWMgaGVhZGVyIGFuZCBtYWRlIHN1cmUgYXR0cmlidXRlIGZpdHMgaW4gdGhlXG4rICogaW5vZGUgc28gd2UganVzdCBoYXZlIHRvIG1ha2Ugc3VyZSBhdHRyaWJ1dGUgc3BhY2UgaXMgbGFyZ2UgZW5vdWdoIGZvclxuKyAqIGRldmljZVNwZWMgc3RydWN0IGFuZCByZXF1aXJlZCBpbXBVc2UgaW5mb3JtYXRpb24uXG4rICovXG4rc3RhdGljIGJvb2wgdWRmX2RldmljZV9zcGVjX3ZhbGlkKHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhKVxuK3tcbitcdHUzMiBhdHRyX2xlbmd0aCwgaW1wX3VzZV9sZW5ndGg7XG4rXG4rXHRhdHRyX2xlbmd0aCA9IGxlMzJfdG9fY3B1KGRzZWEtXHUwMDNlYXR0ckxlbmd0aCk7XG4rXHRpbXBfdXNlX2xlbmd0aCA9IGxlMzJfdG9fY3B1KGRzZWEtXHUwMDNlaW1wVXNlTGVuZ3RoKTtcbitcdGlmIChhdHRyX2xlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSB8fFxuK1x0ICAgIGltcF91c2VfbGVuZ3RoIFx1MDAzYyBzaXplb2Yoc3RydWN0IHJlZ2lkKSB8fFxuK1x0ICAgIGltcF91c2VfbGVuZ3RoIFx1MDAzZSBhdHRyX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiAvKlxuICAqIE1heGltdW0gbGVuZ3RoIG9mIGxpbmtlZCBsaXN0IGZvcm1lZCBieSBJQ0IgaGllcmFyY2h5LiBUaGUgY2hvc2VuIG51bWJlciBpc1xuICAqIGFyYml0cmFyeSAtIGp1c3QgdGhhdCB3ZSBob3BlZnVsbHkgZG9uJ3QgbGltaXQgYW55IHJlYWwgdXNlIG9mIHJld3JpdHRlblxuQEAgLTE2NTQsMTMgKzE2NzQsMTkgQEAgc3RhdGljIGludCB1ZGZfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGhpZGRlbl9pbm9kZSlcbiBcdGlmIChTX0lTQ0hSKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cbiBcdFx0XHQoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpO1xuLVx0XHRpZiAoZHNlYSkge1xuLVx0XHRcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9tb2RlLFxuK1xuK1x0XHRpZiAoSVNfRVJSKGRzZWEpKSB7XG4rXHRcdFx0cmV0ID0gUFRSX0VSUihkc2VhKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHQvKiBEZXZpY2UgaW5vZGVzIG11c3QgaGF2ZSBhIGRldmljZSBzcGVjIGF0dHJpYnV0ZSAqL1xuK1x0XHRpZiAoIWRzZWEgfHwgIXVkZl9kZXZpY2Vfc3BlY192YWxpZChkc2VhKSkge1xuK1x0XHRcdHJldCA9IC1FRlNDT1JSVVBURUQ7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS1cdTAwM2VpX21vZGUsXG4gXHRcdFx0XHRNS0RFVihsZTMyX3RvX2NwdShkc2VhLVx1MDAzZW1ham9yRGV2aWNlSWRlbnQpLFxuIFx0XHRcdFx0ICAgICAgbGUzMl90b19jcHUoZHNlYS1cdTAwM2VtaW5vckRldmljZUlkZW50KSkpO1xuLVx0XHRcdC8qIERldmVsb3BlciBJRCA/Pz8gKi9cbi1cdFx0fSBlbHNlXG4tXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHRyZXQgPSAwO1xuIG91dDpcbkBAIC0xNzU3LDYgKzE3ODMsNyBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0c3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXHR1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuIFx0c3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTtcbitcdGludCBlcnI7XG4gXG4gXHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLFxuIFx0XHRcdHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLVx1MDAzZWlfc2IsIFx1MDAyNmlpbmZvLVx1MDAzZWlfbG9jYXRpb24sIDApKTtcbkBAIC0xODE2LDExICsxODQzLDIxIEBAIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdHN0cnVjdCByZWdpZCAqZWlkO1xuIFx0XHRzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSA9XG4gXHRcdFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcbitcbitcdFx0LyogVmFsaWRpdHkgb2YgZXh0ZW5kZWQgYXR0cnMgd2FzIGNoZWNrZWQgb24gbG9hZCAqL1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKElTX0VSUihkc2VhKSkpIHtcbitcdFx0XHRlcnIgPSBQVFJfRVJSKGRzZWEpO1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fVxuIFx0XHRpZiAoIWRzZWEpIHtcbiBcdFx0XHRkc2VhID0gKHN0cnVjdCBkZXZpY2VTcGVjICopXG4gXHRcdFx0XHR1ZGZfYWRkX2V4dGVuZGVkYXR0cihpbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgK1xuIFx0XHRcdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCByZWdpZCksIDEyLCAweDMpO1xuK1x0XHRcdGlmIChJU19FUlIoZHNlYSkpIHtcbitcdFx0XHRcdGVyciA9IFBUUl9FUlIoZHNlYSk7XG4rXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdFx0fVxuIFx0XHRcdGRzZWEtXHUwMDNlYXR0clR5cGUgPSBjcHVfdG9fbGUzMigxMik7XG4gXHRcdFx0ZHNlYS1cdTAwM2VhdHRyU3VidHlwZSA9IDE7XG4gXHRcdFx0ZHNlYS1cdTAwM2VhdHRyTGVuZ3RoID0gY3B1X3RvX2xlMzIoXG5AQCAtMTk2Miw2ICsxOTk5LDExIEBAIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbiBcbiBcdHJldHVybiAwO1xuK1xuK291dF91bmxvY2s6XG4rXHR1bmxvY2tfYnVmZmVyKGJoKTtcbitcdGJyZWxzZShiaCk7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8sXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL21pc2MuYyBiL2ZzL3VkZi9taXNjLmNcbmluZGV4IDY5MjhlMzc4ZmJiZGMuLmEyMDg0ZGZiZmJkNjYgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvbWlzYy5jXG4rKysgYi9mcy91ZGYvbWlzYy5jXG5AQCAtNTgsNyArNTgsNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3Qgc2l6ZSxcbiBcdFx0XHRcdFx0Y3B1X3RvX2xlMTYoVEFHX0lERU5UX0VBSEQpIHx8XG4gXHRcdFx0ICAgIGxlMzJfdG9fY3B1KGVhaGQtXHUwMDNlZGVzY1RhZy50YWdMb2NhdGlvbikgIT1cbiBcdFx0XHRcdFx0aWluZm8tXHUwMDNlaV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0pXG4tXHRcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFxuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3Qgc2l6ZSxcbiBcdFx0cmV0dXJuIChzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqKVx1MDAyNmVhW29mZnNldF07XG4gXHR9XG4gXG4tXHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIH1cbiBcbiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcbkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsXG4gXHRcdFx0XHRjcHVfdG9fbGUxNihUQUdfSURFTlRfRUFIRCkgfHxcbiBcdFx0ICAgIGxlMzJfdG9fY3B1KGVhaGQtXHUwMDNlZGVzY1RhZy50YWdMb2NhdGlvbikgIT1cbiBcdFx0XHRcdGlpbmZvLVx1MDAzZWlfbG9jYXRpb24ubG9naWNhbEJsb2NrTnVtKVxuLVx0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xuIFxuIFx0XHRpZiAodHlwZSBcdTAwM2MgMjA0OClcbiBcdFx0XHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xuQEAgLTE1MywxNiArMTUzLDE3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCB0eXBlLFxuIFx0XHRlbHNlXG4gXHRcdFx0b2Zmc2V0ID0gbGUzMl90b19jcHUoZWFoZC1cdTAwM2VhcHBBdHRyTG9jYXRpb24pO1xuIFxuLVx0XHR3aGlsZSAob2Zmc2V0ICsgc2l6ZW9mKCpnYWYpIFx1MDAzYyBpaW5mby1cdTAwM2VpX2xlbkVBdHRyKSB7XG4rXHRcdHdoaWxlIChvZmZzZXQgXHUwMDNjXG4rXHRcdCAgICAgICBpaW5mby1cdTAwM2VpX2xlbkVBdHRyIC0gc2l6ZW9mKHN0cnVjdCBnZW5lcmljRm9ybWF0KSkge1xuIFx0XHRcdHVpbnQzMl90IGF0dHJMZW5ndGg7XG4gXG4gXHRcdFx0Z2FmID0gKHN0cnVjdCBnZW5lcmljRm9ybWF0ICopXHUwMDI2ZWFbb2Zmc2V0XTtcbiBcdFx0XHRhdHRyTGVuZ3RoID0gbGUzMl90b19jcHUoZ2FmLVx1MDAzZWF0dHJMZW5ndGgpO1xuIFxuIFx0XHRcdC8qIERldGVjdCB1bmRlcnNpemVkIGVsZW1lbnRzIGFuZCBidWZmZXIgb3ZlcmZsb3dzICovXG4tXHRcdFx0aWYgKChhdHRyTGVuZ3RoIFx1MDAzYyBzaXplb2YoKmdhZikpIHx8XG4tXHRcdFx0ICAgIChhdHRyTGVuZ3RoIFx1MDAzZSAoaWluZm8tXHUwMDNlaV9sZW5FQXR0ciAtIG9mZnNldCkpKVxuLVx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0aWYgKGF0dHJMZW5ndGggXHUwMDNjIHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkgfHxcbitcdFx0XHQgICAgYXR0ckxlbmd0aCBcdTAwM2UgaWluZm8tXHUwMDNlaV9sZW5FQXR0ciAtIG9mZnNldClcbitcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xuIFxuIFx0XHRcdGlmIChsZTMyX3RvX2NwdShnYWYtXHUwMDNlYXR0clR5cGUpID09IHR5cGUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHRcdGdhZi1cdTAwM2VhdHRyU3VidHlwZSA9PSBzdWJ0eXBlKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MDg6NTkuNDU3ODQzNjAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxNTg0NTU1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBVREYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgYSBzb2xpZCBhbmFseXNpcyBpbnZvbHZlcyBmaWd1cmluZyBvdXQgaWYgaXQncyBXb3J0aEZ1enppbmcsIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCwga2V5IHN5bWJvbHMgdG8gdGFyZ2V0LCBhbmQgdGhlIHVuZGVybHlpbmcgcmVhc29uaW5nLlxuXG5GaXJzdCwgSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYGZzL3VkZi9pbm9kZS5jYCBhbmQgYGZzL3VkZi9taXNjLmNgLiBMZXQncyBicmVhayBkb3duIHdoYXQncyBoYXBwZW5pbmc6IGl0J3MgYWxsIGFib3V0IFVERiBmaWxlc3lzdGVtIGRldmljZSBzcGVjaWZpY2F0aW9uIHZhbGlkYXRpb24gYW5kIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFNwZWNpZmljYWxseTogYHVkZl9kZXZpY2Vfc3BlY192YWxpZGAgdmFsaWRhdGVzIHRoZSBgc3RydWN0IGRldmljZVNwZWNgLCBgdWRmX3JlYWRfaW5vZGVgIGlzIGhhbmRsaW5nIGVycm9ycyBpbiBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGFuZCB2YWxpZGF0aW5nIHRoZSBkZXZpY2Ugc3BlY3MsIGFuZCB0aGUgYHVkZl93cml0ZV9pbm9kZWAgaXMgZG9pbmcgc2ltaWxhciBlcnJvciBjaGVja3MsIHNwZWNpZmljYWxseSBhcm91bmQgaGFuZGxpbmcgYEVSUl9QVFJgIHJldHVybnMgZnJvbSBmdW5jdGlvbnMgbGlrZSBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHJgLiBUaG9zZSBmdW5jdGlvbnMgYWxzbyBub3cgZXhwbGljaXRseSByZXR1cm4gYEVSUl9QVFIoLi4uKWAgcmF0aGVyIHRoYW4gYE5VTExgIG9uIGVycm9ycy4gVGhpcyBpcyBjcnVjaWFsIGZvciBkZXRlY3RpbmcgYW5kIGhhbmRsaW5nIGNvcnJ1cHRpb24uXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGlzIFVERiBhY2Nlc3NpYmxlIHRvIGEgc3RhbmRhcmQgZnV6emVyPyBHaXZlbiBpdCdzIGEgZGlzayBmaWxlc3lzdGVtIChgZnMvdWRmL2ApLCBJIGtub3cgaXQncyBhIGdvb2QgY2FuZGlkYXRlLiBGaWxlc3lzdGVtcyBhcmUgb2Z0ZW4gbW91bnRlZCB2aWEgbG9vcCBkZXZpY2VzLCBhbmQgZnV6emluZyBmaWxlc3lzdGVtIGltYWdlcyBpcyBjb21tb24gcHJhY3RpY2UgKHN5emthbGxlciBkb2VzIHRoaXMpLiBUaGlzIHNlZW1zIHByb21pc2luZy5cblxuVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgbmVlZCB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUgZGV0YWlscy4gVGltZSB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIGBmcy91ZGYvS2NvbmZpZ2AgYW5kIGBmcy91ZGYvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIFVERiBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIFRoYXQgd2lsbCB0ZWxsIG1lIHRoZSByZXF1aXJlZCBgRW5hYmxlQ29uZmlnc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDowOToyMS42MTYzMDE3MzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1NTk1MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVREZfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWRmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3VkZi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvdWRmL0tjb25maWc6Mjpjb25maWcgVURGX0ZTXFxuZnMvdWRmL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVURGIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjA5OjIxLjk1MTkwMjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTc3ODYzMjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHJlYWRpbmcgYGZzL3VkZi9LY29uZmlnYCwgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVREYgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgY3JhY2sgb3BlbiBgZnMvdWRmL0tjb25maWdgLiBUaW1lIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSdyZSBzdHJ1Y3R1cmVkIGZvciB0aGUgVURGIGZpbGVzeXN0ZW0uIEltbWVkaWF0ZWx5LCBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgc2V0dGluZ3Mg4oCTIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wdGlvbnMgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBVREYgc3VwcG9ydCBlbnRpcmVseSwgbmF0dXJhbGx5LiBQcm9iYWJseSBhIG1vZHVsZSBvcHRpb24gdG9vOyBnb3R0YSBiZSBmbGV4aWJsZSBvbiB0aGF0IGZyb250LlxuXG5JJ20gc2Nhbm5pbmcgZm9yIGZpbmVyLWdyYWluZWQgY29udHJvbHMuIEFyZSB0aGVyZSBvcHRpb25zIGZvciBoYW5kbGluZyBzcGVjaWZpYyBVREYgdmVyc2lvbnM/IE9yIHBlcmhhcHMgZmxhZ3MgdG8gZW5hYmxlL2Rpc2FibGUgY2VydGFpbiBVREYgZXh0ZW5zaW9ucz8gSSdkIGV4cGVjdCB0byBzZWUgc29tZSBncmFudWxhcml0eSBoZXJlLCBnaXZlbiB0aGUgdmFyaW91cyByZXZpc2lvbnMgYW5kIGZlYXR1cmVzIGltcGxlbWVudGVkIG92ZXIgdGltZS4gVGhpbmdzIGxpa2UgaGFuZGxpbmcgbG9uZyBmaWxlbmFtZXMgb3Igc3VwcG9ydCBmb3Igc3BlY2lmaWMgbWV0YWRhdGEgZm9ybWF0cy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgbXVzdCBiZSBlbmFibGVkIGZvciBVREYgdG8gZnVuY3Rpb24gcHJvcGVybHk/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMgb24gYmxvY2sgZHJpdmVycywgU0NTSSBsYXllcnMsIG9yIHNwZWNpZmljIG1lZGlhIGZvcm1hdHM/IEFuZCBjb252ZXJzZWx5LCBkb2VzIGVuYWJsaW5nIFVERiBjb25mbGljdCB3aXRoIGFueSBvdGhlciBmaWxlc3lzdGVtIG9wdGlvbnM/IEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZXNlIHJlbGF0aW9uc2hpcHMgdG8gYXZvaWQgcG90ZW50aWFsIGJ1aWxkIGNvbmZsaWN0cyBhbmQgZW5zdXJlIHRoZSByZXN1bHRpbmcga2VybmVsIGltYWdlIGlzIGFzIGxlYW4gYW5kIGZ1bmN0aW9uYWwgYXMgcG9zc2libGUuXG5cbkknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBkZWZhdWx0IHZhbHVlcyBhc3NpZ25lZCB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBcmUgc2Vuc2libGUgZGVmYXVsdHMgcHJvdmlkZWQ/IEFyZSB0aGV5IGFwcHJvcHJpYXRlIGZvciBtb3N0IGNvbW1vbiB1c2UgY2FzZXMsIG9yIG1pZ2h0IEkgbmVlZCB0byB0d2VhayB0aGVtIGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IGhhcmR3YXJlIGFuZCBzdG9yYWdlIGVudmlyb25tZW50PyBJJ2xsIHByb2JhYmx5IGFsc28gY2hlY2sgZm9yIGhlbHAgdGV4dCB0byBzZWUgaG93IHdlbGwgaXQgZXhwbGFpbnMgdGhlIG9wdGlvbnMuIEdvb2QgaGVscCB0ZXh0IGlzIGNydWNpYWwgZm9yIGd1aWRpbmcgdXNlcnMsIGVzcGVjaWFsbHkgbGVzcy1leHBlcmllbmNlZCBvbmVzLlxuXG5GaW5hbGx5LCBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljLiBBcmUgdGhlcmUgYW55IGZlYXR1cmVzIGdhdGVkIGJlaGluZCBjZXJ0YWluIGhhcmR3YXJlIHBsYXRmb3Jtcywga2VybmVsIHZlcnNpb25zLCBvciBvdGhlciBjb21waWxlLXRpbWUgY29uZGl0aW9ucz8gVW5kZXJzdGFuZGluZyB0aGVzZSBjb25kaXRpb25zIGlzIGtleSB0byBlbnN1cmluZyB0aGF0IHRoZSBVREYgZmlsZXN5c3RlbSBiZWhhdmVzIGFzIGV4cGVjdGVkIGFuZCB0aGF0IHRoZSBidWlsZCBpcyBvcHRpbWl6ZWQgZm9yIG15IHNwZWNpZmljIG5lZWRzLiBUaGlzIEtjb25maWcgZmlsZSBpcyBnb2luZyB0byB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBvZiBVREYgc3VwcG9ydCBpbiB0aGUga2VybmVsLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDowOTo1Ny43MzA1MzgyNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3VkZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgVURGX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVURGIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBDUkNfSVRVX1RcXG4gICA2OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA3OlxcdFxcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFRoaXMgaXMgYSBmaWxlIHN5c3RlbSB1c2VkIG9uIHNvbWUgQ0QtUk9NcyBhbmQgRFZEcy4gU2luY2UgdGhlXFxuICAxMDpcXHRcXHQgIGZpbGUgc3lzdGVtIGlzIHN1cHBvcnRlZCBieSBtdWx0aXBsZSBvcGVyYXRpbmcgc3lzdGVtcyBhbmQgaXMgbW9yZVxcbiAgMTE6XFx0XFx0ICBjb21wYXRpYmxlIHdpdGggc3RhbmRhcmQgdW5peCBmaWxlIHN5c3RlbXMsIGl0IGlzIGFsc28gc3VpdGFibGUgZm9yXFxuICAxMjpcXHRcXHQgIHJlbW92YWJsZSBVU0IgZGlza3MuIFNheSBZIGlmIHlvdSBpbnRlbmQgdG8gbW91bnQgRFZEIGRpc2NzIG9yIENEUlcnc1xcbiAgMTM6XFx0XFx0ICB3cml0dGVuIGluIHBhY2tldCBtb2RlLCBvciBpZiB5b3Ugd2FudCB0byB1c2UgVURGIGZvciByZW1vdmFibGUgVVNCXFxuICAxNDpcXHRcXHQgIGRpc2tzLiBQbGVhc2UgcmVhZCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi5yc3RcXHUwMDNlLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDE3OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVkZi5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDowOTo1Ny43MzA2MjUxNTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDMwMzUxNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIFVERiBFeHRlbmRlZCBBdHRyaWJ1dGUgSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVURGIGZpbGVzeXN0ZW0gaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBVREYgY29kZS4gSSdsbCBzdGFydCB3aXRoIGBmcy91ZGYvaW5vZGUuY2AgYW5kIGBmcy91ZGYvbWlzYy5jYC4gSSB3YW50IHRvIHNlZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcywgZGV0ZXJtaW5lIHRoZWlyIHZpc2liaWxpdHkgKGFyZSB0aGV5IGV4cG9ydGVkIG9yIGludGVybmFsPyksIGFuZCBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24uXG5cbk5leHQsIEknbGwgcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIGhvdyBpdCdzIGltcGxlbWVudGVkLiBUaGVuLCBJIG5lZWQgdG8gc2VlICp3aG8qIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiDigJMgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgZmlsZXN5c3RlbSwgb3IgcG90ZW50aWFsbHkgZXZlbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgYXJlIHJlbHlpbmcgb24gaXQ/IElkZW50aWZ5aW5nIGFsbCB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgaW5zaWdodCBpbnRvIGl0cyB1c2FnZSBjb250ZXh0IGFuZCBoZWxwIG1lIHNwb3QgYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBkYXRhIGludGVncml0eSwgYWNjZXNzIGNvbnRyb2wsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBlc3BlY2lhbGx5IHdpdGhpbiBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGl0c2VsZi4gSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgbWlzaGFuZGxlZCBvciBjb3VsZCBiZSBleHBsb2l0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NDUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjAyLjc2MDk3ODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMjY4ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkZl9nZXRfZXh0ZW5kZWRhdHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3VkZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy91ZGYvaW5vZGUuYz0xMjgwPWludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbmV3c2l6ZSlcXG4tLVxcbmZzL3VkZi9pbm9kZS5jLTEzMzktLypcXG5mcy91ZGYvaW5vZGUuYzoxMzQwOiAqIFZlcmlmeSB2YWxpZGl0eSBvZiBzdHJ1Y3QgZGV2aWNlU3BlYyBvbiBkaXNrLiB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpIGhhc1xcbmZzL3VkZi9pbm9kZS5jLTEzNDEtICogYWxyZWFkeSB2ZXJpZmllZCB0aGUgZ2VuZXJpYyBoZWFkZXIgYW5kIG1hZGUgc3VyZSBhdHRyaWJ1dGUgZml0cyBpbiB0aGVcXG4tLVxcbmZzL3VkZi9pbm9kZS5jPTEzNjY9c3RhdGljIGludCB1ZGZfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGhpZGRlbl9pbm9kZSlcXG4tLVxcbmZzL3VkZi9pbm9kZS5jLTE2NzUtXFx0XFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxcbmZzL3VkZi9pbm9kZS5jOjE2NzY6XFx0XFx0XFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcXG5mcy91ZGYvaW5vZGUuYy0xNjc3LVxcbi0tXFxuZnMvdWRmL2lub2RlLmM9MTc3ND1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbi0tXFxuZnMvdWRmL2lub2RlLmMtMTg0NC1cXHRcXHRzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSA9XFxuZnMvdWRmL2lub2RlLmM6MTg0NTpcXHRcXHRcXHQoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpO1xcbmZzL3VkZi9pbm9kZS5jLTE4NDYtXFxuLS1cXG5mcy91ZGYvbWlzYy5jPTI3PXN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLFxcbi0tXFxuZnMvdWRmL21pc2MuYy0xMjctXFxuZnMvdWRmL21pc2MuYzoxMjg6c3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsXFxuZnMvdWRmL21pc2MuYy0xMjktXFx0XFx0XFx0XFx0XFx0ICAgdWludDhfdCBzdWJ0eXBlKVxcbi0tXFxuZnMvdWRmL3VkZmRlY2wuaD0xODQ9ZXh0ZXJuIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKiwgdWludDMyX3QsXFxuZnMvdWRmL3VkZmRlY2wuaC0xODUtXFx0XFx0XFx0XFx0XFx0XFx0ICB1aW50MzJfdCwgdWludDhfdCk7XFxuZnMvdWRmL3VkZmRlY2wuaDoxODY6ZXh0ZXJuIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKiwgdWludDMyX3QsXFxuZnMvdWRmL3VkZmRlY2wuaC0xODctXFx0XFx0XFx0XFx0XFx0XFx0ICB1aW50OF90KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTA6MDIuOTcyMjUxODkxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY3MTYwNDQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBDb2RlIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIEknbSBhbHJlYWR5IGxvb2tpbmcgaW50byB0aGlzIGFyZWEsIGJ1dCBsZXQncyBub3QgZ2V0IHR1bm5lbCB2aXNpb24uIEknbSBkZWVwIGluIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBhbmQgaXRzIGltbWVkaWF0ZSBzdXJyb3VuZGluZyBjb2RlIHJpZ2h0IG5vdywgYnV0IGEgY3J1Y2lhbCBuZXh0IHN0ZXAgaGVyZSBpcyB0byBhbHNvIHZlcmlmeSB3aGljaCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBhY3R1YWxseSAqdXNpbmcqIHRoaXMgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRvd25zdHJlYW0gaW1wYWN0IG9mIGFueSBjaGFuZ2VzIEkgbWFrZSwgYW5kIGZpbmRpbmcgdGhlIGNhbGxlcnMgaXMgZnVuZGFtZW50YWwgdG8gdGhhdC4gSXQncyBub3QgZW5vdWdoIHRvIHVuZGVyc3RhbmQgKndoYXQqIGl0IGRvZXMgaGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZXJlKiBpdCdzIGJlaW5nIHVzZWQgdG9vLiBUaGF0IGNhbGwgZ3JhcGggaXMgaW1wb3J0YW50IGZvciByaXNrIGFzc2Vzc21lbnQgYW5kIGltcGFjdCBhbmFseXNpcy4gU28gSSdsbCBjaGVjayBpdHMgY2FsbGVycyBhbmQgYnVpbGQgdGhhdCBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDowNi42NDM4NTg1OTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODM3NjkzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZGZfYWRkX2V4dGVuZGVkYXR0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWRmL2lub2RlLmM9MTc3ND1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbi0tXFxuZnMvdWRmL2lub2RlLmMtMTg1My1cXHRcXHRcXHRkc2VhID0gKHN0cnVjdCBkZXZpY2VTcGVjICopXFxuZnMvdWRmL2lub2RlLmM6MTg1NDpcXHRcXHRcXHRcXHR1ZGZfYWRkX2V4dGVuZGVkYXR0cihpbm9kZSxcXG5mcy91ZGYvaW5vZGUuYy0xODU1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSArXFxuLS1cXG5mcy91ZGYvbWlzYy5jLTI2LVxcbmZzL3VkZi9taXNjLmM6Mjc6c3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsXFxuZnMvdWRmL21pc2MuYy0yOC1cXHRcXHRcXHRcXHRcXHQgICB1aW50MzJfdCB0eXBlLCB1aW50OF90IGxvYylcXG4tLVxcbmZzL3VkZi91ZGZkZWNsLmg9MTgxPWV4dGVybiB2b2lkIHVkZl91cGRhdGVfZXh0cmFfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCBtb2RlKTtcXG4tLVxcbmZzL3VkZi91ZGZkZWNsLmgtMTgzLS8qIG1pc2MuYyAqL1xcbmZzL3VkZi91ZGZkZWNsLmg6MTg0OmV4dGVybiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICosIHVpbnQzMl90LFxcbmZzL3VkZi91ZGZkZWNsLmgtMTg1LVxcdFxcdFxcdFxcdFxcdFxcdCAgdWludDMyX3QsIHVpbnQ4X3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDowNi43NTIyNDE0ODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjYxNjYyNjIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVURGIEZpbGVzeXN0ZW0gQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZSBVREYgZmlsZXN5c3RlbSBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gZnVuY3Rpb25zIHRoYXQgYXJlbid0IGRlY2xhcmVkIGFzIGBzdGF0aWNgIGFuZCB0aGF0IGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIG9yIHN5bWJvbHMgdGhhdCBtaWdodCBiZSBtb2RpZmllZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBnb29kIHdheSB0byBxdWlja2x5IGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgZXNwZWNpYWxseSB3aGVuIEknbSBsb29raW5nIGZvciBob3cgZGF0YSBpcyBhY2Nlc3NlZCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIHN5c3RlbS5cblxuRmlyc3QsIEknbSBleGFtaW5pbmcgYGZzL3VkZi9pbm9kZS5jYC4gSSBzZWUgYHVkZl93cml0ZV9pbm9kZWAgaXMgbm9uLXN0YXRpYy4gVGhhdCdzIGEgZ29vZCBzaWduLCBsaWtlbHkgaW52b2x2ZWQgaW4gd3JpdGluZyBpbm9kZSBkYXRhLCBhbmQgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhpcyBzcGVjaWZpYyBmaWxlLiBgdWRmX3JlYWRfaW5vZGVgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdHMgdXNhZ2UgaXMgbGltaXRlZCB0byB0aGlzIGZpbGUsIHdoaWNoIGlzIGNhbGxlZCBieSBgX191ZGZfaWdldGAgYW5kIGB1ZGZfaWdldGAuIGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWRgIGlzIGFsc28gYSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uOyBzbyBub3QgdGhhdCBpbnRlcmVzdGluZyBmb3Igb3VyIGN1cnJlbnQgZ29hbC5cblxuTmV4dCwgSSdtIG1vdmluZyBvbiB0byBgZnMvdWRmL21pc2MuY2AuIEhlcmUsIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cmAgYW5kIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAgYXJlIG5vbi1zdGF0aWMgYW5kIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGFsbG93IGFkZGluZyBvciBmZXRjaGluZyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzLiBJdCBtYWtlcyBzZW5zZSwgYXMgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgYSBjb21tb24gd2F5IHRvIHByb3ZpZGUgYWRkaXRpb25hbCBtZXRhZGF0YSB0byBhIGZpbGUuIFRoZXNlIHdpbGwgcHJvdmlkZSBnZW5lcmljIEZvcm1hdCBzdHJ1Y3R1cmVzIGFuZCBzaG91bGQgYmUgY2FyZWZ1bGx5IHJldmlld2VkLiBGaW5hbGx5LCBub3RpbmcgdGhhdCBgdWRmX2lnZXRgIGFuZCBgX191ZGZfaWdldGAgYXJlIGluIGBpbm9kZS5jYCwgYXJlIGltcG9ydGFudCBlbnRyeXBvaW50cyBmb3IgcmVhZGluZyBpbm9kZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMzcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTA6MTMuMzY4ODY5ODc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyNzQwMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRmX3JlYWRfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWRmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3VkZi9pbm9kZS5jLTE4LSAqICAxMi8wNi85OCBibGYgIHBhcnRpdGlvbiBzdXBwb3J0IGluIHVkZl9pZ2V0LCB1ZGZfYmxvY2tfbWFwXFxuZnMvdWRmL2lub2RlLmM6MTk6ICogICAgICAgICAgICAgICAgYW5kIHVkZl9yZWFkX2lub2RlXFxuZnMvdWRmL2lub2RlLmMtMjAtICogIDEyLzEyLzk4ICAgICAgcmV3cm90ZSB1ZGZfYmxvY2tfbWFwIHRvIGhhbmRsZSBuZXh0IGV4dGVudHMgYW5kIGRlc2NzIGFjcm9zc1xcbi0tXFxuZnMvdWRmL2lub2RlLmM9MTM0NT1zdGF0aWMgYm9vbCB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoc3RydWN0IGRldmljZVNwZWMgKmRzZWEpXFxuLS1cXG5mcy91ZGYvaW5vZGUuYy0xMzY1LVxcbmZzL3VkZi9pbm9kZS5jOjEzNjY6c3RhdGljIGludCB1ZGZfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGhpZGRlbl9pbm9kZSlcXG5mcy91ZGYvaW5vZGUuYy0xMzY3LXtcXG4tLVxcbmZzL3VkZi9pbm9kZS5jPTIwMDk9c3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqaW5vLFxcbi0tXFxuZnMvdWRmL2lub2RlLmMtMjAyNy1cXHRtZW1jcHkoXFx1MDAyNlVERl9JKGlub2RlKS1cXHUwMDNlaV9sb2NhdGlvbiwgaW5vLCBzaXplb2Yoc3RydWN0IGtlcm5lbF9sYl9hZGRyKSk7XFxuZnMvdWRmL2lub2RlLmM6MjAyODpcXHRlcnIgPSB1ZGZfcmVhZF9pbm9kZShpbm9kZSwgaGlkZGVuX2lub2RlKTtcXG5mcy91ZGYvaW5vZGUuYy0yMDI5LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjEzLjQ2OTE0ODY3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjAxMjM5ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVURGIEZpbGVzeXN0ZW0ncyBpLW5vZGUgSGFuZGxpbmcqKlxuXG5SaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBpLW5vZGVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgVURGIGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aG9zZSBjdXN0b20gVURGLXNwZWNpZmljIG9wZXJhdGlvbnMuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGZzL3VkZi9pbm9kZS5jYCwgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYF9fdWRmX2lnZXRgIGFuZCBgdWRmX2lnZXRgLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgZGlmZmVyZW5jZXMgYW5kIHNoYXJlZCByZXNwb25zaWJpbGl0aWVzLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgbnVhbmNlcyBvZiBVREYncyBtZXRhZGF0YSBzdG9yYWdlIGFuZCByZXRyaWV2YWwuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIHJvbGVzIGluIGZldGNoaW5nIGFuZCBpbml0aWFsaXppbmcgaS1ub2RlIGRhdGEgZnJvbSB0aGUgZGlzYy4gSSBhbnRpY2lwYXRlIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIGFyb3VuZCB0aGUgaGFuZGxpbmcgb2YgZXh0ZW5kZWQgYXR0cmlidXRlcyBvciBzcGVjaWZpYyBVREYgc3RydWN0dXJlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjE2LjY3MDM5MTMzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvdWRmL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwNSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAwNTpcXHRcXHRicmVsc2UoYmgpO1xcbjIwMDY6XFx0XFx0cmV0dXJuIGVycjtcXG4yMDA3OlxcdH1cXG4yMDA4OlxcdFxcbjIwMDk6XFx0c3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqaW5vLFxcbjIwMTA6XFx0XFx0XFx0XFx0IGJvb2wgaGlkZGVuX2lub2RlKVxcbjIwMTE6XFx0e1xcbjIwMTI6XFx0XFx0dW5zaWduZWQgbG9uZyBibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCBpbm8sIDApO1xcbjIwMTM6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBibG9jayk7XFxuMjAxNDpcXHRcXHRpbnQgZXJyO1xcbjIwMTU6XFx0XFxuMjAxNjpcXHRcXHRpZiAoIWlub2RlKVxcbjIwMTc6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMjAxODpcXHRcXG4yMDE5OlxcdFxcdGlmICghKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXFx1MDAyNiBJX05FVykpIHtcXG4yMDIwOlxcdFxcdFxcdGlmIChVREZfSShpbm9kZSktXFx1MDAzZWlfaGlkZGVuICE9IGhpZGRlbl9pbm9kZSkge1xcbjIwMjE6XFx0XFx0XFx0XFx0aXB1dChpbm9kZSk7XFxuMjAyMjpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcXG4yMDIzOlxcdFxcdFxcdH1cXG4yMDI0OlxcdFxcdFxcdHJldHVybiBpbm9kZTtcXG4yMDI1OlxcdFxcdH1cXG4yMDI2OlxcdFxcbjIwMjc6XFx0XFx0bWVtY3B5KFxcdTAwMjZVREZfSShpbm9kZSktXFx1MDAzZWlfbG9jYXRpb24sIGlubywgc2l6ZW9mKHN0cnVjdCBrZXJuZWxfbGJfYWRkcikpO1xcbjIwMjg6XFx0XFx0ZXJyID0gdWRmX3JlYWRfaW5vZGUoaW5vZGUsIGhpZGRlbl9pbm9kZSk7XFxuMjAyOTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjIwMzA6XFx0XFx0XFx0aWdldF9mYWlsZWQoaW5vZGUpO1xcbjIwMzE6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yMDMyOlxcdFxcdH1cXG4yMDMzOlxcdFxcdHVubG9ja19uZXdfaW5vZGUoaW5vZGUpO1xcbjIwMzQ6XFx0XFxuMjAzNTpcXHRcXHRyZXR1cm4gaW5vZGU7XFxuMjAzNjpcXHR9XFxuMjAzNzpcXHRcXG4yMDM4OlxcdGludCB1ZGZfc2V0dXBfaW5kaXJlY3RfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1ZGZfcGJsa190IGJsb2NrLFxcbjIwMzk6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmVwb3MpXFxuMjA0MDpcXHR7XFxuMjA0MTpcXHRcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuMjA0MjpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbjIwNDM6XFx0XFx0c3RydWN0IGFsbG9jRXh0RGVzYyAqYWVkO1xcbjIwNDQ6XFx0XFx0c3RydWN0IGV4dGVudF9wb3NpdGlvbiBuZXBvcztcXG4yMDQ1OlxcdFxcdHN0cnVjdCBrZXJuZWxfbGJfYWRkciBuZWxvYztcXG4yMDQ2OlxcdFxcdGludCB2ZXIsIGFkc2l6ZTtcXG4yMDQ3OlxcdFxcdGludCBlcnIgPSAwO1xcbjIwNDg6XFx0XFxuMjA0OTpcXHRcXHRpZiAoVURGX0koaW5vZGUpLVxcdTAwM2VpX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjE2LjY3MDUxMjgyN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTE2Nzk4MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFVERiBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmaWxlcyBiZXNpZGVzIHdoYXQncyBtZW50aW9uZWQgaW4gdGhlIGluaXRpYWwgZGVzY3JpcHRpb24uIFRoZW4sIGxldCdzIGdvIG92ZXIgdGhlIGRpZmYgYWdhaW4sIHBhcnRpY3VsYXJseSBsb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIGBmcy91ZGYvaW5vZGUuY2AgaW52b2x2aW5nIGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWRgLCBgdWRmX3JlYWRfaW5vZGVgLCBhbmQgYHVkZl93cml0ZV9pbm9kZWAsIGFuZCBhbHNvIGBmcy91ZGYvbWlzYy5jYCwgd2hlcmUgd2Ugc2VlIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cmAgYW5kIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAgYmVpbmcgbW9kaWZpZWQuXG5cbkhtbSwgaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IFllcywgYWJzb2x1dGVseS4gVGhpcyBhZGRyZXNzZXMgc29tZSBjcnVjaWFsIHZ1bG5lcmFiaWxpdGllczogYm91bmRzIGNoZWNrcyBhbmQgdmFsaWRpdHkgY2hlY2tzLCBhbmQgZXJyb3IgcHJvcGFnYXRpb24gYXJlIGltcHJvdmVkIGZvciBoYW5kbGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzIHdpdGhpbiB0aGUgVURGIGZpbGVzeXN0ZW0gY29kZS4gSXQgbG9va3MgbGlrZSBpdCdzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc3BlY2lhbCBkZXZpY2UgaW5vZGVzIGFuZCB0aGUgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYCBhbmQgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgbWFsZm9ybWVkIFVERiBmaWxlc3lzdGVtIGltYWdlcyBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoZXNlIGNvZGUgcGF0aHMgZHVyaW5nIGEgbW91bnQgb3BlcmF0aW9uLCBpbm9kZSBsb29rdXBzLCByZWFkcywgb3IgZXZlbiB3cml0ZWJhY2tzLiBUaGF0J3MgYSB0ZXh0Ym9vayBjYXNlIGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0IHRoZSBDT05GSUcgc2V0dGluZ3MgYXJlLiBJbiB0aGUgYGZzL3VkZi9LY29uZmlnYCBmaWxlLCB3ZSBoYXZlIGBjb25maWcgVURGX0ZTYCwgd2hpY2ggc2VsZWN0cyBCVUZGRVJfSEVBRCwgQ1JDX0lUVV9ULCBOTFMsIGFuZCBMRUdBQ1lfRElSRUNUX0lPLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBkZXBlbmQgb24gYW55dGhpbmcgZWxzZSBjcml0aWNhbC4gVGltZSB0byBjaGVjayBgZnMvdWRmL0tjb25maWdgIGFuZCBgZnMvS2NvbmZpZ2AgZm9yIGRlcGVuZGVuY2llcyBhcm91bmQgYFVERl9GU2AuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2MSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjIyLjc4NzMxMzg4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzEwODg5NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVURGX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT0xMDU9b2JqLSQoQ09ORklHX09SQU5HRUZTX0ZTKSAgICAgICArPSBvcmFuZ2Vmcy9cXG5mcy9NYWtlZmlsZToxMDY6b2JqLSQoQ09ORklHX1VERl9GUylcXHRcXHQrPSB1ZGYvXFxuZnMvTWFrZWZpbGUtMTA3LW9iai0kKENPTkZJR19TVU5fT1BFTlBST01GUylcXHQrPSBvcGVucHJvbWZzL1xcbi0tXFxuZnMvdWRmL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy91ZGYvS2NvbmZpZzoyOmNvbmZpZyBVREZfRlNcXG5mcy91ZGYvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJVREYgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3VkZi9NYWtlZmlsZS01LVxcbmZzL3VkZi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19VREZfRlMpICs9IHVkZi5vXFxuZnMvdWRmL01ha2VmaWxlLTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjIzLjE1ODQwNjY1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTU1ODY2NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVURGIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbiBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIFVERiBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgVURGX0ZTYC4gTXkgZm9jdXMgbm93IGlzIG9uIGlkZW50aWZ5aW5nIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoaXMgcmlnaHQuIExldCdzIHNlZS4uLiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRob3NlIG5vbi1zdGF0aWMgc3ltYm9scywgdGhlIGZvY3VzIHN5bWJvbHMsIHRvIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gSSBoYXZlIHRoZXNlIG9uZXMgYWxyZWFkeTogYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYCwgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCwgYHVkZl93cml0ZV9pbm9kZWAsIGFuZCBgX191ZGZfaWdldGAuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBpbXBvcnRhbnQgc3ltYm9scyBvciBlbnRyeSBwb2ludHMgdGhhdCBJJ3ZlIG1pc3NlZC4gIEFoLCBgdWRmX3JlYWRfaW5vZGVgIGlzIHN0YXRpYy4gVGhhdCBvbmUncyBub3QgZ29pbmcgdG8gYmUgb24gdGhlIGxpc3QuIEkgc2VlIHRoYXQgYF9fdWRmX2lnZXRgIGNhbGxzIGl0LCBidXQgdGhlIGZvcm1lciBpcyB0aGUgbW9yZSBpbXBvcnRhbnQgdGFyZ2V0LiBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGlzIGV4cG9ydGVkLCBzbyBpdCdzIGdvb2QsIG5vbi1zdGF0aWMuICBMaWtld2lzZSwgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYy4gYHVkZl93cml0ZV9pbm9kZWAgaXMgYWxzbyBleHBvcnRlZCwgYW5kIHRoZXJlZm9yZSBub24tc3RhdGljLlxuXG5Pa2F5LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zIGZvciBGb2N1c1N5bWJvbHMuICBUaGUgZ29hbCBpcyB0byBwaW5wb2ludCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIHdvcnRoIGhlYXZ5IGZ1enppbmcsIGF2b2lkaW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBXZSB3YW50IHRvIGFpbSBmb3IgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHRob3NlIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLCB3aGljaCB0aGUgY29tcGlsZXIgaW5saW5lcyBhbnl3YXkuIFRoYXQgbWFrZXMgc2Vuc2UuXG5cblNvLCB0YWtpbmcgYWxsIG9mIHRoYXQgaW50byBhY2NvdW50LCBJJ20gY29uZmlkZW50IGluIHRoZSBzeW1ib2xzOlxuXG4qICAgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYFxuKiAgIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cmBcbiogICBgdWRmX3dyaXRlX2lub2RlYFxuKiAgIGBfX3VkZl9pZ2V0YFxuXG5BbmQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZSBpczpcblxuKiAgIGBVREZfRlNgXG5cbkFscmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBMZXQncyBnZXQgdGhlc2UgY2hhbmdlcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyNSwiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTA6MjguMTE0Mjc1Nzc3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDI0MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVREZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZGZfZ2V0X2V4dGVuZGVkYXR0clwiLFxuICAgIFwidWRmX2FkZF9leHRlbmRlZGF0dHJcIixcbiAgICBcInVkZl93cml0ZV9pbm9kZVwiLFxuICAgIFwiX191ZGZfaWdldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgVURGIGRldmljZSBzcGVjaWZpY2F0aW9uIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIGZpeGVzIGVycm9yIGhhbmRsaW5nL3Byb3BhZ2F0aW9uIGZvciBjb3JydXB0ZWQgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiBVREYgZmlsZXN5c3RlbSBpbm9kZSByZWFkL3dyaXRlIHBhdGhzLiBUaGlzIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBieSBtb3VudGluZyBhbmQgcmVhZGluZy93cml0aW5nIGNyYWZ0ZWQgVURGIGZpbGVzeXN0ZW0gaW1hZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVERl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkZl9nZXRfZXh0ZW5kZWRhdHRyXCIsXG4gICAgXCJ1ZGZfYWRkX2V4dGVuZGVkYXR0clwiLFxuICAgIFwidWRmX3dyaXRlX2lub2RlXCIsXG4gICAgXCJfX3VkZl9pZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBVREYgZGV2aWNlIHNwZWNpZmljYXRpb24gZXh0ZW5kZWQgYXR0cmlidXRlcyBhbmQgZml4ZXMgZXJyb3IgaGFuZGxpbmcvcHJvcGFnYXRpb24gZm9yIGNvcnJ1cHRlZCBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIFVERiBmaWxlc3lzdGVtIGlub2RlIHJlYWQvd3JpdGUgcGF0aHMuIFRoaXMgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IG1vdW50aW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgY3JhZnRlZCBVREYgZmlsZXN5c3RlbSBpbWFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjI4LjI1OTcwODczMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0OTEyMjA2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDoyOC4yNjAxNzUwNTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjQ5MDc1MDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzYW5pdHkgYW5kIGJvdW5kcyBjaGVja2luZyBmb3IgVURGIGZpbGVzeXN0ZW0gZXh0ZW5kZWQgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5IGZvciBkZXZpY2VTcGVjIGF0dHJpYnV0ZXMgb24gc3BlY2lhbCBkZXZpY2UgaW5vZGVzIChjaGFyYWN0ZXIvYmxvY2sgZGV2aWNlcykuIEl0IGludHJvZHVjZXMgYHVkZl9kZXZpY2Vfc3BlY192YWxpZCgpYCB0byB2YWxpZGF0ZSBhdHRyaWJ1dGUgYW5kIGltcGxlbWVudGF0aW9uLXVzZSBsZW5ndGhzIGFnYWluc3QgYnVmZmVyIGJvdW5kcywgcHJvcGVybHkgaGFuZGxlcyBgRVJSX1BUUmAgZXJyb3IgcmV0dXJucyBmcm9tIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpYCBhbmQgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyKClgLCBhbmQgZml4ZXMgbG9vcCBib3VuZGFyeSBjaGVja3Mgd2hlbiBpdGVyYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcywgd2hpY2ggZmFsbCB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmZjQwOGM3MzhkYTk4OTQ1OWE4YmYwODUzZGFhN2MxNDFlZmZjNzQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMDowODo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmNcbmluZGV4IGU0NWU1NDZhNzM5YTkuLjhiYWJjMmZiY2U5YTEgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvaW5vZGUuY1xuKysrIGIvZnMvdWRmL2lub2RlLmNcbkBAIC0xMzM2LDYgKzEzMzYsMjYgQEAgaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rLypcbisgKiBWZXJpZnkgdmFsaWRpdHkgb2Ygc3RydWN0IGRldmljZVNwZWMgb24gZGlzay4gdWRmX2dldF9leHRlbmRlZGF0dHIoKSBoYXNcbisgKiBhbHJlYWR5IHZlcmlmaWVkIHRoZSBnZW5lcmljIGhlYWRlciBhbmQgbWFkZSBzdXJlIGF0dHJpYnV0ZSBmaXRzIGluIHRoZVxuKyAqIGlub2RlIHNvIHdlIGp1c3QgaGF2ZSB0byBtYWtlIHN1cmUgYXR0cmlidXRlIHNwYWNlIGlzIGxhcmdlIGVub3VnaCBmb3JcbisgKiBkZXZpY2VTcGVjIHN0cnVjdCBhbmQgcmVxdWlyZWQgaW1wVXNlIGluZm9ybWF0aW9uLlxuKyAqL1xuK3N0YXRpYyBib29sIHVkZl9kZXZpY2Vfc3BlY192YWxpZChzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSlcbit7XG4rXHR1MzIgYXR0cl9sZW5ndGgsIGltcF91c2VfbGVuZ3RoO1xuK1xuK1x0YXR0cl9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLVx1MDAzZWF0dHJMZW5ndGgpO1xuK1x0aW1wX3VzZV9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLVx1MDAzZWltcFVzZUxlbmd0aCk7XG4rXHRpZiAoYXR0cl9sZW5ndGggXHUwMDNjIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgfHxcbitcdCAgICBpbXBfdXNlX2xlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCByZWdpZCkgfHxcbitcdCAgICBpbXBfdXNlX2xlbmd0aCBcdTAwM2UgYXR0cl9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gLypcbiAgKiBNYXhpbXVtIGxlbmd0aCBvZiBsaW5rZWQgbGlzdCBmb3JtZWQgYnkgSUNCIGhpZXJhcmNoeS4gVGhlIGNob3NlbiBudW1iZXIgaXNcbiAgKiBhcmJpdHJhcnkgLSBqdXN0IHRoYXQgd2UgaG9wZWZ1bGx5IGRvbid0IGxpbWl0IGFueSByZWFsIHVzZSBvZiByZXdyaXR0ZW5cbkBAIC0xNjU0LDEzICsxNjc0LDE5IEBAIHN0YXRpYyBpbnQgdWRmX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBoaWRkZW5faW5vZGUpXG4gXHRpZiAoU19JU0NIUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuIFx0XHRzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSA9XG4gXHRcdFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcbi1cdFx0aWYgKGRzZWEpIHtcbi1cdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfbW9kZSxcbitcbitcdFx0aWYgKElTX0VSUihkc2VhKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIoZHNlYSk7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0LyogRGV2aWNlIGlub2RlcyBtdXN0IGhhdmUgYSBkZXZpY2Ugc3BlYyBhdHRyaWJ1dGUgKi9cbitcdFx0aWYgKCFkc2VhIHx8ICF1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoZHNlYSkpIHtcbitcdFx0XHRyZXQgPSAtRUZTQ09SUlVQVEVEO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9tb2RlLFxuIFx0XHRcdFx0TUtERVYobGUzMl90b19jcHUoZHNlYS1cdTAwM2VtYWpvckRldmljZUlkZW50KSxcbiBcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGRzZWEtXHUwMDNlbWlub3JEZXZpY2VJZGVudCkpKTtcbi1cdFx0XHQvKiBEZXZlbG9wZXIgSUQgPz8/ICovXG4tXHRcdH0gZWxzZVxuLVx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0cmV0ID0gMDtcbiBvdXQ6XG5AQCAtMTc1Nyw2ICsxNzgzLDcgQEAgaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0dW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbiBcdHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7XG4rXHRpbnQgZXJyO1xuIFxuIFx0YmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYixcbiBcdFx0XHR1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS1cdTAwM2VpX3NiLCBcdTAwMjZpaW5mby1cdTAwM2VpX2xvY2F0aW9uLCAwKSk7XG5AQCAtMTgxNiwxMSArMTg0MywyMSBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0XHRzdHJ1Y3QgcmVnaWQgKmVpZDtcbiBcdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuIFx0XHRcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XG4rXG4rXHRcdC8qIFZhbGlkaXR5IG9mIGV4dGVuZGVkIGF0dHJzIHdhcyBjaGVja2VkIG9uIGxvYWQgKi9cbitcdFx0aWYgKFdBUk5fT05fT05DRShJU19FUlIoZHNlYSkpKSB7XG4rXHRcdFx0ZXJyID0gUFRSX0VSUihkc2VhKTtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbiBcdFx0aWYgKCFkc2VhKSB7XG4gXHRcdFx0ZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKVxuIFx0XHRcdFx0dWRmX2FkZF9leHRlbmRlZGF0dHIoaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICtcbiBcdFx0XHRcdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgcmVnaWQpLCAxMiwgMHgzKTtcbitcdFx0XHRpZiAoSVNfRVJSKGRzZWEpKSB7XG4rXHRcdFx0XHRlcnIgPSBQVFJfRVJSKGRzZWEpO1xuK1x0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHRcdH1cbiBcdFx0XHRkc2VhLVx1MDAzZWF0dHJUeXBlID0gY3B1X3RvX2xlMzIoMTIpO1xuIFx0XHRcdGRzZWEtXHUwMDNlYXR0clN1YnR5cGUgPSAxO1xuIFx0XHRcdGRzZWEtXHUwMDNlYXR0ckxlbmd0aCA9IGNwdV90b19sZTMyKFxuQEAgLTE5NjIsNiArMTk5OSwxMSBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitvdXRfdW5sb2NrOlxuK1x0dW5sb2NrX2J1ZmZlcihiaCk7XG4rXHRicmVsc2UoYmgpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqaW5vLFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9taXNjLmMgYi9mcy91ZGYvbWlzYy5jXG5pbmRleCA2OTI4ZTM3OGZiYmRjLi5hMjA4NGRmYmZiZDY2IDEwMDY0NFxuLS0tIGEvZnMvdWRmL21pc2MuY1xuKysrIGIvZnMvdWRmL21pc2MuY1xuQEAgLTU4LDcgKzU4LDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsXG4gXHRcdFx0XHRcdGNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fFxuIFx0XHRcdCAgICBsZTMyX3RvX2NwdShlYWhkLVx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XG4gXHRcdFx0XHRcdGlpbmZvLVx1MDAzZWlfbG9jYXRpb24ubG9naWNhbEJsb2NrTnVtKVxuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsXG4gXHRcdHJldHVybiAoc3RydWN0IGdlbmVyaWNGb3JtYXQgKilcdTAwMjZlYVtvZmZzZXRdO1xuIFx0fVxuIFxuLVx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbiB9XG4gXG4gc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsXG5AQCAtMTQ0LDcgKzE0NCw3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCB0eXBlLFxuIFx0XHRcdFx0Y3B1X3RvX2xlMTYoVEFHX0lERU5UX0VBSEQpIHx8XG4gXHRcdCAgICBsZTMyX3RvX2NwdShlYWhkLVx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XG4gXHRcdFx0XHRpaW5mby1cdTAwM2VpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSlcbi1cdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbiBcbiBcdFx0aWYgKHR5cGUgXHUwMDNjIDIwNDgpXG4gXHRcdFx0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjKTtcbkBAIC0xNTMsMTYgKzE1MywxNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcbiBcdFx0ZWxzZVxuIFx0XHRcdG9mZnNldCA9IGxlMzJfdG9fY3B1KGVhaGQtXHUwMDNlYXBwQXR0ckxvY2F0aW9uKTtcbiBcbi1cdFx0d2hpbGUgKG9mZnNldCArIHNpemVvZigqZ2FmKSBcdTAwM2MgaWluZm8tXHUwMDNlaV9sZW5FQXR0cikge1xuK1x0XHR3aGlsZSAob2Zmc2V0IFx1MDAzY1xuK1x0XHQgICAgICAgaWluZm8tXHUwMDNlaV9sZW5FQXR0ciAtIHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkpIHtcbiBcdFx0XHR1aW50MzJfdCBhdHRyTGVuZ3RoO1xuIFxuIFx0XHRcdGdhZiA9IChzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqKVx1MDAyNmVhW29mZnNldF07XG4gXHRcdFx0YXR0ckxlbmd0aCA9IGxlMzJfdG9fY3B1KGdhZi1cdTAwM2VhdHRyTGVuZ3RoKTtcbiBcbiBcdFx0XHQvKiBEZXRlY3QgdW5kZXJzaXplZCBlbGVtZW50cyBhbmQgYnVmZmVyIG92ZXJmbG93cyAqL1xuLVx0XHRcdGlmICgoYXR0ckxlbmd0aCBcdTAwM2Mgc2l6ZW9mKCpnYWYpKSB8fFxuLVx0XHRcdCAgICAoYXR0ckxlbmd0aCBcdTAwM2UgKGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIgLSBvZmZzZXQpKSlcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmIChhdHRyTGVuZ3RoIFx1MDAzYyBzaXplb2Yoc3RydWN0IGdlbmVyaWNGb3JtYXQpIHx8XG4rXHRcdFx0ICAgIGF0dHJMZW5ndGggXHUwMDNlIGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIgLSBvZmZzZXQpXG4rXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbiBcbiBcdFx0XHRpZiAobGUzMl90b19jcHUoZ2FmLVx1MDAzZWF0dHJUeXBlKSA9PSB0eXBlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0XHRnYWYtXHUwMDNlYXR0clN1YnR5cGUgPT0gc3VidHlwZSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjI4LjI2MDE3NTg1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjI0MDE4MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVURGIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFVERiBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL3VkZi9pbm9kZS5jYCBhbmQgYGZzL3VkZi9taXNjLmNgLiBJdCBhcHBlYXJzIHdlJ3JlIGRlYWxpbmcgd2l0aCBlbmhhbmNlZCBlcnJvciBoYW5kbGluZyBhbmQgdmFsaWRhdGlvbiBhcm91bmQgZXh0ZW5kZWQgYXR0cmlidXRlcywgbGlrZWx5IHRvIGltcHJvdmUgdGhlIG92ZXJhbGwgcm9idXN0bmVzcyBhbmQgc3RhYmlsaXR5IG9mIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgdWRmX2RldmljZV9zcGVjX3ZhbGlkKClgLiBUaGlzIHN1Z2dlc3RzIHdlIGFyZSB2YWxpZGF0aW5nIHRoZSBgc3RydWN0IGRldmljZVNwZWNgIHdpdGhpbiBgdWRmX3JlYWRfaW5vZGUoKWAsIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIGlub2RlIHJlYWRzLiBUaGlzIGlzIHNtYXJ0LCB3ZSBzaG91bGQgYmUgZG9pbmcgdGhpcyB2YWxpZGF0aW9uLlxuXG5UaGUgY2hhbmdlcyBpbiBgdWRmX3JlYWRfaW5vZGUoKWAgbm93IGluY29ycG9yYXRlIGVycm9yIGhhbmRsaW5nIGZvciB0aGUgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGNhbGwsIHNwZWNpZmljYWxseSBjaGVja2luZyBmb3IgYElTX0VSUihkc2VhKWAgYW5kIGFwcGx5aW5nIG91ciBuZXcgdmFsaWRhdGlvbiBmdW5jdGlvbi4gVGhpcyBtZWFucyB0aGUgY29kZSBpcyBub3cgZ3JhY2VmdWxseSBoYW5kbGluZyBwb3RlbnRpYWwgZXJyb3JzIGZyb20gYXR0cmlidXRlIHJldHJpZXZhbCBhbmQgcHJldmVudGluZyBjb3JydXB0ZWQgZGF0YSBmcm9tIHByb3BhZ2F0aW5nLlxuXG5JbiBgdWRmX3dyaXRlX2lub2RlKClgLCB3ZSBzZWUgc2ltaWxhciBlcnJvciBoYW5kbGluZyBhcm91bmQgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHIoKWAsIGp1bXBpbmcgdG8gYG91dF91bmxvY2tgIGFuZCByZXR1cm5pbmcgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgZmlsZXN5c3RlbSBjb3JydXB0aW9uIGR1cmluZyBpbm9kZSB3cml0ZXMuXG5cbkZpbmFsbHksIGluIGBmcy91ZGYvbWlzYy5jYCwgdGhlIGNoYW5nZXMgdG8gdGhlIHJldHVybiB2YWx1ZXMgb2YgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyKClgIGFuZCBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgZnJvbSBgTlVMTGAgdG8gYEVSUl9QVFIoLi4uKWAgYXJlIHNpZ25pZmljYW50LiBUaGlzIGlzIGEgY3J1Y2lhbCBpbXByb3ZlbWVudCBpbiBlcnJvciByZXBvcnRpbmcuIFByZXZpb3VzbHkgYSBgTlVMTGAgcmV0dXJuIGNvdWxkIGJlIGFtYmlndW91cy4gVGhlIGludHJvZHVjdGlvbiBvZiBzcGVjaWZpYyBlcnJvciBjb2RlcyBsaWtlIGBFUlJfUFRSKC1FRlNDT1JSVVBURUQpYCBmb3IgYm91bmRzIGNoZWNrcyB3aXRoaW4gYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGlzIHBhcnRpY3VsYXJseSBoZWxwZnVsIGZvciBkZWJ1Z2dpbmcuIFRoZSB1c2Ugb2YgZXJyb3IgcG9pbnRlcnMgY2xhcmlmaWVzIGVycm9yIHBhdGhzLCBhbmQgZW5hYmxlcyBiZXR0ZXIgZGVidWdnaW5nLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC4gSSBuZWVkIHRvIGlkZW50aWZ5ICphbGwqIGNhbGxlcnMgb2YgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYCBhbmQgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgbG9jYWxpemVkLCBvciBpZiB0aGVyZSBhcmUga25vY2stb24gZWZmZWN0cyBlbHNld2hlcmUuIFRoaXMgd2lkZXIgcmV2aWV3IGlzIGVzc2VudGlhbCB0byBhc3Nlc3MgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEknbGwgbmVlZCB0byBjaGVjayBpZiBhbnkgb3RoZXIgY29kZSBwYXRocyBuZWVkIHRvIGJlIGFkanVzdGVkIHRvIGhhbmRsZSB0aGUgbmV3IGBFUlJfUFRSKC4uLilgIHJldHVybiB2YWx1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDozNC44ODQxOTczMDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODEzNzg1MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRmXyhnZXR8YWRkKV9leHRlbmRlZGF0dHJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWRmL2lub2RlLmM9MTI4MD1pbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXFxuLS1cXG5mcy91ZGYvaW5vZGUuYy0xMzM5LS8qXFxuZnMvdWRmL2lub2RlLmM6MTM0MDogKiBWZXJpZnkgdmFsaWRpdHkgb2Ygc3RydWN0IGRldmljZVNwZWMgb24gZGlzay4gdWRmX2dldF9leHRlbmRlZGF0dHIoKSBoYXNcXG5mcy91ZGYvaW5vZGUuYy0xMzQxLSAqIGFscmVhZHkgdmVyaWZpZWQgdGhlIGdlbmVyaWMgaGVhZGVyIGFuZCBtYWRlIHN1cmUgYXR0cmlidXRlIGZpdHMgaW4gdGhlXFxuLS1cXG5mcy91ZGYvaW5vZGUuYz0xMzY2PXN0YXRpYyBpbnQgdWRmX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBoaWRkZW5faW5vZGUpXFxuLS1cXG5mcy91ZGYvaW5vZGUuYy0xNjc1LVxcdFxcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cXG5mcy91ZGYvaW5vZGUuYzoxNjc2OlxcdFxcdFxcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XFxuZnMvdWRmL2lub2RlLmMtMTY3Ny1cXG4tLVxcbmZzL3VkZi9pbm9kZS5jPTE3NzQ9aW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4tLVxcbmZzL3VkZi9pbm9kZS5jLTE4NDQtXFx0XFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxcbmZzL3VkZi9pbm9kZS5jOjE4NDU6XFx0XFx0XFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcXG5mcy91ZGYvaW5vZGUuYy0xODQ2LVxcbi0tXFxuZnMvdWRmL2lub2RlLmMtMTg1My1cXHRcXHRcXHRkc2VhID0gKHN0cnVjdCBkZXZpY2VTcGVjICopXFxuZnMvdWRmL2lub2RlLmM6MTg1NDpcXHRcXHRcXHRcXHR1ZGZfYWRkX2V4dGVuZGVkYXR0cihpbm9kZSxcXG5mcy91ZGYvaW5vZGUuYy0xODU1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSArXFxuLS1cXG5mcy91ZGYvbWlzYy5jLTI2LVxcbmZzL3VkZi9taXNjLmM6Mjc6c3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsXFxuZnMvdWRmL21pc2MuYy0yOC1cXHRcXHRcXHRcXHRcXHQgICB1aW50MzJfdCB0eXBlLCB1aW50OF90IGxvYylcXG4tLVxcbmZzL3VkZi9taXNjLmMtMTI3LVxcbmZzL3VkZi9taXNjLmM6MTI4OnN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCB0eXBlLFxcbmZzL3VkZi9taXNjLmMtMTI5LVxcdFxcdFxcdFxcdFxcdCAgIHVpbnQ4X3Qgc3VidHlwZSlcXG4tLVxcbmZzL3VkZi91ZGZkZWNsLmg9MTgxPWV4dGVybiB2b2lkIHVkZl91cGRhdGVfZXh0cmFfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCBtb2RlKTtcXG4tLVxcbmZzL3VkZi91ZGZkZWNsLmgtMTgzLS8qIG1pc2MuYyAqL1xcbmZzL3VkZi91ZGZkZWNsLmg6MTg0OmV4dGVybiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICosIHVpbnQzMl90LFxcbmZzL3VkZi91ZGZkZWNsLmgtMTg1LVxcdFxcdFxcdFxcdFxcdFxcdCAgdWludDMyX3QsIHVpbnQ4X3QpO1xcbmZzL3VkZi91ZGZkZWNsLmg6MTg2OmV4dGVybiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICosIHVpbnQzMl90LFxcbmZzL3VkZi91ZGZkZWNsLmgtMTg3LVxcdFxcdFxcdFxcdFxcdFxcdCAgdWludDhfdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjM3LjY2NTU4NjMyN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjk4NzEzNDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVURGIEV4dGVuZGVkIEF0dHJpYnV0ZSBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIFVERiBmaWxlc3lzdGVtIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZnMvdWRmL21pc2MuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cmAuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgVURGIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIG9uLWRpc2sgZm9ybWF0LiBJJ20gbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBudWFuY2VzIGluIGhvdyBhdHRyaWJ1dGVzIGFyZSBzdG9yZWQsIGluZGV4ZWQsIGFuZCByZXRyaWV2ZWQuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBlcnJvciBjb25kaXRpb25zIHRoYXQgYXJlIGhhbmRsZWQgZGVsaWNhdGVseT8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGUgYXBwcm9hY2g/IFBlcmhhcHMgc29tZSBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyB0aGF0IHdlcmUgYXBwbGllZCBpbiB0aGUgcGFzdC4gVGhpcyBkZWVwIGRpdmUgaXMgY3J1Y2lhbCBmb3IgWyoqaW5zZXJ0IHNwZWNpZmljIHJlYXNvbiBvciB0YXNrLCBlLmcuLCB1bmRlcnN0YW5kaW5nIGEgcmVwb3J0ZWQgcGVyZm9ybWFuY2UgaXNzdWUsIHByZXBhcmluZyBmb3IgYSBwb3RlbnRpYWwgc2VjdXJpdHkgYXVkaXQsIG9yIGV4dGVuZGluZyB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIGZlYXR1cmVzLioqXS4gSSBleHBlY3QgdG8gZmluZCB0aGUgZGV2aWwgaW4gdGhlIGRldGFpbHMgaGVyZSwgYW5kIHRoYXQncyBwcmVjaXNlbHkgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDo0MC4zNjQzMDE0NDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvdWRmL21pc2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogbWlzYy5jXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogUFVSUE9TRVxcbiAgIDY6XFx0ICpcXHRNaXNjZWxsYW5lb3VzIHJvdXRpbmVzIGZvciB0aGUgT1NUQS1VREYodG0pIGZpbGVzeXN0ZW0uXFxuICAgNzpcXHQgKlxcbiAgIDg6XFx0ICogQ09QWVJJR0hUXFxuICAgOTpcXHQgKiAgKEMpIDE5OTggRGF2ZSBCb3ludG9uXFxuICAxMDpcXHQgKiAgKEMpIDE5OTgtMjAwNCBCZW4gRmVubmVtYVxcbiAgMTE6XFx0ICogIChDKSAxOTk5LTIwMDAgU3RlbGlhcyBDb21wdXRpbmcgSW5jXFxuICAxMjpcXHQgKlxcbiAgMTM6XFx0ICogSElTVE9SWVxcbiAgMTQ6XFx0ICpcXG4gIDE1OlxcdCAqICAwNC8xOS85OSBibGYgIHBhcnRpYWwgc3VwcG9ydCBmb3IgcmVhZGluZy93cml0aW5nIHNwZWNpZmljIEVBJ3NcXG4gIDE2OlxcdCAqL1xcbiAgMTc6XFx0XFxuICAxODpcXHQjaW5jbHVkZSBcXFwidWRmZGVjbC5oXFxcIlxcbiAgMTk6XFx0XFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gIDIyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmMtaXR1LXQuaFxcdTAwM2VcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0I2luY2x1ZGUgXFxcInVkZl9pLmhcXFwiXFxuICAyNTpcXHQjaW5jbHVkZSBcXFwidWRmX3NiLmhcXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLFxcbiAgMjg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgdWludDMyX3QgdHlwZSwgdWludDhfdCBsb2MpXFxuICAyOTpcXHR7XFxuICAzMDpcXHRcXHR1aW50OF90ICplYSA9IE5VTEwsICphZCA9IE5VTEw7XFxuICAzMTpcXHRcXHRpbnQgb2Zmc2V0O1xcbiAgMzI6XFx0XFx0dWludDE2X3QgY3JjbGVuO1xcbiAgMzM6XFx0XFx0c3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTtcXG4gIDM0OlxcdFxcbiAgMzU6XFx0XFx0ZWEgPSBpaW5mby1cXHUwMDNlaV9kYXRhO1xcbiAgMzY6XFx0XFx0aWYgKGlpbmZvLVxcdTAwM2VpX2xlbkVBdHRyKSB7XFxuICAzNzpcXHRcXHRcXHRhZCA9IGlpbmZvLVxcdTAwM2VpX2RhdGEgKyBpaW5mby1cXHUwMDNlaV9sZW5FQXR0cjtcXG4gIDM4OlxcdFxcdH0gZWxzZSB7XFxuICAzOTpcXHRcXHRcXHRhZCA9IGVhO1xcbiAgNDA6XFx0XFx0XFx0c2l6ZSArPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xcbiAgNDE6XFx0XFx0fVxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHRvZmZzZXQgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgLSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpIC1cXG4gIDQ0OlxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xlbkFsbG9jO1xcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHQvKiBUT0RPIC0gQ2hlY2sgZm9yIEZyZWVFQVNwYWNlICovXFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdGlmIChsb2MgXFx1MDAyNiAweDAxIFxcdTAwMjZcXHUwMDI2IG9mZnNldCBcXHUwMDNlPSBzaXplKSB7XFxuICA0OTpcXHRcXHRcXHRzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYyAqZWFoZDtcXG4gIDUwOlxcdFxcdFxcdGVhaGQgPSAoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MgKillYTtcXG4gIDUxOlxcdFxcbiAgNTI6XFx0XFx0XFx0aWYgKGlpbmZvLVxcdTAwM2VpX2xlbkFsbG9jKVxcbiAgNTM6XFx0XFx0XFx0XFx0bWVtbW92ZShcXHUwMDI2YWRbc2l6ZV0sIGFkLCBpaW5mby1cXHUwMDNlaV9sZW5BbGxvYyk7XFxuICA1NDpcXHRcXG4gIDU1OlxcdFxcdFxcdGlmIChpaW5mby1cXHUwMDNlaV9sZW5FQXR0cikge1xcbiAgNTY6XFx0XFx0XFx0XFx0LyogY2hlY2sgY2hlY2tzdW0vY3JjICovXFxuICA1NzpcXHRcXHRcXHRcXHRpZiAoZWFoZC1cXHUwMDNlZGVzY1RhZy50YWdJZGVudCAhPVxcbiAgNTg6XFx0XFx0XFx0XFx0XFx0XFx0Y3B1X3RvX2xlMTYoVEFHX0lERU5UX0VBSEQpIHx8XFxuICA1OTpcXHRcXHRcXHRcXHQgICAgbGUzMl90b19jcHUoZWFoZC1cXHUwMDNlZGVzY1RhZy50YWdMb2NhdGlvbikgIT1cXG4gIDYwOlxcdFxcdFxcdFxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSlcXG4gIDYxOlxcdFxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xcbiAgNjI6XFx0XFx0XFx0fSBlbHNlIHtcXG4gIDYzOlxcdFxcdFxcdFxcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0XFx0XFx0c2l6ZSAtPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xcbiAgNjY6XFx0XFx0XFx0XFx0aWluZm8tXFx1MDAzZWlfbGVuRUF0dHIgKz1cXG4gIDY3OlxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYyk7XFxuICA2ODpcXHRcXHRcXHRcXHRlYWhkLVxcdTAwM2VkZXNjVGFnLnRhZ0lkZW50ID0gY3B1X3RvX2xlMTYoVEFHX0lERU5UX0VBSEQpO1xcbiAgNjk6XFx0XFx0XFx0XFx0aWYgKHNiaS1cXHUwMDNlc191ZGZyZXYgXFx1MDAzZT0gMHgwMjAwKVxcbiAgNzA6XFx0XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlZGVzY1RhZy5kZXNjVmVyc2lvbiA9IGNwdV90b19sZTE2KDMpO1xcbiAgNzE6XFx0XFx0XFx0XFx0ZWxzZVxcbiAgNzI6XFx0XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlZGVzY1RhZy5kZXNjVmVyc2lvbiA9IGNwdV90b19sZTE2KDIpO1xcbiAgNzM6XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlZGVzY1RhZy50YWdTZXJpYWxOdW0gPVxcbiAgNzQ6XFx0XFx0XFx0XFx0XFx0XFx0Y3B1X3RvX2xlMTYoc2JpLVxcdTAwM2VzX3NlcmlhbF9udW1iZXIpO1xcbiAgNzU6XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlZGVzY1RhZy50YWdMb2NhdGlvbiA9IGNwdV90b19sZTMyKFxcbiAgNzY6XFx0XFx0XFx0XFx0XFx0XFx0aWluZm8tXFx1MDAzZWlfbG9jYXRpb24ubG9naWNhbEJsb2NrTnVtKTtcXG4gIDc3OlxcdFxcdFxcdFxcdGVhaGQtXFx1MDAzZWltcEF0dHJMb2NhdGlvbiA9IGNwdV90b19sZTMyKDB4RkZGRkZGRkYpO1xcbiAgNzg6XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlYXBwQXR0ckxvY2F0aW9uID0gY3B1X3RvX2xlMzIoMHhGRkZGRkZGRik7XFxuICA3OTpcXHRcXHRcXHR9XFxuICA4MDpcXHRcXG4gIDgxOlxcdFxcdFxcdG9mZnNldCA9IGlpbmZvLVxcdTAwM2VpX2xlbkVBdHRyO1xcbiAgODI6XFx0XFx0XFx0aWYgKHR5cGUgXFx1MDAzYyAyMDQ4KSB7XFxuICA4MzpcXHRcXHRcXHRcXHRpZiAobGUzMl90b19jcHUoZWFoZC1cXHUwMDNlYXBwQXR0ckxvY2F0aW9uKSBcXHUwMDNjXFxuICA4NDpcXHRcXHRcXHRcXHRcXHRcXHRpaW5mby1cXHUwMDNlaV9sZW5FQXR0cikge1xcbiAgODU6XFx0XFx0XFx0XFx0XFx0dWludDMyX3QgYWFsID1cXG4gIDg2OlxcdFxcdFxcdFxcdFxcdFxcdGxlMzJfdG9fY3B1KGVhaGQtXFx1MDAzZWFwcEF0dHJMb2NhdGlvbik7XFxuICA4NzpcXHRcXHRcXHRcXHRcXHRtZW1tb3ZlKFxcdTAwMjZlYVtvZmZzZXQgLSBhYWwgKyBzaXplXSxcXG4gIDg4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZlYVthYWxdLCBvZmZzZXQgLSBhYWwpO1xcbiAgODk6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0IC09IGFhbDtcXG4gIDkwOlxcdFxcdFxcdFxcdFxcdGVhaGQtXFx1MDAzZWFwcEF0dHJMb2NhdGlvbiA9XFxuICA5MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRjcHVfdG9fbGUzMihhYWwgKyBzaXplKTtcXG4gIDkyOlxcdFxcdFxcdFxcdH1cXG4gIDkzOlxcdFxcdFxcdFxcdGlmIChsZTMyX3RvX2NwdShlYWhkLVxcdTAwM2VpbXBBdHRyTG9jYXRpb24pIFxcdTAwM2NcXG4gIDk0OlxcdFxcdFxcdFxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xlbkVBdHRyKSB7XFxuICA5NTpcXHRcXHRcXHRcXHRcXHR1aW50MzJfdCBpYWwgPVxcbiAgOTY6XFx0XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoZWFoZC1cXHUwMDNlaW1wQXR0ckxvY2F0aW9uKTtcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdG1lbW1vdmUoXFx1MDAyNmVhW29mZnNldCAtIGlhbCArIHNpemVdLFxcbiAgOTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmVhW2lhbF0sIG9mZnNldCAtIGlhbCk7XFxuICA5OTpcXHRcXHRcXHRcXHRcXHRvZmZzZXQgLT0gaWFsO1xcbiAxMDA6XFx0XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlaW1wQXR0ckxvY2F0aW9uID1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTA6NDAuMzY0MzkxNjc0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3ODY1ODU0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gZm9jdXMgc3BlY2lmaWNhbGx5IG9uIGxpbmVzIDEwMSB0byAxODAgb2YgYGZzL3VkZi9taXNjLmNgLiBJIGtub3cgdGhpcyBpcyBhIHNwZWNpZmljIGNodW5rLCBhbmQgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgYXNwZWN0IG9mIFVERiBmaWxlc3lzdGVtIG1pc2MgZnVuY3Rpb25zIOKAkyBlaXRoZXIgaW5pdGlhbGl6YXRpb24sIGVycm9yIGhhbmRsaW5nLCBvciBwZXJoYXBzIHNvbWUgbG93LWxldmVsIEkvTyBvcGVyYXRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBzb21lIGludGVybmFsIGZ1bmN0aW9uIGNhbGxzLCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIGFuZCBsaWtlbHkgc29tZSBjb25kaXRpb25hbCBsb2dpYy4gS25vd2luZyBVREYsIEkgc3VzcGVjdCB0aGVyZSdsbCBiZSBhIGRlY2VudCBhbW91bnQgb2YgYml0LW1hc2tpbmcgYW5kIHN0cnVjdHVyZSBhY2Nlc3MgaW52b2x2ZWQuIExldCdzIHNlZSBpZiB0aGlzIHBhcnRpY3VsYXIgc2VnbWVudCB0b3VjaGVzIHVwb24gbWV0YWRhdGEgcmVhZHMsIGJsb2NrIGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgZmlsZXN5c3RlbSBqb3VybmFsaW5nIHJlbGF0ZWQgdG8gVURGLiBSZWFkeSB0byBhbmFseXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzgzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDo0My4xNTA5ODA1NTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3VkZi9taXNjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNwdV90b19sZTMyKGlhbCArIHNpemUpO1xcbiAxMDI6XFx0XFx0XFx0XFx0fVxcbiAxMDM6XFx0XFx0XFx0fSBlbHNlIGlmICh0eXBlIFxcdTAwM2MgNjU1MzYpIHtcXG4gMTA0OlxcdFxcdFxcdFxcdGlmIChsZTMyX3RvX2NwdShlYWhkLVxcdTAwM2VhcHBBdHRyTG9jYXRpb24pIFxcdTAwM2NcXG4gMTA1OlxcdFxcdFxcdFxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xlbkVBdHRyKSB7XFxuIDEwNjpcXHRcXHRcXHRcXHRcXHR1aW50MzJfdCBhYWwgPVxcbiAxMDc6XFx0XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoZWFoZC1cXHUwMDNlYXBwQXR0ckxvY2F0aW9uKTtcXG4gMTA4OlxcdFxcdFxcdFxcdFxcdG1lbW1vdmUoXFx1MDAyNmVhW29mZnNldCAtIGFhbCArIHNpemVdLFxcbiAxMDk6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmVhW2FhbF0sIG9mZnNldCAtIGFhbCk7XFxuIDExMDpcXHRcXHRcXHRcXHRcXHRvZmZzZXQgLT0gYWFsO1xcbiAxMTE6XFx0XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlYXBwQXR0ckxvY2F0aW9uID1cXG4gMTEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNwdV90b19sZTMyKGFhbCArIHNpemUpO1xcbiAxMTM6XFx0XFx0XFx0XFx0fVxcbiAxMTQ6XFx0XFx0XFx0fVxcbiAxMTU6XFx0XFx0XFx0LyogcmV3cml0ZSBDUkMgKyBjaGVja3N1bSBvZiBlYWhkICovXFxuIDExNjpcXHRcXHRcXHRjcmNsZW4gPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpIC0gc2l6ZW9mKHN0cnVjdCB0YWcpO1xcbiAxMTc6XFx0XFx0XFx0ZWFoZC1cXHUwMDNlZGVzY1RhZy5kZXNjQ1JDTGVuZ3RoID0gY3B1X3RvX2xlMTYoY3JjbGVuKTtcXG4gMTE4OlxcdFxcdFxcdGVhaGQtXFx1MDAzZWRlc2NUYWcuZGVzY0NSQyA9IGNwdV90b19sZTE2KGNyY19pdHVfdCgwLCAoY2hhciAqKWVhaGQgK1xcbiAxMTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB0YWcpLCBjcmNsZW4pKTtcXG4gMTIwOlxcdFxcdFxcdGVhaGQtXFx1MDAzZWRlc2NUYWcudGFnQ2hlY2tzdW0gPSB1ZGZfdGFnX2NoZWNrc3VtKFxcdTAwMjZlYWhkLVxcdTAwM2VkZXNjVGFnKTtcXG4gMTIxOlxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xlbkVBdHRyICs9IHNpemU7XFxuIDEyMjpcXHRcXHRcXHRyZXR1cm4gKHN0cnVjdCBnZW5lcmljRm9ybWF0ICopXFx1MDAyNmVhW29mZnNldF07XFxuIDEyMzpcXHRcXHR9XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbiAxMjY6XFx0fVxcbiAxMjc6XFx0XFxuIDEyODpcXHRzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcXG4gMTI5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHVpbnQ4X3Qgc3VidHlwZSlcXG4gMTMwOlxcdHtcXG4gMTMxOlxcdFxcdHN0cnVjdCBnZW5lcmljRm9ybWF0ICpnYWY7XFxuIDEzMjpcXHRcXHR1aW50OF90ICplYSA9IE5VTEw7XFxuIDEzMzpcXHRcXHR1aW50MzJfdCBvZmZzZXQ7XFxuIDEzNDpcXHRcXHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xcbiAxMzU6XFx0XFxuIDEzNjpcXHRcXHRlYSA9IGlpbmZvLVxcdTAwM2VpX2RhdGE7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGlmIChpaW5mby1cXHUwMDNlaV9sZW5FQXR0cikge1xcbiAxMzk6XFx0XFx0XFx0c3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MgKmVhaGQ7XFxuIDE0MDpcXHRcXHRcXHRlYWhkID0gKHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjICopZWE7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdFxcdC8qIGNoZWNrIGNoZWNrc3VtL2NyYyAqL1xcbiAxNDM6XFx0XFx0XFx0aWYgKGVhaGQtXFx1MDAzZWRlc2NUYWcudGFnSWRlbnQgIT1cXG4gMTQ0OlxcdFxcdFxcdFxcdFxcdGNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fFxcbiAxNDU6XFx0XFx0XFx0ICAgIGxlMzJfdG9fY3B1KGVhaGQtXFx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XFxuIDE0NjpcXHRcXHRcXHRcXHRcXHRpaW5mby1cXHUwMDNlaV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0pXFxuIDE0NzpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcXG4gMTQ4OlxcdFxcbiAxNDk6XFx0XFx0XFx0aWYgKHR5cGUgXFx1MDAzYyAyMDQ4KVxcbiAxNTA6XFx0XFx0XFx0XFx0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjKTtcXG4gMTUxOlxcdFxcdFxcdGVsc2UgaWYgKHR5cGUgXFx1MDAzYyA2NTUzNilcXG4gMTUyOlxcdFxcdFxcdFxcdG9mZnNldCA9IGxlMzJfdG9fY3B1KGVhaGQtXFx1MDAzZWltcEF0dHJMb2NhdGlvbik7XFxuIDE1MzpcXHRcXHRcXHRlbHNlXFxuIDE1NDpcXHRcXHRcXHRcXHRvZmZzZXQgPSBsZTMyX3RvX2NwdShlYWhkLVxcdTAwM2VhcHBBdHRyTG9jYXRpb24pO1xcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHRcXHR3aGlsZSAob2Zmc2V0IFxcdTAwM2NcXG4gMTU3OlxcdFxcdFxcdCAgICAgICBpaW5mby1cXHUwMDNlaV9sZW5FQXR0ciAtIHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkpIHtcXG4gMTU4OlxcdFxcdFxcdFxcdHVpbnQzMl90IGF0dHJMZW5ndGg7XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdFxcdFxcdGdhZiA9IChzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqKVxcdTAwMjZlYVtvZmZzZXRdO1xcbiAxNjE6XFx0XFx0XFx0XFx0YXR0ckxlbmd0aCA9IGxlMzJfdG9fY3B1KGdhZi1cXHUwMDNlYXR0ckxlbmd0aCk7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdFxcdFxcdC8qIERldGVjdCB1bmRlcnNpemVkIGVsZW1lbnRzIGFuZCBidWZmZXIgb3ZlcmZsb3dzICovXFxuIDE2NDpcXHRcXHRcXHRcXHRpZiAoYXR0ckxlbmd0aCBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkgfHxcXG4gMTY1OlxcdFxcdFxcdFxcdCAgICBhdHRyTGVuZ3RoIFxcdTAwM2UgaWluZm8tXFx1MDAzZWlfbGVuRUF0dHIgLSBvZmZzZXQpXFxuIDE2NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0XFx0XFx0aWYgKGxlMzJfdG9fY3B1KGdhZi1cXHUwMDNlYXR0clR5cGUpID09IHR5cGUgXFx1MDAyNlxcdTAwMjZcXG4gMTY5OlxcdFxcdFxcdFxcdFxcdFxcdGdhZi1cXHUwMDNlYXR0clN1YnR5cGUgPT0gc3VidHlwZSlcXG4gMTcwOlxcdFxcdFxcdFxcdFxcdHJldHVybiBnYWY7XFxuIDE3MTpcXHRcXHRcXHRcXHRlbHNlXFxuIDE3MjpcXHRcXHRcXHRcXHRcXHRvZmZzZXQgKz0gYXR0ckxlbmd0aDtcXG4gMTczOlxcdFxcdFxcdH1cXG4gMTc0OlxcdFxcdH1cXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE3NzpcXHR9XFxuIDE3ODpcXHRcXG4gMTc5OlxcdC8qXFxuIDE4MDpcXHQgKiB1ZGZfcmVhZF90YWdnZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTA6NDMuMTUxMDk2OTY3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTQ3OTMxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBwbGF5aW5nIHRoZSByb2xlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIFVERiBJbm9kZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgc29saWQgZ3Jhc3Agb24gaG93IHRoZSBVREYgZmlsZXN5c3RlbSBoYW5kbGVzIGl0cyBpbm9kZXMsIHNwZWNpZmljYWxseSB0aGUgYHVkZl9yZWFkX2lub2RlYCBhbmQgYHVkZl93cml0ZV9pbm9kZWAgZnVuY3Rpb25zLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgdGhlIGNydWNpYWwgY29udGV4dCBpcyB1c3VhbGx5IGEgZmV3IGxpbmVzIGFyb3VuZCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBmcy91ZGYvaW5vZGUuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgbGluZXMgYmV0d2VlbiAxNjUwIGFuZCAxODgwLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgZGV0YWlsZWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIFVERiBtZXRhZGF0YSBzdHJ1Y3R1cmVzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyByZWFkLCB3cml0dGVuLCBhbmQgcG90ZW50aWFsbHkgY2FjaGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBmdWxsIGZsb3cgd2l0aGluIHRoYXQgcmFuZ2UgaXMga2V5LiBLbm93aW5nIHRoZSBsb2dpYyBpbiB0aGF0IHNtYWxsIHNjb3BlIHNob3VsZCBxdWlja2x5IGFsbG93IGZvciBhIGJldHRlciBncmFzcCBvZiB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDo0NS4yMDU4OTMxMTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3VkZi9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NjA6XFx0XFx0Y2FzZSBJQ0JUQUdfRklMRV9UWVBFX01BSU46XFxuMTY2MTpcXHRcXHRcXHR1ZGZfZGVidWcoXFxcIk1FVEFEQVRBIEZJTEUtLS0tLVxcXFxuXFxcIik7XFxuMTY2MjpcXHRcXHRcXHRicmVhaztcXG4xNjYzOlxcdFxcdGNhc2UgSUNCVEFHX0ZJTEVfVFlQRV9NSVJST1I6XFxuMTY2NDpcXHRcXHRcXHR1ZGZfZGVidWcoXFxcIk1FVEFEQVRBIE1JUlJPUiBGSUxFLS0tLS1cXFxcblxcXCIpO1xcbjE2NjU6XFx0XFx0XFx0YnJlYWs7XFxuMTY2NjpcXHRcXHRjYXNlIElDQlRBR19GSUxFX1RZUEVfQklUTUFQOlxcbjE2Njc6XFx0XFx0XFx0dWRmX2RlYnVnKFxcXCJNRVRBREFUQSBCSVRNQVAgRklMRS0tLS0tXFxcXG5cXFwiKTtcXG4xNjY4OlxcdFxcdFxcdGJyZWFrO1xcbjE2Njk6XFx0XFx0ZGVmYXVsdDpcXG4xNjcwOlxcdFxcdFxcdHVkZl9lcnIoaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCIoaW5vICVsbHUpIGZhaWxlZCB1bmtub3duIGZpbGUgdHlwZT0ldVxcXFxuXFxcIixcXG4xNjcxOlxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgZmUtXFx1MDAzZWljYlRhZy5maWxlVHlwZSk7XFxuMTY3MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNjczOlxcdFxcdH1cXG4xNjc0OlxcdFxcdGlmIChTX0lTQ0hSKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4xNjc1OlxcdFxcdFxcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cXG4xNjc2OlxcdFxcdFxcdFxcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XFxuMTY3NzpcXHRcXG4xNjc4OlxcdFxcdFxcdGlmIChJU19FUlIoZHNlYSkpIHtcXG4xNjc5OlxcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIoZHNlYSk7XFxuMTY4MDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xNjgxOlxcdFxcdFxcdH1cXG4xNjgyOlxcdFxcdFxcdC8qIERldmljZSBpbm9kZXMgbXVzdCBoYXZlIGEgZGV2aWNlIHNwZWMgYXR0cmlidXRlICovXFxuMTY4MzpcXHRcXHRcXHRpZiAoIWRzZWEgfHwgIXVkZl9kZXZpY2Vfc3BlY192YWxpZChkc2VhKSkge1xcbjE2ODQ6XFx0XFx0XFx0XFx0cmV0ID0gLUVGU0NPUlJVUFRFRDtcXG4xNjg1OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE2ODY6XFx0XFx0XFx0fVxcbjE2ODc6XFx0XFx0XFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9tb2RlLFxcbjE2ODg6XFx0XFx0XFx0XFx0XFx0TUtERVYobGUzMl90b19jcHUoZHNlYS1cXHUwMDNlbWFqb3JEZXZpY2VJZGVudCksXFxuMTY4OTpcXHRcXHRcXHRcXHRcXHQgICAgICBsZTMyX3RvX2NwdShkc2VhLVxcdTAwM2VtaW5vckRldmljZUlkZW50KSkpO1xcbjE2OTA6XFx0XFx0fVxcbjE2OTE6XFx0XFx0cmV0ID0gMDtcXG4xNjkyOlxcdG91dDpcXG4xNjkzOlxcdFxcdGJyZWxzZShiaCk7XFxuMTY5NDpcXHRcXHRyZXR1cm4gcmV0O1xcbjE2OTU6XFx0fVxcbjE2OTY6XFx0XFxuMTY5NzpcXHRzdGF0aWMgaW50IHVkZl9hbGxvY19pX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHNpemUpXFxuMTY5ODpcXHR7XFxuMTY5OTpcXHRcXHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xcbjE3MDA6XFx0XFx0aWluZm8tXFx1MDAzZWlfZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuMTcwMTpcXHRcXHRpZiAoIWlpbmZvLVxcdTAwM2VpX2RhdGEpXFxuMTcwMjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNzAzOlxcdFxcdHJldHVybiAwO1xcbjE3MDQ6XFx0fVxcbjE3MDU6XFx0XFxuMTcwNjpcXHRzdGF0aWMgdW1vZGVfdCB1ZGZfY29udmVydF9wZXJtaXNzaW9ucyhzdHJ1Y3QgZmlsZUVudHJ5ICpmZSlcXG4xNzA3OlxcdHtcXG4xNzA4OlxcdFxcdHVtb2RlX3QgbW9kZTtcXG4xNzA5OlxcdFxcdHVpbnQzMl90IHBlcm1pc3Npb25zO1xcbjE3MTA6XFx0XFx0dWludDMyX3QgZmxhZ3M7XFxuMTcxMTpcXHRcXG4xNzEyOlxcdFxcdHBlcm1pc3Npb25zID0gbGUzMl90b19jcHUoZmUtXFx1MDAzZXBlcm1pc3Npb25zKTtcXG4xNzEzOlxcdFxcdGZsYWdzID0gbGUxNl90b19jcHUoZmUtXFx1MDAzZWljYlRhZy5mbGFncyk7XFxuMTcxNDpcXHRcXG4xNzE1OlxcdFxcdG1vZGUgPVxcdCgocGVybWlzc2lvbnMpIFxcdTAwMjYgMDAwNykgfFxcbjE3MTY6XFx0XFx0XFx0KChwZXJtaXNzaW9ucyBcXHUwMDNlXFx1MDAzZSAyKSBcXHUwMDI2IDAwNzApIHxcXG4xNzE3OlxcdFxcdFxcdCgocGVybWlzc2lvbnMgXFx1MDAzZVxcdTAwM2UgNCkgXFx1MDAyNiAwNzAwKSB8XFxuMTcxODpcXHRcXHRcXHQoKGZsYWdzIFxcdTAwMjYgSUNCVEFHX0ZMQUdfU0VUVUlEKSA/IFNfSVNVSUQgOiAwKSB8XFxuMTcxOTpcXHRcXHRcXHQoKGZsYWdzIFxcdTAwMjYgSUNCVEFHX0ZMQUdfU0VUR0lEKSA/IFNfSVNHSUQgOiAwKSB8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjQ1LjIwNjA4NjQ1MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODk1MDY0ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgYHVkZl93cml0ZV9pbm9kZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IFVERiBmaWxlIHN5c3RlbSBpbnRlcm5hbHMgYWdhaW4uIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0LCBJIHRoaW5rIHdlIHNob3VsZCBmb2N1cyBvbiB0aGUgYHVkZl93cml0ZV9pbm9kZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgbGV0J3Mgem9vbSBpbiBvbiB0aGUgY29kZSBiZXR3ZWVuIGxpbmVzIDE4MjAgYW5kIDE4ODAuIFRoYXQgc2VjdGlvbiBsaWtlbHkgaGFuZGxlcyB0aGUgY29yZSBsb2dpYyBvZiB3cml0aW5nIGlub2RlIGRhdGEgd2l0aGluIHRoZSBVREYgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gVW5kZXJzdGFuZGluZyB0aGF0IHNlY3Rpb24gd2lsbCBob3BlZnVsbHkgZ2l2ZSBtZSBhIG11Y2ggYmV0dGVyIHBlcnNwZWN0aXZlIG9uIGhvdyB0aGUgZmlsZXN5c3RlbSBhY3R1YWxseSBmdW5jdGlvbnMsIG5vdCBqdXN0IHRoZW9yZXRpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDo0Ny4xMDExNTM5MjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3VkZi9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MzA6XFx0XFxuMTgzMTpcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiBpbm9kZS1cXHUwMDNlaV9ubGluayBcXHUwMDNlIDApXFxuMTgzMjpcXHRcXHRcXHRmZS1cXHUwMDNlZmlsZUxpbmtDb3VudCA9IGNwdV90b19sZTE2KGlub2RlLVxcdTAwM2VpX25saW5rIC0gMSk7XFxuMTgzMzpcXHRcXHRlbHNlIHtcXG4xODM0OlxcdFxcdFxcdGlmIChpaW5mby1cXHUwMDNlaV9oaWRkZW4pXFxuMTgzNTpcXHRcXHRcXHRcXHRmZS1cXHUwMDNlZmlsZUxpbmtDb3VudCA9IGNwdV90b19sZTE2KDApO1xcbjE4MzY6XFx0XFx0XFx0ZWxzZVxcbjE4Mzc6XFx0XFx0XFx0XFx0ZmUtXFx1MDAzZWZpbGVMaW5rQ291bnQgPSBjcHVfdG9fbGUxNihpbm9kZS1cXHUwMDNlaV9ubGluayk7XFxuMTgzODpcXHRcXHR9XFxuMTgzOTpcXHRcXG4xODQwOlxcdFxcdGZlLVxcdTAwM2VpbmZvcm1hdGlvbkxlbmd0aCA9IGNwdV90b19sZTY0KGlub2RlLVxcdTAwM2VpX3NpemUpO1xcbjE4NDE6XFx0XFxuMTg0MjpcXHRcXHRpZiAoU19JU0NIUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTg0MzpcXHRcXHRcXHRzdHJ1Y3QgcmVnaWQgKmVpZDtcXG4xODQ0OlxcdFxcdFxcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cXG4xODQ1OlxcdFxcdFxcdFxcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XFxuMTg0NjpcXHRcXG4xODQ3OlxcdFxcdFxcdC8qIFZhbGlkaXR5IG9mIGV4dGVuZGVkIGF0dHJzIHdhcyBjaGVja2VkIG9uIGxvYWQgKi9cXG4xODQ4OlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoSVNfRVJSKGRzZWEpKSkge1xcbjE4NDk6XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihkc2VhKTtcXG4xODUwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xODUxOlxcdFxcdFxcdH1cXG4xODUyOlxcdFxcdFxcdGlmICghZHNlYSkge1xcbjE4NTM6XFx0XFx0XFx0XFx0ZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKVxcbjE4NTQ6XFx0XFx0XFx0XFx0XFx0dWRmX2FkZF9leHRlbmRlZGF0dHIoaW5vZGUsXFxuMTg1NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgK1xcbjE4NTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IHJlZ2lkKSwgMTIsIDB4Myk7XFxuMTg1NzpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGRzZWEpKSB7XFxuMTg1ODpcXHRcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGRzZWEpO1xcbjE4NTk6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE4NjA6XFx0XFx0XFx0XFx0fVxcbjE4NjE6XFx0XFx0XFx0XFx0ZHNlYS1cXHUwMDNlYXR0clR5cGUgPSBjcHVfdG9fbGUzMigxMik7XFxuMTg2MjpcXHRcXHRcXHRcXHRkc2VhLVxcdTAwM2VhdHRyU3VidHlwZSA9IDE7XFxuMTg2MzpcXHRcXHRcXHRcXHRkc2VhLVxcdTAwM2VhdHRyTGVuZ3RoID0gY3B1X3RvX2xlMzIoXFxuMTg2NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICtcXG4xODY1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgcmVnaWQpKTtcXG4xODY2OlxcdFxcdFxcdFxcdGRzZWEtXFx1MDAzZWltcFVzZUxlbmd0aCA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgcmVnaWQpKTtcXG4xODY3OlxcdFxcdFxcdH1cXG4xODY4OlxcdFxcdFxcdGVpZCA9IChzdHJ1Y3QgcmVnaWQgKilkc2VhLVxcdTAwM2VpbXBVc2U7XFxuMTg2OTpcXHRcXHRcXHRtZW1zZXQoZWlkLCAwLCBzaXplb2YoKmVpZCkpO1xcbjE4NzA6XFx0XFx0XFx0c3RyY3B5KGVpZC1cXHUwMDNlaWRlbnQsIFVERl9JRF9ERVZFTE9QRVIpO1xcbjE4NzE6XFx0XFx0XFx0ZWlkLVxcdTAwM2VpZGVudFN1ZmZpeFswXSA9IFVERl9PU19DTEFTU19VTklYO1xcbjE4NzI6XFx0XFx0XFx0ZWlkLVxcdTAwM2VpZGVudFN1ZmZpeFsxXSA9IFVERl9PU19JRF9MSU5VWDtcXG4xODczOlxcdFxcdFxcdGRzZWEtXFx1MDAzZW1ham9yRGV2aWNlSWRlbnQgPSBjcHVfdG9fbGUzMihpbWFqb3IoaW5vZGUpKTtcXG4xODc0OlxcdFxcdFxcdGRzZWEtXFx1MDAzZW1pbm9yRGV2aWNlSWRlbnQgPSBjcHVfdG9fbGUzMihpbWlub3IoaW5vZGUpKTtcXG4xODc1OlxcdFxcdH1cXG4xODc2OlxcdFxcbjE4Nzc6XFx0XFx0aWYgKGlpbmZvLVxcdTAwM2VpX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCKVxcbjE4Nzg6XFx0XFx0XFx0bGJfcmVjb3JkZWQgPSAwOyAvKiBObyBleHRlbnRzID1cXHUwMDNlIG5vIGJsb2NrcyEgKi9cXG4xODc5OlxcdFxcdGVsc2VcXG4xODgwOlxcdFxcdFxcdGxiX3JlY29yZGVkID1cXG4xODgxOlxcdFxcdFxcdFxcdChpbm9kZS1cXHUwMDNlaV9ibG9ja3MgKyAoMSBcXHUwMDNjXFx1MDAzYyAoYmxvY2tzaXplX2JpdHMgLSA5KSkgLSAxKSBcXHUwMDNlXFx1MDAzZVxcbjE4ODI6XFx0XFx0XFx0XFx0KGJsb2Nrc2l6ZV9iaXRzIC0gOSk7XFxuMTg4MzpcXHRcXG4xODg0OlxcdFxcdGlmIChpaW5mby1cXHUwMDNlaV9lZmUgPT0gMCkge1xcbjE4ODU6XFx0XFx0XFx0bWVtY3B5KGJoLVxcdTAwM2ViX2RhdGEgKyBzaXplb2Yoc3RydWN0IGZpbGVFbnRyeSksXFxuMTg4NjpcXHRcXHRcXHQgICAgICAgaWluZm8tXFx1MDAzZWlfZGF0YSxcXG4xODg3OlxcdFxcdFxcdCAgICAgICBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgLSBzaXplb2Yoc3RydWN0IGZpbGVFbnRyeSkpO1xcbjE4ODg6XFx0XFx0XFx0ZmUtXFx1MDAzZWxvZ2ljYWxCbG9ja3NSZWNvcmRlZCA9IGNwdV90b19sZTY0KGxiX3JlY29yZGVkKTtcXG4xODg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDo0Ny4xMDEzNTAwNzFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzY0OTU1MzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVURGIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZ2h0ZW5pbmcgdXAgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGluZyBpbiB0aGUgVURGIGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSB0byBwcmV2ZW50IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgcmVhZHMuIEkgc2VlIHNldmVyYWwga2V5IGNoYW5nZXM6IGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoKWAgaXMgZ2V0dGluZyBtb3JlIHJvYnVzdCB3aXRoIGl0cyB2YWxpZGF0aW9uLCBjaGVja2luZyBsZW5ndGhzIGFuZCBtYWtpbmcgc3VyZSBgYXR0cl9sZW5ndGhgLCBgaW1wX3VzZV9sZW5ndGhgLCBhbmQgdGhlIHNpemVzIG9mIHRoZSBzdHJ1Y3R1cmVzIHRoZXkgcmVsYXRlIHRvIGFyZSBhbGwgc2FuZS4gIGB1ZGZfcmVhZF9pbm9kZSgpYCBhbmQgYHVkZl93cml0ZV9pbm9kZSgpYCBhcmUgbm93IGV4cGxpY2l0bHkgaGFuZGxpbmcgdGhlIGVycm9yIHJldHVybnMgZnJvbSBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cigpYCwgd2hpY2ggaXMgYSBnb29kIGRlZmVuc2l2ZSBtZWFzdXJlLiAgUmV0dXJuaW5nIGBFUlJfUFRSKC1FRlNDT1JSVVBURUQpYCBpbnN0ZWFkIG9mIGBOVUxMYCBvciBzaWxlbnRseSBicmVha2luZyBvdXQgaXMgYWxzbyBhIGdyZWF0IHN0ZXAgdG93YXJkcyBwcm9wZXIgZXJyb3IgcmVwb3J0aW5nLiAgQW5kIHRoYXQgYm91bmRzIGNoZWNrIGZpeCBpbiBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgaXMgY3J1Y2lhbCAtIHRoYXQgcG90ZW50aWFsIG92ZXJmbG93IHdhcyBhIHRpY2tpbmcgdGltZSBib21iLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogS01TQU4uICBXZSBuZWVkIHRvIGV2YWx1YXRlIGlmIHdlIG5lZWQgdG8gcnVuIGEgS01TQU4gc2Vzc2lvbiB3aXRoIHRoaXMuICBLQVNBTiBpcyBnb2luZyB0byBjYXRjaCB0aGUgb3V0LW9mLWJvdW5kcyBzdHVmZiB0aGF0IHdlIGFyZSBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBpbiB0aGUgcGF0Y2gsIHRoZXNlIGFyZSBlc3NlbnRpYWxseSBmaWxlc3lzdGVtIGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzIHRoYXQgYXJlIGJlaW5nIHByb3RlY3RlZCBhZ2FpbnN0LiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gTm8gY29waWVzIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gYnJhbmNoaW5nIG9yIGNvbnRyb2wgZmxvdy4gYHVkZl93cml0ZV9pbm9kZWAgaXMgZXZlbiBleHBsaWNpdGx5IGluaXRpYWxpemluZyBgZWlkYCB3aXRoIGBtZW1zZXQoKWAuIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZ2h0ZW5pbmcgdXAgZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB2YWxpZGF0aW5nIGRpc2sgZGF0YSwgbm90IGludHJvZHVjaW5nIG5ldyBzb3VyY2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBDb3JydXB0ZWQgZGlzayByZWFkcyB3aWxsIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBlcnJvciBjaGVja2luZy5cblxuSSdtIHByZXR0eSBjb25maWRlbnQgdGhhdCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4gIEl0IHBlcmZlY3RseSBtYXRjaGVzIG91ciBlc3RhYmxpc2hlZCBjcml0ZXJpYTogIHRoZSBtYWluIHJpc2tzIGFyZSBvdXQtb2YtYm91bmRzLCBvdmVyZmxvd3MsIGFuZCBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYWxsIGlzc3VlcyB0aGF0IEtBU0FOIHNob3VsZCBoYW5kbGUuIEFsbCB0aGUgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIGFyZSBmdWxseSBpbml0aWFsaXplZCwgYW5kIHRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBiZWluZyBpbnRyb2R1Y2VkIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzg2LCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjU0Ljc1MDkwNjY4MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzYW5pdHkgYW5kIGJvdW5kcyBjaGVja2luZyBmb3IgVURGIGZpbGVzeXN0ZW0gZXh0ZW5kZWQgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5IGZvciBkZXZpY2VTcGVjIGF0dHJpYnV0ZXMgb24gc3BlY2lhbCBkZXZpY2UgaW5vZGVzIChjaGFyYWN0ZXIvYmxvY2sgZGV2aWNlcykuIEl0IGludHJvZHVjZXMgYHVkZl9kZXZpY2Vfc3BlY192YWxpZCgpYCB0byB2YWxpZGF0ZSBhdHRyaWJ1dGUgYW5kIGltcGxlbWVudGF0aW9uLXVzZSBsZW5ndGhzIGFnYWluc3QgYnVmZmVyIGJvdW5kcywgcHJvcGVybHkgaGFuZGxlcyBgRVJSX1BUUmAgZXJyb3IgcmV0dXJucyBmcm9tIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpYCBhbmQgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyKClgLCBhbmQgZml4ZXMgbG9vcCBib3VuZGFyeSBjaGVja3Mgd2hlbiBpdGVyYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcywgd2hpY2ggZmFsbCB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHNhbml0eSBhbmQgYm91bmRzIGNoZWNraW5nIGZvciBVREYgZmlsZXN5c3RlbSBleHRlbmRlZCBhdHRyaWJ1dGVzLCBzcGVjaWZpY2FsbHkgZm9yIGRldmljZVNwZWMgYXR0cmlidXRlcyBvbiBzcGVjaWFsIGRldmljZSBpbm9kZXMgKGNoYXJhY3Rlci9ibG9jayBkZXZpY2VzKS4gSXQgaW50cm9kdWNlcyBgdWRmX2RldmljZV9zcGVjX3ZhbGlkKClgIHRvIHZhbGlkYXRlIGF0dHJpYnV0ZSBhbmQgaW1wbGVtZW50YXRpb24tdXNlIGxlbmd0aHMgYWdhaW5zdCBidWZmZXIgYm91bmRzLCBwcm9wZXJseSBoYW5kbGVzIGBFUlJfUFRSYCBlcnJvciByZXR1cm5zIGZyb20gYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHIoKWAsIGFuZCBmaXhlcyBsb29wIGJvdW5kYXJ5IGNoZWNrcyB3aGVuIGl0ZXJhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzLlxcblxcblRoZXNlIGNoYW5nZXMgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb24gY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBmYWxsIHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow76xn7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 19:51:17 +0000 UTC FinishedAt: 2026-09-01 20:10:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UDF_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UDF_FS" ], "series_id": "9fc80e06-681b-4ad0-8a1f-7f557f12264b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "udf_get_extendedattr", "udf_add_extendedattr", "udf_write_inode", "__udf_iget" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VERl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkZl9nZXRfZXh0ZW5kZWRhdHRyJiMzNDssCiAgICAmIzM0O3VkZl9hZGRfZXh0ZW5kZWRhdHRyJiMzNDssCiAgICAmIzM0O3VkZl93cml0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtfX3VkZl9pZ2V0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzYW5pdHkgYW5kIGJvdW5kcyBjaGVja2luZyBmb3IgVURGIGZpbGVzeXN0ZW0gZXh0ZW5kZWQgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5IGZvciBkZXZpY2VTcGVjIGF0dHJpYnV0ZXMgb24gc3BlY2lhbCBkZXZpY2UgaW5vZGVzIChjaGFyYWN0ZXIvYmxvY2sgZGV2aWNlcykuIEl0IGludHJvZHVjZXMgYHVkZl9kZXZpY2Vfc3BlY192YWxpZCgpYCB0byB2YWxpZGF0ZSBhdHRyaWJ1dGUgYW5kIGltcGxlbWVudGF0aW9uLXVzZSBsZW5ndGhzIGFnYWluc3QgYnVmZmVyIGJvdW5kcywgcHJvcGVybHkgaGFuZGxlcyBgRVJSX1BUUmAgZXJyb3IgcmV0dXJucyBmcm9tIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpYCBhbmQgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyKClgLCBhbmQgZml4ZXMgbG9vcCBib3VuZGFyeSBjaGVja3Mgd2hlbiBpdGVyYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcy5cblxuVGhlc2UgY2hhbmdlcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBvbiBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMsIHdoaWNoIGZhbGwgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgVURGIGRldmljZSBzcGVjaWZpY2F0aW9uIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIGZpeGVzIGVycm9yIGhhbmRsaW5nL3Byb3BhZ2F0aW9uIGZvciBjb3JydXB0ZWQgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiBVREYgZmlsZXN5c3RlbSBpbm9kZSByZWFkL3dyaXRlIHBhdGhzLiBUaGlzIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBieSBtb3VudGluZyBhbmQgcmVhZGluZy93cml0aW5nIGNyYWZ0ZWQgVURGIGZpbGVzeXN0ZW0gaW1hZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmY0MDhjNzM4ZGE5ODk0NTlhOGJmMDg1M2RhYTdjMTQxZWZmYzc0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMjA6MDg6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuY1xuaW5kZXggZTQ1ZTU0NmE3MzlhOS4uOGJhYmMyZmJjZTlhMSAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvaW5vZGUuY1xuQEAgLTEzMzYsNiAmIzQzOzEzMzYsMjYgQEAgaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFZlcmlmeSB2YWxpZGl0eSBvZiBzdHJ1Y3QgZGV2aWNlU3BlYyBvbiBkaXNrLiB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpIGhhc1xuJiM0MzsgKiBhbHJlYWR5IHZlcmlmaWVkIHRoZSBnZW5lcmljIGhlYWRlciBhbmQgbWFkZSBzdXJlIGF0dHJpYnV0ZSBmaXRzIGluIHRoZVxuJiM0MzsgKiBpbm9kZSBzbyB3ZSBqdXN0IGhhdmUgdG8gbWFrZSBzdXJlIGF0dHJpYnV0ZSBzcGFjZSBpcyBsYXJnZSBlbm91Z2ggZm9yXG4mIzQzOyAqIGRldmljZVNwZWMgc3RydWN0IGFuZCByZXF1aXJlZCBpbXBVc2UgaW5mb3JtYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoc3RydWN0IGRldmljZVNwZWMgKmRzZWEpXG4mIzQzO3tcbiYjNDM7XHR1MzIgYXR0cl9sZW5ndGgsIGltcF91c2VfbGVuZ3RoO1xuJiM0MztcbiYjNDM7XHRhdHRyX2xlbmd0aCA9IGxlMzJfdG9fY3B1KGRzZWEtXHUwMDNlYXR0ckxlbmd0aCk7XG4mIzQzO1x0aW1wX3VzZV9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLVx1MDAzZWltcFVzZUxlbmd0aCk7XG4mIzQzO1x0aWYgKGF0dHJfbGVuZ3RoIFx1MDAzYyBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpIHx8XG4mIzQzO1x0ICAgIGltcF91c2VfbGVuZ3RoIFx1MDAzYyBzaXplb2Yoc3RydWN0IHJlZ2lkKSB8fFxuJiM0MztcdCAgICBpbXBfdXNlX2xlbmd0aCBcdTAwM2UgYXR0cl9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIE1heGltdW0gbGVuZ3RoIG9mIGxpbmtlZCBsaXN0IGZvcm1lZCBieSBJQ0IgaGllcmFyY2h5LiBUaGUgY2hvc2VuIG51bWJlciBpc1xuICAqIGFyYml0cmFyeSAtIGp1c3QgdGhhdCB3ZSBob3BlZnVsbHkgZG9uJiMzOTt0IGxpbWl0IGFueSByZWFsIHVzZSBvZiByZXdyaXR0ZW5cbkBAIC0xNjU0LDEzICYjNDM7MTY3NCwxOSBAQCBzdGF0aWMgaW50IHVkZl9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgaGlkZGVuX2lub2RlKVxuIFx0aWYgKFNfSVNDSFIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuIFx0XHRcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XG4tXHRcdGlmIChkc2VhKSB7XG4tXHRcdFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS1cdTAwM2VpX21vZGUsXG4mIzQzO1xuJiM0MztcdFx0aWYgKElTX0VSUihkc2VhKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKGRzZWEpO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdC8qIERldmljZSBpbm9kZXMgbXVzdCBoYXZlIGEgZGV2aWNlIHNwZWMgYXR0cmlidXRlICovXG4mIzQzO1x0XHRpZiAoIWRzZWEgfHwgIXVkZl9kZXZpY2Vfc3BlY192YWxpZChkc2VhKSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUZTQ09SUlVQVEVEO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9tb2RlLFxuIFx0XHRcdFx0TUtERVYobGUzMl90b19jcHUoZHNlYS1cdTAwM2VtYWpvckRldmljZUlkZW50KSxcbiBcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGRzZWEtXHUwMDNlbWlub3JEZXZpY2VJZGVudCkpKTtcbi1cdFx0XHQvKiBEZXZlbG9wZXIgSUQgPz8/ICovXG4tXHRcdH0gZWxzZVxuLVx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0cmV0ID0gMDtcbiBvdXQ6XG5AQCAtMTc1Nyw2ICYjNDM7MTc4Myw3IEBAIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHVuc2lnbmVkIGNoYXIgYmxvY2tzaXplX2JpdHMgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4gXHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLFxuIFx0XHRcdHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLVx1MDAzZWlfc2IsIFx1MDAyNmlpbmZvLVx1MDAzZWlfbG9jYXRpb24sIDApKTtcbkBAIC0xODE2LDExICYjNDM7MTg0MywyMSBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0XHRzdHJ1Y3QgcmVnaWQgKmVpZDtcbiBcdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuIFx0XHRcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XG4mIzQzO1xuJiM0MztcdFx0LyogVmFsaWRpdHkgb2YgZXh0ZW5kZWQgYXR0cnMgd2FzIGNoZWNrZWQgb24gbG9hZCAqL1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRShJU19FUlIoZHNlYSkpKSB7XG4mIzQzO1x0XHRcdGVyciA9IFBUUl9FUlIoZHNlYSk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKCFkc2VhKSB7XG4gXHRcdFx0ZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKVxuIFx0XHRcdFx0dWRmX2FkZF9leHRlbmRlZGF0dHIoaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICYjNDM7XG4gXHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IHJlZ2lkKSwgMTIsIDB4Myk7XG4mIzQzO1x0XHRcdGlmIChJU19FUlIoZHNlYSkpIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSBQVFJfRVJSKGRzZWEpO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdGRzZWEtXHUwMDNlYXR0clR5cGUgPSBjcHVfdG9fbGUzMigxMik7XG4gXHRcdFx0ZHNlYS1cdTAwM2VhdHRyU3VidHlwZSA9IDE7XG4gXHRcdFx0ZHNlYS1cdTAwM2VhdHRyTGVuZ3RoID0gY3B1X3RvX2xlMzIoXG5AQCAtMTk2Miw2ICYjNDM7MTk5OSwxMSBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0dW5sb2NrX2J1ZmZlcihiaCk7XG4mIzQzO1x0YnJlbHNlKGJoKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8sXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL21pc2MuYyBiL2ZzL3VkZi9taXNjLmNcbmluZGV4IDY5MjhlMzc4ZmJiZGMuLmEyMDg0ZGZiZmJkNjYgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvbWlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvbWlzYy5jXG5AQCAtNTgsNyAmIzQzOzU4LDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsXG4gXHRcdFx0XHRcdGNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fFxuIFx0XHRcdCAgICBsZTMyX3RvX2NwdShlYWhkLVx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XG4gXHRcdFx0XHRcdGlpbmZvLVx1MDAzZWlfbG9jYXRpb24ubG9naWNhbEJsb2NrTnVtKVxuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVGU0NPUlJVUFRFRCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0c3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXG5AQCAtMTIyLDcgJiM0MzsxMjIsNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3Qgc2l6ZSxcbiBcdFx0cmV0dXJuIChzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqKVx1MDAyNmVhW29mZnNldF07XG4gXHR9XG4gXG4tXHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbiB9XG4gXG4gc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsXG5AQCAtMTQ0LDcgJiM0MzsxNDQsNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcbiBcdFx0XHRcdGNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fFxuIFx0XHQgICAgbGUzMl90b19jcHUoZWFoZC1cdTAwM2VkZXNjVGFnLnRhZ0xvY2F0aW9uKSAhPVxuIFx0XHRcdFx0aWluZm8tXHUwMDNlaV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0pXG4tXHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xuIFxuIFx0XHRpZiAodHlwZSBcdTAwM2MgMjA0OClcbiBcdFx0XHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xuQEAgLTE1MywxNiAmIzQzOzE1MywxNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcbiBcdFx0ZWxzZVxuIFx0XHRcdG9mZnNldCA9IGxlMzJfdG9fY3B1KGVhaGQtXHUwMDNlYXBwQXR0ckxvY2F0aW9uKTtcbiBcbi1cdFx0d2hpbGUgKG9mZnNldCAmIzQzOyBzaXplb2YoKmdhZikgXHUwMDNjIGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIpIHtcbiYjNDM7XHRcdHdoaWxlIChvZmZzZXQgXHUwMDNjXG4mIzQzO1x0XHQgICAgICAgaWluZm8tXHUwMDNlaV9sZW5FQXR0ciAtIHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkpIHtcbiBcdFx0XHR1aW50MzJfdCBhdHRyTGVuZ3RoO1xuIFxuIFx0XHRcdGdhZiA9IChzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqKVx1MDAyNmVhW29mZnNldF07XG4gXHRcdFx0YXR0ckxlbmd0aCA9IGxlMzJfdG9fY3B1KGdhZi1cdTAwM2VhdHRyTGVuZ3RoKTtcbiBcbiBcdFx0XHQvKiBEZXRlY3QgdW5kZXJzaXplZCBlbGVtZW50cyBhbmQgYnVmZmVyIG92ZXJmbG93cyAqL1xuLVx0XHRcdGlmICgoYXR0ckxlbmd0aCBcdTAwM2Mgc2l6ZW9mKCpnYWYpKSB8fFxuLVx0XHRcdCAgICAoYXR0ckxlbmd0aCBcdTAwM2UgKGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIgLSBvZmZzZXQpKSlcbi1cdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRpZiAoYXR0ckxlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBnZW5lcmljRm9ybWF0KSB8fFxuJiM0MztcdFx0XHQgICAgYXR0ckxlbmd0aCBcdTAwM2UgaWluZm8tXHUwMDNlaV9sZW5FQXR0ciAtIG9mZnNldClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbiBcbiBcdFx0XHRpZiAobGUzMl90b19jcHUoZ2FmLVx1MDAzZWF0dHJUeXBlKSA9PSB0eXBlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0XHRnYWYtXHUwMDNlYXR0clN1YnR5cGUgPT0gc3VidHlwZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVREZfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZGZfZ2V0X2V4dGVuZGVkYXR0ciYjMzQ7LAogICAgJiMzNDt1ZGZfYWRkX2V4dGVuZGVkYXR0ciYjMzQ7LAogICAgJiMzNDt1ZGZfd3JpdGVfaW5vZGUmIzM0OywKICAgICYjMzQ7X191ZGZfaWdldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIFVERiBkZXZpY2Ugc3BlY2lmaWNhdGlvbiBleHRlbmRlZCBhdHRyaWJ1dGVzIGFuZCBmaXhlcyBlcnJvciBoYW5kbGluZy9wcm9wYWdhdGlvbiBmb3IgY29ycnVwdGVkIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gVURGIGZpbGVzeXN0ZW0gaW5vZGUgcmVhZC93cml0ZSBwYXRocy4gVGhpcyBpcyBkaXJlY3RseSByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIHJlYWRpbmcvd3JpdGluZyBjcmFmdGVkIFVERiBmaWxlc3lzdGVtIGltYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZmNDA4YzczOGRhOTg5NDU5YThiZjA4NTNkYWE3YzE0MWVmZmM3NDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIwOjA4OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuYwppbmRleCBlNDVlNTQ2YTczOWE5Li44YmFiYzJmYmNlOWExIDEwMDY0NAotLS0gYS9mcy91ZGYvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvaW5vZGUuYwpAQCAtMTMzNiw2ICYjNDM7MTMzNiwyNiBAQCBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzOy8qCiYjNDM7ICogVmVyaWZ5IHZhbGlkaXR5IG9mIHN0cnVjdCBkZXZpY2VTcGVjIG9uIGRpc2suIHVkZl9nZXRfZXh0ZW5kZWRhdHRyKCkgaGFzCiYjNDM7ICogYWxyZWFkeSB2ZXJpZmllZCB0aGUgZ2VuZXJpYyBoZWFkZXIgYW5kIG1hZGUgc3VyZSBhdHRyaWJ1dGUgZml0cyBpbiB0aGUKJiM0MzsgKiBpbm9kZSBzbyB3ZSBqdXN0IGhhdmUgdG8gbWFrZSBzdXJlIGF0dHJpYnV0ZSBzcGFjZSBpcyBsYXJnZSBlbm91Z2ggZm9yCiYjNDM7ICogZGV2aWNlU3BlYyBzdHJ1Y3QgYW5kIHJlcXVpcmVkIGltcFVzZSBpbmZvcm1hdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoc3RydWN0IGRldmljZVNwZWMgKmRzZWEpCiYjNDM7ewomIzQzOwl1MzIgYXR0cl9sZW5ndGgsIGltcF91c2VfbGVuZ3RoOwomIzQzOwomIzQzOwlhdHRyX2xlbmd0aCA9IGxlMzJfdG9fY3B1KGRzZWEtJmd0O2F0dHJMZW5ndGgpOwomIzQzOwlpbXBfdXNlX2xlbmd0aCA9IGxlMzJfdG9fY3B1KGRzZWEtJmd0O2ltcFVzZUxlbmd0aCk7CiYjNDM7CWlmIChhdHRyX2xlbmd0aCAmbHQ7IHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgfHwKJiM0MzsJICAgIGltcF91c2VfbGVuZ3RoICZsdDsgc2l6ZW9mKHN0cnVjdCByZWdpZCkgfHwKJiM0MzsJICAgIGltcF91c2VfbGVuZ3RoICZndDsgYXR0cl9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogTWF4aW11bSBsZW5ndGggb2YgbGlua2VkIGxpc3QgZm9ybWVkIGJ5IElDQiBoaWVyYXJjaHkuIFRoZSBjaG9zZW4gbnVtYmVyIGlzCiAgKiBhcmJpdHJhcnkgLSBqdXN0IHRoYXQgd2UgaG9wZWZ1bGx5IGRvbiYjMzk7dCBsaW1pdCBhbnkgcmVhbCB1c2Ugb2YgcmV3cml0dGVuCkBAIC0xNjU0LDEzICYjNDM7MTY3NCwxOSBAQCBzdGF0aWMgaW50IHVkZl9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgaGlkZGVuX2lub2RlKQogCWlmIChTX0lTQ0hSKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJc3RydWN0IGRldmljZVNwZWMgKmRzZWEgPQogCQkJKHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTsKLQkJaWYgKGRzZWEpIHsKLQkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtJmd0O2lfbW9kZSwKJiM0MzsKJiM0MzsJCWlmIChJU19FUlIoZHNlYSkpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKGRzZWEpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwkJLyogRGV2aWNlIGlub2RlcyBtdXN0IGhhdmUgYSBkZXZpY2Ugc3BlYyBhdHRyaWJ1dGUgKi8KJiM0MzsJCWlmICghZHNlYSB8fCAhdWRmX2RldmljZV9zcGVjX3ZhbGlkKGRzZWEpKSB7CiYjNDM7CQkJcmV0ID0gLUVGU0NPUlJVUFRFRDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtJmd0O2lfbW9kZSwKIAkJCQlNS0RFVihsZTMyX3RvX2NwdShkc2VhLSZndDttYWpvckRldmljZUlkZW50KSwKIAkJCQkgICAgICBsZTMyX3RvX2NwdShkc2VhLSZndDttaW5vckRldmljZUlkZW50KSkpOwotCQkJLyogRGV2ZWxvcGVyIElEID8/PyAqLwotCQl9IGVsc2UKLQkJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSAwOwogb3V0OgpAQCAtMTc1Nyw2ICYjNDM7MTc4Myw3IEBAIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtJmd0O2lfc2IpOwogCXVuc2lnbmVkIGNoYXIgYmxvY2tzaXplX2JpdHMgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpOwomIzQzOwlpbnQgZXJyOwogCiAJYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsCiAJCQl1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0mZ3Q7aV9zYiwgJmFtcDtpaW5mby0mZ3Q7aV9sb2NhdGlvbiwgMCkpOwpAQCAtMTgxNiwxMSAmIzQzOzE4NDMsMjEgQEAgaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIAkJc3RydWN0IHJlZ2lkICplaWQ7CiAJCXN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID0KIAkJCShzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7CiYjNDM7CiYjNDM7CQkvKiBWYWxpZGl0eSBvZiBleHRlbmRlZCBhdHRycyB3YXMgY2hlY2tlZCBvbiBsb2FkICovCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKElTX0VSUihkc2VhKSkpIHsKJiM0MzsJCQllcnIgPSBQVFJfRVJSKGRzZWEpOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KIAkJaWYgKCFkc2VhKSB7CiAJCQlkc2VhID0gKHN0cnVjdCBkZXZpY2VTcGVjICopCiAJCQkJdWRmX2FkZF9leHRlbmRlZGF0dHIoaW5vZGUsCiAJCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgJiM0MzsKIAkJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCByZWdpZCksIDEyLCAweDMpOwomIzQzOwkJCWlmIChJU19FUlIoZHNlYSkpIHsKJiM0MzsJCQkJZXJyID0gUFRSX0VSUihkc2VhKTsKJiM0MzsJCQkJZ290byBvdXRfdW5sb2NrOwomIzQzOwkJCX0KIAkJCWRzZWEtJmd0O2F0dHJUeXBlID0gY3B1X3RvX2xlMzIoMTIpOwogCQkJZHNlYS0mZ3Q7YXR0clN1YnR5cGUgPSAxOwogCQkJZHNlYS0mZ3Q7YXR0ckxlbmd0aCA9IGNwdV90b19sZTMyKApAQCAtMTk2Miw2ICYjNDM7MTk5OSwxMSBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCXNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJdW5sb2NrX2J1ZmZlcihiaCk7CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubywKZGlmZiAtLWdpdCBhL2ZzL3VkZi9taXNjLmMgYi9mcy91ZGYvbWlzYy5jCmluZGV4IDY5MjhlMzc4ZmJiZGMuLmEyMDg0ZGZiZmJkNjYgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9taXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWRmL21pc2MuYwpAQCAtNTgsNyAmIzQzOzU4LDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsCiAJCQkJCWNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fAogCQkJICAgIGxlMzJfdG9fY3B1KGVhaGQtJmd0O2Rlc2NUYWcudGFnTG9jYXRpb24pICE9CiAJCQkJCWlpbmZvLSZndDtpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSkKLQkJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCQkJcmV0dXJuIEVSUl9QVFIoLUVGU0NPUlJVUFRFRCk7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihpbm9kZS0mZ3Q7aV9zYik7CiAKQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsCiAJCXJldHVybiAoc3RydWN0IGdlbmVyaWNGb3JtYXQgKikmYW1wO2VhW29mZnNldF07CiAJfQogCi0JcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwogfQogCiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSwKQEAgLTE0NCw3ICYjNDM7MTQ0LDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsCiAJCQkJY3B1X3RvX2xlMTYoVEFHX0lERU5UX0VBSEQpIHx8CiAJCSAgICBsZTMyX3RvX2NwdShlYWhkLSZndDtkZXNjVGFnLnRhZ0xvY2F0aW9uKSAhPQogCQkJCWlpbmZvLSZndDtpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSkKLQkJCXJldHVybiBOVUxMOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpOwogCiAJCWlmICh0eXBlICZsdDsgMjA0OCkKIAkJCW9mZnNldCA9IHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYyk7CkBAIC0xNTMsMTYgJiM0MzsxNTMsMTcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsCiAJCWVsc2UKIAkJCW9mZnNldCA9IGxlMzJfdG9fY3B1KGVhaGQtJmd0O2FwcEF0dHJMb2NhdGlvbik7CiAKLQkJd2hpbGUgKG9mZnNldCAmIzQzOyBzaXplb2YoKmdhZikgJmx0OyBpaW5mby0mZ3Q7aV9sZW5FQXR0cikgewomIzQzOwkJd2hpbGUgKG9mZnNldCAmbHQ7CiYjNDM7CQkgICAgICAgaWluZm8tJmd0O2lfbGVuRUF0dHIgLSBzaXplb2Yoc3RydWN0IGdlbmVyaWNGb3JtYXQpKSB7CiAJCQl1aW50MzJfdCBhdHRyTGVuZ3RoOwogCiAJCQlnYWYgPSAoc3RydWN0IGdlbmVyaWNGb3JtYXQgKikmYW1wO2VhW29mZnNldF07CiAJCQlhdHRyTGVuZ3RoID0gbGUzMl90b19jcHUoZ2FmLSZndDthdHRyTGVuZ3RoKTsKIAogCQkJLyogRGV0ZWN0IHVuZGVyc2l6ZWQgZWxlbWVudHMgYW5kIGJ1ZmZlciBvdmVyZmxvd3MgKi8KLQkJCWlmICgoYXR0ckxlbmd0aCAmbHQ7IHNpemVvZigqZ2FmKSkgfHwKLQkJCSAgICAoYXR0ckxlbmd0aCAmZ3Q7IChpaW5mby0mZ3Q7aV9sZW5FQXR0ciAtIG9mZnNldCkpKQotCQkJCWJyZWFrOwomIzQzOwkJCWlmIChhdHRyTGVuZ3RoICZsdDsgc2l6ZW9mKHN0cnVjdCBnZW5lcmljRm9ybWF0KSB8fAomIzQzOwkJCSAgICBhdHRyTGVuZ3RoICZndDsgaWluZm8tJmd0O2lfbGVuRUF0dHIgLSBvZmZzZXQpCiYjNDM7CQkJCXJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpOwogCiAJCQlpZiAobGUzMl90b19jcHUoZ2FmLSZndDthdHRyVHlwZSkgPT0gdHlwZSAmYW1wOyZhbXA7CiAJCQkJCWdhZi0mZ3Q7YXR0clN1YnR5cGUgPT0gc3VidHlwZSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkxNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFVERiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSBpdHMgZnV6emluZyBwb3RlbnRpYWwuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGEgc29saWQgYW5hbHlzaXMgaW52b2x2ZXMgZmlndXJpbmcgb3V0IGlmIGl0JiMzOTtzIFdvcnRoRnV6emluZywgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLCBrZXkgc3ltYm9scyB0byB0YXJnZXQsIGFuZCB0aGUgdW5kZXJseWluZyByZWFzb25pbmcuCgpGaXJzdCwgSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYGZzL3VkZi9pbm9kZS5jYCBhbmQgYGZzL3VkZi9taXNjLmNgLiBMZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIGhhcHBlbmluZzogaXQmIzM5O3MgYWxsIGFib3V0IFVERiBmaWxlc3lzdGVtIGRldmljZSBzcGVjaWZpY2F0aW9uIHZhbGlkYXRpb24gYW5kIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFNwZWNpZmljYWxseTogYHVkZl9kZXZpY2Vfc3BlY192YWxpZGAgdmFsaWRhdGVzIHRoZSBgc3RydWN0IGRldmljZVNwZWNgLCBgdWRmX3JlYWRfaW5vZGVgIGlzIGhhbmRsaW5nIGVycm9ycyBpbiBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGFuZCB2YWxpZGF0aW5nIHRoZSBkZXZpY2Ugc3BlY3MsIGFuZCB0aGUgYHVkZl93cml0ZV9pbm9kZWAgaXMgZG9pbmcgc2ltaWxhciBlcnJvciBjaGVja3MsIHNwZWNpZmljYWxseSBhcm91bmQgaGFuZGxpbmcgYEVSUl9QVFJgIHJldHVybnMgZnJvbSBmdW5jdGlvbnMgbGlrZSBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHJgLiBUaG9zZSBmdW5jdGlvbnMgYWxzbyBub3cgZXhwbGljaXRseSByZXR1cm4gYEVSUl9QVFIoLi4uKWAgcmF0aGVyIHRoYW4gYE5VTExgIG9uIGVycm9ycy4gVGhpcyBpcyBjcnVjaWFsIGZvciBkZXRlY3RpbmcgYW5kIGhhbmRsaW5nIGNvcnJ1cHRpb24uCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uOiBpcyBVREYgYWNjZXNzaWJsZSB0byBhIHN0YW5kYXJkIGZ1enplcj8gR2l2ZW4gaXQmIzM5O3MgYSBkaXNrIGZpbGVzeXN0ZW0gKGBmcy91ZGYvYCksIEkga25vdyBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlLiBGaWxlc3lzdGVtcyBhcmUgb2Z0ZW4gbW91bnRlZCB2aWEgbG9vcCBkZXZpY2VzLCBhbmQgZnV6emluZyBmaWxlc3lzdGVtIGltYWdlcyBpcyBjb21tb24gcHJhY3RpY2UgKHN5emthbGxlciBkb2VzIHRoaXMpLiBUaGlzIHNlZW1zIHByb21pc2luZy4KClRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlIGRldGFpbHMuIFRpbWUgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayBgZnMvdWRmL0tjb25maWdgIGFuZCBgZnMvdWRmL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBVREYgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgdGVsbCBtZSB0aGUgcmVxdWlyZWQgYEVuYWJsZUNvbmZpZ3NgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVREZfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWRmL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3VkZi9LY29uZmlnOjI6Y29uZmlnIFVERl9GU1xuZnMvdWRmL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VERiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHJlYWRpbmcgYGZzL3VkZi9LY29uZmlnYCwgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIFVERiBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gYGZzL3VkZi9LY29uZmlnYC4gVGltZSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkmIzM5O3JlIHN0cnVjdHVyZWQgZm9yIHRoZSBVREYgZmlsZXN5c3RlbS4gSW1tZWRpYXRlbHksIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUgc2V0dGluZ3Mg4oCTIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBvcHRpb25zIGZvciBlbmFibGluZy9kaXNhYmxpbmcgVURGIHN1cHBvcnQgZW50aXJlbHksIG5hdHVyYWxseS4gUHJvYmFibHkgYSBtb2R1bGUgb3B0aW9uIHRvbzsgZ290dGEgYmUgZmxleGlibGUgb24gdGhhdCBmcm9udC4KCkkmIzM5O20gc2Nhbm5pbmcgZm9yIGZpbmVyLWdyYWluZWQgY29udHJvbHMuIEFyZSB0aGVyZSBvcHRpb25zIGZvciBoYW5kbGluZyBzcGVjaWZpYyBVREYgdmVyc2lvbnM/IE9yIHBlcmhhcHMgZmxhZ3MgdG8gZW5hYmxlL2Rpc2FibGUgY2VydGFpbiBVREYgZXh0ZW5zaW9ucz8gSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHNvbWUgZ3JhbnVsYXJpdHkgaGVyZSwgZ2l2ZW4gdGhlIHZhcmlvdXMgcmV2aXNpb25zIGFuZCBmZWF0dXJlcyBpbXBsZW1lbnRlZCBvdmVyIHRpbWUuIFRoaW5ncyBsaWtlIGhhbmRsaW5nIGxvbmcgZmlsZW5hbWVzIG9yIHN1cHBvcnQgZm9yIHNwZWNpZmljIG1ldGFkYXRhIGZvcm1hdHMuCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgbXVzdCBiZSBlbmFibGVkIGZvciBVREYgdG8gZnVuY3Rpb24gcHJvcGVybHk/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMgb24gYmxvY2sgZHJpdmVycywgU0NTSSBsYXllcnMsIG9yIHNwZWNpZmljIG1lZGlhIGZvcm1hdHM/IEFuZCBjb252ZXJzZWx5LCBkb2VzIGVuYWJsaW5nIFVERiBjb25mbGljdCB3aXRoIGFueSBvdGhlciBmaWxlc3lzdGVtIG9wdGlvbnM/IEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGVzZSByZWxhdGlvbnNoaXBzIHRvIGF2b2lkIHBvdGVudGlhbCBidWlsZCBjb25mbGljdHMgYW5kIGVuc3VyZSB0aGUgcmVzdWx0aW5nIGtlcm5lbCBpbWFnZSBpcyBhcyBsZWFuIGFuZCBmdW5jdGlvbmFsIGFzIHBvc3NpYmxlLgoKSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBkZWZhdWx0IHZhbHVlcyBhc3NpZ25lZCB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBcmUgc2Vuc2libGUgZGVmYXVsdHMgcHJvdmlkZWQ/IEFyZSB0aGV5IGFwcHJvcHJpYXRlIGZvciBtb3N0IGNvbW1vbiB1c2UgY2FzZXMsIG9yIG1pZ2h0IEkgbmVlZCB0byB0d2VhayB0aGVtIGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IGhhcmR3YXJlIGFuZCBzdG9yYWdlIGVudmlyb25tZW50PyBJJiMzOTtsbCBwcm9iYWJseSBhbHNvIGNoZWNrIGZvciBoZWxwIHRleHQgdG8gc2VlIGhvdyB3ZWxsIGl0IGV4cGxhaW5zIHRoZSBvcHRpb25zLiBHb29kIGhlbHAgdGV4dCBpcyBjcnVjaWFsIGZvciBndWlkaW5nIHVzZXJzLCBlc3BlY2lhbGx5IGxlc3MtZXhwZXJpZW5jZWQgb25lcy4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljLiBBcmUgdGhlcmUgYW55IGZlYXR1cmVzIGdhdGVkIGJlaGluZCBjZXJ0YWluIGhhcmR3YXJlIHBsYXRmb3Jtcywga2VybmVsIHZlcnNpb25zLCBvciBvdGhlciBjb21waWxlLXRpbWUgY29uZGl0aW9ucz8gVW5kZXJzdGFuZGluZyB0aGVzZSBjb25kaXRpb25zIGlzIGtleSB0byBlbnN1cmluZyB0aGF0IHRoZSBVREYgZmlsZXN5c3RlbSBiZWhhdmVzIGFzIGV4cGVjdGVkIGFuZCB0aGF0IHRoZSBidWlsZCBpcyBvcHRpbWl6ZWQgZm9yIG15IHNwZWNpZmljIG5lZWRzLiBUaGlzIEtjb25maWcgZmlsZSBpcyBnb2luZyB0byB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBvZiBVREYgc3VwcG9ydCBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3VkZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFVERl9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VURGIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNTpcdFx0c2VsZWN0IENSQ19JVFVfVFxuICAgNjpcdFx0c2VsZWN0IE5MU1xuICAgNzpcdFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBpcyBhIGZpbGUgc3lzdGVtIHVzZWQgb24gc29tZSBDRC1ST01zIGFuZCBEVkRzLiBTaW5jZSB0aGVcbiAgMTA6XHRcdCAgZmlsZSBzeXN0ZW0gaXMgc3VwcG9ydGVkIGJ5IG11bHRpcGxlIG9wZXJhdGluZyBzeXN0ZW1zIGFuZCBpcyBtb3JlXG4gIDExOlx0XHQgIGNvbXBhdGlibGUgd2l0aCBzdGFuZGFyZCB1bml4IGZpbGUgc3lzdGVtcywgaXQgaXMgYWxzbyBzdWl0YWJsZSBmb3JcbiAgMTI6XHRcdCAgcmVtb3ZhYmxlIFVTQiBkaXNrcy4gU2F5IFkgaWYgeW91IGludGVuZCB0byBtb3VudCBEVkQgZGlzY3Mgb3IgQ0RSVyYjMzk7c1xuICAxMzpcdFx0ICB3cml0dGVuIGluIHBhY2tldCBtb2RlLCBvciBpZiB5b3Ugd2FudCB0byB1c2UgVURGIGZvciByZW1vdmFibGUgVVNCXG4gIDE0Olx0XHQgIGRpc2tzLiBQbGVhc2UgcmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWRmLnJzdFx1MDAzZS5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdWRmLlxuICAxODpcdFxuICAxOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIFVERiBFeHRlbmRlZCBBdHRyaWJ1dGUgSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFVERiBmaWxlc3lzdGVtIGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgVURGIGNvZGUuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGZzL3VkZi9pbm9kZS5jYCBhbmQgYGZzL3VkZi9taXNjLmNgLiBJIHdhbnQgdG8gc2VlIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzLCBkZXRlcm1pbmUgdGhlaXIgdmlzaWJpbGl0eSAoYXJlIHRoZXkgZXhwb3J0ZWQgb3IgaW50ZXJuYWw/KSwgYW5kIGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGRlc2lnbi4KCk5leHQsIEkmIzM5O2xsIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAuIEkgd2FudCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIFRoZW4sIEkgbmVlZCB0byBzZWUgKndobyogaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIOKAkyB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBmaWxlc3lzdGVtLCBvciBwb3RlbnRpYWxseSBldmVuIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhcmUgcmVseWluZyBvbiBpdD8gSWRlbnRpZnlpbmcgYWxsIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gaXRzIHVzYWdlIGNvbnRleHQgYW5kIGhlbHAgbWUgc3BvdCBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGRhdGEgaW50ZWdyaXR5LCBhY2Nlc3MgY29udHJvbCwgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGVzcGVjaWFsbHkgd2l0aGluIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAgaXRzZWxmLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgbWlzaGFuZGxlZCBvciBjb3VsZCBiZSBleHBsb2l0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRmX2dldF9leHRlbmRlZGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWRmL2lub2RlLmM9MTI4MD1pbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXG4tLVxuZnMvdWRmL2lub2RlLmMtMTMzOS0vKlxuZnMvdWRmL2lub2RlLmM6MTM0MDogKiBWZXJpZnkgdmFsaWRpdHkgb2Ygc3RydWN0IGRldmljZVNwZWMgb24gZGlzay4gdWRmX2dldF9leHRlbmRlZGF0dHIoKSBoYXNcbmZzL3VkZi9pbm9kZS5jLTEzNDEtICogYWxyZWFkeSB2ZXJpZmllZCB0aGUgZ2VuZXJpYyBoZWFkZXIgYW5kIG1hZGUgc3VyZSBhdHRyaWJ1dGUgZml0cyBpbiB0aGVcbi0tXG5mcy91ZGYvaW5vZGUuYz0xMzY2PXN0YXRpYyBpbnQgdWRmX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBoaWRkZW5faW5vZGUpXG4tLVxuZnMvdWRmL2lub2RlLmMtMTY3NS1cdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuZnMvdWRmL2lub2RlLmM6MTY3NjpcdFx0XHQoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpO1xuZnMvdWRmL2lub2RlLmMtMTY3Ny1cbi0tXG5mcy91ZGYvaW5vZGUuYz0xNzc0PWludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4tLVxuZnMvdWRmL2lub2RlLmMtMTg0NC1cdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuZnMvdWRmL2lub2RlLmM6MTg0NTpcdFx0XHQoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpO1xuZnMvdWRmL2lub2RlLmMtMTg0Ni1cbi0tXG5mcy91ZGYvbWlzYy5jPTI3PXN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLFxuLS1cbmZzL3VkZi9taXNjLmMtMTI3LVxuZnMvdWRmL21pc2MuYzoxMjg6c3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsXG5mcy91ZGYvbWlzYy5jLTEyOS1cdFx0XHRcdFx0ICAgdWludDhfdCBzdWJ0eXBlKVxuLS1cbmZzL3VkZi91ZGZkZWNsLmg9MTg0PWV4dGVybiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICosIHVpbnQzMl90LFxuZnMvdWRmL3VkZmRlY2wuaC0xODUtXHRcdFx0XHRcdFx0ICB1aW50MzJfdCwgdWludDhfdCk7XG5mcy91ZGYvdWRmZGVjbC5oOjE4NjpleHRlcm4gc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqLCB1aW50MzJfdCxcbmZzL3VkZi91ZGZkZWNsLmgtMTg3LVx0XHRcdFx0XHRcdCAgdWludDhfdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgQ29kZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgSSYjMzk7bSBhbHJlYWR5IGxvb2tpbmcgaW50byB0aGlzIGFyZWEsIGJ1dCBsZXQmIzM5O3Mgbm90IGdldCB0dW5uZWwgdmlzaW9uLiBJJiMzOTttIGRlZXAgaW4gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGFuZCBpdHMgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvZGUgcmlnaHQgbm93LCBidXQgYSBjcnVjaWFsIG5leHQgc3RlcCBoZXJlIGlzIHRvIGFsc28gdmVyaWZ5IHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGFjdHVhbGx5ICp1c2luZyogdGhpcyBgdWRmX2FkZF9leHRlbmRlZGF0dHJgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZG93bnN0cmVhbSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlLCBhbmQgZmluZGluZyB0aGUgY2FsbGVycyBpcyBmdW5kYW1lbnRhbCB0byB0aGF0LiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIHVuZGVyc3RhbmQgKndoYXQqIGl0IGRvZXMgaGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZXJlKiBpdCYjMzk7cyBiZWluZyB1c2VkIHRvby4gVGhhdCBjYWxsIGdyYXBoIGlzIGltcG9ydGFudCBmb3IgcmlzayBhc3Nlc3NtZW50IGFuZCBpbXBhY3QgYW5hbHlzaXMuIFNvIEkmIzM5O2xsIGNoZWNrIGl0cyBjYWxsZXJzIGFuZCBidWlsZCB0aGF0IG1lbnRhbCBtYXAgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRmX2FkZF9leHRlbmRlZGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWRmL2lub2RlLmM9MTc3ND1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL3VkZi9pbm9kZS5jLTE4NTMtXHRcdFx0ZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKVxuZnMvdWRmL2lub2RlLmM6MTg1NDpcdFx0XHRcdHVkZl9hZGRfZXh0ZW5kZWRhdHRyKGlub2RlLFxuZnMvdWRmL2lub2RlLmMtMTg1NS1cdFx0XHRcdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgJiM0Mztcbi0tXG5mcy91ZGYvbWlzYy5jLTI2LVxuZnMvdWRmL21pc2MuYzoyNzpzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3Qgc2l6ZSxcbmZzL3VkZi9taXNjLmMtMjgtXHRcdFx0XHRcdCAgIHVpbnQzMl90IHR5cGUsIHVpbnQ4X3QgbG9jKVxuLS1cbmZzL3VkZi91ZGZkZWNsLmg9MTgxPWV4dGVybiB2b2lkIHVkZl91cGRhdGVfZXh0cmFfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCBtb2RlKTtcbi0tXG5mcy91ZGYvdWRmZGVjbC5oLTE4My0vKiBtaXNjLmMgKi9cbmZzL3VkZi91ZGZkZWNsLmg6MTg0OmV4dGVybiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICosIHVpbnQzMl90LFxuZnMvdWRmL3VkZmRlY2wuaC0xODUtXHRcdFx0XHRcdFx0ICB1aW50MzJfdCwgdWludDhfdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMzcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFVERiBGaWxlc3lzdGVtIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGUgVURGIGZpbGVzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGZ1bmN0aW9ucyB0aGF0IGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AgYW5kIHRoYXQgYXJlIGxpa2VseSBlbnRyeSBwb2ludHMgb3Igc3ltYm9scyB0aGF0IG1pZ2h0IGJlIG1vZGlmaWVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBhIGdvb2Qgd2F5IHRvIHF1aWNrbHkgaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LCBlc3BlY2lhbGx5IHdoZW4gSSYjMzk7bSBsb29raW5nIGZvciBob3cgZGF0YSBpcyBhY2Nlc3NlZCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIHN5c3RlbS4KCkZpcnN0LCBJJiMzOTttIGV4YW1pbmluZyBgZnMvdWRmL2lub2RlLmNgLiBJIHNlZSBgdWRmX3dyaXRlX2lub2RlYCBpcyBub24tc3RhdGljLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBsaWtlbHkgaW52b2x2ZWQgaW4gd3JpdGluZyBpbm9kZSBkYXRhLCBhbmQgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhpcyBzcGVjaWZpYyBmaWxlLiBgdWRmX3JlYWRfaW5vZGVgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdHMgdXNhZ2UgaXMgbGltaXRlZCB0byB0aGlzIGZpbGUsIHdoaWNoIGlzIGNhbGxlZCBieSBgX191ZGZfaWdldGAgYW5kIGB1ZGZfaWdldGAuIGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWRgIGlzIGFsc28gYSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uOyBzbyBub3QgdGhhdCBpbnRlcmVzdGluZyBmb3Igb3VyIGN1cnJlbnQgZ29hbC4KCk5leHQsIEkmIzM5O20gbW92aW5nIG9uIHRvIGBmcy91ZGYvbWlzYy5jYC4gSGVyZSwgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCBhbmQgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYCBhcmUgbm9uLXN0YXRpYyBhbmQgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYWxsb3cgYWRkaW5nIG9yIGZldGNoaW5nIG9mIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIEl0IG1ha2VzIHNlbnNlLCBhcyBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBhIGNvbW1vbiB3YXkgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIG1ldGFkYXRhIHRvIGEgZmlsZS4gVGhlc2Ugd2lsbCBwcm92aWRlIGdlbmVyaWMgRm9ybWF0IHN0cnVjdHVyZXMgYW5kIHNob3VsZCBiZSBjYXJlZnVsbHkgcmV2aWV3ZWQuIEZpbmFsbHksIG5vdGluZyB0aGF0IGB1ZGZfaWdldGAgYW5kIGBfX3VkZl9pZ2V0YCBhcmUgaW4gYGlub2RlLmNgLCBhcmUgaW1wb3J0YW50IGVudHJ5cG9pbnRzIGZvciByZWFkaW5nIGlub2Rlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRmX3JlYWRfaW5vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWRmL2lub2RlLmMtMTgtICogIDEyLzA2Lzk4IGJsZiAgcGFydGl0aW9uIHN1cHBvcnQgaW4gdWRmX2lnZXQsIHVkZl9ibG9ja19tYXBcbmZzL3VkZi9pbm9kZS5jOjE5OiAqICAgICAgICAgICAgICAgIGFuZCB1ZGZfcmVhZF9pbm9kZVxuZnMvdWRmL2lub2RlLmMtMjAtICogIDEyLzEyLzk4ICAgICAgcmV3cm90ZSB1ZGZfYmxvY2tfbWFwIHRvIGhhbmRsZSBuZXh0IGV4dGVudHMgYW5kIGRlc2NzIGFjcm9zc1xuLS1cbmZzL3VkZi9pbm9kZS5jPTEzNDU9c3RhdGljIGJvb2wgdWRmX2RldmljZV9zcGVjX3ZhbGlkKHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhKVxuLS1cbmZzL3VkZi9pbm9kZS5jLTEzNjUtXG5mcy91ZGYvaW5vZGUuYzoxMzY2OnN0YXRpYyBpbnQgdWRmX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBoaWRkZW5faW5vZGUpXG5mcy91ZGYvaW5vZGUuYy0xMzY3LXtcbi0tXG5mcy91ZGYvaW5vZGUuYz0yMDA5PXN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubyxcbi0tXG5mcy91ZGYvaW5vZGUuYy0yMDI3LVx0bWVtY3B5KFx1MDAyNlVERl9JKGlub2RlKS1cdTAwM2VpX2xvY2F0aW9uLCBpbm8sIHNpemVvZihzdHJ1Y3Qga2VybmVsX2xiX2FkZHIpKTtcbmZzL3VkZi9pbm9kZS5jOjIwMjg6XHRlcnIgPSB1ZGZfcmVhZF9pbm9kZShpbm9kZSwgaGlkZGVuX2lub2RlKTtcbmZzL3VkZi9pbm9kZS5jLTIwMjktXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVURGIEZpbGVzeXN0ZW0mIzM5O3MgaS1ub2RlIEhhbmRsaW5nKioKClJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGktbm9kZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBVREYgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRob3NlIGN1c3RvbSBVREYtc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGZzL3VkZi9pbm9kZS5jYCwgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYF9fdWRmX2lnZXRgIGFuZCBgdWRmX2lnZXRgLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGRpZmZlcmVuY2VzIGFuZCBzaGFyZWQgcmVzcG9uc2liaWxpdGllcywgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG51YW5jZXMgb2YgVURGJiMzOTtzIG1ldGFkYXRhIHN0b3JhZ2UgYW5kIHJldHJpZXZhbC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgaW4gZmV0Y2hpbmcgYW5kIGluaXRpYWxpemluZyBpLW5vZGUgZGF0YSBmcm9tIHRoZSBkaXNjLiBJIGFudGljaXBhdGUgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4gYXJvdW5kIHRoZSBoYW5kbGluZyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIG9yIHNwZWNpZmljIFVERiBzdHJ1Y3R1cmVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy91ZGYvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAwNTpcdFx0YnJlbHNlKGJoKTtcbjIwMDY6XHRcdHJldHVybiBlcnI7XG4yMDA3Olx0fVxuMjAwODpcdFxuMjAwOTpcdHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubyxcbjIwMTA6XHRcdFx0XHQgYm9vbCBoaWRkZW5faW5vZGUpXG4yMDExOlx0e1xuMjAxMjpcdFx0dW5zaWduZWQgbG9uZyBibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCBpbm8sIDApO1xuMjAxMzpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBibG9jayk7XG4yMDE0Olx0XHRpbnQgZXJyO1xuMjAxNTpcdFxuMjAxNjpcdFx0aWYgKCFpbm9kZSlcbjIwMTc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4yMDE4Olx0XG4yMDE5Olx0XHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX05FVykpIHtcbjIwMjA6XHRcdFx0aWYgKFVERl9JKGlub2RlKS1cdTAwM2VpX2hpZGRlbiAhPSBoaWRkZW5faW5vZGUpIHtcbjIwMjE6XHRcdFx0XHRpcHV0KGlub2RlKTtcbjIwMjI6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbjIwMjM6XHRcdFx0fVxuMjAyNDpcdFx0XHRyZXR1cm4gaW5vZGU7XG4yMDI1Olx0XHR9XG4yMDI2Olx0XG4yMDI3Olx0XHRtZW1jcHkoXHUwMDI2VURGX0koaW5vZGUpLVx1MDAzZWlfbG9jYXRpb24sIGlubywgc2l6ZW9mKHN0cnVjdCBrZXJuZWxfbGJfYWRkcikpO1xuMjAyODpcdFx0ZXJyID0gdWRmX3JlYWRfaW5vZGUoaW5vZGUsIGhpZGRlbl9pbm9kZSk7XG4yMDI5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4yMDMwOlx0XHRcdGlnZXRfZmFpbGVkKGlub2RlKTtcbjIwMzE6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjIwMzI6XHRcdH1cbjIwMzM6XHRcdHVubG9ja19uZXdfaW5vZGUoaW5vZGUpO1xuMjAzNDpcdFxuMjAzNTpcdFx0cmV0dXJuIGlub2RlO1xuMjAzNjpcdH1cbjIwMzc6XHRcbjIwMzg6XHRpbnQgdWRmX3NldHVwX2luZGlyZWN0X2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgdWRmX3BibGtfdCBibG9jayxcbjIwMzk6XHRcdFx0XHQgICAgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcylcbjIwNDA6XHR7XG4yMDQxOlx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbjIwNDI6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4yMDQzOlx0XHRzdHJ1Y3QgYWxsb2NFeHREZXNjICphZWQ7XG4yMDQ0Olx0XHRzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIG5lcG9zO1xuMjA0NTpcdFx0c3RydWN0IGtlcm5lbF9sYl9hZGRyIG5lbG9jO1xuMjA0NjpcdFx0aW50IHZlciwgYWRzaXplO1xuMjA0NzpcdFx0aW50IGVyciA9IDA7XG4yMDQ4Olx0XG4yMDQ5Olx0XHRpZiAoVURGX0koaW5vZGUpLVx1MDAzZWlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk2MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBVREYgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmaWxlcyBiZXNpZGVzIHdoYXQmIzM5O3MgbWVudGlvbmVkIGluIHRoZSBpbml0aWFsIGRlc2NyaXB0aW9uLiBUaGVuLCBsZXQmIzM5O3MgZ28gb3ZlciB0aGUgZGlmZiBhZ2FpbiwgcGFydGljdWxhcmx5IGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgaW4gYGZzL3VkZi9pbm9kZS5jYCBpbnZvbHZpbmcgYHVkZl9kZXZpY2Vfc3BlY192YWxpZGAsIGB1ZGZfcmVhZF9pbm9kZWAsIGFuZCBgdWRmX3dyaXRlX2lub2RlYCwgYW5kIGFsc28gYGZzL3VkZi9taXNjLmNgLCB3aGVyZSB3ZSBzZWUgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCBhbmQgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYCBiZWluZyBtb2RpZmllZC4KCkhtbSwgaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IFllcywgYWJzb2x1dGVseS4gVGhpcyBhZGRyZXNzZXMgc29tZSBjcnVjaWFsIHZ1bG5lcmFiaWxpdGllczogYm91bmRzIGNoZWNrcyBhbmQgdmFsaWRpdHkgY2hlY2tzLCBhbmQgZXJyb3IgcHJvcGFnYXRpb24gYXJlIGltcHJvdmVkIGZvciBoYW5kbGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzIHdpdGhpbiB0aGUgVURGIGZpbGVzeXN0ZW0gY29kZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGlzc3VlcyByZWxhdGVkIHRvIHNwZWNpYWwgZGV2aWNlIGlub2RlcyBhbmQgdGhlIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cmAgZnVuY3Rpb25zLiBUaGlzIG1lYW5zIG1hbGZvcm1lZCBVREYgZmlsZXN5c3RlbSBpbWFnZXMgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciB0aGVzZSBjb2RlIHBhdGhzIGR1cmluZyBhIG1vdW50IG9wZXJhdGlvbiwgaW5vZGUgbG9va3VwcywgcmVhZHMsIG9yIGV2ZW4gd3JpdGViYWNrcy4gVGhhdCYjMzk7cyBhIHRleHRib29rIGNhc2UgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgQ09ORklHIHNldHRpbmdzIGFyZS4gSW4gdGhlIGBmcy91ZGYvS2NvbmZpZ2AgZmlsZSwgd2UgaGF2ZSBgY29uZmlnIFVERl9GU2AsIHdoaWNoIHNlbGVjdHMgQlVGRkVSX0hFQUQsIENSQ19JVFVfVCwgTkxTLCBhbmQgTEVHQUNZX0RJUkVDVF9JTy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGRlcGVuZCBvbiBhbnl0aGluZyBlbHNlIGNyaXRpY2FsLiBUaW1lIHRvIGNoZWNrIGBmcy91ZGYvS2NvbmZpZ2AgYW5kIGBmcy9LY29uZmlnYCBmb3IgZGVwZW5kZW5jaWVzIGFyb3VuZCBgVURGX0ZTYC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtVREZfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9MTA1PW9iai0kKENPTkZJR19PUkFOR0VGU19GUykgICAgICAgJiM0Mzs9IG9yYW5nZWZzL1xuZnMvTWFrZWZpbGU6MTA2Om9iai0kKENPTkZJR19VREZfRlMpXHRcdCYjNDM7PSB1ZGYvXG5mcy9NYWtlZmlsZS0xMDctb2JqLSQoQ09ORklHX1NVTl9PUEVOUFJPTUZTKVx0JiM0Mzs9IG9wZW5wcm9tZnMvXG4tLVxuZnMvdWRmL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3VkZi9LY29uZmlnOjI6Y29uZmlnIFVERl9GU1xuZnMvdWRmL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VERiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvdWRmL01ha2VmaWxlLTUtXG5mcy91ZGYvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVURGX0ZTKSAmIzQzOz0gdWRmLm9cbmZzL3VkZi9NYWtlZmlsZS03LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODI1CgkJCQkJCQlvdXRwdXQ6IDEyMAoJCQkJCQkJdGhvdWdodHM6IDI5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVERiBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24gZm9yIEZ1enppbmcgRm9jdXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIFVERiBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgVURGX0ZTYC4gTXkgZm9jdXMgbm93IGlzIG9uIGlkZW50aWZ5aW5nIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoaXMgcmlnaHQuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhvc2Ugbm9uLXN0YXRpYyBzeW1ib2xzLCB0aGUgZm9jdXMgc3ltYm9scywgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gSSBoYXZlIHRoZXNlIG9uZXMgYWxyZWFkeTogYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYCwgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCwgYHVkZl93cml0ZV9pbm9kZWAsIGFuZCBgX191ZGZfaWdldGAuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBpbXBvcnRhbnQgc3ltYm9scyBvciBlbnRyeSBwb2ludHMgdGhhdCBJJiMzOTt2ZSBtaXNzZWQuICBBaCwgYHVkZl9yZWFkX2lub2RlYCBpcyBzdGF0aWMuIFRoYXQgb25lJiMzOTtzIG5vdCBnb2luZyB0byBiZSBvbiB0aGUgbGlzdC4gSSBzZWUgdGhhdCBgX191ZGZfaWdldGAgY2FsbHMgaXQsIGJ1dCB0aGUgZm9ybWVyIGlzIHRoZSBtb3JlIGltcG9ydGFudCB0YXJnZXQuIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAgaXMgZXhwb3J0ZWQsIHNvIGl0JiMzOTtzIGdvb2QsIG5vbi1zdGF0aWMuICBMaWtld2lzZSwgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYy4gYHVkZl93cml0ZV9pbm9kZWAgaXMgYWxzbyBleHBvcnRlZCwgYW5kIHRoZXJlZm9yZSBub24tc3RhdGljLgoKT2theSwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMgZm9yIEZvY3VzU3ltYm9scy4gIFRoZSBnb2FsIGlzIHRvIHBpbnBvaW50IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBhcmUgd29ydGggaGVhdnkgZnV6emluZywgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFdlIHdhbnQgdG8gYWltIGZvciB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgdGhvc2UgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMsIHdoaWNoIHRoZSBjb21waWxlciBpbmxpbmVzIGFueXdheS4gVGhhdCBtYWtlcyBzZW5zZS4KClNvLCB0YWtpbmcgYWxsIG9mIHRoYXQgaW50byBhY2NvdW50LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgc3ltYm9sczoKCiogICBgdWRmX2dldF9leHRlbmRlZGF0dHJgCiogICBgdWRmX2FkZF9leHRlbmRlZGF0dHJgCiogICBgdWRmX3dyaXRlX2lub2RlYAoqICAgYF9fdWRmX2lnZXRgCgpBbmQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZSBpczoKCiogICBgVURGX0ZTYAoKQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCYjMzk7cyBnZXQgdGhlc2UgY2hhbmdlcyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VERl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkZl9nZXRfZXh0ZW5kZWRhdHRyJiMzNDssCiAgICAmIzM0O3VkZl9hZGRfZXh0ZW5kZWRhdHRyJiMzNDssCiAgICAmIzM0O3VkZl93cml0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtfX3VkZl9pZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgVURGIGRldmljZSBzcGVjaWZpY2F0aW9uIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIGZpeGVzIGVycm9yIGhhbmRsaW5nL3Byb3BhZ2F0aW9uIGZvciBjb3JydXB0ZWQgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiBVREYgZmlsZXN5c3RlbSBpbm9kZSByZWFkL3dyaXRlIHBhdGhzLiBUaGlzIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBieSBtb3VudGluZyBhbmQgcmVhZGluZy93cml0aW5nIGNyYWZ0ZWQgVURGIGZpbGVzeXN0ZW0gaW1hZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVREZfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZGZfZ2V0X2V4dGVuZGVkYXR0ciYjMzQ7LAogICAgJiMzNDt1ZGZfYWRkX2V4dGVuZGVkYXR0ciYjMzQ7LAogICAgJiMzNDt1ZGZfd3JpdGVfaW5vZGUmIzM0OywKICAgICYjMzQ7X191ZGZfaWdldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIFVERiBkZXZpY2Ugc3BlY2lmaWNhdGlvbiBleHRlbmRlZCBhdHRyaWJ1dGVzIGFuZCBmaXhlcyBlcnJvciBoYW5kbGluZy9wcm9wYWdhdGlvbiBmb3IgY29ycnVwdGVkIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gVURGIGZpbGVzeXN0ZW0gaW5vZGUgcmVhZC93cml0ZSBwYXRocy4gVGhpcyBpcyBkaXJlY3RseSByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIHJlYWRpbmcvd3JpdGluZyBjcmFmdGVkIFVERiBmaWxlc3lzdGVtIGltYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc2FuaXR5IGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIFVERiBmaWxlc3lzdGVtIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSBmb3IgZGV2aWNlU3BlYyBhdHRyaWJ1dGVzIG9uIHNwZWNpYWwgZGV2aWNlIGlub2RlcyAoY2hhcmFjdGVyL2Jsb2NrIGRldmljZXMpLiBJdCBpbnRyb2R1Y2VzIGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoKWAgdG8gdmFsaWRhdGUgYXR0cmlidXRlIGFuZCBpbXBsZW1lbnRhdGlvbi11c2UgbGVuZ3RocyBhZ2FpbnN0IGJ1ZmZlciBib3VuZHMsIHByb3Blcmx5IGhhbmRsZXMgYEVSUl9QVFJgIGVycm9yIHJldHVybnMgZnJvbSBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cigpYCwgYW5kIGZpeGVzIGxvb3AgYm91bmRhcnkgY2hlY2tzIHdoZW4gaXRlcmF0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMuXG5cblRoZXNlIGNoYW5nZXMgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb24gY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBmYWxsIHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZjQwOGM3MzhkYTk4OTQ1OWE4YmYwODUzZGFhN2MxNDFlZmZjNzQ5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAyMDowODo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggZTQ1ZTU0NmE3MzlhOS4uOGJhYmMyZmJjZTlhMSAxMDA2NDQKLS0tIGEvZnMvdWRmL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWRmL2lub2RlLmMKQEAgLTEzMzYsNiAmIzQzOzEzMzYsMjYgQEAgaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKQogCXJldHVybiBlcnI7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFZlcmlmeSB2YWxpZGl0eSBvZiBzdHJ1Y3QgZGV2aWNlU3BlYyBvbiBkaXNrLiB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpIGhhcwomIzQzOyAqIGFscmVhZHkgdmVyaWZpZWQgdGhlIGdlbmVyaWMgaGVhZGVyIGFuZCBtYWRlIHN1cmUgYXR0cmlidXRlIGZpdHMgaW4gdGhlCiYjNDM7ICogaW5vZGUgc28gd2UganVzdCBoYXZlIHRvIG1ha2Ugc3VyZSBhdHRyaWJ1dGUgc3BhY2UgaXMgbGFyZ2UgZW5vdWdoIGZvcgomIzQzOyAqIGRldmljZVNwZWMgc3RydWN0IGFuZCByZXF1aXJlZCBpbXBVc2UgaW5mb3JtYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgdWRmX2RldmljZV9zcGVjX3ZhbGlkKHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhKQomIzQzO3sKJiM0MzsJdTMyIGF0dHJfbGVuZ3RoLCBpbXBfdXNlX2xlbmd0aDsKJiM0MzsKJiM0MzsJYXR0cl9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLSZndDthdHRyTGVuZ3RoKTsKJiM0MzsJaW1wX3VzZV9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLSZndDtpbXBVc2VMZW5ndGgpOwomIzQzOwlpZiAoYXR0cl9sZW5ndGggJmx0OyBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpIHx8CiYjNDM7CSAgICBpbXBfdXNlX2xlbmd0aCAmbHQ7IHNpemVvZihzdHJ1Y3QgcmVnaWQpIHx8CiYjNDM7CSAgICBpbXBfdXNlX2xlbmd0aCAmZ3Q7IGF0dHJfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogLyoKICAqIE1heGltdW0gbGVuZ3RoIG9mIGxpbmtlZCBsaXN0IGZvcm1lZCBieSBJQ0IgaGllcmFyY2h5LiBUaGUgY2hvc2VuIG51bWJlciBpcwogICogYXJiaXRyYXJ5IC0ganVzdCB0aGF0IHdlIGhvcGVmdWxseSBkb24mIzM5O3QgbGltaXQgYW55IHJlYWwgdXNlIG9mIHJld3JpdHRlbgpAQCAtMTY1NCwxMyAmIzQzOzE2NzQsMTkgQEAgc3RhdGljIGludCB1ZGZfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGhpZGRlbl9pbm9kZSkKIAlpZiAoU19JU0NIUihpbm9kZS0mZ3Q7aV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLSZndDtpX21vZGUpKSB7CiAJCXN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID0KIAkJCShzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7Ci0JCWlmIChkc2VhKSB7Ci0JCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLSZndDtpX21vZGUsCiYjNDM7CiYjNDM7CQlpZiAoSVNfRVJSKGRzZWEpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihkc2VhKTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCS8qIERldmljZSBpbm9kZXMgbXVzdCBoYXZlIGEgZGV2aWNlIHNwZWMgYXR0cmlidXRlICovCiYjNDM7CQlpZiAoIWRzZWEgfHwgIXVkZl9kZXZpY2Vfc3BlY192YWxpZChkc2VhKSkgewomIzQzOwkJCXJldCA9IC1FRlNDT1JSVVBURUQ7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLSZndDtpX21vZGUsCiAJCQkJTUtERVYobGUzMl90b19jcHUoZHNlYS0mZ3Q7bWFqb3JEZXZpY2VJZGVudCksCiAJCQkJICAgICAgbGUzMl90b19jcHUoZHNlYS0mZ3Q7bWlub3JEZXZpY2VJZGVudCkpKTsKLQkJCS8qIERldmVsb3BlciBJRCA/Pz8gKi8KLQkJfSBlbHNlCi0JCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gMDsKIG91dDoKQEAgLTE3NTcsNiAmIzQzOzE3ODMsNyBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLSZndDtpX3NiKTsKIAl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTsKJiM0MzsJaW50IGVycjsKIAogCWJoID0gc2JfZ2V0YmxrKGlub2RlLSZndDtpX3NiLAogCQkJdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtJmd0O2lfc2IsICZhbXA7aWluZm8tJmd0O2lfbG9jYXRpb24sIDApKTsKQEAgLTE4MTYsMTEgJiM0MzsxODQzLDIxIEBAIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJCXN0cnVjdCByZWdpZCAqZWlkOwogCQlzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSA9CiAJCQkoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpOwomIzQzOwomIzQzOwkJLyogVmFsaWRpdHkgb2YgZXh0ZW5kZWQgYXR0cnMgd2FzIGNoZWNrZWQgb24gbG9hZCAqLwomIzQzOwkJaWYgKFdBUk5fT05fT05DRShJU19FUlIoZHNlYSkpKSB7CiYjNDM7CQkJZXJyID0gUFRSX0VSUihkc2VhKTsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9CiAJCWlmICghZHNlYSkgewogCQkJZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKQogCQkJCXVkZl9hZGRfZXh0ZW5kZWRhdHRyKGlub2RlLAogCQkJCQkJICAgICBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICYjNDM7CiAJCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgcmVnaWQpLCAxMiwgMHgzKTsKJiM0MzsJCQlpZiAoSVNfRVJSKGRzZWEpKSB7CiYjNDM7CQkJCWVyciA9IFBUUl9FUlIoZHNlYSk7CiYjNDM7CQkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCQl9CiAJCQlkc2VhLSZndDthdHRyVHlwZSA9IGNwdV90b19sZTMyKDEyKTsKIAkJCWRzZWEtJmd0O2F0dHJTdWJ0eXBlID0gMTsKIAkJCWRzZWEtJmd0O2F0dHJMZW5ndGggPSBjcHVfdG9fbGUzMigKQEAgLTE5NjIsNiAmIzQzOzE5OTksMTEgQEAgaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIAlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CXVubG9ja19idWZmZXIoYmgpOwomIzQzOwlicmVsc2UoYmgpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8sCmRpZmYgLS1naXQgYS9mcy91ZGYvbWlzYy5jIGIvZnMvdWRmL21pc2MuYwppbmRleCA2OTI4ZTM3OGZiYmRjLi5hMjA4NGRmYmZiZDY2IDEwMDY0NAotLS0gYS9mcy91ZGYvbWlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9taXNjLmMKQEAgLTU4LDcgJiM0Mzs1OCw3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLAogCQkJCQljcHVfdG9fbGUxNihUQUdfSURFTlRfRUFIRCkgfHwKIAkJCSAgICBsZTMyX3RvX2NwdShlYWhkLSZndDtkZXNjVGFnLnRhZ0xvY2F0aW9uKSAhPQogCQkJCQlpaW5mby0mZ3Q7aV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0pCi0JCQkJcmV0dXJuIE5VTEw7CiYjNDM7CQkJCXJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtJmd0O2lfc2IpOwogCkBAIC0xMjIsNyAmIzQzOzEyMiw3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLAogCQlyZXR1cm4gKHN0cnVjdCBnZW5lcmljRm9ybWF0ICopJmFtcDtlYVtvZmZzZXRdOwogCX0KIAotCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKIH0KIAogc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsCkBAIC0xNDQsNyAmIzQzOzE0NCw3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCB0eXBlLAogCQkJCWNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fAogCQkgICAgbGUzMl90b19jcHUoZWFoZC0mZ3Q7ZGVzY1RhZy50YWdMb2NhdGlvbikgIT0KIAkJCQlpaW5mby0mZ3Q7aV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0pCi0JCQlyZXR1cm4gTlVMTDsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTsKIAogCQlpZiAodHlwZSAmbHQ7IDIwNDgpCiAJCQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpOwpAQCAtMTUzLDE2ICYjNDM7MTUzLDE3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCB0eXBlLAogCQllbHNlCiAJCQlvZmZzZXQgPSBsZTMyX3RvX2NwdShlYWhkLSZndDthcHBBdHRyTG9jYXRpb24pOwogCi0JCXdoaWxlIChvZmZzZXQgJiM0Mzsgc2l6ZW9mKCpnYWYpICZsdDsgaWluZm8tJmd0O2lfbGVuRUF0dHIpIHsKJiM0MzsJCXdoaWxlIChvZmZzZXQgJmx0OwomIzQzOwkJICAgICAgIGlpbmZvLSZndDtpX2xlbkVBdHRyIC0gc2l6ZW9mKHN0cnVjdCBnZW5lcmljRm9ybWF0KSkgewogCQkJdWludDMyX3QgYXR0ckxlbmd0aDsKIAogCQkJZ2FmID0gKHN0cnVjdCBnZW5lcmljRm9ybWF0ICopJmFtcDtlYVtvZmZzZXRdOwogCQkJYXR0ckxlbmd0aCA9IGxlMzJfdG9fY3B1KGdhZi0mZ3Q7YXR0ckxlbmd0aCk7CiAKIAkJCS8qIERldGVjdCB1bmRlcnNpemVkIGVsZW1lbnRzIGFuZCBidWZmZXIgb3ZlcmZsb3dzICovCi0JCQlpZiAoKGF0dHJMZW5ndGggJmx0OyBzaXplb2YoKmdhZikpIHx8Ci0JCQkgICAgKGF0dHJMZW5ndGggJmd0OyAoaWluZm8tJmd0O2lfbGVuRUF0dHIgLSBvZmZzZXQpKSkKLQkJCQlicmVhazsKJiM0MzsJCQlpZiAoYXR0ckxlbmd0aCAmbHQ7IHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkgfHwKJiM0MzsJCQkgICAgYXR0ckxlbmd0aCAmZ3Q7IGlpbmZvLSZndDtpX2xlbkVBdHRyIC0gb2Zmc2V0KQomIzQzOwkJCQlyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTsKIAogCQkJaWYgKGxlMzJfdG9fY3B1KGdhZi0mZ3Q7YXR0clR5cGUpID09IHR5cGUgJmFtcDsmYW1wOwogCQkJCQlnYWYtJmd0O2F0dHJTdWJ0eXBlID09IHN1YnR5cGUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTExCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVURGIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgVURGIGZpbGVzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvdWRmL2lub2RlLmNgIGFuZCBgZnMvdWRmL21pc2MuY2AuIEl0IGFwcGVhcnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlbmhhbmNlZCBlcnJvciBoYW5kbGluZyBhbmQgdmFsaWRhdGlvbiBhcm91bmQgZXh0ZW5kZWQgYXR0cmlidXRlcywgbGlrZWx5IHRvIGltcHJvdmUgdGhlIG92ZXJhbGwgcm9idXN0bmVzcyBhbmQgc3RhYmlsaXR5IG9mIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLgoKRmlyc3QsIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHVkZl9kZXZpY2Vfc3BlY192YWxpZCgpYC4gVGhpcyBzdWdnZXN0cyB3ZSBhcmUgdmFsaWRhdGluZyB0aGUgYHN0cnVjdCBkZXZpY2VTcGVjYCB3aXRoaW4gYHVkZl9yZWFkX2lub2RlKClgLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyBpbm9kZSByZWFkcy4gVGhpcyBpcyBzbWFydCwgd2Ugc2hvdWxkIGJlIGRvaW5nIHRoaXMgdmFsaWRhdGlvbi4KClRoZSBjaGFuZ2VzIGluIGB1ZGZfcmVhZF9pbm9kZSgpYCBub3cgaW5jb3Jwb3JhdGUgZXJyb3IgaGFuZGxpbmcgZm9yIHRoZSBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgY2FsbCwgc3BlY2lmaWNhbGx5IGNoZWNraW5nIGZvciBgSVNfRVJSKGRzZWEpYCBhbmQgYXBwbHlpbmcgb3VyIG5ldyB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBUaGlzIG1lYW5zIHRoZSBjb2RlIGlzIG5vdyBncmFjZWZ1bGx5IGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgZnJvbSBhdHRyaWJ1dGUgcmV0cmlldmFsIGFuZCBwcmV2ZW50aW5nIGNvcnJ1cHRlZCBkYXRhIGZyb20gcHJvcGFnYXRpbmcuCgpJbiBgdWRmX3dyaXRlX2lub2RlKClgLCB3ZSBzZWUgc2ltaWxhciBlcnJvciBoYW5kbGluZyBhcm91bmQgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHIoKWAsIGp1bXBpbmcgdG8gYG91dF91bmxvY2tgIGFuZCByZXR1cm5pbmcgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgZmlsZXN5c3RlbSBjb3JydXB0aW9uIGR1cmluZyBpbm9kZSB3cml0ZXMuCgpGaW5hbGx5LCBpbiBgZnMvdWRmL21pc2MuY2AsIHRoZSBjaGFuZ2VzIHRvIHRoZSByZXR1cm4gdmFsdWVzIG9mIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cigpYCBhbmQgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGZyb20gYE5VTExgIHRvIGBFUlJfUFRSKC4uLilgIGFyZSBzaWduaWZpY2FudC4gVGhpcyBpcyBhIGNydWNpYWwgaW1wcm92ZW1lbnQgaW4gZXJyb3IgcmVwb3J0aW5nLiBQcmV2aW91c2x5IGEgYE5VTExgIHJldHVybiBjb3VsZCBiZSBhbWJpZ3VvdXMuIFRoZSBpbnRyb2R1Y3Rpb24gb2Ygc3BlY2lmaWMgZXJyb3IgY29kZXMgbGlrZSBgRVJSX1BUUigtRUZTQ09SUlVQVEVEKWAgZm9yIGJvdW5kcyBjaGVja3Mgd2l0aGluIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpYCBpcyBwYXJ0aWN1bGFybHkgaGVscGZ1bCBmb3IgZGVidWdnaW5nLiBUaGUgdXNlIG9mIGVycm9yIHBvaW50ZXJzIGNsYXJpZmllcyBlcnJvciBwYXRocywgYW5kIGVuYWJsZXMgYmV0dGVyIGRlYnVnZ2luZy4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHdpZGVyIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gaWRlbnRpZnkgKmFsbCogY2FsbGVycyBvZiBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHJgIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBsb2NhbGl6ZWQsIG9yIGlmIHRoZXJlIGFyZSBrbm9jay1vbiBlZmZlY3RzIGVsc2V3aGVyZS4gVGhpcyB3aWRlciByZXZpZXcgaXMgZXNzZW50aWFsIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBhbnkgb3RoZXIgY29kZSBwYXRocyBuZWVkIHRvIGJlIGFkanVzdGVkIHRvIGhhbmRsZSB0aGUgbmV3IGBFUlJfUFRSKC4uLilgIHJldHVybiB2YWx1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkZl8oZ2V0fGFkZClfZXh0ZW5kZWRhdHRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3VkZi9pbm9kZS5jPTEyODA9aW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKVxuLS1cbmZzL3VkZi9pbm9kZS5jLTEzMzktLypcbmZzL3VkZi9pbm9kZS5jOjEzNDA6ICogVmVyaWZ5IHZhbGlkaXR5IG9mIHN0cnVjdCBkZXZpY2VTcGVjIG9uIGRpc2suIHVkZl9nZXRfZXh0ZW5kZWRhdHRyKCkgaGFzXG5mcy91ZGYvaW5vZGUuYy0xMzQxLSAqIGFscmVhZHkgdmVyaWZpZWQgdGhlIGdlbmVyaWMgaGVhZGVyIGFuZCBtYWRlIHN1cmUgYXR0cmlidXRlIGZpdHMgaW4gdGhlXG4tLVxuZnMvdWRmL2lub2RlLmM9MTM2Nj1zdGF0aWMgaW50IHVkZl9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgaGlkZGVuX2lub2RlKVxuLS1cbmZzL3VkZi9pbm9kZS5jLTE2NzUtXHRcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cbmZzL3VkZi9pbm9kZS5jOjE2NzY6XHRcdFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcbmZzL3VkZi9pbm9kZS5jLTE2NzctXG4tLVxuZnMvdWRmL2lub2RlLmM9MTc3ND1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL3VkZi9pbm9kZS5jLTE4NDQtXHRcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cbmZzL3VkZi9pbm9kZS5jOjE4NDU6XHRcdFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcbmZzL3VkZi9pbm9kZS5jLTE4NDYtXG4tLVxuZnMvdWRmL2lub2RlLmMtMTg1My1cdFx0XHRkc2VhID0gKHN0cnVjdCBkZXZpY2VTcGVjICopXG5mcy91ZGYvaW5vZGUuYzoxODU0Olx0XHRcdFx0dWRmX2FkZF9leHRlbmRlZGF0dHIoaW5vZGUsXG5mcy91ZGYvaW5vZGUuYy0xODU1LVx0XHRcdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSAmIzQzO1xuLS1cbmZzL3VkZi9taXNjLmMtMjYtXG5mcy91ZGYvbWlzYy5jOjI3OnN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLFxuZnMvdWRmL21pc2MuYy0yOC1cdFx0XHRcdFx0ICAgdWludDMyX3QgdHlwZSwgdWludDhfdCBsb2MpXG4tLVxuZnMvdWRmL21pc2MuYy0xMjctXG5mcy91ZGYvbWlzYy5jOjEyODpzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcbmZzL3VkZi9taXNjLmMtMTI5LVx0XHRcdFx0XHQgICB1aW50OF90IHN1YnR5cGUpXG4tLVxuZnMvdWRmL3VkZmRlY2wuaD0xODE9ZXh0ZXJuIHZvaWQgdWRmX3VwZGF0ZV9leHRyYV9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bW9kZV90IG1vZGUpO1xuLS1cbmZzL3VkZi91ZGZkZWNsLmgtMTgzLS8qIG1pc2MuYyAqL1xuZnMvdWRmL3VkZmRlY2wuaDoxODQ6ZXh0ZXJuIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKiwgdWludDMyX3QsXG5mcy91ZGYvdWRmZGVjbC5oLTE4NS1cdFx0XHRcdFx0XHQgIHVpbnQzMl90LCB1aW50OF90KTtcbmZzL3VkZi91ZGZkZWNsLmg6MTg2OmV4dGVybiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICosIHVpbnQzMl90LFxuZnMvdWRmL3VkZmRlY2wuaC0xODctXHRcdFx0XHRcdFx0ICB1aW50OF90KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUyMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBVREYgRXh0ZW5kZWQgQXR0cmlidXRlIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIFVERiBmaWxlc3lzdGVtIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGZzL3VkZi9taXNjLmNgLiBJIG5lZWQgdG8gcmV2aWV3IHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHJgLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIFVERiBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBvbi1kaXNrIGZvcm1hdC4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG51YW5jZXMgaW4gaG93IGF0dHJpYnV0ZXMgYXJlIHN0b3JlZCwgaW5kZXhlZCwgYW5kIHJldHJpZXZlZC4gQXJlIHRoZXJlIGFueSBwYXJ0aWN1bGFyIGVycm9yIGNvbmRpdGlvbnMgdGhhdCBhcmUgaGFuZGxlZCBkZWxpY2F0ZWx5PyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIHRoZSBhcHByb2FjaD8gUGVyaGFwcyBzb21lIGludGVyZXN0aW5nIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIHRoYXQgd2VyZSBhcHBsaWVkIGluIHRoZSBwYXN0LiBUaGlzIGRlZXAgZGl2ZSBpcyBjcnVjaWFsIGZvciBbKippbnNlcnQgc3BlY2lmaWMgcmVhc29uIG9yIHRhc2ssIGUuZy4sIHVuZGVyc3RhbmRpbmcgYSByZXBvcnRlZCBwZXJmb3JtYW5jZSBpc3N1ZSwgcHJlcGFyaW5nIGZvciBhIHBvdGVudGlhbCBzZWN1cml0eSBhdWRpdCwgb3IgZXh0ZW5kaW5nIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgZmVhdHVyZXMuKipdLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZXZpbCBpbiB0aGUgZGV0YWlscyBoZXJlLCBhbmQgdGhhdCYjMzk7cyBwcmVjaXNlbHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3VkZi9taXNjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qXG4gICAzOlx0ICogbWlzYy5jXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBQVVJQT1NFXG4gICA2Olx0ICpcdE1pc2NlbGxhbmVvdXMgcm91dGluZXMgZm9yIHRoZSBPU1RBLVVERih0bSkgZmlsZXN5c3RlbS5cbiAgIDc6XHQgKlxuICAgODpcdCAqIENPUFlSSUdIVFxuICAgOTpcdCAqICAoQykgMTk5OCBEYXZlIEJveW50b25cbiAgMTA6XHQgKiAgKEMpIDE5OTgtMjAwNCBCZW4gRmVubmVtYVxuICAxMTpcdCAqICAoQykgMTk5OS0yMDAwIFN0ZWxpYXMgQ29tcHV0aW5nIEluY1xuICAxMjpcdCAqXG4gIDEzOlx0ICogSElTVE9SWVxuICAxNDpcdCAqXG4gIDE1Olx0ICogIDA0LzE5Lzk5IGJsZiAgcGFydGlhbCBzdXBwb3J0IGZvciByZWFkaW5nL3dyaXRpbmcgc3BlY2lmaWMgRUEmIzM5O3NcbiAgMTY6XHQgKi9cbiAgMTc6XHRcbiAgMTg6XHQjaW5jbHVkZSBcJiMzNDt1ZGZkZWNsLmhcJiMzNDtcbiAgMTk6XHRcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAgMjI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMtaXR1LXQuaFx1MDAzZVxuICAyMzpcdFxuICAyNDpcdCNpbmNsdWRlIFwmIzM0O3VkZl9pLmhcJiMzNDtcbiAgMjU6XHQjaW5jbHVkZSBcJiMzNDt1ZGZfc2IuaFwmIzM0O1xuICAyNjpcdFxuICAyNzpcdHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLFxuICAyODpcdFx0XHRcdFx0XHQgICB1aW50MzJfdCB0eXBlLCB1aW50OF90IGxvYylcbiAgMjk6XHR7XG4gIDMwOlx0XHR1aW50OF90ICplYSA9IE5VTEwsICphZCA9IE5VTEw7XG4gIDMxOlx0XHRpbnQgb2Zmc2V0O1xuICAzMjpcdFx0dWludDE2X3QgY3JjbGVuO1xuICAzMzpcdFx0c3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTtcbiAgMzQ6XHRcbiAgMzU6XHRcdGVhID0gaWluZm8tXHUwMDNlaV9kYXRhO1xuICAzNjpcdFx0aWYgKGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIpIHtcbiAgMzc6XHRcdFx0YWQgPSBpaW5mby1cdTAwM2VpX2RhdGEgJiM0MzsgaWluZm8tXHUwMDNlaV9sZW5FQXR0cjtcbiAgMzg6XHRcdH0gZWxzZSB7XG4gIDM5Olx0XHRcdGFkID0gZWE7XG4gIDQwOlx0XHRcdHNpemUgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYyk7XG4gIDQxOlx0XHR9XG4gIDQyOlx0XG4gIDQzOlx0XHRvZmZzZXQgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIC0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSAtXG4gIDQ0Olx0XHRcdGlpbmZvLVx1MDAzZWlfbGVuQWxsb2M7XG4gIDQ1Olx0XG4gIDQ2Olx0XHQvKiBUT0RPIC0gQ2hlY2sgZm9yIEZyZWVFQVNwYWNlICovXG4gIDQ3Olx0XG4gIDQ4Olx0XHRpZiAobG9jIFx1MDAyNiAweDAxIFx1MDAyNlx1MDAyNiBvZmZzZXQgXHUwMDNlPSBzaXplKSB7XG4gIDQ5Olx0XHRcdHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjICplYWhkO1xuICA1MDpcdFx0XHRlYWhkID0gKHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjICopZWE7XG4gIDUxOlx0XG4gIDUyOlx0XHRcdGlmIChpaW5mby1cdTAwM2VpX2xlbkFsbG9jKVxuICA1MzpcdFx0XHRcdG1lbW1vdmUoXHUwMDI2YWRbc2l6ZV0sIGFkLCBpaW5mby1cdTAwM2VpX2xlbkFsbG9jKTtcbiAgNTQ6XHRcbiAgNTU6XHRcdFx0aWYgKGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIpIHtcbiAgNTY6XHRcdFx0XHQvKiBjaGVjayBjaGVja3N1bS9jcmMgKi9cbiAgNTc6XHRcdFx0XHRpZiAoZWFoZC1cdTAwM2VkZXNjVGFnLnRhZ0lkZW50ICE9XG4gIDU4Olx0XHRcdFx0XHRcdGNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fFxuICA1OTpcdFx0XHRcdCAgICBsZTMyX3RvX2NwdShlYWhkLVx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XG4gIDYwOlx0XHRcdFx0XHRcdGlpbmZvLVx1MDAzZWlfbG9jYXRpb24ubG9naWNhbEJsb2NrTnVtKVxuICA2MTpcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVGU0NPUlJVUFRFRCk7XG4gIDYyOlx0XHRcdH0gZWxzZSB7XG4gIDYzOlx0XHRcdFx0c3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gIDY0Olx0XG4gIDY1Olx0XHRcdFx0c2l6ZSAtPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xuICA2NjpcdFx0XHRcdGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIgJiM0Mzs9XG4gIDY3Olx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xuICA2ODpcdFx0XHRcdGVhaGQtXHUwMDNlZGVzY1RhZy50YWdJZGVudCA9IGNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKTtcbiAgNjk6XHRcdFx0XHRpZiAoc2JpLVx1MDAzZXNfdWRmcmV2IFx1MDAzZT0gMHgwMjAwKVxuICA3MDpcdFx0XHRcdFx0ZWFoZC1cdTAwM2VkZXNjVGFnLmRlc2NWZXJzaW9uID0gY3B1X3RvX2xlMTYoMyk7XG4gIDcxOlx0XHRcdFx0ZWxzZVxuICA3MjpcdFx0XHRcdFx0ZWFoZC1cdTAwM2VkZXNjVGFnLmRlc2NWZXJzaW9uID0gY3B1X3RvX2xlMTYoMik7XG4gIDczOlx0XHRcdFx0ZWFoZC1cdTAwM2VkZXNjVGFnLnRhZ1NlcmlhbE51bSA9XG4gIDc0Olx0XHRcdFx0XHRcdGNwdV90b19sZTE2KHNiaS1cdTAwM2VzX3NlcmlhbF9udW1iZXIpO1xuICA3NTpcdFx0XHRcdGVhaGQtXHUwMDNlZGVzY1RhZy50YWdMb2NhdGlvbiA9IGNwdV90b19sZTMyKFxuICA3NjpcdFx0XHRcdFx0XHRpaW5mby1cdTAwM2VpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSk7XG4gIDc3Olx0XHRcdFx0ZWFoZC1cdTAwM2VpbXBBdHRyTG9jYXRpb24gPSBjcHVfdG9fbGUzMigweEZGRkZGRkZGKTtcbiAgNzg6XHRcdFx0XHRlYWhkLVx1MDAzZWFwcEF0dHJMb2NhdGlvbiA9IGNwdV90b19sZTMyKDB4RkZGRkZGRkYpO1xuICA3OTpcdFx0XHR9XG4gIDgwOlx0XG4gIDgxOlx0XHRcdG9mZnNldCA9IGlpbmZvLVx1MDAzZWlfbGVuRUF0dHI7XG4gIDgyOlx0XHRcdGlmICh0eXBlIFx1MDAzYyAyMDQ4KSB7XG4gIDgzOlx0XHRcdFx0aWYgKGxlMzJfdG9fY3B1KGVhaGQtXHUwMDNlYXBwQXR0ckxvY2F0aW9uKSBcdTAwM2NcbiAgODQ6XHRcdFx0XHRcdFx0aWluZm8tXHUwMDNlaV9sZW5FQXR0cikge1xuICA4NTpcdFx0XHRcdFx0dWludDMyX3QgYWFsID1cbiAgODY6XHRcdFx0XHRcdFx0bGUzMl90b19jcHUoZWFoZC1cdTAwM2VhcHBBdHRyTG9jYXRpb24pO1xuICA4NzpcdFx0XHRcdFx0bWVtbW92ZShcdTAwMjZlYVtvZmZzZXQgLSBhYWwgJiM0Mzsgc2l6ZV0sXG4gIDg4Olx0XHRcdFx0XHRcdFx1MDAyNmVhW2FhbF0sIG9mZnNldCAtIGFhbCk7XG4gIDg5Olx0XHRcdFx0XHRvZmZzZXQgLT0gYWFsO1xuICA5MDpcdFx0XHRcdFx0ZWFoZC1cdTAwM2VhcHBBdHRyTG9jYXRpb24gPVxuICA5MTpcdFx0XHRcdFx0XHRcdGNwdV90b19sZTMyKGFhbCAmIzQzOyBzaXplKTtcbiAgOTI6XHRcdFx0XHR9XG4gIDkzOlx0XHRcdFx0aWYgKGxlMzJfdG9fY3B1KGVhaGQtXHUwMDNlaW1wQXR0ckxvY2F0aW9uKSBcdTAwM2NcbiAgOTQ6XHRcdFx0XHRcdFx0aWluZm8tXHUwMDNlaV9sZW5FQXR0cikge1xuICA5NTpcdFx0XHRcdFx0dWludDMyX3QgaWFsID1cbiAgOTY6XHRcdFx0XHRcdFx0bGUzMl90b19jcHUoZWFoZC1cdTAwM2VpbXBBdHRyTG9jYXRpb24pO1xuICA5NzpcdFx0XHRcdFx0bWVtbW92ZShcdTAwMjZlYVtvZmZzZXQgLSBpYWwgJiM0Mzsgc2l6ZV0sXG4gIDk4Olx0XHRcdFx0XHRcdFx1MDAyNmVhW2lhbF0sIG9mZnNldCAtIGlhbCk7XG4gIDk5Olx0XHRcdFx0XHRvZmZzZXQgLT0gaWFsO1xuIDEwMDpcdFx0XHRcdFx0ZWFoZC1cdTAwM2VpbXBBdHRyTG9jYXRpb24gPVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzgzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBzcGVjaWZpY2FsbHkgb24gbGluZXMgMTAxIHRvIDE4MCBvZiBgZnMvdWRmL21pc2MuY2AuIEkga25vdyB0aGlzIGlzIGEgc3BlY2lmaWMgY2h1bmssIGFuZCBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgYXNwZWN0IG9mIFVERiBmaWxlc3lzdGVtIG1pc2MgZnVuY3Rpb25zIOKAkyBlaXRoZXIgaW5pdGlhbGl6YXRpb24sIGVycm9yIGhhbmRsaW5nLCBvciBwZXJoYXBzIHNvbWUgbG93LWxldmVsIEkvTyBvcGVyYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgc29tZSBpbnRlcm5hbCBmdW5jdGlvbiBjYWxscywgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBhbmQgbGlrZWx5IHNvbWUgY29uZGl0aW9uYWwgbG9naWMuIEtub3dpbmcgVURGLCBJIHN1c3BlY3QgdGhlcmUmIzM5O2xsIGJlIGEgZGVjZW50IGFtb3VudCBvZiBiaXQtbWFza2luZyBhbmQgc3RydWN0dXJlIGFjY2VzcyBpbnZvbHZlZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHBhcnRpY3VsYXIgc2VnbWVudCB0b3VjaGVzIHVwb24gbWV0YWRhdGEgcmVhZHMsIGJsb2NrIGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgZmlsZXN5c3RlbSBqb3VybmFsaW5nIHJlbGF0ZWQgdG8gVURGLiBSZWFkeSB0byBhbmFseXplLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3VkZi9taXNjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMTpcdFx0XHRcdFx0XHRcdGNwdV90b19sZTMyKGlhbCAmIzQzOyBzaXplKTtcbiAxMDI6XHRcdFx0XHR9XG4gMTAzOlx0XHRcdH0gZWxzZSBpZiAodHlwZSBcdTAwM2MgNjU1MzYpIHtcbiAxMDQ6XHRcdFx0XHRpZiAobGUzMl90b19jcHUoZWFoZC1cdTAwM2VhcHBBdHRyTG9jYXRpb24pIFx1MDAzY1xuIDEwNTpcdFx0XHRcdFx0XHRpaW5mby1cdTAwM2VpX2xlbkVBdHRyKSB7XG4gMTA2Olx0XHRcdFx0XHR1aW50MzJfdCBhYWwgPVxuIDEwNzpcdFx0XHRcdFx0XHRsZTMyX3RvX2NwdShlYWhkLVx1MDAzZWFwcEF0dHJMb2NhdGlvbik7XG4gMTA4Olx0XHRcdFx0XHRtZW1tb3ZlKFx1MDAyNmVhW29mZnNldCAtIGFhbCAmIzQzOyBzaXplXSxcbiAxMDk6XHRcdFx0XHRcdFx0XHUwMDI2ZWFbYWFsXSwgb2Zmc2V0IC0gYWFsKTtcbiAxMTA6XHRcdFx0XHRcdG9mZnNldCAtPSBhYWw7XG4gMTExOlx0XHRcdFx0XHRlYWhkLVx1MDAzZWFwcEF0dHJMb2NhdGlvbiA9XG4gMTEyOlx0XHRcdFx0XHRcdFx0Y3B1X3RvX2xlMzIoYWFsICYjNDM7IHNpemUpO1xuIDExMzpcdFx0XHRcdH1cbiAxMTQ6XHRcdFx0fVxuIDExNTpcdFx0XHQvKiByZXdyaXRlIENSQyAmIzQzOyBjaGVja3N1bSBvZiBlYWhkICovXG4gMTE2Olx0XHRcdGNyY2xlbiA9IHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYykgLSBzaXplb2Yoc3RydWN0IHRhZyk7XG4gMTE3Olx0XHRcdGVhaGQtXHUwMDNlZGVzY1RhZy5kZXNjQ1JDTGVuZ3RoID0gY3B1X3RvX2xlMTYoY3JjbGVuKTtcbiAxMTg6XHRcdFx0ZWFoZC1cdTAwM2VkZXNjVGFnLmRlc2NDUkMgPSBjcHVfdG9fbGUxNihjcmNfaXR1X3QoMCwgKGNoYXIgKillYWhkICYjNDM7XG4gMTE5Olx0XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB0YWcpLCBjcmNsZW4pKTtcbiAxMjA6XHRcdFx0ZWFoZC1cdTAwM2VkZXNjVGFnLnRhZ0NoZWNrc3VtID0gdWRmX3RhZ19jaGVja3N1bShcdTAwMjZlYWhkLVx1MDAzZWRlc2NUYWcpO1xuIDEyMTpcdFx0XHRpaW5mby1cdTAwM2VpX2xlbkVBdHRyICYjNDM7PSBzaXplO1xuIDEyMjpcdFx0XHRyZXR1cm4gKHN0cnVjdCBnZW5lcmljRm9ybWF0ICopXHUwMDI2ZWFbb2Zmc2V0XTtcbiAxMjM6XHRcdH1cbiAxMjQ6XHRcbiAxMjU6XHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIDEyNjpcdH1cbiAxMjc6XHRcbiAxMjg6XHRzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcbiAxMjk6XHRcdFx0XHRcdFx0ICAgdWludDhfdCBzdWJ0eXBlKVxuIDEzMDpcdHtcbiAxMzE6XHRcdHN0cnVjdCBnZW5lcmljRm9ybWF0ICpnYWY7XG4gMTMyOlx0XHR1aW50OF90ICplYSA9IE5VTEw7XG4gMTMzOlx0XHR1aW50MzJfdCBvZmZzZXQ7XG4gMTM0Olx0XHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xuIDEzNTpcdFxuIDEzNjpcdFx0ZWEgPSBpaW5mby1cdTAwM2VpX2RhdGE7XG4gMTM3Olx0XG4gMTM4Olx0XHRpZiAoaWluZm8tXHUwMDNlaV9sZW5FQXR0cikge1xuIDEzOTpcdFx0XHRzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYyAqZWFoZDtcbiAxNDA6XHRcdFx0ZWFoZCA9IChzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYyAqKWVhO1xuIDE0MTpcdFxuIDE0MjpcdFx0XHQvKiBjaGVjayBjaGVja3N1bS9jcmMgKi9cbiAxNDM6XHRcdFx0aWYgKGVhaGQtXHUwMDNlZGVzY1RhZy50YWdJZGVudCAhPVxuIDE0NDpcdFx0XHRcdFx0Y3B1X3RvX2xlMTYoVEFHX0lERU5UX0VBSEQpIHx8XG4gMTQ1Olx0XHRcdCAgICBsZTMyX3RvX2NwdShlYWhkLVx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XG4gMTQ2Olx0XHRcdFx0XHRpaW5mby1cdTAwM2VpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSlcbiAxNDc6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbiAxNDg6XHRcbiAxNDk6XHRcdFx0aWYgKHR5cGUgXHUwMDNjIDIwNDgpXG4gMTUwOlx0XHRcdFx0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjKTtcbiAxNTE6XHRcdFx0ZWxzZSBpZiAodHlwZSBcdTAwM2MgNjU1MzYpXG4gMTUyOlx0XHRcdFx0b2Zmc2V0ID0gbGUzMl90b19jcHUoZWFoZC1cdTAwM2VpbXBBdHRyTG9jYXRpb24pO1xuIDE1MzpcdFx0XHRlbHNlXG4gMTU0Olx0XHRcdFx0b2Zmc2V0ID0gbGUzMl90b19jcHUoZWFoZC1cdTAwM2VhcHBBdHRyTG9jYXRpb24pO1xuIDE1NTpcdFxuIDE1NjpcdFx0XHR3aGlsZSAob2Zmc2V0IFx1MDAzY1xuIDE1NzpcdFx0XHQgICAgICAgaWluZm8tXHUwMDNlaV9sZW5FQXR0ciAtIHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkpIHtcbiAxNTg6XHRcdFx0XHR1aW50MzJfdCBhdHRyTGVuZ3RoO1xuIDE1OTpcdFxuIDE2MDpcdFx0XHRcdGdhZiA9IChzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqKVx1MDAyNmVhW29mZnNldF07XG4gMTYxOlx0XHRcdFx0YXR0ckxlbmd0aCA9IGxlMzJfdG9fY3B1KGdhZi1cdTAwM2VhdHRyTGVuZ3RoKTtcbiAxNjI6XHRcbiAxNjM6XHRcdFx0XHQvKiBEZXRlY3QgdW5kZXJzaXplZCBlbGVtZW50cyBhbmQgYnVmZmVyIG92ZXJmbG93cyAqL1xuIDE2NDpcdFx0XHRcdGlmIChhdHRyTGVuZ3RoIFx1MDAzYyBzaXplb2Yoc3RydWN0IGdlbmVyaWNGb3JtYXQpIHx8XG4gMTY1Olx0XHRcdFx0ICAgIGF0dHJMZW5ndGggXHUwMDNlIGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIgLSBvZmZzZXQpXG4gMTY2Olx0XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbiAxNjc6XHRcbiAxNjg6XHRcdFx0XHRpZiAobGUzMl90b19jcHUoZ2FmLVx1MDAzZWF0dHJUeXBlKSA9PSB0eXBlIFx1MDAyNlx1MDAyNlxuIDE2OTpcdFx0XHRcdFx0XHRnYWYtXHUwMDNlYXR0clN1YnR5cGUgPT0gc3VidHlwZSlcbiAxNzA6XHRcdFx0XHRcdHJldHVybiBnYWY7XG4gMTcxOlx0XHRcdFx0ZWxzZVxuIDE3MjpcdFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBhdHRyTGVuZ3RoO1xuIDE3MzpcdFx0XHR9XG4gMTc0Olx0XHR9XG4gMTc1Olx0XG4gMTc2Olx0XHRyZXR1cm4gTlVMTDtcbiAxNzc6XHR9XG4gMTc4Olx0XG4gMTc5Olx0LypcbiAxODA6XHQgKiB1ZGZfcmVhZF90YWdnZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHBsYXlpbmcgdGhlIHJvbGU6CgoqKkRlZXAgRGl2ZSBpbnRvIFVERiBJbm9kZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGdyYXNwIG9uIGhvdyB0aGUgVURGIGZpbGVzeXN0ZW0gaGFuZGxlcyBpdHMgaW5vZGVzLCBzcGVjaWZpY2FsbHkgdGhlIGB1ZGZfcmVhZF9pbm9kZWAgYW5kIGB1ZGZfd3JpdGVfaW5vZGVgIGZ1bmN0aW9ucy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoZSBjcnVjaWFsIGNvbnRleHQgaXMgdXN1YWxseSBhIGZldyBsaW5lcyBhcm91bmQgdGhlIHByaW1hcnkgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGZzL3VkZi9pbm9kZS5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoZSBsaW5lcyBiZXR3ZWVuIDE2NTAgYW5kIDE4ODAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBkZXRhaWxlZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgVURGIG1ldGFkYXRhIHN0cnVjdHVyZXMuIEkgZXhwZWN0IHRvIHNlZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHJlYWQsIHdyaXR0ZW4sIGFuZCBwb3RlbnRpYWxseSBjYWNoZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgZmxvdyB3aXRoaW4gdGhhdCByYW5nZSBpcyBrZXkuIEtub3dpbmcgdGhlIGxvZ2ljIGluIHRoYXQgc21hbGwgc2NvcGUgc2hvdWxkIHF1aWNrbHkgYWxsb3cgZm9yIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBicm9hZGVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdWRmL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NjA6XHRcdGNhc2UgSUNCVEFHX0ZJTEVfVFlQRV9NQUlOOlxuMTY2MTpcdFx0XHR1ZGZfZGVidWcoXCYjMzQ7TUVUQURBVEEgRklMRS0tLS0tXFxuXCYjMzQ7KTtcbjE2NjI6XHRcdFx0YnJlYWs7XG4xNjYzOlx0XHRjYXNlIElDQlRBR19GSUxFX1RZUEVfTUlSUk9SOlxuMTY2NDpcdFx0XHR1ZGZfZGVidWcoXCYjMzQ7TUVUQURBVEEgTUlSUk9SIEZJTEUtLS0tLVxcblwmIzM0Oyk7XG4xNjY1Olx0XHRcdGJyZWFrO1xuMTY2NjpcdFx0Y2FzZSBJQ0JUQUdfRklMRV9UWVBFX0JJVE1BUDpcbjE2Njc6XHRcdFx0dWRmX2RlYnVnKFwmIzM0O01FVEFEQVRBIEJJVE1BUCBGSUxFLS0tLS1cXG5cJiMzNDspO1xuMTY2ODpcdFx0XHRicmVhaztcbjE2Njk6XHRcdGRlZmF1bHQ6XG4xNjcwOlx0XHRcdHVkZl9lcnIoaW5vZGUtXHUwMDNlaV9zYiwgXCYjMzQ7KGlubyAlbGx1KSBmYWlsZWQgdW5rbm93biBmaWxlIHR5cGU9JXVcXG5cJiMzNDssXG4xNjcxOlx0XHRcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIGZlLVx1MDAzZWljYlRhZy5maWxlVHlwZSk7XG4xNjcyOlx0XHRcdGdvdG8gb3V0O1xuMTY3MzpcdFx0fVxuMTY3NDpcdFx0aWYgKFNfSVNDSFIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbjE2NzU6XHRcdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuMTY3NjpcdFx0XHRcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XG4xNjc3Olx0XG4xNjc4Olx0XHRcdGlmIChJU19FUlIoZHNlYSkpIHtcbjE2Nzk6XHRcdFx0XHRyZXQgPSBQVFJfRVJSKGRzZWEpO1xuMTY4MDpcdFx0XHRcdGdvdG8gb3V0O1xuMTY4MTpcdFx0XHR9XG4xNjgyOlx0XHRcdC8qIERldmljZSBpbm9kZXMgbXVzdCBoYXZlIGEgZGV2aWNlIHNwZWMgYXR0cmlidXRlICovXG4xNjgzOlx0XHRcdGlmICghZHNlYSB8fCAhdWRmX2RldmljZV9zcGVjX3ZhbGlkKGRzZWEpKSB7XG4xNjg0Olx0XHRcdFx0cmV0ID0gLUVGU0NPUlJVUFRFRDtcbjE2ODU6XHRcdFx0XHRnb3RvIG91dDtcbjE2ODY6XHRcdFx0fVxuMTY4NzpcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfbW9kZSxcbjE2ODg6XHRcdFx0XHRcdE1LREVWKGxlMzJfdG9fY3B1KGRzZWEtXHUwMDNlbWFqb3JEZXZpY2VJZGVudCksXG4xNjg5Olx0XHRcdFx0XHQgICAgICBsZTMyX3RvX2NwdShkc2VhLVx1MDAzZW1pbm9yRGV2aWNlSWRlbnQpKSk7XG4xNjkwOlx0XHR9XG4xNjkxOlx0XHRyZXQgPSAwO1xuMTY5MjpcdG91dDpcbjE2OTM6XHRcdGJyZWxzZShiaCk7XG4xNjk0Olx0XHRyZXR1cm4gcmV0O1xuMTY5NTpcdH1cbjE2OTY6XHRcbjE2OTc6XHRzdGF0aWMgaW50IHVkZl9hbGxvY19pX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHNpemUpXG4xNjk4Olx0e1xuMTY5OTpcdFx0c3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTtcbjE3MDA6XHRcdGlpbmZvLVx1MDAzZWlfZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4xNzAxOlx0XHRpZiAoIWlpbmZvLVx1MDAzZWlfZGF0YSlcbjE3MDI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNzAzOlx0XHRyZXR1cm4gMDtcbjE3MDQ6XHR9XG4xNzA1Olx0XG4xNzA2Olx0c3RhdGljIHVtb2RlX3QgdWRmX2NvbnZlcnRfcGVybWlzc2lvbnMoc3RydWN0IGZpbGVFbnRyeSAqZmUpXG4xNzA3Olx0e1xuMTcwODpcdFx0dW1vZGVfdCBtb2RlO1xuMTcwOTpcdFx0dWludDMyX3QgcGVybWlzc2lvbnM7XG4xNzEwOlx0XHR1aW50MzJfdCBmbGFncztcbjE3MTE6XHRcbjE3MTI6XHRcdHBlcm1pc3Npb25zID0gbGUzMl90b19jcHUoZmUtXHUwMDNlcGVybWlzc2lvbnMpO1xuMTcxMzpcdFx0ZmxhZ3MgPSBsZTE2X3RvX2NwdShmZS1cdTAwM2VpY2JUYWcuZmxhZ3MpO1xuMTcxNDpcdFxuMTcxNTpcdFx0bW9kZSA9XHQoKHBlcm1pc3Npb25zKSBcdTAwMjYgMDAwNykgfFxuMTcxNjpcdFx0XHQoKHBlcm1pc3Npb25zIFx1MDAzZVx1MDAzZSAyKSBcdTAwMjYgMDA3MCkgfFxuMTcxNzpcdFx0XHQoKHBlcm1pc3Npb25zIFx1MDAzZVx1MDAzZSA0KSBcdTAwMjYgMDcwMCkgfFxuMTcxODpcdFx0XHQoKGZsYWdzIFx1MDAyNiBJQ0JUQUdfRkxBR19TRVRVSUQpID8gU19JU1VJRCA6IDApIHxcbjE3MTk6XHRcdFx0KChmbGFncyBcdTAwMjYgSUNCVEFHX0ZMQUdfU0VUR0lEKSA/IFNfSVNHSUQgOiAwKSB8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIGB1ZGZfd3JpdGVfaW5vZGVgIEZ1bmN0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IFVERiBmaWxlIHN5c3RlbSBpbnRlcm5hbHMgYWdhaW4uIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0LCBJIHRoaW5rIHdlIHNob3VsZCBmb2N1cyBvbiB0aGUgYHVkZl93cml0ZV9pbm9kZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIGNvZGUgYmV0d2VlbiBsaW5lcyAxODIwIGFuZCAxODgwLiBUaGF0IHNlY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGNvcmUgbG9naWMgb2Ygd3JpdGluZyBpbm9kZSBkYXRhIHdpdGhpbiB0aGUgVURGIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIFVuZGVyc3RhbmRpbmcgdGhhdCBzZWN0aW9uIHdpbGwgaG9wZWZ1bGx5IGdpdmUgbWUgYSBtdWNoIGJldHRlciBwZXJzcGVjdGl2ZSBvbiBob3cgdGhlIGZpbGVzeXN0ZW0gYWN0dWFsbHkgZnVuY3Rpb25zLCBub3QganVzdCB0aGVvcmV0aWNhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3VkZi9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODMwOlx0XG4xODMxOlx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rIFx1MDAzZSAwKVxuMTgzMjpcdFx0XHRmZS1cdTAwM2VmaWxlTGlua0NvdW50ID0gY3B1X3RvX2xlMTYoaW5vZGUtXHUwMDNlaV9ubGluayAtIDEpO1xuMTgzMzpcdFx0ZWxzZSB7XG4xODM0Olx0XHRcdGlmIChpaW5mby1cdTAwM2VpX2hpZGRlbilcbjE4MzU6XHRcdFx0XHRmZS1cdTAwM2VmaWxlTGlua0NvdW50ID0gY3B1X3RvX2xlMTYoMCk7XG4xODM2Olx0XHRcdGVsc2VcbjE4Mzc6XHRcdFx0XHRmZS1cdTAwM2VmaWxlTGlua0NvdW50ID0gY3B1X3RvX2xlMTYoaW5vZGUtXHUwMDNlaV9ubGluayk7XG4xODM4Olx0XHR9XG4xODM5Olx0XG4xODQwOlx0XHRmZS1cdTAwM2VpbmZvcm1hdGlvbkxlbmd0aCA9IGNwdV90b19sZTY0KGlub2RlLVx1MDAzZWlfc2l6ZSk7XG4xODQxOlx0XG4xODQyOlx0XHRpZiAoU19JU0NIUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuMTg0MzpcdFx0XHRzdHJ1Y3QgcmVnaWQgKmVpZDtcbjE4NDQ6XHRcdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuMTg0NTpcdFx0XHRcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XG4xODQ2Olx0XG4xODQ3Olx0XHRcdC8qIFZhbGlkaXR5IG9mIGV4dGVuZGVkIGF0dHJzIHdhcyBjaGVja2VkIG9uIGxvYWQgKi9cbjE4NDg6XHRcdFx0aWYgKFdBUk5fT05fT05DRShJU19FUlIoZHNlYSkpKSB7XG4xODQ5Olx0XHRcdFx0ZXJyID0gUFRSX0VSUihkc2VhKTtcbjE4NTA6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xODUxOlx0XHRcdH1cbjE4NTI6XHRcdFx0aWYgKCFkc2VhKSB7XG4xODUzOlx0XHRcdFx0ZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKVxuMTg1NDpcdFx0XHRcdFx0dWRmX2FkZF9leHRlbmRlZGF0dHIoaW5vZGUsXG4xODU1Olx0XHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICYjNDM7XG4xODU2Olx0XHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IHJlZ2lkKSwgMTIsIDB4Myk7XG4xODU3Olx0XHRcdFx0aWYgKElTX0VSUihkc2VhKSkge1xuMTg1ODpcdFx0XHRcdFx0ZXJyID0gUFRSX0VSUihkc2VhKTtcbjE4NTk6XHRcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjE4NjA6XHRcdFx0XHR9XG4xODYxOlx0XHRcdFx0ZHNlYS1cdTAwM2VhdHRyVHlwZSA9IGNwdV90b19sZTMyKDEyKTtcbjE4NjI6XHRcdFx0XHRkc2VhLVx1MDAzZWF0dHJTdWJ0eXBlID0gMTtcbjE4NjM6XHRcdFx0XHRkc2VhLVx1MDAzZWF0dHJMZW5ndGggPSBjcHVfdG9fbGUzMihcbjE4NjQ6XHRcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICYjNDM7XG4xODY1Olx0XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCByZWdpZCkpO1xuMTg2NjpcdFx0XHRcdGRzZWEtXHUwMDNlaW1wVXNlTGVuZ3RoID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCByZWdpZCkpO1xuMTg2NzpcdFx0XHR9XG4xODY4Olx0XHRcdGVpZCA9IChzdHJ1Y3QgcmVnaWQgKilkc2VhLVx1MDAzZWltcFVzZTtcbjE4Njk6XHRcdFx0bWVtc2V0KGVpZCwgMCwgc2l6ZW9mKCplaWQpKTtcbjE4NzA6XHRcdFx0c3RyY3B5KGVpZC1cdTAwM2VpZGVudCwgVURGX0lEX0RFVkVMT1BFUik7XG4xODcxOlx0XHRcdGVpZC1cdTAwM2VpZGVudFN1ZmZpeFswXSA9IFVERl9PU19DTEFTU19VTklYO1xuMTg3MjpcdFx0XHRlaWQtXHUwMDNlaWRlbnRTdWZmaXhbMV0gPSBVREZfT1NfSURfTElOVVg7XG4xODczOlx0XHRcdGRzZWEtXHUwMDNlbWFqb3JEZXZpY2VJZGVudCA9IGNwdV90b19sZTMyKGltYWpvcihpbm9kZSkpO1xuMTg3NDpcdFx0XHRkc2VhLVx1MDAzZW1pbm9yRGV2aWNlSWRlbnQgPSBjcHVfdG9fbGUzMihpbWlub3IoaW5vZGUpKTtcbjE4NzU6XHRcdH1cbjE4NzY6XHRcbjE4Nzc6XHRcdGlmIChpaW5mby1cdTAwM2VpX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCKVxuMTg3ODpcdFx0XHRsYl9yZWNvcmRlZCA9IDA7IC8qIE5vIGV4dGVudHMgPVx1MDAzZSBubyBibG9ja3MhICovXG4xODc5Olx0XHRlbHNlXG4xODgwOlx0XHRcdGxiX3JlY29yZGVkID1cbjE4ODE6XHRcdFx0XHQoaW5vZGUtXHUwMDNlaV9ibG9ja3MgJiM0MzsgKDEgXHUwMDNjXHUwMDNjIChibG9ja3NpemVfYml0cyAtIDkpKSAtIDEpIFx1MDAzZVx1MDAzZVxuMTg4MjpcdFx0XHRcdChibG9ja3NpemVfYml0cyAtIDkpO1xuMTg4MzpcdFxuMTg4NDpcdFx0aWYgKGlpbmZvLVx1MDAzZWlfZWZlID09IDApIHtcbjE4ODU6XHRcdFx0bWVtY3B5KGJoLVx1MDAzZWJfZGF0YSAmIzQzOyBzaXplb2Yoc3RydWN0IGZpbGVFbnRyeSksXG4xODg2Olx0XHRcdCAgICAgICBpaW5mby1cdTAwM2VpX2RhdGEsXG4xODg3Olx0XHRcdCAgICAgICBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIC0gc2l6ZW9mKHN0cnVjdCBmaWxlRW50cnkpKTtcbjE4ODg6XHRcdFx0ZmUtXHUwMDNlbG9naWNhbEJsb2Nrc1JlY29yZGVkID0gY3B1X3RvX2xlNjQobGJfcmVjb3JkZWQpO1xuMTg4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM4NgoJCQkJCQkJb3V0cHV0OiAxOTkKCQkJCQkJCXRob3VnaHRzOiA3MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFVERiBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZ2h0ZW5pbmcgdXAgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGluZyBpbiB0aGUgVURGIGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSB0byBwcmV2ZW50IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgcmVhZHMuIEkgc2VlIHNldmVyYWwga2V5IGNoYW5nZXM6IGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoKWAgaXMgZ2V0dGluZyBtb3JlIHJvYnVzdCB3aXRoIGl0cyB2YWxpZGF0aW9uLCBjaGVja2luZyBsZW5ndGhzIGFuZCBtYWtpbmcgc3VyZSBgYXR0cl9sZW5ndGhgLCBgaW1wX3VzZV9sZW5ndGhgLCBhbmQgdGhlIHNpemVzIG9mIHRoZSBzdHJ1Y3R1cmVzIHRoZXkgcmVsYXRlIHRvIGFyZSBhbGwgc2FuZS4gIGB1ZGZfcmVhZF9pbm9kZSgpYCBhbmQgYHVkZl93cml0ZV9pbm9kZSgpYCBhcmUgbm93IGV4cGxpY2l0bHkgaGFuZGxpbmcgdGhlIGVycm9yIHJldHVybnMgZnJvbSBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cigpYCwgd2hpY2ggaXMgYSBnb29kIGRlZmVuc2l2ZSBtZWFzdXJlLiAgUmV0dXJuaW5nIGBFUlJfUFRSKC1FRlNDT1JSVVBURUQpYCBpbnN0ZWFkIG9mIGBOVUxMYCBvciBzaWxlbnRseSBicmVha2luZyBvdXQgaXMgYWxzbyBhIGdyZWF0IHN0ZXAgdG93YXJkcyBwcm9wZXIgZXJyb3IgcmVwb3J0aW5nLiAgQW5kIHRoYXQgYm91bmRzIGNoZWNrIGZpeCBpbiBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgaXMgY3J1Y2lhbCAtIHRoYXQgcG90ZW50aWFsIG92ZXJmbG93IHdhcyBhIHRpY2tpbmcgdGltZSBib21iLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IEtNU0FOLiAgV2UgbmVlZCB0byBldmFsdWF0ZSBpZiB3ZSBuZWVkIHRvIHJ1biBhIEtNU0FOIHNlc3Npb24gd2l0aCB0aGlzLiAgS0FTQU4gaXMgZ29pbmcgdG8gY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgc3R1ZmYgdGhhdCB3ZSBhcmUgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgaW4gdGhlIHBhdGNoLCB0aGVzZSBhcmUgZXNzZW50aWFsbHkgZmlsZXN5c3RlbSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcyB0aGF0IGFyZSBiZWluZyBwcm90ZWN0ZWQgYWdhaW5zdC4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBkZWFscyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IGludHJvZHVjZXMgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBObyBjb3BpZXMgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBicmFuY2hpbmcgb3IgY29udHJvbCBmbG93LiBgdWRmX3dyaXRlX2lub2RlYCBpcyBldmVuIGV4cGxpY2l0bHkgaW5pdGlhbGl6aW5nIGBlaWRgIHdpdGggYG1lbXNldCgpYC4gVGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgdGlnaHRlbmluZyB1cCBleGlzdGluZyBkYXRhIHN0cnVjdHVyZXMgYW5kIHZhbGlkYXRpbmcgZGlzayBkYXRhLCBub3QgaW50cm9kdWNpbmcgbmV3IHNvdXJjZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIENvcnJ1cHRlZCBkaXNrIHJlYWRzIHdpbGwgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGVycm9yIGNoZWNraW5nLgoKSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoYXQgTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UuICBJdCBwZXJmZWN0bHkgbWF0Y2hlcyBvdXIgZXN0YWJsaXNoZWQgY3JpdGVyaWE6ICB0aGUgbWFpbiByaXNrcyBhcmUgb3V0LW9mLWJvdW5kcywgb3ZlcmZsb3dzLCBhbmQgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFsbCBpc3N1ZXMgdGhhdCBLQVNBTiBzaG91bGQgaGFuZGxlLiBBbGwgdGhlIHN0cnVjdHVyZXMgaW50cm9kdWNlZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGJlaW5nIGludHJvZHVjZWQgb3IgaW5mb3JtYXRpb24gbGVha3MuCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkmIzM5O20gY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNhbml0eSBhbmQgYm91bmRzIGNoZWNraW5nIGZvciBVREYgZmlsZXN5c3RlbSBleHRlbmRlZCBhdHRyaWJ1dGVzLCBzcGVjaWZpY2FsbHkgZm9yIGRldmljZVNwZWMgYXR0cmlidXRlcyBvbiBzcGVjaWFsIGRldmljZSBpbm9kZXMgKGNoYXJhY3Rlci9ibG9jayBkZXZpY2VzKS4gSXQgaW50cm9kdWNlcyBgdWRmX2RldmljZV9zcGVjX3ZhbGlkKClgIHRvIHZhbGlkYXRlIGF0dHJpYnV0ZSBhbmQgaW1wbGVtZW50YXRpb24tdXNlIGxlbmd0aHMgYWdhaW5zdCBidWZmZXIgYm91bmRzLCBwcm9wZXJseSBoYW5kbGVzIGBFUlJfUFRSYCBlcnJvciByZXR1cm5zIGZyb20gYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHIoKWAsIGFuZCBmaXhlcyBsb29wIGJvdW5kYXJ5IGNoZWNrcyB3aGVuIGl0ZXJhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzLlxuXG5UaGVzZSBjaGFuZ2VzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcywgd2hpY2ggZmFsbCB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc2FuaXR5IGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIFVERiBmaWxlc3lzdGVtIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSBmb3IgZGV2aWNlU3BlYyBhdHRyaWJ1dGVzIG9uIHNwZWNpYWwgZGV2aWNlIGlub2RlcyAoY2hhcmFjdGVyL2Jsb2NrIGRldmljZXMpLiBJdCBpbnRyb2R1Y2VzIGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoKWAgdG8gdmFsaWRhdGUgYXR0cmlidXRlIGFuZCBpbXBsZW1lbnRhdGlvbi11c2UgbGVuZ3RocyBhZ2FpbnN0IGJ1ZmZlciBib3VuZHMsIHByb3Blcmx5IGhhbmRsZXMgYEVSUl9QVFJgIGVycm9yIHJldHVybnMgZnJvbSBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cigpYCwgYW5kIGZpeGVzIGxvb3AgYm91bmRhcnkgY2hlY2tzIHdoZW4gaXRlcmF0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMuXG5cblRoZXNlIGNoYW5nZXMgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb24gY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBmYWxsIHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDowODo1OC45ODM4MjM1NDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU3NjcxMTYxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVURGX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRmX2dldF9leHRlbmRlZGF0dHJcIixcbiAgICBcInVkZl9hZGRfZXh0ZW5kZWRhdHRyXCIsXG4gICAgXCJ1ZGZfd3JpdGVfaW5vZGVcIixcbiAgICBcIl9fdWRmX2lnZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc2FuaXR5IGFuZCBib3VuZHMgY2hlY2tpbmcgZm9yIFVERiBmaWxlc3lzdGVtIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSBmb3IgZGV2aWNlU3BlYyBhdHRyaWJ1dGVzIG9uIHNwZWNpYWwgZGV2aWNlIGlub2RlcyAoY2hhcmFjdGVyL2Jsb2NrIGRldmljZXMpLiBJdCBpbnRyb2R1Y2VzIGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoKWAgdG8gdmFsaWRhdGUgYXR0cmlidXRlIGFuZCBpbXBsZW1lbnRhdGlvbi11c2UgbGVuZ3RocyBhZ2FpbnN0IGJ1ZmZlciBib3VuZHMsIHByb3Blcmx5IGhhbmRsZXMgYEVSUl9QVFJgIGVycm9yIHJldHVybnMgZnJvbSBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cigpYCwgYW5kIGZpeGVzIGxvb3AgYm91bmRhcnkgY2hlY2tzIHdoZW4gaXRlcmF0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMuXFxuXFxuVGhlc2UgY2hhbmdlcyBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBvbiBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMsIHdoaWNoIGZhbGwgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBVREYgZGV2aWNlIHNwZWNpZmljYXRpb24gZXh0ZW5kZWQgYXR0cmlidXRlcyBhbmQgZml4ZXMgZXJyb3IgaGFuZGxpbmcvcHJvcGFnYXRpb24gZm9yIGNvcnJ1cHRlZCBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIFVERiBmaWxlc3lzdGVtIGlub2RlIHJlYWQvd3JpdGUgcGF0aHMuIFRoaXMgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IG1vdW50aW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgY3JhZnRlZCBVREYgZmlsZXN5c3RlbSBpbWFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjA4OjU4Ljk4MzgzMDE1M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNDg5MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmY0MDhjNzM4ZGE5ODk0NTlhOGJmMDg1M2RhYTdjMTQxZWZmYzc0OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDIwOjA4OjU4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmNcXG5pbmRleCBlNDVlNTQ2YTczOWE5Li44YmFiYzJmYmNlOWExIDEwMDY0NFxcbi0tLSBhL2ZzL3VkZi9pbm9kZS5jXFxuKysrIGIvZnMvdWRmL2lub2RlLmNcXG5AQCAtMTMzNiw2ICsxMzM2LDI2IEBAIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbmV3c2l6ZSlcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rLypcXG4rICogVmVyaWZ5IHZhbGlkaXR5IG9mIHN0cnVjdCBkZXZpY2VTcGVjIG9uIGRpc2suIHVkZl9nZXRfZXh0ZW5kZWRhdHRyKCkgaGFzXFxuKyAqIGFscmVhZHkgdmVyaWZpZWQgdGhlIGdlbmVyaWMgaGVhZGVyIGFuZCBtYWRlIHN1cmUgYXR0cmlidXRlIGZpdHMgaW4gdGhlXFxuKyAqIGlub2RlIHNvIHdlIGp1c3QgaGF2ZSB0byBtYWtlIHN1cmUgYXR0cmlidXRlIHNwYWNlIGlzIGxhcmdlIGVub3VnaCBmb3JcXG4rICogZGV2aWNlU3BlYyBzdHJ1Y3QgYW5kIHJlcXVpcmVkIGltcFVzZSBpbmZvcm1hdGlvbi5cXG4rICovXFxuK3N0YXRpYyBib29sIHVkZl9kZXZpY2Vfc3BlY192YWxpZChzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSlcXG4re1xcbitcXHR1MzIgYXR0cl9sZW5ndGgsIGltcF91c2VfbGVuZ3RoO1xcbitcXG4rXFx0YXR0cl9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLVxcdTAwM2VhdHRyTGVuZ3RoKTtcXG4rXFx0aW1wX3VzZV9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLVxcdTAwM2VpbXBVc2VMZW5ndGgpO1xcbitcXHRpZiAoYXR0cl9sZW5ndGggXFx1MDAzYyBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpIHx8XFxuK1xcdCAgICBpbXBfdXNlX2xlbmd0aCBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgcmVnaWQpIHx8XFxuK1xcdCAgICBpbXBfdXNlX2xlbmd0aCBcXHUwMDNlIGF0dHJfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIC8qXFxuICAqIE1heGltdW0gbGVuZ3RoIG9mIGxpbmtlZCBsaXN0IGZvcm1lZCBieSBJQ0IgaGllcmFyY2h5LiBUaGUgY2hvc2VuIG51bWJlciBpc1xcbiAgKiBhcmJpdHJhcnkgLSBqdXN0IHRoYXQgd2UgaG9wZWZ1bGx5IGRvbid0IGxpbWl0IGFueSByZWFsIHVzZSBvZiByZXdyaXR0ZW5cXG5AQCAtMTY1NCwxMyArMTY3NCwxOSBAQCBzdGF0aWMgaW50IHVkZl9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgaGlkZGVuX2lub2RlKVxcbiBcXHRpZiAoU19JU0NIUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuIFxcdFxcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cXG4gXFx0XFx0XFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcXG4tXFx0XFx0aWYgKGRzZWEpIHtcXG4tXFx0XFx0XFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9tb2RlLFxcbitcXG4rXFx0XFx0aWYgKElTX0VSUihkc2VhKSkge1xcbitcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGRzZWEpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHQvKiBEZXZpY2UgaW5vZGVzIG11c3QgaGF2ZSBhIGRldmljZSBzcGVjIGF0dHJpYnV0ZSAqL1xcbitcXHRcXHRpZiAoIWRzZWEgfHwgIXVkZl9kZXZpY2Vfc3BlY192YWxpZChkc2VhKSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUZTQ09SUlVQVEVEO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX21vZGUsXFxuIFxcdFxcdFxcdFxcdE1LREVWKGxlMzJfdG9fY3B1KGRzZWEtXFx1MDAzZW1ham9yRGV2aWNlSWRlbnQpLFxcbiBcXHRcXHRcXHRcXHQgICAgICBsZTMyX3RvX2NwdShkc2VhLVxcdTAwM2VtaW5vckRldmljZUlkZW50KSkpO1xcbi1cXHRcXHRcXHQvKiBEZXZlbG9wZXIgSUQgPz8/ICovXFxuLVxcdFxcdH0gZWxzZVxcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXHRyZXQgPSAwO1xcbiBvdXQ6XFxuQEAgLTE3NTcsNiArMTc4Myw3IEBAIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIFxcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gXFx0dW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbiBcXHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0YmggPSBzYl9nZXRibGsoaW5vZGUtXFx1MDAzZWlfc2IsXFxuIFxcdFxcdFxcdHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLVxcdTAwM2VpX3NiLCBcXHUwMDI2aWluZm8tXFx1MDAzZWlfbG9jYXRpb24sIDApKTtcXG5AQCAtMTgxNiwxMSArMTg0MywyMSBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHRcXHRzdHJ1Y3QgcmVnaWQgKmVpZDtcXG4gXFx0XFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxcbiBcXHRcXHRcXHQoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpO1xcbitcXG4rXFx0XFx0LyogVmFsaWRpdHkgb2YgZXh0ZW5kZWQgYXR0cnMgd2FzIGNoZWNrZWQgb24gbG9hZCAqL1xcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKElTX0VSUihkc2VhKSkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihkc2VhKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmICghZHNlYSkge1xcbiBcXHRcXHRcXHRkc2VhID0gKHN0cnVjdCBkZXZpY2VTcGVjICopXFxuIFxcdFxcdFxcdFxcdHVkZl9hZGRfZXh0ZW5kZWRhdHRyKGlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgK1xcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgcmVnaWQpLCAxMiwgMHgzKTtcXG4rXFx0XFx0XFx0aWYgKElTX0VSUihkc2VhKSkge1xcbitcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGRzZWEpO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0ZHNlYS1cXHUwMDNlYXR0clR5cGUgPSBjcHVfdG9fbGUzMigxMik7XFxuIFxcdFxcdFxcdGRzZWEtXFx1MDAzZWF0dHJTdWJ0eXBlID0gMTtcXG4gXFx0XFx0XFx0ZHNlYS1cXHUwMDNlYXR0ckxlbmd0aCA9IGNwdV90b19sZTMyKFxcbkBAIC0xOTYyLDYgKzE5OTksMTEgQEAgaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4gXFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK291dF91bmxvY2s6XFxuK1xcdHVubG9ja19idWZmZXIoYmgpO1xcbitcXHRicmVsc2UoYmgpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8sXFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9taXNjLmMgYi9mcy91ZGYvbWlzYy5jXFxuaW5kZXggNjkyOGUzNzhmYmJkYy4uYTIwODRkZmJmYmQ2NiAxMDA2NDRcXG4tLS0gYS9mcy91ZGYvbWlzYy5jXFxuKysrIGIvZnMvdWRmL21pc2MuY1xcbkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLFxcbiBcXHRcXHRcXHRcXHRcXHRjcHVfdG9fbGUxNihUQUdfSURFTlRfRUFIRCkgfHxcXG4gXFx0XFx0XFx0ICAgIGxlMzJfdG9fY3B1KGVhaGQtXFx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XFxuIFxcdFxcdFxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuIFxcbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsXFxuIFxcdFxcdHJldHVybiAoc3RydWN0IGdlbmVyaWNGb3JtYXQgKilcXHUwMDI2ZWFbb2Zmc2V0XTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcXG5AQCAtMTQ0LDcgKzE0NCw3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCB0eXBlLFxcbiBcXHRcXHRcXHRcXHRjcHVfdG9fbGUxNihUQUdfSURFTlRfRUFIRCkgfHxcXG4gXFx0XFx0ICAgIGxlMzJfdG9fY3B1KGVhaGQtXFx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XFxuIFxcdFxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSlcXG4tXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xcbiBcXG4gXFx0XFx0aWYgKHR5cGUgXFx1MDAzYyAyMDQ4KVxcbiBcXHRcXHRcXHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xcbkBAIC0xNTMsMTYgKzE1MywxNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRvZmZzZXQgPSBsZTMyX3RvX2NwdShlYWhkLVxcdTAwM2VhcHBBdHRyTG9jYXRpb24pO1xcbiBcXG4tXFx0XFx0d2hpbGUgKG9mZnNldCArIHNpemVvZigqZ2FmKSBcXHUwMDNjIGlpbmZvLVxcdTAwM2VpX2xlbkVBdHRyKSB7XFxuK1xcdFxcdHdoaWxlIChvZmZzZXQgXFx1MDAzY1xcbitcXHRcXHQgICAgICAgaWluZm8tXFx1MDAzZWlfbGVuRUF0dHIgLSBzaXplb2Yoc3RydWN0IGdlbmVyaWNGb3JtYXQpKSB7XFxuIFxcdFxcdFxcdHVpbnQzMl90IGF0dHJMZW5ndGg7XFxuIFxcbiBcXHRcXHRcXHRnYWYgPSAoc3RydWN0IGdlbmVyaWNGb3JtYXQgKilcXHUwMDI2ZWFbb2Zmc2V0XTtcXG4gXFx0XFx0XFx0YXR0ckxlbmd0aCA9IGxlMzJfdG9fY3B1KGdhZi1cXHUwMDNlYXR0ckxlbmd0aCk7XFxuIFxcbiBcXHRcXHRcXHQvKiBEZXRlY3QgdW5kZXJzaXplZCBlbGVtZW50cyBhbmQgYnVmZmVyIG92ZXJmbG93cyAqL1xcbi1cXHRcXHRcXHRpZiAoKGF0dHJMZW5ndGggXFx1MDAzYyBzaXplb2YoKmdhZikpIHx8XFxuLVxcdFxcdFxcdCAgICAoYXR0ckxlbmd0aCBcXHUwMDNlIChpaW5mby1cXHUwMDNlaV9sZW5FQXR0ciAtIG9mZnNldCkpKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0aWYgKGF0dHJMZW5ndGggXFx1MDAzYyBzaXplb2Yoc3RydWN0IGdlbmVyaWNGb3JtYXQpIHx8XFxuK1xcdFxcdFxcdCAgICBhdHRyTGVuZ3RoIFxcdTAwM2UgaWluZm8tXFx1MDAzZWlfbGVuRUF0dHIgLSBvZmZzZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGxlMzJfdG9fY3B1KGdhZi1cXHUwMDNlYXR0clR5cGUpID09IHR5cGUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0XFx0Z2FmLVxcdTAwM2VhdHRyU3VidHlwZSA9PSBzdWJ0eXBlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDowODo1OS40NTc4NDIxODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjg4ODAxODYyNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVERl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkZl9nZXRfZXh0ZW5kZWRhdHRyXCIsXG4gICAgXCJ1ZGZfYWRkX2V4dGVuZGVkYXR0clwiLFxuICAgIFwidWRmX3dyaXRlX2lub2RlXCIsXG4gICAgXCJfX3VkZl9pZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBVREYgZGV2aWNlIHNwZWNpZmljYXRpb24gZXh0ZW5kZWQgYXR0cmlidXRlcyBhbmQgZml4ZXMgZXJyb3IgaGFuZGxpbmcvcHJvcGFnYXRpb24gZm9yIGNvcnJ1cHRlZCBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIFVERiBmaWxlc3lzdGVtIGlub2RlIHJlYWQvd3JpdGUgcGF0aHMuIFRoaXMgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IG1vdW50aW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgY3JhZnRlZCBVREYgZmlsZXN5c3RlbSBpbWFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZmNDA4YzczOGRhOTg5NDU5YThiZjA4NTNkYWE3YzE0MWVmZmM3NDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDIwOjA4OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuY1xuaW5kZXggZTQ1ZTU0NmE3MzlhOS4uOGJhYmMyZmJjZTlhMSAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9pbm9kZS5jXG4rKysgYi9mcy91ZGYvaW5vZGUuY1xuQEAgLTEzMzYsNiArMTMzNiwyNiBAQCBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbisvKlxuKyAqIFZlcmlmeSB2YWxpZGl0eSBvZiBzdHJ1Y3QgZGV2aWNlU3BlYyBvbiBkaXNrLiB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpIGhhc1xuKyAqIGFscmVhZHkgdmVyaWZpZWQgdGhlIGdlbmVyaWMgaGVhZGVyIGFuZCBtYWRlIHN1cmUgYXR0cmlidXRlIGZpdHMgaW4gdGhlXG4rICogaW5vZGUgc28gd2UganVzdCBoYXZlIHRvIG1ha2Ugc3VyZSBhdHRyaWJ1dGUgc3BhY2UgaXMgbGFyZ2UgZW5vdWdoIGZvclxuKyAqIGRldmljZVNwZWMgc3RydWN0IGFuZCByZXF1aXJlZCBpbXBVc2UgaW5mb3JtYXRpb24uXG4rICovXG4rc3RhdGljIGJvb2wgdWRmX2RldmljZV9zcGVjX3ZhbGlkKHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhKVxuK3tcbitcdHUzMiBhdHRyX2xlbmd0aCwgaW1wX3VzZV9sZW5ndGg7XG4rXG4rXHRhdHRyX2xlbmd0aCA9IGxlMzJfdG9fY3B1KGRzZWEtXHUwMDNlYXR0ckxlbmd0aCk7XG4rXHRpbXBfdXNlX2xlbmd0aCA9IGxlMzJfdG9fY3B1KGRzZWEtXHUwMDNlaW1wVXNlTGVuZ3RoKTtcbitcdGlmIChhdHRyX2xlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSB8fFxuK1x0ICAgIGltcF91c2VfbGVuZ3RoIFx1MDAzYyBzaXplb2Yoc3RydWN0IHJlZ2lkKSB8fFxuK1x0ICAgIGltcF91c2VfbGVuZ3RoIFx1MDAzZSBhdHRyX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiAvKlxuICAqIE1heGltdW0gbGVuZ3RoIG9mIGxpbmtlZCBsaXN0IGZvcm1lZCBieSBJQ0IgaGllcmFyY2h5LiBUaGUgY2hvc2VuIG51bWJlciBpc1xuICAqIGFyYml0cmFyeSAtIGp1c3QgdGhhdCB3ZSBob3BlZnVsbHkgZG9uJ3QgbGltaXQgYW55IHJlYWwgdXNlIG9mIHJld3JpdHRlblxuQEAgLTE2NTQsMTMgKzE2NzQsMTkgQEAgc3RhdGljIGludCB1ZGZfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGhpZGRlbl9pbm9kZSlcbiBcdGlmIChTX0lTQ0hSKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cbiBcdFx0XHQoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpO1xuLVx0XHRpZiAoZHNlYSkge1xuLVx0XHRcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9tb2RlLFxuK1xuK1x0XHRpZiAoSVNfRVJSKGRzZWEpKSB7XG4rXHRcdFx0cmV0ID0gUFRSX0VSUihkc2VhKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHQvKiBEZXZpY2UgaW5vZGVzIG11c3QgaGF2ZSBhIGRldmljZSBzcGVjIGF0dHJpYnV0ZSAqL1xuK1x0XHRpZiAoIWRzZWEgfHwgIXVkZl9kZXZpY2Vfc3BlY192YWxpZChkc2VhKSkge1xuK1x0XHRcdHJldCA9IC1FRlNDT1JSVVBURUQ7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS1cdTAwM2VpX21vZGUsXG4gXHRcdFx0XHRNS0RFVihsZTMyX3RvX2NwdShkc2VhLVx1MDAzZW1ham9yRGV2aWNlSWRlbnQpLFxuIFx0XHRcdFx0ICAgICAgbGUzMl90b19jcHUoZHNlYS1cdTAwM2VtaW5vckRldmljZUlkZW50KSkpO1xuLVx0XHRcdC8qIERldmVsb3BlciBJRCA/Pz8gKi9cbi1cdFx0fSBlbHNlXG4tXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHRyZXQgPSAwO1xuIG91dDpcbkBAIC0xNzU3LDYgKzE3ODMsNyBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0c3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4gXHR1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuIFx0c3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTtcbitcdGludCBlcnI7XG4gXG4gXHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLFxuIFx0XHRcdHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLVx1MDAzZWlfc2IsIFx1MDAyNmlpbmZvLVx1MDAzZWlfbG9jYXRpb24sIDApKTtcbkBAIC0xODE2LDExICsxODQzLDIxIEBAIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdHN0cnVjdCByZWdpZCAqZWlkO1xuIFx0XHRzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSA9XG4gXHRcdFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcbitcbitcdFx0LyogVmFsaWRpdHkgb2YgZXh0ZW5kZWQgYXR0cnMgd2FzIGNoZWNrZWQgb24gbG9hZCAqL1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKElTX0VSUihkc2VhKSkpIHtcbitcdFx0XHRlcnIgPSBQVFJfRVJSKGRzZWEpO1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fVxuIFx0XHRpZiAoIWRzZWEpIHtcbiBcdFx0XHRkc2VhID0gKHN0cnVjdCBkZXZpY2VTcGVjICopXG4gXHRcdFx0XHR1ZGZfYWRkX2V4dGVuZGVkYXR0cihpbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgK1xuIFx0XHRcdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCByZWdpZCksIDEyLCAweDMpO1xuK1x0XHRcdGlmIChJU19FUlIoZHNlYSkpIHtcbitcdFx0XHRcdGVyciA9IFBUUl9FUlIoZHNlYSk7XG4rXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdFx0fVxuIFx0XHRcdGRzZWEtXHUwMDNlYXR0clR5cGUgPSBjcHVfdG9fbGUzMigxMik7XG4gXHRcdFx0ZHNlYS1cdTAwM2VhdHRyU3VidHlwZSA9IDE7XG4gXHRcdFx0ZHNlYS1cdTAwM2VhdHRyTGVuZ3RoID0gY3B1X3RvX2xlMzIoXG5AQCAtMTk2Miw2ICsxOTk5LDExIEBAIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbiBcbiBcdHJldHVybiAwO1xuK1xuK291dF91bmxvY2s6XG4rXHR1bmxvY2tfYnVmZmVyKGJoKTtcbitcdGJyZWxzZShiaCk7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8sXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL21pc2MuYyBiL2ZzL3VkZi9taXNjLmNcbmluZGV4IDY5MjhlMzc4ZmJiZGMuLmEyMDg0ZGZiZmJkNjYgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvbWlzYy5jXG4rKysgYi9mcy91ZGYvbWlzYy5jXG5AQCAtNTgsNyArNTgsNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3Qgc2l6ZSxcbiBcdFx0XHRcdFx0Y3B1X3RvX2xlMTYoVEFHX0lERU5UX0VBSEQpIHx8XG4gXHRcdFx0ICAgIGxlMzJfdG9fY3B1KGVhaGQtXHUwMDNlZGVzY1RhZy50YWdMb2NhdGlvbikgIT1cbiBcdFx0XHRcdFx0aWluZm8tXHUwMDNlaV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0pXG4tXHRcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFxuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3Qgc2l6ZSxcbiBcdFx0cmV0dXJuIChzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqKVx1MDAyNmVhW29mZnNldF07XG4gXHR9XG4gXG4tXHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIH1cbiBcbiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcbkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsXG4gXHRcdFx0XHRjcHVfdG9fbGUxNihUQUdfSURFTlRfRUFIRCkgfHxcbiBcdFx0ICAgIGxlMzJfdG9fY3B1KGVhaGQtXHUwMDNlZGVzY1RhZy50YWdMb2NhdGlvbikgIT1cbiBcdFx0XHRcdGlpbmZvLVx1MDAzZWlfbG9jYXRpb24ubG9naWNhbEJsb2NrTnVtKVxuLVx0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xuIFxuIFx0XHRpZiAodHlwZSBcdTAwM2MgMjA0OClcbiBcdFx0XHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xuQEAgLTE1MywxNiArMTUzLDE3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCB0eXBlLFxuIFx0XHRlbHNlXG4gXHRcdFx0b2Zmc2V0ID0gbGUzMl90b19jcHUoZWFoZC1cdTAwM2VhcHBBdHRyTG9jYXRpb24pO1xuIFxuLVx0XHR3aGlsZSAob2Zmc2V0ICsgc2l6ZW9mKCpnYWYpIFx1MDAzYyBpaW5mby1cdTAwM2VpX2xlbkVBdHRyKSB7XG4rXHRcdHdoaWxlIChvZmZzZXQgXHUwMDNjXG4rXHRcdCAgICAgICBpaW5mby1cdTAwM2VpX2xlbkVBdHRyIC0gc2l6ZW9mKHN0cnVjdCBnZW5lcmljRm9ybWF0KSkge1xuIFx0XHRcdHVpbnQzMl90IGF0dHJMZW5ndGg7XG4gXG4gXHRcdFx0Z2FmID0gKHN0cnVjdCBnZW5lcmljRm9ybWF0ICopXHUwMDI2ZWFbb2Zmc2V0XTtcbiBcdFx0XHRhdHRyTGVuZ3RoID0gbGUzMl90b19jcHUoZ2FmLVx1MDAzZWF0dHJMZW5ndGgpO1xuIFxuIFx0XHRcdC8qIERldGVjdCB1bmRlcnNpemVkIGVsZW1lbnRzIGFuZCBidWZmZXIgb3ZlcmZsb3dzICovXG4tXHRcdFx0aWYgKChhdHRyTGVuZ3RoIFx1MDAzYyBzaXplb2YoKmdhZikpIHx8XG4tXHRcdFx0ICAgIChhdHRyTGVuZ3RoIFx1MDAzZSAoaWluZm8tXHUwMDNlaV9sZW5FQXR0ciAtIG9mZnNldCkpKVxuLVx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0aWYgKGF0dHJMZW5ndGggXHUwMDNjIHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkgfHxcbitcdFx0XHQgICAgYXR0ckxlbmd0aCBcdTAwM2UgaWluZm8tXHUwMDNlaV9sZW5FQXR0ciAtIG9mZnNldClcbitcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xuIFxuIFx0XHRcdGlmIChsZTMyX3RvX2NwdShnYWYtXHUwMDNlYXR0clR5cGUpID09IHR5cGUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHRcdGdhZi1cdTAwM2VhdHRyU3VidHlwZSA9PSBzdWJ0eXBlKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MDg6NTkuNDU3ODQzNjAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxNTg0NTU1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBVREYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgYSBzb2xpZCBhbmFseXNpcyBpbnZvbHZlcyBmaWd1cmluZyBvdXQgaWYgaXQncyBXb3J0aEZ1enppbmcsIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCwga2V5IHN5bWJvbHMgdG8gdGFyZ2V0LCBhbmQgdGhlIHVuZGVybHlpbmcgcmVhc29uaW5nLlxuXG5GaXJzdCwgSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYGZzL3VkZi9pbm9kZS5jYCBhbmQgYGZzL3VkZi9taXNjLmNgLiBMZXQncyBicmVhayBkb3duIHdoYXQncyBoYXBwZW5pbmc6IGl0J3MgYWxsIGFib3V0IFVERiBmaWxlc3lzdGVtIGRldmljZSBzcGVjaWZpY2F0aW9uIHZhbGlkYXRpb24gYW5kIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFNwZWNpZmljYWxseTogYHVkZl9kZXZpY2Vfc3BlY192YWxpZGAgdmFsaWRhdGVzIHRoZSBgc3RydWN0IGRldmljZVNwZWNgLCBgdWRmX3JlYWRfaW5vZGVgIGlzIGhhbmRsaW5nIGVycm9ycyBpbiBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGFuZCB2YWxpZGF0aW5nIHRoZSBkZXZpY2Ugc3BlY3MsIGFuZCB0aGUgYHVkZl93cml0ZV9pbm9kZWAgaXMgZG9pbmcgc2ltaWxhciBlcnJvciBjaGVja3MsIHNwZWNpZmljYWxseSBhcm91bmQgaGFuZGxpbmcgYEVSUl9QVFJgIHJldHVybnMgZnJvbSBmdW5jdGlvbnMgbGlrZSBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHJgLiBUaG9zZSBmdW5jdGlvbnMgYWxzbyBub3cgZXhwbGljaXRseSByZXR1cm4gYEVSUl9QVFIoLi4uKWAgcmF0aGVyIHRoYW4gYE5VTExgIG9uIGVycm9ycy4gVGhpcyBpcyBjcnVjaWFsIGZvciBkZXRlY3RpbmcgYW5kIGhhbmRsaW5nIGNvcnJ1cHRpb24uXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGlzIFVERiBhY2Nlc3NpYmxlIHRvIGEgc3RhbmRhcmQgZnV6emVyPyBHaXZlbiBpdCdzIGEgZGlzayBmaWxlc3lzdGVtIChgZnMvdWRmL2ApLCBJIGtub3cgaXQncyBhIGdvb2QgY2FuZGlkYXRlLiBGaWxlc3lzdGVtcyBhcmUgb2Z0ZW4gbW91bnRlZCB2aWEgbG9vcCBkZXZpY2VzLCBhbmQgZnV6emluZyBmaWxlc3lzdGVtIGltYWdlcyBpcyBjb21tb24gcHJhY3RpY2UgKHN5emthbGxlciBkb2VzIHRoaXMpLiBUaGlzIHNlZW1zIHByb21pc2luZy5cblxuVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgbmVlZCB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUgZGV0YWlscy4gVGltZSB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIGBmcy91ZGYvS2NvbmZpZ2AgYW5kIGBmcy91ZGYvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIFVERiBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIFRoYXQgd2lsbCB0ZWxsIG1lIHRoZSByZXF1aXJlZCBgRW5hYmxlQ29uZmlnc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDowOToyMS42MTYzMDE3MzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1NTk1MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVREZfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWRmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3VkZi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvdWRmL0tjb25maWc6Mjpjb25maWcgVURGX0ZTXFxuZnMvdWRmL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVURGIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjA5OjIxLjk1MTkwMjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTc3ODYzMjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHJlYWRpbmcgYGZzL3VkZi9LY29uZmlnYCwgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVREYgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgY3JhY2sgb3BlbiBgZnMvdWRmL0tjb25maWdgLiBUaW1lIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSdyZSBzdHJ1Y3R1cmVkIGZvciB0aGUgVURGIGZpbGVzeXN0ZW0uIEltbWVkaWF0ZWx5LCBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgc2V0dGluZ3Mg4oCTIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wdGlvbnMgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBVREYgc3VwcG9ydCBlbnRpcmVseSwgbmF0dXJhbGx5LiBQcm9iYWJseSBhIG1vZHVsZSBvcHRpb24gdG9vOyBnb3R0YSBiZSBmbGV4aWJsZSBvbiB0aGF0IGZyb250LlxuXG5JJ20gc2Nhbm5pbmcgZm9yIGZpbmVyLWdyYWluZWQgY29udHJvbHMuIEFyZSB0aGVyZSBvcHRpb25zIGZvciBoYW5kbGluZyBzcGVjaWZpYyBVREYgdmVyc2lvbnM/IE9yIHBlcmhhcHMgZmxhZ3MgdG8gZW5hYmxlL2Rpc2FibGUgY2VydGFpbiBVREYgZXh0ZW5zaW9ucz8gSSdkIGV4cGVjdCB0byBzZWUgc29tZSBncmFudWxhcml0eSBoZXJlLCBnaXZlbiB0aGUgdmFyaW91cyByZXZpc2lvbnMgYW5kIGZlYXR1cmVzIGltcGxlbWVudGVkIG92ZXIgdGltZS4gVGhpbmdzIGxpa2UgaGFuZGxpbmcgbG9uZyBmaWxlbmFtZXMgb3Igc3VwcG9ydCBmb3Igc3BlY2lmaWMgbWV0YWRhdGEgZm9ybWF0cy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgbXVzdCBiZSBlbmFibGVkIGZvciBVREYgdG8gZnVuY3Rpb24gcHJvcGVybHk/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMgb24gYmxvY2sgZHJpdmVycywgU0NTSSBsYXllcnMsIG9yIHNwZWNpZmljIG1lZGlhIGZvcm1hdHM/IEFuZCBjb252ZXJzZWx5LCBkb2VzIGVuYWJsaW5nIFVERiBjb25mbGljdCB3aXRoIGFueSBvdGhlciBmaWxlc3lzdGVtIG9wdGlvbnM/IEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZXNlIHJlbGF0aW9uc2hpcHMgdG8gYXZvaWQgcG90ZW50aWFsIGJ1aWxkIGNvbmZsaWN0cyBhbmQgZW5zdXJlIHRoZSByZXN1bHRpbmcga2VybmVsIGltYWdlIGlzIGFzIGxlYW4gYW5kIGZ1bmN0aW9uYWwgYXMgcG9zc2libGUuXG5cbkknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBkZWZhdWx0IHZhbHVlcyBhc3NpZ25lZCB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBcmUgc2Vuc2libGUgZGVmYXVsdHMgcHJvdmlkZWQ/IEFyZSB0aGV5IGFwcHJvcHJpYXRlIGZvciBtb3N0IGNvbW1vbiB1c2UgY2FzZXMsIG9yIG1pZ2h0IEkgbmVlZCB0byB0d2VhayB0aGVtIGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IGhhcmR3YXJlIGFuZCBzdG9yYWdlIGVudmlyb25tZW50PyBJJ2xsIHByb2JhYmx5IGFsc28gY2hlY2sgZm9yIGhlbHAgdGV4dCB0byBzZWUgaG93IHdlbGwgaXQgZXhwbGFpbnMgdGhlIG9wdGlvbnMuIEdvb2QgaGVscCB0ZXh0IGlzIGNydWNpYWwgZm9yIGd1aWRpbmcgdXNlcnMsIGVzcGVjaWFsbHkgbGVzcy1leHBlcmllbmNlZCBvbmVzLlxuXG5GaW5hbGx5LCBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljLiBBcmUgdGhlcmUgYW55IGZlYXR1cmVzIGdhdGVkIGJlaGluZCBjZXJ0YWluIGhhcmR3YXJlIHBsYXRmb3Jtcywga2VybmVsIHZlcnNpb25zLCBvciBvdGhlciBjb21waWxlLXRpbWUgY29uZGl0aW9ucz8gVW5kZXJzdGFuZGluZyB0aGVzZSBjb25kaXRpb25zIGlzIGtleSB0byBlbnN1cmluZyB0aGF0IHRoZSBVREYgZmlsZXN5c3RlbSBiZWhhdmVzIGFzIGV4cGVjdGVkIGFuZCB0aGF0IHRoZSBidWlsZCBpcyBvcHRpbWl6ZWQgZm9yIG15IHNwZWNpZmljIG5lZWRzLiBUaGlzIEtjb25maWcgZmlsZSBpcyBnb2luZyB0byB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBvZiBVREYgc3VwcG9ydCBpbiB0aGUga2VybmVsLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDowOTo1Ny43MzA1MzgyNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3VkZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgVURGX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVURGIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBDUkNfSVRVX1RcXG4gICA2OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA3OlxcdFxcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFRoaXMgaXMgYSBmaWxlIHN5c3RlbSB1c2VkIG9uIHNvbWUgQ0QtUk9NcyBhbmQgRFZEcy4gU2luY2UgdGhlXFxuICAxMDpcXHRcXHQgIGZpbGUgc3lzdGVtIGlzIHN1cHBvcnRlZCBieSBtdWx0aXBsZSBvcGVyYXRpbmcgc3lzdGVtcyBhbmQgaXMgbW9yZVxcbiAgMTE6XFx0XFx0ICBjb21wYXRpYmxlIHdpdGggc3RhbmRhcmQgdW5peCBmaWxlIHN5c3RlbXMsIGl0IGlzIGFsc28gc3VpdGFibGUgZm9yXFxuICAxMjpcXHRcXHQgIHJlbW92YWJsZSBVU0IgZGlza3MuIFNheSBZIGlmIHlvdSBpbnRlbmQgdG8gbW91bnQgRFZEIGRpc2NzIG9yIENEUlcnc1xcbiAgMTM6XFx0XFx0ICB3cml0dGVuIGluIHBhY2tldCBtb2RlLCBvciBpZiB5b3Ugd2FudCB0byB1c2UgVURGIGZvciByZW1vdmFibGUgVVNCXFxuICAxNDpcXHRcXHQgIGRpc2tzLiBQbGVhc2UgcmVhZCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi5yc3RcXHUwMDNlLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDE3OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVkZi5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDowOTo1Ny43MzA2MjUxNTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDMwMzUxNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIFVERiBFeHRlbmRlZCBBdHRyaWJ1dGUgSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVURGIGZpbGVzeXN0ZW0gaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBVREYgY29kZS4gSSdsbCBzdGFydCB3aXRoIGBmcy91ZGYvaW5vZGUuY2AgYW5kIGBmcy91ZGYvbWlzYy5jYC4gSSB3YW50IHRvIHNlZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcywgZGV0ZXJtaW5lIHRoZWlyIHZpc2liaWxpdHkgKGFyZSB0aGV5IGV4cG9ydGVkIG9yIGludGVybmFsPyksIGFuZCBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24uXG5cbk5leHQsIEknbGwgcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIGhvdyBpdCdzIGltcGxlbWVudGVkLiBUaGVuLCBJIG5lZWQgdG8gc2VlICp3aG8qIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiDigJMgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgZmlsZXN5c3RlbSwgb3IgcG90ZW50aWFsbHkgZXZlbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgYXJlIHJlbHlpbmcgb24gaXQ/IElkZW50aWZ5aW5nIGFsbCB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgaW5zaWdodCBpbnRvIGl0cyB1c2FnZSBjb250ZXh0IGFuZCBoZWxwIG1lIHNwb3QgYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBkYXRhIGludGVncml0eSwgYWNjZXNzIGNvbnRyb2wsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBlc3BlY2lhbGx5IHdpdGhpbiBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGl0c2VsZi4gSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgbWlzaGFuZGxlZCBvciBjb3VsZCBiZSBleHBsb2l0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NDUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjAyLjc2MDk3ODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMjY4ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkZl9nZXRfZXh0ZW5kZWRhdHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3VkZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy91ZGYvaW5vZGUuYz0xMjgwPWludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbmV3c2l6ZSlcXG4tLVxcbmZzL3VkZi9pbm9kZS5jLTEzMzktLypcXG5mcy91ZGYvaW5vZGUuYzoxMzQwOiAqIFZlcmlmeSB2YWxpZGl0eSBvZiBzdHJ1Y3QgZGV2aWNlU3BlYyBvbiBkaXNrLiB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpIGhhc1xcbmZzL3VkZi9pbm9kZS5jLTEzNDEtICogYWxyZWFkeSB2ZXJpZmllZCB0aGUgZ2VuZXJpYyBoZWFkZXIgYW5kIG1hZGUgc3VyZSBhdHRyaWJ1dGUgZml0cyBpbiB0aGVcXG4tLVxcbmZzL3VkZi9pbm9kZS5jPTEzNjY9c3RhdGljIGludCB1ZGZfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGhpZGRlbl9pbm9kZSlcXG4tLVxcbmZzL3VkZi9pbm9kZS5jLTE2NzUtXFx0XFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxcbmZzL3VkZi9pbm9kZS5jOjE2NzY6XFx0XFx0XFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcXG5mcy91ZGYvaW5vZGUuYy0xNjc3LVxcbi0tXFxuZnMvdWRmL2lub2RlLmM9MTc3ND1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbi0tXFxuZnMvdWRmL2lub2RlLmMtMTg0NC1cXHRcXHRzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSA9XFxuZnMvdWRmL2lub2RlLmM6MTg0NTpcXHRcXHRcXHQoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpO1xcbmZzL3VkZi9pbm9kZS5jLTE4NDYtXFxuLS1cXG5mcy91ZGYvbWlzYy5jPTI3PXN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLFxcbi0tXFxuZnMvdWRmL21pc2MuYy0xMjctXFxuZnMvdWRmL21pc2MuYzoxMjg6c3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsXFxuZnMvdWRmL21pc2MuYy0xMjktXFx0XFx0XFx0XFx0XFx0ICAgdWludDhfdCBzdWJ0eXBlKVxcbi0tXFxuZnMvdWRmL3VkZmRlY2wuaD0xODQ9ZXh0ZXJuIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKiwgdWludDMyX3QsXFxuZnMvdWRmL3VkZmRlY2wuaC0xODUtXFx0XFx0XFx0XFx0XFx0XFx0ICB1aW50MzJfdCwgdWludDhfdCk7XFxuZnMvdWRmL3VkZmRlY2wuaDoxODY6ZXh0ZXJuIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKiwgdWludDMyX3QsXFxuZnMvdWRmL3VkZmRlY2wuaC0xODctXFx0XFx0XFx0XFx0XFx0XFx0ICB1aW50OF90KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTA6MDIuOTcyMjUxODkxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY3MTYwNDQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBDb2RlIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIEknbSBhbHJlYWR5IGxvb2tpbmcgaW50byB0aGlzIGFyZWEsIGJ1dCBsZXQncyBub3QgZ2V0IHR1bm5lbCB2aXNpb24uIEknbSBkZWVwIGluIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBhbmQgaXRzIGltbWVkaWF0ZSBzdXJyb3VuZGluZyBjb2RlIHJpZ2h0IG5vdywgYnV0IGEgY3J1Y2lhbCBuZXh0IHN0ZXAgaGVyZSBpcyB0byBhbHNvIHZlcmlmeSB3aGljaCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBhY3R1YWxseSAqdXNpbmcqIHRoaXMgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRvd25zdHJlYW0gaW1wYWN0IG9mIGFueSBjaGFuZ2VzIEkgbWFrZSwgYW5kIGZpbmRpbmcgdGhlIGNhbGxlcnMgaXMgZnVuZGFtZW50YWwgdG8gdGhhdC4gSXQncyBub3QgZW5vdWdoIHRvIHVuZGVyc3RhbmQgKndoYXQqIGl0IGRvZXMgaGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZXJlKiBpdCdzIGJlaW5nIHVzZWQgdG9vLiBUaGF0IGNhbGwgZ3JhcGggaXMgaW1wb3J0YW50IGZvciByaXNrIGFzc2Vzc21lbnQgYW5kIGltcGFjdCBhbmFseXNpcy4gU28gSSdsbCBjaGVjayBpdHMgY2FsbGVycyBhbmQgYnVpbGQgdGhhdCBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDowNi42NDM4NTg1OTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODM3NjkzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZGZfYWRkX2V4dGVuZGVkYXR0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWRmL2lub2RlLmM9MTc3ND1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbi0tXFxuZnMvdWRmL2lub2RlLmMtMTg1My1cXHRcXHRcXHRkc2VhID0gKHN0cnVjdCBkZXZpY2VTcGVjICopXFxuZnMvdWRmL2lub2RlLmM6MTg1NDpcXHRcXHRcXHRcXHR1ZGZfYWRkX2V4dGVuZGVkYXR0cihpbm9kZSxcXG5mcy91ZGYvaW5vZGUuYy0xODU1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSArXFxuLS1cXG5mcy91ZGYvbWlzYy5jLTI2LVxcbmZzL3VkZi9taXNjLmM6Mjc6c3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsXFxuZnMvdWRmL21pc2MuYy0yOC1cXHRcXHRcXHRcXHRcXHQgICB1aW50MzJfdCB0eXBlLCB1aW50OF90IGxvYylcXG4tLVxcbmZzL3VkZi91ZGZkZWNsLmg9MTgxPWV4dGVybiB2b2lkIHVkZl91cGRhdGVfZXh0cmFfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCBtb2RlKTtcXG4tLVxcbmZzL3VkZi91ZGZkZWNsLmgtMTgzLS8qIG1pc2MuYyAqL1xcbmZzL3VkZi91ZGZkZWNsLmg6MTg0OmV4dGVybiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICosIHVpbnQzMl90LFxcbmZzL3VkZi91ZGZkZWNsLmgtMTg1LVxcdFxcdFxcdFxcdFxcdFxcdCAgdWludDMyX3QsIHVpbnQ4X3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDowNi43NTIyNDE0ODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjYxNjYyNjIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVURGIEZpbGVzeXN0ZW0gQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZSBVREYgZmlsZXN5c3RlbSBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gZnVuY3Rpb25zIHRoYXQgYXJlbid0IGRlY2xhcmVkIGFzIGBzdGF0aWNgIGFuZCB0aGF0IGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIG9yIHN5bWJvbHMgdGhhdCBtaWdodCBiZSBtb2RpZmllZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBnb29kIHdheSB0byBxdWlja2x5IGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgZXNwZWNpYWxseSB3aGVuIEknbSBsb29raW5nIGZvciBob3cgZGF0YSBpcyBhY2Nlc3NlZCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIHN5c3RlbS5cblxuRmlyc3QsIEknbSBleGFtaW5pbmcgYGZzL3VkZi9pbm9kZS5jYC4gSSBzZWUgYHVkZl93cml0ZV9pbm9kZWAgaXMgbm9uLXN0YXRpYy4gVGhhdCdzIGEgZ29vZCBzaWduLCBsaWtlbHkgaW52b2x2ZWQgaW4gd3JpdGluZyBpbm9kZSBkYXRhLCBhbmQgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhpcyBzcGVjaWZpYyBmaWxlLiBgdWRmX3JlYWRfaW5vZGVgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdHMgdXNhZ2UgaXMgbGltaXRlZCB0byB0aGlzIGZpbGUsIHdoaWNoIGlzIGNhbGxlZCBieSBgX191ZGZfaWdldGAgYW5kIGB1ZGZfaWdldGAuIGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWRgIGlzIGFsc28gYSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uOyBzbyBub3QgdGhhdCBpbnRlcmVzdGluZyBmb3Igb3VyIGN1cnJlbnQgZ29hbC5cblxuTmV4dCwgSSdtIG1vdmluZyBvbiB0byBgZnMvdWRmL21pc2MuY2AuIEhlcmUsIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cmAgYW5kIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAgYXJlIG5vbi1zdGF0aWMgYW5kIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGFsbG93IGFkZGluZyBvciBmZXRjaGluZyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzLiBJdCBtYWtlcyBzZW5zZSwgYXMgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgYSBjb21tb24gd2F5IHRvIHByb3ZpZGUgYWRkaXRpb25hbCBtZXRhZGF0YSB0byBhIGZpbGUuIFRoZXNlIHdpbGwgcHJvdmlkZSBnZW5lcmljIEZvcm1hdCBzdHJ1Y3R1cmVzIGFuZCBzaG91bGQgYmUgY2FyZWZ1bGx5IHJldmlld2VkLiBGaW5hbGx5LCBub3RpbmcgdGhhdCBgdWRmX2lnZXRgIGFuZCBgX191ZGZfaWdldGAgYXJlIGluIGBpbm9kZS5jYCwgYXJlIGltcG9ydGFudCBlbnRyeXBvaW50cyBmb3IgcmVhZGluZyBpbm9kZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMzcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTA6MTMuMzY4ODY5ODc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyNzQwMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRmX3JlYWRfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWRmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3VkZi9pbm9kZS5jLTE4LSAqICAxMi8wNi85OCBibGYgIHBhcnRpdGlvbiBzdXBwb3J0IGluIHVkZl9pZ2V0LCB1ZGZfYmxvY2tfbWFwXFxuZnMvdWRmL2lub2RlLmM6MTk6ICogICAgICAgICAgICAgICAgYW5kIHVkZl9yZWFkX2lub2RlXFxuZnMvdWRmL2lub2RlLmMtMjAtICogIDEyLzEyLzk4ICAgICAgcmV3cm90ZSB1ZGZfYmxvY2tfbWFwIHRvIGhhbmRsZSBuZXh0IGV4dGVudHMgYW5kIGRlc2NzIGFjcm9zc1xcbi0tXFxuZnMvdWRmL2lub2RlLmM9MTM0NT1zdGF0aWMgYm9vbCB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoc3RydWN0IGRldmljZVNwZWMgKmRzZWEpXFxuLS1cXG5mcy91ZGYvaW5vZGUuYy0xMzY1LVxcbmZzL3VkZi9pbm9kZS5jOjEzNjY6c3RhdGljIGludCB1ZGZfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGhpZGRlbl9pbm9kZSlcXG5mcy91ZGYvaW5vZGUuYy0xMzY3LXtcXG4tLVxcbmZzL3VkZi9pbm9kZS5jPTIwMDk9c3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqaW5vLFxcbi0tXFxuZnMvdWRmL2lub2RlLmMtMjAyNy1cXHRtZW1jcHkoXFx1MDAyNlVERl9JKGlub2RlKS1cXHUwMDNlaV9sb2NhdGlvbiwgaW5vLCBzaXplb2Yoc3RydWN0IGtlcm5lbF9sYl9hZGRyKSk7XFxuZnMvdWRmL2lub2RlLmM6MjAyODpcXHRlcnIgPSB1ZGZfcmVhZF9pbm9kZShpbm9kZSwgaGlkZGVuX2lub2RlKTtcXG5mcy91ZGYvaW5vZGUuYy0yMDI5LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjEzLjQ2OTE0ODY3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjAxMjM5ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVURGIEZpbGVzeXN0ZW0ncyBpLW5vZGUgSGFuZGxpbmcqKlxuXG5SaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBpLW5vZGVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgVURGIGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aG9zZSBjdXN0b20gVURGLXNwZWNpZmljIG9wZXJhdGlvbnMuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGZzL3VkZi9pbm9kZS5jYCwgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYF9fdWRmX2lnZXRgIGFuZCBgdWRmX2lnZXRgLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgZGlmZmVyZW5jZXMgYW5kIHNoYXJlZCByZXNwb25zaWJpbGl0aWVzLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgbnVhbmNlcyBvZiBVREYncyBtZXRhZGF0YSBzdG9yYWdlIGFuZCByZXRyaWV2YWwuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIHJvbGVzIGluIGZldGNoaW5nIGFuZCBpbml0aWFsaXppbmcgaS1ub2RlIGRhdGEgZnJvbSB0aGUgZGlzYy4gSSBhbnRpY2lwYXRlIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIGFyb3VuZCB0aGUgaGFuZGxpbmcgb2YgZXh0ZW5kZWQgYXR0cmlidXRlcyBvciBzcGVjaWZpYyBVREYgc3RydWN0dXJlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjE2LjY3MDM5MTMzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvdWRmL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwNSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAwNTpcXHRcXHRicmVsc2UoYmgpO1xcbjIwMDY6XFx0XFx0cmV0dXJuIGVycjtcXG4yMDA3OlxcdH1cXG4yMDA4OlxcdFxcbjIwMDk6XFx0c3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqaW5vLFxcbjIwMTA6XFx0XFx0XFx0XFx0IGJvb2wgaGlkZGVuX2lub2RlKVxcbjIwMTE6XFx0e1xcbjIwMTI6XFx0XFx0dW5zaWduZWQgbG9uZyBibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCBpbm8sIDApO1xcbjIwMTM6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBibG9jayk7XFxuMjAxNDpcXHRcXHRpbnQgZXJyO1xcbjIwMTU6XFx0XFxuMjAxNjpcXHRcXHRpZiAoIWlub2RlKVxcbjIwMTc6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMjAxODpcXHRcXG4yMDE5OlxcdFxcdGlmICghKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXFx1MDAyNiBJX05FVykpIHtcXG4yMDIwOlxcdFxcdFxcdGlmIChVREZfSShpbm9kZSktXFx1MDAzZWlfaGlkZGVuICE9IGhpZGRlbl9pbm9kZSkge1xcbjIwMjE6XFx0XFx0XFx0XFx0aXB1dChpbm9kZSk7XFxuMjAyMjpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcXG4yMDIzOlxcdFxcdFxcdH1cXG4yMDI0OlxcdFxcdFxcdHJldHVybiBpbm9kZTtcXG4yMDI1OlxcdFxcdH1cXG4yMDI2OlxcdFxcbjIwMjc6XFx0XFx0bWVtY3B5KFxcdTAwMjZVREZfSShpbm9kZSktXFx1MDAzZWlfbG9jYXRpb24sIGlubywgc2l6ZW9mKHN0cnVjdCBrZXJuZWxfbGJfYWRkcikpO1xcbjIwMjg6XFx0XFx0ZXJyID0gdWRmX3JlYWRfaW5vZGUoaW5vZGUsIGhpZGRlbl9pbm9kZSk7XFxuMjAyOTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjIwMzA6XFx0XFx0XFx0aWdldF9mYWlsZWQoaW5vZGUpO1xcbjIwMzE6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yMDMyOlxcdFxcdH1cXG4yMDMzOlxcdFxcdHVubG9ja19uZXdfaW5vZGUoaW5vZGUpO1xcbjIwMzQ6XFx0XFxuMjAzNTpcXHRcXHRyZXR1cm4gaW5vZGU7XFxuMjAzNjpcXHR9XFxuMjAzNzpcXHRcXG4yMDM4OlxcdGludCB1ZGZfc2V0dXBfaW5kaXJlY3RfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1ZGZfcGJsa190IGJsb2NrLFxcbjIwMzk6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmVwb3MpXFxuMjA0MDpcXHR7XFxuMjA0MTpcXHRcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuMjA0MjpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbjIwNDM6XFx0XFx0c3RydWN0IGFsbG9jRXh0RGVzYyAqYWVkO1xcbjIwNDQ6XFx0XFx0c3RydWN0IGV4dGVudF9wb3NpdGlvbiBuZXBvcztcXG4yMDQ1OlxcdFxcdHN0cnVjdCBrZXJuZWxfbGJfYWRkciBuZWxvYztcXG4yMDQ2OlxcdFxcdGludCB2ZXIsIGFkc2l6ZTtcXG4yMDQ3OlxcdFxcdGludCBlcnIgPSAwO1xcbjIwNDg6XFx0XFxuMjA0OTpcXHRcXHRpZiAoVURGX0koaW5vZGUpLVxcdTAwM2VpX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjE2LjY3MDUxMjgyN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTE2Nzk4MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFVERiBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmaWxlcyBiZXNpZGVzIHdoYXQncyBtZW50aW9uZWQgaW4gdGhlIGluaXRpYWwgZGVzY3JpcHRpb24uIFRoZW4sIGxldCdzIGdvIG92ZXIgdGhlIGRpZmYgYWdhaW4sIHBhcnRpY3VsYXJseSBsb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIGBmcy91ZGYvaW5vZGUuY2AgaW52b2x2aW5nIGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWRgLCBgdWRmX3JlYWRfaW5vZGVgLCBhbmQgYHVkZl93cml0ZV9pbm9kZWAsIGFuZCBhbHNvIGBmcy91ZGYvbWlzYy5jYCwgd2hlcmUgd2Ugc2VlIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cmAgYW5kIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAgYmVpbmcgbW9kaWZpZWQuXG5cbkhtbSwgaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IFllcywgYWJzb2x1dGVseS4gVGhpcyBhZGRyZXNzZXMgc29tZSBjcnVjaWFsIHZ1bG5lcmFiaWxpdGllczogYm91bmRzIGNoZWNrcyBhbmQgdmFsaWRpdHkgY2hlY2tzLCBhbmQgZXJyb3IgcHJvcGFnYXRpb24gYXJlIGltcHJvdmVkIGZvciBoYW5kbGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzIHdpdGhpbiB0aGUgVURGIGZpbGVzeXN0ZW0gY29kZS4gSXQgbG9va3MgbGlrZSBpdCdzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc3BlY2lhbCBkZXZpY2UgaW5vZGVzIGFuZCB0aGUgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYCBhbmQgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgbWFsZm9ybWVkIFVERiBmaWxlc3lzdGVtIGltYWdlcyBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoZXNlIGNvZGUgcGF0aHMgZHVyaW5nIGEgbW91bnQgb3BlcmF0aW9uLCBpbm9kZSBsb29rdXBzLCByZWFkcywgb3IgZXZlbiB3cml0ZWJhY2tzLiBUaGF0J3MgYSB0ZXh0Ym9vayBjYXNlIGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0IHRoZSBDT05GSUcgc2V0dGluZ3MgYXJlLiBJbiB0aGUgYGZzL3VkZi9LY29uZmlnYCBmaWxlLCB3ZSBoYXZlIGBjb25maWcgVURGX0ZTYCwgd2hpY2ggc2VsZWN0cyBCVUZGRVJfSEVBRCwgQ1JDX0lUVV9ULCBOTFMsIGFuZCBMRUdBQ1lfRElSRUNUX0lPLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBkZXBlbmQgb24gYW55dGhpbmcgZWxzZSBjcml0aWNhbC4gVGltZSB0byBjaGVjayBgZnMvdWRmL0tjb25maWdgIGFuZCBgZnMvS2NvbmZpZ2AgZm9yIGRlcGVuZGVuY2llcyBhcm91bmQgYFVERl9GU2AuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2MSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjIyLjc4NzMxMzg4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzEwODg5NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVURGX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT0xMDU9b2JqLSQoQ09ORklHX09SQU5HRUZTX0ZTKSAgICAgICArPSBvcmFuZ2Vmcy9cXG5mcy9NYWtlZmlsZToxMDY6b2JqLSQoQ09ORklHX1VERl9GUylcXHRcXHQrPSB1ZGYvXFxuZnMvTWFrZWZpbGUtMTA3LW9iai0kKENPTkZJR19TVU5fT1BFTlBST01GUylcXHQrPSBvcGVucHJvbWZzL1xcbi0tXFxuZnMvdWRmL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy91ZGYvS2NvbmZpZzoyOmNvbmZpZyBVREZfRlNcXG5mcy91ZGYvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJVREYgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3VkZi9NYWtlZmlsZS01LVxcbmZzL3VkZi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19VREZfRlMpICs9IHVkZi5vXFxuZnMvdWRmL01ha2VmaWxlLTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjIzLjE1ODQwNjY1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTU1ODY2NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVURGIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbiBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIFVERiBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgVURGX0ZTYC4gTXkgZm9jdXMgbm93IGlzIG9uIGlkZW50aWZ5aW5nIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoaXMgcmlnaHQuIExldCdzIHNlZS4uLiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRob3NlIG5vbi1zdGF0aWMgc3ltYm9scywgdGhlIGZvY3VzIHN5bWJvbHMsIHRvIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gSSBoYXZlIHRoZXNlIG9uZXMgYWxyZWFkeTogYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYCwgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCwgYHVkZl93cml0ZV9pbm9kZWAsIGFuZCBgX191ZGZfaWdldGAuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBpbXBvcnRhbnQgc3ltYm9scyBvciBlbnRyeSBwb2ludHMgdGhhdCBJJ3ZlIG1pc3NlZC4gIEFoLCBgdWRmX3JlYWRfaW5vZGVgIGlzIHN0YXRpYy4gVGhhdCBvbmUncyBub3QgZ29pbmcgdG8gYmUgb24gdGhlIGxpc3QuIEkgc2VlIHRoYXQgYF9fdWRmX2lnZXRgIGNhbGxzIGl0LCBidXQgdGhlIGZvcm1lciBpcyB0aGUgbW9yZSBpbXBvcnRhbnQgdGFyZ2V0LiBgdWRmX2dldF9leHRlbmRlZGF0dHJgIGlzIGV4cG9ydGVkLCBzbyBpdCdzIGdvb2QsIG5vbi1zdGF0aWMuICBMaWtld2lzZSwgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYy4gYHVkZl93cml0ZV9pbm9kZWAgaXMgYWxzbyBleHBvcnRlZCwgYW5kIHRoZXJlZm9yZSBub24tc3RhdGljLlxuXG5Pa2F5LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zIGZvciBGb2N1c1N5bWJvbHMuICBUaGUgZ29hbCBpcyB0byBwaW5wb2ludCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgYXJlIHdvcnRoIGhlYXZ5IGZ1enppbmcsIGF2b2lkaW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBXZSB3YW50IHRvIGFpbSBmb3IgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHRob3NlIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLCB3aGljaCB0aGUgY29tcGlsZXIgaW5saW5lcyBhbnl3YXkuIFRoYXQgbWFrZXMgc2Vuc2UuXG5cblNvLCB0YWtpbmcgYWxsIG9mIHRoYXQgaW50byBhY2NvdW50LCBJJ20gY29uZmlkZW50IGluIHRoZSBzeW1ib2xzOlxuXG4qICAgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYFxuKiAgIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cmBcbiogICBgdWRmX3dyaXRlX2lub2RlYFxuKiAgIGBfX3VkZl9pZ2V0YFxuXG5BbmQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZSBpczpcblxuKiAgIGBVREZfRlNgXG5cbkFscmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBMZXQncyBnZXQgdGhlc2UgY2hhbmdlcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyNSwiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTA6MjguMTE0Mjc1Nzc3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDI0MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVREZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZGZfZ2V0X2V4dGVuZGVkYXR0clwiLFxuICAgIFwidWRmX2FkZF9leHRlbmRlZGF0dHJcIixcbiAgICBcInVkZl93cml0ZV9pbm9kZVwiLFxuICAgIFwiX191ZGZfaWdldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgVURGIGRldmljZSBzcGVjaWZpY2F0aW9uIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIGZpeGVzIGVycm9yIGhhbmRsaW5nL3Byb3BhZ2F0aW9uIGZvciBjb3JydXB0ZWQgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiBVREYgZmlsZXN5c3RlbSBpbm9kZSByZWFkL3dyaXRlIHBhdGhzLiBUaGlzIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBieSBtb3VudGluZyBhbmQgcmVhZGluZy93cml0aW5nIGNyYWZ0ZWQgVURGIGZpbGVzeXN0ZW0gaW1hZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVERl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkZl9nZXRfZXh0ZW5kZWRhdHRyXCIsXG4gICAgXCJ1ZGZfYWRkX2V4dGVuZGVkYXR0clwiLFxuICAgIFwidWRmX3dyaXRlX2lub2RlXCIsXG4gICAgXCJfX3VkZl9pZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBVREYgZGV2aWNlIHNwZWNpZmljYXRpb24gZXh0ZW5kZWQgYXR0cmlidXRlcyBhbmQgZml4ZXMgZXJyb3IgaGFuZGxpbmcvcHJvcGFnYXRpb24gZm9yIGNvcnJ1cHRlZCBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIFVERiBmaWxlc3lzdGVtIGlub2RlIHJlYWQvd3JpdGUgcGF0aHMuIFRoaXMgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IG1vdW50aW5nIGFuZCByZWFkaW5nL3dyaXRpbmcgY3JhZnRlZCBVREYgZmlsZXN5c3RlbSBpbWFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjI4LjI1OTcwODczMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0OTEyMjA2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDoyOC4yNjAxNzUwNTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjQ5MDc1MDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzYW5pdHkgYW5kIGJvdW5kcyBjaGVja2luZyBmb3IgVURGIGZpbGVzeXN0ZW0gZXh0ZW5kZWQgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5IGZvciBkZXZpY2VTcGVjIGF0dHJpYnV0ZXMgb24gc3BlY2lhbCBkZXZpY2UgaW5vZGVzIChjaGFyYWN0ZXIvYmxvY2sgZGV2aWNlcykuIEl0IGludHJvZHVjZXMgYHVkZl9kZXZpY2Vfc3BlY192YWxpZCgpYCB0byB2YWxpZGF0ZSBhdHRyaWJ1dGUgYW5kIGltcGxlbWVudGF0aW9uLXVzZSBsZW5ndGhzIGFnYWluc3QgYnVmZmVyIGJvdW5kcywgcHJvcGVybHkgaGFuZGxlcyBgRVJSX1BUUmAgZXJyb3IgcmV0dXJucyBmcm9tIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpYCBhbmQgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyKClgLCBhbmQgZml4ZXMgbG9vcCBib3VuZGFyeSBjaGVja3Mgd2hlbiBpdGVyYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcywgd2hpY2ggZmFsbCB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmZjQwOGM3MzhkYTk4OTQ1OWE4YmYwODUzZGFhN2MxNDFlZmZjNzQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMDowODo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmNcbmluZGV4IGU0NWU1NDZhNzM5YTkuLjhiYWJjMmZiY2U5YTEgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvaW5vZGUuY1xuKysrIGIvZnMvdWRmL2lub2RlLmNcbkBAIC0xMzM2LDYgKzEzMzYsMjYgQEAgaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rLypcbisgKiBWZXJpZnkgdmFsaWRpdHkgb2Ygc3RydWN0IGRldmljZVNwZWMgb24gZGlzay4gdWRmX2dldF9leHRlbmRlZGF0dHIoKSBoYXNcbisgKiBhbHJlYWR5IHZlcmlmaWVkIHRoZSBnZW5lcmljIGhlYWRlciBhbmQgbWFkZSBzdXJlIGF0dHJpYnV0ZSBmaXRzIGluIHRoZVxuKyAqIGlub2RlIHNvIHdlIGp1c3QgaGF2ZSB0byBtYWtlIHN1cmUgYXR0cmlidXRlIHNwYWNlIGlzIGxhcmdlIGVub3VnaCBmb3JcbisgKiBkZXZpY2VTcGVjIHN0cnVjdCBhbmQgcmVxdWlyZWQgaW1wVXNlIGluZm9ybWF0aW9uLlxuKyAqL1xuK3N0YXRpYyBib29sIHVkZl9kZXZpY2Vfc3BlY192YWxpZChzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSlcbit7XG4rXHR1MzIgYXR0cl9sZW5ndGgsIGltcF91c2VfbGVuZ3RoO1xuK1xuK1x0YXR0cl9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLVx1MDAzZWF0dHJMZW5ndGgpO1xuK1x0aW1wX3VzZV9sZW5ndGggPSBsZTMyX3RvX2NwdShkc2VhLVx1MDAzZWltcFVzZUxlbmd0aCk7XG4rXHRpZiAoYXR0cl9sZW5ndGggXHUwMDNjIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgfHxcbitcdCAgICBpbXBfdXNlX2xlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCByZWdpZCkgfHxcbitcdCAgICBpbXBfdXNlX2xlbmd0aCBcdTAwM2UgYXR0cl9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gLypcbiAgKiBNYXhpbXVtIGxlbmd0aCBvZiBsaW5rZWQgbGlzdCBmb3JtZWQgYnkgSUNCIGhpZXJhcmNoeS4gVGhlIGNob3NlbiBudW1iZXIgaXNcbiAgKiBhcmJpdHJhcnkgLSBqdXN0IHRoYXQgd2UgaG9wZWZ1bGx5IGRvbid0IGxpbWl0IGFueSByZWFsIHVzZSBvZiByZXdyaXR0ZW5cbkBAIC0xNjU0LDEzICsxNjc0LDE5IEBAIHN0YXRpYyBpbnQgdWRmX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBoaWRkZW5faW5vZGUpXG4gXHRpZiAoU19JU0NIUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuIFx0XHRzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSA9XG4gXHRcdFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcbi1cdFx0aWYgKGRzZWEpIHtcbi1cdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfbW9kZSxcbitcbitcdFx0aWYgKElTX0VSUihkc2VhKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIoZHNlYSk7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0LyogRGV2aWNlIGlub2RlcyBtdXN0IGhhdmUgYSBkZXZpY2Ugc3BlYyBhdHRyaWJ1dGUgKi9cbitcdFx0aWYgKCFkc2VhIHx8ICF1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoZHNlYSkpIHtcbitcdFx0XHRyZXQgPSAtRUZTQ09SUlVQVEVEO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9tb2RlLFxuIFx0XHRcdFx0TUtERVYobGUzMl90b19jcHUoZHNlYS1cdTAwM2VtYWpvckRldmljZUlkZW50KSxcbiBcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGRzZWEtXHUwMDNlbWlub3JEZXZpY2VJZGVudCkpKTtcbi1cdFx0XHQvKiBEZXZlbG9wZXIgSUQgPz8/ICovXG4tXHRcdH0gZWxzZVxuLVx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0cmV0ID0gMDtcbiBvdXQ6XG5AQCAtMTc1Nyw2ICsxNzgzLDcgQEAgaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0dW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbiBcdHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7XG4rXHRpbnQgZXJyO1xuIFxuIFx0YmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYixcbiBcdFx0XHR1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS1cdTAwM2VpX3NiLCBcdTAwMjZpaW5mby1cdTAwM2VpX2xvY2F0aW9uLCAwKSk7XG5AQCAtMTgxNiwxMSArMTg0MywyMSBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0XHRzdHJ1Y3QgcmVnaWQgKmVpZDtcbiBcdFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxuIFx0XHRcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XG4rXG4rXHRcdC8qIFZhbGlkaXR5IG9mIGV4dGVuZGVkIGF0dHJzIHdhcyBjaGVja2VkIG9uIGxvYWQgKi9cbitcdFx0aWYgKFdBUk5fT05fT05DRShJU19FUlIoZHNlYSkpKSB7XG4rXHRcdFx0ZXJyID0gUFRSX0VSUihkc2VhKTtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbiBcdFx0aWYgKCFkc2VhKSB7XG4gXHRcdFx0ZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKVxuIFx0XHRcdFx0dWRmX2FkZF9leHRlbmRlZGF0dHIoaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICtcbiBcdFx0XHRcdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgcmVnaWQpLCAxMiwgMHgzKTtcbitcdFx0XHRpZiAoSVNfRVJSKGRzZWEpKSB7XG4rXHRcdFx0XHRlcnIgPSBQVFJfRVJSKGRzZWEpO1xuK1x0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHRcdH1cbiBcdFx0XHRkc2VhLVx1MDAzZWF0dHJUeXBlID0gY3B1X3RvX2xlMzIoMTIpO1xuIFx0XHRcdGRzZWEtXHUwMDNlYXR0clN1YnR5cGUgPSAxO1xuIFx0XHRcdGRzZWEtXHUwMDNlYXR0ckxlbmd0aCA9IGNwdV90b19sZTMyKFxuQEAgLTE5NjIsNiArMTk5OSwxMSBAQCBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitvdXRfdW5sb2NrOlxuK1x0dW5sb2NrX2J1ZmZlcihiaCk7XG4rXHRicmVsc2UoYmgpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqaW5vLFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9taXNjLmMgYi9mcy91ZGYvbWlzYy5jXG5pbmRleCA2OTI4ZTM3OGZiYmRjLi5hMjA4NGRmYmZiZDY2IDEwMDY0NFxuLS0tIGEvZnMvdWRmL21pc2MuY1xuKysrIGIvZnMvdWRmL21pc2MuY1xuQEAgLTU4LDcgKzU4LDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsXG4gXHRcdFx0XHRcdGNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fFxuIFx0XHRcdCAgICBsZTMyX3RvX2NwdShlYWhkLVx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XG4gXHRcdFx0XHRcdGlpbmZvLVx1MDAzZWlfbG9jYXRpb24ubG9naWNhbEJsb2NrTnVtKVxuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsXG4gXHRcdHJldHVybiAoc3RydWN0IGdlbmVyaWNGb3JtYXQgKilcdTAwMjZlYVtvZmZzZXRdO1xuIFx0fVxuIFxuLVx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbiB9XG4gXG4gc3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9nZXRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHR5cGUsXG5AQCAtMTQ0LDcgKzE0NCw3IEBAIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCB0eXBlLFxuIFx0XHRcdFx0Y3B1X3RvX2xlMTYoVEFHX0lERU5UX0VBSEQpIHx8XG4gXHRcdCAgICBsZTMyX3RvX2NwdShlYWhkLVx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XG4gXHRcdFx0XHRpaW5mby1cdTAwM2VpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSlcbi1cdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbiBcbiBcdFx0aWYgKHR5cGUgXHUwMDNjIDIwNDgpXG4gXHRcdFx0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjKTtcbkBAIC0xNTMsMTYgKzE1MywxNyBAQCBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcbiBcdFx0ZWxzZVxuIFx0XHRcdG9mZnNldCA9IGxlMzJfdG9fY3B1KGVhaGQtXHUwMDNlYXBwQXR0ckxvY2F0aW9uKTtcbiBcbi1cdFx0d2hpbGUgKG9mZnNldCArIHNpemVvZigqZ2FmKSBcdTAwM2MgaWluZm8tXHUwMDNlaV9sZW5FQXR0cikge1xuK1x0XHR3aGlsZSAob2Zmc2V0IFx1MDAzY1xuK1x0XHQgICAgICAgaWluZm8tXHUwMDNlaV9sZW5FQXR0ciAtIHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkpIHtcbiBcdFx0XHR1aW50MzJfdCBhdHRyTGVuZ3RoO1xuIFxuIFx0XHRcdGdhZiA9IChzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqKVx1MDAyNmVhW29mZnNldF07XG4gXHRcdFx0YXR0ckxlbmd0aCA9IGxlMzJfdG9fY3B1KGdhZi1cdTAwM2VhdHRyTGVuZ3RoKTtcbiBcbiBcdFx0XHQvKiBEZXRlY3QgdW5kZXJzaXplZCBlbGVtZW50cyBhbmQgYnVmZmVyIG92ZXJmbG93cyAqL1xuLVx0XHRcdGlmICgoYXR0ckxlbmd0aCBcdTAwM2Mgc2l6ZW9mKCpnYWYpKSB8fFxuLVx0XHRcdCAgICAoYXR0ckxlbmd0aCBcdTAwM2UgKGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIgLSBvZmZzZXQpKSlcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGlmIChhdHRyTGVuZ3RoIFx1MDAzYyBzaXplb2Yoc3RydWN0IGdlbmVyaWNGb3JtYXQpIHx8XG4rXHRcdFx0ICAgIGF0dHJMZW5ndGggXHUwMDNlIGlpbmZvLVx1MDAzZWlfbGVuRUF0dHIgLSBvZmZzZXQpXG4rXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcbiBcbiBcdFx0XHRpZiAobGUzMl90b19jcHUoZ2FmLVx1MDAzZWF0dHJUeXBlKSA9PSB0eXBlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0XHRnYWYtXHUwMDNlYXR0clN1YnR5cGUgPT0gc3VidHlwZSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjI4LjI2MDE3NTg1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjI0MDE4MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVURGIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFVERiBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL3VkZi9pbm9kZS5jYCBhbmQgYGZzL3VkZi9taXNjLmNgLiBJdCBhcHBlYXJzIHdlJ3JlIGRlYWxpbmcgd2l0aCBlbmhhbmNlZCBlcnJvciBoYW5kbGluZyBhbmQgdmFsaWRhdGlvbiBhcm91bmQgZXh0ZW5kZWQgYXR0cmlidXRlcywgbGlrZWx5IHRvIGltcHJvdmUgdGhlIG92ZXJhbGwgcm9idXN0bmVzcyBhbmQgc3RhYmlsaXR5IG9mIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgdWRmX2RldmljZV9zcGVjX3ZhbGlkKClgLiBUaGlzIHN1Z2dlc3RzIHdlIGFyZSB2YWxpZGF0aW5nIHRoZSBgc3RydWN0IGRldmljZVNwZWNgIHdpdGhpbiBgdWRmX3JlYWRfaW5vZGUoKWAsIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIGlub2RlIHJlYWRzLiBUaGlzIGlzIHNtYXJ0LCB3ZSBzaG91bGQgYmUgZG9pbmcgdGhpcyB2YWxpZGF0aW9uLlxuXG5UaGUgY2hhbmdlcyBpbiBgdWRmX3JlYWRfaW5vZGUoKWAgbm93IGluY29ycG9yYXRlIGVycm9yIGhhbmRsaW5nIGZvciB0aGUgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGNhbGwsIHNwZWNpZmljYWxseSBjaGVja2luZyBmb3IgYElTX0VSUihkc2VhKWAgYW5kIGFwcGx5aW5nIG91ciBuZXcgdmFsaWRhdGlvbiBmdW5jdGlvbi4gVGhpcyBtZWFucyB0aGUgY29kZSBpcyBub3cgZ3JhY2VmdWxseSBoYW5kbGluZyBwb3RlbnRpYWwgZXJyb3JzIGZyb20gYXR0cmlidXRlIHJldHJpZXZhbCBhbmQgcHJldmVudGluZyBjb3JydXB0ZWQgZGF0YSBmcm9tIHByb3BhZ2F0aW5nLlxuXG5JbiBgdWRmX3dyaXRlX2lub2RlKClgLCB3ZSBzZWUgc2ltaWxhciBlcnJvciBoYW5kbGluZyBhcm91bmQgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHIoKWAsIGp1bXBpbmcgdG8gYG91dF91bmxvY2tgIGFuZCByZXR1cm5pbmcgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgZmlsZXN5c3RlbSBjb3JydXB0aW9uIGR1cmluZyBpbm9kZSB3cml0ZXMuXG5cbkZpbmFsbHksIGluIGBmcy91ZGYvbWlzYy5jYCwgdGhlIGNoYW5nZXMgdG8gdGhlIHJldHVybiB2YWx1ZXMgb2YgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyKClgIGFuZCBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgZnJvbSBgTlVMTGAgdG8gYEVSUl9QVFIoLi4uKWAgYXJlIHNpZ25pZmljYW50LiBUaGlzIGlzIGEgY3J1Y2lhbCBpbXByb3ZlbWVudCBpbiBlcnJvciByZXBvcnRpbmcuIFByZXZpb3VzbHkgYSBgTlVMTGAgcmV0dXJuIGNvdWxkIGJlIGFtYmlndW91cy4gVGhlIGludHJvZHVjdGlvbiBvZiBzcGVjaWZpYyBlcnJvciBjb2RlcyBsaWtlIGBFUlJfUFRSKC1FRlNDT1JSVVBURUQpYCBmb3IgYm91bmRzIGNoZWNrcyB3aXRoaW4gYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGlzIHBhcnRpY3VsYXJseSBoZWxwZnVsIGZvciBkZWJ1Z2dpbmcuIFRoZSB1c2Ugb2YgZXJyb3IgcG9pbnRlcnMgY2xhcmlmaWVzIGVycm9yIHBhdGhzLCBhbmQgZW5hYmxlcyBiZXR0ZXIgZGVidWdnaW5nLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC4gSSBuZWVkIHRvIGlkZW50aWZ5ICphbGwqIGNhbGxlcnMgb2YgYHVkZl9nZXRfZXh0ZW5kZWRhdHRyYCBhbmQgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgbG9jYWxpemVkLCBvciBpZiB0aGVyZSBhcmUga25vY2stb24gZWZmZWN0cyBlbHNld2hlcmUuIFRoaXMgd2lkZXIgcmV2aWV3IGlzIGVzc2VudGlhbCB0byBhc3Nlc3MgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEknbGwgbmVlZCB0byBjaGVjayBpZiBhbnkgb3RoZXIgY29kZSBwYXRocyBuZWVkIHRvIGJlIGFkanVzdGVkIHRvIGhhbmRsZSB0aGUgbmV3IGBFUlJfUFRSKC4uLilgIHJldHVybiB2YWx1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MTEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDozNC44ODQxOTczMDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODEzNzg1MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRmXyhnZXR8YWRkKV9leHRlbmRlZGF0dHJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWRmL2lub2RlLmM9MTI4MD1pbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXFxuLS1cXG5mcy91ZGYvaW5vZGUuYy0xMzM5LS8qXFxuZnMvdWRmL2lub2RlLmM6MTM0MDogKiBWZXJpZnkgdmFsaWRpdHkgb2Ygc3RydWN0IGRldmljZVNwZWMgb24gZGlzay4gdWRmX2dldF9leHRlbmRlZGF0dHIoKSBoYXNcXG5mcy91ZGYvaW5vZGUuYy0xMzQxLSAqIGFscmVhZHkgdmVyaWZpZWQgdGhlIGdlbmVyaWMgaGVhZGVyIGFuZCBtYWRlIHN1cmUgYXR0cmlidXRlIGZpdHMgaW4gdGhlXFxuLS1cXG5mcy91ZGYvaW5vZGUuYz0xMzY2PXN0YXRpYyBpbnQgdWRmX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBoaWRkZW5faW5vZGUpXFxuLS1cXG5mcy91ZGYvaW5vZGUuYy0xNjc1LVxcdFxcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cXG5mcy91ZGYvaW5vZGUuYzoxNjc2OlxcdFxcdFxcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XFxuZnMvdWRmL2lub2RlLmMtMTY3Ny1cXG4tLVxcbmZzL3VkZi9pbm9kZS5jPTE3NzQ9aW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4tLVxcbmZzL3VkZi9pbm9kZS5jLTE4NDQtXFx0XFx0c3RydWN0IGRldmljZVNwZWMgKmRzZWEgPVxcbmZzL3VkZi9pbm9kZS5jOjE4NDU6XFx0XFx0XFx0KHN0cnVjdCBkZXZpY2VTcGVjICopdWRmX2dldF9leHRlbmRlZGF0dHIoaW5vZGUsIDEyLCAxKTtcXG5mcy91ZGYvaW5vZGUuYy0xODQ2LVxcbi0tXFxuZnMvdWRmL2lub2RlLmMtMTg1My1cXHRcXHRcXHRkc2VhID0gKHN0cnVjdCBkZXZpY2VTcGVjICopXFxuZnMvdWRmL2lub2RlLmM6MTg1NDpcXHRcXHRcXHRcXHR1ZGZfYWRkX2V4dGVuZGVkYXR0cihpbm9kZSxcXG5mcy91ZGYvaW5vZGUuYy0xODU1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSArXFxuLS1cXG5mcy91ZGYvbWlzYy5jLTI2LVxcbmZzL3VkZi9taXNjLmM6Mjc6c3RydWN0IGdlbmVyaWNGb3JtYXQgKnVkZl9hZGRfZXh0ZW5kZWRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVpbnQzMl90IHNpemUsXFxuZnMvdWRmL21pc2MuYy0yOC1cXHRcXHRcXHRcXHRcXHQgICB1aW50MzJfdCB0eXBlLCB1aW50OF90IGxvYylcXG4tLVxcbmZzL3VkZi9taXNjLmMtMTI3LVxcbmZzL3VkZi9taXNjLmM6MTI4OnN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCB0eXBlLFxcbmZzL3VkZi9taXNjLmMtMTI5LVxcdFxcdFxcdFxcdFxcdCAgIHVpbnQ4X3Qgc3VidHlwZSlcXG4tLVxcbmZzL3VkZi91ZGZkZWNsLmg9MTgxPWV4dGVybiB2b2lkIHVkZl91cGRhdGVfZXh0cmFfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCBtb2RlKTtcXG4tLVxcbmZzL3VkZi91ZGZkZWNsLmgtMTgzLS8qIG1pc2MuYyAqL1xcbmZzL3VkZi91ZGZkZWNsLmg6MTg0OmV4dGVybiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2FkZF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICosIHVpbnQzMl90LFxcbmZzL3VkZi91ZGZkZWNsLmgtMTg1LVxcdFxcdFxcdFxcdFxcdFxcdCAgdWludDMyX3QsIHVpbnQ4X3QpO1xcbmZzL3VkZi91ZGZkZWNsLmg6MTg2OmV4dGVybiBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICosIHVpbnQzMl90LFxcbmZzL3VkZi91ZGZkZWNsLmgtMTg3LVxcdFxcdFxcdFxcdFxcdFxcdCAgdWludDhfdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjM3LjY2NTU4NjMyN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjk4NzEzNDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVURGIEV4dGVuZGVkIEF0dHJpYnV0ZSBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIFVERiBmaWxlc3lzdGVtIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZnMvdWRmL21pc2MuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cmAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cmAuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgVURGIGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIG9uLWRpc2sgZm9ybWF0LiBJJ20gbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBudWFuY2VzIGluIGhvdyBhdHRyaWJ1dGVzIGFyZSBzdG9yZWQsIGluZGV4ZWQsIGFuZCByZXRyaWV2ZWQuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBlcnJvciBjb25kaXRpb25zIHRoYXQgYXJlIGhhbmRsZWQgZGVsaWNhdGVseT8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGUgYXBwcm9hY2g/IFBlcmhhcHMgc29tZSBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyB0aGF0IHdlcmUgYXBwbGllZCBpbiB0aGUgcGFzdC4gVGhpcyBkZWVwIGRpdmUgaXMgY3J1Y2lhbCBmb3IgWyoqaW5zZXJ0IHNwZWNpZmljIHJlYXNvbiBvciB0YXNrLCBlLmcuLCB1bmRlcnN0YW5kaW5nIGEgcmVwb3J0ZWQgcGVyZm9ybWFuY2UgaXNzdWUsIHByZXBhcmluZyBmb3IgYSBwb3RlbnRpYWwgc2VjdXJpdHkgYXVkaXQsIG9yIGV4dGVuZGluZyB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIGZlYXR1cmVzLioqXS4gSSBleHBlY3QgdG8gZmluZCB0aGUgZGV2aWwgaW4gdGhlIGRldGFpbHMgaGVyZSwgYW5kIHRoYXQncyBwcmVjaXNlbHkgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDo0MC4zNjQzMDE0NDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvdWRmL21pc2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogbWlzYy5jXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogUFVSUE9TRVxcbiAgIDY6XFx0ICpcXHRNaXNjZWxsYW5lb3VzIHJvdXRpbmVzIGZvciB0aGUgT1NUQS1VREYodG0pIGZpbGVzeXN0ZW0uXFxuICAgNzpcXHQgKlxcbiAgIDg6XFx0ICogQ09QWVJJR0hUXFxuICAgOTpcXHQgKiAgKEMpIDE5OTggRGF2ZSBCb3ludG9uXFxuICAxMDpcXHQgKiAgKEMpIDE5OTgtMjAwNCBCZW4gRmVubmVtYVxcbiAgMTE6XFx0ICogIChDKSAxOTk5LTIwMDAgU3RlbGlhcyBDb21wdXRpbmcgSW5jXFxuICAxMjpcXHQgKlxcbiAgMTM6XFx0ICogSElTVE9SWVxcbiAgMTQ6XFx0ICpcXG4gIDE1OlxcdCAqICAwNC8xOS85OSBibGYgIHBhcnRpYWwgc3VwcG9ydCBmb3IgcmVhZGluZy93cml0aW5nIHNwZWNpZmljIEVBJ3NcXG4gIDE2OlxcdCAqL1xcbiAgMTc6XFx0XFxuICAxODpcXHQjaW5jbHVkZSBcXFwidWRmZGVjbC5oXFxcIlxcbiAgMTk6XFx0XFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4gIDIxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gIDIyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmMtaXR1LXQuaFxcdTAwM2VcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0I2luY2x1ZGUgXFxcInVkZl9pLmhcXFwiXFxuICAyNTpcXHQjaW5jbHVkZSBcXFwidWRmX3NiLmhcXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfYWRkX2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1aW50MzJfdCBzaXplLFxcbiAgMjg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgdWludDMyX3QgdHlwZSwgdWludDhfdCBsb2MpXFxuICAyOTpcXHR7XFxuICAzMDpcXHRcXHR1aW50OF90ICplYSA9IE5VTEwsICphZCA9IE5VTEw7XFxuICAzMTpcXHRcXHRpbnQgb2Zmc2V0O1xcbiAgMzI6XFx0XFx0dWludDE2X3QgY3JjbGVuO1xcbiAgMzM6XFx0XFx0c3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTtcXG4gIDM0OlxcdFxcbiAgMzU6XFx0XFx0ZWEgPSBpaW5mby1cXHUwMDNlaV9kYXRhO1xcbiAgMzY6XFx0XFx0aWYgKGlpbmZvLVxcdTAwM2VpX2xlbkVBdHRyKSB7XFxuICAzNzpcXHRcXHRcXHRhZCA9IGlpbmZvLVxcdTAwM2VpX2RhdGEgKyBpaW5mby1cXHUwMDNlaV9sZW5FQXR0cjtcXG4gIDM4OlxcdFxcdH0gZWxzZSB7XFxuICAzOTpcXHRcXHRcXHRhZCA9IGVhO1xcbiAgNDA6XFx0XFx0XFx0c2l6ZSArPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xcbiAgNDE6XFx0XFx0fVxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHRvZmZzZXQgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgLSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpIC1cXG4gIDQ0OlxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xlbkFsbG9jO1xcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHQvKiBUT0RPIC0gQ2hlY2sgZm9yIEZyZWVFQVNwYWNlICovXFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdGlmIChsb2MgXFx1MDAyNiAweDAxIFxcdTAwMjZcXHUwMDI2IG9mZnNldCBcXHUwMDNlPSBzaXplKSB7XFxuICA0OTpcXHRcXHRcXHRzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYyAqZWFoZDtcXG4gIDUwOlxcdFxcdFxcdGVhaGQgPSAoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MgKillYTtcXG4gIDUxOlxcdFxcbiAgNTI6XFx0XFx0XFx0aWYgKGlpbmZvLVxcdTAwM2VpX2xlbkFsbG9jKVxcbiAgNTM6XFx0XFx0XFx0XFx0bWVtbW92ZShcXHUwMDI2YWRbc2l6ZV0sIGFkLCBpaW5mby1cXHUwMDNlaV9sZW5BbGxvYyk7XFxuICA1NDpcXHRcXG4gIDU1OlxcdFxcdFxcdGlmIChpaW5mby1cXHUwMDNlaV9sZW5FQXR0cikge1xcbiAgNTY6XFx0XFx0XFx0XFx0LyogY2hlY2sgY2hlY2tzdW0vY3JjICovXFxuICA1NzpcXHRcXHRcXHRcXHRpZiAoZWFoZC1cXHUwMDNlZGVzY1RhZy50YWdJZGVudCAhPVxcbiAgNTg6XFx0XFx0XFx0XFx0XFx0XFx0Y3B1X3RvX2xlMTYoVEFHX0lERU5UX0VBSEQpIHx8XFxuICA1OTpcXHRcXHRcXHRcXHQgICAgbGUzMl90b19jcHUoZWFoZC1cXHUwMDNlZGVzY1RhZy50YWdMb2NhdGlvbikgIT1cXG4gIDYwOlxcdFxcdFxcdFxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSlcXG4gIDYxOlxcdFxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpO1xcbiAgNjI6XFx0XFx0XFx0fSBlbHNlIHtcXG4gIDYzOlxcdFxcdFxcdFxcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0XFx0XFx0c2l6ZSAtPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpO1xcbiAgNjY6XFx0XFx0XFx0XFx0aWluZm8tXFx1MDAzZWlfbGVuRUF0dHIgKz1cXG4gIDY3OlxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYyk7XFxuICA2ODpcXHRcXHRcXHRcXHRlYWhkLVxcdTAwM2VkZXNjVGFnLnRhZ0lkZW50ID0gY3B1X3RvX2xlMTYoVEFHX0lERU5UX0VBSEQpO1xcbiAgNjk6XFx0XFx0XFx0XFx0aWYgKHNiaS1cXHUwMDNlc191ZGZyZXYgXFx1MDAzZT0gMHgwMjAwKVxcbiAgNzA6XFx0XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlZGVzY1RhZy5kZXNjVmVyc2lvbiA9IGNwdV90b19sZTE2KDMpO1xcbiAgNzE6XFx0XFx0XFx0XFx0ZWxzZVxcbiAgNzI6XFx0XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlZGVzY1RhZy5kZXNjVmVyc2lvbiA9IGNwdV90b19sZTE2KDIpO1xcbiAgNzM6XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlZGVzY1RhZy50YWdTZXJpYWxOdW0gPVxcbiAgNzQ6XFx0XFx0XFx0XFx0XFx0XFx0Y3B1X3RvX2xlMTYoc2JpLVxcdTAwM2VzX3NlcmlhbF9udW1iZXIpO1xcbiAgNzU6XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlZGVzY1RhZy50YWdMb2NhdGlvbiA9IGNwdV90b19sZTMyKFxcbiAgNzY6XFx0XFx0XFx0XFx0XFx0XFx0aWluZm8tXFx1MDAzZWlfbG9jYXRpb24ubG9naWNhbEJsb2NrTnVtKTtcXG4gIDc3OlxcdFxcdFxcdFxcdGVhaGQtXFx1MDAzZWltcEF0dHJMb2NhdGlvbiA9IGNwdV90b19sZTMyKDB4RkZGRkZGRkYpO1xcbiAgNzg6XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlYXBwQXR0ckxvY2F0aW9uID0gY3B1X3RvX2xlMzIoMHhGRkZGRkZGRik7XFxuICA3OTpcXHRcXHRcXHR9XFxuICA4MDpcXHRcXG4gIDgxOlxcdFxcdFxcdG9mZnNldCA9IGlpbmZvLVxcdTAwM2VpX2xlbkVBdHRyO1xcbiAgODI6XFx0XFx0XFx0aWYgKHR5cGUgXFx1MDAzYyAyMDQ4KSB7XFxuICA4MzpcXHRcXHRcXHRcXHRpZiAobGUzMl90b19jcHUoZWFoZC1cXHUwMDNlYXBwQXR0ckxvY2F0aW9uKSBcXHUwMDNjXFxuICA4NDpcXHRcXHRcXHRcXHRcXHRcXHRpaW5mby1cXHUwMDNlaV9sZW5FQXR0cikge1xcbiAgODU6XFx0XFx0XFx0XFx0XFx0dWludDMyX3QgYWFsID1cXG4gIDg2OlxcdFxcdFxcdFxcdFxcdFxcdGxlMzJfdG9fY3B1KGVhaGQtXFx1MDAzZWFwcEF0dHJMb2NhdGlvbik7XFxuICA4NzpcXHRcXHRcXHRcXHRcXHRtZW1tb3ZlKFxcdTAwMjZlYVtvZmZzZXQgLSBhYWwgKyBzaXplXSxcXG4gIDg4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZlYVthYWxdLCBvZmZzZXQgLSBhYWwpO1xcbiAgODk6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0IC09IGFhbDtcXG4gIDkwOlxcdFxcdFxcdFxcdFxcdGVhaGQtXFx1MDAzZWFwcEF0dHJMb2NhdGlvbiA9XFxuICA5MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRjcHVfdG9fbGUzMihhYWwgKyBzaXplKTtcXG4gIDkyOlxcdFxcdFxcdFxcdH1cXG4gIDkzOlxcdFxcdFxcdFxcdGlmIChsZTMyX3RvX2NwdShlYWhkLVxcdTAwM2VpbXBBdHRyTG9jYXRpb24pIFxcdTAwM2NcXG4gIDk0OlxcdFxcdFxcdFxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xlbkVBdHRyKSB7XFxuICA5NTpcXHRcXHRcXHRcXHRcXHR1aW50MzJfdCBpYWwgPVxcbiAgOTY6XFx0XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoZWFoZC1cXHUwMDNlaW1wQXR0ckxvY2F0aW9uKTtcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdG1lbW1vdmUoXFx1MDAyNmVhW29mZnNldCAtIGlhbCArIHNpemVdLFxcbiAgOTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmVhW2lhbF0sIG9mZnNldCAtIGlhbCk7XFxuICA5OTpcXHRcXHRcXHRcXHRcXHRvZmZzZXQgLT0gaWFsO1xcbiAxMDA6XFx0XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlaW1wQXR0ckxvY2F0aW9uID1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTA6NDAuMzY0MzkxNjc0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3ODY1ODU0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gZm9jdXMgc3BlY2lmaWNhbGx5IG9uIGxpbmVzIDEwMSB0byAxODAgb2YgYGZzL3VkZi9taXNjLmNgLiBJIGtub3cgdGhpcyBpcyBhIHNwZWNpZmljIGNodW5rLCBhbmQgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgYXNwZWN0IG9mIFVERiBmaWxlc3lzdGVtIG1pc2MgZnVuY3Rpb25zIOKAkyBlaXRoZXIgaW5pdGlhbGl6YXRpb24sIGVycm9yIGhhbmRsaW5nLCBvciBwZXJoYXBzIHNvbWUgbG93LWxldmVsIEkvTyBvcGVyYXRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBzb21lIGludGVybmFsIGZ1bmN0aW9uIGNhbGxzLCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIGFuZCBsaWtlbHkgc29tZSBjb25kaXRpb25hbCBsb2dpYy4gS25vd2luZyBVREYsIEkgc3VzcGVjdCB0aGVyZSdsbCBiZSBhIGRlY2VudCBhbW91bnQgb2YgYml0LW1hc2tpbmcgYW5kIHN0cnVjdHVyZSBhY2Nlc3MgaW52b2x2ZWQuIExldCdzIHNlZSBpZiB0aGlzIHBhcnRpY3VsYXIgc2VnbWVudCB0b3VjaGVzIHVwb24gbWV0YWRhdGEgcmVhZHMsIGJsb2NrIGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgZmlsZXN5c3RlbSBqb3VybmFsaW5nIHJlbGF0ZWQgdG8gVURGLiBSZWFkeSB0byBhbmFseXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzgzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDo0My4xNTA5ODA1NTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3VkZi9taXNjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNwdV90b19sZTMyKGlhbCArIHNpemUpO1xcbiAxMDI6XFx0XFx0XFx0XFx0fVxcbiAxMDM6XFx0XFx0XFx0fSBlbHNlIGlmICh0eXBlIFxcdTAwM2MgNjU1MzYpIHtcXG4gMTA0OlxcdFxcdFxcdFxcdGlmIChsZTMyX3RvX2NwdShlYWhkLVxcdTAwM2VhcHBBdHRyTG9jYXRpb24pIFxcdTAwM2NcXG4gMTA1OlxcdFxcdFxcdFxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xlbkVBdHRyKSB7XFxuIDEwNjpcXHRcXHRcXHRcXHRcXHR1aW50MzJfdCBhYWwgPVxcbiAxMDc6XFx0XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoZWFoZC1cXHUwMDNlYXBwQXR0ckxvY2F0aW9uKTtcXG4gMTA4OlxcdFxcdFxcdFxcdFxcdG1lbW1vdmUoXFx1MDAyNmVhW29mZnNldCAtIGFhbCArIHNpemVdLFxcbiAxMDk6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmVhW2FhbF0sIG9mZnNldCAtIGFhbCk7XFxuIDExMDpcXHRcXHRcXHRcXHRcXHRvZmZzZXQgLT0gYWFsO1xcbiAxMTE6XFx0XFx0XFx0XFx0XFx0ZWFoZC1cXHUwMDNlYXBwQXR0ckxvY2F0aW9uID1cXG4gMTEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNwdV90b19sZTMyKGFhbCArIHNpemUpO1xcbiAxMTM6XFx0XFx0XFx0XFx0fVxcbiAxMTQ6XFx0XFx0XFx0fVxcbiAxMTU6XFx0XFx0XFx0LyogcmV3cml0ZSBDUkMgKyBjaGVja3N1bSBvZiBlYWhkICovXFxuIDExNjpcXHRcXHRcXHRjcmNsZW4gPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpIC0gc2l6ZW9mKHN0cnVjdCB0YWcpO1xcbiAxMTc6XFx0XFx0XFx0ZWFoZC1cXHUwMDNlZGVzY1RhZy5kZXNjQ1JDTGVuZ3RoID0gY3B1X3RvX2xlMTYoY3JjbGVuKTtcXG4gMTE4OlxcdFxcdFxcdGVhaGQtXFx1MDAzZWRlc2NUYWcuZGVzY0NSQyA9IGNwdV90b19sZTE2KGNyY19pdHVfdCgwLCAoY2hhciAqKWVhaGQgK1xcbiAxMTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB0YWcpLCBjcmNsZW4pKTtcXG4gMTIwOlxcdFxcdFxcdGVhaGQtXFx1MDAzZWRlc2NUYWcudGFnQ2hlY2tzdW0gPSB1ZGZfdGFnX2NoZWNrc3VtKFxcdTAwMjZlYWhkLVxcdTAwM2VkZXNjVGFnKTtcXG4gMTIxOlxcdFxcdFxcdGlpbmZvLVxcdTAwM2VpX2xlbkVBdHRyICs9IHNpemU7XFxuIDEyMjpcXHRcXHRcXHRyZXR1cm4gKHN0cnVjdCBnZW5lcmljRm9ybWF0ICopXFx1MDAyNmVhW29mZnNldF07XFxuIDEyMzpcXHRcXHR9XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xcbiAxMjY6XFx0fVxcbiAxMjc6XFx0XFxuIDEyODpcXHRzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdWludDMyX3QgdHlwZSxcXG4gMTI5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHVpbnQ4X3Qgc3VidHlwZSlcXG4gMTMwOlxcdHtcXG4gMTMxOlxcdFxcdHN0cnVjdCBnZW5lcmljRm9ybWF0ICpnYWY7XFxuIDEzMjpcXHRcXHR1aW50OF90ICplYSA9IE5VTEw7XFxuIDEzMzpcXHRcXHR1aW50MzJfdCBvZmZzZXQ7XFxuIDEzNDpcXHRcXHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xcbiAxMzU6XFx0XFxuIDEzNjpcXHRcXHRlYSA9IGlpbmZvLVxcdTAwM2VpX2RhdGE7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGlmIChpaW5mby1cXHUwMDNlaV9sZW5FQXR0cikge1xcbiAxMzk6XFx0XFx0XFx0c3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MgKmVhaGQ7XFxuIDE0MDpcXHRcXHRcXHRlYWhkID0gKHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjICopZWE7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdFxcdC8qIGNoZWNrIGNoZWNrc3VtL2NyYyAqL1xcbiAxNDM6XFx0XFx0XFx0aWYgKGVhaGQtXFx1MDAzZWRlc2NUYWcudGFnSWRlbnQgIT1cXG4gMTQ0OlxcdFxcdFxcdFxcdFxcdGNwdV90b19sZTE2KFRBR19JREVOVF9FQUhEKSB8fFxcbiAxNDU6XFx0XFx0XFx0ICAgIGxlMzJfdG9fY3B1KGVhaGQtXFx1MDAzZWRlc2NUYWcudGFnTG9jYXRpb24pICE9XFxuIDE0NjpcXHRcXHRcXHRcXHRcXHRpaW5mby1cXHUwMDNlaV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0pXFxuIDE0NzpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcXG4gMTQ4OlxcdFxcbiAxNDk6XFx0XFx0XFx0aWYgKHR5cGUgXFx1MDAzYyAyMDQ4KVxcbiAxNTA6XFx0XFx0XFx0XFx0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjKTtcXG4gMTUxOlxcdFxcdFxcdGVsc2UgaWYgKHR5cGUgXFx1MDAzYyA2NTUzNilcXG4gMTUyOlxcdFxcdFxcdFxcdG9mZnNldCA9IGxlMzJfdG9fY3B1KGVhaGQtXFx1MDAzZWltcEF0dHJMb2NhdGlvbik7XFxuIDE1MzpcXHRcXHRcXHRlbHNlXFxuIDE1NDpcXHRcXHRcXHRcXHRvZmZzZXQgPSBsZTMyX3RvX2NwdShlYWhkLVxcdTAwM2VhcHBBdHRyTG9jYXRpb24pO1xcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHRcXHR3aGlsZSAob2Zmc2V0IFxcdTAwM2NcXG4gMTU3OlxcdFxcdFxcdCAgICAgICBpaW5mby1cXHUwMDNlaV9sZW5FQXR0ciAtIHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkpIHtcXG4gMTU4OlxcdFxcdFxcdFxcdHVpbnQzMl90IGF0dHJMZW5ndGg7XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdFxcdFxcdGdhZiA9IChzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqKVxcdTAwMjZlYVtvZmZzZXRdO1xcbiAxNjE6XFx0XFx0XFx0XFx0YXR0ckxlbmd0aCA9IGxlMzJfdG9fY3B1KGdhZi1cXHUwMDNlYXR0ckxlbmd0aCk7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdFxcdFxcdC8qIERldGVjdCB1bmRlcnNpemVkIGVsZW1lbnRzIGFuZCBidWZmZXIgb3ZlcmZsb3dzICovXFxuIDE2NDpcXHRcXHRcXHRcXHRpZiAoYXR0ckxlbmd0aCBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCkgfHxcXG4gMTY1OlxcdFxcdFxcdFxcdCAgICBhdHRyTGVuZ3RoIFxcdTAwM2UgaWluZm8tXFx1MDAzZWlfbGVuRUF0dHIgLSBvZmZzZXQpXFxuIDE2NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0XFx0XFx0aWYgKGxlMzJfdG9fY3B1KGdhZi1cXHUwMDNlYXR0clR5cGUpID09IHR5cGUgXFx1MDAyNlxcdTAwMjZcXG4gMTY5OlxcdFxcdFxcdFxcdFxcdFxcdGdhZi1cXHUwMDNlYXR0clN1YnR5cGUgPT0gc3VidHlwZSlcXG4gMTcwOlxcdFxcdFxcdFxcdFxcdHJldHVybiBnYWY7XFxuIDE3MTpcXHRcXHRcXHRcXHRlbHNlXFxuIDE3MjpcXHRcXHRcXHRcXHRcXHRvZmZzZXQgKz0gYXR0ckxlbmd0aDtcXG4gMTczOlxcdFxcdFxcdH1cXG4gMTc0OlxcdFxcdH1cXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE3NzpcXHR9XFxuIDE3ODpcXHRcXG4gMTc5OlxcdC8qXFxuIDE4MDpcXHQgKiB1ZGZfcmVhZF90YWdnZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjA6MTA6NDMuMTUxMDk2OTY3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTQ3OTMxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBwbGF5aW5nIHRoZSByb2xlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIFVERiBJbm9kZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgc29saWQgZ3Jhc3Agb24gaG93IHRoZSBVREYgZmlsZXN5c3RlbSBoYW5kbGVzIGl0cyBpbm9kZXMsIHNwZWNpZmljYWxseSB0aGUgYHVkZl9yZWFkX2lub2RlYCBhbmQgYHVkZl93cml0ZV9pbm9kZWAgZnVuY3Rpb25zLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgdGhlIGNydWNpYWwgY29udGV4dCBpcyB1c3VhbGx5IGEgZmV3IGxpbmVzIGFyb3VuZCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBmcy91ZGYvaW5vZGUuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgbGluZXMgYmV0d2VlbiAxNjUwIGFuZCAxODgwLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgZGV0YWlsZWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIFVERiBtZXRhZGF0YSBzdHJ1Y3R1cmVzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyByZWFkLCB3cml0dGVuLCBhbmQgcG90ZW50aWFsbHkgY2FjaGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBmdWxsIGZsb3cgd2l0aGluIHRoYXQgcmFuZ2UgaXMga2V5LiBLbm93aW5nIHRoZSBsb2dpYyBpbiB0aGF0IHNtYWxsIHNjb3BlIHNob3VsZCBxdWlja2x5IGFsbG93IGZvciBhIGJldHRlciBncmFzcCBvZiB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDo0NS4yMDU4OTMxMTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3VkZi9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NjA6XFx0XFx0Y2FzZSBJQ0JUQUdfRklMRV9UWVBFX01BSU46XFxuMTY2MTpcXHRcXHRcXHR1ZGZfZGVidWcoXFxcIk1FVEFEQVRBIEZJTEUtLS0tLVxcXFxuXFxcIik7XFxuMTY2MjpcXHRcXHRcXHRicmVhaztcXG4xNjYzOlxcdFxcdGNhc2UgSUNCVEFHX0ZJTEVfVFlQRV9NSVJST1I6XFxuMTY2NDpcXHRcXHRcXHR1ZGZfZGVidWcoXFxcIk1FVEFEQVRBIE1JUlJPUiBGSUxFLS0tLS1cXFxcblxcXCIpO1xcbjE2NjU6XFx0XFx0XFx0YnJlYWs7XFxuMTY2NjpcXHRcXHRjYXNlIElDQlRBR19GSUxFX1RZUEVfQklUTUFQOlxcbjE2Njc6XFx0XFx0XFx0dWRmX2RlYnVnKFxcXCJNRVRBREFUQSBCSVRNQVAgRklMRS0tLS0tXFxcXG5cXFwiKTtcXG4xNjY4OlxcdFxcdFxcdGJyZWFrO1xcbjE2Njk6XFx0XFx0ZGVmYXVsdDpcXG4xNjcwOlxcdFxcdFxcdHVkZl9lcnIoaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCIoaW5vICVsbHUpIGZhaWxlZCB1bmtub3duIGZpbGUgdHlwZT0ldVxcXFxuXFxcIixcXG4xNjcxOlxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgZmUtXFx1MDAzZWljYlRhZy5maWxlVHlwZSk7XFxuMTY3MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNjczOlxcdFxcdH1cXG4xNjc0OlxcdFxcdGlmIChTX0lTQ0hSKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4xNjc1OlxcdFxcdFxcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cXG4xNjc2OlxcdFxcdFxcdFxcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XFxuMTY3NzpcXHRcXG4xNjc4OlxcdFxcdFxcdGlmIChJU19FUlIoZHNlYSkpIHtcXG4xNjc5OlxcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIoZHNlYSk7XFxuMTY4MDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xNjgxOlxcdFxcdFxcdH1cXG4xNjgyOlxcdFxcdFxcdC8qIERldmljZSBpbm9kZXMgbXVzdCBoYXZlIGEgZGV2aWNlIHNwZWMgYXR0cmlidXRlICovXFxuMTY4MzpcXHRcXHRcXHRpZiAoIWRzZWEgfHwgIXVkZl9kZXZpY2Vfc3BlY192YWxpZChkc2VhKSkge1xcbjE2ODQ6XFx0XFx0XFx0XFx0cmV0ID0gLUVGU0NPUlJVUFRFRDtcXG4xNjg1OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE2ODY6XFx0XFx0XFx0fVxcbjE2ODc6XFx0XFx0XFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9tb2RlLFxcbjE2ODg6XFx0XFx0XFx0XFx0XFx0TUtERVYobGUzMl90b19jcHUoZHNlYS1cXHUwMDNlbWFqb3JEZXZpY2VJZGVudCksXFxuMTY4OTpcXHRcXHRcXHRcXHRcXHQgICAgICBsZTMyX3RvX2NwdShkc2VhLVxcdTAwM2VtaW5vckRldmljZUlkZW50KSkpO1xcbjE2OTA6XFx0XFx0fVxcbjE2OTE6XFx0XFx0cmV0ID0gMDtcXG4xNjkyOlxcdG91dDpcXG4xNjkzOlxcdFxcdGJyZWxzZShiaCk7XFxuMTY5NDpcXHRcXHRyZXR1cm4gcmV0O1xcbjE2OTU6XFx0fVxcbjE2OTY6XFx0XFxuMTY5NzpcXHRzdGF0aWMgaW50IHVkZl9hbGxvY19pX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHNpemUpXFxuMTY5ODpcXHR7XFxuMTY5OTpcXHRcXHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xcbjE3MDA6XFx0XFx0aWluZm8tXFx1MDAzZWlfZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuMTcwMTpcXHRcXHRpZiAoIWlpbmZvLVxcdTAwM2VpX2RhdGEpXFxuMTcwMjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNzAzOlxcdFxcdHJldHVybiAwO1xcbjE3MDQ6XFx0fVxcbjE3MDU6XFx0XFxuMTcwNjpcXHRzdGF0aWMgdW1vZGVfdCB1ZGZfY29udmVydF9wZXJtaXNzaW9ucyhzdHJ1Y3QgZmlsZUVudHJ5ICpmZSlcXG4xNzA3OlxcdHtcXG4xNzA4OlxcdFxcdHVtb2RlX3QgbW9kZTtcXG4xNzA5OlxcdFxcdHVpbnQzMl90IHBlcm1pc3Npb25zO1xcbjE3MTA6XFx0XFx0dWludDMyX3QgZmxhZ3M7XFxuMTcxMTpcXHRcXG4xNzEyOlxcdFxcdHBlcm1pc3Npb25zID0gbGUzMl90b19jcHUoZmUtXFx1MDAzZXBlcm1pc3Npb25zKTtcXG4xNzEzOlxcdFxcdGZsYWdzID0gbGUxNl90b19jcHUoZmUtXFx1MDAzZWljYlRhZy5mbGFncyk7XFxuMTcxNDpcXHRcXG4xNzE1OlxcdFxcdG1vZGUgPVxcdCgocGVybWlzc2lvbnMpIFxcdTAwMjYgMDAwNykgfFxcbjE3MTY6XFx0XFx0XFx0KChwZXJtaXNzaW9ucyBcXHUwMDNlXFx1MDAzZSAyKSBcXHUwMDI2IDAwNzApIHxcXG4xNzE3OlxcdFxcdFxcdCgocGVybWlzc2lvbnMgXFx1MDAzZVxcdTAwM2UgNCkgXFx1MDAyNiAwNzAwKSB8XFxuMTcxODpcXHRcXHRcXHQoKGZsYWdzIFxcdTAwMjYgSUNCVEFHX0ZMQUdfU0VUVUlEKSA/IFNfSVNVSUQgOiAwKSB8XFxuMTcxOTpcXHRcXHRcXHQoKGZsYWdzIFxcdTAwMjYgSUNCVEFHX0ZMQUdfU0VUR0lEKSA/IFNfSVNHSUQgOiAwKSB8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjQ1LjIwNjA4NjQ1MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODk1MDY0ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgYHVkZl93cml0ZV9pbm9kZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IFVERiBmaWxlIHN5c3RlbSBpbnRlcm5hbHMgYWdhaW4uIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0LCBJIHRoaW5rIHdlIHNob3VsZCBmb2N1cyBvbiB0aGUgYHVkZl93cml0ZV9pbm9kZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgbGV0J3Mgem9vbSBpbiBvbiB0aGUgY29kZSBiZXR3ZWVuIGxpbmVzIDE4MjAgYW5kIDE4ODAuIFRoYXQgc2VjdGlvbiBsaWtlbHkgaGFuZGxlcyB0aGUgY29yZSBsb2dpYyBvZiB3cml0aW5nIGlub2RlIGRhdGEgd2l0aGluIHRoZSBVREYgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gVW5kZXJzdGFuZGluZyB0aGF0IHNlY3Rpb24gd2lsbCBob3BlZnVsbHkgZ2l2ZSBtZSBhIG11Y2ggYmV0dGVyIHBlcnNwZWN0aXZlIG9uIGhvdyB0aGUgZmlsZXN5c3RlbSBhY3R1YWxseSBmdW5jdGlvbnMsIG5vdCBqdXN0IHRoZW9yZXRpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDo0Ny4xMDExNTM5MjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3VkZi9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MzA6XFx0XFxuMTgzMTpcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiBpbm9kZS1cXHUwMDNlaV9ubGluayBcXHUwMDNlIDApXFxuMTgzMjpcXHRcXHRcXHRmZS1cXHUwMDNlZmlsZUxpbmtDb3VudCA9IGNwdV90b19sZTE2KGlub2RlLVxcdTAwM2VpX25saW5rIC0gMSk7XFxuMTgzMzpcXHRcXHRlbHNlIHtcXG4xODM0OlxcdFxcdFxcdGlmIChpaW5mby1cXHUwMDNlaV9oaWRkZW4pXFxuMTgzNTpcXHRcXHRcXHRcXHRmZS1cXHUwMDNlZmlsZUxpbmtDb3VudCA9IGNwdV90b19sZTE2KDApO1xcbjE4MzY6XFx0XFx0XFx0ZWxzZVxcbjE4Mzc6XFx0XFx0XFx0XFx0ZmUtXFx1MDAzZWZpbGVMaW5rQ291bnQgPSBjcHVfdG9fbGUxNihpbm9kZS1cXHUwMDNlaV9ubGluayk7XFxuMTgzODpcXHRcXHR9XFxuMTgzOTpcXHRcXG4xODQwOlxcdFxcdGZlLVxcdTAwM2VpbmZvcm1hdGlvbkxlbmd0aCA9IGNwdV90b19sZTY0KGlub2RlLVxcdTAwM2VpX3NpemUpO1xcbjE4NDE6XFx0XFxuMTg0MjpcXHRcXHRpZiAoU19JU0NIUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTg0MzpcXHRcXHRcXHRzdHJ1Y3QgcmVnaWQgKmVpZDtcXG4xODQ0OlxcdFxcdFxcdHN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID1cXG4xODQ1OlxcdFxcdFxcdFxcdChzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7XFxuMTg0NjpcXHRcXG4xODQ3OlxcdFxcdFxcdC8qIFZhbGlkaXR5IG9mIGV4dGVuZGVkIGF0dHJzIHdhcyBjaGVja2VkIG9uIGxvYWQgKi9cXG4xODQ4OlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoSVNfRVJSKGRzZWEpKSkge1xcbjE4NDk6XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihkc2VhKTtcXG4xODUwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xODUxOlxcdFxcdFxcdH1cXG4xODUyOlxcdFxcdFxcdGlmICghZHNlYSkge1xcbjE4NTM6XFx0XFx0XFx0XFx0ZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKVxcbjE4NTQ6XFx0XFx0XFx0XFx0XFx0dWRmX2FkZF9leHRlbmRlZGF0dHIoaW5vZGUsXFxuMTg1NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgK1xcbjE4NTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IHJlZ2lkKSwgMTIsIDB4Myk7XFxuMTg1NzpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGRzZWEpKSB7XFxuMTg1ODpcXHRcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGRzZWEpO1xcbjE4NTk6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjE4NjA6XFx0XFx0XFx0XFx0fVxcbjE4NjE6XFx0XFx0XFx0XFx0ZHNlYS1cXHUwMDNlYXR0clR5cGUgPSBjcHVfdG9fbGUzMigxMik7XFxuMTg2MjpcXHRcXHRcXHRcXHRkc2VhLVxcdTAwM2VhdHRyU3VidHlwZSA9IDE7XFxuMTg2MzpcXHRcXHRcXHRcXHRkc2VhLVxcdTAwM2VhdHRyTGVuZ3RoID0gY3B1X3RvX2xlMzIoXFxuMTg2NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICtcXG4xODY1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgcmVnaWQpKTtcXG4xODY2OlxcdFxcdFxcdFxcdGRzZWEtXFx1MDAzZWltcFVzZUxlbmd0aCA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgcmVnaWQpKTtcXG4xODY3OlxcdFxcdFxcdH1cXG4xODY4OlxcdFxcdFxcdGVpZCA9IChzdHJ1Y3QgcmVnaWQgKilkc2VhLVxcdTAwM2VpbXBVc2U7XFxuMTg2OTpcXHRcXHRcXHRtZW1zZXQoZWlkLCAwLCBzaXplb2YoKmVpZCkpO1xcbjE4NzA6XFx0XFx0XFx0c3RyY3B5KGVpZC1cXHUwMDNlaWRlbnQsIFVERl9JRF9ERVZFTE9QRVIpO1xcbjE4NzE6XFx0XFx0XFx0ZWlkLVxcdTAwM2VpZGVudFN1ZmZpeFswXSA9IFVERl9PU19DTEFTU19VTklYO1xcbjE4NzI6XFx0XFx0XFx0ZWlkLVxcdTAwM2VpZGVudFN1ZmZpeFsxXSA9IFVERl9PU19JRF9MSU5VWDtcXG4xODczOlxcdFxcdFxcdGRzZWEtXFx1MDAzZW1ham9yRGV2aWNlSWRlbnQgPSBjcHVfdG9fbGUzMihpbWFqb3IoaW5vZGUpKTtcXG4xODc0OlxcdFxcdFxcdGRzZWEtXFx1MDAzZW1pbm9yRGV2aWNlSWRlbnQgPSBjcHVfdG9fbGUzMihpbWlub3IoaW5vZGUpKTtcXG4xODc1OlxcdFxcdH1cXG4xODc2OlxcdFxcbjE4Nzc6XFx0XFx0aWYgKGlpbmZvLVxcdTAwM2VpX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCKVxcbjE4Nzg6XFx0XFx0XFx0bGJfcmVjb3JkZWQgPSAwOyAvKiBObyBleHRlbnRzID1cXHUwMDNlIG5vIGJsb2NrcyEgKi9cXG4xODc5OlxcdFxcdGVsc2VcXG4xODgwOlxcdFxcdFxcdGxiX3JlY29yZGVkID1cXG4xODgxOlxcdFxcdFxcdFxcdChpbm9kZS1cXHUwMDNlaV9ibG9ja3MgKyAoMSBcXHUwMDNjXFx1MDAzYyAoYmxvY2tzaXplX2JpdHMgLSA5KSkgLSAxKSBcXHUwMDNlXFx1MDAzZVxcbjE4ODI6XFx0XFx0XFx0XFx0KGJsb2Nrc2l6ZV9iaXRzIC0gOSk7XFxuMTg4MzpcXHRcXG4xODg0OlxcdFxcdGlmIChpaW5mby1cXHUwMDNlaV9lZmUgPT0gMCkge1xcbjE4ODU6XFx0XFx0XFx0bWVtY3B5KGJoLVxcdTAwM2ViX2RhdGEgKyBzaXplb2Yoc3RydWN0IGZpbGVFbnRyeSksXFxuMTg4NjpcXHRcXHRcXHQgICAgICAgaWluZm8tXFx1MDAzZWlfZGF0YSxcXG4xODg3OlxcdFxcdFxcdCAgICAgICBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgLSBzaXplb2Yoc3RydWN0IGZpbGVFbnRyeSkpO1xcbjE4ODg6XFx0XFx0XFx0ZmUtXFx1MDAzZWxvZ2ljYWxCbG9ja3NSZWNvcmRlZCA9IGNwdV90b19sZTY0KGxiX3JlY29yZGVkKTtcXG4xODg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMDoxMDo0Ny4xMDEzNTAwNzFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzY0OTU1MzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVURGIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZ2h0ZW5pbmcgdXAgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGluZyBpbiB0aGUgVURGIGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSB0byBwcmV2ZW50IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgcmVhZHMuIEkgc2VlIHNldmVyYWwga2V5IGNoYW5nZXM6IGB1ZGZfZGV2aWNlX3NwZWNfdmFsaWQoKWAgaXMgZ2V0dGluZyBtb3JlIHJvYnVzdCB3aXRoIGl0cyB2YWxpZGF0aW9uLCBjaGVja2luZyBsZW5ndGhzIGFuZCBtYWtpbmcgc3VyZSBgYXR0cl9sZW5ndGhgLCBgaW1wX3VzZV9sZW5ndGhgLCBhbmQgdGhlIHNpemVzIG9mIHRoZSBzdHJ1Y3R1cmVzIHRoZXkgcmVsYXRlIHRvIGFyZSBhbGwgc2FuZS4gIGB1ZGZfcmVhZF9pbm9kZSgpYCBhbmQgYHVkZl93cml0ZV9pbm9kZSgpYCBhcmUgbm93IGV4cGxpY2l0bHkgaGFuZGxpbmcgdGhlIGVycm9yIHJldHVybnMgZnJvbSBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgYW5kIGB1ZGZfYWRkX2V4dGVuZGVkYXR0cigpYCwgd2hpY2ggaXMgYSBnb29kIGRlZmVuc2l2ZSBtZWFzdXJlLiAgUmV0dXJuaW5nIGBFUlJfUFRSKC1FRlNDT1JSVVBURUQpYCBpbnN0ZWFkIG9mIGBOVUxMYCBvciBzaWxlbnRseSBicmVha2luZyBvdXQgaXMgYWxzbyBhIGdyZWF0IHN0ZXAgdG93YXJkcyBwcm9wZXIgZXJyb3IgcmVwb3J0aW5nLiAgQW5kIHRoYXQgYm91bmRzIGNoZWNrIGZpeCBpbiBgdWRmX2dldF9leHRlbmRlZGF0dHIoKWAgaXMgY3J1Y2lhbCAtIHRoYXQgcG90ZW50aWFsIG92ZXJmbG93IHdhcyBhIHRpY2tpbmcgdGltZSBib21iLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogS01TQU4uICBXZSBuZWVkIHRvIGV2YWx1YXRlIGlmIHdlIG5lZWQgdG8gcnVuIGEgS01TQU4gc2Vzc2lvbiB3aXRoIHRoaXMuICBLQVNBTiBpcyBnb2luZyB0byBjYXRjaCB0aGUgb3V0LW9mLWJvdW5kcyBzdHVmZiB0aGF0IHdlIGFyZSBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBpbiB0aGUgcGF0Y2gsIHRoZXNlIGFyZSBlc3NlbnRpYWxseSBmaWxlc3lzdGVtIGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzIHRoYXQgYXJlIGJlaW5nIHByb3RlY3RlZCBhZ2FpbnN0LiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gTm8gY29waWVzIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gYnJhbmNoaW5nIG9yIGNvbnRyb2wgZmxvdy4gYHVkZl93cml0ZV9pbm9kZWAgaXMgZXZlbiBleHBsaWNpdGx5IGluaXRpYWxpemluZyBgZWlkYCB3aXRoIGBtZW1zZXQoKWAuIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZ2h0ZW5pbmcgdXAgZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB2YWxpZGF0aW5nIGRpc2sgZGF0YSwgbm90IGludHJvZHVjaW5nIG5ldyBzb3VyY2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBDb3JydXB0ZWQgZGlzayByZWFkcyB3aWxsIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBlcnJvciBjaGVja2luZy5cblxuSSdtIHByZXR0eSBjb25maWRlbnQgdGhhdCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4gIEl0IHBlcmZlY3RseSBtYXRjaGVzIG91ciBlc3RhYmxpc2hlZCBjcml0ZXJpYTogIHRoZSBtYWluIHJpc2tzIGFyZSBvdXQtb2YtYm91bmRzLCBvdmVyZmxvd3MsIGFuZCBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYWxsIGlzc3VlcyB0aGF0IEtBU0FOIHNob3VsZCBoYW5kbGUuIEFsbCB0aGUgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIGFyZSBmdWxseSBpbml0aWFsaXplZCwgYW5kIHRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBiZWluZyBpbnRyb2R1Y2VkIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzg2LCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIwOjEwOjU0Ljc1MDkwNjY4MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzYW5pdHkgYW5kIGJvdW5kcyBjaGVja2luZyBmb3IgVURGIGZpbGVzeXN0ZW0gZXh0ZW5kZWQgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5IGZvciBkZXZpY2VTcGVjIGF0dHJpYnV0ZXMgb24gc3BlY2lhbCBkZXZpY2UgaW5vZGVzIChjaGFyYWN0ZXIvYmxvY2sgZGV2aWNlcykuIEl0IGludHJvZHVjZXMgYHVkZl9kZXZpY2Vfc3BlY192YWxpZCgpYCB0byB2YWxpZGF0ZSBhdHRyaWJ1dGUgYW5kIGltcGxlbWVudGF0aW9uLXVzZSBsZW5ndGhzIGFnYWluc3QgYnVmZmVyIGJvdW5kcywgcHJvcGVybHkgaGFuZGxlcyBgRVJSX1BUUmAgZXJyb3IgcmV0dXJucyBmcm9tIGB1ZGZfZ2V0X2V4dGVuZGVkYXR0cigpYCBhbmQgYHVkZl9hZGRfZXh0ZW5kZWRhdHRyKClgLCBhbmQgZml4ZXMgbG9vcCBib3VuZGFyeSBjaGVja3Mgd2hlbiBpdGVyYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcywgd2hpY2ggZmFsbCB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHNhbml0eSBhbmQgYm91bmRzIGNoZWNraW5nIGZvciBVREYgZmlsZXN5c3RlbSBleHRlbmRlZCBhdHRyaWJ1dGVzLCBzcGVjaWZpY2FsbHkgZm9yIGRldmljZVNwZWMgYXR0cmlidXRlcyBvbiBzcGVjaWFsIGRldmljZSBpbm9kZXMgKGNoYXJhY3Rlci9ibG9jayBkZXZpY2VzKS4gSXQgaW50cm9kdWNlcyBgdWRmX2RldmljZV9zcGVjX3ZhbGlkKClgIHRvIHZhbGlkYXRlIGF0dHJpYnV0ZSBhbmQgaW1wbGVtZW50YXRpb24tdXNlIGxlbmd0aHMgYWdhaW5zdCBidWZmZXIgYm91bmRzLCBwcm9wZXJseSBoYW5kbGVzIGBFUlJfUFRSYCBlcnJvciByZXR1cm5zIGZyb20gYHVkZl9nZXRfZXh0ZW5kZWRhdHRyKClgIGFuZCBgdWRmX2FkZF9leHRlbmRlZGF0dHIoKWAsIGFuZCBmaXhlcyBsb29wIGJvdW5kYXJ5IGNoZWNrcyB3aGVuIGl0ZXJhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzLlxcblxcblRoZXNlIGNoYW5nZXMgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgb24gY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLCB3aGljaCBmYWxsIHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow76xn7[1] Phase: Succeeded StartedAt: 2026-09-01 20:11:07 +0000 UTC FinishedAt: 2026-09-01 20:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 20:11:07 +0000 UTC FinishedAt: 2026-09-01 20:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2] Phase: Succeeded StartedAt: 2026-09-01 20:11:07 +0000 UTC FinishedAt: 2026-09-01 23:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-01 20:11:08 +0000 UTC FinishedAt: 2026-09-01 23:55:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-01 20:11:08 +0000 UTC FinishedAt: 2026-09-01 20:11:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-01 20:11:08 +0000 UTC FinishedAt: 2026-09-01 20:11:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflow76xn7/series-workflow76xn7-convert-artifact-4292862547/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-01 20:11:21 +0000 UTC FinishedAt: 2026-09-01 20:32:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-01 20:11:21 +0000 UTC FinishedAt: 2026-09-01 20:32:22 +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:*be24c711-9993-4bfd-89c1-89f94049f3e2,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-workflow76xn7/series-workflow76xn7-convert-artifact-4292862547/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": "45a19774-4cc6-4c2b-9c25-f4e4d672ffb3", "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-workflow76xn7/series-workflow76xn7-build-action-3486459265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-01 20:11:21 +0000 UTC FinishedAt: 2026-09-01 20:32:12 +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:*be24c711-9993-4bfd-89c1-89f94049f3e2,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-workflow76xn7/series-workflow76xn7-convert-artifact-4292862547/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": "45a19774-4cc6-4c2b-9c25-f4e4d672ffb3", "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-workflow76xn7/series-workflow76xn7-build-action-3486459265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-01 20:32:22 +0000 UTC FinishedAt: 2026-09-01 20:32:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-01 20:32:22 +0000 UTC FinishedAt: 2026-09-01 20:32:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-01 20:32:22 +0000 UTC FinishedAt: 2026-09-01 20:32:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-01 20:32:22 +0000 UTC FinishedAt: 2026-09-01 20:32:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflow76xn7/series-workflow76xn7-convert-artifact-152064586/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-01 20:32:32 +0000 UTC FinishedAt: 2026-09-01 20:34:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-01 20:32:32 +0000 UTC FinishedAt: 2026-09-01 20:34:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*45a19774-4cc6-4c2b-9c25-f4e4d672ffb3,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-workflow76xn7/series-workflow76xn7-build-action-3486459265/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-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-01 20:34:25 +0000 UTC FinishedAt: 2026-09-01 20:34:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-01 20:34:25 +0000 UTC FinishedAt: 2026-09-01 20:34:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-01 20:34:25 +0000 UTC FinishedAt: 2026-09-01 20:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-01 20:34:25 +0000 UTC FinishedAt: 2026-09-01 20:50:26 +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:*be24c711-9993-4bfd-89c1-89f94049f3e2,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-workflow76xn7/series-workflow76xn7-convert-artifact-152064586/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": "1582fb5d-1b64-49cd-9be4-259cef921d17", "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-workflow76xn7/series-workflow76xn7-build-action-979940974/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-01 20:34:25 +0000 UTC FinishedAt: 2026-09-01 20:50:16 +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:*be24c711-9993-4bfd-89c1-89f94049f3e2,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-workflow76xn7/series-workflow76xn7-convert-artifact-152064586/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": "1582fb5d-1b64-49cd-9be4-259cef921d17", "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-workflow76xn7/series-workflow76xn7-build-action-979940974/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-01 20:50:26 +0000 UTC FinishedAt: 2026-09-01 20:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-01 20:50:26 +0000 UTC FinishedAt: 2026-09-01 20:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-01 20:50:26 +0000 UTC FinishedAt: 2026-09-01 20:52:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-01 20:50:26 +0000 UTC FinishedAt: 2026-09-01 20:52:07 +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:*1582fb5d-1b64-49cd-9be4-259cef921d17,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-workflow76xn7/series-workflow76xn7-build-action-979940974/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-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-01 20:52:17 +0000 UTC FinishedAt: 2026-09-01 23:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-01 20:52:17 +0000 UTC FinishedAt: 2026-09-01 23:55:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*45a19774-4cc6-4c2b-9c25-f4e4d672ffb3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1582fb5d-1b64-49cd-9be4-259cef921d17,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-workflow76xn7/series-workflow76xn7-build-action-3486459265/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-workflow76xn7/series-workflow76xn7-build-action-979940974/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-01 20:52:17 +0000 UTC FinishedAt: 2026-09-01 20:52:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-01 20:52:17 +0000 UTC FinishedAt: 2026-09-01 20:52:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow76xn7/series-workflow76xn7-convert-artifact-1079529951/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-01 20:52:17 +0000 UTC FinishedAt: 2026-09-01 20:52:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-01 20:52:17 +0000 UTC FinishedAt: 2026-09-01 20:52:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-01 20:52:17 +0000 UTC FinishedAt: 2026-09-01 20:52:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-01 20:52:27 +0000 UTC FinishedAt: 2026-09-01 23:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76xn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["udf_get_extendedattr","udf_add_extendedattr","udf_write_inode","__udf_iget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDF_FS"],"series_id":"9fc80e06-681b-4ad0-8a1f-7f557f12264b","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-01 20:52:27 +0000 UTC FinishedAt: 2026-09-01 23:54:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*45a19774-4cc6-4c2b-9c25-f4e4d672ffb3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1582fb5d-1b64-49cd-9be4-259cef921d17,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-workflow76xn7/series-workflow76xn7-build-action-3486459265/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-workflow76xn7/series-workflow76xn7-build-action-979940974/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-workflow76xn7/series-workflow76xn7-convert-artifact-1079529951/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,}