Name: series-workflowtk5tv Phase: Succeeded StartedAt: 2026-07-20 03:24:14 +0000 UTC FinishedAt: 2026-07-20 05:46:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[0] Phase: Succeeded StartedAt: 2026-07-20 03:24:14 +0000 UTC FinishedAt: 2026-07-20 03:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 03:24:14 +0000 UTC FinishedAt: 2026-07-20 03:34:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DSA_MXL862" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DSA_MXL862" ], "series_id": "1cbb138f-85fc-4de6-a880-37d3f262a0c8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mxl862xx_devlink_flash_update", "mxl862xx_flash_validate", "mxl862xx_flash_firmware", "dsa_devlink_flash_update" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9EU0FfTVhMODYyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUmIzM0OywKICAgICYjMzQ7bXhsODYyeHhfZmxhc2hfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bXhsODYyeHhfZmxhc2hfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7ZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB2aWEgZGV2bGluayB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCBpbmNsdWRpbmcgcGFyc2luZyBvZiB0aGUgZmlybXdhcmUgZmlsZSB3aGljaCBjb21lcyBmcm9tIHVzZXJzcGFjZS4gSXQgYWxzbyBhZGRzIGEgbmV3IGRldmxpbmsgY2FsbGJhY2sgdG8gdGhlIERTQSBjb3JlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTZhZGYyYmI3ZjNjNjNmMTk0OWY2OWUyNjM2OGYyMTBjNWU3MTIzN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDAzOjMzOjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZVxuaW5kZXggYTdiZTBlNjY2OWRmYTUuLmJjY2FjMGQwZjcwM2Y2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcbkBAIC0xLDMgJiM0MzsxLDMgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSAmIzQzOz0gbXhsODYyeHhfZHNhLm9cbi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm9cbiYjNDM7bXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmhcbmluZGV4IGM4N2E5NTVjMTNjNDhlLi5lMmFhMjkzNGU5ZTE2MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXG5AQCAtNzAsNiAmIzQzOzcwLDcgQEBcbiAjZGVmaW5lIElOVF9HUEhZX1JFQURcdFx0XHQoR1BZX0dQWTJYWF9NQUdJQyAmIzQzOyAweDEpXG4gI2RlZmluZSBJTlRfR1BIWV9XUklURVx0XHRcdChHUFlfR1BZMlhYX01BR0lDICYjNDM7IDB4MilcbiBcbiYjNDM7I2RlZmluZSBTWVNfTUlTQ19GV19VUERBVEVcdFx0KFNZU19NSVNDX01BR0lDICYjNDM7IDB4MSlcbiAjZGVmaW5lIFNZU19NSVNDX0ZXX1ZFUlNJT05cdFx0KFNZU19NSVNDX01BR0lDICYjNDM7IDB4MilcbiBcbiAjZGVmaW5lIE1YTDg2MlhYX1hQQ1NfUENTX0NPTkZJR1x0KE1YTDg2MlhYX1hQQ1NfTUFHSUMgJiM0MzsgMHgxKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmExZGUyNDdjMmYwNWRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXG5AQCAtMCwwICYjNDM7MSw0ODIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4XG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNSBEYW5pZWwgR29sbGUgXHUwMDNjZGFuaWVsQG1ha3JvdG9waWEub3JnXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMzIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtYXBpLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtY21kLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtZncuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1ob3N0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIFNCIFBESSByZWdpc3RlcnMgKGNsYXVzZS0yMiBTTURJTyBhZGRyZXNzIHNwYWNlKSAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMXHRcdDB4ZTEwMFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9BRERSXHRcdDB4ZTEwMVxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9EQVRBXHRcdDB4ZTEwMlxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFUXHRcdDB4ZTEwM1xuJiM0MztcbiYjNDM7LyogU0IgUERJIENUUkwgbW9kZXMgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1RcdDB4MDBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUlx0MHgwMlxuJiM0MztcbiYjNDM7LyogU0IgUERJIGhhbmRzaGFrZSBtYWdpYyAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRUFEWVx0XHQweGM1NWNcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfU1RBUlRcdFx0MHhmNDhmXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0VORFx0XHQweDNjYzNcbiYjNDM7XG4mIzQzOy8qIEZpcm13YXJlIHRyYW5zZmVyIGdlb21ldHJ5ICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfSERSX1NJWkVcdFx0MjBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX0hBTEZcdFx0MTYzODRcdC8qIHdvcmRzIHBlciBoYWxmLWJhbmsgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX1NMSUNFXHRcdDMyNzYwXHQvKiB3b3JkcyBwZXIgZnVsbCBzbGljZSAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX1NCMV9BRERSXHRcdDB4NzgwMFx0LyogU0IxIHdvcmQgYWRkcmVzcyAqL1xuJiM0MztcbiYjNDM7LyogVGltZW91dHMgKGdlbmVyb3VzIHVwcGVyIGJvdW5kcykgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TXHQzMDAwMFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TXHQ1MDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NU1x0MzAwMDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NU1x0MTIwMDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfUkVCT09UX0RFTEFZX01TXHQ1MDAwXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBteGw4NjJ4eF9zYl9wZGlfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xuJiM0MztcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuJiM0MztcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4mIzQzO1x0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsXG4mIzQzO1x0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgZXhwZWN0ZWQsXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKCh1MTYpcmV0ID09IGV4cGVjdGVkKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHVzbGVlcF9yYW5nZSgxMDAwMCwgMTEwMDApO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxuJiM0MztcdFx0XHRcdCAgICAgICB1MzIgZGF0YV93cml0dGVuKVxuJiM0Mzt7XG4mIzQzO1x0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULCBkYXRhX3dyaXR0ZW4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLFxuJiM0MztcdFx0XHRcdFx0IE1YTDg2MlhYX0ZXX1dSSVRFX1RJTUVPVVRfTVMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBteGw4NjJ4eF9mbGFzaF9ub3RpZnkoc3RydWN0IGRldmxpbmsgKmRsLCBjb25zdCBjaGFyICpzdGF0dXMsXG4mIzQzO1x0XHRcdFx0ICB1MzIgZG9uZSwgdTMyIHRvdGFsKVxuJiM0Mzt7XG4mIzQzO1x0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgc3RhdHVzLCBOVUxMLCBkb25lLCB0b3RhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QgLSBjaGVjayB3aGV0aGVyIHRoZSBzd2l0Y2ggc2l0cyBpbiBNQ1Vib290XG4mIzQzOyAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBkYXRhXG4mIzQzOyAqXG4mIzQzOyAqIE1DVWJvb3Qgc2lnbmFscyByZWFkaW5lc3MgZm9yIGEgZmlybXdhcmUgZG93bmxvYWQgd2l0aCB0aGUgU0IgUERJXG4mIzQzOyAqIHJlYWR5IG1hZ2ljOyBvbmx5IHRoZSBjbGF1c2UtMjIgU01ESU8gaW50ZXJmYWNlIHdvcmtzIGluIHRoaXMgc3RhdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBNQ1Vib290IGlzIHdhaXRpbmcgZm9yIGEgZmlybXdhcmUgZG93bmxvYWQuXG4mIzQzOyAqL1xuJiM0Mztib29sIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0ID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogZGV2aWNlX3JlcHJvYmUoKSAtXHUwMDNlIHJlbW92ZSgpIGZyZWVzIHByaXYgd2hpbGUgdGhlIHdvcmsgcnVucywgc29cbiYjNDM7ICogdGhlIHdvcmsgc3RydWN0IGNhbm5vdCBsaXZlIGluIG14bDg2Mnh4X3ByaXYuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZSB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcms7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBteGw4NjJ4eF9yZXByb2JlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmUgKnJlcHJvYmUgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlLCBkd29yay53b3JrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldmljZV9yZXByb2JlKHJlcHJvYmUtXHUwMDNlZGV2KSlcbiYjNDM7XHRcdGRldl9lcnIocmVwcm9iZS1cdTAwM2VkZXYsIFwmIzM0O3JlcHJvYmUgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRwdXRfZGV2aWNlKHJlcHJvYmUtXHUwMDNlZGV2KTtcbiYjNDM7XHRrZnJlZShyZXByb2JlKTtcbiYjNDM7XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTUNVYm9vdCBmaXJtd2FyZSBpbWFnZSBoZWFkZXIgKi9cbiYjNDM7c3RydWN0IG14bDg2Mnh4X2Z3X2hkciB7XG4mIzQzO1x0X19sZTMyIGltYWdlX3R5cGU7XG4mIzQzO1x0X19sZTMyIGltYWdlX3NpemVfMTtcbiYjNDM7XHRfX2xlMzIgaW1hZ2VfY2hlY2tzdW1fMTtcbiYjNDM7XHRfX2xlMzIgaW1hZ2Vfc2l6ZV8yO1xuJiM0MztcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuJiM0MztcdFx0XHRcdCAgIHUzMiAqcGF5bG9hZF9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqaGRyO1xuJiM0MztcdHUzMiBzaXplMSwgc2l6ZTIsIHRvdGFsO1xuJiM0MztcdGNvbnN0IHU4ICpwYXlsb2FkO1xuJiM0MztcdHUzMiBjcmM7XG4mIzQzO1xuJiM0MztcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1x0cGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgJiM0MzsgTVhMODYyWFhfRldfSERSX1NJWkU7XG4mIzQzO1x0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2Vfc2l6ZV8xKTtcbiYjNDM7XHRzaXplMiA9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9zaXplXzIpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUxLCBzaXplMiwgXHUwMDI2dG90YWwpIHx8XG4mIzQzO1x0ICAgIHRvdGFsIFx1MDAzZSBmdy1cdTAwM2VzaXplIC0gTVhMODYyWFhfRldfSERSX1NJWkUpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgdG9vIHNtYWxsIGZvciBkZWNsYXJlZCBzaXplXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0b3RhbCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZTEpIHtcbiYjNDM7XHRcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcbiYjNDM7XHRcdGlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWltYWdlX2NoZWNrc3VtXzEpKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmbGFzaDogaW1hZ2UgMSBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8xKSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUyKSB7XG4mIzQzO1x0XHRjcmMgPSB+Y3JjMzJfbGUofjBVLCBwYXlsb2FkICYjNDM7IHNpemUxLCBzaXplMik7XG4mIzQzO1x0XHRpZiAoY3JjICE9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8yKSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7Zmxhc2g6IGltYWdlIDIgQ1JDIG1pc21hdGNoIChnb3QgJTA4eCwgZXhwZWN0ZWQgJTA4eClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0Y3JjLCBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMikpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpwYXlsb2FkX3NpemUgPSB0b3RhbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfZmxhc2hfZmlybXdhcmUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiYjNDM7XHRcdFx0XHQgICB1MzIgcGF5bG9hZF9zaXplLCBzdHJ1Y3QgZGV2bGluayAqZGwpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgJiM0MzsgTVhMODYyWFhfRldfSERSX1NJWkU7XG4mIzQzO1x0dTMyIHdvcmRfaWR4ID0gMCwgZGF0YV93cml0dGVuID0gMCwgaWR4ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5leHRfbm90aWZ5ID0gMDtcbiYjNDM7XHR1MTYgd29yZCwgZmRhdGE7XG4mIzQzO1x0aW50IHJldCwgaTtcbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAxOiByZWJvb3QgdGhlIGZpcm13YXJlIGludG8gTUNVYm9vdCByZXNjdWUgbW9kZSAqL1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VyZXNjdWVfbW9kZSkge1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfYXBpX3dyYXAocHJpdiwgU1lTX01JU0NfRldfVVBEQVRFLCBOVUxMLCAwLFxuJiM0MztcdFx0XHRcdFx0ZmFsc2UsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O2ZsYXNoOiBGV19VUERBVEUgY29tbWFuZCBmYWlsZWQ6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRmFpbHVyZXMgZnJvbSBoZXJlIG9uIG11c3QgZ28gdGhyb3VnaCBlbmRfbWFnaWMgc28gTUNVYm9vdFxuJiM0MztcdCAqIHJlYm9vdHMgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMjogd2FpdCBmb3IgYm9vdGxvYWRlciByZWFkeSAqL1xuJiM0MztcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCYjMzQ7V2FpdGluZyBmb3IgYm9vdGxvYWRlclwmIzM0OywgMCwgMCk7XG4mIzQzO1x0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxuJiM0MztcdFx0XHRcdFx0TVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogYm9vdGxvYWRlciBub3QgcmVhZHk6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdGdvdG8gZW5kX21hZ2ljO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAzOiBzdGFydCBoYW5kc2hha2UgKi9cbiYjNDM7XHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbiYjNDM7XHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfU1RBUlQpO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVJUICYjNDM7IDEsXG4mIzQzO1x0XHRcdFx0XHRNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogc3RhcnQgaGFuZHNoYWtlIGZhaWxlZDogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDQ6IHRyYW5zZmVyIGltYWdlIGhlYWRlciAqL1xuJiM0MztcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCYjMzQ7RXJhc2luZyBmbGFzaFwmIzM0OywgMCwgMCk7XG4mIzQzO1x0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1YTDg2MlhYX0ZXX0hEUl9TSVpFIC8gMjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHdvcmQgPSBmdy1cdTAwM2VkYXRhW2kgKiAyXSB8XG4mIzQzO1x0XHQgICAgICAgKCh1MTYpZnctXHUwMDNlZGF0YVtpICogMiAmIzQzOyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgd29yZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmbGFzaDogaGVhZGVyIHdyaXRlIGZhaWxlZDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRcdGdvdG8gZW5kX21hZ2ljO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBieXRlIGNvdW50IGluIFNUQVQgdHJpZ2dlcnMgdGhlIGVyYXNlICovXG4mIzQzO1x0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4mIzQzO1x0XHRcdCAgICAgTVhMODYyWFhfRldfSERSX1NJWkUpO1xuJiM0MztcbiYjNDM7XHQvKiBBQ0sgaXMgYnl0ZSBjb3VudCAmIzQzOyAxICovXG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9GV19IRFJfU0laRSAmIzQzOyAxLFxuJiM0MztcdFx0XHRcdFx0TVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVMpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IGhlYWRlciBBQ0sgZmFpbGVkOiAlcGVcXG5cJiMzNDssIEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRnb3RvIGVuZF9tYWdpYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgNTogd2FpdCBmb3IgZXJhc2UgdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXG4mIzQzO1x0XHRcdFx0XHRNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O2ZsYXNoOiBlcmFzZSB0aW1lb3V0OiAlcGVcXG5cJiMzNDssIEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRnb3RvIGVuZF9tYWdpYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgNjogdHJhbnNmZXIgcGF5bG9hZCAqL1xuJiM0MztcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGlkeCBcdTAwM2MgcGF5bG9hZF9zaXplKSB7XG4mIzQzO1x0XHRpZiAoaWR4ICYjNDM7IDEgXHUwMDNjIHBheWxvYWRfc2l6ZSkge1xuJiM0MztcdFx0XHRmZGF0YSA9IHBheWxvYWRbaWR4XSB8XG4mIzQzO1x0XHRcdFx0KCh1MTYpcGF5bG9hZFtpZHggJiM0MzsgMV0gXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdFx0XHRpZHggJiM0Mzs9IDI7XG4mIzQzO1x0XHRcdGRhdGFfd3JpdHRlbiAmIzQzOz0gMjtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGZkYXRhID0gcGF5bG9hZFtpZHhdO1xuJiM0MztcdFx0XHRpZHgmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRkYXRhX3dyaXR0ZW4mIzQzOyYjNDM7O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCBmZGF0YSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmbGFzaDogZGF0YSB3cml0ZSBmYWlsZWQgYXQgJXUvJXU6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR3b3JkX2lkeCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlkeCBcdTAwM2U9IHBheWxvYWRfc2l6ZSkge1xuJiM0MztcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogSGFsZi1iYW5rIGJvdW5kYXJ5OiBzd2l0Y2ggdG8gU0IxIGFkZHJlc3MgKi9cbiYjNDM7XHRcdGlmICh3b3JkX2lkeCA9PSBNWEw4NjJYWF9GV19CQU5LX0hBTEYpIHtcbiYjNDM7XHRcdFx0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4mIzQzO1x0XHRcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuJiM0MztcdFx0XHRcdFx0ICAgICBNWEw4NjJYWF9GV19TQjFfQUREUik7XG4mIzQzO1x0XHRcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHdvcmRfaWR4IFx1MDAzZT0gTVhMODYyWFhfRldfQkFOS19TTElDRSkge1xuJiM0MztcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcbiYjNDM7XHRcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O2ZsYXNoOiB3cml0ZSB0aW1lb3V0IGF0ICV1LyV1OiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdFx0XHRnb3RvIGVuZF9tYWdpYztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHR3b3JkX2lkeCA9IDA7XG4mIzQzO1x0XHRcdGRhdGFfd3JpdHRlbiA9IDA7XG4mIzQzO1x0XHRcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCBuZXh0X25vdGlmeSkpIHtcbiYjNDM7XHRcdFx0XHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwmIzM0O0ZsYXNoaW5nXCYjMzQ7LCBpZHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHBheWxvYWRfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0bmV4dF9ub3RpZnkgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwmIzM0O0ZsYXNoaW5nXCYjMzQ7LCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7XG4mIzQzO1xuJiM0MztlbmRfbWFnaWM6XG4mIzQzO1x0LyogcmVib290IE1DVWJvb3QgZXZlbiBhZnRlciBhIGZhaWxlZCB0cmFuc2ZlciAqL1xuJiM0MztcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuJiM0MztcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xuJiM0MztcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBjaGFyICptb2RlbDtcbiYjNDM7XHRjaGFyIHZlcl9zdHJbMzJdO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG1vZGVsID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRzLVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKG1vZGVsKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBtb2RlbCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogY2Fub25pY2FsIG51bGwgdmVyc2lvbjogbm8gb3BlcmF0aW9uYWwgZmlybXdhcmUgb24gdGhlIHN3aXRjaCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgXCYjMzQ7ZndcJiMzNDssIFwmIzM0OzAuMC4wXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYodmVyX3N0ciwgc2l6ZW9mKHZlcl9zdHIpLCBcJiMzNDsldS4ldS4ldVwmIzM0OyxcbiYjNDM7XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXHUwMDNlZndfdmVyc2lvbi5taW5vcixcbiYjNDM7XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLCBcJiMzNDtmd1wmIzM0OywgdmVyX3N0cik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3N5c19md19pbWFnZV92ZXJzaW9uIHZlciA9IHt9O1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlICpyZXByb2JlO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTMyIHBheWxvYWRfc2l6ZTtcbiYjNDM7XHRpbnQgcmV0LCBpO1xuJiM0MztcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWNvbXBvbmVudCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Y29tcG9uZW50IGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfZmxhc2hfdmFsaWRhdGUocHJpdiwgcGFyYW1zLVx1MDAzZWZ3LCBcdTAwMjZwYXlsb2FkX3NpemUpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O2Zpcm13YXJlIGltYWdlIHZhbGlkYXRpb24gZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBFdmVyeXRoaW5nIG5lZWRlZCB0byBzY2hlZHVsZSB0aGUgcmVwcm9iZSB3aGljaCByZXN0b3Jlc1xuJiM0MztcdCAqIG5vcm1hbCBvcGVyYXRpb24gbXVzdCBiZSBpbiBwbGFjZSBiZWZvcmUgdGhlIHN3aXRjaCBpc1xuJiM0MztcdCAqIGRpc3R1cmJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXByb2JlID0ga3phbGxvY19vYmooKnJlcHJvYmUpO1xuJiM0MztcdGlmICghcmVwcm9iZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkge1xuJiM0MztcdFx0a2ZyZWUocmVwcm9iZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcHJvYmUtXHUwMDNlZGV2ID0gZ2V0X2RldmljZShkcy1cdTAwM2VkZXYpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJlcHJvYmUtXHUwMDNlZHdvcmssIG14bDg2Mnh4X3JlcHJvYmVfd29ya19mbik7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0ZGV2X2luZm8oZHMtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7Zmxhc2g6IHJlY292ZXJpbmcgc3dpdGNoIGZyb20gTUNVYm9vdCByZXNjdWUgbW9kZVxcblwmIzM0Oyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZGV2X2luZm8oZHMtXHUwMDNlZGV2LCBcJiMzNDtmbGFzaDogcnVubmluZyBmaXJtd2FyZSAldS4ldS4ldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuJiM0MztcdFx0XHQgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xvc2UgcG9ydHMgd2hpbGUgdGhlIGZpcm13YXJlIGlzIHN0aWxsIGFsaXZlIHNvIHRoZSBEU0FcbiYjNDM7XHQgKiBjb3JlJiMzOTtzIE1EQi9GREIgdHJhY2tpbmcgaXMgZHJhaW5lZCwgYW5kIGRldGFjaCB1c2VyIHBvcnRzXG4mIzQzO1x0ICogc28gdXNlcnNwYWNlIGNhbm5vdCByZW9wZW4gdGhlbSBkdXJpbmcgdGhlIGZsYXNoLiBUaGVcbiYjNDM7XHQgKiBjb25kdWl0IGJlbG9uZ3MgdG8gdGhlIE1BQyBkcml2ZXIgYW5kIGlzIG9ubHkgY2xvc2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KGRwLCBkcykge1xuJiM0MztcdFx0aWYgKGRwLVx1MDAzZXVzZXIpIHtcbiYjNDM7XHRcdFx0ZGV2X2Nsb3NlKGRwLVx1MDAzZXVzZXIpO1xuJiM0MztcdFx0XHRuZXRpZl9kZXZpY2VfZGV0YWNoKGRwLVx1MDAzZXVzZXIpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGRwLCBkcylcbiYjNDM7XHRcdGRldl9jbG9zZShkcC1cdTAwM2Vjb25kdWl0KTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWJsb2NrX2hvc3QgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VzdGF0c193b3JrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlY3JjX2Vycl93b3JrKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkcy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldLmhvc3RfZmxvb2Rfd29yayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHByaXYsIHBhcmFtcy1cdTAwM2VmdywgcGF5bG9hZF9zaXplLFxuJiM0MztcdFx0XHRcdCAgICAgIGRzLVx1MDAzZWRldmxpbmspO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtmaXJtd2FyZSB0cmFuc2ZlciBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJldCkge1xuJiM0MztcdFx0LyogbGlmdCB0aGUgYmxvY2sgdG8gcXVlcnkgdGhlIG5ldyBmaXJtd2FyZSB2ZXJzaW9uICovXG4mIzQzO1x0XHRwcml2LVx1MDAzZWJsb2NrX2hvc3QgPSBmYWxzZTtcbiYjNDM7XHRcdHByaXYtXHUwMDNlcmVzY3VlX21vZGUgPSBmYWxzZTtcbiYjNDM7XHRcdG1lbXNldChcdTAwMjZ2ZXIsIDAsIHNpemVvZih2ZXIpKTtcbiYjNDM7XHRcdGlmICghTVhMODYyWFhfQVBJX1JFQURfUVVJRVQocHJpdiwgU1lTX01JU0NfRldfVkVSU0lPTiwgdmVyKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB2ZXIuaXZfbWFqb3IpXG4mIzQzO1x0XHRcdGRldl9pbmZvKGRzLVx1MDAzZWRldiwgXCYjMzQ7Zmxhc2g6IG5ldyBmaXJtd2FyZSAldS4ldS4ldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgdmVyLml2X21ham9yLCB2ZXIuaXZfbWlub3IsXG4mIzQzO1x0XHRcdFx0IGxlMTZfdG9fY3B1KHZlci5pdl9yZXZpc2lvbikpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vza2lwX3RlYXJkb3duID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnJlcHJvYmUtXHUwMDNlZHdvcmssIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU3YzIwMDBjZmVlNTE5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19NWEw4NjJYWF9GV19IXG4mIzQzOyNkZWZpbmUgX19NWEw4NjJYWF9GV19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBteGw4NjJ4eF9wcml2O1xuJiM0MztcbiYjNDM7Ym9vbCBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3Qoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpO1xuJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fTVhMODYyWFhfRldfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5pbmRleCA0YWNkMjE2ZjdjYzAwOS4uODA1NjVkZTcxMGQzNzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5AQCAtMTUsNiAmIzQzOzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtY21kLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1ob3N0LmhcJiMzNDtcbiBcbiAjZGVmaW5lIENUUkxfQlVTWV9NQVNLXHRcdFx0QklUKDE1KVxuQEAgLTM0MCw2ICYjNDM7MzQxLDIxIEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqX2RhdGEsXG4gXG4gXHRtdXRleF9sb2NrX25lc3RlZChcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpO1xuIFxuJiM0MztcdGlmIChwcml2LVx1MDAzZXNraXBfdGVhcmRvd24pIHtcbiYjNDM7XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PREVWO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VibG9ja19ob3N0IFx1MDAyNlx1MDAyNiBjbWQgIT0gU1lTX01JU0NfRldfVVBEQVRFKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0bWF4ID0gKHNpemUgJiM0MzsgMSkgLyAyO1xuIFxuIFx0cmV0ID0gbXhsODYyeHhfYnVzeV93YWl0KHByaXYpO1xuQEAgLTQ5NSw2ICYjNDM7NTExLDQxIEBAIGludCBteGw4NjJ4eF9yZXNldChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHXHRcdDB4MWZcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TTURJT19QQUdFX01BU0tcdDB4ZmZmMFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX09GRl9NQVNLXHRcdDB4MDAwZlxuJiM0MztcbiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3JlYWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXM7XG4mIzQzO1x0aW50IHBoeSA9IHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRyxcbiYjNDM7XHRcdFx0ICAgICAgYWRkciBcdTAwMjYgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldCA9IF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5LCBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBteGw4NjJ4eF9zbWRpb193cml0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cztcbiYjNDM7XHRpbnQgcGh5ID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHLFxuJiM0MztcdFx0XHQgICAgICBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKVxuJiM0MztcdFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyxcbiYjNDM7XHRcdFx0XHQgICAgICB2YWwpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgbXhsODYyeHhfaG9zdF9pbml0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuIHtcbiBcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZWNyY19lcnJfd29yaywgbXhsODYyeHhfY3JjX2Vycl93b3JrX2ZuKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuaW5kZXggNjZkNmFlMTk4YWZmNDUuLjRlMDU0YzZlNGMwZTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuQEAgLTE4LDUgJiM0MzsxOCw3IEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqZGF0YSwgdTE2IHNpemUsXG4gXHRteGw4NjJ4eF9hcGlfd3JhcChkZXYsIGNtZCwgXHUwMDI2KGRhdGEpLCBzaXplb2YoKGRhdGEpKSwgdHJ1ZSwgdHJ1ZSlcbiBcbiBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKTtcbiBcbiAjZW5kaWYgLyogX19NWEw4NjJYWF9IT1NUX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuaW5kZXggYjY4OTY1MmFhOWI5MjAuLmE1YjY5NDBiNTUyZTllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuQEAgLTQwNiw2ICYjNDM7NDA2LDggQEAgbXhsODYyeHhfcGh5bGlua19tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcbiBcdHN3aXRjaCAocG9ydCkge1xuIFx0Y2FzZSA5IC4uLiAxNjpcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0aWYgKCFNWEw4NjJYWF9GV19WRVJfTUlOKHByaXYsIDEsIDAsIDg0KSkge1xuIFx0XHRcdGRldl93YXJuX29uY2UoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LFxuIFx0XHRcdFx0ICAgICAgXCYjMzQ7U2VyRGVzIFBDUyB1bnN1cHBvcnRlZCBvbiBvbGQgZmlybXdhcmUuXFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXG5pbmRleCA0NWQyMzdiM2E0MGYxMC4uMjY1YTgzZjRiMzcxYjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcbkBAIC0yMSw2ICYjNDM7MjEsNyBAQFxuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1hcGkuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWNtZC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWZ3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1ob3N0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1waHlsaW5rLmhcJiMzNDtcbiBcbkBAIC02MjgsOSAmIzQzOzYyOSwyMiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cHJpdi1cdTAwM2VyZXNjdWVfbW9kZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTtcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHQvKiB0aGUgcmVzZXQgbWF5IG9ubHkgbm93IGhhdmUgdHJpZ2dlcmVkIHJlc2N1ZSBtb2RlICovXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlcmVzY3VlX21vZGUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7XG4mIzQzO1x0XHRcdGlmICghcHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbiYjNDM7XHRcdGRldl93YXJuKGRzLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O3N3aXRjaCBzdHVjayBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNlcmRlc19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VzZXJkZXNfcG9ydHMpOyBpJiM0MzsmIzQzOylcbkBAIC03MTUsMTEgJiM0Mzs3MjksMjEgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3N0YXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxuIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRyZXR1cm4gbXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgdHJ1ZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG14bDg2Mnh4X3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmIChteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSkpXG4gXHRcdGRldl9lcnIoZHMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBwb3J0ICVkXFxuXCYjMzQ7LCBwb3J0KTtcbiB9XG5AQCAtMTMzNyw2ICYjNDM7MTM2MSwxMiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiBcdGJvb2wgaXNfY3B1X3BvcnQgPSBkc2FfcG9ydF9pc19jcHUoZHApO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHQvKiBEU0EgcmVpbml0cyBmYWlsZWQgdXNlciBwb3J0cyBhcyB1bnVzZWQ7IHNoYXJlZCBwb3J0cyBtdXN0XG4mIzQzO1x0ICogc3VjY2VlZCBmb3IgdGhlIHRyZWUgdG8gcmVnaXN0ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4mIzQzO1x0XHRyZXR1cm4gZHNhX3BvcnRfaXNfdXNlcihkcCkgPyAtRU5PREVWIDogMDtcbiYjNDM7XG4gXHRyZXQgPSBteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTE2MjgsNiAmIzQzOzE2NTgsOSBAQCBzdGF0aWMgdm9pZCBteGw4NjJ4eF9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0c3dpdGNoIChzdGF0ZSkge1xuIFx0Y2FzZSBCUl9TVEFURV9ESVNBQkxFRDpcbiBcdFx0cGFyYW0ucG9ydF9zdGF0ZSA9IGNwdV90b19sZTMyKE1YTDg2MlhYX1NUUF9QT1JUX1NUQVRFX0RJU0FCTEUpO1xuQEAgLTIwODYsNiAmIzQzOzIxMTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3BhdXNlX3N0YXRzID0gbXhsODYyeHhfZ2V0X3BhdXNlX3N0YXRzLFxuIFx0LmdldF9ybW9uX3N0YXRzID0gbXhsODYyeHhfZ2V0X3Jtb25fc3RhdHMsXG4gXHQuZ2V0X3N0YXRzNjQgPSBteGw4NjJ4eF9nZXRfc3RhdHM2NCxcbiYjNDM7XHQuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsXG4mIzQzO1x0LmRldmxpbmtfZmxhc2hfdXBkYXRlID0gbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUsXG4gfTtcbiBcbiBzdGF0aWMgaW50IG14bDg2Mnh4X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbkBAIC0yMTkxLDggJiM0MzsyMjI2LDggQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBteGw4NjJ4eF9vZl9tYXRjaFtdID0ge1xuLVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21heGxpbmVhcixteGw4NjI4MlwmIzM0OyB9LFxuLVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21heGxpbmVhcixteGw4NjI1MlwmIzM0OyB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttYXhsaW5lYXIsbXhsODYyODJcJiMzNDssIC5kYXRhID0gXCYjMzQ7TWF4TGluZWFyIE14TDg2MjgyXCYjMzQ7IH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21heGxpbmVhcixteGw4NjI1MlwmIzM0OywgLmRhdGEgPSBcJiMzNDtNYXhMaW5lYXIgTXhMODYyNTJcJiMzNDsgfSxcbiBcdHsgLyogc2VudGluZWwgKi8gfVxuIH07XG4gTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXhsODYyeHhfb2ZfbWF0Y2gpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcbmluZGV4IDQzMmE1ZjNmMmUwOGU2Li41ZDIxMjk2NTYxZTNhYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxuQEAgLTMxOSw2ICYjNDM7MzE5LDEyIEBAIHN0cnVjdCBteGw4NjJ4eF9md192ZXJzaW9uIHtcbiAgKiBAZXZsYW5faW5ncmVzc19zaXplOiBwZXItcG9ydCBpbmdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxuICAqIEBldmxhbl9lZ3Jlc3Nfc2l6ZTogIHBlci1wb3J0IGVncmVzcyBFeHRlbmRlZCBWTEFOIGJsb2NrIHNpemVcbiAgKiBAdmZfYmxvY2tfc2l6ZTogICAgICBwZXItcG9ydCBWTEFOIEZpbHRlciBibG9jayBzaXplXG4mIzQzOyAqIEBibG9ja19ob3N0OiAgICAgICAgIHJlamVjdCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgKGV4Y2VwdCBGV19VUERBVEUpXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBhIGZpcm13YXJlIGZsYXNoXG4mIzQzOyAqIEBza2lwX3RlYXJkb3duOiAgICAgIGRpc2NhcmQgZmlybXdhcmUgQVBJIGNvbW1hbmRzIGR1cmluZyB0aGUgdGVhcmRvd25cbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIGJ5IHRoZSBwb3N0LWZsYXNoIHJlcHJvYmVcbiYjNDM7ICogQHJlc2N1ZV9tb2RlOiAgICAgICAgc3dpdGNoIGlzIHN0dWNrIGluIE1DVWJvb3Q7IGZpcm13YXJlIEFQSSBjb21tYW5kc1xuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICBmYWlsIGZhc3QsIG9ubHkgY2xhdXNlLTIyIFNNRElPIHdvcmtzXG4gICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVyc1xuICAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBhY2N1bXVsYXRlcyB0aGVtIGludG8gNjQtYml0IHBlci1wb3J0IHN0YXRzXG4gICovXG5AQCAtMzM3LDYgJiM0MzszNDMsOSBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7XG4gXHR1MTYgZXZsYW5faW5ncmVzc19zaXplO1xuIFx0dTE2IGV2bGFuX2VncmVzc19zaXplO1xuIFx0dTE2IHZmX2Jsb2NrX3NpemU7XG4mIzQzO1x0Ym9vbCBibG9ja19ob3N0O1xuJiM0MztcdGJvb2wgc2tpcF90ZWFyZG93bjtcbiYjNDM7XHRib29sIHJlc2N1ZV9tb2RlO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193b3JrO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaFxuaW5kZXggOGMxNmVmMjNjYzEwMmEuLmM5ZTE5MzQ4ZGU2MTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2RzYS5oXG5AQCAtMTE3MCw2ICYjNDM7MTE3MCw5IEBAIHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB7XG4gXHRpbnRcdCgqZGV2bGlua19pbmZvX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiYjNDM7XHRpbnRcdCgqZGV2bGlua19mbGFzaF91cGRhdGUpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXHRpbnRcdCgqZGV2bGlua19zYl9wb29sX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pO1xuZGlmZiAtLWdpdCBhL25ldC9kc2EvZGV2bGluay5jIGIvbmV0L2RzYS9kZXZsaW5rLmNcbmluZGV4IGVkMzQyZjM0NTY5MmJiLi4yNTMxMWE4N2NiYzU2ZCAxMDA2NDRcbi0tLSBhL25ldC9kc2EvZGV2bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL2RldmxpbmsuY1xuQEAgLTIwLDYgJiM0MzsyMCwxOCBAQCBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc2FfZGV2bGlua190b19kcyhkbCk7XG4mIzQzO1xuJiM0MztcdGlmICghZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlKGRzLCBwYXJhbXMsIGV4dGFjayk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxuIFx0XHRcdFx0ICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pXG5AQCAtMTY5LDYgJiM0MzsxODEsNyBAQCBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkbHAsXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19vcHMgPSB7XG4gXHQuaW5mb19nZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX2luZm9fZ2V0LFxuJiM0MztcdC5mbGFzaF91cGRhdGVcdFx0XHQ9IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcbiBcdC5zYl9wb29sX2dldFx0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQsXG4gXHQuc2JfcG9vbF9zZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LFxuIFx0LnNiX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9EU0FfTVhMODYyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUmIzM0OywKICAgICYjMzQ7bXhsODYyeHhfZmxhc2hfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bXhsODYyeHhfZmxhc2hfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7ZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB2aWEgZGV2bGluayB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCBpbmNsdWRpbmcgcGFyc2luZyBvZiB0aGUgZmlybXdhcmUgZmlsZSB3aGljaCBjb21lcyBmcm9tIHVzZXJzcGFjZS4gSXQgYWxzbyBhZGRzIGEgbmV3IGRldmxpbmsgY2FsbGJhY2sgdG8gdGhlIERTQSBjb3JlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NmFkZjJiYjdmM2M2M2YxOTQ5ZjY5ZTI2MzY4ZjIxMGM1ZTcxMjM3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjAgMDM6MzM6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUKaW5kZXggYTdiZTBlNjY2OWRmYTUuLmJjY2FjMGQwZjcwM2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlCkBAIC0xLDMgJiM0MzsxLDMgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIG9iai0kKENPTkZJR19ORVRfRFNBX01YTDg2MikgJiM0Mzs9IG14bDg2Mnh4X2RzYS5vCi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm8KJiM0MztteGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm8gbXhsODYyeHgtZncubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oCmluZGV4IGM4N2E5NTVjMTNjNDhlLi5lMmFhMjkzNGU5ZTE2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaApAQCAtNzAsNiAmIzQzOzcwLDcgQEAKICNkZWZpbmUgSU5UX0dQSFlfUkVBRAkJCShHUFlfR1BZMlhYX01BR0lDICYjNDM7IDB4MSkKICNkZWZpbmUgSU5UX0dQSFlfV1JJVEUJCQkoR1BZX0dQWTJYWF9NQUdJQyAmIzQzOyAweDIpCiAKJiM0MzsjZGVmaW5lIFNZU19NSVNDX0ZXX1VQREFURQkJKFNZU19NSVNDX01BR0lDICYjNDM7IDB4MSkKICNkZWZpbmUgU1lTX01JU0NfRldfVkVSU0lPTgkJKFNZU19NSVNDX01BR0lDICYjNDM7IDB4MikKIAogI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19DT05GSUcJKE1YTDg2MlhYX1hQQ1NfTUFHSUMgJiM0MzsgMHgxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNmExZGUyNDdjMmYwNWQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYwpAQCAtMCwwICYjNDM7MSw0ODIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4CiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjUgRGFuaWVsIEdvbGxlICZsdDtkYW5pZWxAbWFrcm90b3BpYS5vcmcmZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NyYzMyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L292ZXJmbG93LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtteGw4NjJ4eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWFwaS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWNtZC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWZ3LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtaG9zdC5oJiMzNDsKJiM0MzsKJiM0MzsvKiBTQiBQREkgcmVnaXN0ZXJzIChjbGF1c2UtMjIgU01ESU8gYWRkcmVzcyBzcGFjZSkgKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMCQkweGUxMDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9BRERSCQkweGUxMDEKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9EQVRBCQkweGUxMDIKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFUCQkweGUxMDMKJiM0MzsKJiM0MzsvKiBTQiBQREkgQ1RSTCBtb2RlcyAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUCTB4MDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSCTB4MDIKJiM0MzsKJiM0MzsvKiBTQiBQREkgaGFuZHNoYWtlIG1hZ2ljICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkVBRFkJCTB4YzU1YwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1NUQVJUCQkweGY0OGYKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9FTkQJCTB4M2NjMwomIzQzOwomIzQzOy8qIEZpcm13YXJlIHRyYW5zZmVyIGdlb21ldHJ5ICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19IRFJfU0laRQkJMjAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0JBTktfSEFMRgkJMTYzODQJLyogd29yZHMgcGVyIGhhbGYtYmFuayAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19TTElDRQkJMzI3NjAJLyogd29yZHMgcGVyIGZ1bGwgc2xpY2UgKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX1NCMV9BRERSCQkweDc4MDAJLyogU0IxIHdvcmQgYWRkcmVzcyAqLwomIzQzOwomIzQzOy8qIFRpbWVvdXRzIChnZW5lcm91cyB1cHBlciBib3VuZHMpICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TCTMwMDAwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUwk1MDAwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TCTMwMDAwMAomIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NUwkxMjAwMDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NUwk1MDAwCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsCiYjNDM7CQkJICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpOwomIzQzOwlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUiwKJiM0MzsJCQkgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7CiYjNDM7CW14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLAomIzQzOwkJCSAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgZXhwZWN0ZWQsCiYjNDM7CQkJCSAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFUKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoKHUxNilyZXQgPT0gZXhwZWN0ZWQpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDExMDAwKTsKJiM0MzsJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOwomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2Uoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsCiYjNDM7CQkJCSAgICAgICB1MzIgZGF0YV93cml0dGVuKQomIzQzO3sKJiM0MzsJbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpOwomIzQzOwlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgZGF0YV93cml0dGVuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCwKJiM0MzsJCQkJCSBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLAomIzQzOwkJCQkgIHUzMiBkb25lLCB1MzIgdG90YWwpCiYjNDM7ewomIzQzOwlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBzdGF0dXMsIE5VTEwsIGRvbmUsIHRvdGFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0IC0gY2hlY2sgd2hldGhlciB0aGUgc3dpdGNoIHNpdHMgaW4gTUNVYm9vdAomIzQzOyAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBkYXRhCiYjNDM7ICoKJiM0MzsgKiBNQ1Vib290IHNpZ25hbHMgcmVhZGluZXNzIGZvciBhIGZpcm13YXJlIGRvd25sb2FkIHdpdGggdGhlIFNCIFBESQomIzQzOyAqIHJlYWR5IG1hZ2ljOyBvbmx5IHRoZSBjbGF1c2UtMjIgU01ESU8gaW50ZXJmYWNlIHdvcmtzIGluIHRoaXMgc3RhdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgTUNVYm9vdCBpcyB3YWl0aW5nIGZvciBhIGZpcm13YXJlIGRvd25sb2FkLgomIzQzOyAqLwomIzQzO2Jvb2wgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQgPT0gTVhMODYyWFhfU0JfUERJX1JFQURZOwomIzQzO30KJiM0MzsKJiM0MzsvKiBkZXZpY2VfcmVwcm9iZSgpIC0mZ3Q7IHJlbW92ZSgpIGZyZWVzIHByaXYgd2hpbGUgdGhlIHdvcmsgcnVucywgc28KJiM0MzsgKiB0aGUgd29yayBzdHJ1Y3QgY2Fubm90IGxpdmUgaW4gbXhsODYyeHhfcHJpdi4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZSB7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayBkd29yazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG14bDg2Mnh4X3JlcHJvYmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZSAqcmVwcm9iZSA9CiYjNDM7CQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG14bDg2Mnh4X3JlcHJvYmUsIGR3b3JrLndvcmspOwomIzQzOwomIzQzOwlpZiAoZGV2aWNlX3JlcHJvYmUocmVwcm9iZS0mZ3Q7ZGV2KSkKJiM0MzsJCWRldl9lcnIocmVwcm9iZS0mZ3Q7ZGV2LCAmIzM0O3JlcHJvYmUgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CXB1dF9kZXZpY2UocmVwcm9iZS0mZ3Q7ZGV2KTsKJiM0MzsJa2ZyZWUocmVwcm9iZSk7CiYjNDM7CW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNQ1Vib290IGZpcm13YXJlIGltYWdlIGhlYWRlciAqLwomIzQzO3N0cnVjdCBteGw4NjJ4eF9md19oZHIgewomIzQzOwlfX2xlMzIgaW1hZ2VfdHlwZTsKJiM0MzsJX19sZTMyIGltYWdlX3NpemVfMTsKJiM0MzsJX19sZTMyIGltYWdlX2NoZWNrc3VtXzE7CiYjNDM7CV9fbGUzMiBpbWFnZV9zaXplXzI7CiYjNDM7CV9fbGUzMiBpbWFnZV9jaGVja3N1bV8yOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkJICAgdTMyICpwYXlsb2FkX3NpemUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgbXhsODYyeHhfZndfaGRyICpoZHI7CiYjNDM7CXUzMiBzaXplMSwgc2l6ZTIsIHRvdGFsOwomIzQzOwljb25zdCB1OCAqcGF5bG9hZDsKJiM0MzsJdTMyIGNyYzsKJiM0MzsKJiM0MzsJaWYgKGZ3LSZndDtzaXplICZsdDsgTVhMODYyWFhfRldfSERSX1NJWkUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaGRyID0gKGNvbnN0IHN0cnVjdCBteGw4NjJ4eF9md19oZHIgKilmdy0mZ3Q7ZGF0YTsKJiM0MzsJcGF5bG9hZCA9IGZ3LSZndDtkYXRhICYjNDM7IE1YTDg2MlhYX0ZXX0hEUl9TSVpFOwomIzQzOwlzaXplMSA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7aW1hZ2Vfc2l6ZV8xKTsKJiM0MzsJc2l6ZTIgPSBsZTMyX3RvX2NwdShoZHItJmd0O2ltYWdlX3NpemVfMik7CiYjNDM7CiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3coc2l6ZTEsIHNpemUyLCAmYW1wO3RvdGFsKSB8fAomIzQzOwkgICAgdG90YWwgJmd0OyBmdy0mZ3Q7c2l6ZSAtIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgdG9vIHNtYWxsIGZvciBkZWNsYXJlZCBzaXplXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXRvdGFsKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgd2l0aCBlbXB0eSBwYXlsb2FkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2l6ZTEpIHsKJiM0MzsJCWNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTsKJiM0MzsJCWlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLSZndDtpbWFnZV9jaGVja3N1bV8xKSkgewomIzQzOwkJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7Zmxhc2g6IGltYWdlIDEgQ1JDIG1pc21hdGNoIChnb3QgJTA4eCwgZXhwZWN0ZWQgJTA4eClcbiYjMzQ7LAomIzQzOwkJCQljcmMsIGxlMzJfdG9fY3B1KGhkci0mZ3Q7aW1hZ2VfY2hlY2tzdW1fMSkpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaXplMikgewomIzQzOwkJY3JjID0gfmNyYzMyX2xlKH4wVSwgcGF5bG9hZCAmIzQzOyBzaXplMSwgc2l6ZTIpOwomIzQzOwkJaWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItJmd0O2ltYWdlX2NoZWNrc3VtXzIpKSB7CiYjNDM7CQkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtmbGFzaDogaW1hZ2UgMiBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxuJiMzNDssCiYjNDM7CQkJCWNyYywgbGUzMl90b19jcHUoaGRyLSZndDtpbWFnZV9jaGVja3N1bV8yKSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnBheWxvYWRfc2l6ZSA9IHRvdGFsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkJICAgdTMyIHBheWxvYWRfc2l6ZSwgc3RydWN0IGRldmxpbmsgKmRsKQomIzQzO3sKJiM0MzsJY29uc3QgdTggKnBheWxvYWQgPSBmdy0mZ3Q7ZGF0YSAmIzQzOyBNWEw4NjJYWF9GV19IRFJfU0laRTsKJiM0MzsJdTMyIHdvcmRfaWR4ID0gMCwgZGF0YV93cml0dGVuID0gMCwgaWR4ID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXh0X25vdGlmeSA9IDA7CiYjNDM7CXUxNiB3b3JkLCBmZGF0YTsKJiM0MzsJaW50IHJldCwgaTsKJiM0MzsKJiM0MzsJLyogU3RlcCAxOiByZWJvb3QgdGhlIGZpcm13YXJlIGludG8gTUNVYm9vdCByZXNjdWUgbW9kZSAqLwomIzQzOwlpZiAoIXByaXYtJmd0O3Jlc2N1ZV9tb2RlKSB7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9hcGlfd3JhcChwcml2LCBTWVNfTUlTQ19GV19VUERBVEUsIE5VTEwsIDAsCiYjNDM7CQkJCQlmYWxzZSwgZmFsc2UpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7Zmxhc2g6IEZXX1VQREFURSBjb21tYW5kIGZhaWxlZDogJXBlXG4mIzM0OywKJiM0MzsJCQkJRVJSX1BUUihyZXQpKTsKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEZhaWx1cmVzIGZyb20gaGVyZSBvbiBtdXN0IGdvIHRocm91Z2ggZW5kX21hZ2ljIHNvIE1DVWJvb3QKJiM0MzsJICogcmVib290cyBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yZXZlci4KJiM0MzsJICovCiYjNDM7CiYjNDM7CS8qIFN0ZXAgMjogd2FpdCBmb3IgYm9vdGxvYWRlciByZWFkeSAqLwomIzQzOwlteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsICYjMzQ7V2FpdGluZyBmb3IgYm9vdGxvYWRlciYjMzQ7LCAwLCAwKTsKJiM0MzsJbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSwKJiM0MzsJCQkJCU1YTDg2MlhYX0ZXX1JFQURZX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGJvb3Rsb2FkZXIgbm90IHJlYWR5OiAlcGVcbiYjMzQ7LCBFUlJfUFRSKHJldCkpOwomIzQzOwkJZ290byBlbmRfbWFnaWM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU3RlcCAzOiBzdGFydCBoYW5kc2hha2UgKi8KJiM0MzsJbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsCiYjNDM7CQkJICAgICBNWEw4NjJYWF9TQl9QRElfU1RBUlQpOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFSVCAmIzQzOyAxLAomIzQzOwkJCQkJTVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IHN0YXJ0IGhhbmRzaGFrZSBmYWlsZWQ6ICVwZVxuJiMzNDssIEVSUl9QVFIocmV0KSk7CiYjNDM7CQlnb3RvIGVuZF9tYWdpYzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdGVwIDQ6IHRyYW5zZmVyIGltYWdlIGhlYWRlciAqLwomIzQzOwlteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsICYjMzQ7RXJhc2luZyBmbGFzaCYjMzQ7LCAwLCAwKTsKJiM0MzsJbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsCiYjNDM7CQkJICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNWEw4NjJYWF9GV19IRFJfU0laRSAvIDI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl3b3JkID0gZnctJmd0O2RhdGFbaSAqIDJdIHwKJiM0MzsJCSAgICAgICAoKHUxNilmdy0mZ3Q7ZGF0YVtpICogMiAmIzQzOyAxXSAmbHQ7Jmx0OyA4KTsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCB3b3JkKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtmbGFzaDogaGVhZGVyIHdyaXRlIGZhaWxlZDogJXBlXG4mIzM0OywKJiM0MzsJCQkJRVJSX1BUUihyZXQpKTsKJiM0MzsJCQlnb3RvIGVuZF9tYWdpYzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7CiYjNDM7CiYjNDM7CS8qIHRoZSBieXRlIGNvdW50IGluIFNUQVQgdHJpZ2dlcnMgdGhlIGVyYXNlICovCiYjNDM7CW14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULAomIzQzOwkJCSAgICAgTVhMODYyWFhfRldfSERSX1NJWkUpOwomIzQzOwomIzQzOwkvKiBBQ0sgaXMgYnl0ZSBjb3VudCAmIzQzOyAxICovCiYjNDM7CXJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfRldfSERSX1NJWkUgJiM0MzsgMSwKJiM0MzsJCQkJCU1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O2ZsYXNoOiBoZWFkZXIgQUNLIGZhaWxlZDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN0ZXAgNTogd2FpdCBmb3IgZXJhc2UgdG8gY29tcGxldGUgKi8KJiM0MzsJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLAomIzQzOwkJCQkJTVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN0ZXAgNjogdHJhbnNmZXIgcGF5bG9hZCAqLwomIzQzOwlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTsKJiM0MzsKJiM0MzsJd2hpbGUgKGlkeCAmbHQ7IHBheWxvYWRfc2l6ZSkgewomIzQzOwkJaWYgKGlkeCAmIzQzOyAxICZsdDsgcGF5bG9hZF9zaXplKSB7CiYjNDM7CQkJZmRhdGEgPSBwYXlsb2FkW2lkeF0gfAomIzQzOwkJCQkoKHUxNilwYXlsb2FkW2lkeCAmIzQzOyAxXSAmbHQ7Jmx0OyA4KTsKJiM0MzsJCQlpZHggJiM0Mzs9IDI7CiYjNDM7CQkJZGF0YV93cml0dGVuICYjNDM7PSAyOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlmZGF0YSA9IHBheWxvYWRbaWR4XTsKJiM0MzsJCQlpZHgmIzQzOyYjNDM7OwomIzQzOwkJCWRhdGFfd3JpdHRlbiYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgZmRhdGEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O2ZsYXNoOiBkYXRhIHdyaXRlIGZhaWxlZCBhdCAldS8ldTogJXBlXG4mIzM0OywKJiM0MzsJCQkJaWR4LCBwYXlsb2FkX3NpemUsIEVSUl9QVFIocmV0KSk7CiYjNDM7CQkJZ290byBlbmRfbWFnaWM7CiYjNDM7CQl9CiYjNDM7CQl3b3JkX2lkeCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoaWR4ICZndDs9IHBheWxvYWRfc2l6ZSkgewomIzQzOwkJCXJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogSGFsZi1iYW5rIGJvdW5kYXJ5OiBzd2l0Y2ggdG8gU0IxIGFkZHJlc3MgKi8KJiM0MzsJCWlmICh3b3JkX2lkeCA9PSBNWEw4NjJYWF9GV19CQU5LX0hBTEYpIHsKJiM0MzsJCQlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJCSAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTsKJiM0MzsJCQlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUiwKJiM0MzsJCQkJCSAgICAgTVhMODYyWFhfRldfU0IxX0FERFIpOwomIzQzOwkJCW14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLAomIzQzOwkJCQkJICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7CiYjNDM7CQl9IGVsc2UgaWYgKHdvcmRfaWR4ICZndDs9IE1YTDg2MlhYX0ZXX0JBTktfU0xJQ0UpIHsKJiM0MzsJCQlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTsKJiM0MzsJCQlpZiAocmV0KSB7CiYjNDM7CQkJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkmIzM0O2ZsYXNoOiB3cml0ZSB0aW1lb3V0IGF0ICV1LyV1OiAlcGVcbiYjMzQ7LAomIzQzOwkJCQkJaWR4LCBwYXlsb2FkX3NpemUsIEVSUl9QVFIocmV0KSk7CiYjNDM7CQkJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwkJCX0KJiM0MzsJCQl3b3JkX2lkeCA9IDA7CiYjNDM7CQkJZGF0YV93cml0dGVuID0gMDsKJiM0MzsJCQlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJCSAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpOwomIzQzOwomIzQzOwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG5leHRfbm90aWZ5KSkgewomIzQzOwkJCQlteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsICYjMzQ7Rmxhc2hpbmcmIzM0OywgaWR4LAomIzQzOwkJCQkJCSAgICAgIHBheWxvYWRfc2l6ZSk7CiYjNDM7CQkJCW5leHRfbm90aWZ5ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKDUwMCk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CW14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgJiMzNDtGbGFzaGluZyYjMzQ7LCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7CiYjNDM7CiYjNDM7ZW5kX21hZ2ljOgomIzQzOwkvKiByZWJvb3QgTUNVYm9vdCBldmVuIGFmdGVyIGEgZmFpbGVkIHRyYW5zZmVyICovCiYjNDM7CW14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULAomIzQzOwkJCSAgICAgTVhMODYyWFhfU0JfUERJX0VORCk7CiYjNDM7CW1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiYjNDM7CQkJICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwljb25zdCBjaGFyICptb2RlbDsKJiM0MzsJY2hhciB2ZXJfc3RyWzMyXTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbW9kZWwgPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZHMtJmd0O2Rldik7CiYjNDM7CWlmIChtb2RlbCkgewomIzQzOwkJcmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwKJiM0MzsJCQkJCQkgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCwKJiM0MzsJCQkJCQkgICAgIG1vZGVsKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBjYW5vbmljYWwgbnVsbCB2ZXJzaW9uOiBubyBvcGVyYXRpb25hbCBmaXJtd2FyZSBvbiB0aGUgc3dpdGNoICovCiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkKJiM0MzsJCXJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsICYjMzQ7ZncmIzM0OywgJiMzNDswLjAuMCYjMzQ7KTsKJiM0MzsKJiM0MzsJc25wcmludGYodmVyX3N0ciwgc2l6ZW9mKHZlcl9zdHIpLCAmIzM0OyV1LiV1LiV1JiMzNDssCiYjNDM7CQkgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5tYWpvciwgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5taW5vciwKJiM0MzsJCSBwcml2LSZndDtmd192ZXJzaW9uLnJldmlzaW9uKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgJiMzNDtmdyYjMzQ7LCB2ZXJfc3RyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkJICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsCiYjNDM7CQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3N5c19md19pbWFnZV92ZXJzaW9uIHZlciA9IHt9OwomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZSAqcmVwcm9iZTsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJdTMyIHBheWxvYWRfc2l6ZTsKJiM0MzsJaW50IHJldCwgaTsKJiM0MzsKJiM0MzsJaWYgKHBhcmFtcy0mZ3Q7Y29tcG9uZW50KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O2NvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlKHByaXYsIHBhcmFtcy0mZ3Q7ZncsICZhbXA7cGF5bG9hZF9zaXplKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtmaXJtd2FyZSBpbWFnZSB2YWxpZGF0aW9uIGZhaWxlZCYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogRXZlcnl0aGluZyBuZWVkZWQgdG8gc2NoZWR1bGUgdGhlIHJlcHJvYmUgd2hpY2ggcmVzdG9yZXMKJiM0MzsJICogbm9ybWFsIG9wZXJhdGlvbiBtdXN0IGJlIGluIHBsYWNlIGJlZm9yZSB0aGUgc3dpdGNoIGlzCiYjNDM7CSAqIGRpc3R1cmJlZC4KJiM0MzsJICovCiYjNDM7CXJlcHJvYmUgPSBremFsbG9jX29iaigqcmVwcm9iZSk7CiYjNDM7CWlmICghcmVwcm9iZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkgewomIzQzOwkJa2ZyZWUocmVwcm9iZSk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXByb2JlLSZndDtkZXYgPSBnZXRfZGV2aWNlKGRzLSZndDtkZXYpOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3JlcHJvYmUtJmd0O2R3b3JrLCBteGw4NjJ4eF9yZXByb2JlX3dvcmtfZm4pOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQlkZXZfaW5mbyhkcy0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O2ZsYXNoOiByZWNvdmVyaW5nIHN3aXRjaCBmcm9tIE1DVWJvb3QgcmVzY3VlIG1vZGVcbiYjMzQ7KTsKJiM0MzsJZWxzZQomIzQzOwkJZGV2X2luZm8oZHMtJmd0O2RldiwgJiMzNDtmbGFzaDogcnVubmluZyBmaXJtd2FyZSAldS4ldS4ldVxuJiMzNDssCiYjNDM7CQkJIHByaXYtJmd0O2Z3X3ZlcnNpb24ubWFqb3IsIHByaXYtJmd0O2Z3X3ZlcnNpb24ubWlub3IsCiYjNDM7CQkJIHByaXYtJmd0O2Z3X3ZlcnNpb24ucmV2aXNpb24pOwomIzQzOwomIzQzOwkvKiBDbG9zZSBwb3J0cyB3aGlsZSB0aGUgZmlybXdhcmUgaXMgc3RpbGwgYWxpdmUgc28gdGhlIERTQQomIzQzOwkgKiBjb3JlJiMzOTtzIE1EQi9GREIgdHJhY2tpbmcgaXMgZHJhaW5lZCwgYW5kIGRldGFjaCB1c2VyIHBvcnRzCiYjNDM7CSAqIHNvIHVzZXJzcGFjZSBjYW5ub3QgcmVvcGVuIHRoZW0gZHVyaW5nIHRoZSBmbGFzaC4gVGhlCiYjNDM7CSAqIGNvbmR1aXQgYmVsb25ncyB0byB0aGUgTUFDIGRyaXZlciBhbmQgaXMgb25seSBjbG9zZWQuCiYjNDM7CSAqLwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7CiYjNDM7CQlpZiAoZHAtJmd0O3VzZXIpIHsKJiM0MzsJCQlkZXZfY2xvc2UoZHAtJmd0O3VzZXIpOwomIzQzOwkJCW5ldGlmX2RldmljZV9kZXRhY2goZHAtJmd0O3VzZXIpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnQoZHAsIGRzKQomIzQzOwkJZGV2X2Nsb3NlKGRwLSZndDtjb25kdWl0KTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7YmxvY2tfaG9zdCA9IHRydWU7CiYjNDM7CiYjNDM7CXNldF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsICZhbXA7cHJpdi0mZ3Q7ZmxhZ3MpOwomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtwcml2LSZndDtzdGF0c193b3JrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3ByaXYtJmd0O2NyY19lcnJfd29yayk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkcy0mZ3Q7bnVtX3BvcnRzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtwcml2LSZndDtwb3J0c1tpXS5ob3N0X2Zsb29kX3dvcmspOwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShwcml2LCBwYXJhbXMtJmd0O2Z3LCBwYXlsb2FkX3NpemUsCiYjNDM7CQkJCSAgICAgIGRzLSZndDtkZXZsaW5rKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7ZmlybXdhcmUgdHJhbnNmZXIgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJLyogbGlmdCB0aGUgYmxvY2sgdG8gcXVlcnkgdGhlIG5ldyBmaXJtd2FyZSB2ZXJzaW9uICovCiYjNDM7CQlwcml2LSZndDtibG9ja19ob3N0ID0gZmFsc2U7CiYjNDM7CQlwcml2LSZndDtyZXNjdWVfbW9kZSA9IGZhbHNlOwomIzQzOwkJbWVtc2V0KCZhbXA7dmVyLCAwLCBzaXplb2YodmVyKSk7CiYjNDM7CQlpZiAoIU1YTDg2MlhYX0FQSV9SRUFEX1FVSUVUKHByaXYsIFNZU19NSVNDX0ZXX1ZFUlNJT04sIHZlcikgJmFtcDsmYW1wOwomIzQzOwkJICAgIHZlci5pdl9tYWpvcikKJiM0MzsJCQlkZXZfaW5mbyhkcy0mZ3Q7ZGV2LCAmIzM0O2ZsYXNoOiBuZXcgZmlybXdhcmUgJXUuJXUuJXVcbiYjMzQ7LAomIzQzOwkJCQkgdmVyLml2X21ham9yLCB2ZXIuaXZfbWlub3IsCiYjNDM7CQkJCSBsZTE2X3RvX2NwdSh2ZXIuaXZfcmV2aXNpb24pKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcml2LSZndDtza2lwX3RlYXJkb3duID0gdHJ1ZTsKJiM0MzsKJiM0MzsJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7cmVwcm9iZS0mZ3Q7ZHdvcmssIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNTdjMjAwMGNmZWU1MTkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaApAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX01YTDg2MlhYX0ZXX0gKJiM0MzsjZGVmaW5lIF9fTVhMODYyWFhfRldfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IG14bDg2Mnh4X3ByaXY7CiYjNDM7CiYjNDM7Ym9vbCBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3Qoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpOwomIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiYjNDM7aW50IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkJICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsCiYjNDM7CQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19NWEw4NjJYWF9GV19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuYwppbmRleCA0YWNkMjE2ZjdjYzAwOS4uODA1NjVkZTcxMGQzNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuYwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtY21kLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtteGw4NjJ4eC1ob3N0LmgmIzM0OwogCiAjZGVmaW5lIENUUkxfQlVTWV9NQVNLCQkJQklUKDE1KQpAQCAtMzQwLDYgJiM0MzszNDEsMjEgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpfZGF0YSwKIAogCW11dGV4X2xvY2tfbmVzdGVkKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTsKIAomIzQzOwlpZiAocHJpdi0mZ3Q7c2tpcF90ZWFyZG93bikgewomIzQzOwkJcmV0ID0gMDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtibG9ja19ob3N0ICZhbXA7JmFtcDsgY21kICE9IFNZU19NSVNDX0ZXX1VQREFURSkgewomIzQzOwkJcmV0ID0gLUVCVVNZOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKIAltYXggPSAoc2l6ZSAmIzQzOyAxKSAvIDI7CiAKIAlyZXQgPSBteGw4NjJ4eF9idXN5X3dhaXQocHJpdik7CkBAIC00OTUsNiAmIzQzOzUxMSw0MSBAQCBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOyNkZWZpbmUgTVhMODYyWFhfU01ESU9fQUREUl9SRUcJCTB4MWYKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSwkweGZmZjAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX09GRl9NQVNLCQkweDAwMGYKJiM0MzsKJiM0MztpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzOwomIzQzOwlpbnQgcGh5ID0gcHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRywKJiM0MzsJCQkgICAgICBhZGRyICZhbXA7IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCkKJiM0MzsJCXJldCA9IF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5LCBhZGRyICZhbXA7IE1YTDg2MlhYX1NNRElPX09GRl9NQVNLKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKQomIzQzO3sKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtJmd0O21kaW9kZXYtJmd0O2J1czsKJiM0MzsJaW50IHBoeSA9IHByaXYtJmd0O21kaW9kZXYtJmd0O2FkZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CXJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsCiYjNDM7CQkJICAgICAgYWRkciAmYW1wOyBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spOwomIzQzOwlpZiAocmV0ICZndDs9IDApCiYjNDM7CQlyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIGFkZHIgJmFtcDsgTVhMODYyWFhfU01ESU9fT0ZGX01BU0ssCiYjNDM7CQkJCSAgICAgIHZhbCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiB2b2lkIG14bDg2Mnh4X2hvc3RfaW5pdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdikKIHsKIAlJTklUX1dPUksoJmFtcDtwcml2LSZndDtjcmNfZXJyX3dvcmssIG14bDg2Mnh4X2NyY19lcnJfd29ya19mbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaAppbmRleCA2NmQ2YWUxOThhZmY0NS4uNGUwNTRjNmU0YzBlNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaApAQCAtMTgsNSAmIzQzOzE4LDcgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpkYXRhLCB1MTYgc2l6ZSwKIAlteGw4NjJ4eF9hcGlfd3JhcChkZXYsIGNtZCwgJmFtcDsoZGF0YSksIHNpemVvZigoZGF0YSkpLCB0cnVlLCB0cnVlKQogCiBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpOwomIzQzO2ludCBteGw4NjJ4eF9zbWRpb19yZWFkKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkcik7CiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbCk7CiAKICNlbmRpZiAvKiBfX01YTDg2MlhYX0hPU1RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmMKaW5kZXggYjY4OTY1MmFhOWI5MjAuLmE1YjY5NDBiNTUyZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmMKQEAgLTQwNiw2ICYjNDM7NDA2LDggQEAgbXhsODYyeHhfcGh5bGlua19tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAogCXN3aXRjaCAocG9ydCkgewogCWNhc2UgOSAuLi4gMTY6CiYjNDM7CQlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiAJCWlmICghTVhMODYyWFhfRldfVkVSX01JTihwcml2LCAxLCAwLCA4NCkpIHsKIAkJCWRldl93YXJuX29uY2UoZHAtJmd0O2RzLSZndDtkZXYsCiAJCQkJICAgICAgJiMzNDtTZXJEZXMgUENTIHVuc3VwcG9ydGVkIG9uIG9sZCBmaXJtd2FyZS5cbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMKaW5kZXggNDVkMjM3YjNhNDBmMTAuLjI2NWE4M2Y0YjM3MWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYwpAQCAtMjEsNiAmIzQzOzIxLDcgQEAKICNpbmNsdWRlICYjMzQ7bXhsODYyeHguaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWFwaS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bXhsODYyeHgtY21kLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtZncuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWhvc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LXBoeWxpbmsuaCYjMzQ7CiAKQEAgLTYyOCw5ICYjNDM7NjI5LDIyIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwlwcml2LSZndDtyZXNjdWVfbW9kZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTsKJiM0MzsJaWYgKCFwcml2LSZndDtyZXNjdWVfbW9kZSkgewomIzQzOwkJcmV0ID0gbXhsODYyeHhfd2FpdF9yZWFkeShkcyk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJLyogdGhlIHJlc2V0IG1heSBvbmx5IG5vdyBoYXZlIHRyaWdnZXJlZCByZXNjdWUgbW9kZSAqLwomIzQzOwkJCXByaXYtJmd0O3Jlc2N1ZV9tb2RlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpOwomIzQzOwkJCWlmICghcHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlKSB7CiYjNDM7CQlkZXZfd2Fybihkcy0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O3N3aXRjaCBzdHVjayBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiAKIAltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7c2VyZGVzX2xvY2spOwogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHByaXYtJmd0O3NlcmRlc19wb3J0cyk7IGkmIzQzOyYjNDM7KQpAQCAtNzE1LDExICYjNDM7NzI5LDIxIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zdGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBib29sIGVuYWJsZSkKIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlyZXR1cm4gbXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIG14bDg2Mnh4X3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQogewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJaWYgKG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKSkKIAkJZGV2X2Vycihkcy0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHBvcnQgJWRcbiYjMzQ7LCBwb3J0KTsKIH0KQEAgLTEzMzcsNiAmIzQzOzEzNjEsMTIgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpCiAJYm9vbCBpc19jcHVfcG9ydCA9IGRzYV9wb3J0X2lzX2NwdShkcCk7CiAJaW50IHJldDsKIAomIzQzOwkvKiBEU0EgcmVpbml0cyBmYWlsZWQgdXNlciBwb3J0cyBhcyB1bnVzZWQ7IHNoYXJlZCBwb3J0cyBtdXN0CiYjNDM7CSAqIHN1Y2NlZWQgZm9yIHRoZSB0cmVlIHRvIHJlZ2lzdGVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlKQomIzQzOwkJcmV0dXJuIGRzYV9wb3J0X2lzX3VzZXIoZHApID8gLUVOT0RFViA6IDA7CiYjNDM7CiAJcmV0ID0gbXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgZmFsc2UpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xNjI4LDYgJiM0MzsxNjU4LDkgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBCUl9TVEFURV9ESVNBQkxFRDoKIAkJcGFyYW0ucG9ydF9zdGF0ZSA9IGNwdV90b19sZTMyKE1YTDg2MlhYX1NUUF9QT1JUX1NUQVRFX0RJU0FCTEUpOwpAQCAtMjA4Niw2ICYjNDM7MjExOSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXhsODYyeHhfc3dpdGNoX29wcyA9IHsKIAkuZ2V0X3BhdXNlX3N0YXRzID0gbXhsODYyeHhfZ2V0X3BhdXNlX3N0YXRzLAogCS5nZXRfcm1vbl9zdGF0cyA9IG14bDg2Mnh4X2dldF9ybW9uX3N0YXRzLAogCS5nZXRfc3RhdHM2NCA9IG14bDg2Mnh4X2dldF9zdGF0czY0LAomIzQzOwkuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsCiYjNDM7CS5kZXZsaW5rX2ZsYXNoX3VwZGF0ZSA9IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlLAogfTsKIAogc3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCkBAIC0yMTkxLDggJiM0MzsyMjI2LDggQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBteGw4NjJ4eF9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAmIzM0O21heGxpbmVhcixteGw4NjI4MiYjMzQ7IH0sCi0JeyAuY29tcGF0aWJsZSA9ICYjMzQ7bWF4bGluZWFyLG14bDg2MjUyJiMzNDsgfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7bWF4bGluZWFyLG14bDg2MjgyJiMzNDssIC5kYXRhID0gJiMzNDtNYXhMaW5lYXIgTXhMODYyODImIzM0OyB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDttYXhsaW5lYXIsbXhsODYyNTImIzM0OywgLmRhdGEgPSAmIzM0O01heExpbmVhciBNeEw4NjI1MiYjMzQ7IH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXhsODYyeHhfb2ZfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaAppbmRleCA0MzJhNWYzZjJlMDhlNi4uNWQyMTI5NjU2MWUzYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oCkBAIC0zMTksNiAmIzQzOzMxOSwxMiBAQCBzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiB7CiAgKiBAZXZsYW5faW5ncmVzc19zaXplOiBwZXItcG9ydCBpbmdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZQogICogQGV2bGFuX2VncmVzc19zaXplOiAgcGVyLXBvcnQgZWdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZQogICogQHZmX2Jsb2NrX3NpemU6ICAgICAgcGVyLXBvcnQgVkxBTiBGaWx0ZXIgYmxvY2sgc2l6ZQomIzQzOyAqIEBibG9ja19ob3N0OiAgICAgICAgIHJlamVjdCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgKGV4Y2VwdCBGV19VUERBVEUpCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGEgZmlybXdhcmUgZmxhc2gKJiM0MzsgKiBAc2tpcF90ZWFyZG93bjogICAgICBkaXNjYXJkIGZpcm13YXJlIEFQSSBjb21tYW5kcyBkdXJpbmcgdGhlIHRlYXJkb3duCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIGJ5IHRoZSBwb3N0LWZsYXNoIHJlcHJvYmUKJiM0MzsgKiBAcmVzY3VlX21vZGU6ICAgICAgICBzd2l0Y2ggaXMgc3R1Y2sgaW4gTUNVYm9vdDsgZmlybXdhcmUgQVBJIGNvbW1hbmRzCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgZmFpbCBmYXN0LCBvbmx5IGNsYXVzZS0yMiBTTURJTyB3b3JrcwogICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVycwogICogICAgICAgICAgICAgICAgICAgICAgYW5kIGFjY3VtdWxhdGVzIHRoZW0gaW50byA2NC1iaXQgcGVyLXBvcnQgc3RhdHMKICAqLwpAQCAtMzM3LDYgJiM0MzszNDMsOSBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7CiAJdTE2IGV2bGFuX2luZ3Jlc3Nfc2l6ZTsKIAl1MTYgZXZsYW5fZWdyZXNzX3NpemU7CiAJdTE2IHZmX2Jsb2NrX3NpemU7CiYjNDM7CWJvb2wgYmxvY2tfaG9zdDsKJiM0MzsJYm9vbCBza2lwX3RlYXJkb3duOwomIzQzOwlib29sIHJlc2N1ZV9tb2RlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfd29yazsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmgKaW5kZXggOGMxNmVmMjNjYzEwMmEuLmM5ZTE5MzQ4ZGU2MTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc2EuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9kc2EuaApAQCAtMTE3MCw2ICYjNDM7MTE3MCw5IEBAIHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB7CiAJaW50CSgqZGV2bGlua19pbmZvX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAogCQkJCSAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAogCQkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzOwlpbnQJKCpkZXZsaW5rX2ZsYXNoX3VwZGF0ZSkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkJc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAlpbnQJKCpkZXZsaW5rX3NiX3Bvb2xfZ2V0KShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKTsKZGlmZiAtLWdpdCBhL25ldC9kc2EvZGV2bGluay5jIGIvbmV0L2RzYS9kZXZsaW5rLmMKaW5kZXggZWQzNDJmMzQ1NjkyYmIuLjI1MzExYTg3Y2JjNTZkIDEwMDY0NAotLS0gYS9uZXQvZHNhL2RldmxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL2RldmxpbmsuYwpAQCAtMjAsNiAmIzQzOzIwLDE4IEBAIHN0YXRpYyBpbnQgZHNhX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCwKJiM0MzsJCQkJICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9kZXZsaW5rX3RvX2RzKGRsKTsKJiM0MzsKJiM0MzsJaWYgKCFkcy0mZ3Q7b3BzLSZndDtkZXZsaW5rX2ZsYXNoX3VwZGF0ZSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIGRzLSZndDtvcHMtJmd0O2RldmxpbmtfZmxhc2hfdXBkYXRlKGRzLCBwYXJhbXMsIGV4dGFjayk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsCiAJCQkJICAgdW5zaWduZWQgaW50IHNiX2luZGV4LCB1MTYgcG9vbF9pbmRleCwKIAkJCQkgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbykKQEAgLTE2OSw2ICYjNDM7MTgxLDcgQEAgZHNhX2Rldmxpbmtfc2Jfb2NjX3RjX3BvcnRfYmluZF9nZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqZGxwLAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX29wcyA9IHsKIAkuaW5mb19nZXQJCQk9IGRzYV9kZXZsaW5rX2luZm9fZ2V0LAomIzQzOwkuZmxhc2hfdXBkYXRlCQkJPSBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUsCiAJLnNiX3Bvb2xfZ2V0CQkJPSBkc2FfZGV2bGlua19zYl9wb29sX2dldCwKIAkuc2JfcG9vbF9zZXQJCQk9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LAogCS5zYl9wb3J0X3Bvb2xfZ2V0CQk9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9nZXQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzU0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBNWEw4NjJ4eCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoIGhlcmUsIGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIHNvbWUgaW1wb3J0YW50IGZ1bmN0aW9uYWxpdHk6IGZpcm13YXJlIGZsYXNoaW5nIGFuZCBEZXZsaW5rIHN1cHBvcnQgZm9yIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggc3dpdGNoIGRyaXZlci4gU3BlY2lmaWNhbGx5LCB0aGF0JiMzOTtzIGluIGBkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY2AuIEFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFsc28gYWRkaW5nIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgc3VwcG9ydCBpbnRvIHRoZSBEU0EgY29yZSBpdHNlbGYsIGluIGBuZXQvZHNhL2RldmxpbmsuY2AuIFRoYXQmIzM5O3MgYSBuaWNlIGludGVncmF0aW9uLCBrZWVwaW5nIGV2ZXJ5dGhpbmcgdGlkeS4KClRoZSBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gYmUgY29uZmlndXJlZCB3aXRoIGBDT05GSUdfTkVUX0RTQV9NWEw4NjJgLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIGNvZGUsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjb25maWcgb3B0aW9uIGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kIGF2YWlsYWJsZSBpbiBvdXIgYnVpbGQuIEkgZG9uJiMzOTt0IHdhbnQgdG8gd2FzdGUgdGltZSBjaGFzaW5nIHBoYW50b20gY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gcHVsbCBvdXQgYGdyZXBwZXJgIGFuZCBkb3VibGUtY2hlY2ssIG1ha2Ugc3VyZSBgTkVUX0RTQV9NWEw4NjJgIGlzIGxlZ2l0LiBObyBzdXJwcmlzZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfRFNBX01YTDg2MiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWc6Mjpjb25maWcgTkVUX0RTQV9NWEw4NjJcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNYXhMaW5lYXIgTXhMODYyeHhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTkVUX0RTQV9NWEw4NjIpICYjNDM7PSBteGw4NjJ4eF9kc2Eub1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlLTMtbXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwNAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQ6IEZpcm13YXJlIEZsYXNoaW5nIGZvciBNYXhMaW5lYXIgTXhMODYyeHggRFNBIFN3aXRjaCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGZpcm13YXJlIGZsYXNoaW5nIGNhcGFiaWxpdHkgdmlhIGRldmxpbmsgZm9yIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCBkcml2ZXIuIEl0IGFsc28gYWRkcyBhIG5ldyBjYWxsYmFjaywgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCwgdG8gdGhlIERTQSBjb3JlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtDYW4gd2UgdHJpZ2dlciB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVT8mIzM0OwoKVGhlIERTQSBjb3JlIGNoYW5nZXMgaW4gYG5ldC9kc2EvZGV2bGluay5jYCBhcmUgcG90ZW50aWFsbHkgcmVhY2hhYmxlLCBidXQgY3VycmVudGx5LCBvbmx5IHRoZSBgbXhsODYyeHhgIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBhY3R1YWwgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBmdW5jdGlvbmFsaXR5LiBUaGlzIGRyaXZlciBpcywgYXMgZmFyIGFzIEkgY2FuIHNlZSwgYSBoYXJkd2FyZSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBhIE1heExpbmVhciBzd2l0Y2ggY2hpcC4gTXkgbWFpbiBxdWVzdGlvbiBoZXJlOiBDYW4gd2UgZW11bGF0ZSB0aGlzIHN3aXRjaCwgb3IgYXQgbGVhc3QgdHJpZ2dlciB0aGUgY29kZSBwYXRoIHdpdGggYSBkdW1teSBkZXZpY2U/IFRoZSBkcml2ZXIgdXNlcyBNRElPLCB3aGljaCwgdGhlb3JldGljYWxseSwgY291bGQgYmUgaW5zdGFudGlhdGVkIHRocm91Z2ggZGV2aWNlIHRyZWUgb3Igc29mdHdhcmUuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgaXQgcmVsaWVzIG9uIE1ESU8gZm9yIGhhcmR3YXJlIGNvbW11bmljYXRpb24uIENhbiBzeXprYWxsZXIgc29tZWhvdyBpbmplY3QgTURJTyByZWFkcy93cml0ZXMgb3IgY3JlYXRlIGEgbW9jayBNRElPIGRldmljZT8gSSBrbm93IHN5emthbGxlciBoYXMgYHN5el9nZW5ldGxpbmtgIGFuZCBzb21ldGltZXMgaXQgY2FuIHRyaWdnZXIgcHJvYmUgdmlhIHZpcnR1YWwgYnVzZXMsIGJ1dCB1c3VhbGx5IE1ESU8gZGV2aWNlcyBhcmUgcHJvYmVkIHZpYSBkZXZpY2UgdHJlZS4KClRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlYCBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgZGV2bGluayBuZXRsaW5rIGludGVyZmFjZS4gU28sIGlmIHRoZSBkZXZpY2UgaXMgcHJvYmVkLCBkZXZsaW5rIGNvbW1hbmRzIGNhbiByZWFjaCBpdC4gVGhpcyBpcyBwcm9taXNpbmchIFRoZSBmaXJtd2FyZSBmaWxlIHBhcnNpbmcgKGBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZWApIGhhcHBlbnMgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBmaWxlIGl0c2VsZiBpcyBzdXBwbGllZCBieSB1c2Vyc3BhY2UgdGhyb3VnaCBkZXZsaW5rIGZsYXNoIHVwZGF0ZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlOiBgbXhsODYyeHhfZmxhc2hfdmFsaWRhdGVgIHRha2VzIGEgYGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndgLiBUaGlzIGBmd2AgY29tZXMgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2UuIFRoZSB2YWxpZGF0aW9uIGxvZ2ljIGl0c2VsZiBsb29rcyB2dWxuZXJhYmxlOiB0aGVyZSBhcmUgY2hlY2tzIG9uIHRoZSBmaXJtd2FyZSBzaXplIGFuZCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgd2hlbiBjYWxjdWxhdGluZyBmaWxlIG9mZnNldHMuIFRoaXMgaXMgKmRlZmluaXRlbHkqIHBhcnNpbmcgdW50cnVzdGVkIGRhdGEsIGFuZCB0aGVyZWZvcmUgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlYCwgYG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlYCwgYG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlYCwgYW5kIGFsc28gdGhlIGNvcmUgRFNBIGZ1bmN0aW9uLCBgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlYC4KClRoZSBuZXh0IHF1ZXN0aW9uOiBJcyBgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVgIGl0c2VsZiByZWFjaGFibGU/IEl0IGRlcGVuZHMgb24gdGhlIGBteGw4NjJ4eGAgZHJpdmVyIGJlaW5nIHByb2JlZC4gU3l6a2FsbGVyIGNhbiBwcm9iYWJseSBwcm9iZSBzb21lIGRyaXZlcnMsIGJ1dCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIG9uIE1ESU8gYXJlIHVzdWFsbHkgaGFyZCB0byByZWFjaCB1bmxlc3MgdGhlcmUmIzM5O3MgYSBtb2NrIG9yIHNvbWUgZGV2aWNlIHRyZWUgb3ZlcmxheS4gQnV0LCBzaW5jZSB0aGUgRFNBIGNvcmUgY2hhbmdlIGluIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgIGlzIGdlbmVyaWMsIGl0IG1pZ2h0IGJlIHJlYWNoYWJsZSBpZiBhbnkgRFNBIHN3aXRjaCBpcyBwcmVzZW50LgoKTm93LCBjaGVja2luZyB0aGUgRFNBIHN3aXRjaCBkcml2ZXJzIHRoYXQgc3l6a2FsbGVyIGNhbiBwcm9iZS4uLiBUaGVyZSYjMzk7cyBgZHNhX2xvb3BgLCB3aGljaCBpcyBhIG1vY2sgRFNBIHN3aXRjaC4gSG93ZXZlciwgYGRzYV9sb29wYCBkb2VzbiYjMzk7dCBpbXBsZW1lbnQgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCwgc28gd2l0aG91dCB0aGUgYG14bDg2Mnh4YCBkcml2ZXIsIGl0IHdvdWxkIHJldHVybiBgLUVPUE5PVFNVUFBgLiBUaGF0IHdvdWxkIG1lYW4gd2Ugd291bGRuJiMzOTt0IGJlIGFibGUgdG8gZWFzaWx5IHJlYWNoIGBteGw4NjJ4eGAsIGJ1dCB3ZSBzaG91bGQgc3RpbGwgbWFyayBpdCBhcyB3b3J0aCBmdXp6aW5nLCBhcyBpdCBhZGRzIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZXMsIGZpcm13YXJlIHBhcnNpbmcsIGFuZCBhIG5ldyBkZXZsaW5rIG9wLgoKVGhlIGluc3RydWN0aW9ucyBzYXkgdGhhdCBpZiBjb2RlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgd2UgbmVlZCB0byB2ZXJpZnkgaXQuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBNRElPIGRldmljZSByZWFjaGFibGU/IFRoZSBEU0EgbG9vcCBkcml2ZXIgZXhpc3RzLCBidXQgSSYjMzk7bSB1bnN1cmUgaWYgaXQmIzM5O3MgdGhlIHNhbWUgYXMgdGhlIE1ESU8gZGV2aWNlLi4uIG5vLgoKQnV0LCBnaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGUgZmFjdCB0aGF0IHdlIGNhbiB0cmlnZ2VyIHRoZSBgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlYCBjb3JlIGZ1bmN0aW9uLCBhbmQgdGhhdCB0aGlzIGhhbmRsZXMgdXNlci1zdXBwbGllZCBkYXRhLCB0aGUgbmV0bGluayBjYWxscyBuZWVkIHRvIGJlIGZ1enplZCBldmVuIGlmIHRoZSBgbXhsODYyeHhgIGRyaXZlciBjYW4mIzM5O3QgYmUgcHJvYmVkLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayByZWFjaGFiaWxpdHkgb2YgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAuIFllcywgaWYgd2UgaGF2ZSAqYW55KiBEU0Egc3dpdGNoIChsaWtlIGBkc2FfbG9vcGApLCB0aGUgY29yZSBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHZpYSBkZXZsaW5rIG5ldGxpbmsuIEl0IHdpbGwgY2FsbCB0aGUgaW5kaXZpZHVhbCBzd2l0Y2ggb3AuCgpIZXJlJiMzOTtzIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9sczoKCiogICBgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlYAoqICAgYG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlYAoqICAgYG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlYAoqICAgYG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlYAoKQW5kIHRoZSBuZWNlc3NhcnkgY29uZmlnczoKCiogICBgTkVUX0RTQV9NWEw4NjJgCiogICBgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RTQV9NWEw4NjImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWc6Mjpjb25maWcgTkVUX0RTQV9NWEw4NjJcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNYXhMaW5lYXIgTXhMODYyeHhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc2OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZWxhdGlvbnNoaXBzIGhlcmUuIFRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGNyYWNrIG9wZW4gdGhhdCBLY29uZmlnIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGlzICpyZWFsbHkqIHJlbHlpbmcgb24uJiMzNDsgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYnJlYWRjcnVtYnMsIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSAqaWZzKiBhbmQgKmRlcGVuZHMgb24qIHN0YXRlbWVudHMgdGhhdCBnb3Zlcm4gaG93IHRoZXNlIGNvbXBvbmVudHMgcGxheSB0b2dldGhlci4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBvciBtb2R1bGVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHZhcmlvdXMgY29uZGl0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIGFueXRoaW5nIHRoYXQganVtcHMgb3V0IOKAkyBjb21wbGV4IG5lc3RlZCBkZXBlbmRlbmNpZXMsIHVudXN1YWwgdXNlIG9mIGBzZWxlY3RgIG9yIGBkZWZhdWx0YCwgb3IgYW55IGNpcmN1bGFyIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiaXRlIG1lIGxhdGVyLiBNeSBnb2FsIGhlcmUgaXMgYSBxdWljaywgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cgYmVmb3JlIEkgZ2V0IGJvZ2dlZCBkb3duIGluIHRoZSBtaW51dGlhZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5FVF9EU0FfTVhMODYyXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXhMaW5lYXIgTXhMODYyeHhcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTkVUX0RTQVxuICAgNTpcdFx0c2VsZWN0IENSQzE2XG4gICA2Olx0XHRzZWxlY3QgTkVUX0RTQV9UQUdfTVhMXzg2MlhYXG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaCBmYW1pbHkuXG4gICA5Olx0XHQgIFRoZXNlIHN3aXRjaGVzIGhhdmUgdHdvIDEwR0UgU2VyRGVzIGludGVyZmFjZXMsIG9uZSB0eXBpY2FsbHlcbiAgMTA6XHRcdCAgdXNlZCBhcyBDUFUgcG9ydC5cbiAgMTE6XHRcdCAgIC0gTXhMODYyODIgaGFzIGVpZ2h0IDIuNSBHaWdhYml0IFBIWXNcbiAgMTI6XHRcdCAgIC0gTXhMODYyNTIgaGFzIGZpdmUgMi41IEdpZ2FiaXQgUEhZc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjMxCgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlci4gVGhlIGRlcGVuZGVuY2llcyBwb2ludCBkaXJlY3RseSB0byBgTkVUX0RTQWAsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBrZXkgY29uZmlnIGlzIGBORVRfRFNBX01YTDg2MmAuICBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIGRvdWJsZS1jaGVja2luZywganVzdCB0byBiZSB0aG9yb3VnaCwgdGhhdCBubyBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIHRoYXQmIzM5O3MgdGhlIG9ubHkgb25lLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIHBhcnRpY3VsYXJseSBgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlYCwgaXMgcmVhY2hhYmxlLiBZZXAsIGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGdvb2QgdG8gZ28gdGhyb3VnaCBkZXZsaW5rIG5ldGxpbmssIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuCgpCYXNlZCBvbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gZ29pbmcgdG8gc2V0IHNvbWUgZnV6emluZyBwYXJhbWV0ZXJzLiBUaGlzIGxvb2tzIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcsIHNvIEkmIzM5O2xsIG1hcmsgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgLiBJJiMzOTtsbCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAsIGBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZWAsIGBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZWAsIGFuZCBhbHNvIHRoZSBjb3JlIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLgoKRmluYWxseSwgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSBmb3IgdGVzdGluZywgSSYjMzk7bGwgZXhwbGljaXRseSBlbmFibGUgYE5FVF9EU0FfTVhMODYyYC4KClRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoaXMgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgZm9yIHRoZSBNeEw4NjJ4eCBkcml2ZXIsIHVzaW5nIGRldmxpbmsuIEl0IGludHJvZHVjZXMgdGhlIG5lY2Vzc2FyeSBjb2RlIHRvIGhhbmRsZSBmaXJtd2FyZSBmaWxlcyBjb21pbmcgZnJvbSB1c2Vyc3BhY2UuIEZ1cnRoZXJtb3JlLCBpdCBhZGRzIGEgbmV3IGRldmxpbmsgY2FsbGJhY2sgdG8gdGhlIERTQSBjb3JlLCB3aGljaCBzZWVtcyBpbXBvcnRhbnQgdG8gYmUgdGVzdGluZy4gIFRoaXMgaW50cm9kdWNlcyBhIG5ldyBhdHRhY2sgc3VyZmFjZSBzbyBpdCBuZWVkcyB0byBiZSB0ZXN0ZWQgdmlnb3JvdXNseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9EU0FfTVhMODYyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUmIzM0OywKICAgICYjMzQ7bXhsODYyeHhfZmxhc2hfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bXhsODYyeHhfZmxhc2hfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7ZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB2aWEgZGV2bGluayB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCBpbmNsdWRpbmcgcGFyc2luZyBvZiB0aGUgZmlybXdhcmUgZmlsZSB3aGljaCBjb21lcyBmcm9tIHVzZXJzcGFjZS4gSXQgYWxzbyBhZGRzIGEgbmV3IGRldmxpbmsgY2FsbGJhY2sgdG8gdGhlIERTQSBjb3JlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfRFNBX01YTDg2MiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O214bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlJiMzNDssCiAgICAmIzM0O214bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlJiMzNDssCiAgICAmIzM0O214bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlJiMzNDssCiAgICAmIzM0O2RzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgdmlhIGRldmxpbmsgdG8gdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlciwgaW5jbHVkaW5nIHBhcnNpbmcgb2YgdGhlIGZpcm13YXJlIGZpbGUgd2hpY2ggY29tZXMgZnJvbSB1c2Vyc3BhY2UuIEl0IGFsc28gYWRkcyBhIG5ldyBkZXZsaW5rIGNhbGxiYWNrIHRvIHRoZSBEU0EgY29yZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjMzOjU5Ljc4MDAyMzY2OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MjE5MTcxODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9EU0FfTVhMODYyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVcIixcbiAgICBcIm14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlXCIsXG4gICAgXCJteGw4NjJ4eF9mbGFzaF9maXJtd2FyZVwiLFxuICAgIFwiZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmaXJtd2FyZSBmbGFzaGluZyBzdXBwb3J0IHZpYSBkZXZsaW5rIHRvIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCBkcml2ZXIsIGluY2x1ZGluZyBwYXJzaW5nIG9mIHRoZSBmaXJtd2FyZSBmaWxlIHdoaWNoIGNvbWVzIGZyb20gdXNlcnNwYWNlLiBJdCBhbHNvIGFkZHMgYSBuZXcgZGV2bGluayBjYWxsYmFjayB0byB0aGUgRFNBIGNvcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjMzOjU5Ljc4MDAzMTA0OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcxMDQyMzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTZhZGYyYmI3ZjNjNjNmMTk0OWY2OWUyNjM2OGYyMTBjNWU3MTIzN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAwMzozMzo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcXG5pbmRleCBhN2JlMGU2NjY5ZGZhNS4uYmNjYWMwZDBmNzAzZjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXFxuQEAgLTEsMyArMSwzIEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSArPSBteGw4NjJ4eF9kc2Eub1xcbi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm9cXG4rbXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXFxuaW5kZXggYzg3YTk1NWMxM2M0OGUuLmUyYWEyOTM0ZTllMTYyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxcbkBAIC03MCw2ICs3MCw3IEBAXFxuICNkZWZpbmUgSU5UX0dQSFlfUkVBRFxcdFxcdFxcdChHUFlfR1BZMlhYX01BR0lDICsgMHgxKVxcbiAjZGVmaW5lIElOVF9HUEhZX1dSSVRFXFx0XFx0XFx0KEdQWV9HUFkyWFhfTUFHSUMgKyAweDIpXFxuIFxcbisjZGVmaW5lIFNZU19NSVNDX0ZXX1VQREFURVxcdFxcdChTWVNfTUlTQ19NQUdJQyArIDB4MSlcXG4gI2RlZmluZSBTWVNfTUlTQ19GV19WRVJTSU9OXFx0XFx0KFNZU19NSVNDX01BR0lDICsgMHgyKVxcbiBcXG4gI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19DT05GSUdcXHQoTVhMODYyWFhfWFBDU19NQUdJQyArIDB4MSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjZhMWRlMjQ3YzJmMDVkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXFxuQEAgLTAsMCArMSw0ODIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4XFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNSBEYW5pZWwgR29sbGUgXFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1xcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjMzIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vdmVyZmxvdy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJteGw4NjJ4eC1hcGkuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWNtZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibXhsODYyeHgtZncuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWhvc3QuaFxcXCJcXG4rXFxuKy8qIFNCIFBESSByZWdpc3RlcnMgKGNsYXVzZS0yMiBTTURJTyBhZGRyZXNzIHNwYWNlKSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMXFx0XFx0MHhlMTAwXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0FERFJcXHRcXHQweGUxMDFcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfREFUQVxcdFxcdDB4ZTEwMlxcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFUXFx0XFx0MHhlMTAzXFxuK1xcbisvKiBTQiBQREkgQ1RSTCBtb2RlcyAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVFxcdDB4MDBcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUlxcdDB4MDJcXG4rXFxuKy8qIFNCIFBESSBoYW5kc2hha2UgbWFnaWMgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkVBRFlcXHRcXHQweGM1NWNcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfU1RBUlRcXHRcXHQweGY0OGZcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfRU5EXFx0XFx0MHgzY2MzXFxuK1xcbisvKiBGaXJtd2FyZSB0cmFuc2ZlciBnZW9tZXRyeSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0hEUl9TSVpFXFx0XFx0MjBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX0hBTEZcXHRcXHQxNjM4NFxcdC8qIHdvcmRzIHBlciBoYWxmLWJhbmsgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX1NMSUNFXFx0XFx0MzI3NjBcXHQvKiB3b3JkcyBwZXIgZnVsbCBzbGljZSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1NCMV9BRERSXFx0XFx0MHg3ODAwXFx0LyogU0IxIHdvcmQgYWRkcmVzcyAqL1xcbitcXG4rLyogVGltZW91dHMgKGdlbmVyb3VzIHVwcGVyIGJvdW5kcykgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TXFx0MzAwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NU1xcdDUwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TXFx0MzAwMDAwXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NU1xcdDEyMDAwMFxcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NU1xcdDUwMDBcXG4rXFxuK3N0YXRpYyB2b2lkIG14bDg2Mnh4X3NiX3BkaV9yZXNldChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUixcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUxNiBleHBlY3RlZCxcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKCh1MTYpcmV0ID09IGV4cGVjdGVkKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0dXNsZWVwX3JhbmdlKDEwMDAwLCAxMTAwMCk7XFxuK1xcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHUzMiBkYXRhX3dyaXR0ZW4pXFxuK3tcXG4rXFx0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgZGF0YV93cml0dGVuKTtcXG4rXFxuK1xcdHJldHVybiBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxcbitcXHRcXHRcXHRcXHQgIHUzMiBkb25lLCB1MzIgdG90YWwpXFxuK3tcXG4rXFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgc3RhdHVzLCBOVUxMLCBkb25lLCB0b3RhbCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QgLSBjaGVjayB3aGV0aGVyIHRoZSBzd2l0Y2ggc2l0cyBpbiBNQ1Vib290XFxuKyAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBkYXRhXFxuKyAqXFxuKyAqIE1DVWJvb3Qgc2lnbmFscyByZWFkaW5lc3MgZm9yIGEgZmlybXdhcmUgZG93bmxvYWQgd2l0aCB0aGUgU0IgUERJXFxuKyAqIHJlYWR5IG1hZ2ljOyBvbmx5IHRoZSBjbGF1c2UtMjIgU01ESU8gaW50ZXJmYWNlIHdvcmtzIGluIHRoaXMgc3RhdGUuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBNQ1Vib290IGlzIHdhaXRpbmcgZm9yIGEgZmlybXdhcmUgZG93bmxvYWQuXFxuKyAqL1xcbitib29sIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0ID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWTtcXG4rfVxcbitcXG4rLyogZGV2aWNlX3JlcHJvYmUoKSAtXFx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2IHdoaWxlIHRoZSB3b3JrIHJ1bnMsIHNvXFxuKyAqIHRoZSB3b3JrIHN0cnVjdCBjYW5ub3QgbGl2ZSBpbiBteGw4NjJ4eF9wcml2LlxcbisgKi9cXG4rc3RydWN0IG14bDg2Mnh4X3JlcHJvYmUge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcms7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBteGw4NjJ4eF9yZXByb2JlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlICpyZXByb2JlID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlLCBkd29yay53b3JrKTtcXG4rXFxuK1xcdGlmIChkZXZpY2VfcmVwcm9iZShyZXByb2JlLVxcdTAwM2VkZXYpKVxcbitcXHRcXHRkZXZfZXJyKHJlcHJvYmUtXFx1MDAzZWRldiwgXFxcInJlcHJvYmUgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0cHV0X2RldmljZShyZXByb2JlLVxcdTAwM2VkZXYpO1xcbitcXHRrZnJlZShyZXByb2JlKTtcXG4rXFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuK31cXG4rXFxuKy8qIE1DVWJvb3QgZmlybXdhcmUgaW1hZ2UgaGVhZGVyICovXFxuK3N0cnVjdCBteGw4NjJ4eF9md19oZHIge1xcbitcXHRfX2xlMzIgaW1hZ2VfdHlwZTtcXG4rXFx0X19sZTMyIGltYWdlX3NpemVfMTtcXG4rXFx0X19sZTMyIGltYWdlX2NoZWNrc3VtXzE7XFxuK1xcdF9fbGUzMiBpbWFnZV9zaXplXzI7XFxuK1xcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xcbit9IF9fcGFja2VkO1xcbitcXG4rc3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyICpwYXlsb2FkX3NpemUpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqaGRyO1xcbitcXHR1MzIgc2l6ZTEsIHNpemUyLCB0b3RhbDtcXG4rXFx0Y29uc3QgdTggKnBheWxvYWQ7XFxuK1xcdHUzMiBjcmM7XFxuK1xcbitcXHRpZiAoZnctXFx1MDAzZXNpemUgXFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVxcdTAwM2VkYXRhO1xcbitcXHRwYXlsb2FkID0gZnctXFx1MDAzZWRhdGEgKyBNWEw4NjJYWF9GV19IRFJfU0laRTtcXG4rXFx0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX3NpemVfMSk7XFxuK1xcdHNpemUyID0gbGUzMl90b19jcHUoaGRyLVxcdTAwM2VpbWFnZV9zaXplXzIpO1xcbitcXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhzaXplMSwgc2l6ZTIsIFxcdTAwMjZ0b3RhbCkgfHxcXG4rXFx0ICAgIHRvdGFsIFxcdTAwM2UgZnctXFx1MDAzZXNpemUgLSBNWEw4NjJYWF9GV19IRFJfU0laRSkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmlybXdhcmUgZmlsZSB0b28gc21hbGwgZm9yIGRlY2xhcmVkIHNpemVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0b3RhbCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNpemUxKSB7XFxuK1xcdFxcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcXG4rXFx0XFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX2NoZWNrc3VtXzEpKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcImZsYXNoOiBpbWFnZSAxIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMSkpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoc2l6ZTIpIHtcXG4rXFx0XFx0Y3JjID0gfmNyYzMyX2xlKH4wVSwgcGF5bG9hZCArIHNpemUxLCBzaXplMik7XFxuK1xcdFxcdGlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLVxcdTAwM2VpbWFnZV9jaGVja3N1bV8yKSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJmbGFzaDogaW1hZ2UgMiBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0Y3JjLCBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX2NoZWNrc3VtXzIpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0KnBheWxvYWRfc2l6ZSA9IHRvdGFsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfZmxhc2hfZmlybXdhcmUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBwYXlsb2FkX3NpemUsIHN0cnVjdCBkZXZsaW5rICpkbClcXG4re1xcbitcXHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVxcdTAwM2VkYXRhICsgTVhMODYyWFhfRldfSERSX1NJWkU7XFxuK1xcdHUzMiB3b3JkX2lkeCA9IDAsIGRhdGFfd3JpdHRlbiA9IDAsIGlkeCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV4dF9ub3RpZnkgPSAwO1xcbitcXHR1MTYgd29yZCwgZmRhdGE7XFxuK1xcdGludCByZXQsIGk7XFxuK1xcbitcXHQvKiBTdGVwIDE6IHJlYm9vdCB0aGUgZmlybXdhcmUgaW50byBNQ1Vib290IHJlc2N1ZSBtb2RlICovXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpIHtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfYXBpX3dyYXAocHJpdiwgU1lTX01JU0NfRldfVVBEQVRFLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRmYWxzZSwgZmFsc2UpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcImZsYXNoOiBGV19VUERBVEUgY29tbWFuZCBmYWlsZWQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0RVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBGYWlsdXJlcyBmcm9tIGhlcmUgb24gbXVzdCBnbyB0aHJvdWdoIGVuZF9tYWdpYyBzbyBNQ1Vib290XFxuK1xcdCAqIHJlYm9vdHMgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuXFxuK1xcdCAqL1xcbitcXG4rXFx0LyogU3RlcCAyOiB3YWl0IGZvciBib290bG9hZGVyIHJlYWR5ICovXFxuK1xcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXFxcIldhaXRpbmcgZm9yIGJvb3Rsb2FkZXJcXFwiLCAwLCAwKTtcXG4rXFx0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSxcXG4rXFx0XFx0XFx0XFx0XFx0TVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmxhc2g6IGJvb3Rsb2FkZXIgbm90IHJlYWR5OiAlcGVcXFxcblxcXCIsIEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdGdvdG8gZW5kX21hZ2ljO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTdGVwIDM6IHN0YXJ0IGhhbmRzaGFrZSAqL1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfU1RBUlQpO1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFSVCArIDEsXFxuK1xcdFxcdFxcdFxcdFxcdE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogc3RhcnQgaGFuZHNoYWtlIGZhaWxlZDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0fVxcbitcXG4rXFx0LyogU3RlcCA0OiB0cmFuc2ZlciBpbWFnZSBoZWFkZXIgKi9cXG4rXFx0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcXFwiRXJhc2luZyBmbGFzaFxcXCIsIDAsIDApO1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSAvIDI7IGkrKykge1xcbitcXHRcXHR3b3JkID0gZnctXFx1MDAzZWRhdGFbaSAqIDJdIHxcXG4rXFx0XFx0ICAgICAgICgodTE2KWZ3LVxcdTAwM2VkYXRhW2kgKiAyICsgMV0gXFx1MDAzY1xcdTAwM2MgOCk7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCB3b3JkKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiZmxhc2g6IGhlYWRlciB3cml0ZSBmYWlsZWQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0RVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0XFx0Z290byBlbmRfbWFnaWM7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XFxuK1xcbitcXHQvKiB0aGUgYnl0ZSBjb3VudCBpbiBTVEFUIHRyaWdnZXJzIHRoZSBlcmFzZSAqL1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9GV19IRFJfU0laRSk7XFxuK1xcbitcXHQvKiBBQ0sgaXMgYnl0ZSBjb3VudCArIDEgKi9cXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9GV19IRFJfU0laRSArIDEsXFxuK1xcdFxcdFxcdFxcdFxcdE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogaGVhZGVyIEFDSyBmYWlsZWQ6ICVwZVxcXFxuXFxcIiwgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0Z290byBlbmRfbWFnaWM7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0ZXAgNTogd2FpdCBmb3IgZXJhc2UgdG8gY29tcGxldGUgKi9cXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLFxcbitcXHRcXHRcXHRcXHRcXHRNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0fVxcbitcXG4rXFx0LyogU3RlcCA2OiB0cmFuc2ZlciBwYXlsb2FkICovXFxuK1xcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcXG4rXFxuK1xcdHdoaWxlIChpZHggXFx1MDAzYyBwYXlsb2FkX3NpemUpIHtcXG4rXFx0XFx0aWYgKGlkeCArIDEgXFx1MDAzYyBwYXlsb2FkX3NpemUpIHtcXG4rXFx0XFx0XFx0ZmRhdGEgPSBwYXlsb2FkW2lkeF0gfFxcbitcXHRcXHRcXHRcXHQoKHUxNilwYXlsb2FkW2lkeCArIDFdIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRcXHRcXHRpZHggKz0gMjtcXG4rXFx0XFx0XFx0ZGF0YV93cml0dGVuICs9IDI7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGZkYXRhID0gcGF5bG9hZFtpZHhdO1xcbitcXHRcXHRcXHRpZHgrKztcXG4rXFx0XFx0XFx0ZGF0YV93cml0dGVuKys7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCBmZGF0YSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcImZsYXNoOiBkYXRhIHdyaXRlIGZhaWxlZCBhdCAldS8ldTogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0XFx0Z290byBlbmRfbWFnaWM7XFxuK1xcdFxcdH1cXG4rXFx0XFx0d29yZF9pZHgrKztcXG4rXFxuK1xcdFxcdGlmIChpZHggXFx1MDAzZT0gcGF5bG9hZF9zaXplKSB7XFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogSGFsZi1iYW5rIGJvdW5kYXJ5OiBzd2l0Y2ggdG8gU0IxIGFkZHJlc3MgKi9cXG4rXFx0XFx0aWYgKHdvcmRfaWR4ID09IE1YTDg2MlhYX0ZXX0JBTktfSEFMRikge1xcbitcXHRcXHRcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRcXHRcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBNWEw4NjJYWF9GV19TQjFfQUREUik7XFxuK1xcdFxcdFxcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcXG4rXFx0XFx0fSBlbHNlIGlmICh3b3JkX2lkeCBcXHUwMDNlPSBNWEw4NjJYWF9GV19CQU5LX1NMSUNFKSB7XFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pO1xcbitcXHRcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcImZsYXNoOiB3cml0ZSB0aW1lb3V0IGF0ICV1LyV1OiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdGlkeCwgcGF5bG9hZF9zaXplLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHR3b3JkX2lkeCA9IDA7XFxuK1xcdFxcdFxcdGRhdGFfd3JpdHRlbiA9IDA7XFxuK1xcdFxcdFxcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcXG4rXFxuK1xcdFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG5leHRfbm90aWZ5KSkge1xcbitcXHRcXHRcXHRcXHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFxcXCJGbGFzaGluZ1xcXCIsIGlkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGF5bG9hZF9zaXplKTtcXG4rXFx0XFx0XFx0XFx0bmV4dF9ub3RpZnkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0fVxcbitcXG4rXFx0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcXFwiRmxhc2hpbmdcXFwiLCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7XFxuK1xcbitlbmRfbWFnaWM6XFxuK1xcdC8qIHJlYm9vdCBNQ1Vib290IGV2ZW4gYWZ0ZXIgYSBmYWlsZWQgdHJhbnNmZXIgKi9cXG4rXFx0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXFxuK1xcdFxcdFxcdCAgICAgTVhMODYyWFhfU0JfUERJX0VORCk7XFxuK1xcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0Y29uc3QgY2hhciAqbW9kZWw7XFxuK1xcdGNoYXIgdmVyX3N0clszMl07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtb2RlbCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkcy1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKG1vZGVsKSB7XFxuK1xcdFxcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgREVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19BU0lDX0lELFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG1vZGVsKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0LyogY2Fub25pY2FsIG51bGwgdmVyc2lvbjogbm8gb3BlcmF0aW9uYWwgZmlybXdhcmUgb24gdGhlIHN3aXRjaCAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdHJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFxcXCJmd1xcXCIsIFxcXCIwLjAuMFxcXCIpO1xcbitcXG4rXFx0c25wcmludGYodmVyX3N0ciwgc2l6ZW9mKHZlcl9zdHIpLCBcXFwiJXUuJXUuJXVcXFwiLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5taW5vcixcXG4rXFx0XFx0IHByaXYtXFx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xcbitcXG4rXFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgXFxcImZ3XFxcIiwgdmVyX3N0cik7XFxuK31cXG4rXFxuK2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24gdmVyID0ge307XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlICpyZXByb2JlO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbitcXHR1MzIgcGF5bG9hZF9zaXplO1xcbitcXHRpbnQgcmV0LCBpO1xcbitcXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlY29tcG9uZW50KSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJjb21wb25lbnQgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlKHByaXYsIHBhcmFtcy1cXHUwMDNlZncsIFxcdTAwMjZwYXlsb2FkX3NpemUpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJmaXJtd2FyZSBpbWFnZSB2YWxpZGF0aW9uIGZhaWxlZFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBFdmVyeXRoaW5nIG5lZWRlZCB0byBzY2hlZHVsZSB0aGUgcmVwcm9iZSB3aGljaCByZXN0b3Jlc1xcbitcXHQgKiBub3JtYWwgb3BlcmF0aW9uIG11c3QgYmUgaW4gcGxhY2UgYmVmb3JlIHRoZSBzd2l0Y2ggaXNcXG4rXFx0ICogZGlzdHVyYmVkLlxcbitcXHQgKi9cXG4rXFx0cmVwcm9iZSA9IGt6YWxsb2Nfb2JqKCpyZXByb2JlKTtcXG4rXFx0aWYgKCFyZXByb2JlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7XFxuK1xcdFxcdGtmcmVlKHJlcHJvYmUpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmVwcm9iZS1cXHUwMDNlZGV2ID0gZ2V0X2RldmljZShkcy1cXHUwMDNlZGV2KTtcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJlcHJvYmUtXFx1MDAzZWR3b3JrLCBteGw4NjJ4eF9yZXByb2JlX3dvcmtfZm4pO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRkZXZfaW5mbyhkcy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcImZsYXNoOiByZWNvdmVyaW5nIHN3aXRjaCBmcm9tIE1DVWJvb3QgcmVzY3VlIG1vZGVcXFxcblxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGRldl9pbmZvKGRzLVxcdTAwM2VkZXYsIFxcXCJmbGFzaDogcnVubmluZyBmaXJtd2FyZSAldS4ldS4ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IHByaXYtXFx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXFx1MDAzZWZ3X3ZlcnNpb24ubWlub3IsXFxuK1xcdFxcdFxcdCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uKTtcXG4rXFxuK1xcdC8qIENsb3NlIHBvcnRzIHdoaWxlIHRoZSBmaXJtd2FyZSBpcyBzdGlsbCBhbGl2ZSBzbyB0aGUgRFNBXFxuK1xcdCAqIGNvcmUncyBNREIvRkRCIHRyYWNraW5nIGlzIGRyYWluZWQsIGFuZCBkZXRhY2ggdXNlciBwb3J0c1xcbitcXHQgKiBzbyB1c2Vyc3BhY2UgY2Fubm90IHJlb3BlbiB0aGVtIGR1cmluZyB0aGUgZmxhc2guIFRoZVxcbitcXHQgKiBjb25kdWl0IGJlbG9uZ3MgdG8gdGhlIE1BQyBkcml2ZXIgYW5kIGlzIG9ubHkgY2xvc2VkLlxcbitcXHQgKi9cXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KGRwLCBkcykge1xcbitcXHRcXHRpZiAoZHAtXFx1MDAzZXVzZXIpIHtcXG4rXFx0XFx0XFx0ZGV2X2Nsb3NlKGRwLVxcdTAwM2V1c2VyKTtcXG4rXFx0XFx0XFx0bmV0aWZfZGV2aWNlX2RldGFjaChkcC1cXHUwMDNldXNlcik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGRwLCBkcylcXG4rXFx0XFx0ZGV2X2Nsb3NlKGRwLVxcdTAwM2Vjb25kdWl0KTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWJsb2NrX2hvc3QgPSB0cnVlO1xcbitcXG4rXFx0c2V0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKTtcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0c193b3JrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlY3JjX2Vycl93b3JrKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG4rXFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbaV0uaG9zdF9mbG9vZF93b3JrKTtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHByaXYsIHBhcmFtcy1cXHUwMDNlZncsIHBheWxvYWRfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZHMtXFx1MDAzZWRldmxpbmspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiZmlybXdhcmUgdHJhbnNmZXIgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRpZiAoIXJldCkge1xcbitcXHRcXHQvKiBsaWZ0IHRoZSBibG9jayB0byBxdWVyeSB0aGUgbmV3IGZpcm13YXJlIHZlcnNpb24gKi9cXG4rXFx0XFx0cHJpdi1cXHUwMDNlYmxvY2tfaG9zdCA9IGZhbHNlO1xcbitcXHRcXHRwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSA9IGZhbHNlO1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNnZlciwgMCwgc2l6ZW9mKHZlcikpO1xcbitcXHRcXHRpZiAoIU1YTDg2MlhYX0FQSV9SRUFEX1FVSUVUKHByaXYsIFNZU19NSVNDX0ZXX1ZFUlNJT04sIHZlcikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHZlci5pdl9tYWpvcilcXG4rXFx0XFx0XFx0ZGV2X2luZm8oZHMtXFx1MDAzZWRldiwgXFxcImZsYXNoOiBuZXcgZmlybXdhcmUgJXUuJXUuJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCB2ZXIuaXZfbWFqb3IsIHZlci5pdl9taW5vcixcXG4rXFx0XFx0XFx0XFx0IGxlMTZfdG9fY3B1KHZlci5pdl9yZXZpc2lvbikpO1xcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vza2lwX3RlYXJkb3duID0gdHJ1ZTtcXG4rXFxuK1xcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cmVwcm9iZS1cXHUwMDNlZHdvcmssIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41N2MyMDAwY2ZlZTUxOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxcbkBAIC0wLDAgKzEsMTggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rXFxuKyNpZm5kZWYgX19NWEw4NjJYWF9GV19IXFxuKyNkZWZpbmUgX19NWEw4NjJYWF9GV19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbitcXG4rc3RydWN0IG14bDg2Mnh4X3ByaXY7XFxuK1xcbitib29sIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XFxuK2ludCBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4raW50IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4rXFxuKyNlbmRpZiAvKiBfX01YTDg2MlhYX0ZXX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmNcXG5pbmRleCA0YWNkMjE2ZjdjYzAwOS4uODA1NjVkZTcxMGQzNzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmNcXG5AQCAtMTUsNiArMTUsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZHNhLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJteGw4NjJ4eC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibXhsODYyeHgtY21kLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJteGw4NjJ4eC1ob3N0LmhcXFwiXFxuIFxcbiAjZGVmaW5lIENUUkxfQlVTWV9NQVNLXFx0XFx0XFx0QklUKDE1KVxcbkBAIC0zNDAsNiArMzQxLDIxIEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqX2RhdGEsXFxuIFxcbiBcXHRtdXRleF9sb2NrX25lc3RlZChcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcXG4gXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vza2lwX3RlYXJkb3duKSB7XFxuK1xcdFxcdHJldCA9IDA7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VibG9ja19ob3N0IFxcdTAwMjZcXHUwMDI2IGNtZCAhPSBTWVNfTUlTQ19GV19VUERBVEUpIHtcXG4rXFx0XFx0cmV0ID0gLUVCVVNZO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4gXFx0bWF4ID0gKHNpemUgKyAxKSAvIDI7XFxuIFxcbiBcXHRyZXQgPSBteGw4NjJ4eF9idXN5X3dhaXQocHJpdik7XFxuQEAgLTQ5NSw2ICs1MTEsNDEgQEAgaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHXFx0XFx0MHgxZlxcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTS1xcdDB4ZmZmMFxcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX09GRl9NQVNLXFx0XFx0MHgwMDBmXFxuK1xcbitpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpXFxuK3tcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cztcXG4rXFx0aW50IHBoeSA9IHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbG9jayk7XFxuK1xcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsXFxuK1xcdFxcdFxcdCAgICAgIGFkZHIgXFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuK1xcdFxcdHJldCA9IF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5LCBhZGRyIFxcdTAwMjYgTVhMODYyWFhfU01ESU9fT0ZGX01BU0spO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbClcXG4re1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgcGh5ID0gcHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgYWRkciBcXHUwMDI2IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBhZGRyIFxcdTAwMjYgTVhMODYyWFhfU01ESU9fT0ZGX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZhbCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiB2b2lkIG14bDg2Mnh4X2hvc3RfaW5pdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNnByaXYtXFx1MDAzZWNyY19lcnJfd29yaywgbXhsODYyeHhfY3JjX2Vycl93b3JrX2ZuKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmhcXG5pbmRleCA2NmQ2YWUxOThhZmY0NS4uNGUwNTRjNmU0YzBlNDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmhcXG5AQCAtMTgsNSArMTgsNyBAQCBpbnQgbXhsODYyeHhfYXBpX3dyYXAoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUxNiBjbWQsIHZvaWQgKmRhdGEsIHUxNiBzaXplLFxcbiBcXHRteGw4NjJ4eF9hcGlfd3JhcChkZXYsIGNtZCwgXFx1MDAyNihkYXRhKSwgc2l6ZW9mKChkYXRhKSksIHRydWUsIHRydWUpXFxuIFxcbiBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpO1xcbitpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpO1xcbitpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKTtcXG4gXFxuICNlbmRpZiAvKiBfX01YTDg2MlhYX0hPU1RfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xcbmluZGV4IGI2ODk2NTJhYTliOTIwLi5hNWI2OTQwYjU1MmU5ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xcbkBAIC00MDYsNiArNDA2LDggQEAgbXhsODYyeHhfcGh5bGlua19tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFxuIFxcdHN3aXRjaCAocG9ydCkge1xcbiBcXHRjYXNlIDkgLi4uIDE2OlxcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHRpZiAoIU1YTDg2MlhYX0ZXX1ZFUl9NSU4ocHJpdiwgMSwgMCwgODQpKSB7XFxuIFxcdFxcdFxcdGRldl93YXJuX29uY2UoZHAtXFx1MDAzZWRzLVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIFxcXCJTZXJEZXMgUENTIHVuc3VwcG9ydGVkIG9uIG9sZCBmaXJtd2FyZS5cXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXFxuaW5kZXggNDVkMjM3YjNhNDBmMTAuLjI2NWE4M2Y0YjM3MWI1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcXG5AQCAtMjEsNiArMjEsNyBAQFxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHguaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWFwaS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHgtY21kLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJteGw4NjJ4eC1mdy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHgtaG9zdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHgtcGh5bGluay5oXFxcIlxcbiBcXG5AQCAtNjI4LDkgKzYyOSwyMiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSkge1xcbitcXHRcXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHQvKiB0aGUgcmVzZXQgbWF5IG9ubHkgbm93IGhhdmUgdHJpZ2dlcmVkIHJlc2N1ZSBtb2RlICovXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpO1xcbitcXHRcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSkge1xcbitcXHRcXHRkZXZfd2Fybihkcy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcInN3aXRjaCBzdHVjayBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlc2VyZGVzX2xvY2spO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2VzZXJkZXNfcG9ydHMpOyBpKyspXFxuQEAgLTcxNSwxMSArNzI5LDIxIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zdGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBib29sIGVuYWJsZSlcXG4gc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0cmV0dXJuIG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIHRydWUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBteGw4NjJ4eF9wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4ge1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAobXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgZmFsc2UpKVxcbiBcXHRcXHRkZXZfZXJyKGRzLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gZGlzYWJsZSBwb3J0ICVkXFxcXG5cXFwiLCBwb3J0KTtcXG4gfVxcbkBAIC0xMzM3LDYgKzEzNjEsMTIgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuIFxcdGJvb2wgaXNfY3B1X3BvcnQgPSBkc2FfcG9ydF9pc19jcHUoZHApO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0LyogRFNBIHJlaW5pdHMgZmFpbGVkIHVzZXIgcG9ydHMgYXMgdW51c2VkOyBzaGFyZWQgcG9ydHMgbXVzdFxcbitcXHQgKiBzdWNjZWVkIGZvciB0aGUgdHJlZSB0byByZWdpc3Rlci5cXG4rXFx0ICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSlcXG4rXFx0XFx0cmV0dXJuIGRzYV9wb3J0X2lzX3VzZXIoZHApID8gLUVOT0RFViA6IDA7XFxuK1xcbiBcXHRyZXQgPSBteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTE2MjgsNiArMTY1OCw5IEBAIHN0YXRpYyB2b2lkIG14bDg2Mnh4X3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuIFxcdGNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6XFxuIFxcdFxcdHBhcmFtLnBvcnRfc3RhdGUgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9TVFBfUE9SVF9TVEFURV9ESVNBQkxFKTtcXG5AQCAtMjA4Niw2ICsyMTE5LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBteGw4NjJ4eF9zd2l0Y2hfb3BzID0ge1xcbiBcXHQuZ2V0X3BhdXNlX3N0YXRzID0gbXhsODYyeHhfZ2V0X3BhdXNlX3N0YXRzLFxcbiBcXHQuZ2V0X3Jtb25fc3RhdHMgPSBteGw4NjJ4eF9nZXRfcm1vbl9zdGF0cyxcXG4gXFx0LmdldF9zdGF0czY0ID0gbXhsODYyeHhfZ2V0X3N0YXRzNjQsXFxuK1xcdC5kZXZsaW5rX2luZm9fZ2V0ID0gbXhsODYyeHhfZGV2bGlua19pbmZvX2dldCxcXG4rXFx0LmRldmxpbmtfZmxhc2hfdXBkYXRlID0gbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG14bDg2Mnh4X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5AQCAtMjE5MSw4ICsyMjI2LDggQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBteGw4NjJ4eF9vZl9tYXRjaFtdID0ge1xcbi1cXHR7IC5jb21wYXRpYmxlID0gXFxcIm1heGxpbmVhcixteGw4NjI4MlxcXCIgfSxcXG4tXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtYXhsaW5lYXIsbXhsODYyNTJcXFwiIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwibWF4bGluZWFyLG14bDg2MjgyXFxcIiwgLmRhdGEgPSBcXFwiTWF4TGluZWFyIE14TDg2MjgyXFxcIiB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1heGxpbmVhcixteGw4NjI1MlxcXCIsIC5kYXRhID0gXFxcIk1heExpbmVhciBNeEw4NjI1MlxcXCIgfSxcXG4gXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuIH07XFxuIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG14bDg2Mnh4X29mX21hdGNoKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxcbmluZGV4IDQzMmE1ZjNmMmUwOGU2Li41ZDIxMjk2NTYxZTNhYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXFxuQEAgLTMxOSw2ICszMTksMTIgQEAgc3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24ge1xcbiAgKiBAZXZsYW5faW5ncmVzc19zaXplOiBwZXItcG9ydCBpbmdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxcbiAgKiBAZXZsYW5fZWdyZXNzX3NpemU6ICBwZXItcG9ydCBlZ3Jlc3MgRXh0ZW5kZWQgVkxBTiBibG9jayBzaXplXFxuICAqIEB2Zl9ibG9ja19zaXplOiAgICAgIHBlci1wb3J0IFZMQU4gRmlsdGVyIGJsb2NrIHNpemVcXG4rICogQGJsb2NrX2hvc3Q6ICAgICAgICAgcmVqZWN0IGZpcm13YXJlIEFQSSBjb21tYW5kcyAoZXhjZXB0IEZXX1VQREFURSlcXG4rICogICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGEgZmlybXdhcmUgZmxhc2hcXG4rICogQHNraXBfdGVhcmRvd246ICAgICAgZGlzY2FyZCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgZHVyaW5nIHRoZSB0ZWFyZG93blxcbisgKiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQgYnkgdGhlIHBvc3QtZmxhc2ggcmVwcm9iZVxcbisgKiBAcmVzY3VlX21vZGU6ICAgICAgICBzd2l0Y2ggaXMgc3R1Y2sgaW4gTUNVYm9vdDsgZmlybXdhcmUgQVBJIGNvbW1hbmRzXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIGZhaWwgZmFzdCwgb25seSBjbGF1c2UtMjIgU01ESU8gd29ya3NcXG4gICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVyc1xcbiAgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgYWNjdW11bGF0ZXMgdGhlbSBpbnRvIDY0LWJpdCBwZXItcG9ydCBzdGF0c1xcbiAgKi9cXG5AQCAtMzM3LDYgKzM0Myw5IEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2IHtcXG4gXFx0dTE2IGV2bGFuX2luZ3Jlc3Nfc2l6ZTtcXG4gXFx0dTE2IGV2bGFuX2VncmVzc19zaXplO1xcbiBcXHR1MTYgdmZfYmxvY2tfc2l6ZTtcXG4rXFx0Ym9vbCBibG9ja19ob3N0O1xcbitcXHRib29sIHNraXBfdGVhcmRvd247XFxuK1xcdGJvb2wgcmVzY3VlX21vZGU7XFxuIFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfd29yaztcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmhcXG5pbmRleCA4YzE2ZWYyM2NjMTAyYS4uYzllMTkzNDhkZTYxOTMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcXG4rKysgYi9pbmNsdWRlL25ldC9kc2EuaFxcbkBAIC0xMTcwLDYgKzExNzAsOSBAQCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMge1xcbiBcXHRpbnRcXHQoKmRldmxpbmtfaW5mb19nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbitcXHRpbnRcXHQoKmRldmxpbmtfZmxhc2hfdXBkYXRlKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gXFx0aW50XFx0KCpkZXZsaW5rX3NiX3Bvb2xfZ2V0KShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pO1xcbmRpZmYgLS1naXQgYS9uZXQvZHNhL2RldmxpbmsuYyBiL25ldC9kc2EvZGV2bGluay5jXFxuaW5kZXggZWQzNDJmMzQ1NjkyYmIuLjI1MzExYTg3Y2JjNTZkIDEwMDY0NFxcbi0tLSBhL25ldC9kc2EvZGV2bGluay5jXFxuKysrIGIvbmV0L2RzYS9kZXZsaW5rLmNcXG5AQCAtMjAsNiArMjAsMTggQEAgc3RhdGljIGludCBkc2FfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXFxuIFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9kZXZsaW5rX3RvX2RzKGRsKTtcXG4rXFxuK1xcdGlmICghZHMtXFx1MDAzZW9wcy1cXHUwMDNlZGV2bGlua19mbGFzaF91cGRhdGUpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZShkcywgcGFyYW1zLCBleHRhY2spO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcXG4gXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHNiX2luZGV4LCB1MTYgcG9vbF9pbmRleCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pXFxuQEAgLTE2OSw2ICsxODEsNyBAQCBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkbHAsXFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX29wcyA9IHtcXG4gXFx0LmluZm9fZ2V0XFx0XFx0XFx0PSBkc2FfZGV2bGlua19pbmZvX2dldCxcXG4rXFx0LmZsYXNoX3VwZGF0ZVxcdFxcdFxcdD0gZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlLFxcbiBcXHQuc2JfcG9vbF9nZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0LFxcbiBcXHQuc2JfcG9vbF9zZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LFxcbiBcXHQuc2JfcG9ydF9wb29sX2dldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX2dldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MzQ6MDAuNTUzMDA3NTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDQ2MTc0Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9EU0FfTVhMODYyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVcIixcbiAgICBcIm14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlXCIsXG4gICAgXCJteGw4NjJ4eF9mbGFzaF9maXJtd2FyZVwiLFxuICAgIFwiZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmaXJtd2FyZSBmbGFzaGluZyBzdXBwb3J0IHZpYSBkZXZsaW5rIHRvIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCBkcml2ZXIsIGluY2x1ZGluZyBwYXJzaW5nIG9mIHRoZSBmaXJtd2FyZSBmaWxlIHdoaWNoIGNvbWVzIGZyb20gdXNlcnNwYWNlLiBJdCBhbHNvIGFkZHMgYSBuZXcgZGV2bGluayBjYWxsYmFjayB0byB0aGUgRFNBIGNvcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTZhZGYyYmI3ZjNjNjNmMTk0OWY2OWUyNjM2OGYyMTBjNWU3MTIzN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDAzOjMzOjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXG5pbmRleCBhN2JlMGU2NjY5ZGZhNS4uYmNjYWMwZDBmNzAzZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZVxuQEAgLTEsMyArMSwzIEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIG9iai0kKENPTkZJR19ORVRfRFNBX01YTDg2MikgKz0gbXhsODYyeHhfZHNhLm9cbi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm9cbitteGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm8gbXhsODYyeHgtZncub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxuaW5kZXggYzg3YTk1NWMxM2M0OGUuLmUyYWEyOTM0ZTllMTYyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmhcbkBAIC03MCw2ICs3MCw3IEBAXG4gI2RlZmluZSBJTlRfR1BIWV9SRUFEXHRcdFx0KEdQWV9HUFkyWFhfTUFHSUMgKyAweDEpXG4gI2RlZmluZSBJTlRfR1BIWV9XUklURVx0XHRcdChHUFlfR1BZMlhYX01BR0lDICsgMHgyKVxuIFxuKyNkZWZpbmUgU1lTX01JU0NfRldfVVBEQVRFXHRcdChTWVNfTUlTQ19NQUdJQyArIDB4MSlcbiAjZGVmaW5lIFNZU19NSVNDX0ZXX1ZFUlNJT05cdFx0KFNZU19NSVNDX01BR0lDICsgMHgyKVxuIFxuICNkZWZpbmUgTVhMODYyWFhfWFBDU19QQ1NfQ09ORklHXHQoTVhMODYyWFhfWFBDU19NQUdJQyArIDB4MSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjZhMWRlMjQ3YzJmMDVkXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY1xuQEAgLTAsMCArMSw0ODIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4XG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjUgRGFuaWVsIEdvbGxlIFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1x1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb3ZlcmZsb3cuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwibXhsODYyeHguaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1hcGkuaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1jbWQuaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1mdy5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWhvc3QuaFwiXG4rXG4rLyogU0IgUERJIHJlZ2lzdGVycyAoY2xhdXNlLTIyIFNNRElPIGFkZHJlc3Mgc3BhY2UpICovXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTFx0XHQweGUxMDBcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9BRERSXHRcdDB4ZTEwMVxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0RBVEFcdFx0MHhlMTAyXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfU1RBVFx0XHQweGUxMDNcbitcbisvKiBTQiBQREkgQ1RSTCBtb2RlcyAqL1xuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUXHQweDAwXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUlx0MHgwMlxuK1xuKy8qIFNCIFBESSBoYW5kc2hha2UgbWFnaWMgKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRUFEWVx0XHQweGM1NWNcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFSVFx0XHQweGY0OGZcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9FTkRcdFx0MHgzY2MzXG4rXG4rLyogRmlybXdhcmUgdHJhbnNmZXIgZ2VvbWV0cnkgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0hEUl9TSVpFXHRcdDIwXG4rI2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX0hBTEZcdFx0MTYzODRcdC8qIHdvcmRzIHBlciBoYWxmLWJhbmsgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0JBTktfU0xJQ0VcdFx0MzI3NjBcdC8qIHdvcmRzIHBlciBmdWxsIHNsaWNlICovXG4rI2RlZmluZSBNWEw4NjJYWF9GV19TQjFfQUREUlx0XHQweDc4MDBcdC8qIFNCMSB3b3JkIGFkZHJlc3MgKi9cbitcbisvKiBUaW1lb3V0cyAoZ2VuZXJvdXMgdXBwZXIgYm91bmRzKSAqL1xuKyNkZWZpbmUgTVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NU1x0MzAwMDBcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TXHQ1MDAwXG4rI2RlZmluZSBNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TXHQzMDAwMDBcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1dSSVRFX1RJTUVPVVRfTVNcdDEyMDAwMFxuKyNkZWZpbmUgTVhMODYyWFhfRldfUkVCT09UX0RFTEFZX01TXHQ1MDAwXG4rXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuK3tcbitcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuK1x0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbitcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuK1x0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbitcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLFxuK1x0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbit9XG4rXG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgZXhwZWN0ZWQsXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKTtcbitcdGludCByZXQ7XG4rXG4rXHRkbyB7XG4rXHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmICgodTE2KXJldCA9PSBleHBlY3RlZClcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0dXNsZWVwX3JhbmdlKDEwMDAwLCAxMTAwMCk7XG4rXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2Uoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXG4rXHRcdFx0XHQgICAgICAgdTMyIGRhdGFfd3JpdHRlbilcbit7XG4rXHRteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4rXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgZGF0YV93cml0dGVuKTtcbitcbitcdHJldHVybiBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXG4rXHRcdFx0XHRcdCBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxuK1x0XHRcdFx0ICB1MzIgZG9uZSwgdTMyIHRvdGFsKVxuK3tcbitcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIHN0YXR1cywgTlVMTCwgZG9uZSwgdG90YWwpO1xuK31cbitcbisvKipcbisgKiBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QgLSBjaGVjayB3aGV0aGVyIHRoZSBzd2l0Y2ggc2l0cyBpbiBNQ1Vib290XG4rICogQHByaXY6IGRyaXZlciBwcml2YXRlIGRhdGFcbisgKlxuKyAqIE1DVWJvb3Qgc2lnbmFscyByZWFkaW5lc3MgZm9yIGEgZmlybXdhcmUgZG93bmxvYWQgd2l0aCB0aGUgU0IgUERJXG4rICogcmVhZHkgbWFnaWM7IG9ubHkgdGhlIGNsYXVzZS0yMiBTTURJTyBpbnRlcmZhY2Ugd29ya3MgaW4gdGhpcyBzdGF0ZS5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBNQ1Vib290IGlzIHdhaXRpbmcgZm9yIGEgZmlybXdhcmUgZG93bmxvYWQuXG4rICovXG4rYm9vbCBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3Qoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xuK1xuK1x0cmV0dXJuIHJldCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFk7XG4rfVxuK1xuKy8qIGRldmljZV9yZXByb2JlKCkgLVx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2IHdoaWxlIHRoZSB3b3JrIHJ1bnMsIHNvXG4rICogdGhlIHdvcmsgc3RydWN0IGNhbm5vdCBsaXZlIGluIG14bDg2Mnh4X3ByaXYuXG4rICovXG4rc3RydWN0IG14bDg2Mnh4X3JlcHJvYmUge1xuK1x0c3RydWN0IGRldmljZSAqZGV2O1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBkd29yaztcbit9O1xuK1xuK3N0YXRpYyB2b2lkIG14bDg2Mnh4X3JlcHJvYmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmUgKnJlcHJvYmUgPVxuK1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG14bDg2Mnh4X3JlcHJvYmUsIGR3b3JrLndvcmspO1xuK1xuK1x0aWYgKGRldmljZV9yZXByb2JlKHJlcHJvYmUtXHUwMDNlZGV2KSlcbitcdFx0ZGV2X2VycihyZXByb2JlLVx1MDAzZWRldiwgXCJyZXByb2JlIGZhaWxlZFxcblwiKTtcbitcdHB1dF9kZXZpY2UocmVwcm9iZS1cdTAwM2VkZXYpO1xuK1x0a2ZyZWUocmVwcm9iZSk7XG4rXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbit9XG4rXG4rLyogTUNVYm9vdCBmaXJtd2FyZSBpbWFnZSBoZWFkZXIgKi9cbitzdHJ1Y3QgbXhsODYyeHhfZndfaGRyIHtcbitcdF9fbGUzMiBpbWFnZV90eXBlO1xuK1x0X19sZTMyIGltYWdlX3NpemVfMTtcbitcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8xO1xuK1x0X19sZTMyIGltYWdlX3NpemVfMjtcbitcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xuK30gX19wYWNrZWQ7XG4rXG4rc3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4rXHRcdFx0XHQgICB1MzIgKnBheWxvYWRfc2l6ZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgbXhsODYyeHhfZndfaGRyICpoZHI7XG4rXHR1MzIgc2l6ZTEsIHNpemUyLCB0b3RhbDtcbitcdGNvbnN0IHU4ICpwYXlsb2FkO1xuK1x0dTMyIGNyYztcbitcbitcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4rXHRwYXlsb2FkID0gZnctXHUwMDNlZGF0YSArIE1YTDg2MlhYX0ZXX0hEUl9TSVpFO1xuK1x0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2Vfc2l6ZV8xKTtcbitcdHNpemUyID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWltYWdlX3NpemVfMik7XG4rXG4rXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUxLCBzaXplMiwgXHUwMDI2dG90YWwpIHx8XG4rXHQgICAgdG90YWwgXHUwMDNlIGZ3LVx1MDAzZXNpemUgLSBNWEw4NjJYWF9GV19IRFJfU0laRSkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZmlybXdhcmUgZmlsZSB0b28gc21hbGwgZm9yIGRlY2xhcmVkIHNpemVcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCF0b3RhbCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKHNpemUxKSB7XG4rXHRcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcbitcdFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMSkpIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZsYXNoOiBpbWFnZSAxIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxuXCIsXG4rXHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8xKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChzaXplMikge1xuK1x0XHRjcmMgPSB+Y3JjMzJfbGUofjBVLCBwYXlsb2FkICsgc2l6ZTEsIHNpemUyKTtcbitcdFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMikpIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZsYXNoOiBpbWFnZSAyIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxuXCIsXG4rXHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8yKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdCpwYXlsb2FkX3NpemUgPSB0b3RhbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbitcdFx0XHRcdCAgIHUzMiBwYXlsb2FkX3NpemUsIHN0cnVjdCBkZXZsaW5rICpkbClcbit7XG4rXHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgKyBNWEw4NjJYWF9GV19IRFJfU0laRTtcbitcdHUzMiB3b3JkX2lkeCA9IDAsIGRhdGFfd3JpdHRlbiA9IDAsIGlkeCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIG5leHRfbm90aWZ5ID0gMDtcbitcdHUxNiB3b3JkLCBmZGF0YTtcbitcdGludCByZXQsIGk7XG4rXG4rXHQvKiBTdGVwIDE6IHJlYm9vdCB0aGUgZmlybXdhcmUgaW50byBNQ1Vib290IHJlc2N1ZSBtb2RlICovXG4rXHRpZiAoIXByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbitcdFx0cmV0ID0gbXhsODYyeHhfYXBpX3dyYXAocHJpdiwgU1lTX01JU0NfRldfVVBEQVRFLCBOVUxMLCAwLFxuK1x0XHRcdFx0XHRmYWxzZSwgZmFsc2UpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XCJmbGFzaDogRldfVVBEQVRFIGNvbW1hbmQgZmFpbGVkOiAlcGVcXG5cIixcbitcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogRmFpbHVyZXMgZnJvbSBoZXJlIG9uIG11c3QgZ28gdGhyb3VnaCBlbmRfbWFnaWMgc28gTUNVYm9vdFxuK1x0ICogcmVib290cyBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yZXZlci5cbitcdCAqL1xuK1xuK1x0LyogU3RlcCAyOiB3YWl0IGZvciBib290bG9hZGVyIHJlYWR5ICovXG4rXHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwiV2FpdGluZyBmb3IgYm9vdGxvYWRlclwiLCAwLCAwKTtcbitcdG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxuK1x0XHRcdFx0XHRNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IGJvb3Rsb2FkZXIgbm90IHJlYWR5OiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0Z290byBlbmRfbWFnaWM7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDM6IHN0YXJ0IGhhbmRzaGFrZSAqL1xuK1x0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfU1RBUlQpO1xuK1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBUlQgKyAxLFxuK1x0XHRcdFx0XHRNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcImZsYXNoOiBzdGFydCBoYW5kc2hha2UgZmFpbGVkOiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0Z290byBlbmRfbWFnaWM7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDQ6IHRyYW5zZmVyIGltYWdlIGhlYWRlciAqL1xuK1x0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcIkVyYXNpbmcgZmxhc2hcIiwgMCwgMCk7XG4rXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1YTDg2MlhYX0ZXX0hEUl9TSVpFIC8gMjsgaSsrKSB7XG4rXHRcdHdvcmQgPSBmdy1cdTAwM2VkYXRhW2kgKiAyXSB8XG4rXHRcdCAgICAgICAoKHUxNilmdy1cdTAwM2VkYXRhW2kgKiAyICsgMV0gXHUwMDNjXHUwMDNjIDgpO1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgd29yZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZsYXNoOiBoZWFkZXIgd3JpdGUgZmFpbGVkOiAlcGVcXG5cIixcbitcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG4rXHRcdFx0Z290byBlbmRfbWFnaWM7XG4rXHRcdH1cbitcdH1cbitcdG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcbitcdC8qIHRoZSBieXRlIGNvdW50IGluIFNUQVQgdHJpZ2dlcnMgdGhlIGVyYXNlICovXG4rXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbitcdFx0XHQgICAgIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKTtcbitcbitcdC8qIEFDSyBpcyBieXRlIGNvdW50ICsgMSAqL1xuK1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9GV19IRFJfU0laRSArIDEsXG4rXHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IGhlYWRlciBBQ0sgZmFpbGVkOiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0Z290byBlbmRfbWFnaWM7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDU6IHdhaXQgZm9yIGVyYXNlIHRvIGNvbXBsZXRlICovXG4rXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXG4rXHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0VSQVNFX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXFxuXCIsIEVSUl9QVFIocmV0KSk7XG4rXHRcdGdvdG8gZW5kX21hZ2ljO1xuK1x0fVxuK1xuK1x0LyogU3RlcCA2OiB0cmFuc2ZlciBwYXlsb2FkICovXG4rXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbitcbitcdHdoaWxlIChpZHggXHUwMDNjIHBheWxvYWRfc2l6ZSkge1xuK1x0XHRpZiAoaWR4ICsgMSBcdTAwM2MgcGF5bG9hZF9zaXplKSB7XG4rXHRcdFx0ZmRhdGEgPSBwYXlsb2FkW2lkeF0gfFxuK1x0XHRcdFx0KCh1MTYpcGF5bG9hZFtpZHggKyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4rXHRcdFx0aWR4ICs9IDI7XG4rXHRcdFx0ZGF0YV93cml0dGVuICs9IDI7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0ZmRhdGEgPSBwYXlsb2FkW2lkeF07XG4rXHRcdFx0aWR4Kys7XG4rXHRcdFx0ZGF0YV93cml0dGVuKys7XG4rXHRcdH1cbitcbitcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIGZkYXRhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFwiZmxhc2g6IGRhdGEgd3JpdGUgZmFpbGVkIGF0ICV1LyV1OiAlcGVcXG5cIixcbitcdFx0XHRcdGlkeCwgcGF5bG9hZF9zaXplLCBFUlJfUFRSKHJldCkpO1xuK1x0XHRcdGdvdG8gZW5kX21hZ2ljO1xuK1x0XHR9XG4rXHRcdHdvcmRfaWR4Kys7XG4rXG4rXHRcdGlmIChpZHggXHUwMDNlPSBwYXlsb2FkX3NpemUpIHtcbitcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHQvKiBIYWxmLWJhbmsgYm91bmRhcnk6IHN3aXRjaCB0byBTQjEgYWRkcmVzcyAqL1xuK1x0XHRpZiAod29yZF9pZHggPT0gTVhMODYyWFhfRldfQkFOS19IQUxGKSB7XG4rXHRcdFx0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4rXHRcdFx0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbitcdFx0XHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUixcbitcdFx0XHRcdFx0ICAgICBNWEw4NjJYWF9GV19TQjFfQUREUik7XG4rXHRcdFx0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4rXHRcdFx0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuK1x0XHR9IGVsc2UgaWYgKHdvcmRfaWR4IFx1MDAzZT0gTVhMODYyWFhfRldfQkFOS19TTElDRSkge1xuK1x0XHRcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pO1xuK1x0XHRcdGlmIChyZXQpIHtcbitcdFx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XCJmbGFzaDogd3JpdGUgdGltZW91dCBhdCAldS8ldTogJXBlXFxuXCIsXG4rXHRcdFx0XHRcdGlkeCwgcGF5bG9hZF9zaXplLCBFUlJfUFRSKHJldCkpO1xuK1x0XHRcdFx0Z290byBlbmRfbWFnaWM7XG4rXHRcdFx0fVxuK1x0XHRcdHdvcmRfaWR4ID0gMDtcbitcdFx0XHRkYXRhX3dyaXR0ZW4gPSAwO1xuK1x0XHRcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuK1x0XHRcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbitcbitcdFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCBuZXh0X25vdGlmeSkpIHtcbitcdFx0XHRcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCJGbGFzaGluZ1wiLCBpZHgsXG4rXHRcdFx0XHRcdFx0ICAgICAgcGF5bG9hZF9zaXplKTtcbitcdFx0XHRcdG5leHRfbm90aWZ5ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IGZpbmFsIHdyaXRlIHRpbWVvdXQ6ICVwZVxcblwiLCBFUlJfUFRSKHJldCkpO1xuK1x0XHRnb3RvIGVuZF9tYWdpYztcbitcdH1cbitcbitcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCJGbGFzaGluZ1wiLCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7XG4rXG4rZW5kX21hZ2ljOlxuK1x0LyogcmVib290IE1DVWJvb3QgZXZlbiBhZnRlciBhIGZhaWxlZCB0cmFuc2ZlciAqL1xuK1x0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfRU5EKTtcbitcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcdGNvbnN0IGNoYXIgKm1vZGVsO1xuK1x0Y2hhciB2ZXJfc3RyWzMyXTtcbitcdGludCByZXQ7XG4rXG4rXHRtb2RlbCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkcy1cdTAwM2VkZXYpO1xuK1x0aWYgKG1vZGVsKSB7XG4rXHRcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsXG4rXHRcdFx0XHRcdFx0ICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0FTSUNfSUQsXG4rXHRcdFx0XHRcdFx0ICAgICBtb2RlbCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdC8qIGNhbm9uaWNhbCBudWxsIHZlcnNpb246IG5vIG9wZXJhdGlvbmFsIGZpcm13YXJlIG9uIHRoZSBzd2l0Y2ggKi9cbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLCBcImZ3XCIsIFwiMC4wLjBcIik7XG4rXG4rXHRzbnByaW50Zih2ZXJfc3RyLCBzaXplb2YodmVyX3N0ciksIFwiJXUuJXUuJXVcIixcbitcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuK1x0XHQgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uKTtcbitcbitcdHJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFwiZndcIiwgdmVyX3N0cik7XG4rfVxuK1xuK2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4rXHRcdFx0XHQgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBteGw4NjJ4eF9zeXNfZndfaW1hZ2VfdmVyc2lvbiB2ZXIgPSB7fTtcbitcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlICpyZXByb2JlO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdHUzMiBwYXlsb2FkX3NpemU7XG4rXHRpbnQgcmV0LCBpO1xuK1xuK1x0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJjb21wb25lbnQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cmV0ID0gbXhsODYyeHhfZmxhc2hfdmFsaWRhdGUocHJpdiwgcGFyYW1zLVx1MDAzZWZ3LCBcdTAwMjZwYXlsb2FkX3NpemUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcImZpcm13YXJlIGltYWdlIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0LyogRXZlcnl0aGluZyBuZWVkZWQgdG8gc2NoZWR1bGUgdGhlIHJlcHJvYmUgd2hpY2ggcmVzdG9yZXNcbitcdCAqIG5vcm1hbCBvcGVyYXRpb24gbXVzdCBiZSBpbiBwbGFjZSBiZWZvcmUgdGhlIHN3aXRjaCBpc1xuK1x0ICogZGlzdHVyYmVkLlxuK1x0ICovXG4rXHRyZXByb2JlID0ga3phbGxvY19vYmooKnJlcHJvYmUpO1xuK1x0aWYgKCFyZXByb2JlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7XG4rXHRcdGtmcmVlKHJlcHJvYmUpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHJlcHJvYmUtXHUwMDNlZGV2ID0gZ2V0X2RldmljZShkcy1cdTAwM2VkZXYpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cmVwcm9iZS1cdTAwM2Vkd29yaywgbXhsODYyeHhfcmVwcm9iZV93b3JrX2ZuKTtcbitcbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRkZXZfaW5mbyhkcy1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiZmxhc2g6IHJlY292ZXJpbmcgc3dpdGNoIGZyb20gTUNVYm9vdCByZXNjdWUgbW9kZVxcblwiKTtcbitcdGVsc2VcbitcdFx0ZGV2X2luZm8oZHMtXHUwMDNlZGV2LCBcImZsYXNoOiBydW5uaW5nIGZpcm13YXJlICV1LiV1LiV1XFxuXCIsXG4rXHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuK1x0XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xuK1xuK1x0LyogQ2xvc2UgcG9ydHMgd2hpbGUgdGhlIGZpcm13YXJlIGlzIHN0aWxsIGFsaXZlIHNvIHRoZSBEU0FcbitcdCAqIGNvcmUncyBNREIvRkRCIHRyYWNraW5nIGlzIGRyYWluZWQsIGFuZCBkZXRhY2ggdXNlciBwb3J0c1xuK1x0ICogc28gdXNlcnNwYWNlIGNhbm5vdCByZW9wZW4gdGhlbSBkdXJpbmcgdGhlIGZsYXNoLiBUaGVcbitcdCAqIGNvbmR1aXQgYmVsb25ncyB0byB0aGUgTUFDIGRyaXZlciBhbmQgaXMgb25seSBjbG9zZWQuXG4rXHQgKi9cbitcdHJ0bmxfbG9jaygpO1xuK1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7XG4rXHRcdGlmIChkcC1cdTAwM2V1c2VyKSB7XG4rXHRcdFx0ZGV2X2Nsb3NlKGRwLVx1MDAzZXVzZXIpO1xuK1x0XHRcdG5ldGlmX2RldmljZV9kZXRhY2goZHAtXHUwMDNldXNlcik7XG4rXHRcdH1cbitcdH1cbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnQoZHAsIGRzKVxuK1x0XHRkZXZfY2xvc2UoZHAtXHUwMDNlY29uZHVpdCk7XG4rXHRydG5sX3VubG9jaygpO1xuK1xuK1x0cHJpdi1cdTAwM2VibG9ja19ob3N0ID0gdHJ1ZTtcbitcbitcdHNldF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFx1MDAyNnByaXYtXHUwMDNlZmxhZ3MpO1xuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlc3RhdHNfd29yayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlY3JjX2Vycl93b3JrKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRzLVx1MDAzZW51bV9wb3J0czsgaSsrKVxuK1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV0uaG9zdF9mbG9vZF93b3JrKTtcbitcbitcdHJldCA9IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHByaXYsIHBhcmFtcy1cdTAwM2VmdywgcGF5bG9hZF9zaXplLFxuK1x0XHRcdFx0ICAgICAgZHMtXHUwMDNlZGV2bGluayk7XG4rXHRpZiAocmV0KVxuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcImZpcm13YXJlIHRyYW5zZmVyIGZhaWxlZFwiKTtcbitcbitcdGlmICghcmV0KSB7XG4rXHRcdC8qIGxpZnQgdGhlIGJsb2NrIHRvIHF1ZXJ5IHRoZSBuZXcgZmlybXdhcmUgdmVyc2lvbiAqL1xuK1x0XHRwcml2LVx1MDAzZWJsb2NrX2hvc3QgPSBmYWxzZTtcbitcdFx0cHJpdi1cdTAwM2VyZXNjdWVfbW9kZSA9IGZhbHNlO1xuK1x0XHRtZW1zZXQoXHUwMDI2dmVyLCAwLCBzaXplb2YodmVyKSk7XG4rXHRcdGlmICghTVhMODYyWFhfQVBJX1JFQURfUVVJRVQocHJpdiwgU1lTX01JU0NfRldfVkVSU0lPTiwgdmVyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHZlci5pdl9tYWpvcilcbitcdFx0XHRkZXZfaW5mbyhkcy1cdTAwM2VkZXYsIFwiZmxhc2g6IG5ldyBmaXJtd2FyZSAldS4ldS4ldVxcblwiLFxuK1x0XHRcdFx0IHZlci5pdl9tYWpvciwgdmVyLml2X21pbm9yLFxuK1x0XHRcdFx0IGxlMTZfdG9fY3B1KHZlci5pdl9yZXZpc2lvbikpO1xuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2Vza2lwX3RlYXJkb3duID0gdHJ1ZTtcbitcbitcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZyZXByb2JlLVx1MDAzZWR3b3JrLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41N2MyMDAwY2ZlZTUxOVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmhcbkBAIC0wLDAgKzEsMTggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuK1xuKyNpZm5kZWYgX19NWEw4NjJYWF9GV19IXG4rI2RlZmluZSBfX01YTDg2MlhYX0ZXX0hcbitcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbitcbitzdHJ1Y3QgbXhsODYyeHhfcHJpdjtcbitcbitib29sIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XG4raW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4rXG4rI2VuZGlmIC8qIF9fTVhMODYyWFhfRldfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5pbmRleCA0YWNkMjE2ZjdjYzAwOS4uODA1NjVkZTcxMGQzNzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5AQCAtMTUsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWNtZC5oXCJcbiAjaW5jbHVkZSBcIm14bDg2Mnh4LWhvc3QuaFwiXG4gXG4gI2RlZmluZSBDVFJMX0JVU1lfTUFTS1x0XHRcdEJJVCgxNSlcbkBAIC0zNDAsNiArMzQxLDIxIEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqX2RhdGEsXG4gXG4gXHRtdXRleF9sb2NrX25lc3RlZChcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpO1xuIFxuK1x0aWYgKHByaXYtXHUwMDNlc2tpcF90ZWFyZG93bikge1xuK1x0XHRyZXQgPSAwO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKSB7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlYmxvY2tfaG9zdCBcdTAwMjZcdTAwMjYgY21kICE9IFNZU19NSVNDX0ZXX1VQREFURSkge1xuK1x0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuIFx0bWF4ID0gKHNpemUgKyAxKSAvIDI7XG4gXG4gXHRyZXQgPSBteGw4NjJ4eF9idXN5X3dhaXQocHJpdik7XG5AQCAtNDk1LDYgKzUxMSw0MSBAQCBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHXHRcdDB4MWZcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTS1x0MHhmZmYwXG4rI2RlZmluZSBNWEw4NjJYWF9TTURJT19PRkZfTUFTS1x0XHQweDAwMGZcbitcbitpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpXG4re1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXM7XG4rXHRpbnQgcGh5ID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbitcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsXG4rXHRcdFx0ICAgICAgYWRkciBcdTAwMjYgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwKVxuK1x0XHRyZXQgPSBfX21kaW9idXNfcmVhZChidXMsIHBoeSwgYWRkciBcdTAwMjYgTVhMODYyWFhfU01ESU9fT0ZGX01BU0spO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbClcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cztcbitcdGludCBwaHkgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRyxcbitcdFx0XHQgICAgICBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xuK1x0aWYgKHJldCBcdTAwM2U9IDApXG4rXHRcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgYWRkciBcdTAwMjYgTVhMODYyWFhfU01ESU9fT0ZGX01BU0ssXG4rXHRcdFx0XHQgICAgICB2YWwpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gdm9pZCBteGw4NjJ4eF9ob3N0X2luaXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4ge1xuIFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlY3JjX2Vycl93b3JrLCBteGw4NjJ4eF9jcmNfZXJyX3dvcmtfZm4pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oXG5pbmRleCA2NmQ2YWUxOThhZmY0NS4uNGUwNTRjNmU0YzBlNDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oXG5AQCAtMTgsNSArMTgsNyBAQCBpbnQgbXhsODYyeHhfYXBpX3dyYXAoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUxNiBjbWQsIHZvaWQgKmRhdGEsIHUxNiBzaXplLFxuIFx0bXhsODYyeHhfYXBpX3dyYXAoZGV2LCBjbWQsIFx1MDAyNihkYXRhKSwgc2l6ZW9mKChkYXRhKSksIHRydWUsIHRydWUpXG4gXG4gaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KTtcbitpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpO1xuK2ludCBteGw4NjJ4eF9zbWRpb193cml0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUxNiB2YWwpO1xuIFxuICNlbmRpZiAvKiBfX01YTDg2MlhYX0hPU1RfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jXG5pbmRleCBiNjg5NjUyYWE5YjkyMC4uYTViNjk0MGI1NTJlOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jXG5AQCAtNDA2LDYgKzQwNiw4IEBAIG14bDg2Mnh4X3BoeWxpbmtfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXG4gXHRzd2l0Y2ggKHBvcnQpIHtcbiBcdGNhc2UgOSAuLi4gMTY6XG4rXHRcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuIFx0XHRpZiAoIU1YTDg2MlhYX0ZXX1ZFUl9NSU4ocHJpdiwgMSwgMCwgODQpKSB7XG4gXHRcdFx0ZGV2X3dhcm5fb25jZShkcC1cdTAwM2Vkcy1cdTAwM2VkZXYsXG4gXHRcdFx0XHQgICAgICBcIlNlckRlcyBQQ1MgdW5zdXBwb3J0ZWQgb24gb2xkIGZpcm13YXJlLlxcblwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXG5pbmRleCA0NWQyMzdiM2E0MGYxMC4uMjY1YTgzZjRiMzcxYjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcbkBAIC0yMSw2ICsyMSw3IEBAXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC5oXCJcbiAjaW5jbHVkZSBcIm14bDg2Mnh4LWFwaS5oXCJcbiAjaW5jbHVkZSBcIm14bDg2Mnh4LWNtZC5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWZ3LmhcIlxuICNpbmNsdWRlIFwibXhsODYyeHgtaG9zdC5oXCJcbiAjaW5jbHVkZSBcIm14bDg2Mnh4LXBoeWxpbmsuaFwiXG4gXG5AQCAtNjI4LDkgKzYyOSwyMiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRwcml2LVx1MDAzZXJlc2N1ZV9tb2RlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpO1xuK1x0aWYgKCFwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKSB7XG4rXHRcdHJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0LyogdGhlIHJlc2V0IG1heSBvbmx5IG5vdyBoYXZlIHRyaWdnZXJlZCByZXNjdWUgbW9kZSAqL1xuK1x0XHRcdHByaXYtXHUwMDNlcmVzY3VlX21vZGUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7XG4rXHRcdFx0aWYgKCFwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbitcdFx0ZGV2X3dhcm4oZHMtXHUwMDNlZGV2LFxuK1x0XHRcdCBcInN3aXRjaCBzdHVjayBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXG5cIik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNlcmRlc19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VzZXJkZXNfcG9ydHMpOyBpKyspXG5AQCAtNzE1LDExICs3MjksMjEgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3N0YXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxuIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuK1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0cmV0dXJuIG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBteGw4NjJ4eF9wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiB7XG4rXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKSlcbiBcdFx0ZGV2X2Vycihkcy1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIGRpc2FibGUgcG9ydCAlZFxcblwiLCBwb3J0KTtcbiB9XG5AQCAtMTMzNyw2ICsxMzYxLDEyIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIFx0Ym9vbCBpc19jcHVfcG9ydCA9IGRzYV9wb3J0X2lzX2NwdShkcCk7XG4gXHRpbnQgcmV0O1xuIFxuK1x0LyogRFNBIHJlaW5pdHMgZmFpbGVkIHVzZXIgcG9ydHMgYXMgdW51c2VkOyBzaGFyZWQgcG9ydHMgbXVzdFxuK1x0ICogc3VjY2VlZCBmb3IgdGhlIHRyZWUgdG8gcmVnaXN0ZXIuXG4rXHQgKi9cbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRyZXR1cm4gZHNhX3BvcnRfaXNfdXNlcihkcCkgPyAtRU5PREVWIDogMDtcbitcbiBcdHJldCA9IG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMTYyOCw2ICsxNjU4LDkgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4rXHRcdHJldHVybjtcbitcbiBcdHN3aXRjaCAoc3RhdGUpIHtcbiBcdGNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6XG4gXHRcdHBhcmFtLnBvcnRfc3RhdGUgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9TVFBfUE9SVF9TVEFURV9ESVNBQkxFKTtcbkBAIC0yMDg2LDYgKzIxMTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3BhdXNlX3N0YXRzID0gbXhsODYyeHhfZ2V0X3BhdXNlX3N0YXRzLFxuIFx0LmdldF9ybW9uX3N0YXRzID0gbXhsODYyeHhfZ2V0X3Jtb25fc3RhdHMsXG4gXHQuZ2V0X3N0YXRzNjQgPSBteGw4NjJ4eF9nZXRfc3RhdHM2NCxcbitcdC5kZXZsaW5rX2luZm9fZ2V0ID0gbXhsODYyeHhfZGV2bGlua19pbmZvX2dldCxcbitcdC5kZXZsaW5rX2ZsYXNoX3VwZGF0ZSA9IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlLFxuIH07XG4gXG4gc3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5AQCAtMjE5MSw4ICsyMjI2LDggQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBteGw4NjJ4eF9vZl9tYXRjaFtdID0ge1xuLVx0eyAuY29tcGF0aWJsZSA9IFwibWF4bGluZWFyLG14bDg2MjgyXCIgfSxcbi1cdHsgLmNvbXBhdGlibGUgPSBcIm1heGxpbmVhcixteGw4NjI1MlwiIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJtYXhsaW5lYXIsbXhsODYyODJcIiwgLmRhdGEgPSBcIk1heExpbmVhciBNeEw4NjI4MlwiIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJtYXhsaW5lYXIsbXhsODYyNTJcIiwgLmRhdGEgPSBcIk1heExpbmVhciBNeEw4NjI1MlwiIH0sXG4gXHR7IC8qIHNlbnRpbmVsICovIH1cbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG14bDg2Mnh4X29mX21hdGNoKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXG5pbmRleCA0MzJhNWYzZjJlMDhlNi4uNWQyMTI5NjU2MWUzYWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcbkBAIC0zMTksNiArMzE5LDEyIEBAIHN0cnVjdCBteGw4NjJ4eF9md192ZXJzaW9uIHtcbiAgKiBAZXZsYW5faW5ncmVzc19zaXplOiBwZXItcG9ydCBpbmdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxuICAqIEBldmxhbl9lZ3Jlc3Nfc2l6ZTogIHBlci1wb3J0IGVncmVzcyBFeHRlbmRlZCBWTEFOIGJsb2NrIHNpemVcbiAgKiBAdmZfYmxvY2tfc2l6ZTogICAgICBwZXItcG9ydCBWTEFOIEZpbHRlciBibG9jayBzaXplXG4rICogQGJsb2NrX2hvc3Q6ICAgICAgICAgcmVqZWN0IGZpcm13YXJlIEFQSSBjb21tYW5kcyAoZXhjZXB0IEZXX1VQREFURSlcbisgKiAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSBmaXJtd2FyZSBmbGFzaFxuKyAqIEBza2lwX3RlYXJkb3duOiAgICAgIGRpc2NhcmQgZmlybXdhcmUgQVBJIGNvbW1hbmRzIGR1cmluZyB0aGUgdGVhcmRvd25cbisgKiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQgYnkgdGhlIHBvc3QtZmxhc2ggcmVwcm9iZVxuKyAqIEByZXNjdWVfbW9kZTogICAgICAgIHN3aXRjaCBpcyBzdHVjayBpbiBNQ1Vib290OyBmaXJtd2FyZSBBUEkgY29tbWFuZHNcbisgKiAgICAgICAgICAgICAgICAgICAgICBmYWlsIGZhc3QsIG9ubHkgY2xhdXNlLTIyIFNNRElPIHdvcmtzXG4gICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVyc1xuICAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBhY2N1bXVsYXRlcyB0aGVtIGludG8gNjQtYml0IHBlci1wb3J0IHN0YXRzXG4gICovXG5AQCAtMzM3LDYgKzM0Myw5IEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2IHtcbiBcdHUxNiBldmxhbl9pbmdyZXNzX3NpemU7XG4gXHR1MTYgZXZsYW5fZWdyZXNzX3NpemU7XG4gXHR1MTYgdmZfYmxvY2tfc2l6ZTtcbitcdGJvb2wgYmxvY2tfaG9zdDtcbitcdGJvb2wgc2tpcF90ZWFyZG93bjtcbitcdGJvb2wgcmVzY3VlX21vZGU7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dvcms7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA4YzE2ZWYyM2NjMTAyYS4uYzllMTkzNDhkZTYxOTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxuKysrIGIvaW5jbHVkZS9uZXQvZHNhLmhcbkBAIC0xMTcwLDYgKzExNzAsOSBAQCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMge1xuIFx0aW50XHQoKmRldmxpbmtfaW5mb19nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4rXHRpbnRcdCgqZGV2bGlua19mbGFzaF91cGRhdGUpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbitcdFx0XHRcdFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFx0aW50XHQoKmRldmxpbmtfc2JfcG9vbF9nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKTtcbmRpZmYgLS1naXQgYS9uZXQvZHNhL2RldmxpbmsuYyBiL25ldC9kc2EvZGV2bGluay5jXG5pbmRleCBlZDM0MmYzNDU2OTJiYi4uMjUzMTFhODdjYmM1NmQgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL2RldmxpbmsuY1xuKysrIGIvbmV0L2RzYS9kZXZsaW5rLmNcbkBAIC0yMCw2ICsyMCwxOCBAQCBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4rc3RhdGljIGludCBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xuK1xuK1x0aWYgKCFkcy1cdTAwM2VvcHMtXHUwMDNlZGV2bGlua19mbGFzaF91cGRhdGUpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiBkcy1cdTAwM2VvcHMtXHUwMDNlZGV2bGlua19mbGFzaF91cGRhdGUoZHMsIHBhcmFtcywgZXh0YWNrKTtcbit9XG4rXG4gc3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxuIFx0XHRcdFx0ICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pXG5AQCAtMTY5LDYgKzE4MSw3IEBAIGRzYV9kZXZsaW5rX3NiX29jY190Y19wb3J0X2JpbmRfZ2V0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRscCxcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX29wcyA9IHtcbiBcdC5pbmZvX2dldFx0XHRcdD0gZHNhX2RldmxpbmtfaW5mb19nZXQsXG4rXHQuZmxhc2hfdXBkYXRlXHRcdFx0PSBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUsXG4gXHQuc2JfcG9vbF9nZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0LFxuIFx0LnNiX3Bvb2xfc2V0XHRcdFx0PSBkc2FfZGV2bGlua19zYl9wb29sX3NldCxcbiBcdC5zYl9wb3J0X3Bvb2xfZ2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX2dldCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjM0OjAwLjU1MzAwOTg5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5NDM0ODc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgTVhMODYyeHggRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBuZXcgcGF0Y2ggaGVyZSwgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBzb21lIGltcG9ydGFudCBmdW5jdGlvbmFsaXR5OiBmaXJtd2FyZSBmbGFzaGluZyBhbmQgRGV2bGluayBzdXBwb3J0IGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaCBkcml2ZXIuIFNwZWNpZmljYWxseSwgdGhhdCdzIGluIGBkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY2AuIEFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgYWxzbyBhZGRpbmcgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBzdXBwb3J0IGludG8gdGhlIERTQSBjb3JlIGl0c2VsZiwgaW4gYG5ldC9kc2EvZGV2bGluay5jYC4gVGhhdCdzIGEgbmljZSBpbnRlZ3JhdGlvbiwga2VlcGluZyBldmVyeXRoaW5nIHRpZHkuXG5cblRoZSBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gYmUgY29uZmlndXJlZCB3aXRoIGBDT05GSUdfTkVUX0RTQV9NWEw4NjJgLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIGNvZGUsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjb25maWcgb3B0aW9uIGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kIGF2YWlsYWJsZSBpbiBvdXIgYnVpbGQuIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgcGhhbnRvbSBjb25maWd1cmF0aW9ucy4gVGltZSB0byBwdWxsIG91dCBgZ3JlcHBlcmAgYW5kIGRvdWJsZS1jaGVjaywgbWFrZSBzdXJlIGBORVRfRFNBX01YTDg2MmAgaXMgbGVnaXQuIE5vIHN1cnByaXNlcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM1NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjM0OjA0LjY0NzM2MDk1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUwMTY3ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9EU0FfTVhMODYyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWc6Mjpjb25maWcgTkVUX0RTQV9NWEw4NjJcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNYXhMaW5lYXIgTXhMODYyeHhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSArPSBteGw4NjJ4eF9kc2Eub1xcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZS0zLW14bDg2Mnh4X2RzYS15IDo9IG14bDg2Mnh4Lm8gbXhsODYyeHgtaG9zdC5vIG14bDg2Mnh4LXBoeWxpbmsubyBteGw4NjJ4eC1mdy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjM0OjA4Ljg5NzUzMzk0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3Nzg4Mjg1NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0OiBGaXJtd2FyZSBGbGFzaGluZyBmb3IgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBTd2l0Y2ggRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgZmlybXdhcmUgZmxhc2hpbmcgY2FwYWJpbGl0eSB2aWEgZGV2bGluayBmb3IgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlci4gSXQgYWxzbyBhZGRzIGEgbmV3IGNhbGxiYWNrLCBgZGV2bGlua19mbGFzaF91cGRhdGVgLCB0byB0aGUgRFNBIGNvcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiB3ZSB0cmlnZ2VyIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VP1wiXG5cblRoZSBEU0EgY29yZSBjaGFuZ2VzIGluIGBuZXQvZHNhL2RldmxpbmsuY2AgYXJlIHBvdGVudGlhbGx5IHJlYWNoYWJsZSwgYnV0IGN1cnJlbnRseSwgb25seSB0aGUgYG14bDg2Mnh4YCBkcml2ZXIgaW1wbGVtZW50cyB0aGUgYWN0dWFsIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgZnVuY3Rpb25hbGl0eS4gVGhpcyBkcml2ZXIgaXMsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGEgaGFyZHdhcmUgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgYSBNYXhMaW5lYXIgc3dpdGNoIGNoaXAuIE15IG1haW4gcXVlc3Rpb24gaGVyZTogQ2FuIHdlIGVtdWxhdGUgdGhpcyBzd2l0Y2gsIG9yIGF0IGxlYXN0IHRyaWdnZXIgdGhlIGNvZGUgcGF0aCB3aXRoIGEgZHVtbXkgZGV2aWNlPyBUaGUgZHJpdmVyIHVzZXMgTURJTywgd2hpY2gsIHRoZW9yZXRpY2FsbHksIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB0aHJvdWdoIGRldmljZSB0cmVlIG9yIHNvZnR3YXJlLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IGl0IHJlbGllcyBvbiBNRElPIGZvciBoYXJkd2FyZSBjb21tdW5pY2F0aW9uLiBDYW4gc3l6a2FsbGVyIHNvbWVob3cgaW5qZWN0IE1ESU8gcmVhZHMvd3JpdGVzIG9yIGNyZWF0ZSBhIG1vY2sgTURJTyBkZXZpY2U/IEkga25vdyBzeXprYWxsZXIgaGFzIGBzeXpfZ2VuZXRsaW5rYCBhbmQgc29tZXRpbWVzIGl0IGNhbiB0cmlnZ2VyIHByb2JlIHZpYSB2aXJ0dWFsIGJ1c2VzLCBidXQgdXN1YWxseSBNRElPIGRldmljZXMgYXJlIHByb2JlZCB2aWEgZGV2aWNlIHRyZWUuXG5cblRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlYCBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgZGV2bGluayBuZXRsaW5rIGludGVyZmFjZS4gU28sIGlmIHRoZSBkZXZpY2UgaXMgcHJvYmVkLCBkZXZsaW5rIGNvbW1hbmRzIGNhbiByZWFjaCBpdC4gVGhpcyBpcyBwcm9taXNpbmchIFRoZSBmaXJtd2FyZSBmaWxlIHBhcnNpbmcgKGBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZWApIGhhcHBlbnMgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBmaWxlIGl0c2VsZiBpcyBzdXBwbGllZCBieSB1c2Vyc3BhY2UgdGhyb3VnaCBkZXZsaW5rIGZsYXNoIHVwZGF0ZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlOiBgbXhsODYyeHhfZmxhc2hfdmFsaWRhdGVgIHRha2VzIGEgYGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndgLiBUaGlzIGBmd2AgY29tZXMgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2UuIFRoZSB2YWxpZGF0aW9uIGxvZ2ljIGl0c2VsZiBsb29rcyB2dWxuZXJhYmxlOiB0aGVyZSBhcmUgY2hlY2tzIG9uIHRoZSBmaXJtd2FyZSBzaXplIGFuZCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgd2hlbiBjYWxjdWxhdGluZyBmaWxlIG9mZnNldHMuIFRoaXMgaXMgKmRlZmluaXRlbHkqIHBhcnNpbmcgdW50cnVzdGVkIGRhdGEsIGFuZCB0aGVyZWZvcmUgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVgLCBgbXhsODYyeHhfZmxhc2hfdmFsaWRhdGVgLCBgbXhsODYyeHhfZmxhc2hfZmlybXdhcmVgLCBhbmQgYWxzbyB0aGUgY29yZSBEU0EgZnVuY3Rpb24sIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLlxuXG5UaGUgbmV4dCBxdWVzdGlvbjogSXMgYG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlYCBpdHNlbGYgcmVhY2hhYmxlPyBJdCBkZXBlbmRzIG9uIHRoZSBgbXhsODYyeHhgIGRyaXZlciBiZWluZyBwcm9iZWQuIFN5emthbGxlciBjYW4gcHJvYmFibHkgcHJvYmUgc29tZSBkcml2ZXJzLCBidXQgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBvbiBNRElPIGFyZSB1c3VhbGx5IGhhcmQgdG8gcmVhY2ggdW5sZXNzIHRoZXJlJ3MgYSBtb2NrIG9yIHNvbWUgZGV2aWNlIHRyZWUgb3ZlcmxheS4gQnV0LCBzaW5jZSB0aGUgRFNBIGNvcmUgY2hhbmdlIGluIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgIGlzIGdlbmVyaWMsIGl0IG1pZ2h0IGJlIHJlYWNoYWJsZSBpZiBhbnkgRFNBIHN3aXRjaCBpcyBwcmVzZW50LlxuXG5Ob3csIGNoZWNraW5nIHRoZSBEU0Egc3dpdGNoIGRyaXZlcnMgdGhhdCBzeXprYWxsZXIgY2FuIHByb2JlLi4uIFRoZXJlJ3MgYGRzYV9sb29wYCwgd2hpY2ggaXMgYSBtb2NrIERTQSBzd2l0Y2guIEhvd2V2ZXIsIGBkc2FfbG9vcGAgZG9lc24ndCBpbXBsZW1lbnQgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCwgc28gd2l0aG91dCB0aGUgYG14bDg2Mnh4YCBkcml2ZXIsIGl0IHdvdWxkIHJldHVybiBgLUVPUE5PVFNVUFBgLiBUaGF0IHdvdWxkIG1lYW4gd2Ugd291bGRuJ3QgYmUgYWJsZSB0byBlYXNpbHkgcmVhY2ggYG14bDg2Mnh4YCwgYnV0IHdlIHNob3VsZCBzdGlsbCBtYXJrIGl0IGFzIHdvcnRoIGZ1enppbmcsIGFzIGl0IGFkZHMgbmV3IG5ldGxpbmsgYXR0cmlidXRlcywgZmlybXdhcmUgcGFyc2luZywgYW5kIGEgbmV3IGRldmxpbmsgb3AuXG5cblRoZSBpbnN0cnVjdGlvbnMgc2F5IHRoYXQgaWYgY29kZSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIHdlIG5lZWQgdG8gdmVyaWZ5IGl0LiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgTURJTyBkZXZpY2UgcmVhY2hhYmxlPyBUaGUgRFNBIGxvb3AgZHJpdmVyIGV4aXN0cywgYnV0IEknbSB1bnN1cmUgaWYgaXQncyB0aGUgc2FtZSBhcyB0aGUgTURJTyBkZXZpY2UuLi4gbm8uXG5cbkJ1dCwgZ2l2ZW4gdGhlIGluc3RydWN0aW9ucyBhbmQgdGhlIGZhY3QgdGhhdCB3ZSBjYW4gdHJpZ2dlciB0aGUgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY29yZSBmdW5jdGlvbiwgYW5kIHRoYXQgdGhpcyBoYW5kbGVzIHVzZXItc3VwcGxpZWQgZGF0YSwgdGhlIG5ldGxpbmsgY2FsbHMgbmVlZCB0byBiZSBmdXp6ZWQgZXZlbiBpZiB0aGUgYG14bDg2Mnh4YCBkcml2ZXIgY2FuJ3QgYmUgcHJvYmVkLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgcmVhY2hhYmlsaXR5IG9mIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLiBZZXMsIGlmIHdlIGhhdmUgKmFueSogRFNBIHN3aXRjaCAobGlrZSBgZHNhX2xvb3BgKSwgdGhlIGNvcmUgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB2aWEgZGV2bGluayBuZXRsaW5rLiBJdCB3aWxsIGNhbGwgdGhlIGluZGl2aWR1YWwgc3dpdGNoIG9wLlxuXG5IZXJlJ3MgbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzOlxuXG4qICAgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWBcbiogICBgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVgXG4qICAgYG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlYFxuKiAgIGBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZWBcblxuQW5kIHRoZSBuZWNlc3NhcnkgY29uZmlnczpcblxuKiAgIGBORVRfRFNBX01YTDg2MmBcbiogICBgXG5cbiIsIklucHV0VG9rZW5zIjoxNDAwNCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MzQ6MjYuNjg1ODIxNzkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODcxNzE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0RTQV9NWEw4NjJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZzoyOmNvbmZpZyBORVRfRFNBX01YTDg2MlxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1heExpbmVhciBNeEw4NjJ4eFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MzQ6MjYuODc0NTQ4NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcyOTIwNDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZWxhdGlvbnNoaXBzIGhlcmUuIFRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUuIEknbSB0aGlua2luZywgXCJMZXQncyBjcmFjayBvcGVuIHRoYXQgS2NvbmZpZyBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBpcyAqcmVhbGx5KiByZWx5aW5nIG9uLlwiIEknbSBsb29raW5nIGZvciB0aGUgYnJlYWRjcnVtYnMsIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSAqaWZzKiBhbmQgKmRlcGVuZHMgb24qIHN0YXRlbWVudHMgdGhhdCBnb3Zlcm4gaG93IHRoZXNlIGNvbXBvbmVudHMgcGxheSB0b2dldGhlci4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBvciBtb2R1bGVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHZhcmlvdXMgY29uZGl0aW9ucy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55dGhpbmcgdGhhdCBqdW1wcyBvdXQg4oCTIGNvbXBsZXggbmVzdGVkIGRlcGVuZGVuY2llcywgdW51c3VhbCB1c2Ugb2YgYHNlbGVjdGAgb3IgYGRlZmF1bHRgLCBvciBhbnkgY2lyY3VsYXIgcmVmZXJlbmNlcyB0aGF0IG1pZ2h0IGJpdGUgbWUgbGF0ZXIuIE15IGdvYWwgaGVyZSBpcyBhIHF1aWNrLCBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRyb2wgZmxvdyBiZWZvcmUgSSBnZXQgYm9nZ2VkIGRvd24gaW4gdGhlIG1pbnV0aWFlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc2OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjM0OjMwLjM0NzQ3MTI2MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTkVUX0RTQV9NWEw4NjJcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXhMaW5lYXIgTXhMODYyeHhcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9EU0FcXG4gICA1OlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAgIDY6XFx0XFx0c2VsZWN0IE5FVF9EU0FfVEFHX01YTF84NjJYWFxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBzd2l0Y2ggZmFtaWx5LlxcbiAgIDk6XFx0XFx0ICBUaGVzZSBzd2l0Y2hlcyBoYXZlIHR3byAxMEdFIFNlckRlcyBpbnRlcmZhY2VzLCBvbmUgdHlwaWNhbGx5XFxuICAxMDpcXHRcXHQgIHVzZWQgYXMgQ1BVIHBvcnQuXFxuICAxMTpcXHRcXHQgICAtIE14TDg2MjgyIGhhcyBlaWdodCAyLjUgR2lnYWJpdCBQSFlzXFxuICAxMjpcXHRcXHQgICAtIE14TDg2MjUyIGhhcyBmaXZlIDIuNSBHaWdhYml0IFBIWXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MzQ6MzAuMzQ3NTU5NzExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ1Mjc3OTk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCBkcml2ZXIuIFRoZSBkZXBlbmRlbmNpZXMgcG9pbnQgZGlyZWN0bHkgdG8gYE5FVF9EU0FgLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUga2V5IGNvbmZpZyBpcyBgTkVUX0RTQV9NWEw4NjJgLiAgVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBJJ20gZG91YmxlLWNoZWNraW5nLCBqdXN0IHRvIGJlIHRob3JvdWdoLCB0aGF0IG5vIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhhdCdzIHRoZSBvbmx5IG9uZS5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgcGFydGljdWxhcmx5IGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLCBpcyByZWFjaGFibGUuIFllcCwgbG9va3MgbGlrZSB3ZSdyZSBnb29kIHRvIGdvIHRocm91Z2ggZGV2bGluayBuZXRsaW5rLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLlxuXG5CYXNlZCBvbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEknbSBnb2luZyB0byBzZXQgc29tZSBmdXp6aW5nIHBhcmFtZXRlcnMuIFRoaXMgbG9va3MgbGlrZSBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZywgc28gSSdsbCBtYXJrIGBXb3J0aEZ1enppbmdgIGFzIGB0cnVlYC4gSSdsbCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAsIGBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZWAsIGBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZWAsIGFuZCBhbHNvIHRoZSBjb3JlIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLlxuXG5GaW5hbGx5LCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGZvciB0ZXN0aW5nLCBJJ2xsIGV4cGxpY2l0bHkgZW5hYmxlIGBORVRfRFNBX01YTDg2MmAuXG5cblRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoaXMgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgZm9yIHRoZSBNeEw4NjJ4eCBkcml2ZXIsIHVzaW5nIGRldmxpbmsuIEl0IGludHJvZHVjZXMgdGhlIG5lY2Vzc2FyeSBjb2RlIHRvIGhhbmRsZSBmaXJtd2FyZSBmaWxlcyBjb21pbmcgZnJvbSB1c2Vyc3BhY2UuIEZ1cnRoZXJtb3JlLCBpdCBhZGRzIGEgbmV3IGRldmxpbmsgY2FsbGJhY2sgdG8gdGhlIERTQSBjb3JlLCB3aGljaCBzZWVtcyBpbXBvcnRhbnQgdG8gYmUgdGVzdGluZy4gIFRoaXMgaW50cm9kdWNlcyBhIG5ldyBhdHRhY2sgc3VyZmFjZSBzbyBpdCBuZWVkcyB0byBiZSB0ZXN0ZWQgdmlnb3JvdXNseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMzEsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MzQ6MzUuODAwMzQzMzY3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4ODMzMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfRFNBX01YTDg2MlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlXCIsXG4gICAgXCJteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZVwiLFxuICAgIFwibXhsODYyeHhfZmxhc2hfZmlybXdhcmVcIixcbiAgICBcImRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB2aWEgZGV2bGluayB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCBpbmNsdWRpbmcgcGFyc2luZyBvZiB0aGUgZmlybXdhcmUgZmlsZSB3aGljaCBjb21lcyBmcm9tIHVzZXJzcGFjZS4gSXQgYWxzbyBhZGRzIGEgbmV3IGRldmxpbmsgY2FsbGJhY2sgdG8gdGhlIERTQSBjb3JlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9EU0FfTVhMODYyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVcIixcbiAgICBcIm14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlXCIsXG4gICAgXCJteGw4NjJ4eF9mbGFzaF9maXJtd2FyZVwiLFxuICAgIFwiZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmaXJtd2FyZSBmbGFzaGluZyBzdXBwb3J0IHZpYSBkZXZsaW5rIHRvIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCBkcml2ZXIsIGluY2x1ZGluZyBwYXJzaW5nIG9mIHRoZSBmaXJtd2FyZSBmaWxlIHdoaWNoIGNvbWVzIGZyb20gdXNlcnNwYWNlLiBJdCBhbHNvIGFkZHMgYSBuZXcgZGV2bGluayBjYWxsYmFjayB0byB0aGUgRFNBIGNvcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowtk5tv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 03:24:14 +0000 UTC FinishedAt: 2026-07-20 03:34:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DSA_MXL862" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DSA_MXL862" ], "series_id": "1cbb138f-85fc-4de6-a880-37d3f262a0c8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mxl862xx_devlink_flash_update", "mxl862xx_flash_validate", "mxl862xx_flash_firmware", "dsa_devlink_flash_update" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9EU0FfTVhMODYyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUmIzM0OywKICAgICYjMzQ7bXhsODYyeHhfZmxhc2hfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bXhsODYyeHhfZmxhc2hfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7ZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB2aWEgZGV2bGluayB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCBpbmNsdWRpbmcgcGFyc2luZyBvZiB0aGUgZmlybXdhcmUgZmlsZSB3aGljaCBjb21lcyBmcm9tIHVzZXJzcGFjZS4gSXQgYWxzbyBhZGRzIGEgbmV3IGRldmxpbmsgY2FsbGJhY2sgdG8gdGhlIERTQSBjb3JlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTZhZGYyYmI3ZjNjNjNmMTk0OWY2OWUyNjM2OGYyMTBjNWU3MTIzN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDAzOjMzOjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZVxuaW5kZXggYTdiZTBlNjY2OWRmYTUuLmJjY2FjMGQwZjcwM2Y2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcbkBAIC0xLDMgJiM0MzsxLDMgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSAmIzQzOz0gbXhsODYyeHhfZHNhLm9cbi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm9cbiYjNDM7bXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmhcbmluZGV4IGM4N2E5NTVjMTNjNDhlLi5lMmFhMjkzNGU5ZTE2MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXG5AQCAtNzAsNiAmIzQzOzcwLDcgQEBcbiAjZGVmaW5lIElOVF9HUEhZX1JFQURcdFx0XHQoR1BZX0dQWTJYWF9NQUdJQyAmIzQzOyAweDEpXG4gI2RlZmluZSBJTlRfR1BIWV9XUklURVx0XHRcdChHUFlfR1BZMlhYX01BR0lDICYjNDM7IDB4MilcbiBcbiYjNDM7I2RlZmluZSBTWVNfTUlTQ19GV19VUERBVEVcdFx0KFNZU19NSVNDX01BR0lDICYjNDM7IDB4MSlcbiAjZGVmaW5lIFNZU19NSVNDX0ZXX1ZFUlNJT05cdFx0KFNZU19NSVNDX01BR0lDICYjNDM7IDB4MilcbiBcbiAjZGVmaW5lIE1YTDg2MlhYX1hQQ1NfUENTX0NPTkZJR1x0KE1YTDg2MlhYX1hQQ1NfTUFHSUMgJiM0MzsgMHgxKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmExZGUyNDdjMmYwNWRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXG5AQCAtMCwwICYjNDM7MSw0ODIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4XG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNSBEYW5pZWwgR29sbGUgXHUwMDNjZGFuaWVsQG1ha3JvdG9waWEub3JnXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMzIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtYXBpLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtY21kLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtZncuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1ob3N0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIFNCIFBESSByZWdpc3RlcnMgKGNsYXVzZS0yMiBTTURJTyBhZGRyZXNzIHNwYWNlKSAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMXHRcdDB4ZTEwMFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9BRERSXHRcdDB4ZTEwMVxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9EQVRBXHRcdDB4ZTEwMlxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFUXHRcdDB4ZTEwM1xuJiM0MztcbiYjNDM7LyogU0IgUERJIENUUkwgbW9kZXMgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1RcdDB4MDBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUlx0MHgwMlxuJiM0MztcbiYjNDM7LyogU0IgUERJIGhhbmRzaGFrZSBtYWdpYyAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRUFEWVx0XHQweGM1NWNcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfU1RBUlRcdFx0MHhmNDhmXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0VORFx0XHQweDNjYzNcbiYjNDM7XG4mIzQzOy8qIEZpcm13YXJlIHRyYW5zZmVyIGdlb21ldHJ5ICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfSERSX1NJWkVcdFx0MjBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX0hBTEZcdFx0MTYzODRcdC8qIHdvcmRzIHBlciBoYWxmLWJhbmsgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX1NMSUNFXHRcdDMyNzYwXHQvKiB3b3JkcyBwZXIgZnVsbCBzbGljZSAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX1NCMV9BRERSXHRcdDB4NzgwMFx0LyogU0IxIHdvcmQgYWRkcmVzcyAqL1xuJiM0MztcbiYjNDM7LyogVGltZW91dHMgKGdlbmVyb3VzIHVwcGVyIGJvdW5kcykgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TXHQzMDAwMFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TXHQ1MDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NU1x0MzAwMDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NU1x0MTIwMDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfUkVCT09UX0RFTEFZX01TXHQ1MDAwXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBteGw4NjJ4eF9zYl9wZGlfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbiYjNDM7XHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xuJiM0MztcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuJiM0MztcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4mIzQzO1x0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsXG4mIzQzO1x0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgZXhwZWN0ZWQsXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKCh1MTYpcmV0ID09IGV4cGVjdGVkKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHVzbGVlcF9yYW5nZSgxMDAwMCwgMTEwMDApO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxuJiM0MztcdFx0XHRcdCAgICAgICB1MzIgZGF0YV93cml0dGVuKVxuJiM0Mzt7XG4mIzQzO1x0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULCBkYXRhX3dyaXR0ZW4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLFxuJiM0MztcdFx0XHRcdFx0IE1YTDg2MlhYX0ZXX1dSSVRFX1RJTUVPVVRfTVMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBteGw4NjJ4eF9mbGFzaF9ub3RpZnkoc3RydWN0IGRldmxpbmsgKmRsLCBjb25zdCBjaGFyICpzdGF0dXMsXG4mIzQzO1x0XHRcdFx0ICB1MzIgZG9uZSwgdTMyIHRvdGFsKVxuJiM0Mzt7XG4mIzQzO1x0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgc3RhdHVzLCBOVUxMLCBkb25lLCB0b3RhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QgLSBjaGVjayB3aGV0aGVyIHRoZSBzd2l0Y2ggc2l0cyBpbiBNQ1Vib290XG4mIzQzOyAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBkYXRhXG4mIzQzOyAqXG4mIzQzOyAqIE1DVWJvb3Qgc2lnbmFscyByZWFkaW5lc3MgZm9yIGEgZmlybXdhcmUgZG93bmxvYWQgd2l0aCB0aGUgU0IgUERJXG4mIzQzOyAqIHJlYWR5IG1hZ2ljOyBvbmx5IHRoZSBjbGF1c2UtMjIgU01ESU8gaW50ZXJmYWNlIHdvcmtzIGluIHRoaXMgc3RhdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBNQ1Vib290IGlzIHdhaXRpbmcgZm9yIGEgZmlybXdhcmUgZG93bmxvYWQuXG4mIzQzOyAqL1xuJiM0Mztib29sIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0ID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogZGV2aWNlX3JlcHJvYmUoKSAtXHUwMDNlIHJlbW92ZSgpIGZyZWVzIHByaXYgd2hpbGUgdGhlIHdvcmsgcnVucywgc29cbiYjNDM7ICogdGhlIHdvcmsgc3RydWN0IGNhbm5vdCBsaXZlIGluIG14bDg2Mnh4X3ByaXYuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZSB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcms7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBteGw4NjJ4eF9yZXByb2JlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmUgKnJlcHJvYmUgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlLCBkd29yay53b3JrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldmljZV9yZXByb2JlKHJlcHJvYmUtXHUwMDNlZGV2KSlcbiYjNDM7XHRcdGRldl9lcnIocmVwcm9iZS1cdTAwM2VkZXYsIFwmIzM0O3JlcHJvYmUgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRwdXRfZGV2aWNlKHJlcHJvYmUtXHUwMDNlZGV2KTtcbiYjNDM7XHRrZnJlZShyZXByb2JlKTtcbiYjNDM7XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTUNVYm9vdCBmaXJtd2FyZSBpbWFnZSBoZWFkZXIgKi9cbiYjNDM7c3RydWN0IG14bDg2Mnh4X2Z3X2hkciB7XG4mIzQzO1x0X19sZTMyIGltYWdlX3R5cGU7XG4mIzQzO1x0X19sZTMyIGltYWdlX3NpemVfMTtcbiYjNDM7XHRfX2xlMzIgaW1hZ2VfY2hlY2tzdW1fMTtcbiYjNDM7XHRfX2xlMzIgaW1hZ2Vfc2l6ZV8yO1xuJiM0MztcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuJiM0MztcdFx0XHRcdCAgIHUzMiAqcGF5bG9hZF9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqaGRyO1xuJiM0MztcdHUzMiBzaXplMSwgc2l6ZTIsIHRvdGFsO1xuJiM0MztcdGNvbnN0IHU4ICpwYXlsb2FkO1xuJiM0MztcdHUzMiBjcmM7XG4mIzQzO1xuJiM0MztcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1x0cGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgJiM0MzsgTVhMODYyWFhfRldfSERSX1NJWkU7XG4mIzQzO1x0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2Vfc2l6ZV8xKTtcbiYjNDM7XHRzaXplMiA9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9zaXplXzIpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUxLCBzaXplMiwgXHUwMDI2dG90YWwpIHx8XG4mIzQzO1x0ICAgIHRvdGFsIFx1MDAzZSBmdy1cdTAwM2VzaXplIC0gTVhMODYyWFhfRldfSERSX1NJWkUpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgdG9vIHNtYWxsIGZvciBkZWNsYXJlZCBzaXplXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0b3RhbCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZTEpIHtcbiYjNDM7XHRcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcbiYjNDM7XHRcdGlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWltYWdlX2NoZWNrc3VtXzEpKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmbGFzaDogaW1hZ2UgMSBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8xKSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUyKSB7XG4mIzQzO1x0XHRjcmMgPSB+Y3JjMzJfbGUofjBVLCBwYXlsb2FkICYjNDM7IHNpemUxLCBzaXplMik7XG4mIzQzO1x0XHRpZiAoY3JjICE9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8yKSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7Zmxhc2g6IGltYWdlIDIgQ1JDIG1pc21hdGNoIChnb3QgJTA4eCwgZXhwZWN0ZWQgJTA4eClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0Y3JjLCBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMikpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpwYXlsb2FkX3NpemUgPSB0b3RhbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfZmxhc2hfZmlybXdhcmUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiYjNDM7XHRcdFx0XHQgICB1MzIgcGF5bG9hZF9zaXplLCBzdHJ1Y3QgZGV2bGluayAqZGwpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgJiM0MzsgTVhMODYyWFhfRldfSERSX1NJWkU7XG4mIzQzO1x0dTMyIHdvcmRfaWR4ID0gMCwgZGF0YV93cml0dGVuID0gMCwgaWR4ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5leHRfbm90aWZ5ID0gMDtcbiYjNDM7XHR1MTYgd29yZCwgZmRhdGE7XG4mIzQzO1x0aW50IHJldCwgaTtcbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAxOiByZWJvb3QgdGhlIGZpcm13YXJlIGludG8gTUNVYm9vdCByZXNjdWUgbW9kZSAqL1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VyZXNjdWVfbW9kZSkge1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfYXBpX3dyYXAocHJpdiwgU1lTX01JU0NfRldfVVBEQVRFLCBOVUxMLCAwLFxuJiM0MztcdFx0XHRcdFx0ZmFsc2UsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O2ZsYXNoOiBGV19VUERBVEUgY29tbWFuZCBmYWlsZWQ6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRmFpbHVyZXMgZnJvbSBoZXJlIG9uIG11c3QgZ28gdGhyb3VnaCBlbmRfbWFnaWMgc28gTUNVYm9vdFxuJiM0MztcdCAqIHJlYm9vdHMgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMjogd2FpdCBmb3IgYm9vdGxvYWRlciByZWFkeSAqL1xuJiM0MztcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCYjMzQ7V2FpdGluZyBmb3IgYm9vdGxvYWRlclwmIzM0OywgMCwgMCk7XG4mIzQzO1x0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxuJiM0MztcdFx0XHRcdFx0TVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogYm9vdGxvYWRlciBub3QgcmVhZHk6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdGdvdG8gZW5kX21hZ2ljO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAzOiBzdGFydCBoYW5kc2hha2UgKi9cbiYjNDM7XHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbiYjNDM7XHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfU1RBUlQpO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVJUICYjNDM7IDEsXG4mIzQzO1x0XHRcdFx0XHRNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogc3RhcnQgaGFuZHNoYWtlIGZhaWxlZDogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDQ6IHRyYW5zZmVyIGltYWdlIGhlYWRlciAqL1xuJiM0MztcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCYjMzQ7RXJhc2luZyBmbGFzaFwmIzM0OywgMCwgMCk7XG4mIzQzO1x0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4mIzQzO1x0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1YTDg2MlhYX0ZXX0hEUl9TSVpFIC8gMjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHdvcmQgPSBmdy1cdTAwM2VkYXRhW2kgKiAyXSB8XG4mIzQzO1x0XHQgICAgICAgKCh1MTYpZnctXHUwMDNlZGF0YVtpICogMiAmIzQzOyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgd29yZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmbGFzaDogaGVhZGVyIHdyaXRlIGZhaWxlZDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRcdGdvdG8gZW5kX21hZ2ljO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBieXRlIGNvdW50IGluIFNUQVQgdHJpZ2dlcnMgdGhlIGVyYXNlICovXG4mIzQzO1x0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4mIzQzO1x0XHRcdCAgICAgTVhMODYyWFhfRldfSERSX1NJWkUpO1xuJiM0MztcbiYjNDM7XHQvKiBBQ0sgaXMgYnl0ZSBjb3VudCAmIzQzOyAxICovXG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9GV19IRFJfU0laRSAmIzQzOyAxLFxuJiM0MztcdFx0XHRcdFx0TVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVMpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IGhlYWRlciBBQ0sgZmFpbGVkOiAlcGVcXG5cJiMzNDssIEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRnb3RvIGVuZF9tYWdpYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgNTogd2FpdCBmb3IgZXJhc2UgdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXG4mIzQzO1x0XHRcdFx0XHRNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O2ZsYXNoOiBlcmFzZSB0aW1lb3V0OiAlcGVcXG5cJiMzNDssIEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRnb3RvIGVuZF9tYWdpYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgNjogdHJhbnNmZXIgcGF5bG9hZCAqL1xuJiM0MztcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGlkeCBcdTAwM2MgcGF5bG9hZF9zaXplKSB7XG4mIzQzO1x0XHRpZiAoaWR4ICYjNDM7IDEgXHUwMDNjIHBheWxvYWRfc2l6ZSkge1xuJiM0MztcdFx0XHRmZGF0YSA9IHBheWxvYWRbaWR4XSB8XG4mIzQzO1x0XHRcdFx0KCh1MTYpcGF5bG9hZFtpZHggJiM0MzsgMV0gXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdFx0XHRpZHggJiM0Mzs9IDI7XG4mIzQzO1x0XHRcdGRhdGFfd3JpdHRlbiAmIzQzOz0gMjtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGZkYXRhID0gcGF5bG9hZFtpZHhdO1xuJiM0MztcdFx0XHRpZHgmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRkYXRhX3dyaXR0ZW4mIzQzOyYjNDM7O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCBmZGF0YSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmbGFzaDogZGF0YSB3cml0ZSBmYWlsZWQgYXQgJXUvJXU6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR3b3JkX2lkeCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlkeCBcdTAwM2U9IHBheWxvYWRfc2l6ZSkge1xuJiM0MztcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogSGFsZi1iYW5rIGJvdW5kYXJ5OiBzd2l0Y2ggdG8gU0IxIGFkZHJlc3MgKi9cbiYjNDM7XHRcdGlmICh3b3JkX2lkeCA9PSBNWEw4NjJYWF9GV19CQU5LX0hBTEYpIHtcbiYjNDM7XHRcdFx0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4mIzQzO1x0XHRcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuJiM0MztcdFx0XHRcdFx0ICAgICBNWEw4NjJYWF9GV19TQjFfQUREUik7XG4mIzQzO1x0XHRcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHdvcmRfaWR4IFx1MDAzZT0gTVhMODYyWFhfRldfQkFOS19TTElDRSkge1xuJiM0MztcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcbiYjNDM7XHRcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O2ZsYXNoOiB3cml0ZSB0aW1lb3V0IGF0ICV1LyV1OiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdFx0XHRnb3RvIGVuZF9tYWdpYztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHR3b3JkX2lkeCA9IDA7XG4mIzQzO1x0XHRcdGRhdGFfd3JpdHRlbiA9IDA7XG4mIzQzO1x0XHRcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCBuZXh0X25vdGlmeSkpIHtcbiYjNDM7XHRcdFx0XHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwmIzM0O0ZsYXNoaW5nXCYjMzQ7LCBpZHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHBheWxvYWRfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0bmV4dF9ub3RpZnkgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwmIzM0O0ZsYXNoaW5nXCYjMzQ7LCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7XG4mIzQzO1xuJiM0MztlbmRfbWFnaWM6XG4mIzQzO1x0LyogcmVib290IE1DVWJvb3QgZXZlbiBhZnRlciBhIGZhaWxlZCB0cmFuc2ZlciAqL1xuJiM0MztcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuJiM0MztcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xuJiM0MztcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBjaGFyICptb2RlbDtcbiYjNDM7XHRjaGFyIHZlcl9zdHJbMzJdO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG1vZGVsID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRzLVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKG1vZGVsKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBtb2RlbCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogY2Fub25pY2FsIG51bGwgdmVyc2lvbjogbm8gb3BlcmF0aW9uYWwgZmlybXdhcmUgb24gdGhlIHN3aXRjaCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgXCYjMzQ7ZndcJiMzNDssIFwmIzM0OzAuMC4wXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYodmVyX3N0ciwgc2l6ZW9mKHZlcl9zdHIpLCBcJiMzNDsldS4ldS4ldVwmIzM0OyxcbiYjNDM7XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXHUwMDNlZndfdmVyc2lvbi5taW5vcixcbiYjNDM7XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLCBcJiMzNDtmd1wmIzM0OywgdmVyX3N0cik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3N5c19md19pbWFnZV92ZXJzaW9uIHZlciA9IHt9O1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlICpyZXByb2JlO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTMyIHBheWxvYWRfc2l6ZTtcbiYjNDM7XHRpbnQgcmV0LCBpO1xuJiM0MztcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWNvbXBvbmVudCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Y29tcG9uZW50IGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfZmxhc2hfdmFsaWRhdGUocHJpdiwgcGFyYW1zLVx1MDAzZWZ3LCBcdTAwMjZwYXlsb2FkX3NpemUpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O2Zpcm13YXJlIGltYWdlIHZhbGlkYXRpb24gZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBFdmVyeXRoaW5nIG5lZWRlZCB0byBzY2hlZHVsZSB0aGUgcmVwcm9iZSB3aGljaCByZXN0b3Jlc1xuJiM0MztcdCAqIG5vcm1hbCBvcGVyYXRpb24gbXVzdCBiZSBpbiBwbGFjZSBiZWZvcmUgdGhlIHN3aXRjaCBpc1xuJiM0MztcdCAqIGRpc3R1cmJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXByb2JlID0ga3phbGxvY19vYmooKnJlcHJvYmUpO1xuJiM0MztcdGlmICghcmVwcm9iZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkge1xuJiM0MztcdFx0a2ZyZWUocmVwcm9iZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcHJvYmUtXHUwMDNlZGV2ID0gZ2V0X2RldmljZShkcy1cdTAwM2VkZXYpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJlcHJvYmUtXHUwMDNlZHdvcmssIG14bDg2Mnh4X3JlcHJvYmVfd29ya19mbik7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0ZGV2X2luZm8oZHMtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7Zmxhc2g6IHJlY292ZXJpbmcgc3dpdGNoIGZyb20gTUNVYm9vdCByZXNjdWUgbW9kZVxcblwmIzM0Oyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZGV2X2luZm8oZHMtXHUwMDNlZGV2LCBcJiMzNDtmbGFzaDogcnVubmluZyBmaXJtd2FyZSAldS4ldS4ldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuJiM0MztcdFx0XHQgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xvc2UgcG9ydHMgd2hpbGUgdGhlIGZpcm13YXJlIGlzIHN0aWxsIGFsaXZlIHNvIHRoZSBEU0FcbiYjNDM7XHQgKiBjb3JlJiMzOTtzIE1EQi9GREIgdHJhY2tpbmcgaXMgZHJhaW5lZCwgYW5kIGRldGFjaCB1c2VyIHBvcnRzXG4mIzQzO1x0ICogc28gdXNlcnNwYWNlIGNhbm5vdCByZW9wZW4gdGhlbSBkdXJpbmcgdGhlIGZsYXNoLiBUaGVcbiYjNDM7XHQgKiBjb25kdWl0IGJlbG9uZ3MgdG8gdGhlIE1BQyBkcml2ZXIgYW5kIGlzIG9ubHkgY2xvc2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KGRwLCBkcykge1xuJiM0MztcdFx0aWYgKGRwLVx1MDAzZXVzZXIpIHtcbiYjNDM7XHRcdFx0ZGV2X2Nsb3NlKGRwLVx1MDAzZXVzZXIpO1xuJiM0MztcdFx0XHRuZXRpZl9kZXZpY2VfZGV0YWNoKGRwLVx1MDAzZXVzZXIpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGRwLCBkcylcbiYjNDM7XHRcdGRldl9jbG9zZShkcC1cdTAwM2Vjb25kdWl0KTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWJsb2NrX2hvc3QgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VzdGF0c193b3JrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlY3JjX2Vycl93b3JrKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkcy1cdTAwM2VudW1fcG9ydHM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldLmhvc3RfZmxvb2Rfd29yayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHByaXYsIHBhcmFtcy1cdTAwM2VmdywgcGF5bG9hZF9zaXplLFxuJiM0MztcdFx0XHRcdCAgICAgIGRzLVx1MDAzZWRldmxpbmspO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtmaXJtd2FyZSB0cmFuc2ZlciBmYWlsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJldCkge1xuJiM0MztcdFx0LyogbGlmdCB0aGUgYmxvY2sgdG8gcXVlcnkgdGhlIG5ldyBmaXJtd2FyZSB2ZXJzaW9uICovXG4mIzQzO1x0XHRwcml2LVx1MDAzZWJsb2NrX2hvc3QgPSBmYWxzZTtcbiYjNDM7XHRcdHByaXYtXHUwMDNlcmVzY3VlX21vZGUgPSBmYWxzZTtcbiYjNDM7XHRcdG1lbXNldChcdTAwMjZ2ZXIsIDAsIHNpemVvZih2ZXIpKTtcbiYjNDM7XHRcdGlmICghTVhMODYyWFhfQVBJX1JFQURfUVVJRVQocHJpdiwgU1lTX01JU0NfRldfVkVSU0lPTiwgdmVyKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB2ZXIuaXZfbWFqb3IpXG4mIzQzO1x0XHRcdGRldl9pbmZvKGRzLVx1MDAzZWRldiwgXCYjMzQ7Zmxhc2g6IG5ldyBmaXJtd2FyZSAldS4ldS4ldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgdmVyLml2X21ham9yLCB2ZXIuaXZfbWlub3IsXG4mIzQzO1x0XHRcdFx0IGxlMTZfdG9fY3B1KHZlci5pdl9yZXZpc2lvbikpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vza2lwX3RlYXJkb3duID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnJlcHJvYmUtXHUwMDNlZHdvcmssIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU3YzIwMDBjZmVlNTE5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19NWEw4NjJYWF9GV19IXG4mIzQzOyNkZWZpbmUgX19NWEw4NjJYWF9GV19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBteGw4NjJ4eF9wcml2O1xuJiM0MztcbiYjNDM7Ym9vbCBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3Qoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpO1xuJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fTVhMODYyWFhfRldfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5pbmRleCA0YWNkMjE2ZjdjYzAwOS4uODA1NjVkZTcxMGQzNzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5AQCAtMTUsNiAmIzQzOzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtY21kLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1ob3N0LmhcJiMzNDtcbiBcbiAjZGVmaW5lIENUUkxfQlVTWV9NQVNLXHRcdFx0QklUKDE1KVxuQEAgLTM0MCw2ICYjNDM7MzQxLDIxIEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqX2RhdGEsXG4gXG4gXHRtdXRleF9sb2NrX25lc3RlZChcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpO1xuIFxuJiM0MztcdGlmIChwcml2LVx1MDAzZXNraXBfdGVhcmRvd24pIHtcbiYjNDM7XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PREVWO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VibG9ja19ob3N0IFx1MDAyNlx1MDAyNiBjbWQgIT0gU1lTX01JU0NfRldfVVBEQVRFKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0bWF4ID0gKHNpemUgJiM0MzsgMSkgLyAyO1xuIFxuIFx0cmV0ID0gbXhsODYyeHhfYnVzeV93YWl0KHByaXYpO1xuQEAgLTQ5NSw2ICYjNDM7NTExLDQxIEBAIGludCBteGw4NjJ4eF9yZXNldChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHXHRcdDB4MWZcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TTURJT19QQUdFX01BU0tcdDB4ZmZmMFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX09GRl9NQVNLXHRcdDB4MDAwZlxuJiM0MztcbiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3JlYWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXM7XG4mIzQzO1x0aW50IHBoeSA9IHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRyxcbiYjNDM7XHRcdFx0ICAgICAgYWRkciBcdTAwMjYgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldCA9IF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5LCBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBteGw4NjJ4eF9zbWRpb193cml0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cztcbiYjNDM7XHRpbnQgcGh5ID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHLFxuJiM0MztcdFx0XHQgICAgICBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKVxuJiM0MztcdFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyxcbiYjNDM7XHRcdFx0XHQgICAgICB2YWwpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgbXhsODYyeHhfaG9zdF9pbml0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuIHtcbiBcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZWNyY19lcnJfd29yaywgbXhsODYyeHhfY3JjX2Vycl93b3JrX2ZuKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuaW5kZXggNjZkNmFlMTk4YWZmNDUuLjRlMDU0YzZlNGMwZTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuQEAgLTE4LDUgJiM0MzsxOCw3IEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqZGF0YSwgdTE2IHNpemUsXG4gXHRteGw4NjJ4eF9hcGlfd3JhcChkZXYsIGNtZCwgXHUwMDI2KGRhdGEpLCBzaXplb2YoKGRhdGEpKSwgdHJ1ZSwgdHJ1ZSlcbiBcbiBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKTtcbiBcbiAjZW5kaWYgLyogX19NWEw4NjJYWF9IT1NUX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuaW5kZXggYjY4OTY1MmFhOWI5MjAuLmE1YjY5NDBiNTUyZTllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuQEAgLTQwNiw2ICYjNDM7NDA2LDggQEAgbXhsODYyeHhfcGh5bGlua19tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcbiBcdHN3aXRjaCAocG9ydCkge1xuIFx0Y2FzZSA5IC4uLiAxNjpcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0aWYgKCFNWEw4NjJYWF9GV19WRVJfTUlOKHByaXYsIDEsIDAsIDg0KSkge1xuIFx0XHRcdGRldl93YXJuX29uY2UoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LFxuIFx0XHRcdFx0ICAgICAgXCYjMzQ7U2VyRGVzIFBDUyB1bnN1cHBvcnRlZCBvbiBvbGQgZmlybXdhcmUuXFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXG5pbmRleCA0NWQyMzdiM2E0MGYxMC4uMjY1YTgzZjRiMzcxYjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcbkBAIC0yMSw2ICYjNDM7MjEsNyBAQFxuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1hcGkuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWNtZC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWZ3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1ob3N0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1waHlsaW5rLmhcJiMzNDtcbiBcbkBAIC02MjgsOSAmIzQzOzYyOSwyMiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cHJpdi1cdTAwM2VyZXNjdWVfbW9kZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTtcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHQvKiB0aGUgcmVzZXQgbWF5IG9ubHkgbm93IGhhdmUgdHJpZ2dlcmVkIHJlc2N1ZSBtb2RlICovXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlcmVzY3VlX21vZGUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7XG4mIzQzO1x0XHRcdGlmICghcHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbiYjNDM7XHRcdGRldl93YXJuKGRzLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O3N3aXRjaCBzdHVjayBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNlcmRlc19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VzZXJkZXNfcG9ydHMpOyBpJiM0MzsmIzQzOylcbkBAIC03MTUsMTEgJiM0Mzs3MjksMjEgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3N0YXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxuIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRyZXR1cm4gbXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgdHJ1ZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG14bDg2Mnh4X3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmIChteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSkpXG4gXHRcdGRldl9lcnIoZHMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBwb3J0ICVkXFxuXCYjMzQ7LCBwb3J0KTtcbiB9XG5AQCAtMTMzNyw2ICYjNDM7MTM2MSwxMiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiBcdGJvb2wgaXNfY3B1X3BvcnQgPSBkc2FfcG9ydF9pc19jcHUoZHApO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHQvKiBEU0EgcmVpbml0cyBmYWlsZWQgdXNlciBwb3J0cyBhcyB1bnVzZWQ7IHNoYXJlZCBwb3J0cyBtdXN0XG4mIzQzO1x0ICogc3VjY2VlZCBmb3IgdGhlIHRyZWUgdG8gcmVnaXN0ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4mIzQzO1x0XHRyZXR1cm4gZHNhX3BvcnRfaXNfdXNlcihkcCkgPyAtRU5PREVWIDogMDtcbiYjNDM7XG4gXHRyZXQgPSBteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTE2MjgsNiAmIzQzOzE2NTgsOSBAQCBzdGF0aWMgdm9pZCBteGw4NjJ4eF9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0c3dpdGNoIChzdGF0ZSkge1xuIFx0Y2FzZSBCUl9TVEFURV9ESVNBQkxFRDpcbiBcdFx0cGFyYW0ucG9ydF9zdGF0ZSA9IGNwdV90b19sZTMyKE1YTDg2MlhYX1NUUF9QT1JUX1NUQVRFX0RJU0FCTEUpO1xuQEAgLTIwODYsNiAmIzQzOzIxMTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3BhdXNlX3N0YXRzID0gbXhsODYyeHhfZ2V0X3BhdXNlX3N0YXRzLFxuIFx0LmdldF9ybW9uX3N0YXRzID0gbXhsODYyeHhfZ2V0X3Jtb25fc3RhdHMsXG4gXHQuZ2V0X3N0YXRzNjQgPSBteGw4NjJ4eF9nZXRfc3RhdHM2NCxcbiYjNDM7XHQuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsXG4mIzQzO1x0LmRldmxpbmtfZmxhc2hfdXBkYXRlID0gbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUsXG4gfTtcbiBcbiBzdGF0aWMgaW50IG14bDg2Mnh4X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbkBAIC0yMTkxLDggJiM0MzsyMjI2LDggQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBteGw4NjJ4eF9vZl9tYXRjaFtdID0ge1xuLVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21heGxpbmVhcixteGw4NjI4MlwmIzM0OyB9LFxuLVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21heGxpbmVhcixteGw4NjI1MlwmIzM0OyB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttYXhsaW5lYXIsbXhsODYyODJcJiMzNDssIC5kYXRhID0gXCYjMzQ7TWF4TGluZWFyIE14TDg2MjgyXCYjMzQ7IH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21heGxpbmVhcixteGw4NjI1MlwmIzM0OywgLmRhdGEgPSBcJiMzNDtNYXhMaW5lYXIgTXhMODYyNTJcJiMzNDsgfSxcbiBcdHsgLyogc2VudGluZWwgKi8gfVxuIH07XG4gTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXhsODYyeHhfb2ZfbWF0Y2gpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcbmluZGV4IDQzMmE1ZjNmMmUwOGU2Li41ZDIxMjk2NTYxZTNhYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxuQEAgLTMxOSw2ICYjNDM7MzE5LDEyIEBAIHN0cnVjdCBteGw4NjJ4eF9md192ZXJzaW9uIHtcbiAgKiBAZXZsYW5faW5ncmVzc19zaXplOiBwZXItcG9ydCBpbmdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxuICAqIEBldmxhbl9lZ3Jlc3Nfc2l6ZTogIHBlci1wb3J0IGVncmVzcyBFeHRlbmRlZCBWTEFOIGJsb2NrIHNpemVcbiAgKiBAdmZfYmxvY2tfc2l6ZTogICAgICBwZXItcG9ydCBWTEFOIEZpbHRlciBibG9jayBzaXplXG4mIzQzOyAqIEBibG9ja19ob3N0OiAgICAgICAgIHJlamVjdCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgKGV4Y2VwdCBGV19VUERBVEUpXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBhIGZpcm13YXJlIGZsYXNoXG4mIzQzOyAqIEBza2lwX3RlYXJkb3duOiAgICAgIGRpc2NhcmQgZmlybXdhcmUgQVBJIGNvbW1hbmRzIGR1cmluZyB0aGUgdGVhcmRvd25cbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIGJ5IHRoZSBwb3N0LWZsYXNoIHJlcHJvYmVcbiYjNDM7ICogQHJlc2N1ZV9tb2RlOiAgICAgICAgc3dpdGNoIGlzIHN0dWNrIGluIE1DVWJvb3Q7IGZpcm13YXJlIEFQSSBjb21tYW5kc1xuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICBmYWlsIGZhc3QsIG9ubHkgY2xhdXNlLTIyIFNNRElPIHdvcmtzXG4gICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVyc1xuICAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBhY2N1bXVsYXRlcyB0aGVtIGludG8gNjQtYml0IHBlci1wb3J0IHN0YXRzXG4gICovXG5AQCAtMzM3LDYgJiM0MzszNDMsOSBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7XG4gXHR1MTYgZXZsYW5faW5ncmVzc19zaXplO1xuIFx0dTE2IGV2bGFuX2VncmVzc19zaXplO1xuIFx0dTE2IHZmX2Jsb2NrX3NpemU7XG4mIzQzO1x0Ym9vbCBibG9ja19ob3N0O1xuJiM0MztcdGJvb2wgc2tpcF90ZWFyZG93bjtcbiYjNDM7XHRib29sIHJlc2N1ZV9tb2RlO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193b3JrO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaFxuaW5kZXggOGMxNmVmMjNjYzEwMmEuLmM5ZTE5MzQ4ZGU2MTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2RzYS5oXG5AQCAtMTE3MCw2ICYjNDM7MTE3MCw5IEBAIHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB7XG4gXHRpbnRcdCgqZGV2bGlua19pbmZvX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiYjNDM7XHRpbnRcdCgqZGV2bGlua19mbGFzaF91cGRhdGUpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXHRpbnRcdCgqZGV2bGlua19zYl9wb29sX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pO1xuZGlmZiAtLWdpdCBhL25ldC9kc2EvZGV2bGluay5jIGIvbmV0L2RzYS9kZXZsaW5rLmNcbmluZGV4IGVkMzQyZjM0NTY5MmJiLi4yNTMxMWE4N2NiYzU2ZCAxMDA2NDRcbi0tLSBhL25ldC9kc2EvZGV2bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL2RldmxpbmsuY1xuQEAgLTIwLDYgJiM0MzsyMCwxOCBAQCBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc2FfZGV2bGlua190b19kcyhkbCk7XG4mIzQzO1xuJiM0MztcdGlmICghZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlKGRzLCBwYXJhbXMsIGV4dGFjayk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxuIFx0XHRcdFx0ICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pXG5AQCAtMTY5LDYgJiM0MzsxODEsNyBAQCBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkbHAsXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19vcHMgPSB7XG4gXHQuaW5mb19nZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX2luZm9fZ2V0LFxuJiM0MztcdC5mbGFzaF91cGRhdGVcdFx0XHQ9IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcbiBcdC5zYl9wb29sX2dldFx0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQsXG4gXHQuc2JfcG9vbF9zZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LFxuIFx0LnNiX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjM0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9EU0FfTVhMODYyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUmIzM0OywKICAgICYjMzQ7bXhsODYyeHhfZmxhc2hfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bXhsODYyeHhfZmxhc2hfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7ZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB2aWEgZGV2bGluayB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCBpbmNsdWRpbmcgcGFyc2luZyBvZiB0aGUgZmlybXdhcmUgZmlsZSB3aGljaCBjb21lcyBmcm9tIHVzZXJzcGFjZS4gSXQgYWxzbyBhZGRzIGEgbmV3IGRldmxpbmsgY2FsbGJhY2sgdG8gdGhlIERTQSBjb3JlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NmFkZjJiYjdmM2M2M2YxOTQ5ZjY5ZTI2MzY4ZjIxMGM1ZTcxMjM3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjAgMDM6MzM6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUKaW5kZXggYTdiZTBlNjY2OWRmYTUuLmJjY2FjMGQwZjcwM2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlCkBAIC0xLDMgJiM0MzsxLDMgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIG9iai0kKENPTkZJR19ORVRfRFNBX01YTDg2MikgJiM0Mzs9IG14bDg2Mnh4X2RzYS5vCi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm8KJiM0MztteGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm8gbXhsODYyeHgtZncubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oCmluZGV4IGM4N2E5NTVjMTNjNDhlLi5lMmFhMjkzNGU5ZTE2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaApAQCAtNzAsNiAmIzQzOzcwLDcgQEAKICNkZWZpbmUgSU5UX0dQSFlfUkVBRAkJCShHUFlfR1BZMlhYX01BR0lDICYjNDM7IDB4MSkKICNkZWZpbmUgSU5UX0dQSFlfV1JJVEUJCQkoR1BZX0dQWTJYWF9NQUdJQyAmIzQzOyAweDIpCiAKJiM0MzsjZGVmaW5lIFNZU19NSVNDX0ZXX1VQREFURQkJKFNZU19NSVNDX01BR0lDICYjNDM7IDB4MSkKICNkZWZpbmUgU1lTX01JU0NfRldfVkVSU0lPTgkJKFNZU19NSVNDX01BR0lDICYjNDM7IDB4MikKIAogI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19DT05GSUcJKE1YTDg2MlhYX1hQQ1NfTUFHSUMgJiM0MzsgMHgxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNmExZGUyNDdjMmYwNWQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYwpAQCAtMCwwICYjNDM7MSw0ODIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4CiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjUgRGFuaWVsIEdvbGxlICZsdDtkYW5pZWxAbWFrcm90b3BpYS5vcmcmZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NyYzMyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L292ZXJmbG93LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtteGw4NjJ4eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWFwaS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWNtZC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWZ3LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtaG9zdC5oJiMzNDsKJiM0MzsKJiM0MzsvKiBTQiBQREkgcmVnaXN0ZXJzIChjbGF1c2UtMjIgU01ESU8gYWRkcmVzcyBzcGFjZSkgKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMCQkweGUxMDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9BRERSCQkweGUxMDEKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9EQVRBCQkweGUxMDIKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFUCQkweGUxMDMKJiM0MzsKJiM0MzsvKiBTQiBQREkgQ1RSTCBtb2RlcyAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUCTB4MDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSCTB4MDIKJiM0MzsKJiM0MzsvKiBTQiBQREkgaGFuZHNoYWtlIG1hZ2ljICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkVBRFkJCTB4YzU1YwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1NUQVJUCQkweGY0OGYKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9FTkQJCTB4M2NjMwomIzQzOwomIzQzOy8qIEZpcm13YXJlIHRyYW5zZmVyIGdlb21ldHJ5ICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19IRFJfU0laRQkJMjAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0JBTktfSEFMRgkJMTYzODQJLyogd29yZHMgcGVyIGhhbGYtYmFuayAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19TTElDRQkJMzI3NjAJLyogd29yZHMgcGVyIGZ1bGwgc2xpY2UgKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX1NCMV9BRERSCQkweDc4MDAJLyogU0IxIHdvcmQgYWRkcmVzcyAqLwomIzQzOwomIzQzOy8qIFRpbWVvdXRzIChnZW5lcm91cyB1cHBlciBib3VuZHMpICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TCTMwMDAwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUwk1MDAwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TCTMwMDAwMAomIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NUwkxMjAwMDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NUwk1MDAwCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsCiYjNDM7CQkJICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpOwomIzQzOwlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUiwKJiM0MzsJCQkgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7CiYjNDM7CW14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLAomIzQzOwkJCSAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgZXhwZWN0ZWQsCiYjNDM7CQkJCSAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFUKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoKHUxNilyZXQgPT0gZXhwZWN0ZWQpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDExMDAwKTsKJiM0MzsJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOwomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2Uoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsCiYjNDM7CQkJCSAgICAgICB1MzIgZGF0YV93cml0dGVuKQomIzQzO3sKJiM0MzsJbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpOwomIzQzOwlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgZGF0YV93cml0dGVuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCwKJiM0MzsJCQkJCSBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLAomIzQzOwkJCQkgIHUzMiBkb25lLCB1MzIgdG90YWwpCiYjNDM7ewomIzQzOwlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBzdGF0dXMsIE5VTEwsIGRvbmUsIHRvdGFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0IC0gY2hlY2sgd2hldGhlciB0aGUgc3dpdGNoIHNpdHMgaW4gTUNVYm9vdAomIzQzOyAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBkYXRhCiYjNDM7ICoKJiM0MzsgKiBNQ1Vib290IHNpZ25hbHMgcmVhZGluZXNzIGZvciBhIGZpcm13YXJlIGRvd25sb2FkIHdpdGggdGhlIFNCIFBESQomIzQzOyAqIHJlYWR5IG1hZ2ljOyBvbmx5IHRoZSBjbGF1c2UtMjIgU01ESU8gaW50ZXJmYWNlIHdvcmtzIGluIHRoaXMgc3RhdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgTUNVYm9vdCBpcyB3YWl0aW5nIGZvciBhIGZpcm13YXJlIGRvd25sb2FkLgomIzQzOyAqLwomIzQzO2Jvb2wgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQgPT0gTVhMODYyWFhfU0JfUERJX1JFQURZOwomIzQzO30KJiM0MzsKJiM0MzsvKiBkZXZpY2VfcmVwcm9iZSgpIC0mZ3Q7IHJlbW92ZSgpIGZyZWVzIHByaXYgd2hpbGUgdGhlIHdvcmsgcnVucywgc28KJiM0MzsgKiB0aGUgd29yayBzdHJ1Y3QgY2Fubm90IGxpdmUgaW4gbXhsODYyeHhfcHJpdi4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZSB7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayBkd29yazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG14bDg2Mnh4X3JlcHJvYmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZSAqcmVwcm9iZSA9CiYjNDM7CQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG14bDg2Mnh4X3JlcHJvYmUsIGR3b3JrLndvcmspOwomIzQzOwomIzQzOwlpZiAoZGV2aWNlX3JlcHJvYmUocmVwcm9iZS0mZ3Q7ZGV2KSkKJiM0MzsJCWRldl9lcnIocmVwcm9iZS0mZ3Q7ZGV2LCAmIzM0O3JlcHJvYmUgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CXB1dF9kZXZpY2UocmVwcm9iZS0mZ3Q7ZGV2KTsKJiM0MzsJa2ZyZWUocmVwcm9iZSk7CiYjNDM7CW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNQ1Vib290IGZpcm13YXJlIGltYWdlIGhlYWRlciAqLwomIzQzO3N0cnVjdCBteGw4NjJ4eF9md19oZHIgewomIzQzOwlfX2xlMzIgaW1hZ2VfdHlwZTsKJiM0MzsJX19sZTMyIGltYWdlX3NpemVfMTsKJiM0MzsJX19sZTMyIGltYWdlX2NoZWNrc3VtXzE7CiYjNDM7CV9fbGUzMiBpbWFnZV9zaXplXzI7CiYjNDM7CV9fbGUzMiBpbWFnZV9jaGVja3N1bV8yOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkJICAgdTMyICpwYXlsb2FkX3NpemUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgbXhsODYyeHhfZndfaGRyICpoZHI7CiYjNDM7CXUzMiBzaXplMSwgc2l6ZTIsIHRvdGFsOwomIzQzOwljb25zdCB1OCAqcGF5bG9hZDsKJiM0MzsJdTMyIGNyYzsKJiM0MzsKJiM0MzsJaWYgKGZ3LSZndDtzaXplICZsdDsgTVhMODYyWFhfRldfSERSX1NJWkUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaGRyID0gKGNvbnN0IHN0cnVjdCBteGw4NjJ4eF9md19oZHIgKilmdy0mZ3Q7ZGF0YTsKJiM0MzsJcGF5bG9hZCA9IGZ3LSZndDtkYXRhICYjNDM7IE1YTDg2MlhYX0ZXX0hEUl9TSVpFOwomIzQzOwlzaXplMSA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7aW1hZ2Vfc2l6ZV8xKTsKJiM0MzsJc2l6ZTIgPSBsZTMyX3RvX2NwdShoZHItJmd0O2ltYWdlX3NpemVfMik7CiYjNDM7CiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3coc2l6ZTEsIHNpemUyLCAmYW1wO3RvdGFsKSB8fAomIzQzOwkgICAgdG90YWwgJmd0OyBmdy0mZ3Q7c2l6ZSAtIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgdG9vIHNtYWxsIGZvciBkZWNsYXJlZCBzaXplXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXRvdGFsKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgd2l0aCBlbXB0eSBwYXlsb2FkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2l6ZTEpIHsKJiM0MzsJCWNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTsKJiM0MzsJCWlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLSZndDtpbWFnZV9jaGVja3N1bV8xKSkgewomIzQzOwkJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7Zmxhc2g6IGltYWdlIDEgQ1JDIG1pc21hdGNoIChnb3QgJTA4eCwgZXhwZWN0ZWQgJTA4eClcbiYjMzQ7LAomIzQzOwkJCQljcmMsIGxlMzJfdG9fY3B1KGhkci0mZ3Q7aW1hZ2VfY2hlY2tzdW1fMSkpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaXplMikgewomIzQzOwkJY3JjID0gfmNyYzMyX2xlKH4wVSwgcGF5bG9hZCAmIzQzOyBzaXplMSwgc2l6ZTIpOwomIzQzOwkJaWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItJmd0O2ltYWdlX2NoZWNrc3VtXzIpKSB7CiYjNDM7CQkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtmbGFzaDogaW1hZ2UgMiBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxuJiMzNDssCiYjNDM7CQkJCWNyYywgbGUzMl90b19jcHUoaGRyLSZndDtpbWFnZV9jaGVja3N1bV8yKSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnBheWxvYWRfc2l6ZSA9IHRvdGFsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkJICAgdTMyIHBheWxvYWRfc2l6ZSwgc3RydWN0IGRldmxpbmsgKmRsKQomIzQzO3sKJiM0MzsJY29uc3QgdTggKnBheWxvYWQgPSBmdy0mZ3Q7ZGF0YSAmIzQzOyBNWEw4NjJYWF9GV19IRFJfU0laRTsKJiM0MzsJdTMyIHdvcmRfaWR4ID0gMCwgZGF0YV93cml0dGVuID0gMCwgaWR4ID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXh0X25vdGlmeSA9IDA7CiYjNDM7CXUxNiB3b3JkLCBmZGF0YTsKJiM0MzsJaW50IHJldCwgaTsKJiM0MzsKJiM0MzsJLyogU3RlcCAxOiByZWJvb3QgdGhlIGZpcm13YXJlIGludG8gTUNVYm9vdCByZXNjdWUgbW9kZSAqLwomIzQzOwlpZiAoIXByaXYtJmd0O3Jlc2N1ZV9tb2RlKSB7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9hcGlfd3JhcChwcml2LCBTWVNfTUlTQ19GV19VUERBVEUsIE5VTEwsIDAsCiYjNDM7CQkJCQlmYWxzZSwgZmFsc2UpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7Zmxhc2g6IEZXX1VQREFURSBjb21tYW5kIGZhaWxlZDogJXBlXG4mIzM0OywKJiM0MzsJCQkJRVJSX1BUUihyZXQpKTsKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEZhaWx1cmVzIGZyb20gaGVyZSBvbiBtdXN0IGdvIHRocm91Z2ggZW5kX21hZ2ljIHNvIE1DVWJvb3QKJiM0MzsJICogcmVib290cyBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yZXZlci4KJiM0MzsJICovCiYjNDM7CiYjNDM7CS8qIFN0ZXAgMjogd2FpdCBmb3IgYm9vdGxvYWRlciByZWFkeSAqLwomIzQzOwlteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsICYjMzQ7V2FpdGluZyBmb3IgYm9vdGxvYWRlciYjMzQ7LCAwLCAwKTsKJiM0MzsJbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSwKJiM0MzsJCQkJCU1YTDg2MlhYX0ZXX1JFQURZX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGJvb3Rsb2FkZXIgbm90IHJlYWR5OiAlcGVcbiYjMzQ7LCBFUlJfUFRSKHJldCkpOwomIzQzOwkJZ290byBlbmRfbWFnaWM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU3RlcCAzOiBzdGFydCBoYW5kc2hha2UgKi8KJiM0MzsJbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsCiYjNDM7CQkJICAgICBNWEw4NjJYWF9TQl9QRElfU1RBUlQpOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFSVCAmIzQzOyAxLAomIzQzOwkJCQkJTVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IHN0YXJ0IGhhbmRzaGFrZSBmYWlsZWQ6ICVwZVxuJiMzNDssIEVSUl9QVFIocmV0KSk7CiYjNDM7CQlnb3RvIGVuZF9tYWdpYzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdGVwIDQ6IHRyYW5zZmVyIGltYWdlIGhlYWRlciAqLwomIzQzOwlteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsICYjMzQ7RXJhc2luZyBmbGFzaCYjMzQ7LCAwLCAwKTsKJiM0MzsJbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsCiYjNDM7CQkJICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNWEw4NjJYWF9GV19IRFJfU0laRSAvIDI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl3b3JkID0gZnctJmd0O2RhdGFbaSAqIDJdIHwKJiM0MzsJCSAgICAgICAoKHUxNilmdy0mZ3Q7ZGF0YVtpICogMiAmIzQzOyAxXSAmbHQ7Jmx0OyA4KTsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCB3b3JkKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtmbGFzaDogaGVhZGVyIHdyaXRlIGZhaWxlZDogJXBlXG4mIzM0OywKJiM0MzsJCQkJRVJSX1BUUihyZXQpKTsKJiM0MzsJCQlnb3RvIGVuZF9tYWdpYzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7CiYjNDM7CiYjNDM7CS8qIHRoZSBieXRlIGNvdW50IGluIFNUQVQgdHJpZ2dlcnMgdGhlIGVyYXNlICovCiYjNDM7CW14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULAomIzQzOwkJCSAgICAgTVhMODYyWFhfRldfSERSX1NJWkUpOwomIzQzOwomIzQzOwkvKiBBQ0sgaXMgYnl0ZSBjb3VudCAmIzQzOyAxICovCiYjNDM7CXJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfRldfSERSX1NJWkUgJiM0MzsgMSwKJiM0MzsJCQkJCU1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O2ZsYXNoOiBoZWFkZXIgQUNLIGZhaWxlZDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN0ZXAgNTogd2FpdCBmb3IgZXJhc2UgdG8gY29tcGxldGUgKi8KJiM0MzsJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLAomIzQzOwkJCQkJTVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN0ZXAgNjogdHJhbnNmZXIgcGF5bG9hZCAqLwomIzQzOwlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTsKJiM0MzsKJiM0MzsJd2hpbGUgKGlkeCAmbHQ7IHBheWxvYWRfc2l6ZSkgewomIzQzOwkJaWYgKGlkeCAmIzQzOyAxICZsdDsgcGF5bG9hZF9zaXplKSB7CiYjNDM7CQkJZmRhdGEgPSBwYXlsb2FkW2lkeF0gfAomIzQzOwkJCQkoKHUxNilwYXlsb2FkW2lkeCAmIzQzOyAxXSAmbHQ7Jmx0OyA4KTsKJiM0MzsJCQlpZHggJiM0Mzs9IDI7CiYjNDM7CQkJZGF0YV93cml0dGVuICYjNDM7PSAyOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlmZGF0YSA9IHBheWxvYWRbaWR4XTsKJiM0MzsJCQlpZHgmIzQzOyYjNDM7OwomIzQzOwkJCWRhdGFfd3JpdHRlbiYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgZmRhdGEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O2ZsYXNoOiBkYXRhIHdyaXRlIGZhaWxlZCBhdCAldS8ldTogJXBlXG4mIzM0OywKJiM0MzsJCQkJaWR4LCBwYXlsb2FkX3NpemUsIEVSUl9QVFIocmV0KSk7CiYjNDM7CQkJZ290byBlbmRfbWFnaWM7CiYjNDM7CQl9CiYjNDM7CQl3b3JkX2lkeCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoaWR4ICZndDs9IHBheWxvYWRfc2l6ZSkgewomIzQzOwkJCXJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogSGFsZi1iYW5rIGJvdW5kYXJ5OiBzd2l0Y2ggdG8gU0IxIGFkZHJlc3MgKi8KJiM0MzsJCWlmICh3b3JkX2lkeCA9PSBNWEw4NjJYWF9GV19CQU5LX0hBTEYpIHsKJiM0MzsJCQlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJCSAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTsKJiM0MzsJCQlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUiwKJiM0MzsJCQkJCSAgICAgTVhMODYyWFhfRldfU0IxX0FERFIpOwomIzQzOwkJCW14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLAomIzQzOwkJCQkJICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7CiYjNDM7CQl9IGVsc2UgaWYgKHdvcmRfaWR4ICZndDs9IE1YTDg2MlhYX0ZXX0JBTktfU0xJQ0UpIHsKJiM0MzsJCQlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTsKJiM0MzsJCQlpZiAocmV0KSB7CiYjNDM7CQkJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkmIzM0O2ZsYXNoOiB3cml0ZSB0aW1lb3V0IGF0ICV1LyV1OiAlcGVcbiYjMzQ7LAomIzQzOwkJCQkJaWR4LCBwYXlsb2FkX3NpemUsIEVSUl9QVFIocmV0KSk7CiYjNDM7CQkJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwkJCX0KJiM0MzsJCQl3b3JkX2lkeCA9IDA7CiYjNDM7CQkJZGF0YV93cml0dGVuID0gMDsKJiM0MzsJCQlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJCSAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpOwomIzQzOwomIzQzOwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG5leHRfbm90aWZ5KSkgewomIzQzOwkJCQlteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsICYjMzQ7Rmxhc2hpbmcmIzM0OywgaWR4LAomIzQzOwkJCQkJCSAgICAgIHBheWxvYWRfc2l6ZSk7CiYjNDM7CQkJCW5leHRfbm90aWZ5ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKDUwMCk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CW14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgJiMzNDtGbGFzaGluZyYjMzQ7LCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7CiYjNDM7CiYjNDM7ZW5kX21hZ2ljOgomIzQzOwkvKiByZWJvb3QgTUNVYm9vdCBldmVuIGFmdGVyIGEgZmFpbGVkIHRyYW5zZmVyICovCiYjNDM7CW14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULAomIzQzOwkJCSAgICAgTVhMODYyWFhfU0JfUERJX0VORCk7CiYjNDM7CW1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiYjNDM7CQkJICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwljb25zdCBjaGFyICptb2RlbDsKJiM0MzsJY2hhciB2ZXJfc3RyWzMyXTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbW9kZWwgPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZHMtJmd0O2Rldik7CiYjNDM7CWlmIChtb2RlbCkgewomIzQzOwkJcmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwKJiM0MzsJCQkJCQkgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCwKJiM0MzsJCQkJCQkgICAgIG1vZGVsKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBjYW5vbmljYWwgbnVsbCB2ZXJzaW9uOiBubyBvcGVyYXRpb25hbCBmaXJtd2FyZSBvbiB0aGUgc3dpdGNoICovCiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkKJiM0MzsJCXJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsICYjMzQ7ZncmIzM0OywgJiMzNDswLjAuMCYjMzQ7KTsKJiM0MzsKJiM0MzsJc25wcmludGYodmVyX3N0ciwgc2l6ZW9mKHZlcl9zdHIpLCAmIzM0OyV1LiV1LiV1JiMzNDssCiYjNDM7CQkgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5tYWpvciwgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5taW5vciwKJiM0MzsJCSBwcml2LSZndDtmd192ZXJzaW9uLnJldmlzaW9uKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgJiMzNDtmdyYjMzQ7LCB2ZXJfc3RyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkJICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsCiYjNDM7CQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3N5c19md19pbWFnZV92ZXJzaW9uIHZlciA9IHt9OwomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZSAqcmVwcm9iZTsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJdTMyIHBheWxvYWRfc2l6ZTsKJiM0MzsJaW50IHJldCwgaTsKJiM0MzsKJiM0MzsJaWYgKHBhcmFtcy0mZ3Q7Y29tcG9uZW50KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O2NvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlKHByaXYsIHBhcmFtcy0mZ3Q7ZncsICZhbXA7cGF5bG9hZF9zaXplKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtmaXJtd2FyZSBpbWFnZSB2YWxpZGF0aW9uIGZhaWxlZCYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogRXZlcnl0aGluZyBuZWVkZWQgdG8gc2NoZWR1bGUgdGhlIHJlcHJvYmUgd2hpY2ggcmVzdG9yZXMKJiM0MzsJICogbm9ybWFsIG9wZXJhdGlvbiBtdXN0IGJlIGluIHBsYWNlIGJlZm9yZSB0aGUgc3dpdGNoIGlzCiYjNDM7CSAqIGRpc3R1cmJlZC4KJiM0MzsJICovCiYjNDM7CXJlcHJvYmUgPSBremFsbG9jX29iaigqcmVwcm9iZSk7CiYjNDM7CWlmICghcmVwcm9iZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkgewomIzQzOwkJa2ZyZWUocmVwcm9iZSk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXByb2JlLSZndDtkZXYgPSBnZXRfZGV2aWNlKGRzLSZndDtkZXYpOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3JlcHJvYmUtJmd0O2R3b3JrLCBteGw4NjJ4eF9yZXByb2JlX3dvcmtfZm4pOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQlkZXZfaW5mbyhkcy0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O2ZsYXNoOiByZWNvdmVyaW5nIHN3aXRjaCBmcm9tIE1DVWJvb3QgcmVzY3VlIG1vZGVcbiYjMzQ7KTsKJiM0MzsJZWxzZQomIzQzOwkJZGV2X2luZm8oZHMtJmd0O2RldiwgJiMzNDtmbGFzaDogcnVubmluZyBmaXJtd2FyZSAldS4ldS4ldVxuJiMzNDssCiYjNDM7CQkJIHByaXYtJmd0O2Z3X3ZlcnNpb24ubWFqb3IsIHByaXYtJmd0O2Z3X3ZlcnNpb24ubWlub3IsCiYjNDM7CQkJIHByaXYtJmd0O2Z3X3ZlcnNpb24ucmV2aXNpb24pOwomIzQzOwomIzQzOwkvKiBDbG9zZSBwb3J0cyB3aGlsZSB0aGUgZmlybXdhcmUgaXMgc3RpbGwgYWxpdmUgc28gdGhlIERTQQomIzQzOwkgKiBjb3JlJiMzOTtzIE1EQi9GREIgdHJhY2tpbmcgaXMgZHJhaW5lZCwgYW5kIGRldGFjaCB1c2VyIHBvcnRzCiYjNDM7CSAqIHNvIHVzZXJzcGFjZSBjYW5ub3QgcmVvcGVuIHRoZW0gZHVyaW5nIHRoZSBmbGFzaC4gVGhlCiYjNDM7CSAqIGNvbmR1aXQgYmVsb25ncyB0byB0aGUgTUFDIGRyaXZlciBhbmQgaXMgb25seSBjbG9zZWQuCiYjNDM7CSAqLwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7CiYjNDM7CQlpZiAoZHAtJmd0O3VzZXIpIHsKJiM0MzsJCQlkZXZfY2xvc2UoZHAtJmd0O3VzZXIpOwomIzQzOwkJCW5ldGlmX2RldmljZV9kZXRhY2goZHAtJmd0O3VzZXIpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnQoZHAsIGRzKQomIzQzOwkJZGV2X2Nsb3NlKGRwLSZndDtjb25kdWl0KTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7YmxvY2tfaG9zdCA9IHRydWU7CiYjNDM7CiYjNDM7CXNldF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsICZhbXA7cHJpdi0mZ3Q7ZmxhZ3MpOwomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtwcml2LSZndDtzdGF0c193b3JrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3ByaXYtJmd0O2NyY19lcnJfd29yayk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkcy0mZ3Q7bnVtX3BvcnRzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtwcml2LSZndDtwb3J0c1tpXS5ob3N0X2Zsb29kX3dvcmspOwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShwcml2LCBwYXJhbXMtJmd0O2Z3LCBwYXlsb2FkX3NpemUsCiYjNDM7CQkJCSAgICAgIGRzLSZndDtkZXZsaW5rKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7ZmlybXdhcmUgdHJhbnNmZXIgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJLyogbGlmdCB0aGUgYmxvY2sgdG8gcXVlcnkgdGhlIG5ldyBmaXJtd2FyZSB2ZXJzaW9uICovCiYjNDM7CQlwcml2LSZndDtibG9ja19ob3N0ID0gZmFsc2U7CiYjNDM7CQlwcml2LSZndDtyZXNjdWVfbW9kZSA9IGZhbHNlOwomIzQzOwkJbWVtc2V0KCZhbXA7dmVyLCAwLCBzaXplb2YodmVyKSk7CiYjNDM7CQlpZiAoIU1YTDg2MlhYX0FQSV9SRUFEX1FVSUVUKHByaXYsIFNZU19NSVNDX0ZXX1ZFUlNJT04sIHZlcikgJmFtcDsmYW1wOwomIzQzOwkJICAgIHZlci5pdl9tYWpvcikKJiM0MzsJCQlkZXZfaW5mbyhkcy0mZ3Q7ZGV2LCAmIzM0O2ZsYXNoOiBuZXcgZmlybXdhcmUgJXUuJXUuJXVcbiYjMzQ7LAomIzQzOwkJCQkgdmVyLml2X21ham9yLCB2ZXIuaXZfbWlub3IsCiYjNDM7CQkJCSBsZTE2X3RvX2NwdSh2ZXIuaXZfcmV2aXNpb24pKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcml2LSZndDtza2lwX3RlYXJkb3duID0gdHJ1ZTsKJiM0MzsKJiM0MzsJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7cmVwcm9iZS0mZ3Q7ZHdvcmssIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNTdjMjAwMGNmZWU1MTkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaApAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX01YTDg2MlhYX0ZXX0gKJiM0MzsjZGVmaW5lIF9fTVhMODYyWFhfRldfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IG14bDg2Mnh4X3ByaXY7CiYjNDM7CiYjNDM7Ym9vbCBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3Qoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpOwomIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiYjNDM7aW50IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkJICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsCiYjNDM7CQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19NWEw4NjJYWF9GV19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuYwppbmRleCA0YWNkMjE2ZjdjYzAwOS4uODA1NjVkZTcxMGQzNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuYwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtY21kLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtteGw4NjJ4eC1ob3N0LmgmIzM0OwogCiAjZGVmaW5lIENUUkxfQlVTWV9NQVNLCQkJQklUKDE1KQpAQCAtMzQwLDYgJiM0MzszNDEsMjEgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpfZGF0YSwKIAogCW11dGV4X2xvY2tfbmVzdGVkKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTsKIAomIzQzOwlpZiAocHJpdi0mZ3Q7c2tpcF90ZWFyZG93bikgewomIzQzOwkJcmV0ID0gMDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtibG9ja19ob3N0ICZhbXA7JmFtcDsgY21kICE9IFNZU19NSVNDX0ZXX1VQREFURSkgewomIzQzOwkJcmV0ID0gLUVCVVNZOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKIAltYXggPSAoc2l6ZSAmIzQzOyAxKSAvIDI7CiAKIAlyZXQgPSBteGw4NjJ4eF9idXN5X3dhaXQocHJpdik7CkBAIC00OTUsNiAmIzQzOzUxMSw0MSBAQCBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOyNkZWZpbmUgTVhMODYyWFhfU01ESU9fQUREUl9SRUcJCTB4MWYKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSwkweGZmZjAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX09GRl9NQVNLCQkweDAwMGYKJiM0MzsKJiM0MztpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzOwomIzQzOwlpbnQgcGh5ID0gcHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRywKJiM0MzsJCQkgICAgICBhZGRyICZhbXA7IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCkKJiM0MzsJCXJldCA9IF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5LCBhZGRyICZhbXA7IE1YTDg2MlhYX1NNRElPX09GRl9NQVNLKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKQomIzQzO3sKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtJmd0O21kaW9kZXYtJmd0O2J1czsKJiM0MzsJaW50IHBoeSA9IHByaXYtJmd0O21kaW9kZXYtJmd0O2FkZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CXJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsCiYjNDM7CQkJICAgICAgYWRkciAmYW1wOyBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spOwomIzQzOwlpZiAocmV0ICZndDs9IDApCiYjNDM7CQlyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIGFkZHIgJmFtcDsgTVhMODYyWFhfU01ESU9fT0ZGX01BU0ssCiYjNDM7CQkJCSAgICAgIHZhbCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiB2b2lkIG14bDg2Mnh4X2hvc3RfaW5pdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdikKIHsKIAlJTklUX1dPUksoJmFtcDtwcml2LSZndDtjcmNfZXJyX3dvcmssIG14bDg2Mnh4X2NyY19lcnJfd29ya19mbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaAppbmRleCA2NmQ2YWUxOThhZmY0NS4uNGUwNTRjNmU0YzBlNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaApAQCAtMTgsNSAmIzQzOzE4LDcgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpkYXRhLCB1MTYgc2l6ZSwKIAlteGw4NjJ4eF9hcGlfd3JhcChkZXYsIGNtZCwgJmFtcDsoZGF0YSksIHNpemVvZigoZGF0YSkpLCB0cnVlLCB0cnVlKQogCiBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpOwomIzQzO2ludCBteGw4NjJ4eF9zbWRpb19yZWFkKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkcik7CiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbCk7CiAKICNlbmRpZiAvKiBfX01YTDg2MlhYX0hPU1RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmMKaW5kZXggYjY4OTY1MmFhOWI5MjAuLmE1YjY5NDBiNTUyZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmMKQEAgLTQwNiw2ICYjNDM7NDA2LDggQEAgbXhsODYyeHhfcGh5bGlua19tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAogCXN3aXRjaCAocG9ydCkgewogCWNhc2UgOSAuLi4gMTY6CiYjNDM7CQlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiAJCWlmICghTVhMODYyWFhfRldfVkVSX01JTihwcml2LCAxLCAwLCA4NCkpIHsKIAkJCWRldl93YXJuX29uY2UoZHAtJmd0O2RzLSZndDtkZXYsCiAJCQkJICAgICAgJiMzNDtTZXJEZXMgUENTIHVuc3VwcG9ydGVkIG9uIG9sZCBmaXJtd2FyZS5cbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMKaW5kZXggNDVkMjM3YjNhNDBmMTAuLjI2NWE4M2Y0YjM3MWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYwpAQCAtMjEsNiAmIzQzOzIxLDcgQEAKICNpbmNsdWRlICYjMzQ7bXhsODYyeHguaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWFwaS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bXhsODYyeHgtY21kLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtZncuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWhvc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LXBoeWxpbmsuaCYjMzQ7CiAKQEAgLTYyOCw5ICYjNDM7NjI5LDIyIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwlwcml2LSZndDtyZXNjdWVfbW9kZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTsKJiM0MzsJaWYgKCFwcml2LSZndDtyZXNjdWVfbW9kZSkgewomIzQzOwkJcmV0ID0gbXhsODYyeHhfd2FpdF9yZWFkeShkcyk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJLyogdGhlIHJlc2V0IG1heSBvbmx5IG5vdyBoYXZlIHRyaWdnZXJlZCByZXNjdWUgbW9kZSAqLwomIzQzOwkJCXByaXYtJmd0O3Jlc2N1ZV9tb2RlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpOwomIzQzOwkJCWlmICghcHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlKSB7CiYjNDM7CQlkZXZfd2Fybihkcy0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O3N3aXRjaCBzdHVjayBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiAKIAltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7c2VyZGVzX2xvY2spOwogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHByaXYtJmd0O3NlcmRlc19wb3J0cyk7IGkmIzQzOyYjNDM7KQpAQCAtNzE1LDExICYjNDM7NzI5LDIxIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zdGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBib29sIGVuYWJsZSkKIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlyZXR1cm4gbXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIG14bDg2Mnh4X3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQogewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJaWYgKG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKSkKIAkJZGV2X2Vycihkcy0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHBvcnQgJWRcbiYjMzQ7LCBwb3J0KTsKIH0KQEAgLTEzMzcsNiAmIzQzOzEzNjEsMTIgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpCiAJYm9vbCBpc19jcHVfcG9ydCA9IGRzYV9wb3J0X2lzX2NwdShkcCk7CiAJaW50IHJldDsKIAomIzQzOwkvKiBEU0EgcmVpbml0cyBmYWlsZWQgdXNlciBwb3J0cyBhcyB1bnVzZWQ7IHNoYXJlZCBwb3J0cyBtdXN0CiYjNDM7CSAqIHN1Y2NlZWQgZm9yIHRoZSB0cmVlIHRvIHJlZ2lzdGVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlKQomIzQzOwkJcmV0dXJuIGRzYV9wb3J0X2lzX3VzZXIoZHApID8gLUVOT0RFViA6IDA7CiYjNDM7CiAJcmV0ID0gbXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgZmFsc2UpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xNjI4LDYgJiM0MzsxNjU4LDkgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBCUl9TVEFURV9ESVNBQkxFRDoKIAkJcGFyYW0ucG9ydF9zdGF0ZSA9IGNwdV90b19sZTMyKE1YTDg2MlhYX1NUUF9QT1JUX1NUQVRFX0RJU0FCTEUpOwpAQCAtMjA4Niw2ICYjNDM7MjExOSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXhsODYyeHhfc3dpdGNoX29wcyA9IHsKIAkuZ2V0X3BhdXNlX3N0YXRzID0gbXhsODYyeHhfZ2V0X3BhdXNlX3N0YXRzLAogCS5nZXRfcm1vbl9zdGF0cyA9IG14bDg2Mnh4X2dldF9ybW9uX3N0YXRzLAogCS5nZXRfc3RhdHM2NCA9IG14bDg2Mnh4X2dldF9zdGF0czY0LAomIzQzOwkuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsCiYjNDM7CS5kZXZsaW5rX2ZsYXNoX3VwZGF0ZSA9IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlLAogfTsKIAogc3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCkBAIC0yMTkxLDggJiM0MzsyMjI2LDggQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBteGw4NjJ4eF9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAmIzM0O21heGxpbmVhcixteGw4NjI4MiYjMzQ7IH0sCi0JeyAuY29tcGF0aWJsZSA9ICYjMzQ7bWF4bGluZWFyLG14bDg2MjUyJiMzNDsgfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7bWF4bGluZWFyLG14bDg2MjgyJiMzNDssIC5kYXRhID0gJiMzNDtNYXhMaW5lYXIgTXhMODYyODImIzM0OyB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDttYXhsaW5lYXIsbXhsODYyNTImIzM0OywgLmRhdGEgPSAmIzM0O01heExpbmVhciBNeEw4NjI1MiYjMzQ7IH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXhsODYyeHhfb2ZfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaAppbmRleCA0MzJhNWYzZjJlMDhlNi4uNWQyMTI5NjU2MWUzYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oCkBAIC0zMTksNiAmIzQzOzMxOSwxMiBAQCBzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiB7CiAgKiBAZXZsYW5faW5ncmVzc19zaXplOiBwZXItcG9ydCBpbmdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZQogICogQGV2bGFuX2VncmVzc19zaXplOiAgcGVyLXBvcnQgZWdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZQogICogQHZmX2Jsb2NrX3NpemU6ICAgICAgcGVyLXBvcnQgVkxBTiBGaWx0ZXIgYmxvY2sgc2l6ZQomIzQzOyAqIEBibG9ja19ob3N0OiAgICAgICAgIHJlamVjdCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgKGV4Y2VwdCBGV19VUERBVEUpCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGEgZmlybXdhcmUgZmxhc2gKJiM0MzsgKiBAc2tpcF90ZWFyZG93bjogICAgICBkaXNjYXJkIGZpcm13YXJlIEFQSSBjb21tYW5kcyBkdXJpbmcgdGhlIHRlYXJkb3duCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIGJ5IHRoZSBwb3N0LWZsYXNoIHJlcHJvYmUKJiM0MzsgKiBAcmVzY3VlX21vZGU6ICAgICAgICBzd2l0Y2ggaXMgc3R1Y2sgaW4gTUNVYm9vdDsgZmlybXdhcmUgQVBJIGNvbW1hbmRzCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgZmFpbCBmYXN0LCBvbmx5IGNsYXVzZS0yMiBTTURJTyB3b3JrcwogICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVycwogICogICAgICAgICAgICAgICAgICAgICAgYW5kIGFjY3VtdWxhdGVzIHRoZW0gaW50byA2NC1iaXQgcGVyLXBvcnQgc3RhdHMKICAqLwpAQCAtMzM3LDYgJiM0MzszNDMsOSBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7CiAJdTE2IGV2bGFuX2luZ3Jlc3Nfc2l6ZTsKIAl1MTYgZXZsYW5fZWdyZXNzX3NpemU7CiAJdTE2IHZmX2Jsb2NrX3NpemU7CiYjNDM7CWJvb2wgYmxvY2tfaG9zdDsKJiM0MzsJYm9vbCBza2lwX3RlYXJkb3duOwomIzQzOwlib29sIHJlc2N1ZV9tb2RlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfd29yazsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmgKaW5kZXggOGMxNmVmMjNjYzEwMmEuLmM5ZTE5MzQ4ZGU2MTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc2EuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9kc2EuaApAQCAtMTE3MCw2ICYjNDM7MTE3MCw5IEBAIHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB7CiAJaW50CSgqZGV2bGlua19pbmZvX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAogCQkJCSAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAogCQkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzOwlpbnQJKCpkZXZsaW5rX2ZsYXNoX3VwZGF0ZSkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkJc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAlpbnQJKCpkZXZsaW5rX3NiX3Bvb2xfZ2V0KShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKTsKZGlmZiAtLWdpdCBhL25ldC9kc2EvZGV2bGluay5jIGIvbmV0L2RzYS9kZXZsaW5rLmMKaW5kZXggZWQzNDJmMzQ1NjkyYmIuLjI1MzExYTg3Y2JjNTZkIDEwMDY0NAotLS0gYS9uZXQvZHNhL2RldmxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL2RldmxpbmsuYwpAQCAtMjAsNiAmIzQzOzIwLDE4IEBAIHN0YXRpYyBpbnQgZHNhX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCwKJiM0MzsJCQkJICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9kZXZsaW5rX3RvX2RzKGRsKTsKJiM0MzsKJiM0MzsJaWYgKCFkcy0mZ3Q7b3BzLSZndDtkZXZsaW5rX2ZsYXNoX3VwZGF0ZSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIGRzLSZndDtvcHMtJmd0O2RldmxpbmtfZmxhc2hfdXBkYXRlKGRzLCBwYXJhbXMsIGV4dGFjayk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsCiAJCQkJICAgdW5zaWduZWQgaW50IHNiX2luZGV4LCB1MTYgcG9vbF9pbmRleCwKIAkJCQkgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbykKQEAgLTE2OSw2ICYjNDM7MTgxLDcgQEAgZHNhX2Rldmxpbmtfc2Jfb2NjX3RjX3BvcnRfYmluZF9nZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqZGxwLAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX29wcyA9IHsKIAkuaW5mb19nZXQJCQk9IGRzYV9kZXZsaW5rX2luZm9fZ2V0LAomIzQzOwkuZmxhc2hfdXBkYXRlCQkJPSBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUsCiAJLnNiX3Bvb2xfZ2V0CQkJPSBkc2FfZGV2bGlua19zYl9wb29sX2dldCwKIAkuc2JfcG9vbF9zZXQJCQk9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LAogCS5zYl9wb3J0X3Bvb2xfZ2V0CQk9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9nZXQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzU0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBNWEw4NjJ4eCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoIGhlcmUsIGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIHNvbWUgaW1wb3J0YW50IGZ1bmN0aW9uYWxpdHk6IGZpcm13YXJlIGZsYXNoaW5nIGFuZCBEZXZsaW5rIHN1cHBvcnQgZm9yIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggc3dpdGNoIGRyaXZlci4gU3BlY2lmaWNhbGx5LCB0aGF0JiMzOTtzIGluIGBkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY2AuIEFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFsc28gYWRkaW5nIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgc3VwcG9ydCBpbnRvIHRoZSBEU0EgY29yZSBpdHNlbGYsIGluIGBuZXQvZHNhL2RldmxpbmsuY2AuIFRoYXQmIzM5O3MgYSBuaWNlIGludGVncmF0aW9uLCBrZWVwaW5nIGV2ZXJ5dGhpbmcgdGlkeS4KClRoZSBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gYmUgY29uZmlndXJlZCB3aXRoIGBDT05GSUdfTkVUX0RTQV9NWEw4NjJgLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIGNvZGUsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjb25maWcgb3B0aW9uIGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kIGF2YWlsYWJsZSBpbiBvdXIgYnVpbGQuIEkgZG9uJiMzOTt0IHdhbnQgdG8gd2FzdGUgdGltZSBjaGFzaW5nIHBoYW50b20gY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gcHVsbCBvdXQgYGdyZXBwZXJgIGFuZCBkb3VibGUtY2hlY2ssIG1ha2Ugc3VyZSBgTkVUX0RTQV9NWEw4NjJgIGlzIGxlZ2l0LiBObyBzdXJwcmlzZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfRFNBX01YTDg2MiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWc6Mjpjb25maWcgTkVUX0RTQV9NWEw4NjJcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNYXhMaW5lYXIgTXhMODYyeHhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTkVUX0RTQV9NWEw4NjIpICYjNDM7PSBteGw4NjJ4eF9kc2Eub1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlLTMtbXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwNAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQ6IEZpcm13YXJlIEZsYXNoaW5nIGZvciBNYXhMaW5lYXIgTXhMODYyeHggRFNBIFN3aXRjaCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGZpcm13YXJlIGZsYXNoaW5nIGNhcGFiaWxpdHkgdmlhIGRldmxpbmsgZm9yIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCBkcml2ZXIuIEl0IGFsc28gYWRkcyBhIG5ldyBjYWxsYmFjaywgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCwgdG8gdGhlIERTQSBjb3JlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtDYW4gd2UgdHJpZ2dlciB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVT8mIzM0OwoKVGhlIERTQSBjb3JlIGNoYW5nZXMgaW4gYG5ldC9kc2EvZGV2bGluay5jYCBhcmUgcG90ZW50aWFsbHkgcmVhY2hhYmxlLCBidXQgY3VycmVudGx5LCBvbmx5IHRoZSBgbXhsODYyeHhgIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBhY3R1YWwgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBmdW5jdGlvbmFsaXR5LiBUaGlzIGRyaXZlciBpcywgYXMgZmFyIGFzIEkgY2FuIHNlZSwgYSBoYXJkd2FyZSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBhIE1heExpbmVhciBzd2l0Y2ggY2hpcC4gTXkgbWFpbiBxdWVzdGlvbiBoZXJlOiBDYW4gd2UgZW11bGF0ZSB0aGlzIHN3aXRjaCwgb3IgYXQgbGVhc3QgdHJpZ2dlciB0aGUgY29kZSBwYXRoIHdpdGggYSBkdW1teSBkZXZpY2U/IFRoZSBkcml2ZXIgdXNlcyBNRElPLCB3aGljaCwgdGhlb3JldGljYWxseSwgY291bGQgYmUgaW5zdGFudGlhdGVkIHRocm91Z2ggZGV2aWNlIHRyZWUgb3Igc29mdHdhcmUuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgaXQgcmVsaWVzIG9uIE1ESU8gZm9yIGhhcmR3YXJlIGNvbW11bmljYXRpb24uIENhbiBzeXprYWxsZXIgc29tZWhvdyBpbmplY3QgTURJTyByZWFkcy93cml0ZXMgb3IgY3JlYXRlIGEgbW9jayBNRElPIGRldmljZT8gSSBrbm93IHN5emthbGxlciBoYXMgYHN5el9nZW5ldGxpbmtgIGFuZCBzb21ldGltZXMgaXQgY2FuIHRyaWdnZXIgcHJvYmUgdmlhIHZpcnR1YWwgYnVzZXMsIGJ1dCB1c3VhbGx5IE1ESU8gZGV2aWNlcyBhcmUgcHJvYmVkIHZpYSBkZXZpY2UgdHJlZS4KClRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlYCBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgZGV2bGluayBuZXRsaW5rIGludGVyZmFjZS4gU28sIGlmIHRoZSBkZXZpY2UgaXMgcHJvYmVkLCBkZXZsaW5rIGNvbW1hbmRzIGNhbiByZWFjaCBpdC4gVGhpcyBpcyBwcm9taXNpbmchIFRoZSBmaXJtd2FyZSBmaWxlIHBhcnNpbmcgKGBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZWApIGhhcHBlbnMgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBmaWxlIGl0c2VsZiBpcyBzdXBwbGllZCBieSB1c2Vyc3BhY2UgdGhyb3VnaCBkZXZsaW5rIGZsYXNoIHVwZGF0ZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlOiBgbXhsODYyeHhfZmxhc2hfdmFsaWRhdGVgIHRha2VzIGEgYGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndgLiBUaGlzIGBmd2AgY29tZXMgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2UuIFRoZSB2YWxpZGF0aW9uIGxvZ2ljIGl0c2VsZiBsb29rcyB2dWxuZXJhYmxlOiB0aGVyZSBhcmUgY2hlY2tzIG9uIHRoZSBmaXJtd2FyZSBzaXplIGFuZCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgd2hlbiBjYWxjdWxhdGluZyBmaWxlIG9mZnNldHMuIFRoaXMgaXMgKmRlZmluaXRlbHkqIHBhcnNpbmcgdW50cnVzdGVkIGRhdGEsIGFuZCB0aGVyZWZvcmUgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlYCwgYG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlYCwgYG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlYCwgYW5kIGFsc28gdGhlIGNvcmUgRFNBIGZ1bmN0aW9uLCBgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlYC4KClRoZSBuZXh0IHF1ZXN0aW9uOiBJcyBgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVgIGl0c2VsZiByZWFjaGFibGU/IEl0IGRlcGVuZHMgb24gdGhlIGBteGw4NjJ4eGAgZHJpdmVyIGJlaW5nIHByb2JlZC4gU3l6a2FsbGVyIGNhbiBwcm9iYWJseSBwcm9iZSBzb21lIGRyaXZlcnMsIGJ1dCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIG9uIE1ESU8gYXJlIHVzdWFsbHkgaGFyZCB0byByZWFjaCB1bmxlc3MgdGhlcmUmIzM5O3MgYSBtb2NrIG9yIHNvbWUgZGV2aWNlIHRyZWUgb3ZlcmxheS4gQnV0LCBzaW5jZSB0aGUgRFNBIGNvcmUgY2hhbmdlIGluIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgIGlzIGdlbmVyaWMsIGl0IG1pZ2h0IGJlIHJlYWNoYWJsZSBpZiBhbnkgRFNBIHN3aXRjaCBpcyBwcmVzZW50LgoKTm93LCBjaGVja2luZyB0aGUgRFNBIHN3aXRjaCBkcml2ZXJzIHRoYXQgc3l6a2FsbGVyIGNhbiBwcm9iZS4uLiBUaGVyZSYjMzk7cyBgZHNhX2xvb3BgLCB3aGljaCBpcyBhIG1vY2sgRFNBIHN3aXRjaC4gSG93ZXZlciwgYGRzYV9sb29wYCBkb2VzbiYjMzk7dCBpbXBsZW1lbnQgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCwgc28gd2l0aG91dCB0aGUgYG14bDg2Mnh4YCBkcml2ZXIsIGl0IHdvdWxkIHJldHVybiBgLUVPUE5PVFNVUFBgLiBUaGF0IHdvdWxkIG1lYW4gd2Ugd291bGRuJiMzOTt0IGJlIGFibGUgdG8gZWFzaWx5IHJlYWNoIGBteGw4NjJ4eGAsIGJ1dCB3ZSBzaG91bGQgc3RpbGwgbWFyayBpdCBhcyB3b3J0aCBmdXp6aW5nLCBhcyBpdCBhZGRzIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZXMsIGZpcm13YXJlIHBhcnNpbmcsIGFuZCBhIG5ldyBkZXZsaW5rIG9wLgoKVGhlIGluc3RydWN0aW9ucyBzYXkgdGhhdCBpZiBjb2RlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgd2UgbmVlZCB0byB2ZXJpZnkgaXQuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBNRElPIGRldmljZSByZWFjaGFibGU/IFRoZSBEU0EgbG9vcCBkcml2ZXIgZXhpc3RzLCBidXQgSSYjMzk7bSB1bnN1cmUgaWYgaXQmIzM5O3MgdGhlIHNhbWUgYXMgdGhlIE1ESU8gZGV2aWNlLi4uIG5vLgoKQnV0LCBnaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGUgZmFjdCB0aGF0IHdlIGNhbiB0cmlnZ2VyIHRoZSBgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlYCBjb3JlIGZ1bmN0aW9uLCBhbmQgdGhhdCB0aGlzIGhhbmRsZXMgdXNlci1zdXBwbGllZCBkYXRhLCB0aGUgbmV0bGluayBjYWxscyBuZWVkIHRvIGJlIGZ1enplZCBldmVuIGlmIHRoZSBgbXhsODYyeHhgIGRyaXZlciBjYW4mIzM5O3QgYmUgcHJvYmVkLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayByZWFjaGFiaWxpdHkgb2YgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAuIFllcywgaWYgd2UgaGF2ZSAqYW55KiBEU0Egc3dpdGNoIChsaWtlIGBkc2FfbG9vcGApLCB0aGUgY29yZSBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHZpYSBkZXZsaW5rIG5ldGxpbmsuIEl0IHdpbGwgY2FsbCB0aGUgaW5kaXZpZHVhbCBzd2l0Y2ggb3AuCgpIZXJlJiMzOTtzIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9sczoKCiogICBgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlYAoqICAgYG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlYAoqICAgYG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlYAoqICAgYG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlYAoKQW5kIHRoZSBuZWNlc3NhcnkgY29uZmlnczoKCiogICBgTkVUX0RTQV9NWEw4NjJgCiogICBgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RTQV9NWEw4NjImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWc6Mjpjb25maWcgTkVUX0RTQV9NWEw4NjJcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNYXhMaW5lYXIgTXhMODYyeHhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc2OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZWxhdGlvbnNoaXBzIGhlcmUuIFRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGNyYWNrIG9wZW4gdGhhdCBLY29uZmlnIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGlzICpyZWFsbHkqIHJlbHlpbmcgb24uJiMzNDsgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYnJlYWRjcnVtYnMsIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSAqaWZzKiBhbmQgKmRlcGVuZHMgb24qIHN0YXRlbWVudHMgdGhhdCBnb3Zlcm4gaG93IHRoZXNlIGNvbXBvbmVudHMgcGxheSB0b2dldGhlci4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBvciBtb2R1bGVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHZhcmlvdXMgY29uZGl0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIGFueXRoaW5nIHRoYXQganVtcHMgb3V0IOKAkyBjb21wbGV4IG5lc3RlZCBkZXBlbmRlbmNpZXMsIHVudXN1YWwgdXNlIG9mIGBzZWxlY3RgIG9yIGBkZWZhdWx0YCwgb3IgYW55IGNpcmN1bGFyIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiaXRlIG1lIGxhdGVyLiBNeSBnb2FsIGhlcmUgaXMgYSBxdWljaywgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cgYmVmb3JlIEkgZ2V0IGJvZ2dlZCBkb3duIGluIHRoZSBtaW51dGlhZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5FVF9EU0FfTVhMODYyXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXhMaW5lYXIgTXhMODYyeHhcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTkVUX0RTQVxuICAgNTpcdFx0c2VsZWN0IENSQzE2XG4gICA2Olx0XHRzZWxlY3QgTkVUX0RTQV9UQUdfTVhMXzg2MlhYXG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaCBmYW1pbHkuXG4gICA5Olx0XHQgIFRoZXNlIHN3aXRjaGVzIGhhdmUgdHdvIDEwR0UgU2VyRGVzIGludGVyZmFjZXMsIG9uZSB0eXBpY2FsbHlcbiAgMTA6XHRcdCAgdXNlZCBhcyBDUFUgcG9ydC5cbiAgMTE6XHRcdCAgIC0gTXhMODYyODIgaGFzIGVpZ2h0IDIuNSBHaWdhYml0IFBIWXNcbiAgMTI6XHRcdCAgIC0gTXhMODYyNTIgaGFzIGZpdmUgMi41IEdpZ2FiaXQgUEhZc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjMxCgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlci4gVGhlIGRlcGVuZGVuY2llcyBwb2ludCBkaXJlY3RseSB0byBgTkVUX0RTQWAsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBrZXkgY29uZmlnIGlzIGBORVRfRFNBX01YTDg2MmAuICBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIGRvdWJsZS1jaGVja2luZywganVzdCB0byBiZSB0aG9yb3VnaCwgdGhhdCBubyBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIHRoYXQmIzM5O3MgdGhlIG9ubHkgb25lLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIHBhcnRpY3VsYXJseSBgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlYCwgaXMgcmVhY2hhYmxlLiBZZXAsIGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGdvb2QgdG8gZ28gdGhyb3VnaCBkZXZsaW5rIG5ldGxpbmssIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuCgpCYXNlZCBvbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gZ29pbmcgdG8gc2V0IHNvbWUgZnV6emluZyBwYXJhbWV0ZXJzLiBUaGlzIGxvb2tzIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcsIHNvIEkmIzM5O2xsIG1hcmsgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgLiBJJiMzOTtsbCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAsIGBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZWAsIGBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZWAsIGFuZCBhbHNvIHRoZSBjb3JlIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLgoKRmluYWxseSwgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSBmb3IgdGVzdGluZywgSSYjMzk7bGwgZXhwbGljaXRseSBlbmFibGUgYE5FVF9EU0FfTVhMODYyYC4KClRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoaXMgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgZm9yIHRoZSBNeEw4NjJ4eCBkcml2ZXIsIHVzaW5nIGRldmxpbmsuIEl0IGludHJvZHVjZXMgdGhlIG5lY2Vzc2FyeSBjb2RlIHRvIGhhbmRsZSBmaXJtd2FyZSBmaWxlcyBjb21pbmcgZnJvbSB1c2Vyc3BhY2UuIEZ1cnRoZXJtb3JlLCBpdCBhZGRzIGEgbmV3IGRldmxpbmsgY2FsbGJhY2sgdG8gdGhlIERTQSBjb3JlLCB3aGljaCBzZWVtcyBpbXBvcnRhbnQgdG8gYmUgdGVzdGluZy4gIFRoaXMgaW50cm9kdWNlcyBhIG5ldyBhdHRhY2sgc3VyZmFjZSBzbyBpdCBuZWVkcyB0byBiZSB0ZXN0ZWQgdmlnb3JvdXNseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9EU0FfTVhMODYyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUmIzM0OywKICAgICYjMzQ7bXhsODYyeHhfZmxhc2hfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bXhsODYyeHhfZmxhc2hfZmlybXdhcmUmIzM0OywKICAgICYjMzQ7ZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB2aWEgZGV2bGluayB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCBpbmNsdWRpbmcgcGFyc2luZyBvZiB0aGUgZmlybXdhcmUgZmlsZSB3aGljaCBjb21lcyBmcm9tIHVzZXJzcGFjZS4gSXQgYWxzbyBhZGRzIGEgbmV3IGRldmxpbmsgY2FsbGJhY2sgdG8gdGhlIERTQSBjb3JlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfRFNBX01YTDg2MiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O214bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlJiMzNDssCiAgICAmIzM0O214bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlJiMzNDssCiAgICAmIzM0O214bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlJiMzNDssCiAgICAmIzM0O2RzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgdmlhIGRldmxpbmsgdG8gdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlciwgaW5jbHVkaW5nIHBhcnNpbmcgb2YgdGhlIGZpcm13YXJlIGZpbGUgd2hpY2ggY29tZXMgZnJvbSB1c2Vyc3BhY2UuIEl0IGFsc28gYWRkcyBhIG5ldyBkZXZsaW5rIGNhbGxiYWNrIHRvIHRoZSBEU0EgY29yZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjMzOjU5Ljc4MDAyMzY2OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MjE5MTcxODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9EU0FfTVhMODYyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVcIixcbiAgICBcIm14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlXCIsXG4gICAgXCJteGw4NjJ4eF9mbGFzaF9maXJtd2FyZVwiLFxuICAgIFwiZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmaXJtd2FyZSBmbGFzaGluZyBzdXBwb3J0IHZpYSBkZXZsaW5rIHRvIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCBkcml2ZXIsIGluY2x1ZGluZyBwYXJzaW5nIG9mIHRoZSBmaXJtd2FyZSBmaWxlIHdoaWNoIGNvbWVzIGZyb20gdXNlcnNwYWNlLiBJdCBhbHNvIGFkZHMgYSBuZXcgZGV2bGluayBjYWxsYmFjayB0byB0aGUgRFNBIGNvcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjMzOjU5Ljc4MDAzMTA0OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcxMDQyMzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTZhZGYyYmI3ZjNjNjNmMTk0OWY2OWUyNjM2OGYyMTBjNWU3MTIzN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAwMzozMzo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcXG5pbmRleCBhN2JlMGU2NjY5ZGZhNS4uYmNjYWMwZDBmNzAzZjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXFxuQEAgLTEsMyArMSwzIEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSArPSBteGw4NjJ4eF9kc2Eub1xcbi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm9cXG4rbXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXFxuaW5kZXggYzg3YTk1NWMxM2M0OGUuLmUyYWEyOTM0ZTllMTYyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxcbkBAIC03MCw2ICs3MCw3IEBAXFxuICNkZWZpbmUgSU5UX0dQSFlfUkVBRFxcdFxcdFxcdChHUFlfR1BZMlhYX01BR0lDICsgMHgxKVxcbiAjZGVmaW5lIElOVF9HUEhZX1dSSVRFXFx0XFx0XFx0KEdQWV9HUFkyWFhfTUFHSUMgKyAweDIpXFxuIFxcbisjZGVmaW5lIFNZU19NSVNDX0ZXX1VQREFURVxcdFxcdChTWVNfTUlTQ19NQUdJQyArIDB4MSlcXG4gI2RlZmluZSBTWVNfTUlTQ19GV19WRVJTSU9OXFx0XFx0KFNZU19NSVNDX01BR0lDICsgMHgyKVxcbiBcXG4gI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19DT05GSUdcXHQoTVhMODYyWFhfWFBDU19NQUdJQyArIDB4MSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjZhMWRlMjQ3YzJmMDVkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXFxuQEAgLTAsMCArMSw0ODIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4XFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNSBEYW5pZWwgR29sbGUgXFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1xcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjMzIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vdmVyZmxvdy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJteGw4NjJ4eC1hcGkuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWNtZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibXhsODYyeHgtZncuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWhvc3QuaFxcXCJcXG4rXFxuKy8qIFNCIFBESSByZWdpc3RlcnMgKGNsYXVzZS0yMiBTTURJTyBhZGRyZXNzIHNwYWNlKSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMXFx0XFx0MHhlMTAwXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0FERFJcXHRcXHQweGUxMDFcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfREFUQVxcdFxcdDB4ZTEwMlxcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFUXFx0XFx0MHhlMTAzXFxuK1xcbisvKiBTQiBQREkgQ1RSTCBtb2RlcyAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVFxcdDB4MDBcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUlxcdDB4MDJcXG4rXFxuKy8qIFNCIFBESSBoYW5kc2hha2UgbWFnaWMgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkVBRFlcXHRcXHQweGM1NWNcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfU1RBUlRcXHRcXHQweGY0OGZcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfRU5EXFx0XFx0MHgzY2MzXFxuK1xcbisvKiBGaXJtd2FyZSB0cmFuc2ZlciBnZW9tZXRyeSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0hEUl9TSVpFXFx0XFx0MjBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX0hBTEZcXHRcXHQxNjM4NFxcdC8qIHdvcmRzIHBlciBoYWxmLWJhbmsgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX1NMSUNFXFx0XFx0MzI3NjBcXHQvKiB3b3JkcyBwZXIgZnVsbCBzbGljZSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1NCMV9BRERSXFx0XFx0MHg3ODAwXFx0LyogU0IxIHdvcmQgYWRkcmVzcyAqL1xcbitcXG4rLyogVGltZW91dHMgKGdlbmVyb3VzIHVwcGVyIGJvdW5kcykgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TXFx0MzAwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NU1xcdDUwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TXFx0MzAwMDAwXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NU1xcdDEyMDAwMFxcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NU1xcdDUwMDBcXG4rXFxuK3N0YXRpYyB2b2lkIG14bDg2Mnh4X3NiX3BkaV9yZXNldChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUixcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUxNiBleHBlY3RlZCxcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKCh1MTYpcmV0ID09IGV4cGVjdGVkKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0dXNsZWVwX3JhbmdlKDEwMDAwLCAxMTAwMCk7XFxuK1xcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHUzMiBkYXRhX3dyaXR0ZW4pXFxuK3tcXG4rXFx0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgZGF0YV93cml0dGVuKTtcXG4rXFxuK1xcdHJldHVybiBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxcbitcXHRcXHRcXHRcXHQgIHUzMiBkb25lLCB1MzIgdG90YWwpXFxuK3tcXG4rXFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgc3RhdHVzLCBOVUxMLCBkb25lLCB0b3RhbCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QgLSBjaGVjayB3aGV0aGVyIHRoZSBzd2l0Y2ggc2l0cyBpbiBNQ1Vib290XFxuKyAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBkYXRhXFxuKyAqXFxuKyAqIE1DVWJvb3Qgc2lnbmFscyByZWFkaW5lc3MgZm9yIGEgZmlybXdhcmUgZG93bmxvYWQgd2l0aCB0aGUgU0IgUERJXFxuKyAqIHJlYWR5IG1hZ2ljOyBvbmx5IHRoZSBjbGF1c2UtMjIgU01ESU8gaW50ZXJmYWNlIHdvcmtzIGluIHRoaXMgc3RhdGUuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBNQ1Vib290IGlzIHdhaXRpbmcgZm9yIGEgZmlybXdhcmUgZG93bmxvYWQuXFxuKyAqL1xcbitib29sIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0ID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWTtcXG4rfVxcbitcXG4rLyogZGV2aWNlX3JlcHJvYmUoKSAtXFx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2IHdoaWxlIHRoZSB3b3JrIHJ1bnMsIHNvXFxuKyAqIHRoZSB3b3JrIHN0cnVjdCBjYW5ub3QgbGl2ZSBpbiBteGw4NjJ4eF9wcml2LlxcbisgKi9cXG4rc3RydWN0IG14bDg2Mnh4X3JlcHJvYmUge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcms7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBteGw4NjJ4eF9yZXByb2JlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlICpyZXByb2JlID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlLCBkd29yay53b3JrKTtcXG4rXFxuK1xcdGlmIChkZXZpY2VfcmVwcm9iZShyZXByb2JlLVxcdTAwM2VkZXYpKVxcbitcXHRcXHRkZXZfZXJyKHJlcHJvYmUtXFx1MDAzZWRldiwgXFxcInJlcHJvYmUgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0cHV0X2RldmljZShyZXByb2JlLVxcdTAwM2VkZXYpO1xcbitcXHRrZnJlZShyZXByb2JlKTtcXG4rXFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuK31cXG4rXFxuKy8qIE1DVWJvb3QgZmlybXdhcmUgaW1hZ2UgaGVhZGVyICovXFxuK3N0cnVjdCBteGw4NjJ4eF9md19oZHIge1xcbitcXHRfX2xlMzIgaW1hZ2VfdHlwZTtcXG4rXFx0X19sZTMyIGltYWdlX3NpemVfMTtcXG4rXFx0X19sZTMyIGltYWdlX2NoZWNrc3VtXzE7XFxuK1xcdF9fbGUzMiBpbWFnZV9zaXplXzI7XFxuK1xcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xcbit9IF9fcGFja2VkO1xcbitcXG4rc3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyICpwYXlsb2FkX3NpemUpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqaGRyO1xcbitcXHR1MzIgc2l6ZTEsIHNpemUyLCB0b3RhbDtcXG4rXFx0Y29uc3QgdTggKnBheWxvYWQ7XFxuK1xcdHUzMiBjcmM7XFxuK1xcbitcXHRpZiAoZnctXFx1MDAzZXNpemUgXFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVxcdTAwM2VkYXRhO1xcbitcXHRwYXlsb2FkID0gZnctXFx1MDAzZWRhdGEgKyBNWEw4NjJYWF9GV19IRFJfU0laRTtcXG4rXFx0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX3NpemVfMSk7XFxuK1xcdHNpemUyID0gbGUzMl90b19jcHUoaGRyLVxcdTAwM2VpbWFnZV9zaXplXzIpO1xcbitcXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhzaXplMSwgc2l6ZTIsIFxcdTAwMjZ0b3RhbCkgfHxcXG4rXFx0ICAgIHRvdGFsIFxcdTAwM2UgZnctXFx1MDAzZXNpemUgLSBNWEw4NjJYWF9GV19IRFJfU0laRSkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmlybXdhcmUgZmlsZSB0b28gc21hbGwgZm9yIGRlY2xhcmVkIHNpemVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0b3RhbCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNpemUxKSB7XFxuK1xcdFxcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcXG4rXFx0XFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX2NoZWNrc3VtXzEpKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcImZsYXNoOiBpbWFnZSAxIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMSkpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoc2l6ZTIpIHtcXG4rXFx0XFx0Y3JjID0gfmNyYzMyX2xlKH4wVSwgcGF5bG9hZCArIHNpemUxLCBzaXplMik7XFxuK1xcdFxcdGlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLVxcdTAwM2VpbWFnZV9jaGVja3N1bV8yKSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJmbGFzaDogaW1hZ2UgMiBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0Y3JjLCBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX2NoZWNrc3VtXzIpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0KnBheWxvYWRfc2l6ZSA9IHRvdGFsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfZmxhc2hfZmlybXdhcmUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBwYXlsb2FkX3NpemUsIHN0cnVjdCBkZXZsaW5rICpkbClcXG4re1xcbitcXHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVxcdTAwM2VkYXRhICsgTVhMODYyWFhfRldfSERSX1NJWkU7XFxuK1xcdHUzMiB3b3JkX2lkeCA9IDAsIGRhdGFfd3JpdHRlbiA9IDAsIGlkeCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV4dF9ub3RpZnkgPSAwO1xcbitcXHR1MTYgd29yZCwgZmRhdGE7XFxuK1xcdGludCByZXQsIGk7XFxuK1xcbitcXHQvKiBTdGVwIDE6IHJlYm9vdCB0aGUgZmlybXdhcmUgaW50byBNQ1Vib290IHJlc2N1ZSBtb2RlICovXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpIHtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfYXBpX3dyYXAocHJpdiwgU1lTX01JU0NfRldfVVBEQVRFLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRmYWxzZSwgZmFsc2UpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcImZsYXNoOiBGV19VUERBVEUgY29tbWFuZCBmYWlsZWQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0RVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBGYWlsdXJlcyBmcm9tIGhlcmUgb24gbXVzdCBnbyB0aHJvdWdoIGVuZF9tYWdpYyBzbyBNQ1Vib290XFxuK1xcdCAqIHJlYm9vdHMgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuXFxuK1xcdCAqL1xcbitcXG4rXFx0LyogU3RlcCAyOiB3YWl0IGZvciBib290bG9hZGVyIHJlYWR5ICovXFxuK1xcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXFxcIldhaXRpbmcgZm9yIGJvb3Rsb2FkZXJcXFwiLCAwLCAwKTtcXG4rXFx0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSxcXG4rXFx0XFx0XFx0XFx0XFx0TVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmxhc2g6IGJvb3Rsb2FkZXIgbm90IHJlYWR5OiAlcGVcXFxcblxcXCIsIEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdGdvdG8gZW5kX21hZ2ljO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTdGVwIDM6IHN0YXJ0IGhhbmRzaGFrZSAqL1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfU1RBUlQpO1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFSVCArIDEsXFxuK1xcdFxcdFxcdFxcdFxcdE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogc3RhcnQgaGFuZHNoYWtlIGZhaWxlZDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0fVxcbitcXG4rXFx0LyogU3RlcCA0OiB0cmFuc2ZlciBpbWFnZSBoZWFkZXIgKi9cXG4rXFx0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcXFwiRXJhc2luZyBmbGFzaFxcXCIsIDAsIDApO1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSAvIDI7IGkrKykge1xcbitcXHRcXHR3b3JkID0gZnctXFx1MDAzZWRhdGFbaSAqIDJdIHxcXG4rXFx0XFx0ICAgICAgICgodTE2KWZ3LVxcdTAwM2VkYXRhW2kgKiAyICsgMV0gXFx1MDAzY1xcdTAwM2MgOCk7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCB3b3JkKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiZmxhc2g6IGhlYWRlciB3cml0ZSBmYWlsZWQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0RVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0XFx0Z290byBlbmRfbWFnaWM7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XFxuK1xcbitcXHQvKiB0aGUgYnl0ZSBjb3VudCBpbiBTVEFUIHRyaWdnZXJzIHRoZSBlcmFzZSAqL1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9GV19IRFJfU0laRSk7XFxuK1xcbitcXHQvKiBBQ0sgaXMgYnl0ZSBjb3VudCArIDEgKi9cXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9GV19IRFJfU0laRSArIDEsXFxuK1xcdFxcdFxcdFxcdFxcdE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogaGVhZGVyIEFDSyBmYWlsZWQ6ICVwZVxcXFxuXFxcIiwgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0Z290byBlbmRfbWFnaWM7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0ZXAgNTogd2FpdCBmb3IgZXJhc2UgdG8gY29tcGxldGUgKi9cXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLFxcbitcXHRcXHRcXHRcXHRcXHRNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0fVxcbitcXG4rXFx0LyogU3RlcCA2OiB0cmFuc2ZlciBwYXlsb2FkICovXFxuK1xcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcXG4rXFxuK1xcdHdoaWxlIChpZHggXFx1MDAzYyBwYXlsb2FkX3NpemUpIHtcXG4rXFx0XFx0aWYgKGlkeCArIDEgXFx1MDAzYyBwYXlsb2FkX3NpemUpIHtcXG4rXFx0XFx0XFx0ZmRhdGEgPSBwYXlsb2FkW2lkeF0gfFxcbitcXHRcXHRcXHRcXHQoKHUxNilwYXlsb2FkW2lkeCArIDFdIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRcXHRcXHRpZHggKz0gMjtcXG4rXFx0XFx0XFx0ZGF0YV93cml0dGVuICs9IDI7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGZkYXRhID0gcGF5bG9hZFtpZHhdO1xcbitcXHRcXHRcXHRpZHgrKztcXG4rXFx0XFx0XFx0ZGF0YV93cml0dGVuKys7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCBmZGF0YSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcImZsYXNoOiBkYXRhIHdyaXRlIGZhaWxlZCBhdCAldS8ldTogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0XFx0Z290byBlbmRfbWFnaWM7XFxuK1xcdFxcdH1cXG4rXFx0XFx0d29yZF9pZHgrKztcXG4rXFxuK1xcdFxcdGlmIChpZHggXFx1MDAzZT0gcGF5bG9hZF9zaXplKSB7XFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogSGFsZi1iYW5rIGJvdW5kYXJ5OiBzd2l0Y2ggdG8gU0IxIGFkZHJlc3MgKi9cXG4rXFx0XFx0aWYgKHdvcmRfaWR4ID09IE1YTDg2MlhYX0ZXX0JBTktfSEFMRikge1xcbitcXHRcXHRcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRcXHRcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBNWEw4NjJYWF9GV19TQjFfQUREUik7XFxuK1xcdFxcdFxcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcXG4rXFx0XFx0fSBlbHNlIGlmICh3b3JkX2lkeCBcXHUwMDNlPSBNWEw4NjJYWF9GV19CQU5LX1NMSUNFKSB7XFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pO1xcbitcXHRcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcImZsYXNoOiB3cml0ZSB0aW1lb3V0IGF0ICV1LyV1OiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdGlkeCwgcGF5bG9hZF9zaXplLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHR3b3JkX2lkeCA9IDA7XFxuK1xcdFxcdFxcdGRhdGFfd3JpdHRlbiA9IDA7XFxuK1xcdFxcdFxcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcXG4rXFxuK1xcdFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG5leHRfbm90aWZ5KSkge1xcbitcXHRcXHRcXHRcXHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFxcXCJGbGFzaGluZ1xcXCIsIGlkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGF5bG9hZF9zaXplKTtcXG4rXFx0XFx0XFx0XFx0bmV4dF9ub3RpZnkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0fVxcbitcXG4rXFx0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcXFwiRmxhc2hpbmdcXFwiLCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7XFxuK1xcbitlbmRfbWFnaWM6XFxuK1xcdC8qIHJlYm9vdCBNQ1Vib290IGV2ZW4gYWZ0ZXIgYSBmYWlsZWQgdHJhbnNmZXIgKi9cXG4rXFx0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXFxuK1xcdFxcdFxcdCAgICAgTVhMODYyWFhfU0JfUERJX0VORCk7XFxuK1xcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0Y29uc3QgY2hhciAqbW9kZWw7XFxuK1xcdGNoYXIgdmVyX3N0clszMl07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtb2RlbCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkcy1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKG1vZGVsKSB7XFxuK1xcdFxcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgREVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19BU0lDX0lELFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG1vZGVsKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0LyogY2Fub25pY2FsIG51bGwgdmVyc2lvbjogbm8gb3BlcmF0aW9uYWwgZmlybXdhcmUgb24gdGhlIHN3aXRjaCAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdHJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFxcXCJmd1xcXCIsIFxcXCIwLjAuMFxcXCIpO1xcbitcXG4rXFx0c25wcmludGYodmVyX3N0ciwgc2l6ZW9mKHZlcl9zdHIpLCBcXFwiJXUuJXUuJXVcXFwiLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5taW5vcixcXG4rXFx0XFx0IHByaXYtXFx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xcbitcXG4rXFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgXFxcImZ3XFxcIiwgdmVyX3N0cik7XFxuK31cXG4rXFxuK2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24gdmVyID0ge307XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlICpyZXByb2JlO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbitcXHR1MzIgcGF5bG9hZF9zaXplO1xcbitcXHRpbnQgcmV0LCBpO1xcbitcXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlY29tcG9uZW50KSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJjb21wb25lbnQgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlKHByaXYsIHBhcmFtcy1cXHUwMDNlZncsIFxcdTAwMjZwYXlsb2FkX3NpemUpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJmaXJtd2FyZSBpbWFnZSB2YWxpZGF0aW9uIGZhaWxlZFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBFdmVyeXRoaW5nIG5lZWRlZCB0byBzY2hlZHVsZSB0aGUgcmVwcm9iZSB3aGljaCByZXN0b3Jlc1xcbitcXHQgKiBub3JtYWwgb3BlcmF0aW9uIG11c3QgYmUgaW4gcGxhY2UgYmVmb3JlIHRoZSBzd2l0Y2ggaXNcXG4rXFx0ICogZGlzdHVyYmVkLlxcbitcXHQgKi9cXG4rXFx0cmVwcm9iZSA9IGt6YWxsb2Nfb2JqKCpyZXByb2JlKTtcXG4rXFx0aWYgKCFyZXByb2JlKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7XFxuK1xcdFxcdGtmcmVlKHJlcHJvYmUpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmVwcm9iZS1cXHUwMDNlZGV2ID0gZ2V0X2RldmljZShkcy1cXHUwMDNlZGV2KTtcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJlcHJvYmUtXFx1MDAzZWR3b3JrLCBteGw4NjJ4eF9yZXByb2JlX3dvcmtfZm4pO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRkZXZfaW5mbyhkcy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcImZsYXNoOiByZWNvdmVyaW5nIHN3aXRjaCBmcm9tIE1DVWJvb3QgcmVzY3VlIG1vZGVcXFxcblxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGRldl9pbmZvKGRzLVxcdTAwM2VkZXYsIFxcXCJmbGFzaDogcnVubmluZyBmaXJtd2FyZSAldS4ldS4ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IHByaXYtXFx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXFx1MDAzZWZ3X3ZlcnNpb24ubWlub3IsXFxuK1xcdFxcdFxcdCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uKTtcXG4rXFxuK1xcdC8qIENsb3NlIHBvcnRzIHdoaWxlIHRoZSBmaXJtd2FyZSBpcyBzdGlsbCBhbGl2ZSBzbyB0aGUgRFNBXFxuK1xcdCAqIGNvcmUncyBNREIvRkRCIHRyYWNraW5nIGlzIGRyYWluZWQsIGFuZCBkZXRhY2ggdXNlciBwb3J0c1xcbitcXHQgKiBzbyB1c2Vyc3BhY2UgY2Fubm90IHJlb3BlbiB0aGVtIGR1cmluZyB0aGUgZmxhc2guIFRoZVxcbitcXHQgKiBjb25kdWl0IGJlbG9uZ3MgdG8gdGhlIE1BQyBkcml2ZXIgYW5kIGlzIG9ubHkgY2xvc2VkLlxcbitcXHQgKi9cXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KGRwLCBkcykge1xcbitcXHRcXHRpZiAoZHAtXFx1MDAzZXVzZXIpIHtcXG4rXFx0XFx0XFx0ZGV2X2Nsb3NlKGRwLVxcdTAwM2V1c2VyKTtcXG4rXFx0XFx0XFx0bmV0aWZfZGV2aWNlX2RldGFjaChkcC1cXHUwMDNldXNlcik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGRwLCBkcylcXG4rXFx0XFx0ZGV2X2Nsb3NlKGRwLVxcdTAwM2Vjb25kdWl0KTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWJsb2NrX2hvc3QgPSB0cnVlO1xcbitcXG4rXFx0c2V0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKTtcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0c193b3JrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlY3JjX2Vycl93b3JrKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG4rXFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbaV0uaG9zdF9mbG9vZF93b3JrKTtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHByaXYsIHBhcmFtcy1cXHUwMDNlZncsIHBheWxvYWRfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZHMtXFx1MDAzZWRldmxpbmspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiZmlybXdhcmUgdHJhbnNmZXIgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRpZiAoIXJldCkge1xcbitcXHRcXHQvKiBsaWZ0IHRoZSBibG9jayB0byBxdWVyeSB0aGUgbmV3IGZpcm13YXJlIHZlcnNpb24gKi9cXG4rXFx0XFx0cHJpdi1cXHUwMDNlYmxvY2tfaG9zdCA9IGZhbHNlO1xcbitcXHRcXHRwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSA9IGZhbHNlO1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNnZlciwgMCwgc2l6ZW9mKHZlcikpO1xcbitcXHRcXHRpZiAoIU1YTDg2MlhYX0FQSV9SRUFEX1FVSUVUKHByaXYsIFNZU19NSVNDX0ZXX1ZFUlNJT04sIHZlcikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHZlci5pdl9tYWpvcilcXG4rXFx0XFx0XFx0ZGV2X2luZm8oZHMtXFx1MDAzZWRldiwgXFxcImZsYXNoOiBuZXcgZmlybXdhcmUgJXUuJXUuJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCB2ZXIuaXZfbWFqb3IsIHZlci5pdl9taW5vcixcXG4rXFx0XFx0XFx0XFx0IGxlMTZfdG9fY3B1KHZlci5pdl9yZXZpc2lvbikpO1xcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vza2lwX3RlYXJkb3duID0gdHJ1ZTtcXG4rXFxuK1xcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cmVwcm9iZS1cXHUwMDNlZHdvcmssIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41N2MyMDAwY2ZlZTUxOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxcbkBAIC0wLDAgKzEsMTggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rXFxuKyNpZm5kZWYgX19NWEw4NjJYWF9GV19IXFxuKyNkZWZpbmUgX19NWEw4NjJYWF9GV19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbitcXG4rc3RydWN0IG14bDg2Mnh4X3ByaXY7XFxuK1xcbitib29sIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XFxuK2ludCBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4raW50IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4rXFxuKyNlbmRpZiAvKiBfX01YTDg2MlhYX0ZXX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmNcXG5pbmRleCA0YWNkMjE2ZjdjYzAwOS4uODA1NjVkZTcxMGQzNzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmNcXG5AQCAtMTUsNiArMTUsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZHNhLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJteGw4NjJ4eC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibXhsODYyeHgtY21kLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJteGw4NjJ4eC1ob3N0LmhcXFwiXFxuIFxcbiAjZGVmaW5lIENUUkxfQlVTWV9NQVNLXFx0XFx0XFx0QklUKDE1KVxcbkBAIC0zNDAsNiArMzQxLDIxIEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqX2RhdGEsXFxuIFxcbiBcXHRtdXRleF9sb2NrX25lc3RlZChcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcXG4gXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vza2lwX3RlYXJkb3duKSB7XFxuK1xcdFxcdHJldCA9IDA7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VibG9ja19ob3N0IFxcdTAwMjZcXHUwMDI2IGNtZCAhPSBTWVNfTUlTQ19GV19VUERBVEUpIHtcXG4rXFx0XFx0cmV0ID0gLUVCVVNZO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4gXFx0bWF4ID0gKHNpemUgKyAxKSAvIDI7XFxuIFxcbiBcXHRyZXQgPSBteGw4NjJ4eF9idXN5X3dhaXQocHJpdik7XFxuQEAgLTQ5NSw2ICs1MTEsNDEgQEAgaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHXFx0XFx0MHgxZlxcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTS1xcdDB4ZmZmMFxcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX09GRl9NQVNLXFx0XFx0MHgwMDBmXFxuK1xcbitpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpXFxuK3tcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cztcXG4rXFx0aW50IHBoeSA9IHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbG9jayk7XFxuK1xcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsXFxuK1xcdFxcdFxcdCAgICAgIGFkZHIgXFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuK1xcdFxcdHJldCA9IF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5LCBhZGRyIFxcdTAwMjYgTVhMODYyWFhfU01ESU9fT0ZGX01BU0spO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbClcXG4re1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgcGh5ID0gcHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgYWRkciBcXHUwMDI2IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBhZGRyIFxcdTAwMjYgTVhMODYyWFhfU01ESU9fT0ZGX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZhbCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiB2b2lkIG14bDg2Mnh4X2hvc3RfaW5pdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNnByaXYtXFx1MDAzZWNyY19lcnJfd29yaywgbXhsODYyeHhfY3JjX2Vycl93b3JrX2ZuKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmhcXG5pbmRleCA2NmQ2YWUxOThhZmY0NS4uNGUwNTRjNmU0YzBlNDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmhcXG5AQCAtMTgsNSArMTgsNyBAQCBpbnQgbXhsODYyeHhfYXBpX3dyYXAoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUxNiBjbWQsIHZvaWQgKmRhdGEsIHUxNiBzaXplLFxcbiBcXHRteGw4NjJ4eF9hcGlfd3JhcChkZXYsIGNtZCwgXFx1MDAyNihkYXRhKSwgc2l6ZW9mKChkYXRhKSksIHRydWUsIHRydWUpXFxuIFxcbiBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpO1xcbitpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpO1xcbitpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKTtcXG4gXFxuICNlbmRpZiAvKiBfX01YTDg2MlhYX0hPU1RfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xcbmluZGV4IGI2ODk2NTJhYTliOTIwLi5hNWI2OTQwYjU1MmU5ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xcbkBAIC00MDYsNiArNDA2LDggQEAgbXhsODYyeHhfcGh5bGlua19tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFxuIFxcdHN3aXRjaCAocG9ydCkge1xcbiBcXHRjYXNlIDkgLi4uIDE2OlxcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHRpZiAoIU1YTDg2MlhYX0ZXX1ZFUl9NSU4ocHJpdiwgMSwgMCwgODQpKSB7XFxuIFxcdFxcdFxcdGRldl93YXJuX29uY2UoZHAtXFx1MDAzZWRzLVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIFxcXCJTZXJEZXMgUENTIHVuc3VwcG9ydGVkIG9uIG9sZCBmaXJtd2FyZS5cXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXFxuaW5kZXggNDVkMjM3YjNhNDBmMTAuLjI2NWE4M2Y0YjM3MWI1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcXG5AQCAtMjEsNiArMjEsNyBAQFxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHguaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWFwaS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHgtY21kLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJteGw4NjJ4eC1mdy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHgtaG9zdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHgtcGh5bGluay5oXFxcIlxcbiBcXG5AQCAtNjI4LDkgKzYyOSwyMiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSkge1xcbitcXHRcXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHQvKiB0aGUgcmVzZXQgbWF5IG9ubHkgbm93IGhhdmUgdHJpZ2dlcmVkIHJlc2N1ZSBtb2RlICovXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpO1xcbitcXHRcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSkge1xcbitcXHRcXHRkZXZfd2Fybihkcy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcInN3aXRjaCBzdHVjayBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlc2VyZGVzX2xvY2spO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2VzZXJkZXNfcG9ydHMpOyBpKyspXFxuQEAgLTcxNSwxMSArNzI5LDIxIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zdGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBib29sIGVuYWJsZSlcXG4gc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0cmV0dXJuIG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIHRydWUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBteGw4NjJ4eF9wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4ge1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAobXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgZmFsc2UpKVxcbiBcXHRcXHRkZXZfZXJyKGRzLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gZGlzYWJsZSBwb3J0ICVkXFxcXG5cXFwiLCBwb3J0KTtcXG4gfVxcbkBAIC0xMzM3LDYgKzEzNjEsMTIgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuIFxcdGJvb2wgaXNfY3B1X3BvcnQgPSBkc2FfcG9ydF9pc19jcHUoZHApO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0LyogRFNBIHJlaW5pdHMgZmFpbGVkIHVzZXIgcG9ydHMgYXMgdW51c2VkOyBzaGFyZWQgcG9ydHMgbXVzdFxcbitcXHQgKiBzdWNjZWVkIGZvciB0aGUgdHJlZSB0byByZWdpc3Rlci5cXG4rXFx0ICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSlcXG4rXFx0XFx0cmV0dXJuIGRzYV9wb3J0X2lzX3VzZXIoZHApID8gLUVOT0RFViA6IDA7XFxuK1xcbiBcXHRyZXQgPSBteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTE2MjgsNiArMTY1OCw5IEBAIHN0YXRpYyB2b2lkIG14bDg2Mnh4X3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuIFxcdGNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6XFxuIFxcdFxcdHBhcmFtLnBvcnRfc3RhdGUgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9TVFBfUE9SVF9TVEFURV9ESVNBQkxFKTtcXG5AQCAtMjA4Niw2ICsyMTE5LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBteGw4NjJ4eF9zd2l0Y2hfb3BzID0ge1xcbiBcXHQuZ2V0X3BhdXNlX3N0YXRzID0gbXhsODYyeHhfZ2V0X3BhdXNlX3N0YXRzLFxcbiBcXHQuZ2V0X3Jtb25fc3RhdHMgPSBteGw4NjJ4eF9nZXRfcm1vbl9zdGF0cyxcXG4gXFx0LmdldF9zdGF0czY0ID0gbXhsODYyeHhfZ2V0X3N0YXRzNjQsXFxuK1xcdC5kZXZsaW5rX2luZm9fZ2V0ID0gbXhsODYyeHhfZGV2bGlua19pbmZvX2dldCxcXG4rXFx0LmRldmxpbmtfZmxhc2hfdXBkYXRlID0gbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG14bDg2Mnh4X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5AQCAtMjE5MSw4ICsyMjI2LDggQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBteGw4NjJ4eF9vZl9tYXRjaFtdID0ge1xcbi1cXHR7IC5jb21wYXRpYmxlID0gXFxcIm1heGxpbmVhcixteGw4NjI4MlxcXCIgfSxcXG4tXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtYXhsaW5lYXIsbXhsODYyNTJcXFwiIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwibWF4bGluZWFyLG14bDg2MjgyXFxcIiwgLmRhdGEgPSBcXFwiTWF4TGluZWFyIE14TDg2MjgyXFxcIiB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1heGxpbmVhcixteGw4NjI1MlxcXCIsIC5kYXRhID0gXFxcIk1heExpbmVhciBNeEw4NjI1MlxcXCIgfSxcXG4gXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuIH07XFxuIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG14bDg2Mnh4X29mX21hdGNoKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxcbmluZGV4IDQzMmE1ZjNmMmUwOGU2Li41ZDIxMjk2NTYxZTNhYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXFxuQEAgLTMxOSw2ICszMTksMTIgQEAgc3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24ge1xcbiAgKiBAZXZsYW5faW5ncmVzc19zaXplOiBwZXItcG9ydCBpbmdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxcbiAgKiBAZXZsYW5fZWdyZXNzX3NpemU6ICBwZXItcG9ydCBlZ3Jlc3MgRXh0ZW5kZWQgVkxBTiBibG9jayBzaXplXFxuICAqIEB2Zl9ibG9ja19zaXplOiAgICAgIHBlci1wb3J0IFZMQU4gRmlsdGVyIGJsb2NrIHNpemVcXG4rICogQGJsb2NrX2hvc3Q6ICAgICAgICAgcmVqZWN0IGZpcm13YXJlIEFQSSBjb21tYW5kcyAoZXhjZXB0IEZXX1VQREFURSlcXG4rICogICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGEgZmlybXdhcmUgZmxhc2hcXG4rICogQHNraXBfdGVhcmRvd246ICAgICAgZGlzY2FyZCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgZHVyaW5nIHRoZSB0ZWFyZG93blxcbisgKiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQgYnkgdGhlIHBvc3QtZmxhc2ggcmVwcm9iZVxcbisgKiBAcmVzY3VlX21vZGU6ICAgICAgICBzd2l0Y2ggaXMgc3R1Y2sgaW4gTUNVYm9vdDsgZmlybXdhcmUgQVBJIGNvbW1hbmRzXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIGZhaWwgZmFzdCwgb25seSBjbGF1c2UtMjIgU01ESU8gd29ya3NcXG4gICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVyc1xcbiAgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgYWNjdW11bGF0ZXMgdGhlbSBpbnRvIDY0LWJpdCBwZXItcG9ydCBzdGF0c1xcbiAgKi9cXG5AQCAtMzM3LDYgKzM0Myw5IEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2IHtcXG4gXFx0dTE2IGV2bGFuX2luZ3Jlc3Nfc2l6ZTtcXG4gXFx0dTE2IGV2bGFuX2VncmVzc19zaXplO1xcbiBcXHR1MTYgdmZfYmxvY2tfc2l6ZTtcXG4rXFx0Ym9vbCBibG9ja19ob3N0O1xcbitcXHRib29sIHNraXBfdGVhcmRvd247XFxuK1xcdGJvb2wgcmVzY3VlX21vZGU7XFxuIFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfd29yaztcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmhcXG5pbmRleCA4YzE2ZWYyM2NjMTAyYS4uYzllMTkzNDhkZTYxOTMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcXG4rKysgYi9pbmNsdWRlL25ldC9kc2EuaFxcbkBAIC0xMTcwLDYgKzExNzAsOSBAQCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMge1xcbiBcXHRpbnRcXHQoKmRldmxpbmtfaW5mb19nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbitcXHRpbnRcXHQoKmRldmxpbmtfZmxhc2hfdXBkYXRlKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gXFx0aW50XFx0KCpkZXZsaW5rX3NiX3Bvb2xfZ2V0KShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pO1xcbmRpZmYgLS1naXQgYS9uZXQvZHNhL2RldmxpbmsuYyBiL25ldC9kc2EvZGV2bGluay5jXFxuaW5kZXggZWQzNDJmMzQ1NjkyYmIuLjI1MzExYTg3Y2JjNTZkIDEwMDY0NFxcbi0tLSBhL25ldC9kc2EvZGV2bGluay5jXFxuKysrIGIvbmV0L2RzYS9kZXZsaW5rLmNcXG5AQCAtMjAsNiArMjAsMTggQEAgc3RhdGljIGludCBkc2FfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXFxuIFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9kZXZsaW5rX3RvX2RzKGRsKTtcXG4rXFxuK1xcdGlmICghZHMtXFx1MDAzZW9wcy1cXHUwMDNlZGV2bGlua19mbGFzaF91cGRhdGUpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZShkcywgcGFyYW1zLCBleHRhY2spO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcXG4gXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHNiX2luZGV4LCB1MTYgcG9vbF9pbmRleCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pXFxuQEAgLTE2OSw2ICsxODEsNyBAQCBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkbHAsXFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX29wcyA9IHtcXG4gXFx0LmluZm9fZ2V0XFx0XFx0XFx0PSBkc2FfZGV2bGlua19pbmZvX2dldCxcXG4rXFx0LmZsYXNoX3VwZGF0ZVxcdFxcdFxcdD0gZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlLFxcbiBcXHQuc2JfcG9vbF9nZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0LFxcbiBcXHQuc2JfcG9vbF9zZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LFxcbiBcXHQuc2JfcG9ydF9wb29sX2dldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX2dldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MzQ6MDAuNTUzMDA3NTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDQ2MTc0Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9EU0FfTVhMODYyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVcIixcbiAgICBcIm14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlXCIsXG4gICAgXCJteGw4NjJ4eF9mbGFzaF9maXJtd2FyZVwiLFxuICAgIFwiZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmaXJtd2FyZSBmbGFzaGluZyBzdXBwb3J0IHZpYSBkZXZsaW5rIHRvIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCBkcml2ZXIsIGluY2x1ZGluZyBwYXJzaW5nIG9mIHRoZSBmaXJtd2FyZSBmaWxlIHdoaWNoIGNvbWVzIGZyb20gdXNlcnNwYWNlLiBJdCBhbHNvIGFkZHMgYSBuZXcgZGV2bGluayBjYWxsYmFjayB0byB0aGUgRFNBIGNvcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTZhZGYyYmI3ZjNjNjNmMTk0OWY2OWUyNjM2OGYyMTBjNWU3MTIzN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDAzOjMzOjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXG5pbmRleCBhN2JlMGU2NjY5ZGZhNS4uYmNjYWMwZDBmNzAzZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZVxuQEAgLTEsMyArMSwzIEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIG9iai0kKENPTkZJR19ORVRfRFNBX01YTDg2MikgKz0gbXhsODYyeHhfZHNhLm9cbi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm9cbitteGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm8gbXhsODYyeHgtZncub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxuaW5kZXggYzg3YTk1NWMxM2M0OGUuLmUyYWEyOTM0ZTllMTYyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmhcbkBAIC03MCw2ICs3MCw3IEBAXG4gI2RlZmluZSBJTlRfR1BIWV9SRUFEXHRcdFx0KEdQWV9HUFkyWFhfTUFHSUMgKyAweDEpXG4gI2RlZmluZSBJTlRfR1BIWV9XUklURVx0XHRcdChHUFlfR1BZMlhYX01BR0lDICsgMHgyKVxuIFxuKyNkZWZpbmUgU1lTX01JU0NfRldfVVBEQVRFXHRcdChTWVNfTUlTQ19NQUdJQyArIDB4MSlcbiAjZGVmaW5lIFNZU19NSVNDX0ZXX1ZFUlNJT05cdFx0KFNZU19NSVNDX01BR0lDICsgMHgyKVxuIFxuICNkZWZpbmUgTVhMODYyWFhfWFBDU19QQ1NfQ09ORklHXHQoTVhMODYyWFhfWFBDU19NQUdJQyArIDB4MSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjZhMWRlMjQ3YzJmMDVkXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY1xuQEAgLTAsMCArMSw0ODIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4XG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjUgRGFuaWVsIEdvbGxlIFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1x1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb3ZlcmZsb3cuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwibXhsODYyeHguaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1hcGkuaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1jbWQuaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1mdy5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWhvc3QuaFwiXG4rXG4rLyogU0IgUERJIHJlZ2lzdGVycyAoY2xhdXNlLTIyIFNNRElPIGFkZHJlc3Mgc3BhY2UpICovXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTFx0XHQweGUxMDBcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9BRERSXHRcdDB4ZTEwMVxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0RBVEFcdFx0MHhlMTAyXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfU1RBVFx0XHQweGUxMDNcbitcbisvKiBTQiBQREkgQ1RSTCBtb2RlcyAqL1xuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUXHQweDAwXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUlx0MHgwMlxuK1xuKy8qIFNCIFBESSBoYW5kc2hha2UgbWFnaWMgKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRUFEWVx0XHQweGM1NWNcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFSVFx0XHQweGY0OGZcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9FTkRcdFx0MHgzY2MzXG4rXG4rLyogRmlybXdhcmUgdHJhbnNmZXIgZ2VvbWV0cnkgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0hEUl9TSVpFXHRcdDIwXG4rI2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX0hBTEZcdFx0MTYzODRcdC8qIHdvcmRzIHBlciBoYWxmLWJhbmsgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0JBTktfU0xJQ0VcdFx0MzI3NjBcdC8qIHdvcmRzIHBlciBmdWxsIHNsaWNlICovXG4rI2RlZmluZSBNWEw4NjJYWF9GV19TQjFfQUREUlx0XHQweDc4MDBcdC8qIFNCMSB3b3JkIGFkZHJlc3MgKi9cbitcbisvKiBUaW1lb3V0cyAoZ2VuZXJvdXMgdXBwZXIgYm91bmRzKSAqL1xuKyNkZWZpbmUgTVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NU1x0MzAwMDBcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TXHQ1MDAwXG4rI2RlZmluZSBNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TXHQzMDAwMDBcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1dSSVRFX1RJTUVPVVRfTVNcdDEyMDAwMFxuKyNkZWZpbmUgTVhMODYyWFhfRldfUkVCT09UX0RFTEFZX01TXHQ1MDAwXG4rXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuK3tcbitcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuK1x0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbitcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuK1x0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbitcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLFxuK1x0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbit9XG4rXG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgZXhwZWN0ZWQsXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKTtcbitcdGludCByZXQ7XG4rXG4rXHRkbyB7XG4rXHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmICgodTE2KXJldCA9PSBleHBlY3RlZClcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0dXNsZWVwX3JhbmdlKDEwMDAwLCAxMTAwMCk7XG4rXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2Uoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXG4rXHRcdFx0XHQgICAgICAgdTMyIGRhdGFfd3JpdHRlbilcbit7XG4rXHRteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4rXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgZGF0YV93cml0dGVuKTtcbitcbitcdHJldHVybiBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXG4rXHRcdFx0XHRcdCBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxuK1x0XHRcdFx0ICB1MzIgZG9uZSwgdTMyIHRvdGFsKVxuK3tcbitcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIHN0YXR1cywgTlVMTCwgZG9uZSwgdG90YWwpO1xuK31cbitcbisvKipcbisgKiBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QgLSBjaGVjayB3aGV0aGVyIHRoZSBzd2l0Y2ggc2l0cyBpbiBNQ1Vib290XG4rICogQHByaXY6IGRyaXZlciBwcml2YXRlIGRhdGFcbisgKlxuKyAqIE1DVWJvb3Qgc2lnbmFscyByZWFkaW5lc3MgZm9yIGEgZmlybXdhcmUgZG93bmxvYWQgd2l0aCB0aGUgU0IgUERJXG4rICogcmVhZHkgbWFnaWM7IG9ubHkgdGhlIGNsYXVzZS0yMiBTTURJTyBpbnRlcmZhY2Ugd29ya3MgaW4gdGhpcyBzdGF0ZS5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBNQ1Vib290IGlzIHdhaXRpbmcgZm9yIGEgZmlybXdhcmUgZG93bmxvYWQuXG4rICovXG4rYm9vbCBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3Qoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xuK1xuK1x0cmV0dXJuIHJldCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFk7XG4rfVxuK1xuKy8qIGRldmljZV9yZXByb2JlKCkgLVx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2IHdoaWxlIHRoZSB3b3JrIHJ1bnMsIHNvXG4rICogdGhlIHdvcmsgc3RydWN0IGNhbm5vdCBsaXZlIGluIG14bDg2Mnh4X3ByaXYuXG4rICovXG4rc3RydWN0IG14bDg2Mnh4X3JlcHJvYmUge1xuK1x0c3RydWN0IGRldmljZSAqZGV2O1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBkd29yaztcbit9O1xuK1xuK3N0YXRpYyB2b2lkIG14bDg2Mnh4X3JlcHJvYmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmUgKnJlcHJvYmUgPVxuK1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG14bDg2Mnh4X3JlcHJvYmUsIGR3b3JrLndvcmspO1xuK1xuK1x0aWYgKGRldmljZV9yZXByb2JlKHJlcHJvYmUtXHUwMDNlZGV2KSlcbitcdFx0ZGV2X2VycihyZXByb2JlLVx1MDAzZWRldiwgXCJyZXByb2JlIGZhaWxlZFxcblwiKTtcbitcdHB1dF9kZXZpY2UocmVwcm9iZS1cdTAwM2VkZXYpO1xuK1x0a2ZyZWUocmVwcm9iZSk7XG4rXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbit9XG4rXG4rLyogTUNVYm9vdCBmaXJtd2FyZSBpbWFnZSBoZWFkZXIgKi9cbitzdHJ1Y3QgbXhsODYyeHhfZndfaGRyIHtcbitcdF9fbGUzMiBpbWFnZV90eXBlO1xuK1x0X19sZTMyIGltYWdlX3NpemVfMTtcbitcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8xO1xuK1x0X19sZTMyIGltYWdlX3NpemVfMjtcbitcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xuK30gX19wYWNrZWQ7XG4rXG4rc3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4rXHRcdFx0XHQgICB1MzIgKnBheWxvYWRfc2l6ZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgbXhsODYyeHhfZndfaGRyICpoZHI7XG4rXHR1MzIgc2l6ZTEsIHNpemUyLCB0b3RhbDtcbitcdGNvbnN0IHU4ICpwYXlsb2FkO1xuK1x0dTMyIGNyYztcbitcbitcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4rXHRwYXlsb2FkID0gZnctXHUwMDNlZGF0YSArIE1YTDg2MlhYX0ZXX0hEUl9TSVpFO1xuK1x0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2Vfc2l6ZV8xKTtcbitcdHNpemUyID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWltYWdlX3NpemVfMik7XG4rXG4rXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUxLCBzaXplMiwgXHUwMDI2dG90YWwpIHx8XG4rXHQgICAgdG90YWwgXHUwMDNlIGZ3LVx1MDAzZXNpemUgLSBNWEw4NjJYWF9GV19IRFJfU0laRSkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZmlybXdhcmUgZmlsZSB0b28gc21hbGwgZm9yIGRlY2xhcmVkIHNpemVcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCF0b3RhbCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKHNpemUxKSB7XG4rXHRcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcbitcdFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMSkpIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZsYXNoOiBpbWFnZSAxIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxuXCIsXG4rXHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8xKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChzaXplMikge1xuK1x0XHRjcmMgPSB+Y3JjMzJfbGUofjBVLCBwYXlsb2FkICsgc2l6ZTEsIHNpemUyKTtcbitcdFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMikpIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZsYXNoOiBpbWFnZSAyIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxuXCIsXG4rXHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8yKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdCpwYXlsb2FkX3NpemUgPSB0b3RhbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbitcdFx0XHRcdCAgIHUzMiBwYXlsb2FkX3NpemUsIHN0cnVjdCBkZXZsaW5rICpkbClcbit7XG4rXHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgKyBNWEw4NjJYWF9GV19IRFJfU0laRTtcbitcdHUzMiB3b3JkX2lkeCA9IDAsIGRhdGFfd3JpdHRlbiA9IDAsIGlkeCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIG5leHRfbm90aWZ5ID0gMDtcbitcdHUxNiB3b3JkLCBmZGF0YTtcbitcdGludCByZXQsIGk7XG4rXG4rXHQvKiBTdGVwIDE6IHJlYm9vdCB0aGUgZmlybXdhcmUgaW50byBNQ1Vib290IHJlc2N1ZSBtb2RlICovXG4rXHRpZiAoIXByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbitcdFx0cmV0ID0gbXhsODYyeHhfYXBpX3dyYXAocHJpdiwgU1lTX01JU0NfRldfVVBEQVRFLCBOVUxMLCAwLFxuK1x0XHRcdFx0XHRmYWxzZSwgZmFsc2UpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XCJmbGFzaDogRldfVVBEQVRFIGNvbW1hbmQgZmFpbGVkOiAlcGVcXG5cIixcbitcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogRmFpbHVyZXMgZnJvbSBoZXJlIG9uIG11c3QgZ28gdGhyb3VnaCBlbmRfbWFnaWMgc28gTUNVYm9vdFxuK1x0ICogcmVib290cyBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yZXZlci5cbitcdCAqL1xuK1xuK1x0LyogU3RlcCAyOiB3YWl0IGZvciBib290bG9hZGVyIHJlYWR5ICovXG4rXHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwiV2FpdGluZyBmb3IgYm9vdGxvYWRlclwiLCAwLCAwKTtcbitcdG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxuK1x0XHRcdFx0XHRNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IGJvb3Rsb2FkZXIgbm90IHJlYWR5OiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0Z290byBlbmRfbWFnaWM7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDM6IHN0YXJ0IGhhbmRzaGFrZSAqL1xuK1x0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfU1RBUlQpO1xuK1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBUlQgKyAxLFxuK1x0XHRcdFx0XHRNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcImZsYXNoOiBzdGFydCBoYW5kc2hha2UgZmFpbGVkOiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0Z290byBlbmRfbWFnaWM7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDQ6IHRyYW5zZmVyIGltYWdlIGhlYWRlciAqL1xuK1x0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcIkVyYXNpbmcgZmxhc2hcIiwgMCwgMCk7XG4rXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1YTDg2MlhYX0ZXX0hEUl9TSVpFIC8gMjsgaSsrKSB7XG4rXHRcdHdvcmQgPSBmdy1cdTAwM2VkYXRhW2kgKiAyXSB8XG4rXHRcdCAgICAgICAoKHUxNilmdy1cdTAwM2VkYXRhW2kgKiAyICsgMV0gXHUwMDNjXHUwMDNjIDgpO1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgd29yZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZsYXNoOiBoZWFkZXIgd3JpdGUgZmFpbGVkOiAlcGVcXG5cIixcbitcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG4rXHRcdFx0Z290byBlbmRfbWFnaWM7XG4rXHRcdH1cbitcdH1cbitcdG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcbitcdC8qIHRoZSBieXRlIGNvdW50IGluIFNUQVQgdHJpZ2dlcnMgdGhlIGVyYXNlICovXG4rXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbitcdFx0XHQgICAgIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKTtcbitcbitcdC8qIEFDSyBpcyBieXRlIGNvdW50ICsgMSAqL1xuK1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9GV19IRFJfU0laRSArIDEsXG4rXHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IGhlYWRlciBBQ0sgZmFpbGVkOiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0Z290byBlbmRfbWFnaWM7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDU6IHdhaXQgZm9yIGVyYXNlIHRvIGNvbXBsZXRlICovXG4rXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXG4rXHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0VSQVNFX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXFxuXCIsIEVSUl9QVFIocmV0KSk7XG4rXHRcdGdvdG8gZW5kX21hZ2ljO1xuK1x0fVxuK1xuK1x0LyogU3RlcCA2OiB0cmFuc2ZlciBwYXlsb2FkICovXG4rXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbitcbitcdHdoaWxlIChpZHggXHUwMDNjIHBheWxvYWRfc2l6ZSkge1xuK1x0XHRpZiAoaWR4ICsgMSBcdTAwM2MgcGF5bG9hZF9zaXplKSB7XG4rXHRcdFx0ZmRhdGEgPSBwYXlsb2FkW2lkeF0gfFxuK1x0XHRcdFx0KCh1MTYpcGF5bG9hZFtpZHggKyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4rXHRcdFx0aWR4ICs9IDI7XG4rXHRcdFx0ZGF0YV93cml0dGVuICs9IDI7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0ZmRhdGEgPSBwYXlsb2FkW2lkeF07XG4rXHRcdFx0aWR4Kys7XG4rXHRcdFx0ZGF0YV93cml0dGVuKys7XG4rXHRcdH1cbitcbitcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIGZkYXRhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFwiZmxhc2g6IGRhdGEgd3JpdGUgZmFpbGVkIGF0ICV1LyV1OiAlcGVcXG5cIixcbitcdFx0XHRcdGlkeCwgcGF5bG9hZF9zaXplLCBFUlJfUFRSKHJldCkpO1xuK1x0XHRcdGdvdG8gZW5kX21hZ2ljO1xuK1x0XHR9XG4rXHRcdHdvcmRfaWR4Kys7XG4rXG4rXHRcdGlmIChpZHggXHUwMDNlPSBwYXlsb2FkX3NpemUpIHtcbitcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHQvKiBIYWxmLWJhbmsgYm91bmRhcnk6IHN3aXRjaCB0byBTQjEgYWRkcmVzcyAqL1xuK1x0XHRpZiAod29yZF9pZHggPT0gTVhMODYyWFhfRldfQkFOS19IQUxGKSB7XG4rXHRcdFx0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4rXHRcdFx0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbitcdFx0XHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUixcbitcdFx0XHRcdFx0ICAgICBNWEw4NjJYWF9GV19TQjFfQUREUik7XG4rXHRcdFx0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4rXHRcdFx0XHRcdCAgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuK1x0XHR9IGVsc2UgaWYgKHdvcmRfaWR4IFx1MDAzZT0gTVhMODYyWFhfRldfQkFOS19TTElDRSkge1xuK1x0XHRcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pO1xuK1x0XHRcdGlmIChyZXQpIHtcbitcdFx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XCJmbGFzaDogd3JpdGUgdGltZW91dCBhdCAldS8ldTogJXBlXFxuXCIsXG4rXHRcdFx0XHRcdGlkeCwgcGF5bG9hZF9zaXplLCBFUlJfUFRSKHJldCkpO1xuK1x0XHRcdFx0Z290byBlbmRfbWFnaWM7XG4rXHRcdFx0fVxuK1x0XHRcdHdvcmRfaWR4ID0gMDtcbitcdFx0XHRkYXRhX3dyaXR0ZW4gPSAwO1xuK1x0XHRcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuK1x0XHRcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbitcbitcdFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCBuZXh0X25vdGlmeSkpIHtcbitcdFx0XHRcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCJGbGFzaGluZ1wiLCBpZHgsXG4rXHRcdFx0XHRcdFx0ICAgICAgcGF5bG9hZF9zaXplKTtcbitcdFx0XHRcdG5leHRfbm90aWZ5ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IGZpbmFsIHdyaXRlIHRpbWVvdXQ6ICVwZVxcblwiLCBFUlJfUFRSKHJldCkpO1xuK1x0XHRnb3RvIGVuZF9tYWdpYztcbitcdH1cbitcbitcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCJGbGFzaGluZ1wiLCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7XG4rXG4rZW5kX21hZ2ljOlxuK1x0LyogcmVib290IE1DVWJvb3QgZXZlbiBhZnRlciBhIGZhaWxlZCB0cmFuc2ZlciAqL1xuK1x0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfRU5EKTtcbitcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcdGNvbnN0IGNoYXIgKm1vZGVsO1xuK1x0Y2hhciB2ZXJfc3RyWzMyXTtcbitcdGludCByZXQ7XG4rXG4rXHRtb2RlbCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkcy1cdTAwM2VkZXYpO1xuK1x0aWYgKG1vZGVsKSB7XG4rXHRcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsXG4rXHRcdFx0XHRcdFx0ICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0FTSUNfSUQsXG4rXHRcdFx0XHRcdFx0ICAgICBtb2RlbCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdC8qIGNhbm9uaWNhbCBudWxsIHZlcnNpb246IG5vIG9wZXJhdGlvbmFsIGZpcm13YXJlIG9uIHRoZSBzd2l0Y2ggKi9cbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLCBcImZ3XCIsIFwiMC4wLjBcIik7XG4rXG4rXHRzbnByaW50Zih2ZXJfc3RyLCBzaXplb2YodmVyX3N0ciksIFwiJXUuJXUuJXVcIixcbitcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuK1x0XHQgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uKTtcbitcbitcdHJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFwiZndcIiwgdmVyX3N0cik7XG4rfVxuK1xuK2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4rXHRcdFx0XHQgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBteGw4NjJ4eF9zeXNfZndfaW1hZ2VfdmVyc2lvbiB2ZXIgPSB7fTtcbitcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlICpyZXByb2JlO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdHUzMiBwYXlsb2FkX3NpemU7XG4rXHRpbnQgcmV0LCBpO1xuK1xuK1x0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJjb21wb25lbnQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cmV0ID0gbXhsODYyeHhfZmxhc2hfdmFsaWRhdGUocHJpdiwgcGFyYW1zLVx1MDAzZWZ3LCBcdTAwMjZwYXlsb2FkX3NpemUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcImZpcm13YXJlIGltYWdlIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0LyogRXZlcnl0aGluZyBuZWVkZWQgdG8gc2NoZWR1bGUgdGhlIHJlcHJvYmUgd2hpY2ggcmVzdG9yZXNcbitcdCAqIG5vcm1hbCBvcGVyYXRpb24gbXVzdCBiZSBpbiBwbGFjZSBiZWZvcmUgdGhlIHN3aXRjaCBpc1xuK1x0ICogZGlzdHVyYmVkLlxuK1x0ICovXG4rXHRyZXByb2JlID0ga3phbGxvY19vYmooKnJlcHJvYmUpO1xuK1x0aWYgKCFyZXByb2JlKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7XG4rXHRcdGtmcmVlKHJlcHJvYmUpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHJlcHJvYmUtXHUwMDNlZGV2ID0gZ2V0X2RldmljZShkcy1cdTAwM2VkZXYpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cmVwcm9iZS1cdTAwM2Vkd29yaywgbXhsODYyeHhfcmVwcm9iZV93b3JrX2ZuKTtcbitcbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRkZXZfaW5mbyhkcy1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiZmxhc2g6IHJlY292ZXJpbmcgc3dpdGNoIGZyb20gTUNVYm9vdCByZXNjdWUgbW9kZVxcblwiKTtcbitcdGVsc2VcbitcdFx0ZGV2X2luZm8oZHMtXHUwMDNlZGV2LCBcImZsYXNoOiBydW5uaW5nIGZpcm13YXJlICV1LiV1LiV1XFxuXCIsXG4rXHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuK1x0XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xuK1xuK1x0LyogQ2xvc2UgcG9ydHMgd2hpbGUgdGhlIGZpcm13YXJlIGlzIHN0aWxsIGFsaXZlIHNvIHRoZSBEU0FcbitcdCAqIGNvcmUncyBNREIvRkRCIHRyYWNraW5nIGlzIGRyYWluZWQsIGFuZCBkZXRhY2ggdXNlciBwb3J0c1xuK1x0ICogc28gdXNlcnNwYWNlIGNhbm5vdCByZW9wZW4gdGhlbSBkdXJpbmcgdGhlIGZsYXNoLiBUaGVcbitcdCAqIGNvbmR1aXQgYmVsb25ncyB0byB0aGUgTUFDIGRyaXZlciBhbmQgaXMgb25seSBjbG9zZWQuXG4rXHQgKi9cbitcdHJ0bmxfbG9jaygpO1xuK1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7XG4rXHRcdGlmIChkcC1cdTAwM2V1c2VyKSB7XG4rXHRcdFx0ZGV2X2Nsb3NlKGRwLVx1MDAzZXVzZXIpO1xuK1x0XHRcdG5ldGlmX2RldmljZV9kZXRhY2goZHAtXHUwMDNldXNlcik7XG4rXHRcdH1cbitcdH1cbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnQoZHAsIGRzKVxuK1x0XHRkZXZfY2xvc2UoZHAtXHUwMDNlY29uZHVpdCk7XG4rXHRydG5sX3VubG9jaygpO1xuK1xuK1x0cHJpdi1cdTAwM2VibG9ja19ob3N0ID0gdHJ1ZTtcbitcbitcdHNldF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFx1MDAyNnByaXYtXHUwMDNlZmxhZ3MpO1xuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlc3RhdHNfd29yayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlY3JjX2Vycl93b3JrKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRzLVx1MDAzZW51bV9wb3J0czsgaSsrKVxuK1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV0uaG9zdF9mbG9vZF93b3JrKTtcbitcbitcdHJldCA9IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHByaXYsIHBhcmFtcy1cdTAwM2VmdywgcGF5bG9hZF9zaXplLFxuK1x0XHRcdFx0ICAgICAgZHMtXHUwMDNlZGV2bGluayk7XG4rXHRpZiAocmV0KVxuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcImZpcm13YXJlIHRyYW5zZmVyIGZhaWxlZFwiKTtcbitcbitcdGlmICghcmV0KSB7XG4rXHRcdC8qIGxpZnQgdGhlIGJsb2NrIHRvIHF1ZXJ5IHRoZSBuZXcgZmlybXdhcmUgdmVyc2lvbiAqL1xuK1x0XHRwcml2LVx1MDAzZWJsb2NrX2hvc3QgPSBmYWxzZTtcbitcdFx0cHJpdi1cdTAwM2VyZXNjdWVfbW9kZSA9IGZhbHNlO1xuK1x0XHRtZW1zZXQoXHUwMDI2dmVyLCAwLCBzaXplb2YodmVyKSk7XG4rXHRcdGlmICghTVhMODYyWFhfQVBJX1JFQURfUVVJRVQocHJpdiwgU1lTX01JU0NfRldfVkVSU0lPTiwgdmVyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHZlci5pdl9tYWpvcilcbitcdFx0XHRkZXZfaW5mbyhkcy1cdTAwM2VkZXYsIFwiZmxhc2g6IG5ldyBmaXJtd2FyZSAldS4ldS4ldVxcblwiLFxuK1x0XHRcdFx0IHZlci5pdl9tYWpvciwgdmVyLml2X21pbm9yLFxuK1x0XHRcdFx0IGxlMTZfdG9fY3B1KHZlci5pdl9yZXZpc2lvbikpO1xuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2Vza2lwX3RlYXJkb3duID0gdHJ1ZTtcbitcbitcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZyZXByb2JlLVx1MDAzZWR3b3JrLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41N2MyMDAwY2ZlZTUxOVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmhcbkBAIC0wLDAgKzEsMTggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuK1xuKyNpZm5kZWYgX19NWEw4NjJYWF9GV19IXG4rI2RlZmluZSBfX01YTDg2MlhYX0ZXX0hcbitcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbitcbitzdHJ1Y3QgbXhsODYyeHhfcHJpdjtcbitcbitib29sIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XG4raW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4rXG4rI2VuZGlmIC8qIF9fTVhMODYyWFhfRldfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5pbmRleCA0YWNkMjE2ZjdjYzAwOS4uODA1NjVkZTcxMGQzNzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5AQCAtMTUsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWNtZC5oXCJcbiAjaW5jbHVkZSBcIm14bDg2Mnh4LWhvc3QuaFwiXG4gXG4gI2RlZmluZSBDVFJMX0JVU1lfTUFTS1x0XHRcdEJJVCgxNSlcbkBAIC0zNDAsNiArMzQxLDIxIEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqX2RhdGEsXG4gXG4gXHRtdXRleF9sb2NrX25lc3RlZChcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpO1xuIFxuK1x0aWYgKHByaXYtXHUwMDNlc2tpcF90ZWFyZG93bikge1xuK1x0XHRyZXQgPSAwO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKSB7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlYmxvY2tfaG9zdCBcdTAwMjZcdTAwMjYgY21kICE9IFNZU19NSVNDX0ZXX1VQREFURSkge1xuK1x0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuIFx0bWF4ID0gKHNpemUgKyAxKSAvIDI7XG4gXG4gXHRyZXQgPSBteGw4NjJ4eF9idXN5X3dhaXQocHJpdik7XG5AQCAtNDk1LDYgKzUxMSw0MSBAQCBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHXHRcdDB4MWZcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTS1x0MHhmZmYwXG4rI2RlZmluZSBNWEw4NjJYWF9TTURJT19PRkZfTUFTS1x0XHQweDAwMGZcbitcbitpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpXG4re1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXM7XG4rXHRpbnQgcGh5ID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbitcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsXG4rXHRcdFx0ICAgICAgYWRkciBcdTAwMjYgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwKVxuK1x0XHRyZXQgPSBfX21kaW9idXNfcmVhZChidXMsIHBoeSwgYWRkciBcdTAwMjYgTVhMODYyWFhfU01ESU9fT0ZGX01BU0spO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbClcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cztcbitcdGludCBwaHkgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRyxcbitcdFx0XHQgICAgICBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xuK1x0aWYgKHJldCBcdTAwM2U9IDApXG4rXHRcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgYWRkciBcdTAwMjYgTVhMODYyWFhfU01ESU9fT0ZGX01BU0ssXG4rXHRcdFx0XHQgICAgICB2YWwpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gdm9pZCBteGw4NjJ4eF9ob3N0X2luaXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4ge1xuIFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlY3JjX2Vycl93b3JrLCBteGw4NjJ4eF9jcmNfZXJyX3dvcmtfZm4pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oXG5pbmRleCA2NmQ2YWUxOThhZmY0NS4uNGUwNTRjNmU0YzBlNDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oXG5AQCAtMTgsNSArMTgsNyBAQCBpbnQgbXhsODYyeHhfYXBpX3dyYXAoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUxNiBjbWQsIHZvaWQgKmRhdGEsIHUxNiBzaXplLFxuIFx0bXhsODYyeHhfYXBpX3dyYXAoZGV2LCBjbWQsIFx1MDAyNihkYXRhKSwgc2l6ZW9mKChkYXRhKSksIHRydWUsIHRydWUpXG4gXG4gaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KTtcbitpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpO1xuK2ludCBteGw4NjJ4eF9zbWRpb193cml0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUxNiB2YWwpO1xuIFxuICNlbmRpZiAvKiBfX01YTDg2MlhYX0hPU1RfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jXG5pbmRleCBiNjg5NjUyYWE5YjkyMC4uYTViNjk0MGI1NTJlOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jXG5AQCAtNDA2LDYgKzQwNiw4IEBAIG14bDg2Mnh4X3BoeWxpbmtfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXG4gXHRzd2l0Y2ggKHBvcnQpIHtcbiBcdGNhc2UgOSAuLi4gMTY6XG4rXHRcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuIFx0XHRpZiAoIU1YTDg2MlhYX0ZXX1ZFUl9NSU4ocHJpdiwgMSwgMCwgODQpKSB7XG4gXHRcdFx0ZGV2X3dhcm5fb25jZShkcC1cdTAwM2Vkcy1cdTAwM2VkZXYsXG4gXHRcdFx0XHQgICAgICBcIlNlckRlcyBQQ1MgdW5zdXBwb3J0ZWQgb24gb2xkIGZpcm13YXJlLlxcblwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXG5pbmRleCA0NWQyMzdiM2E0MGYxMC4uMjY1YTgzZjRiMzcxYjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcbkBAIC0yMSw2ICsyMSw3IEBAXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC5oXCJcbiAjaW5jbHVkZSBcIm14bDg2Mnh4LWFwaS5oXCJcbiAjaW5jbHVkZSBcIm14bDg2Mnh4LWNtZC5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWZ3LmhcIlxuICNpbmNsdWRlIFwibXhsODYyeHgtaG9zdC5oXCJcbiAjaW5jbHVkZSBcIm14bDg2Mnh4LXBoeWxpbmsuaFwiXG4gXG5AQCAtNjI4LDkgKzYyOSwyMiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRwcml2LVx1MDAzZXJlc2N1ZV9tb2RlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpO1xuK1x0aWYgKCFwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKSB7XG4rXHRcdHJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0LyogdGhlIHJlc2V0IG1heSBvbmx5IG5vdyBoYXZlIHRyaWdnZXJlZCByZXNjdWUgbW9kZSAqL1xuK1x0XHRcdHByaXYtXHUwMDNlcmVzY3VlX21vZGUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7XG4rXHRcdFx0aWYgKCFwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbitcdFx0ZGV2X3dhcm4oZHMtXHUwMDNlZGV2LFxuK1x0XHRcdCBcInN3aXRjaCBzdHVjayBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXG5cIik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNlcmRlc19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VzZXJkZXNfcG9ydHMpOyBpKyspXG5AQCAtNzE1LDExICs3MjksMjEgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3N0YXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxuIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuK1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0cmV0dXJuIG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBteGw4NjJ4eF9wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiB7XG4rXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKSlcbiBcdFx0ZGV2X2Vycihkcy1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIGRpc2FibGUgcG9ydCAlZFxcblwiLCBwb3J0KTtcbiB9XG5AQCAtMTMzNyw2ICsxMzYxLDEyIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIFx0Ym9vbCBpc19jcHVfcG9ydCA9IGRzYV9wb3J0X2lzX2NwdShkcCk7XG4gXHRpbnQgcmV0O1xuIFxuK1x0LyogRFNBIHJlaW5pdHMgZmFpbGVkIHVzZXIgcG9ydHMgYXMgdW51c2VkOyBzaGFyZWQgcG9ydHMgbXVzdFxuK1x0ICogc3VjY2VlZCBmb3IgdGhlIHRyZWUgdG8gcmVnaXN0ZXIuXG4rXHQgKi9cbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRyZXR1cm4gZHNhX3BvcnRfaXNfdXNlcihkcCkgPyAtRU5PREVWIDogMDtcbitcbiBcdHJldCA9IG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMTYyOCw2ICsxNjU4LDkgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4rXHRcdHJldHVybjtcbitcbiBcdHN3aXRjaCAoc3RhdGUpIHtcbiBcdGNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6XG4gXHRcdHBhcmFtLnBvcnRfc3RhdGUgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9TVFBfUE9SVF9TVEFURV9ESVNBQkxFKTtcbkBAIC0yMDg2LDYgKzIxMTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3BhdXNlX3N0YXRzID0gbXhsODYyeHhfZ2V0X3BhdXNlX3N0YXRzLFxuIFx0LmdldF9ybW9uX3N0YXRzID0gbXhsODYyeHhfZ2V0X3Jtb25fc3RhdHMsXG4gXHQuZ2V0X3N0YXRzNjQgPSBteGw4NjJ4eF9nZXRfc3RhdHM2NCxcbitcdC5kZXZsaW5rX2luZm9fZ2V0ID0gbXhsODYyeHhfZGV2bGlua19pbmZvX2dldCxcbitcdC5kZXZsaW5rX2ZsYXNoX3VwZGF0ZSA9IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlLFxuIH07XG4gXG4gc3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5AQCAtMjE5MSw4ICsyMjI2LDggQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBteGw4NjJ4eF9vZl9tYXRjaFtdID0ge1xuLVx0eyAuY29tcGF0aWJsZSA9IFwibWF4bGluZWFyLG14bDg2MjgyXCIgfSxcbi1cdHsgLmNvbXBhdGlibGUgPSBcIm1heGxpbmVhcixteGw4NjI1MlwiIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJtYXhsaW5lYXIsbXhsODYyODJcIiwgLmRhdGEgPSBcIk1heExpbmVhciBNeEw4NjI4MlwiIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJtYXhsaW5lYXIsbXhsODYyNTJcIiwgLmRhdGEgPSBcIk1heExpbmVhciBNeEw4NjI1MlwiIH0sXG4gXHR7IC8qIHNlbnRpbmVsICovIH1cbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG14bDg2Mnh4X29mX21hdGNoKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXG5pbmRleCA0MzJhNWYzZjJlMDhlNi4uNWQyMTI5NjU2MWUzYWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcbkBAIC0zMTksNiArMzE5LDEyIEBAIHN0cnVjdCBteGw4NjJ4eF9md192ZXJzaW9uIHtcbiAgKiBAZXZsYW5faW5ncmVzc19zaXplOiBwZXItcG9ydCBpbmdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxuICAqIEBldmxhbl9lZ3Jlc3Nfc2l6ZTogIHBlci1wb3J0IGVncmVzcyBFeHRlbmRlZCBWTEFOIGJsb2NrIHNpemVcbiAgKiBAdmZfYmxvY2tfc2l6ZTogICAgICBwZXItcG9ydCBWTEFOIEZpbHRlciBibG9jayBzaXplXG4rICogQGJsb2NrX2hvc3Q6ICAgICAgICAgcmVqZWN0IGZpcm13YXJlIEFQSSBjb21tYW5kcyAoZXhjZXB0IEZXX1VQREFURSlcbisgKiAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSBmaXJtd2FyZSBmbGFzaFxuKyAqIEBza2lwX3RlYXJkb3duOiAgICAgIGRpc2NhcmQgZmlybXdhcmUgQVBJIGNvbW1hbmRzIGR1cmluZyB0aGUgdGVhcmRvd25cbisgKiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQgYnkgdGhlIHBvc3QtZmxhc2ggcmVwcm9iZVxuKyAqIEByZXNjdWVfbW9kZTogICAgICAgIHN3aXRjaCBpcyBzdHVjayBpbiBNQ1Vib290OyBmaXJtd2FyZSBBUEkgY29tbWFuZHNcbisgKiAgICAgICAgICAgICAgICAgICAgICBmYWlsIGZhc3QsIG9ubHkgY2xhdXNlLTIyIFNNRElPIHdvcmtzXG4gICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVyc1xuICAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBhY2N1bXVsYXRlcyB0aGVtIGludG8gNjQtYml0IHBlci1wb3J0IHN0YXRzXG4gICovXG5AQCAtMzM3LDYgKzM0Myw5IEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2IHtcbiBcdHUxNiBldmxhbl9pbmdyZXNzX3NpemU7XG4gXHR1MTYgZXZsYW5fZWdyZXNzX3NpemU7XG4gXHR1MTYgdmZfYmxvY2tfc2l6ZTtcbitcdGJvb2wgYmxvY2tfaG9zdDtcbitcdGJvb2wgc2tpcF90ZWFyZG93bjtcbitcdGJvb2wgcmVzY3VlX21vZGU7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dvcms7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA4YzE2ZWYyM2NjMTAyYS4uYzllMTkzNDhkZTYxOTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxuKysrIGIvaW5jbHVkZS9uZXQvZHNhLmhcbkBAIC0xMTcwLDYgKzExNzAsOSBAQCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMge1xuIFx0aW50XHQoKmRldmxpbmtfaW5mb19nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4rXHRpbnRcdCgqZGV2bGlua19mbGFzaF91cGRhdGUpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbitcdFx0XHRcdFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFx0aW50XHQoKmRldmxpbmtfc2JfcG9vbF9nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKTtcbmRpZmYgLS1naXQgYS9uZXQvZHNhL2RldmxpbmsuYyBiL25ldC9kc2EvZGV2bGluay5jXG5pbmRleCBlZDM0MmYzNDU2OTJiYi4uMjUzMTFhODdjYmM1NmQgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL2RldmxpbmsuY1xuKysrIGIvbmV0L2RzYS9kZXZsaW5rLmNcbkBAIC0yMCw2ICsyMCwxOCBAQCBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4rc3RhdGljIGludCBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xuK1xuK1x0aWYgKCFkcy1cdTAwM2VvcHMtXHUwMDNlZGV2bGlua19mbGFzaF91cGRhdGUpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiBkcy1cdTAwM2VvcHMtXHUwMDNlZGV2bGlua19mbGFzaF91cGRhdGUoZHMsIHBhcmFtcywgZXh0YWNrKTtcbit9XG4rXG4gc3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxuIFx0XHRcdFx0ICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pXG5AQCAtMTY5LDYgKzE4MSw3IEBAIGRzYV9kZXZsaW5rX3NiX29jY190Y19wb3J0X2JpbmRfZ2V0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRscCxcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX29wcyA9IHtcbiBcdC5pbmZvX2dldFx0XHRcdD0gZHNhX2RldmxpbmtfaW5mb19nZXQsXG4rXHQuZmxhc2hfdXBkYXRlXHRcdFx0PSBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUsXG4gXHQuc2JfcG9vbF9nZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0LFxuIFx0LnNiX3Bvb2xfc2V0XHRcdFx0PSBkc2FfZGV2bGlua19zYl9wb29sX3NldCxcbiBcdC5zYl9wb3J0X3Bvb2xfZ2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX2dldCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjM0OjAwLjU1MzAwOTg5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5NDM0ODc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgTVhMODYyeHggRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBuZXcgcGF0Y2ggaGVyZSwgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBzb21lIGltcG9ydGFudCBmdW5jdGlvbmFsaXR5OiBmaXJtd2FyZSBmbGFzaGluZyBhbmQgRGV2bGluayBzdXBwb3J0IGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaCBkcml2ZXIuIFNwZWNpZmljYWxseSwgdGhhdCdzIGluIGBkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY2AuIEFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgYWxzbyBhZGRpbmcgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBzdXBwb3J0IGludG8gdGhlIERTQSBjb3JlIGl0c2VsZiwgaW4gYG5ldC9kc2EvZGV2bGluay5jYC4gVGhhdCdzIGEgbmljZSBpbnRlZ3JhdGlvbiwga2VlcGluZyBldmVyeXRoaW5nIHRpZHkuXG5cblRoZSBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gYmUgY29uZmlndXJlZCB3aXRoIGBDT05GSUdfTkVUX0RTQV9NWEw4NjJgLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIGNvZGUsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBjb25maWcgb3B0aW9uIGlzIGFjdHVhbGx5IGRlZmluZWQgYW5kIGF2YWlsYWJsZSBpbiBvdXIgYnVpbGQuIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgcGhhbnRvbSBjb25maWd1cmF0aW9ucy4gVGltZSB0byBwdWxsIG91dCBgZ3JlcHBlcmAgYW5kIGRvdWJsZS1jaGVjaywgbWFrZSBzdXJlIGBORVRfRFNBX01YTDg2MmAgaXMgbGVnaXQuIE5vIHN1cnByaXNlcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM1NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjM0OjA0LjY0NzM2MDk1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUwMTY3ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9EU0FfTVhMODYyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWc6Mjpjb25maWcgTkVUX0RTQV9NWEw4NjJcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNYXhMaW5lYXIgTXhMODYyeHhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSArPSBteGw4NjJ4eF9kc2Eub1xcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZS0zLW14bDg2Mnh4X2RzYS15IDo9IG14bDg2Mnh4Lm8gbXhsODYyeHgtaG9zdC5vIG14bDg2Mnh4LXBoeWxpbmsubyBteGw4NjJ4eC1mdy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjM0OjA4Ljg5NzUzMzk0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3Nzg4Mjg1NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0OiBGaXJtd2FyZSBGbGFzaGluZyBmb3IgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBTd2l0Y2ggRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgZmlybXdhcmUgZmxhc2hpbmcgY2FwYWJpbGl0eSB2aWEgZGV2bGluayBmb3IgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlci4gSXQgYWxzbyBhZGRzIGEgbmV3IGNhbGxiYWNrLCBgZGV2bGlua19mbGFzaF91cGRhdGVgLCB0byB0aGUgRFNBIGNvcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiB3ZSB0cmlnZ2VyIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VP1wiXG5cblRoZSBEU0EgY29yZSBjaGFuZ2VzIGluIGBuZXQvZHNhL2RldmxpbmsuY2AgYXJlIHBvdGVudGlhbGx5IHJlYWNoYWJsZSwgYnV0IGN1cnJlbnRseSwgb25seSB0aGUgYG14bDg2Mnh4YCBkcml2ZXIgaW1wbGVtZW50cyB0aGUgYWN0dWFsIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgZnVuY3Rpb25hbGl0eS4gVGhpcyBkcml2ZXIgaXMsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGEgaGFyZHdhcmUgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgYSBNYXhMaW5lYXIgc3dpdGNoIGNoaXAuIE15IG1haW4gcXVlc3Rpb24gaGVyZTogQ2FuIHdlIGVtdWxhdGUgdGhpcyBzd2l0Y2gsIG9yIGF0IGxlYXN0IHRyaWdnZXIgdGhlIGNvZGUgcGF0aCB3aXRoIGEgZHVtbXkgZGV2aWNlPyBUaGUgZHJpdmVyIHVzZXMgTURJTywgd2hpY2gsIHRoZW9yZXRpY2FsbHksIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB0aHJvdWdoIGRldmljZSB0cmVlIG9yIHNvZnR3YXJlLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IGl0IHJlbGllcyBvbiBNRElPIGZvciBoYXJkd2FyZSBjb21tdW5pY2F0aW9uLiBDYW4gc3l6a2FsbGVyIHNvbWVob3cgaW5qZWN0IE1ESU8gcmVhZHMvd3JpdGVzIG9yIGNyZWF0ZSBhIG1vY2sgTURJTyBkZXZpY2U/IEkga25vdyBzeXprYWxsZXIgaGFzIGBzeXpfZ2VuZXRsaW5rYCBhbmQgc29tZXRpbWVzIGl0IGNhbiB0cmlnZ2VyIHByb2JlIHZpYSB2aXJ0dWFsIGJ1c2VzLCBidXQgdXN1YWxseSBNRElPIGRldmljZXMgYXJlIHByb2JlZCB2aWEgZGV2aWNlIHRyZWUuXG5cblRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlYCBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgZGV2bGluayBuZXRsaW5rIGludGVyZmFjZS4gU28sIGlmIHRoZSBkZXZpY2UgaXMgcHJvYmVkLCBkZXZsaW5rIGNvbW1hbmRzIGNhbiByZWFjaCBpdC4gVGhpcyBpcyBwcm9taXNpbmchIFRoZSBmaXJtd2FyZSBmaWxlIHBhcnNpbmcgKGBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZWApIGhhcHBlbnMgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBmaWxlIGl0c2VsZiBpcyBzdXBwbGllZCBieSB1c2Vyc3BhY2UgdGhyb3VnaCBkZXZsaW5rIGZsYXNoIHVwZGF0ZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlOiBgbXhsODYyeHhfZmxhc2hfdmFsaWRhdGVgIHRha2VzIGEgYGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndgLiBUaGlzIGBmd2AgY29tZXMgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2UuIFRoZSB2YWxpZGF0aW9uIGxvZ2ljIGl0c2VsZiBsb29rcyB2dWxuZXJhYmxlOiB0aGVyZSBhcmUgY2hlY2tzIG9uIHRoZSBmaXJtd2FyZSBzaXplIGFuZCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgd2hlbiBjYWxjdWxhdGluZyBmaWxlIG9mZnNldHMuIFRoaXMgaXMgKmRlZmluaXRlbHkqIHBhcnNpbmcgdW50cnVzdGVkIGRhdGEsIGFuZCB0aGVyZWZvcmUgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVgLCBgbXhsODYyeHhfZmxhc2hfdmFsaWRhdGVgLCBgbXhsODYyeHhfZmxhc2hfZmlybXdhcmVgLCBhbmQgYWxzbyB0aGUgY29yZSBEU0EgZnVuY3Rpb24sIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLlxuXG5UaGUgbmV4dCBxdWVzdGlvbjogSXMgYG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlYCBpdHNlbGYgcmVhY2hhYmxlPyBJdCBkZXBlbmRzIG9uIHRoZSBgbXhsODYyeHhgIGRyaXZlciBiZWluZyBwcm9iZWQuIFN5emthbGxlciBjYW4gcHJvYmFibHkgcHJvYmUgc29tZSBkcml2ZXJzLCBidXQgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBvbiBNRElPIGFyZSB1c3VhbGx5IGhhcmQgdG8gcmVhY2ggdW5sZXNzIHRoZXJlJ3MgYSBtb2NrIG9yIHNvbWUgZGV2aWNlIHRyZWUgb3ZlcmxheS4gQnV0LCBzaW5jZSB0aGUgRFNBIGNvcmUgY2hhbmdlIGluIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgIGlzIGdlbmVyaWMsIGl0IG1pZ2h0IGJlIHJlYWNoYWJsZSBpZiBhbnkgRFNBIHN3aXRjaCBpcyBwcmVzZW50LlxuXG5Ob3csIGNoZWNraW5nIHRoZSBEU0Egc3dpdGNoIGRyaXZlcnMgdGhhdCBzeXprYWxsZXIgY2FuIHByb2JlLi4uIFRoZXJlJ3MgYGRzYV9sb29wYCwgd2hpY2ggaXMgYSBtb2NrIERTQSBzd2l0Y2guIEhvd2V2ZXIsIGBkc2FfbG9vcGAgZG9lc24ndCBpbXBsZW1lbnQgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCwgc28gd2l0aG91dCB0aGUgYG14bDg2Mnh4YCBkcml2ZXIsIGl0IHdvdWxkIHJldHVybiBgLUVPUE5PVFNVUFBgLiBUaGF0IHdvdWxkIG1lYW4gd2Ugd291bGRuJ3QgYmUgYWJsZSB0byBlYXNpbHkgcmVhY2ggYG14bDg2Mnh4YCwgYnV0IHdlIHNob3VsZCBzdGlsbCBtYXJrIGl0IGFzIHdvcnRoIGZ1enppbmcsIGFzIGl0IGFkZHMgbmV3IG5ldGxpbmsgYXR0cmlidXRlcywgZmlybXdhcmUgcGFyc2luZywgYW5kIGEgbmV3IGRldmxpbmsgb3AuXG5cblRoZSBpbnN0cnVjdGlvbnMgc2F5IHRoYXQgaWYgY29kZSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIHdlIG5lZWQgdG8gdmVyaWZ5IGl0LiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgTURJTyBkZXZpY2UgcmVhY2hhYmxlPyBUaGUgRFNBIGxvb3AgZHJpdmVyIGV4aXN0cywgYnV0IEknbSB1bnN1cmUgaWYgaXQncyB0aGUgc2FtZSBhcyB0aGUgTURJTyBkZXZpY2UuLi4gbm8uXG5cbkJ1dCwgZ2l2ZW4gdGhlIGluc3RydWN0aW9ucyBhbmQgdGhlIGZhY3QgdGhhdCB3ZSBjYW4gdHJpZ2dlciB0aGUgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY29yZSBmdW5jdGlvbiwgYW5kIHRoYXQgdGhpcyBoYW5kbGVzIHVzZXItc3VwcGxpZWQgZGF0YSwgdGhlIG5ldGxpbmsgY2FsbHMgbmVlZCB0byBiZSBmdXp6ZWQgZXZlbiBpZiB0aGUgYG14bDg2Mnh4YCBkcml2ZXIgY2FuJ3QgYmUgcHJvYmVkLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgcmVhY2hhYmlsaXR5IG9mIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLiBZZXMsIGlmIHdlIGhhdmUgKmFueSogRFNBIHN3aXRjaCAobGlrZSBgZHNhX2xvb3BgKSwgdGhlIGNvcmUgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB2aWEgZGV2bGluayBuZXRsaW5rLiBJdCB3aWxsIGNhbGwgdGhlIGluZGl2aWR1YWwgc3dpdGNoIG9wLlxuXG5IZXJlJ3MgbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzOlxuXG4qICAgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWBcbiogICBgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVgXG4qICAgYG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlYFxuKiAgIGBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZWBcblxuQW5kIHRoZSBuZWNlc3NhcnkgY29uZmlnczpcblxuKiAgIGBORVRfRFNBX01YTDg2MmBcbiogICBgXG5cbiIsIklucHV0VG9rZW5zIjoxNDAwNCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MzQ6MjYuNjg1ODIxNzkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODcxNzE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0RTQV9NWEw4NjJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZzoyOmNvbmZpZyBORVRfRFNBX01YTDg2MlxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1heExpbmVhciBNeEw4NjJ4eFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MzQ6MjYuODc0NTQ4NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcyOTIwNDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZWxhdGlvbnNoaXBzIGhlcmUuIFRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUuIEknbSB0aGlua2luZywgXCJMZXQncyBjcmFjayBvcGVuIHRoYXQgS2NvbmZpZyBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBpcyAqcmVhbGx5KiByZWx5aW5nIG9uLlwiIEknbSBsb29raW5nIGZvciB0aGUgYnJlYWRjcnVtYnMsIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSAqaWZzKiBhbmQgKmRlcGVuZHMgb24qIHN0YXRlbWVudHMgdGhhdCBnb3Zlcm4gaG93IHRoZXNlIGNvbXBvbmVudHMgcGxheSB0b2dldGhlci4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBvciBtb2R1bGVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHZhcmlvdXMgY29uZGl0aW9ucy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55dGhpbmcgdGhhdCBqdW1wcyBvdXQg4oCTIGNvbXBsZXggbmVzdGVkIGRlcGVuZGVuY2llcywgdW51c3VhbCB1c2Ugb2YgYHNlbGVjdGAgb3IgYGRlZmF1bHRgLCBvciBhbnkgY2lyY3VsYXIgcmVmZXJlbmNlcyB0aGF0IG1pZ2h0IGJpdGUgbWUgbGF0ZXIuIE15IGdvYWwgaGVyZSBpcyBhIHF1aWNrLCBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRyb2wgZmxvdyBiZWZvcmUgSSBnZXQgYm9nZ2VkIGRvd24gaW4gdGhlIG1pbnV0aWFlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc2OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjM0OjMwLjM0NzQ3MTI2MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTkVUX0RTQV9NWEw4NjJcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXhMaW5lYXIgTXhMODYyeHhcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9EU0FcXG4gICA1OlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAgIDY6XFx0XFx0c2VsZWN0IE5FVF9EU0FfVEFHX01YTF84NjJYWFxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBzd2l0Y2ggZmFtaWx5LlxcbiAgIDk6XFx0XFx0ICBUaGVzZSBzd2l0Y2hlcyBoYXZlIHR3byAxMEdFIFNlckRlcyBpbnRlcmZhY2VzLCBvbmUgdHlwaWNhbGx5XFxuICAxMDpcXHRcXHQgIHVzZWQgYXMgQ1BVIHBvcnQuXFxuICAxMTpcXHRcXHQgICAtIE14TDg2MjgyIGhhcyBlaWdodCAyLjUgR2lnYWJpdCBQSFlzXFxuICAxMjpcXHRcXHQgICAtIE14TDg2MjUyIGhhcyBmaXZlIDIuNSBHaWdhYml0IFBIWXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MzQ6MzAuMzQ3NTU5NzExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ1Mjc3OTk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCBkcml2ZXIuIFRoZSBkZXBlbmRlbmNpZXMgcG9pbnQgZGlyZWN0bHkgdG8gYE5FVF9EU0FgLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUga2V5IGNvbmZpZyBpcyBgTkVUX0RTQV9NWEw4NjJgLiAgVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBJJ20gZG91YmxlLWNoZWNraW5nLCBqdXN0IHRvIGJlIHRob3JvdWdoLCB0aGF0IG5vIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhhdCdzIHRoZSBvbmx5IG9uZS5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgcGFydGljdWxhcmx5IGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLCBpcyByZWFjaGFibGUuIFllcCwgbG9va3MgbGlrZSB3ZSdyZSBnb29kIHRvIGdvIHRocm91Z2ggZGV2bGluayBuZXRsaW5rLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLlxuXG5CYXNlZCBvbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEknbSBnb2luZyB0byBzZXQgc29tZSBmdXp6aW5nIHBhcmFtZXRlcnMuIFRoaXMgbG9va3MgbGlrZSBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZywgc28gSSdsbCBtYXJrIGBXb3J0aEZ1enppbmdgIGFzIGB0cnVlYC4gSSdsbCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAsIGBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZWAsIGBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZWAsIGFuZCBhbHNvIHRoZSBjb3JlIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLlxuXG5GaW5hbGx5LCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGZvciB0ZXN0aW5nLCBJJ2xsIGV4cGxpY2l0bHkgZW5hYmxlIGBORVRfRFNBX01YTDg2MmAuXG5cblRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoaXMgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgZm9yIHRoZSBNeEw4NjJ4eCBkcml2ZXIsIHVzaW5nIGRldmxpbmsuIEl0IGludHJvZHVjZXMgdGhlIG5lY2Vzc2FyeSBjb2RlIHRvIGhhbmRsZSBmaXJtd2FyZSBmaWxlcyBjb21pbmcgZnJvbSB1c2Vyc3BhY2UuIEZ1cnRoZXJtb3JlLCBpdCBhZGRzIGEgbmV3IGRldmxpbmsgY2FsbGJhY2sgdG8gdGhlIERTQSBjb3JlLCB3aGljaCBzZWVtcyBpbXBvcnRhbnQgdG8gYmUgdGVzdGluZy4gIFRoaXMgaW50cm9kdWNlcyBhIG5ldyBhdHRhY2sgc3VyZmFjZSBzbyBpdCBuZWVkcyB0byBiZSB0ZXN0ZWQgdmlnb3JvdXNseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMzEsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MzQ6MzUuODAwMzQzMzY3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4ODMzMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfRFNBX01YTDg2MlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlXCIsXG4gICAgXCJteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZVwiLFxuICAgIFwibXhsODYyeHhfZmxhc2hfZmlybXdhcmVcIixcbiAgICBcImRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB2aWEgZGV2bGluayB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCBpbmNsdWRpbmcgcGFyc2luZyBvZiB0aGUgZmlybXdhcmUgZmlsZSB3aGljaCBjb21lcyBmcm9tIHVzZXJzcGFjZS4gSXQgYWxzbyBhZGRzIGEgbmV3IGRldmxpbmsgY2FsbGJhY2sgdG8gdGhlIERTQSBjb3JlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9EU0FfTVhMODYyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVcIixcbiAgICBcIm14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlXCIsXG4gICAgXCJteGw4NjJ4eF9mbGFzaF9maXJtd2FyZVwiLFxuICAgIFwiZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmaXJtd2FyZSBmbGFzaGluZyBzdXBwb3J0IHZpYSBkZXZsaW5rIHRvIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCBkcml2ZXIsIGluY2x1ZGluZyBwYXJzaW5nIG9mIHRoZSBmaXJtd2FyZSBmaWxlIHdoaWNoIGNvbWVzIGZyb20gdXNlcnNwYWNlLiBJdCBhbHNvIGFkZHMgYSBuZXcgZGV2bGluayBjYWxsYmFjayB0byB0aGUgRFNBIGNvcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowtk5tv[1] Phase: Succeeded StartedAt: 2026-07-20 03:34:48 +0000 UTC FinishedAt: 2026-07-20 03:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 03:34:48 +0000 UTC FinishedAt: 2026-07-20 03:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2] Phase: Succeeded StartedAt: 2026-07-20 03:34:48 +0000 UTC FinishedAt: 2026-07-20 05:46:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 03:34:49 +0000 UTC FinishedAt: 2026-07-20 05:46:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 03:34:49 +0000 UTC FinishedAt: 2026-07-20 03:35:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 03:34:49 +0000 UTC FinishedAt: 2026-07-20 03:35:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowtk5tv/series-workflowtk5tv-convert-artifact-248208614/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 03:35:19 +0000 UTC FinishedAt: 2026-07-20 04:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 03:35:19 +0000 UTC FinishedAt: 2026-07-20 04:05:31 +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:*01d3bc22-60b8-4a52-baff-73172a447d67,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-workflowtk5tv/series-workflowtk5tv-convert-artifact-248208614/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": "46e00537-420e-4f44-b6a9-9052d3b9096e", "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-workflowtk5tv/series-workflowtk5tv-build-action-3872128124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 03:35:19 +0000 UTC FinishedAt: 2026-07-20 04:02:57 +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:*01d3bc22-60b8-4a52-baff-73172a447d67,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-workflowtk5tv/series-workflowtk5tv-convert-artifact-248208614/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": "46e00537-420e-4f44-b6a9-9052d3b9096e", "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-workflowtk5tv/series-workflowtk5tv-build-action-3872128124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 04:05:31 +0000 UTC FinishedAt: 2026-07-20 04:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 04:05:31 +0000 UTC FinishedAt: 2026-07-20 04:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 04:05:31 +0000 UTC FinishedAt: 2026-07-20 04:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 04:05:31 +0000 UTC FinishedAt: 2026-07-20 04:06:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowtk5tv/series-workflowtk5tv-convert-artifact-2635932217/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 04:06:22 +0000 UTC FinishedAt: 2026-07-20 04:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 04:06:22 +0000 UTC FinishedAt: 2026-07-20 04:08:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46e00537-420e-4f44-b6a9-9052d3b9096e,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-workflowtk5tv/series-workflowtk5tv-build-action-3872128124/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-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 04:08:36 +0000 UTC FinishedAt: 2026-07-20 04:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 04:08:36 +0000 UTC FinishedAt: 2026-07-20 04:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 04:08:36 +0000 UTC FinishedAt: 2026-07-20 04:54:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 04:08:36 +0000 UTC FinishedAt: 2026-07-20 04:54:09 +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:*01d3bc22-60b8-4a52-baff-73172a447d67,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-workflowtk5tv/series-workflowtk5tv-convert-artifact-2635932217/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": "1922c760-26f5-49ee-a1a4-d6c22c8a82b8", "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-workflowtk5tv/series-workflowtk5tv-build-action-1641610005/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 04:08:36 +0000 UTC FinishedAt: 2026-07-20 04:53:59 +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:*01d3bc22-60b8-4a52-baff-73172a447d67,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-workflowtk5tv/series-workflowtk5tv-convert-artifact-2635932217/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": "1922c760-26f5-49ee-a1a4-d6c22c8a82b8", "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-workflowtk5tv/series-workflowtk5tv-build-action-1641610005/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 04:54:09 +0000 UTC FinishedAt: 2026-07-20 04:54:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 04:54:09 +0000 UTC FinishedAt: 2026-07-20 04:54:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 04:54:09 +0000 UTC FinishedAt: 2026-07-20 04:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 04:54:09 +0000 UTC FinishedAt: 2026-07-20 04:56:26 +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:*1922c760-26f5-49ee-a1a4-d6c22c8a82b8,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-workflowtk5tv/series-workflowtk5tv-build-action-1641610005/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-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 04:56:36 +0000 UTC FinishedAt: 2026-07-20 05:46:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 04:56:36 +0000 UTC FinishedAt: 2026-07-20 05:46:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"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:*46e00537-420e-4f44-b6a9-9052d3b9096e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1922c760-26f5-49ee-a1a4-d6c22c8a82b8,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-workflowtk5tv/series-workflowtk5tv-build-action-3872128124/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-workflowtk5tv/series-workflowtk5tv-build-action-1641610005/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 04:56:36 +0000 UTC FinishedAt: 2026-07-20 04:56:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 04:56:36 +0000 UTC FinishedAt: 2026-07-20 04:56:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"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-workflowtk5tv/series-workflowtk5tv-convert-artifact-2206702254/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 04:56:36 +0000 UTC FinishedAt: 2026-07-20 04:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 04:56:36 +0000 UTC FinishedAt: 2026-07-20 04:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 04:56:37 +0000 UTC FinishedAt: 2026-07-20 04:56:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 04:56:47 +0000 UTC FinishedAt: 2026-07-20 05:46:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtk5tv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mxl862xx_devlink_flash_update","mxl862xx_flash_validate","mxl862xx_flash_firmware","dsa_devlink_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DSA_MXL862"],"series_id":"1cbb138f-85fc-4de6-a880-37d3f262a0c8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 04:56:47 +0000 UTC FinishedAt: 2026-07-20 05:45:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46e00537-420e-4f44-b6a9-9052d3b9096e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1922c760-26f5-49ee-a1a4-d6c22c8a82b8,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-workflowtk5tv/series-workflowtk5tv-build-action-3872128124/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-workflowtk5tv/series-workflowtk5tv-build-action-1641610005/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-workflowtk5tv/series-workflowtk5tv-convert-artifact-2206702254/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,}