Name: series-workflowppcpw Phase: Succeeded StartedAt: 2026-07-01 10:53:09 +0000 UTC FinishedAt: 2026-07-01 13:11:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[0] Phase: Succeeded StartedAt: 2026-07-01 10:53:09 +0000 UTC FinishedAt: 2026-07-01 11:02:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 10:53:09 +0000 UTC FinishedAt: 2026-07-01 11:02:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_AX88179_178A" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_AX88179_178A" ], "series_id": "0f346afd-defd-4187-a30d-88711bdcd8b4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ax88179a_bind", "ax88179a_unbind", "ax88179a_link_reset", "ax88179a_rx_fixup", "ax88179a_tx_fixup", "ax179a_vlan_rx_add_vid", "ax179a_vlan_rx_kill_vid", "ax88179a_get_pauseparam", "ax88179a_set_pauseparam", "ax88179a_rx_checksum", "ax88179a_bulkin_config" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3OV8xNzhBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXg4ODE3OWFfYmluZCYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV91bmJpbmQmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfbGlua19yZXNldCYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9yeF9maXh1cCYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV90eF9maXh1cCYjMzQ7LAogICAgJiMzNDtheDE3OWFfdmxhbl9yeF9hZGRfdmlkJiMzNDssCiAgICAmIzM0O2F4MTc5YV92bGFuX3J4X2tpbGxfdmlkJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX2dldF9wYXVzZXBhcmFtJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX3NldF9wYXVzZXBhcmFtJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX3J4X2NoZWNrc3VtJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX2J1bGtpbl9jb25maWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBuZXcgQVNJWCBVU0IgRXRoZXJuZXQgY2hpcHMgKEFYODgxNzlBLCBBWDg4NzcyRCwgQVg4ODI3OSkgdG8gdGhlIGF4ODgxNzlfMTc4YSBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGluaXRpYWxpemF0aW9uLCBsaW5rIHJlc2V0LCBhbmQgcGFja2V0IHBhcnNpbmcgKHJ4L3R4IGZpeHVwKSBsb2dpYyBzcGVjaWZpYyB0byB0aGVzZSBjaGlwcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBVU0IgZGV2aWNlIGJpbmRpbmcgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWMzNzc5NWJhYWI1ZGU2OGZlZWJlMzJiNGUyY2Y4YjM3ZjVhZjVhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTE6MDE6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jIGIvZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jXG5pbmRleCA5OGY4OTllYTJlOTQ2Mi4uMTJmYzIwZTVmNzZlNjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY1xuQEAgLTEzLDkgJiM0MzsxMywxMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi91c2JuZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuIFxuICNkZWZpbmUgQVg4ODE3OV9QSFlfSURcdFx0XHRcdDB4MDNcbiAjZGVmaW5lIEFYX0VFUFJPTV9MRU5cdFx0XHRcdDB4MTAwXG4mIzQzOyNkZWZpbmUgQVg4ODI3OV9FRVBST01fTEVOXHRcdFx0MHg0MDAwXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfRUVQUk9NX0xFTlx0XHRcdCgzMiAqIDIwKVxuICNkZWZpbmUgQVg4ODE3OV9FRVBST01fTUFHSUNcdFx0XHQweDE3OTAwYjk1XG4gI2RlZmluZSBBWF9NQ0FTVF9GTFRTSVpFXHRcdFx0OFxuICNkZWZpbmUgQVhfTUFYX01DQVNUXHRcdFx0XHQ2NFxuQEAgLTMyLDE3ICYjNDM7MzUsMzMgQEBcbiAjZGVmaW5lIEFYX0FDQ0VTU19FRVBST01cdFx0XHQweDA0XG4gI2RlZmluZSBBWF9BQ0NFU1NfRUZVU1x0XHRcdFx0MHgwNVxuICNkZWZpbmUgQVhfUkVMT0FEX0VFUFJPTV9FRlVTRVx0XHRcdDB4MDZcbi0jZGVmaW5lIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0hcdFx0XHQweDU0XG4tI2RlZmluZSBBWF9QQVVTRV9XQVRFUkxWTF9MT1dcdFx0XHQweDU1XG4tXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfV0FLRVVQX1NFVFRJTkdcdFx0XHQweDA3XG4mIzQzOyNkZWZpbmUgQVhfRldfTU9ERVx0XHRcdFx0MHgwOFxuJiM0MzsjZGVmaW5lIEFYX0dQSFlfQ1RMXHRcdFx0XHQweDBGXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfUkVBRFx0XHRcdDB4MjFcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9GTEFTSF9XRU5cdFx0XHQweDIyXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfV0RJU1x0XHRcdDB4MjNcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9GTEFTSF9XUklURVx0XHRcdDB4MjRcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9QSFlfQ0xBVVNFNDVcdFx0XHQweDI3XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfRVJBU0VfU0VDVElPTlx0XHQweDI4XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfQUNDRVNTX0JMXHRcdFx0MHgyQVxuJiM0MzsjZGVmaW5lIEFYODgxNzlBX1BIWV9QT1dFUlx0XHRcdDB4MzFcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNIXHRcdFx0MHhDMFxuJiM0MzsjZGVmaW5lIEFYX1BBVVNFX1dBVEVSTFZMX0xPV1x0XHRcdDB4NTRcbiYjNDM7I2RlZmluZSBBWF9QQVVTRV9XQVRFUkxWTF9ISUdIXHRcdFx0MHg1NVxuJiM0MztcbiYjNDM7I2RlZmluZSBBWF9GV19NT0RFXzE3OUFcdFx0XHRcdDB4MDFcbiAjZGVmaW5lIFBIWVNJQ0FMX0xJTktfU1RBVFVTXHRcdFx0MHgwMlxuIFx0I2RlZmluZVx0QVhfVVNCX1NTXHRcdDB4MDRcbiBcdCNkZWZpbmVcdEFYX1VTQl9IU1x0XHQweDAyXG4mIzQzO1x0I2RlZmluZSBBWF9VU0JfRlNcdFx0MHgwMVxuIFxuICNkZWZpbmUgR0VORVJBTF9TVEFUVVNcdFx0XHRcdDB4MDNcbiAvKiBDaGVjayBBWDg4MTc5IHZlcnNpb24uIFVBMTpCaXQyID0gMCwgIFVBMjpCaXQyID0gMSAqL1xuIFx0I2RlZmluZVx0QVhfU0VDTERcdFx0MHgwNFxuIFxuJiM0MzsjZGVmaW5lIEFYX0NISVBfU1RBVFVTXHRcdFx0XHQweDA1XG4mIzQzO1xuICNkZWZpbmUgQVhfU1JPTV9BRERSXHRcdFx0XHQweDA3XG4gI2RlZmluZSBBWF9TUk9NX0NNRFx0XHRcdFx0MHgwYVxuIFx0I2RlZmluZSBFRVBfUkRcdFx0XHQweDA0XG5AQCAtNjIsNiAmIzQzOzgxLDE1IEBAXG4gXHQjZGVmaW5lIEFYX1JYX0NUTF9QUk9cdFx0MHgwMDAxXG4gXHQjZGVmaW5lIEFYX1JYX0NUTF9TVE9QXHRcdDB4MDAwMFxuIFxuJiM0MzsjZGVmaW5lIEFYODgxNzlBX0VUSF9UWF9HQVBcdFx0XHQweDBEXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFYODgxNzlBX0JGTV9EQVRBXHRcdFx0MHgwRVxuJiM0MztcdCNkZWZpbmUgQVhfVFhfUVVFVUVfQ0ZHXHRcdDB4MDJcbiYjNDM7XHQjZGVmaW5lIEFYX1RYX1FVRVVFX1NFVFx0XHQweDA4XG4mIzQzO1x0I2RlZmluZSBBWF9UWF9RMV9BSEJfRkNfRU5cdDB4MTBcbiYjNDM7XHQjZGVmaW5lIEFYX1RYX1EyX0FIQl9GQ19FTlx0MHgyMFxuJiM0MztcdCNkZWZpbmUgQVhfWEdNSUlfRU5cdFx0MHg4MFxuJiM0MztcbiAjZGVmaW5lIEFYX05PREVfSURcdFx0XHRcdDB4MTBcbiAjZGVmaW5lIEFYX01VTEZMVEFSWVx0XHRcdFx0MHgxNlxuIFxuQEAgLTkxLDcgJiM0MzsxMTksMjEgQEBcbiBcdCNkZWZpbmUgQVhfUEhZUFdSX1JTVENUTF9JUFJMXHQweDAwMjBcbiBcdCNkZWZpbmUgQVhfUEhZUFdSX1JTVENUTF9BVFx0MHgxMDAwXG4gXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9BRERSRVNTXHRcdDB4MkFcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MXHRcdDB4MkJcbiYjNDM7XHQjZGVmaW5lIEFYX1ZMQU5fQ09OVFJPTF9XRVx0MHgwMDAxXG4mIzQzO1x0I2RlZmluZSBBWF9WTEFOX0NPTlRST0xfUkRcdDB4MDAwMlxuJiM0MztcdCNkZWZpbmUgQVhfVkxBTl9DT05UUk9MX1ZTT1x0MHgwMDEwXG4mIzQzO1x0I2RlZmluZSBBWF9WTEFOX0NPTlRST0xfVkZFXHQweDAwMjBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMFx0XHRcdDB4MkNcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9WTEFOX0lEX0RBVEExXHRcdFx0MHgyRFxuJiM0MztcbiAjZGVmaW5lIEFYX1JYX0JVTEtJTl9RQ1RSTFx0XHRcdDB4MmVcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVhfR1BIWV9FRUVfQ1RSTFx0XHRcdDB4MDFcbiYjNDM7XG4gI2RlZmluZSBBWF9DTEtfU0VMRUNUXHRcdFx0XHQweDMzXG4gXHQjZGVmaW5lIEFYX0NMS19TRUxFQ1RfQkNTXHQweDAxXG4gXHQjZGVmaW5lIEFYX0NMS19TRUxFQ1RfQUNTXHQweDAyXG5AQCAtMTExLDcgJiM0MzsxNTMsNTEgQEBcbiBcdCNkZWZpbmUgQVhfVFhDT0VfVENQVjZcdFx0MHgyMFxuIFx0I2RlZmluZSBBWF9UWENPRV9VRFBWNlx0XHQweDQwXG4gXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX0JNX0lOVF9NQVNLXHRcdDB4NDFcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfQk1fUlhfRE1BX0NUTFx0XHQweDQzXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX0JNX1RYX0RNQV9DVExcdFx0MHg0NlxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfUlhfU1RBVFVTX0NEQ1x0XHQweDZEXG4mIzQzO1x0I2RlZmluZSBBWF9MU09GQ19XQ05UXzdfQUNDRVNTXHQweDAzXG4mIzQzO1x0I2RlZmluZSBBWF9HTUlJX0NSQ19BUFBFTkRcdDB4MTBcbiYjNDM7XG4gI2RlZmluZSBBWF9MRURDVFJMXHRcdFx0XHQweDczXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX0FSQ19DVFJMXHRcdFx0MHg5RVxuJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19TV1BfQ1RSTFx0XHRcdDB4QjFcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX1RYX1BBVVNFXHRcdFx0MHhCMlxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfQ0RDX0RFTEFZX1RYXHRcdDB4QjVcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX1BBVEhcdFx0XHQweEI3XG4mIzQzO1x0I2RlZmluZSBBWF9NQUNfUlhfUEFUSF9SRUFEWVx0MHgwMVxuJiM0MztcdCNkZWZpbmUgQVhfTUFDX1RYX1BBVEhfUkVBRFlcdDB4MDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTkVXX1BBVVNFX0NUUkxcdFx0XHQweEI4XG4mIzQzO1x0I2RlZmluZSBBWF9ORVdfUEFVU0VfRU5cdFx0MHgwMVxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfQlVMS19PVVRfQ1RSTFx0XHQweEI5XG4mIzQzO1x0I2RlZmluZSBBWF9NQUNfRUZGX0VOXHRcdDB4MDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVFx0XHQweEMwXG4mIzQzO1x0I2RlZmluZSBBWF9NQUNfTFNPX0VSUl9FTlx0MHgwNFxuJiM0MztcdCNkZWZpbmUgQVhfTUFDX01JUUZGQ1RSTF9GT1JNQVRcdDB4MTBcbiYjNDM7XHQjZGVmaW5lIEFYX01BQ19NSVFGRkNUUkxfRFJPUF9DUkMgMHgyMFxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNIX0RFTEFZXHQoNVVMIFx1MDAzY1x1MDAzYyA4KVxuJiM0MzsjZGVmaW5lIEFYODgxNzlBX0FVVE9ERVRBQ0hfRU5cdFx0MVxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfTFNPX0VOSEFOQ0VfQ1RSTFx0XHQweEMzXG4mIzQzO1x0I2RlZmluZSBBWF9MU09fRU5IQU5DRV9FTlx0MHgwMVxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfVFhfSERSX0NLU1VNXHRcdDB4Q0NcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9FUDVfRUhSXHRcdFx0MHhGOVxuJiM0MztcbiYjNDM7I2RlZmluZSBBWF9QSFlfUE9XRVJcdFx0XHRcdDB4MDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRVBIWV9MT1dfUE9XRVJfRU5cdFx0XHQweDAxXG4mIzQzOyNkZWZpbmUgUzVfV09MX0VOXHRcdFx0XHQweDA0XG4mIzQzOyNkZWZpbmUgUzVfV09MX0xPV19QT1dFUlx0XHRcdDB4MjBcbiBcbiAjZGVmaW5lIEdNSUlfUEhZX1BIWVNSXHRcdFx0XHQweDExXG4gXHQjZGVmaW5lIEdNSUlfUEhZX1BIWVNSX1NNQVNLXHQweGMwMDBcbkBAIC0xNjQsOCAmIzQzOzI1MCw1NiBAQFxuIFx0I2RlZmluZSBHTUlJX1BIWV9QR1NFTF9QQUdFM1x0MHgwMDAzXG4gXHQjZGVmaW5lIEdNSUlfUEhZX1BHU0VMX1BBR0U1XHQweDAwMDVcbiBcbiYjNDM7LyogVFggRGVzY3JpcHRvciAqL1xuJiM0MzsjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX0xFTl9NQVNLXHRcdDB4MUZGRkZGXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfRFJPUF9QQUREXHRCSVQoMjgpXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfVkxBTlx0XHRCSVQoMjkpXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfTVNTX01BU0tcdFx0MHg3RkZGXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfTVNTX1NISUZUXHQweDIwXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfVkxBTl9NQVNLXHQweEZGRkZcbiYjNDM7I2RlZmluZSBBWDE3OUFfVFhfREVTQ19WTEFOX1NISUZUXHQweDMwXG4mIzQzO1xuJiM0MzsvKiBSWCBQYWNrZXQgRGVzY3JpcHRvciAqL1xuJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9FUlJcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0VSUlx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfTDRfVFlQRV9NQVNLXHQweDFDXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0w0X1VEUFx0XHQweDA0XG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0w0X1RDUFx0XHQweDEwXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX1RZUEVfTUFTS1x0MHg2MFxuJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MM19JUFx0XHQweDIwXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0lQNlx0XHQweDQwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9WTEFOXHRcdEJJVCgxMClcbiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfUlhfT0tcdFx0QklUKDExKVxuJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9EUk9QXHRcdEJJVCgzMSlcbiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfTEVOX01BU0tcdDB4N0ZGRjAwMDBcbiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfTEVOX1NISUZUXHQweDEwXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX1ZMQU5fU0hJRlRcdDB4MjBcbiYjNDM7XG4mIzQzOy8qIFJYIERlc2NyaXB0b3IgaGVhZGVyICovXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX0RIX1BLVF9DTlRfTUFTS1x0XHQweDFGRkZcbiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfREhfREVTQ19PRkZTRVRfTUFTS1x0MHhGRkZGRTAwMFxuJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9ESF9ERVNDX09GRlNFVF9TSElGVFx0MHgwRFxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfSFdfUEFEXHRcdFx0MHgwMlxuJiM0MztcbiBzdGF0aWMgaW50IGF4ODgxNzlfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KTtcbiBcbiYjNDM7ZW51bSBheF9ldGhlcl9saW5rX3NwZWVkIHtcbiYjNDM7XHRFVEhFUl9MSU5LX05PTkUgPSAwLFxuJiM0MztcdEVUSEVSX0xJTktfMTAgICA9IDEsXG4mIzQzO1x0RVRIRVJfTElOS18xMDAgID0gMixcbiYjNDM7XHRFVEhFUl9MSU5LXzEwMDAgPSAzLFxuJiM0MztcdEVUSEVSX0xJTktfMjUwMCA9IDQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIGF4X2NoaXBfdmVyc2lvbiB7XG4mIzQzO1x0QVhfVkVSU0lPTl9JTlZBTElEXHRcdD0gMHgwLFxuJiM0MztcdEFYX1ZFUlNJT05fQVg4ODE3OVx0XHQ9IDB4NCxcbiYjNDM7XHRBWF9WRVJTSU9OX0FYODgxNzlBXHRcdD0gMHg2LFx0LyogQWxzbyBBWDg4NzcyRCAqL1xuJiM0MztcdEFYX1ZFUlNJT05fQVg4ODI3OVx0XHQ9IDB4NyxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGF4ODgxNzlfZGF0YSB7XG4gXHR1OCAgZWVlX2VuYWJsZWQ7XG4gXHR1OCAgZWVlX2FjdGl2ZTtcbkBAIC0xNzQsNiAmIzQzOzMwOCwxNiBAQCBzdHJ1Y3QgYXg4ODE3OV9kYXRhIHtcbiBcdHUzMiB3b2xfc3VwcG9ydGVkO1xuIFx0dTMyIHdvbG9wdHM7XG4gXHR1OCBkaXNjb25uZWN0aW5nO1xuJiM0MztcdHU4IGNoaXBfdmVyc2lvbjtcbiYjNDM7XHR1OCBmd192ZXJzaW9uWzRdO1xuJiM0MztcdHU4IGlzX2F4ODg3NzJkO1xuJiM0MztcdHU4IGlwX2FsaWduO1xuJiM0MztcdHU4IGxpbms7XG4mIzQzO1x0dTggc3BlZWQ7XG4mIzQzO1x0dTggZnVsbF9kdXBsZXg7XG4mIzQzO1x0dTggcnhfY2hlY2tzdW07XG4mIzQzO1x0dTggZWVwcm9tX3JlYWRfY21kO1xuJiM0MztcdHUxNiBlZXByb21fYmxvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgYXg4ODE3OV9pbnRfZGF0YSB7XG5AQCAtMTgxLDE1ICYjNDM7MzI1LDQ4IEBAIHN0cnVjdCBheDg4MTc5X2ludF9kYXRhIHtcbiBcdF9fbGUzMiBpbnRkYXRhMjtcbiB9O1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuJiM0MztzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIHtcbiBcdHVuc2lnbmVkIGNoYXIgY3RybCwgdGltZXJfbCwgdGltZXJfaCwgc2l6ZSwgaWZnO1xuLX0gQVg4ODE3OV9CVUxLSU5fU0laRVtdID1cdHtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIEFYODgxNzlfQlVMS0lOX1NJWkVbXSA9XHR7XG4gXHR7NywgMHg0ZiwgMCxcdDB4MTIsIDB4ZmZ9LFxuIFx0ezcsIDB4MjAsIDMsXHQweDE2LCAweGZmfSxcbiBcdHs3LCAweGFlLCA3LFx0MHgxOCwgMHhmZn0sXG4gXHR7NywgMHhjYywgMHg0YywgMHgxOCwgOH0sXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODE3OUFfQlVMS0lOX1NJWkVbXSA9IHtcbiYjNDM7XHR7NSwgMHg3QiwgMHgwMCxcdDB4MTcsIDB4MEZ9LFx0LyogMUcsIFNTICovXG4mIzQzO1x0ezUsIDB4QzAsIDB4MDIsXHQweDA2LCAweDBGfSxcdC8qIDFHLCBIUyAqL1xuJiM0MztcdHs3LCAweEYwLCAweDAwLFx0MHgwQywgMHgwRn0sXHQvKiAxMDBNLCBGdWxsLCBTUyAqL1xuJiM0MztcdHs2LCAweDAwLCAweDAwLFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBIYWxmLCBTUyAqL1xuJiM0MztcdHs1LCAweEMwLCAweDA0LFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBGdWxsLCBIUyAqL1xuJiM0MztcdHs3LCAweEMwLCAweDA0LFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBIYWxmLCBIUyAqL1xuJiM0MztcdHs3LCAweDAwLCAweDAwLFx0MHgwMywgMHgzRn0sXHQvKiBGUyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODc3MkRfQlVMS0lOX1NJWkVbXSA9IHtcbiYjNDM7XHR7MCwgMHgwMCwgMHgwMCxcdDB4MDAsIDB4MDB9LFx0LyogMUcsIFNTICh1bnVzZWQpICovXG4mIzQzO1x0ezAsIDB4MDAsIDB4MDAsXHQweDAwLCAweDAwfSxcdC8qIDFHLCBIUyAodW51c2VkKSAqL1xuJiM0MztcdHswLCAweDAwLCAweDAwLFx0MHgwMCwgMHgwMH0sXHQvKiAxMDBNLCBGdWxsLCBTUyAodW51c2VkKSAqL1xuJiM0MztcdHswLCAweDAwLCAweDAwLFx0MHgwMCwgMHgwMH0sXHQvKiAxMDBNLCBIYWxmLCBTUyAodW51c2VkKSAqL1xuJiM0MztcdHs1LCAweEMwLCAweDA0LFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBGdWxsLCBIUyAqL1xuJiM0MztcdHs3LCAweEMwLCAweDA0LFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBIYWxmLCBIUyAqL1xuJiM0MztcdHs3LCAweDAwLCAweDAwLFx0MHgwMywgMHgzRn0sXHQvKiBGUyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODI3OV9CVUxLSU5fU0laRVtdID0ge1xuJiM0MztcdHs1LCAweDEwLCAweDAxLFx0MHgxMSwgMHgwRn0sXHQvKiAyLjVHICovXG4mIzQzO1x0ezcsIDB4QjMsIDB4MDEsXHQweDExLCAweDBGfSxcdC8qIDFHLCBTUyAqL1xuJiM0MztcdHs3LCAweEMwLCAweDAyLFx0MHgwNiwgMHgwRn0sXHQvKiAxRywgSFMgKi9cbiYjNDM7XHR7NywgMHg4MCwgMHgwMSxcdDB4MDMsIDB4MEZ9LFx0LyogMTAwTSwgRnVsbCwgU1MgKi9cbiYjNDM7XHR7NywgMHg4MCwgMHgwMSxcdDB4MDMsIDB4MEZ9LFx0LyogMTAwTSwgSGFsZiwgU1MgKi9cbiYjNDM7XHR7NywgMHg4MCwgMHgwMSxcdDB4MDMsIDB4MEZ9LFx0LyogMTAwTSwgRnVsbCwgSFMgKi9cbiYjNDM7XHR7NywgMHg4MCwgMHgwMSxcdDB4MDMsIDB4MEZ9LFx0LyogMTAwTSwgSGFsZiwgSFMgKi9cbiYjNDM7XHR7NywgMHgwMCwgMHgwMCxcdDB4MDMsIDB4M0Z9LFx0LyogRlMgKi9cbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgYXg4ODE3OV9zZXRfcG1fbW9kZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGJvb2wgcG1fbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuQEAgLTMxMyw2ICYjNDM7NDkwLDcgQEAgc3RhdGljIGludCBheDg4MTc5X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXG4gXG4gc3RhdGljIHZvaWQgYXg4ODE3OV9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpXG4ge1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXHRzdHJ1Y3QgYXg4ODE3OV9pbnRfZGF0YSAqZXZlbnQ7XG4gXHR1MzIgbGluaztcbiBcbkBAIC0zMjMsNiAmIzQzOzUwMSw5IEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKVxuIFx0bGUzMl90b19jcHVzKCh2b2lkICopXHUwMDI2ZXZlbnQtXHUwMDNlaW50ZGF0YTEpO1xuIFxuIFx0bGluayA9ICgoKF9fZm9yY2UgdTMyKWV2ZW50LVx1MDAzZWludGRhdGExKSBcdTAwMjYgQVhfSU5UX1BQTFNfTElOSykgXHUwMDNlXHUwMDNlIDE2O1xuJiM0MztcdGRhdGEtXHUwMDNlc3BlZWQgPSAoKChfX2ZvcmNlIHUzMilldmVudC1cdTAwM2VpbnRkYXRhMSkgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweDc7XG4mIzQzO1x0ZGF0YS1cdTAwM2VmdWxsX2R1cGxleCA9ICgoKF9fZm9yY2UgdTMyKWV2ZW50LVx1MDAzZWludGRhdGExKSBcdTAwM2VcdTAwM2UgMTIpIFx1MDAyNiAweDE7XG4mIzQzO1x0ZGF0YS1cdTAwM2VsaW5rID0gbGluaztcbiBcbiBcdGlmIChuZXRpZl9jYXJyaWVyX29rKGRldi1cdTAwM2VuZXQpICE9IGxpbmspIHtcbiBcdFx0dXNibmV0X2xpbmtfY2hhbmdlKGRldiwgbGluaywgMSk7XG5AQCAtNDAzLDYgJiM0Mzs1ODQsMzIgQEAgYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHBydGFkLCB1MTYgZGV2YWQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYXhfcmVhZF9tbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgZGV2X2FkZHIsIHUxNiByZWcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuJiM0MztcdHUxNiByZXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuJiM0MztcdFx0cmV0ID0gYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYODgxNzlBX1BIWV9DTEFVU0U0NSwgZGV2X2FkZHIsIHJlZywgMiwgXHUwMDI2cmVzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgcmVnLCBkZXZfYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYXhfd3JpdGVfbW1kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IGRldl9hZGRyLCB1MTYgcmVnLCB1MTYgZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4mIzQzO1x0XHRyZXR1cm4gYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfQ0xBVVNFNDUsIGRldl9hZGRyLCByZWcsIDIsIFx1MDAyNmRhdGEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KGRldiwgcmVnLCBkZXZfYWRkciwgZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBheDg4MTc5X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG5AQCAtNDE0LDcgJiM0Mzs2MjEsNiBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXG4gXG4gXHR1c2JuZXRfc3VzcGVuZChpbnRmLCBtZXNzYWdlKTtcbiBcbi1cdC8qIEVuYWJsZSBXb0wgKi9cbiBcdGlmIChwcml2LVx1MDAzZXdvbG9wdHMpIHtcbiBcdFx0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELFxuIFx0XHRcdFx0IDEsIDEsIFx1MDAyNnRtcDgpO1xuQEAgLTQyNSw2ICYjNDM7NjMxLDI2IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbiBcbiBcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NT05JVE9SX01PRCxcbiBcdFx0XHRcdCAgMSwgMSwgXHUwMDI2dG1wOCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuJiM0MztcdFx0XHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcdTAwMjZ0bXAxNik7XG4mIzQzO1x0XHRcdHRtcDE2IHw9IEFYX01FRElVTV9SRUNFSVZFX0VOO1xuJiM0MztcdFx0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwgMiwgMiwgXHUwMDI2dG1wMTYpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpXG4mIzQzO1x0XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfV0FLRVVQX1NFVFRJTkcsIDgsXG4mIzQzO1x0XHRcdFx0XHQgIEVQSFlfTE9XX1BPV0VSX0VOIHwgUzVfV09MX0VOXG4mIzQzO1x0XHRcdFx0XHQgIHwgUzVfV09MX0xPV19QT1dFUiB8IDB4ODAwMCwgMCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdH0gZWxzZSBpZiAocHJpdi1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1dBS0VVUF9TRVRUSU5HLCA4LCAweDgwMDAsIDAsIE5VTEwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9XQUtFVVBfU0VUVElORywgMCwgRVBIWV9MT1dfUE9XRVJfRU4sIDAsIE5VTEwpO1xuJiM0MztcdFx0YXg4ODE3OV9zZXRfcG1fbW9kZShkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0LyogRGlzYWJsZSBSWCBwYXRoICovXG5AQCAtNDM2LDExICYjNDM7NjYyLDExIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbiBcbiBcdC8qIEZvcmNlIGJ1bGstaW4gemVybyBsZW5ndGggKi9cbiBcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLFxuLVx0XHRcdCAyLCAyLCBcdTAwMjZ0bXAxNik7XG4mIzQzO1x0XHRcdDIsIDIsIFx1MDAyNnRtcDE2KTtcbiBcbiBcdHRtcDE2IHw9IEFYX1BIWVBXUl9SU1RDVExfQlogfCBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7XG4gXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsXG4tXHRcdFx0ICAyLCAyLCBcdTAwMjZ0bXAxNik7XG4mIzQzO1x0XHRcdDIsIDIsIFx1MDAyNnRtcDE2KTtcbiBcbiBcdC8qIGNoYW5nZSBjbG9jayAqL1xuIFx0dG1wOCA9IDA7XG5AQCAtNDU2LDEyICYjNDM7NjgyLDE5IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbiB9XG4gXG4gLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgYXV0b2RldGFjaCBmdW5jdGlvbi4gKi9cbi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYnkgb2Zmc2V0IDB4NDMgb2YgRUVQUk9NICovXG4mIzQzOy8qIFRoaXMgZnVuY3Rpb24gaXMgZGV0ZXJtaW5lZCBieSBvZmZzZXQgMHg0MyBvZiBFRVBST00gZm9yIHRoZSBBWDg4MTc5ICovXG4gc3RhdGljIGludCBheDg4MTc5X2F1dG9fZGV0YWNoKHN0cnVjdCB1c2JuZXQgKmRldilcbiB7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiBcdHUxNiB0bXAxNjtcbiBcdHU4IHRtcDg7XG4gXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuJiM0MztcdFx0dG1wMTYgPSBBWDg4MTc5QV9BVVRPREVUQUNIX0RFTEFZO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9BVVRPREVUQUNILCB0bXAxNiwgMCwgMCwgTlVMTCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfRUVQUk9NLCAweDQzLCAxLCAyLCBcdTAwMjZ0bXAxNikgXHUwMDNjIDApXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTQ4NCwxMSAmIzQzOzcxNywzMSBAQCBzdGF0aWMgaW50IGF4ODgxNzlfYXV0b19kZXRhY2goc3RydWN0IHVzYm5ldCAqZGV2KVxuIHN0YXRpYyBpbnQgYXg4ODE3OV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4ge1xuIFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhO1xuJiM0MztcdHU4IHJlZzg7XG4gXG4mIzQzO1x0YXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiBcdGF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCB0cnVlKTtcbiBcbiBcdHVzYm5ldF9saW5rX2NoYW5nZShkZXYsIDAsIDApO1xuIFxuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbiYjNDM7XHRcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnJlZzgpO1xuJiM0MztcdFx0aWYgKCEocmVnOCBcdTAwMjYgQVhfUEhZX1BPV0VSKSkge1xuJiM0MztcdFx0XHRyZWc4ID0gQVhfUEhZX1BPV0VSO1xuJiM0MztcdFx0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgXHUwMDI2cmVnOCk7XG4mIzQzO1x0XHRcdG1zbGVlcCgyNTApO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9GV19NT0RFLCBBWF9GV19NT0RFXzE3OUEsIDAsIDAsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRcdC8qIE5vdywgdGhhdCBBWF9GV19NT0RFXzE3OUEgaXMgZW5hYmxlZCwgdGhlIFBIWSBuZWVkcyBhIHBvd2VyLWN5Y2xlLlxuJiM0MztcdFx0ICogUEhZLXBvd2VyIGlzIHJlLWVuYWJsZWQgaW4gYXg4ODE3OV9yZXNldCgpXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJlZzggPSAwO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnJlZzgpO1xuJiM0MztcdFx0bXNsZWVwKDI1MCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGF4ODgxNzlfcmVzZXQoZGV2KTtcbiBcbiBcdGF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCBmYWxzZSk7XG5AQCAtNTEwLDYgJiM0Mzs3NjMsMjEgQEAgc3RhdGljIHZvaWQgYXg4ODE3OV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0dXNibmV0X2Rpc2Nvbm5lY3QoaW50Zik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBheDg4MTc5X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4mIzQzO1xuJiM0MztcdC8qIEluaGVyaXQgc3RhbmRhcmQgZGV2aWNlIGluZm8gKi9cbiYjNDM7XHR1c2JuZXRfZ2V0X2RydmluZm8obmV0LCBpbmZvKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGluZm8tXHUwMDNlZndfdmVyc2lvbiwgc2l6ZW9mKGluZm8tXHUwMDNlZndfdmVyc2lvbiksIFwmIzM0OyVkLiVkLiVkLiVkXCYjMzQ7LFxuJiM0MztcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvblswXSwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uWzFdLFxuJiM0MztcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvblsyXSwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uWzNdKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIGF4ODgxNzlfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKVxuIHtcbkBAIC01MzYsNDEgJiM0Mzs4MDQsNzQgQEAgYXg4ODE3OV9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pXG4gXG4gc3RhdGljIGludCBheDg4MTc5X2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG4ge1xuLVx0cmV0dXJuIEFYX0VFUFJPTV9MRU47XG4mIzQzO1x0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhO1xuJiM0MztcbiYjNDM7XHRheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4mIzQzO1x0XHRyZXR1cm4gQVhfRUVQUk9NX0xFTjtcbiYjNDM7XHRlbHNlIGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSlcbiYjNDM7XHRcdHJldHVybiBBWDg4Mjc5X0VFUFJPTV9MRU47XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIEFYODgxNzlBX0VFUFJPTV9MRU47XG4gfVxuIFxuLXN0YXRpYyBpbnRcbi1heDg4MTc5X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXG4tXHRcdCAgIHU4ICpkYXRhKVxuJiM0MztzdGF0aWMgdm9pZFxuJiM0MztheDg4MTc5X2VlcHJvbV9hY2Nlc3NfcGFyYW1zKHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEsIGludCBpLCB1MTYgKnZhbHVlLCB1MTYgKmlkeClcbiYjNDM7e1xuJiM0MztcdC8qIEFYODgxNzkgaGFzIGEgd29yZC1hZGRyZXNzYWJsZSBFRVBST01cbiYjNDM7XHQgKiBBWDg4MTc5QSB1c2VzIEVGVVNFUyB3aXRoIDIwIGJ5dGVzIGxlbmd0aFxuJiM0MztcdCAqIEFYODgyNzkgaGFzIGFuIEVFUFJPTSBhZGRyZXNzYWJsZSBpbiAyNTYgYnl0ZSBibG9ja3NcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbiYjNDM7XHRcdCp2YWx1ZSA9IGk7XG4mIzQzO1x0XHQqaWR4ID0gMTtcbiYjNDM7XHR9IGVsc2UgaWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHQqdmFsdWUgPSAoaSAqIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrKSBcdTAwM2VcdTAwM2UgMTY7XG4mIzQzO1x0XHQqaWR4ID0gKGkgKiBheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9ibG9jaykgXHUwMDI2IDB4ZmZmZjtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0KnZhbHVlID0gaSBcdTAwM2NcdTAwM2MgNDtcbiYjNDM7XHRcdCppZHggPSAwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBheDg4MTc5X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4tXHR1MTYgKmVlcHJvbV9idWZmO1xuLVx0aW50IGZpcnN0X3dvcmQsIGxhc3Rfd29yZDtcbi1cdGludCBpLCByZXQ7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTtcbiYjNDM7XHRpbnQgZmlyc3QsIGxhc3QsIGksIHJldDtcbiYjNDM7XHR1OCAqZWVwcm9tX2J1ZmY7XG4mIzQzO1xuJiM0MztcdGF4MTc5X2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXG4gXHRpZiAoZWVwcm9tLVx1MDAzZWxlbiA9PSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGVlcHJvbS1cdTAwM2VtYWdpYyA9IEFYODgxNzlfRUVQUk9NX01BR0lDO1xuIFxuLVx0Zmlyc3Rfd29yZCA9IGVlcHJvbS1cdTAwM2VvZmZzZXQgXHUwMDNlXHUwMDNlIDE7XG4tXHRsYXN0X3dvcmQgPSAoZWVwcm9tLVx1MDAzZW9mZnNldCAmIzQzOyBlZXByb20tXHUwMDNlbGVuIC0gMSkgXHUwMDNlXHUwMDNlIDE7XG4tXHRlZXByb21fYnVmZiA9IGttYWxsb2NfYXJyYXkobGFzdF93b3JkIC0gZmlyc3Rfd29yZCAmIzQzOyAxLCBzaXplb2YodTE2KSxcbi1cdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRmaXJzdCA9IGVlcHJvbS1cdTAwM2VvZmZzZXQgLyBheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9ibG9jaztcbiYjNDM7XHRsYXN0ID0gKGVlcHJvbS1cdTAwM2VvZmZzZXQgJiM0MzsgZWVwcm9tLVx1MDAzZWxlbiAtIDEpIC8gYXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2s7XG4mIzQzO1xuJiM0MztcdGVlcHJvbV9idWZmID0ga3phbGxvYygobGFzdCAtIGZpcnN0ICYjNDM7IDEpICogYXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2ssIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFlZXByb21fYnVmZilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHQvKiBheDg4MTc5LzE3OEEgcmV0dXJucyAyIGJ5dGVzIGZyb20gZWVwcm9tIG9uIHJlYWQgKi9cbi1cdGZvciAoaSA9IGZpcnN0X3dvcmQ7IGkgXHUwMDNjPSBsYXN0X3dvcmQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJldCA9IF9fYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19FRVBST00sIGksIDEsIDIsXG4tXHRcdFx0XHRcdCBcdTAwMjZlZXByb21fYnVmZltpIC0gZmlyc3Rfd29yZF0pO1xuJiM0MztcdGZvciAoaSA9IGZpcnN0OyBpIFx1MDAzYz0gbGFzdDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUxNiB2YWx1ZSwgaWR4O1xuJiM0MztcbiYjNDM7XHRcdGF4ODgxNzlfZWVwcm9tX2FjY2Vzc19wYXJhbXMoYXgxNzlfZGF0YSwgaSwgXHUwMDI2dmFsdWUsIFx1MDAyNmlkeCk7XG4mIzQzO1x0XHRyZXQgPSBfX2F4ODgxNzlfcmVhZF9jbWQoZGV2LCBheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9yZWFkX2NtZCxcbiYjNDM7XHRcdFx0XHRcdCB2YWx1ZSwgaWR4LCBheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9ibG9jayxcbiYjNDM7XHRcdFx0XHRcdCBlZXByb21fYnVmZiAmIzQzOyAoaSAtIGZpcnN0KSAqIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrKTtcbiYjNDM7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRrZnJlZShlZXByb21fYnVmZik7XG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdH1cbiBcdH1cbiBcbi1cdG1lbWNweShkYXRhLCAodTggKillZXByb21fYnVmZiAmIzQzOyAoZWVwcm9tLVx1MDAzZW9mZnNldCBcdTAwMjYgMSksIGVlcHJvbS1cdTAwM2VsZW4pO1xuJiM0MztcdG1lbWNweShkYXRhLCBlZXByb21fYnVmZiAmIzQzOyBlZXByb20tXHUwMDNlb2Zmc2V0ICUgYXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2ssIGVlcHJvbS1cdTAwM2VsZW4pO1xuIFx0a2ZyZWUoZWVwcm9tX2J1ZmYpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTU4MCwxMiAmIzQzOzg4MSwxNyBAQCBheDg4MTc5X3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXG4gXHRcdCAgIHU4ICpkYXRhKVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTtcbiBcdHUxNiAqZWVwcm9tX2J1ZmY7XG4gXHRpbnQgZmlyc3Rfd29yZDtcbiBcdGludCBsYXN0X3dvcmQ7XG4gXHRpbnQgcmV0O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0YXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgxNzlBKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiBcdG5ldGRldl9kYmcobmV0LCBcJiMzNDt3cml0ZSBFRVBST00gbGVuICVkLCBvZmZzZXQgJWQsIG1hZ2ljIDB4JXhcXG5cJiMzNDssXG4gXHRcdCAgIGVlcHJvbS1cdTAwM2VsZW4sIGVlcHJvbS1cdTAwM2VvZmZzZXQsIGVlcHJvbS1cdTAwM2VtYWdpYyk7XG4gXG5AQCAtNjUxLDEyICYjNDM7OTU3LDM5IEBAIGF4ODgxNzlfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSxcbiB9XG4gXG4gc3RhdGljIGludCBheDg4MTc5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiB7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XG4mIzQzO1x0aW50IHY7XG4mIzQzO1xuJiM0MztcdGRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXG4gXHRtaWlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MoXHUwMDI2ZGV2LVx1MDAzZW1paSwgY21kKTtcbiBcbiYjNDM7XHRpZiAoZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcbiYjNDM7XHRcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuJiM0MztcdFx0XHRcdCBjbWQtXHUwMDNlbGlua19tb2Rlcy5zdXBwb3J0ZWQpO1xuJiM0MztcbiYjNDM7XHRcdHYgPSBheDg4MTc5X21kaW9fcmVhZChkZXYtXHUwMDNlbmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7XG4mIzQzO1x0XHRpZiAodiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHYgXHUwMDI2IEFEVkVSVElTRV9SRVNWKVxuJiM0MztcdFx0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0XHRcdCBjbWQtXHUwMDNlbGlua19tb2Rlcy5hZHZlcnRpc2luZyk7XG4mIzQzO1xuJiM0MztcdFx0diA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XG4mIzQzO1x0XHRpZiAoZGF0YS1cdTAwM2VzcGVlZCA9PSBFVEhFUl9MSU5LXzI1MDApIHtcbiYjNDM7XHRcdFx0Y21kLVx1MDAzZWJhc2Uuc3BlZWQgPSBTUEVFRF8yNTAwO1xuJiM0MztcdFx0XHQvKiBNRElPX0FOXzEwR0JUX1NUQVRfTFAyXzVHIGlzIGJyb2tlbiwgYnV0IHdlIGNhbiBkZWR1Y2UgdGhhdFxuJiM0MztcdFx0XHQgKiB0aGUgbGluay1wYXJ0bmVyIGFkdmVydGlzZWQgMjUwME0gaWYgcmVtb3RlbHkgQU4gc3VjY2NlZGVkXG4mIzQzO1x0XHRcdCAqIGZvciBsaW5rIHNwZWVkIFx1MDAzZSAxMDAwTSBhbmQgd2UgbG9jYWxseSBoYXZlIGEgbGluayBzcGVlZCBvZlxuJiM0MztcdFx0XHQgKiAyNTAwTVxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKHYgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiB2IFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfUkVNT0spXG4mIzQzO1x0XHRcdFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdFx0XHRcdCBjbWQtXHUwMDNlbGlua19tb2Rlcy5scF9hZHZlcnRpc2luZyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02NjQsMzQgJiM0Mzs5OTcsMTI4IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4ge1xuIFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhO1xuJiM0MztcdGludCB2O1xuJiM0MztcbiYjNDM7XHRkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuJiM0MztcbiYjNDM7XHQvKiBtaWlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MgaGFuZGxlcyB1bmtub3duIGJpdHMgaW4gTUlJX0FEVkVSVElTRVxuJiM0MztcdCAqIHRyYW5zcGFyZW50bHksIHNvIGZvciB0aGUgMi41R0JpdCBsaW5rIHNwZWVkIG9mIHRoZSBBWF9WRVJTSU9OX0FYODgyNzlcbiYjNDM7XHQgKiB3ZSBqdXN0IHNldCB1cCBBRFZFUlRJU0VfUkVTViBiZWZvcmUgY2FsbGluZyBtaWlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3NcbiYjNDM7XHQgKiBhdCBsZWFzdCBmb3Igc3BlZWRzIFx1MDAzYyAyNTAwXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRhdGEtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuJiM0MztcdFx0diA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xuJiM0MztcdFx0aWYgKHYgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiB2O1xuJiM0MztcbiYjNDM7XHRcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdFx0ICAgICAgY21kLVx1MDAzZWxpbmtfbW9kZXMuYWR2ZXJ0aXNpbmcpKVxuJiM0MztcdFx0XHR2IHw9IEFEVkVSVElTRV9SRVNWO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHR2IFx1MDAyNj0gfkFEVkVSVElTRV9SRVNWO1xuJiM0MztcdFx0YXg4ODE3OV9tZGlvX3dyaXRlKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIHYpO1xuJiM0MztcdFx0aWYgKGNtZC1cdTAwM2ViYXNlLnNwZWVkID09IFNQRUVEXzI1MDApXG4mIzQzO1x0XHRcdHJldHVybiBtaWlfbndheV9yZXN0YXJ0KFx1MDAyNmRldi1cdTAwM2VtaWkpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gbWlpX2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzKFx1MDAyNmRldi1cdTAwM2VtaWksIGNtZCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBheDg4MTc5YV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YTtcbiYjNDM7XHR1MTYgYm1jciwgbGNsYWR2LCBybXRhZHY7XG4mIzQzO1x0dTggY2FwO1xuJiM0MztcbiYjNDM7XHRkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGJtY3IgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi1cdTAwM2VtaWkucGh5X2lkLCBNSUlfQk1DUik7XG4mIzQzO1x0bGNsYWR2ID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7XG4mIzQzO1x0cm10YWR2ID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0xQQSk7XG4mIzQzO1xuJiM0MztcdGlmICghKGJtY3IgXHUwMDI2IEJNQ1JfQU5FTkFCTEUpKSB7XG4mIzQzO1x0XHRwYXVzZS1cdTAwM2VhdXRvbmVnID0gMDtcbiYjNDM7XHRcdHBhdXNlLVx1MDAzZXJ4X3BhdXNlID0gMDtcbiYjNDM7XHRcdHBhdXNlLVx1MDAzZXR4X3BhdXNlID0gMDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBhdXNlLVx1MDAzZWF1dG9uZWcgPSAxO1xuJiM0MztcbiYjNDM7XHRjYXAgPSBtaWlfcmVzb2x2ZV9mbG93Y3RybF9mZHgobGNsYWR2LCBybXRhZHYpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2FwIFx1MDAyNiBGTE9XX0NUUkxfUlgpXG4mIzQzO1x0XHRwYXVzZS1cdTAwM2VyeF9wYXVzZSA9IDE7XG4mIzQzO1xuJiM0MztcdGlmIChjYXAgXHUwMDI2IEZMT1dfQ1RSTF9UWClcbiYjNDM7XHRcdHBhdXNlLVx1MDAzZXR4X3BhdXNlID0gMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBheDg4MTc5YV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YTtcbiYjNDM7XHR1MTYgb2xkLCBuZXcxLCBibWNyO1xuJiM0MztcdHU4IGNhcCA9IDA7XG4mIzQzO1xuJiM0MztcdGRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChkYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Ym1jciA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAocGF1c2UtXHUwMDNlYXV0b25lZyBcdTAwMjZcdTAwMjYgIShibWNyIFx1MDAyNiBCTUNSX0FORU5BQkxFKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocGF1c2UtXHUwMDNlcnhfcGF1c2UpXG4mIzQzO1x0XHRjYXAgfD0gRkxPV19DVFJMX1JYO1xuJiM0MztcbiYjNDM7XHRpZiAocGF1c2UtXHUwMDNldHhfcGF1c2UpXG4mIzQzO1x0XHRjYXAgfD0gRkxPV19DVFJMX1RYO1xuJiM0MztcbiYjNDM7XHRvbGQgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi1cdTAwM2VtaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTtcbiYjNDM7XHRuZXcxID0gKG9sZCBcdTAwMjYgfihBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU0pKSB8XG4mIzQzO1x0XHRtaWlfYWR2ZXJ0aXNlX2Zsb3djdHJsKGNhcCk7XG4mIzQzO1x0aWYgKG9sZCAhPSBuZXcxKVxuJiM0MztcdFx0YXg4ODE3OV9tZGlvX3dyaXRlKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIG5ldzEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50XG4gYXg4ODE3OV9ldGh0b29sX2dldF9lZWUoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFx0aW50IHZhbDtcbiBcbiBcdC8qIEdldCBTdXBwb3J0ZWQgRUVFICovXG4tXHR2YWwgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsIE1ESU9fUENTX0VFRV9BQkxFLFxuLVx0XHRcdFx0XHQgICAgTURJT19NTURfUENTKTtcbiYjNDM7XHR2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX1BDUywgTURJT19QQ1NfRUVFX0FCTEUpO1xuIFx0aWYgKHZhbCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHZhbDtcbiBcdG1paV9lZWVfY2FwMV9tb2RfbGlua21vZGVfdChkYXRhLVx1MDAzZXN1cHBvcnRlZCwgdmFsKTtcbiBcbiBcdC8qIEdldCBhZHZlcnRpc2VtZW50IEVFRSAqL1xuLVx0dmFsID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LCBNRElPX0FOX0VFRV9BRFYsXG4tXHRcdFx0XHRcdCAgICBNRElPX01NRF9BTik7XG4mIzQzO1x0dmFsID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWKTtcbiBcdGlmICh2YWwgXHUwMDNjIDApXG4gXHRcdHJldHVybiB2YWw7XG4gXHRtaWlfZWVlX2NhcDFfbW9kX2xpbmttb2RlX3QoZGF0YS1cdTAwM2VhZHZlcnRpc2VkLCB2YWwpO1xuIFxuIFx0LyogR2V0IExQIGFkdmVydGlzZW1lbnQgRUVFICovXG4tXHR2YWwgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsIE1ESU9fQU5fRUVFX0xQQUJMRSxcbi1cdFx0XHRcdFx0ICAgIE1ESU9fTU1EX0FOKTtcbiYjNDM7XHR2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9MUEFCTEUpO1xuIFx0aWYgKHZhbCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHZhbDtcbiBcdG1paV9lZWVfY2FwMV9tb2RfbGlua21vZGVfdChkYXRhLVx1MDAzZWxwX2FkdmVydGlzZWQsIHZhbCk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHR2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9MUEFCTEUyKTtcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiB2YWw7XG4mIzQzO1x0XHRtaWlfZWVlX2NhcDJfbW9kX2xpbmttb2RlX2Fkdl90KGRhdGEtXHUwMDNlbHBfYWR2ZXJ0aXNlZCwgdmFsKTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzAxLDggJiM0MzsxMTI4LDcgQEAgYXg4ODE3OV9ldGh0b29sX3NldF9lZWUoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIHtcbiBcdHUxNiB0bXAxNiA9IGxpbmttb2RlX3RvX21paV9lZWVfY2FwMV90KGRhdGEtXHUwMDNlYWR2ZXJ0aXNlZCk7XG4gXG4tXHRyZXR1cm4gYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KGRldiwgTURJT19BTl9FRUVfQURWLFxuLVx0XHRcdFx0XHQgICAgICBNRElPX01NRF9BTiwgdG1wMTYpO1xuJiM0MztcdHJldHVybiBheF93cml0ZV9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWLCB0bXAxNik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGtfZWVlKHN0cnVjdCB1c2JuZXQgKmRldilcbkBAIC03MTIsNDAgJiM0MzsxMTM4LDI3IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGtfZWVlKHN0cnVjdCB1c2JuZXQgKmRldilcbiBcbiBcdG1paV9ldGh0b29sX2dzZXQoXHUwMDI2ZGV2LVx1MDAzZW1paSwgXHUwMDI2ZWNtZCk7XG4gXG4tXHRpZiAoZWNtZC5kdXBsZXggXHUwMDI2IERVUExFWF9GVUxMKSB7XG4mIzQzO1x0cHJpdi1cdTAwM2VlZWVfYWN0aXZlID0gMDtcbiYjNDM7XHRpZiAoKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzYyBBWF9WRVJTSU9OX0FYODgyNzkgXHUwMDI2XHUwMDI2IChlY21kLmR1cGxleCBcdTAwMjYgRFVQTEVYX0ZVTEwpKSB8fFxuJiM0MztcdCAgICAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwIFx1MDAyNlx1MDAyNiAoZWNtZC5kdXBsZXggXHUwMDI2IERVUExFWF9GVUxMKSkpIHtcbiBcdFx0aW50IGVlZV9scCwgZWVlX2NhcCwgZWVlX2FkdjtcbiBcdFx0dTMyIGxwLCBjYXAsIGFkdiwgc3VwcG9ydGVkID0gMDtcbiBcbi1cdFx0ZWVlX2NhcCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldixcbi1cdFx0XHRcdFx0XHRcdE1ESU9fUENTX0VFRV9BQkxFLFxuLVx0XHRcdFx0XHRcdFx0TURJT19NTURfUENTKTtcbi1cdFx0aWYgKGVlZV9jYXAgXHUwMDNjIDApIHtcbi1cdFx0XHRwcml2LVx1MDAzZWVlZV9hY3RpdmUgPSAwO1xuJiM0MztcdFx0ZWVlX2NhcCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfUENTLCBNRElPX1BDU19FRUVfQUJMRSk7XG4mIzQzO1x0XHRpZiAoZWVlX2NhcCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcbiBcdFx0Y2FwID0gbW1kX2VlZV9jYXBfdG9fZXRodG9vbF9zdXBfdChlZWVfY2FwKTtcbi1cdFx0aWYgKCFjYXApIHtcbi1cdFx0XHRwcml2LVx1MDAzZWVlZV9hY3RpdmUgPSAwO1xuJiM0MztcdFx0aWYgKCFjYXApXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4tXG4tXHRcdGVlZV9scCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldixcbi1cdFx0XHRcdFx0XHQgICAgICAgTURJT19BTl9FRUVfTFBBQkxFLFxuLVx0XHRcdFx0XHRcdCAgICAgICBNRElPX01NRF9BTik7XG4tXHRcdGlmIChlZWVfbHAgXHUwMDNjIDApIHtcbi1cdFx0XHRwcml2LVx1MDAzZWVlZV9hY3RpdmUgPSAwO1xuLVx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0fVxuIFxuLVx0XHRlZWVfYWR2ID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LFxuLVx0XHRcdFx0XHRcdFx0TURJT19BTl9FRUVfQURWLFxuLVx0XHRcdFx0XHRcdFx0TURJT19NTURfQU4pO1xuJiM0MztcdFx0ZWVlX2xwID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfTFBBQkxFKTtcbiYjNDM7XHRcdGlmIChlZWVfbHAgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuIFxuLVx0XHRpZiAoZWVlX2FkdiBcdTAwM2MgMCkge1xuLVx0XHRcdHByaXYtXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4mIzQzO1x0XHRlZWVfYWR2ID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWKTtcbiYjNDM7XHRcdGlmIChlZWVfYWR2IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdFx0YWR2ID0gbW1kX2VlZV9hZHZfdG9fZXRodG9vbF9hZHZfdChlZWVfYWR2KTtcbiBcdFx0bHAgPSBtbWRfZWVlX2Fkdl90b19ldGh0b29sX2Fkdl90KGVlZV9scCk7XG5AQCAtNzUzLDY1ICYjNDM7MTE2Niw1MyBAQCBzdGF0aWMgaW50IGF4ODgxNzlfY2hrX2VlZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gXHRcdFx0ICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgOlxuIFx0XHRcdCAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGw7XG4gXG4tXHRcdGlmICghKGxwIFx1MDAyNiBhZHYgXHUwMDI2IHN1cHBvcnRlZCkpIHtcbi1cdFx0XHRwcml2LVx1MDAzZWVlZV9hY3RpdmUgPSAwO1xuLVx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKCEobHAgXHUwMDI2IGFkdiBcdTAwMjYgc3VwcG9ydGVkKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRcdHByaXYtXHUwMDNlZWVlX2FjdGl2ZSA9IDE7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0cHJpdi1cdTAwM2VlZWVfYWN0aXZlID0gMDtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXg4ODE3OV9kaXNhYmxlX2VlZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4te1xuLVx0dTE2IHRtcDE2O1xuLVxuLVx0dG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFMztcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuLVxuLVx0dG1wMTYgPSAweDMyNDY7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuLVx0XHRcdCAgTUlJX1BIWUFERFIsIDIsIFx1MDAyNnRtcDE2KTtcbi1cbi1cdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTA7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuLVx0XHRcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFx1MDAyNnRtcDE2KTtcbi19XG4tXG4tc3RhdGljIHZvaWQgYXg4ODE3OV9lbmFibGVfZWVlKHN0cnVjdCB1c2JuZXQgKmRldilcbiYjNDM7c3RhdGljIHZvaWQgYXg4ODE3OV9lZWVfY29uZmlnKHN0cnVjdCB1c2JuZXQgKmRldiwgYm9vbCBlbmFibGUpXG4ge1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXHR1MTYgdG1wMTY7XG4gXG4tXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UzO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbi1cdFx0XHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcdTAwMjZ0bXAxNik7XG4tXG4tXHR0bXAxNiA9IDB4MzI0Nztcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBNSUlfUEhZQUREUiwgMiwgXHUwMDI2dG1wMTYpO1xuLVxuLVx0dG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFNTtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuLVxuLVx0dG1wMTYgPSAweDA2ODA7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuLVx0XHRcdCAgTUlJX0JNU1IsIDIsIFx1MDAyNnRtcDE2KTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbiYjNDM7XHRcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTM7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuJiM0MztcdFx0XHRcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFx1MDAyNnRtcDE2KTtcbiYjNDM7XG4mIzQzO1x0XHR0bXAxNiA9IGVuYWJsZSA/IDB4MzI0NyA6IDB4MzI0NjtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4mIzQzO1x0XHRcdFx0ICBNSUlfUEhZQUREUiwgMiwgXHUwMDI2dG1wMTYpO1xuJiM0MztcdFx0aWYgKGVuYWJsZSkge1xuJiM0MztcdFx0XHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0U1O1xuJiM0MztcdFx0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuJiM0MztcdFx0XHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuJiM0MztcbiYjNDM7XHRcdFx0dG1wMTYgPSAweDA2ODA7XG4mIzQzO1x0XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4mIzQzO1x0XHRcdFx0XHQgIE1JSV9CTVNSLCAyLCBcdTAwMjZ0bXAxNik7XG4mIzQzO1x0XHR9XG4gXG4tXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UwO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbi1cdFx0XHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcdTAwMjZ0bXAxNik7XG4mIzQzO1x0XHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UwO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbiYjNDM7XHRcdFx0XHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcdTAwMjZ0bXAxNik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfR1BIWV9DVEwsIEFYX0dQSFlfRUVFX0NUUkwsIGVuYWJsZSwgMCwgTlVMTCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IGF4ODgxNzlfZ2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuLVx0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFxuIFx0ZWRhdGEtXHUwMDNlZWVlX2VuYWJsZWQgPSBwcml2LVx1MDAzZWVlZV9lbmFibGVkO1xuIFx0ZWRhdGEtXHUwMDNlZWVlX2FjdGl2ZSA9IHByaXYtXHUwMDNlZWVlX2FjdGl2ZTtcbkBAIC04MjIsMTggJiM0MzsxMjIzLDIwIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxuIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4tXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXY7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdHByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4mIzQzO1xuIFx0cHJpdi1cdTAwM2VlZWVfZW5hYmxlZCA9IGVkYXRhLVx1MDAzZWVlZV9lbmFibGVkO1xuIFx0aWYgKCFwcml2LVx1MDAzZWVlZV9lbmFibGVkKSB7XG4tXHRcdGF4ODgxNzlfZGlzYWJsZV9lZWUoZGV2KTtcbiYjNDM7XHRcdGF4ODgxNzlfZWVlX2NvbmZpZyhkZXYsIGZhbHNlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHByaXYtXHUwMDNlZWVlX2VuYWJsZWQgPSBheDg4MTc5X2Noa19lZWUoZGV2KTtcbiBcdFx0aWYgKCFwcml2LVx1MDAzZWVlZV9lbmFibGVkKVxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdFx0YXg4ODE3OV9lbmFibGVfZWVlKGRldik7XG4mIzQzO1x0XHRheDg4MTc5X2VlZV9jb25maWcoZGV2LCB0cnVlKTtcbiBcdH1cbiBcbiBcdHJldCA9IGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgZWRhdGEpO1xuQEAgLTg0OCw2ICYjNDM7MTI1MSw3IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzlfZXRodG9vbF9vcHMgPSB7XG4mIzQzO1x0LmdldF9kcnZpbmZvXHRcdD0gYXg4ODE3OV9nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4gXHQuZ2V0X21zZ2xldmVsXHRcdD0gdXNibmV0X2dldF9tc2dsZXZlbCxcbiBcdC5zZXRfbXNnbGV2ZWxcdFx0PSB1c2JuZXRfc2V0X21zZ2xldmVsLFxuQEAgLTg2MSwxNiAmIzQzOzEyNjUsNzggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheDg4MTc5X2V0aHRvb2xfb3BzID0ge1xuIFx0Lm53YXlfcmVzZXRcdFx0PSB1c2JuZXRfbndheV9yZXNldCxcbiBcdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gYXg4ODE3OV9nZXRfbGlua19rc2V0dGluZ3MsXG4gXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IGF4ODgxNzlfc2V0X2xpbmtfa3NldHRpbmdzLFxuJiM0MztcdC5nZXRfcGF1c2VwYXJhbVx0XHQ9IGF4ODgxNzlhX2dldF9wYXVzZXBhcmFtLFxuJiM0MztcdC5zZXRfcGF1c2VwYXJhbVx0XHQ9IGF4ODgxNzlhX3NldF9wYXVzZXBhcmFtLFxuIFx0LmdldF90c19pbmZvXHRcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50IGF4MTc5YV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIF9fYmUxNiBwcm90bywgdTE2IHZpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4mIzQzO1x0dTggdmxhbl9jdHJsO1xuJiM0MztcdHUxNiByZWcxNjtcbiYjNDM7XHR1OCByZWc4O1xuJiM0MztcbiYjNDM7XHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZyZWc4KTtcbiYjNDM7XHR2bGFuX2N0cmwgPSByZWc4O1xuJiM0MztcbiYjNDM7XHQvKiBBZGRyZXNzICovXG4mIzQzO1x0cmVnOCA9ICh2aWQgLyAxNik7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MsIDEsIDEsIFx1MDAyNnJlZzgpO1xuJiM0MztcbiYjNDM7XHQvKiBEYXRhICovXG4mIzQzO1x0cmVnOCA9IHZsYW5fY3RybCB8IEFYX1ZMQU5fQ09OVFJPTF9SRDtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2cmVnOCk7XG4mIzQzO1xuJiM0MztcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCBcdTAwMjZyZWcxNik7XG4mIzQzO1x0cmVnMTYgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjICh2aWQgJSAxNikpO1xuJiM0MztcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMCwgMiwgMiwgXHUwMDI2cmVnMTYpO1xuJiM0MztcbiYjNDM7XHRyZWc4ID0gdmxhbl9jdHJsIHwgQVhfVkxBTl9DT05UUk9MX1dFO1xuJiM0MztcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZyZWc4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuJiM0MztcdHU4IHZsYW5fY3RybDtcbiYjNDM7XHR1MTYgcmVnMTY7XG4mIzQzO1x0dTggcmVnODtcbiYjNDM7XG4mIzQzO1x0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2cmVnOCk7XG4mIzQzO1x0dmxhbl9jdHJsID0gcmVnODtcbiYjNDM7XG4mIzQzO1x0LyogQWRkcmVzcyAqL1xuJiM0MztcdHJlZzggPSAodmlkIC8gMTYpO1xuJiM0MztcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9BRERSRVNTLCAxLCAxLCBcdTAwMjZyZWc4KTtcbiYjNDM7XG4mIzQzO1x0LyogRGF0YSAqL1xuJiM0MztcdHJlZzggPSB2bGFuX2N0cmwgfCBBWF9WTEFOX0NPTlRST0xfUkQ7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFx1MDAyNnJlZzgpO1xuJiM0MztcbiYjNDM7XHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMCwgMiwgMiwgXHUwMDI2cmVnMTYpO1xuJiM0MztcdHJlZzE2IHw9ICgxIFx1MDAzY1x1MDAzYyAodmlkICUgMTYpKTtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfREFUQTAsIDIsIDIsIFx1MDAyNnJlZzE2KTtcbiYjNDM7XG4mIzQzO1x0cmVnOCA9IHZsYW5fY3RybCB8IEFYX1ZMQU5fQ09OVFJPTF9XRTtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2cmVnOCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGF4ODgxNzlfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4tXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFx0dTggKm1fZmlsdGVyID0gKCh1OCAqKWRldi1cdTAwM2VkYXRhKTtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhO1xuJiM0MztcbiYjNDM7XHRkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFxuLVx0ZGF0YS1cdTAwM2VyeGN0bCA9IChBWF9SWF9DVExfU1RBUlQgfCBBWF9SWF9DVExfQUIgfCBBWF9SWF9DVExfSVBFKTtcbiYjNDM7XHRkYXRhLVx1MDAzZXJ4Y3RsID0gKEFYX1JYX0NUTF9TVEFSVCB8IEFYX1JYX0NUTF9BQiB8IEFYX1JYX0NUTF9EUk9QQ1JDRVJSKTtcbiYjNDM7XHRpZiAoZGF0YS1cdTAwM2VpcF9hbGlnbilcbiYjNDM7XHRcdGRhdGEtXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX0lQRTtcbiBcbiBcdGlmIChuZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSB7XG4gXHRcdGRhdGEtXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX1BSTztcbkBAIC05MDksNiAmIzQzOzEzNzUsNyBAQCBheDg4MTc5X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiB7XG4gXHR1OCB0bXA7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXHRuZXRkZXZfZmVhdHVyZXNfdCBjaGFuZ2VkID0gbmV0LVx1MDAzZWZlYXR1cmVzIF4gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9JUF9DU1VNKSB7XG5AQCAtOTI4LDYgJiM0MzsxMzk1LDM0IEBAIGF4ODgxNzlfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0XHR0bXAgXj0gQVhfUlhDT0VfSVAgfCBBWF9SWENPRV9UQ1AgfCBBWF9SWENPRV9VRFAgfFxuIFx0XHQgICAgICAgQVhfUlhDT0VfVENQVjYgfCBBWF9SWENPRV9VRFBWNjtcbiBcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWENPRV9DVEwsIDEsIDEsIFx1MDAyNnRtcCk7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZXJ4X2NoZWNrc3VtID0gISEoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfUlhDU1VNKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpIHtcbiYjNDM7XHRcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFx1MDAyNnRtcCk7XG4mIzQzO1x0XHR0bXAgXj0gQVhfVkxBTl9DT05UUk9MX1ZGRTtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZ0bXApO1xuJiM0MztcdFx0aWYgKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpIHtcbiYjNDM7XHRcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIDI1NjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHR1MTYgdG1wMTY7XG4mIzQzO1x0XHRcdFx0LyogQWRkcmVzcyAqL1xuJiM0MztcdFx0XHRcdHRtcCA9IGk7XG4mIzQzO1x0XHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MsXG4mIzQzO1x0XHRcdFx0XHRcdCAgMSwgMSwgXHUwMDI2dG1wKTtcbiYjNDM7XHRcdFx0XHQvKiBEYXRhICovXG4mIzQzO1x0XHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLFxuJiM0MztcdFx0XHRcdFx0XHQgIDIsIDIsIFx1MDAyNnRtcDE2KTtcbiYjNDM7XHRcdFx0XHR0bXAgPSBBWF9WTEFOX0NPTlRST0xfV0U7XG4mIzQzO1x0XHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsXG4mIzQzO1x0XHRcdFx0XHRcdCAgMSwgMSwgXHUwMDI2dG1wKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYKSB7XG4mIzQzO1x0XHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZ0bXApO1xuJiM0MztcdFx0dG1wIF49IEFYX1ZMQU5fQ09OVFJPTF9WU087XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2dG1wKTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTk5NSw2ICYjNDM7MTQ5MCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXg4ODE3OV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19ldGhfaW9jdGxcdFx0PSB1c2JuZXRfbWlpX2lvY3RsLFxuIFx0Lm5kb19zZXRfcnhfbW9kZVx0PSBheDg4MTc5X3NldF9tdWx0aWNhc3QsXG4gXHQubmRvX3NldF9mZWF0dXJlc1x0PSBheDg4MTc5X3NldF9mZWF0dXJlcyxcbiYjNDM7XHQubmRvX3ZsYW5fcnhfYWRkX3ZpZFx0PSBheDE3OWFfdmxhbl9yeF9hZGRfdmlkLFxuJiM0MztcdC5uZG9fdmxhbl9yeF9raWxsX3ZpZFx0PSBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGVja19lZXByb20oc3RydWN0IHVzYm5ldCAqZGV2KVxuQEAgLTEyOTMsNiAmIzQzOzE3OTAsMTcgQEAgc3RhdGljIGludCBheDg4MTc5X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiBcbiBcdGRldi1cdTAwM2Vkcml2ZXJfcHJpdiA9IGF4MTc5X2RhdGE7XG4gXG4mIzQzO1x0cmV0ID0gYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NISVBfU1RBVFVTLFxuJiM0MztcdFx0XHQgICAgICAgMSwgMSwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9ub2RldjtcbiYjNDM7XG4mIzQzO1x0YXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPSAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDI2IDB4ZjApIFx1MDAzZVx1MDAzZSA0O1xuJiM0MztcdGF4MTc5X2RhdGEtXHUwMDNlaXNfYXg4ODc3MmQgPSAwO1xuJiM0MztcdGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPSAxO1xuJiM0MztcdGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX3JlYWRfY21kID0gQVhfQUNDRVNTX0VFUFJPTTtcbiYjNDM7XHRheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9ibG9jayA9IDI7XG4mIzQzO1xuIFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2YXg4ODE3OV9uZXRkZXZfb3BzO1xuIFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNmF4ODgxNzlfZXRodG9vbF9vcHM7XG4gXHRkZXYtXHUwMDNlbmV0LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDg7XG5AQCAtMTMxNyw2ICYjNDM7MTgyNSwxMjAgQEAgc3RhdGljIGludCBheDg4MTc5X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiBcdGF4ODgxNzlfcmVzZXQoZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX25vZGV2OlxuJiM0MztcdGtmcmVlKGF4MTc5X2RhdGEpO1xuJiM0MztcdGF4MTc5X2RhdGEgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGF4ODgxNzlhX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIGlmIHZlbmRvciBjb25maWd1cmF0aW9uICovXG4mIzQzO1x0aWYgKHVkZXYtXHUwMDNlYWN0Y29uZmlnLVx1MDAzZWRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7XG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtTd2l0Y2hpbmcgdG8gdmVuZG9yIG1vZGVcXG5cJiMzNDspO1xuJiM0MztcdFx0dXNiX2RyaXZlcl9zZXRfY29uZmlndXJhdGlvbih1ZGV2LCAxKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0YXgxNzlfZGF0YSA9IGt6YWxsb2Nfb2JqKCpheDE3OV9kYXRhKTtcbiYjNDM7XHRpZiAoIWF4MTc5X2RhdGEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZWRyaXZlcl9wcml2ID0gYXgxNzlfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NISVBfU1RBVFVTLFxuJiM0MztcdFx0XHQgICAgICAgMSwgMSwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9ub2RldjtcbiYjNDM7XG4mIzQzO1x0YXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPSAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDI2IDB4ZjApIFx1MDAzZVx1MDAzZSA0O1xuJiM0MztcdGF4MTc5X2RhdGEtXHUwMDNlaXNfYXg4ODc3MmQgPSAwO1xuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XG4mIzQzO1x0XHRpZiAodWRldi1cdTAwM2VkZXNjcmlwdG9yLmJjZERldmljZSA9PSAweDMwMClcbiYjNDM7XHRcdFx0YXgxNzlfZGF0YS1cdTAwM2Vpc19heDg4NzcyZCA9IDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgMzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9BQ0NFU1NfQkwsICgweEZEICYjNDM7IGkpLFxuJiM0MztcdFx0XHRcdCAgICAgICAxLCAxLCBcdTAwMjZheDE3OV9kYXRhLVx1MDAzZWZ3X3ZlcnNpb25baV0pO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YXgxNzlfZGF0YS1cdTAwM2Vmd192ZXJzaW9uW2ldID0gMHhmZjtcbiYjNDM7XHR9XG4mIzQzO1x0bmV0ZGV2X2luZm8oZGV2LVx1MDAzZW5ldCwgXCYjMzQ7QVg4ODE3OUEvMjc5Lzc3MkQgQ2hpcCBWZXJzaW9uOiAleCwgRlc6ICVkLiVkLiVkLiVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgIGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uLFxuJiM0MztcdFx0ICAgIGF4MTc5X2RhdGEtXHUwMDNlZndfdmVyc2lvblswXSwgYXgxNzlfZGF0YS1cdTAwM2Vmd192ZXJzaW9uWzFdLFxuJiM0MztcdFx0ICAgIGF4MTc5X2RhdGEtXHUwMDNlZndfdmVyc2lvblsyXSwgYXgxNzlfZGF0YS1cdTAwM2Vmd192ZXJzaW9uWzNdKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIEFYODgyNzkgcmVxdWlyZXMgYm90aCB0aGUgQVhfUlhfQ1RMX0lQRSBhbmQgQVhfUlhfQ1RMX0RST1BDUkNFUlJcbiYjNDM7XHQgKiBiaXRzIHNldCBpbiBBWF9SWF9DVEwgZm9yIGNyZWF0aW5nIGNvcnJlY3QgUlgtVVJCcy4gQVhfUlhfQ1RMX0RST1BDUkNFUlJcbiYjNDM7XHQgKiBpcyBhbnl3YXkgc2V0IGZvciBhbGwgY2hpcHMsIG1ha2Ugc3VyZSBBWF9SWF9DVExfSVBFIGlzIHNldCB2aWEgaXBfYWxpZ24uXG4mIzQzO1x0ICogQWxzbyBjb25maWd1cmUgZWVwcm9tIGFjY2VzcyBwYXJhbWV0ZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcbiYjNDM7XHRcdGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPSAxO1xuJiM0MztcdFx0YXgxNzlfZGF0YS1cdTAwM2VlZXByb21fcmVhZF9jbWQgPSBBWDg4MTc5QV9GTEFTSF9SRUFEO1xuJiM0MztcdFx0YXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2sgPSAyNTY7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPSAwO1xuJiM0MztcdFx0YXgxNzlfZGF0YS1cdTAwM2VlZXByb21fcmVhZF9jbWQgPSBBWF9BQ0NFU1NfRUZVUztcbiYjNDM7XHRcdGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrID0gMjA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXYtXHUwMDNlbmV0LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZheDg4MTc5X25ldGRldl9vcHM7XG4mIzQzO1x0ZGV2LVx1MDAzZW5ldC1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNmF4ODgxNzlfZXRodG9vbF9vcHM7XG4mIzQzO1x0ZGV2LVx1MDAzZW5ldC1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSA4O1xuJiM0MztcdGRldi1cdTAwM2VuZXQtXHUwMDNlbmVlZGVkX3RhaWxyb29tID0gODtcbiYjNDM7XHRkZXYtXHUwMDNlbmV0LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbiYjNDM7XHRkZXYtXHUwMDNlaGFyZF9tdHUgPSA5ICogMTAyNDtcbiYjNDM7XHRkZXYtXHUwMDNlbmV0LVx1MDAzZW1heF9tdHUgPSBkZXYtXHUwMDNlaGFyZF9tdHUgLSBkZXYtXHUwMDNlbmV0LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBNSUkgc3RydWN0dXJlICovXG4mIzQzO1x0ZGV2LVx1MDAzZW1paS5kZXYgPSBkZXYtXHUwMDNlbmV0O1xuJiM0MztcdGRldi1cdTAwM2VtaWkubWRpb19yZWFkID0gYXg4ODE3OV9tZGlvX3JlYWQ7XG4mIzQzO1x0ZGV2LVx1MDAzZW1paS5tZGlvX3dyaXRlID0gYXg4ODE3OV9tZGlvX3dyaXRlO1xuJiM0MztcdGRldi1cdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweGZmO1xuJiM0MztcdGRldi1cdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHhmZjtcbiYjNDM7XHRkZXYtXHUwMDNlbWlpLnBoeV9pZCA9IDB4MDM7XG4mIzQzO1x0aWYgKCFheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkKVxuJiM0MztcdFx0ZGV2LVx1MDAzZW1paS5zdXBwb3J0c19nbWlpID0gMTtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZW5ldC1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcbiYjNDM7XHRcdFx0ICAgICAgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfVFNPIHxcbiYjNDM7XHRcdFx0ICAgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8XG4mIzQzO1x0XHRcdCAgICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZW5ldC1cdTAwM2Vod19mZWF0dXJlcyB8PSBkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzO1xuJiM0MztcbiYjNDM7XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcbiYjNDM7XHRcdFx0XHQgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX1RTTztcbiYjNDM7XG4mIzQzO1x0bmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShkZXYtXHUwMDNlbmV0LCAxNjM4NCk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBUcmFuc21pc3Npb24gb2YgTGluayBTcGVlZCBieXRlIGluIGludGVycnVwdCBVUkIgKi9cbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0ZXX01PREUsIEFYX0ZXX01PREVfMTc5QSwgMCwgMCwgTlVMTCk7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9SRUxPQURfRUVQUk9NX0VGVVNFLCAwLCAwLCAwLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVhZCBNQUMgYWRkcmVzcyBmcm9tIERUQiBvciBBU0lYIGNoaXAgKi9cbiYjNDM7XHRheDg4MTc5X2dldF9tYWNfYWRkcihkZXYpO1xuJiM0MztcdG1lbWNweShkZXYtXHUwMDNlbmV0LVx1MDAzZXBlcm1fYWRkciwgZGV2LVx1MDAzZW5ldC1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9ub2RldjpcbiYjNDM7XHRrZnJlZShheDE3OV9kYXRhKTtcbiYjNDM7XHRheDE3OV9kYXRhID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYXg4ODE3OV91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbkBAIC0xMzM4LDYgJiM0MzsxOTYwLDIyIEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRrZnJlZShheDE3OV9kYXRhKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGF4ODgxNzlhX3VuYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiYjNDM7XHR1MTYgdG1wMTY7XG4mIzQzO1x0dTggdG1wODtcbiYjNDM7XG4mIzQzO1x0LyogQ29uZmlndXJlIFJYIGNvbnRyb2wgcmVnaXN0ZXIgPVx1MDAzZSBzdG9wIG9wZXJhdGlvbiAqL1xuJiM0MztcdHRtcDE2ID0gQVhfUlhfQ1RMX1NUT1A7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsIFx1MDAyNnRtcDE2KTtcbiYjNDM7XG4mIzQzO1x0dG1wOCA9IDA7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHRrZnJlZShheDE3OV9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIGF4ODgxNzlfcnhfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpwa3RfaGRyKVxuIHtcbkBAIC0xMzU0LDYgJiM0MzsxOTkyLDIxIEBAIGF4ODgxNzlfcnhfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpwa3RfaGRyKVxuIFx0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBheDg4MTc5YV9yeF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgcGt0X2Rlc2MpXG4mIzQzO3tcbiYjNDM7XHR1MzIgcGt0X3R5cGU7XG4mIzQzO1xuJiM0MztcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuJiM0MztcdC8qIGNoZWNrc3VtIGVycm9yIGJpdCBpcyBzZXQgKi9cbiYjNDM7XHRpZiAocGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MNF9FUlIgfHwgcGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MM19FUlIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBrdF90eXBlID0gcGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MNF9UWVBFX01BU0s7XG4mIzQzO1x0LyogSXQgbXVzdCBiZSBhIFRDUCBvciBVRFAgcGFja2V0IHdpdGggYSB2YWxpZCBjaGVja3N1bSAqL1xuJiM0MztcdGlmIChwa3RfdHlwZSA9PSBBWDE3OUFfUlhfUERfTDRfVENQIHx8IHBrdF90eXBlID09IEFYMTc5QV9SWF9QRF9MNF9VRFApXG4mIzQzO1x0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBheDg4MTc5X3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiO1xuQEAgLTE0NzIsNiAmIzQzOzIxMjUsMTIxIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYXg4ODE3OWFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiO1xuJiM0MztcdHUzMiBoZHJfb2ZmLCBwa3RfZW5kO1xuJiM0MztcdHU2NCAqcGt0X2Rlc2NfcHRyO1xuJiM0MztcdHUxNiB2bGFuX3RhZztcbiYjNDM7XHR1MTYgcGt0X2NudDtcbiYjNDM7XHR1NjQgcnhfaGRyO1xuJiM0MztcbiYjNDM7XHQvKiBTS0IgY29udGVudHMgZm9yIEFYMTc5QS1iYXNlZCBjaGlwczpcbiYjNDM7XHQgKiAgIFx1MDAzY3BhY2tldCAxXHUwMDNlXG4mIzQzO1x0ICogICAuLi5cbiYjNDM7XHQgKiAgIFx1MDAzY3BhY2tldCBOXHUwMDNlXG4mIzQzO1x0ICogICBcdTAwM2NwZXItcGFja2V0IG1ldGFkYXRhIGVudHJ5IDFcdTAwM2VcbiYjNDM7XHQgKiAgIC4uLlxuJiM0MztcdCAqICAgXHUwMDNjcGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSBOXHUwMDNlXG4mIzQzO1x0ICogICBcdTAwM2NyeF9oZHJcdTAwM2VcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHdoZXJlOlxuJiM0MztcdCAqICAgXHUwMDNjcGFja2V0IE5cdTAwM2UgY29udGFpbnMgcGt0X2xlbiBkYXRhIGJ5dGVzIGFuZCBwYWRkaW5nOlxuJiM0MztcdCAqXHRcdDIgYnl0ZXMgb2YgSVAgYWxpZ25tZW50IChvcHRpb25hbCwgZGVwZW5kcyBvbiBBWF9SWF9DVExfSVBFIGZsYWcpXG4mIzQzO1x0ICpcdFx0cGFja2V0IGRhdGEgcmVjZWl2ZWRcbiYjNDM7XHQgKlx0XHRvcHRpb25hbCBwYWRkaW5nIHRvIDgtYnl0ZXMgYm91bmRhcnlcbiYjNDM7XHQgKiAgIFx1MDAzY3Blci1wYWNrZXQgbWV0YWRhdGEgZW50cnkgTlx1MDAzZSBjb250YWlucyA4IGJ5dGVzOlxuJiM0MztcdCAqXHRcdHBrdF9sZW4gYW5kIGZpZWxkcyBBWF9SWEhEUl8qXG4mIzQzO1x0ICogICBcdTAwM2NyeC1oZHJcdTAwM2VcdGNvbnRhaW5zIDggYnl0ZXM6XG4mIzQzO1x0ICpcdFx0cGt0X2NudCBhbmQgaGRyX29mZiAob2Zmc2V0IG9mIFx1MDAzY3Blci1wYWNrZXQgbWV0YWRhdGEgZW50cnkgMVx1MDAzZSlcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHBrdF9jbnQgaXMgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHBlci1wYWNrZXQgbWV0YWRhdGEgYXJyYXkuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdGlmICghc2tiIHx8IHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihyeF9oZHIpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFJYIERlc2NyaXB0b3IgSGVhZGVyICovXG4mIzQzO1x0c2tiX3RyaW0oc2tiLCBza2ItXHUwMDNlbGVuIC0gc2l6ZW9mKHJ4X2hkcikpO1xuJiM0MztcdHJ4X2hkciA9IGxlNjRfdG9fY3B1cCgodTY0ICopc2tiX3RhaWxfcG9pbnRlcihza2IpKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgdGhlc2UgcGFja2V0cyAqL1xuJiM0MztcdGhkcl9vZmYgPSAocnhfaGRyIFx1MDAyNiBBWDE3OUFfUlhfREhfREVTQ19PRkZTRVRfTUFTSykgXHUwMDNlXHUwMDNlIEFYMTc5QV9SWF9ESF9ERVNDX09GRlNFVF9TSElGVDtcbiYjNDM7XHRwa3RfY250ID0gcnhfaGRyIFx1MDAyNiBBWDE3OUFfUlhfREhfUEtUX0NOVF9NQVNLO1xuJiM0MztcbiYjNDM7XHQvKiBDb25zaXN0ZW5jeSBjaGVjayBoZWFkZXIgcG9zaXRpb24gKi9cbiYjNDM7XHRpZiAoaGRyX29mZiAhPSBza2ItXHUwMDNlbGVuIC0gKHBrdF9jbnQgKiBzaXplb2YocnhfaGRyKSkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0LyogTWFrZSBzdXJlIHRoYXQgdGhlIGJvdW5kcyBvZiB0aGUgbWV0YWRhdGEgYXJyYXkgYXJlIGluc2lkZSB0aGUgU0tCXG4mIzQzO1x0ICogKGFuZCBpbiBmcm9udCBvZiB0aGUgY291bnRlciBhdCB0aGUgZW5kKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGt0X2NudCAqIDggJiM0MzsgaGRyX29mZiBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBQYWNrZXRzIG11c3Qgbm90IG92ZXJsYXAgdGhlIG1ldGFkYXRhIGFycmF5ICovXG4mIzQzO1x0c2tiX3RyaW0oc2tiLCBoZHJfb2ZmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwa3RfY250KVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIEdldCB0aGUgZmlyc3QgUlggcGFja2V0IGRlc2NyaXB0b3IgKi9cbiYjNDM7XHRwa3RfZGVzY19wdHIgPSAodTY0ICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGhkcl9vZmYpO1xuJiM0MztcbiYjNDM7XHRwa3RfZW5kID0gMDtcbiYjNDM7XHR3aGlsZSAocGt0X2NudC0tKSB7XG4mIzQzO1x0XHR1NjQgcGt0X2Rlc2MgPSBsZTY0X3RvX2NwdXAocGt0X2Rlc2NfcHRyKTtcbiYjNDM7XHRcdHUzMiBwa3RfbGVuX3BsdXNfcGFkZDtcbiYjNDM7XHRcdHUzMiBwa3RfbGVuO1xuJiM0MztcbiYjNDM7XHRcdHBrdF9sZW4gPSAodTMyKSgocGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MRU5fTUFTSykgXHUwMDNlXHUwMDNlIEFYMTc5QV9SWF9QRF9MRU5fU0hJRlQpXG4mIzQzO1x0XHRcdCAgLSAoYXgxNzlfZGF0YS1cdTAwM2VpcF9hbGlnbiA/IDIgOiAwKTtcbiYjNDM7XHRcdHBrdF9sZW5fcGx1c19wYWRkID0gKChwa3RfbGVuICYjNDM7IDcgJiM0MzsgKGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPyAyIDogMCkpIFx1MDAyNiAweDdGRkY4KTtcbiYjNDM7XG4mIzQzO1x0XHRwa3RfZW5kICYjNDM7PSBwa3RfbGVuX3BsdXNfcGFkZDtcbiYjNDM7XHRcdGlmIChwa3RfZW5kIFx1MDAzZSBoZHJfb2ZmIHx8IChwa3RfY250ID09IDAgXHUwMDI2XHUwMDI2IHBrdF9lbmQgIT0gaGRyX29mZikpXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwa3RfZGVzYyBcdTAwMjYgQVgxNzlBX1JYX1BEX0RST1AgfHwgIShwa3RfZGVzYyBcdTAwMjYgQVgxNzlBX1JYX1BEX1JYX09LKSB8fFxuJiM0MztcdFx0ICAgIHBrdF9sZW4gXHUwMDNlIChkZXYtXHUwMDNlaGFyZF9tdHUgJiM0MzsgQVgxNzlBX1JYX0hXX1BBRCkpIHtcbiYjNDM7XHRcdFx0c2tiX3B1bGwoc2tiLCBwa3RfbGVuX3BsdXNfcGFkZCk7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBOZXh0IFJYIFBhY2tldCBEZXNjcmlwdG9yICovXG4mIzQzO1x0XHRcdHBrdF9kZXNjX3B0ciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGF4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LVx1MDAzZW5ldCwgcGt0X2xlbik7XG4mIzQzO1x0XHRpZiAoIWF4X3NrYilcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdFx0c2tiX3B1dChheF9za2IsIHBrdF9sZW4pO1xuJiM0MztcdFx0bWVtY3B5KGF4X3NrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlZGF0YSAmIzQzOyAoYXgxNzlfZGF0YS1cdTAwM2VpcF9hbGlnbiA/IEFYMTc5QV9SWF9IV19QQUQgOiAwKSxcbiYjNDM7XHRcdCAgICAgICBwa3RfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VyeF9jaGVja3N1bSlcbiYjNDM7XHRcdFx0YXg4ODE3OWFfcnhfY2hlY2tzdW0oYXhfc2tiLCBwa3RfZGVzYyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBrdF9kZXNjIFx1MDAyNiBBWDE3OUFfUlhfUERfVkxBTikge1xuJiM0MztcdFx0XHR2bGFuX3RhZyA9IHBrdF9kZXNjIFx1MDAzZVx1MDAzZSBBWDE3OUFfUlhfUERfVkxBTl9TSElGVDtcbiYjNDM7XHRcdFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhheF9za2IsIGh0b25zKEVUSF9QXzgwMjFRKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB2bGFuX3RhZyBcdTAwMjYgVkxBTl9WSURfTUFTSyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBheF9za2IpO1xuJiM0MztcdFx0c2tiX3B1bGwoc2tiLCBwa3RfbGVuX3BsdXNfcGFkZCk7XG4mIzQzO1xuJiM0MztcdFx0LyogTmV4dCBSWCBQYWNrZXQgSGVhZGVyICovXG4mIzQzO1x0XHRwa3RfZGVzY19wdHImIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBza19idWZmICpcbiBheDg4MTc5X3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpXG4ge1xuQEAgLTE1MDUsNiAmIzQzOzIyNzMsNTkgQEAgYXg4ODE3OV90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGZsYWdzKVxuIFx0cmV0dXJuIHNrYjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG4mIzQzO2F4ODgxNzlhX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1NjQgdHhfZGVzYyA9IHNrYi1cdTAwM2VsZW4gXHUwMDI2IEFYMTc5QV9UWF9ERVNDX0xFTl9NQVNLO1xuJiM0MztcdGludCBmcmFtZV9zaXplID0gZGV2LVx1MDAzZW1heHBhY2tldDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiO1xuJiM0MztcdHU2NCAqdHhfZGVzY19wdHI7XG4mIzQzO1x0aW50IHBhZGRpbmdfc2l6ZTtcbiYjNDM7XHRpbnQgaGVhZHJvb207XG4mIzQzO1x0aW50IHRhaWxyb29tO1xuJiM0MztcdHUxNiB0Y2kgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBUU08gTVNTICovXG4mIzQzO1x0dHhfZGVzYyB8PSAoKHU2NCkoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb19zaXplIFx1MDAyNiBBWDE3OUFfVFhfREVTQ19NU1NfTUFTSykpIFx1MDAzY1x1MDAzY1xuJiM0MztcdFx0ICAgQVgxNzlBX1RYX0RFU0NfTVNTX1NISUZUO1xuJiM0MztcbiYjNDM7XHRoZWFkcm9vbSA9IChza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZih0eF9kZXNjKSkgJSA4O1xuJiM0MztcdHBhZGRpbmdfc2l6ZSA9IGhlYWRyb29tID8gOCAtIGhlYWRyb29tIDogMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCgoc2tiLVx1MDAzZWxlbiAmIzQzOyBzaXplb2YodHhfZGVzYykgJiM0MzsgcGFkZGluZ19zaXplKSAlIGZyYW1lX3NpemUpID09IDApIHtcbiYjNDM7XHRcdHBhZGRpbmdfc2l6ZSAmIzQzOz0gODtcbiYjNDM7XHRcdHR4X2Rlc2MgfD0gQVgxNzlBX1RYX0RFU0NfRFJPUF9QQUREO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKChkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCkgXHUwMDI2XHUwMDI2ICh2bGFuX2dldF90YWcoc2tiLCBcdTAwMjZ0Y2kpIFx1MDAzZT0gMCkpIHtcbiYjNDM7XHRcdHR4X2Rlc2MgfD0gQVgxNzlBX1RYX0RFU0NfVkxBTjtcbiYjNDM7XHRcdHR4X2Rlc2MgfD0gKCh1NjQpdGNpIFx1MDAyNiBBWDE3OUFfVFhfREVTQ19WTEFOX01BU0spIFx1MDAzY1x1MDAzYyBBWDE3OUFfVFhfREVTQ19WTEFOX1NISUZUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlY2FuX2RtYV9zZyBcdTAwMjZcdTAwMjYgKGRldi1cdTAwM2VuZXQtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfU0cpIFx1MDAyNlx1MDAyNiBza2JfbGluZWFyaXplKHNrYikpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aGVhZHJvb20gPSBza2JfaGVhZHJvb20oc2tiKTtcbiYjNDM7XHR0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShoZWFkcm9vbSBcdTAwM2U9IHNpemVvZih0eF9kZXNjKSBcdTAwMjZcdTAwMjYgdGFpbHJvb20gXHUwMDNlPSBwYWRkaW5nX3NpemUpKSB7XG4mIzQzO1x0XHRheF9za2IgPSBza2JfY29weV9leHBhbmQoc2tiLCBzaXplb2YodHhfZGVzYyksIHBhZGRpbmdfc2l6ZSwgZmxhZ3MpO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdHNrYiA9IGF4X3NrYjtcbiYjNDM7XHRcdGlmICghc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHBhZGRpbmdfc2l6ZSAhPSAwKVxuJiM0MztcdFx0c2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZ19zaXplKTtcbiYjNDM7XHQvKiBDb3B5IFRYIGhlYWRlciAqL1xuJiM0MztcdHR4X2Rlc2NfcHRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YodHhfZGVzYykpO1xuJiM0MztcdCp0eF9kZXNjX3B0ciA9IGNwdV90b19sZTY0KHR4X2Rlc2MpO1xuJiM0MztcbiYjNDM7XHR1c2JuZXRfc2V0X3NrYl90eF9zdGF0cyhza2IsIDEsIDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2tiO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgYXg4ODE3OV9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbiB7XG4gXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuQEAgLTE1ODAsNzMgJiM0MzsyNDAxLDM0MyBAQCBzdGF0aWMgaW50IGF4ODgxNzlfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGF4ODgxNzlhX2J1bGtpbl9jb25maWcoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBsaW5rX3N0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGF4X2J1bGtpbl9zZXR0aW5ncyAqYnVsa2luX2RhdGE7XG4mIzQzO1x0aW50IGluZGV4ID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChheDE3OV9kYXRhLVx1MDAzZXNwZWVkKSB7XG4mIzQzO1x0Y2FzZSBFVEhFUl9MSU5LXzI1MDA6XHQvKiBBWDg4Mjc5IG9ubHkgKi9cbiYjNDM7XHRcdGluZGV4ID0gMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEVUSEVSX0xJTktfMTAwMDpcdC8qIEFYODgyNzkgXHUwMDI2IEFYODgxNzhBICovXG4mIzQzO1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHRcdGlmIChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX1NTKVxuJiM0MztcdFx0XHRcdGluZGV4ID0gMTtcbiYjNDM7XHRcdFx0ZWxzZSBpZiAobGlua19zdHMgXHUwMDI2IEFYX1VTQl9IUylcbiYjNDM7XHRcdFx0XHRpbmRleCA9IDI7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRpZiAobGlua19zdHMgXHUwMDI2IEFYX1VTQl9TUylcbiYjNDM7XHRcdFx0XHRpbmRleCA9IDA7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKGxpbmtfc3RzIFx1MDAyNiBBWF9VU0JfSFMpXG4mIzQzO1x0XHRcdFx0aW5kZXggPSAxO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgRVRIRVJfTElOS18xMDA6XG4mIzQzO1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHRcdGlmIChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX1NTKVxuJiM0MztcdFx0XHRcdGluZGV4ID0gMztcbiYjNDM7XHRcdFx0ZWxzZSBpZiAobGlua19zdHMgXHUwMDI2IEFYX1VTQl9IUylcbiYjNDM7XHRcdFx0XHRpbmRleCA9IDU7XG4mIzQzO1x0XHRcdGlmICghYXgxNzlfZGF0YS1cdTAwM2VmdWxsX2R1cGxleClcbiYjNDM7XHRcdFx0XHRpbmRleCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKiBBWDg4Mjc5QSBcdTAwMjYgQVg4ODI3N0QgKi9cbiYjNDM7XHRcdFx0aWYgKGxpbmtfc3RzIFx1MDAyNiBBWF9VU0JfU1MpXG4mIzQzO1x0XHRcdFx0aW5kZXggPSAyO1xuJiM0MztcdFx0XHRlbHNlIGlmIChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX0hTKVxuJiM0MztcdFx0XHRcdGluZGV4ID0gNDtcbiYjNDM7XHRcdFx0aWYgKCFheDE3OV9kYXRhLVx1MDAzZWZ1bGxfZHVwbGV4KVxuJiM0MztcdFx0XHRcdGluZGV4JiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEVUSEVSX0xJTktfMTA6XG4mIzQzO1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KVxuJiM0MztcdFx0XHRpbmRleCA9IDc7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGluZGV4ID0gNjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRkZWZhdWx0Olx0LyogTm8gbGluayAqL1xuJiM0MztcdFx0aW5kZXggPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSBcdTAwMjZcdTAwMjYgKGxpbmtfc3RzIFx1MDAyNiBBWF9VU0JfRlMpKVxuJiM0MztcdFx0aW5kZXggPSA3O1xuJiM0MztcbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHRidWxraW5fZGF0YSA9IEFYODgyNzlfQlVMS0lOX1NJWkU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkKVxuJiM0MztcdFx0XHRidWxraW5fZGF0YSA9IEFYODg3NzJEX0JVTEtJTl9TSVpFO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRidWxraW5fZGF0YSA9IEFYODgxNzlBX0JVTEtJTl9TSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9CVUxLSU5fUUNUUkwsIDUsIDUsIFx1MDAyNmJ1bGtpbl9kYXRhW2luZGV4XSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYXg4ODE3OWFfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuJiM0MztcdHU4IHRtcDgsIGxpbmtfc3RzLCByZWc4WzNdO1xuJiM0MztcdHUxNiB0bXAxNiwgbW9kZSwgc3BlZWQ7XG4mIzQzO1xuJiM0MztcdGlmICghYXgxNzlfZGF0YS1cdTAwM2VsaW5rKSB7XG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtheDg4MTc5YSAtIExpbmsgc3RhdHVzIGlzOiAwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU3RvcCBSWC9UWCBmb3IgbGluayBjb25maWd1cmF0aW9uICovXG4mIzQzO1x0dG1wMTYgPSBBWF9SWF9DVExfU1RPUDtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXHUwMDI2dG1wMTYpO1xuJiM0MztcdHRtcDggPSAwO1xuJiM0MztcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1BBVEgsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHR0bXA4ID0gMHhhNTtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19DRENfREVMQVlfVFgsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHR0bXAxNiA9IDB4MDQxMDtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMiwgMiwgXHUwMDI2dG1wMTYpO1xuJiM0MztcbiYjNDM7XHR0bXA4ID0gMDtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX0VUSF9UWF9HQVAsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHR0bXA4ID0gMHgwNztcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX0VQNV9FSFIsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHR0bXA4ID0gMHgyOCB8IEFYX05FV19QQVVTRV9FTjtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX05FV19QQVVTRV9DVFJMLCAxLCAxLCBcdTAwMjZ0bXA4KTtcbiYjNDM7XG4mIzQzO1x0bW9kZSA9IEFYX01FRElVTV9SRUNFSVZFX0VOIHwgQVhfTUVESVVNX1RYRkxPV19DVFJMRU4gfCBBWF9NRURJVU1fUlhGTE9XX0NUUkxFTjtcbiYjNDM7XG4mIzQzO1x0LyogTGluayBpcyB1cCwgYnV0IHNvbWUgb2xkZXIgQVg4ODE3OUEgRlcgdmVyc2lvbnMgZG8gbm90IHNlbmQgbGluayBzcGVlZFxuJiM0MztcdCAqIGFuZCBkdXBsZXggc3RhdHVzIGluIGludGVycnVwdCBVUkIsIHNvIHJlYWQgaXQgdmlhIE1JSVxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghYXgxNzlfZGF0YS1cdTAwM2VzcGVlZCkge1xuJiM0MztcdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuJiM0MztcbiYjNDM7XHRcdG1paV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhcdTAwMjZkZXYtXHUwMDNlbWlpLCBcdTAwMjZjbWQpO1xuJiM0MztcdFx0YXgxNzlfZGF0YS1cdTAwM2VmdWxsX2R1cGxleCA9IGNtZC5iYXNlLmR1cGxleDtcbiYjNDM7XHRcdHN3aXRjaCAoY21kLmJhc2Uuc3BlZWQpIHtcbiYjNDM7XHRcdGNhc2UgU1BFRURfMTAwMDpcbiYjNDM7XHRcdFx0YXgxNzlfZGF0YS1cdTAwM2VzcGVlZCA9IEVUSEVSX0xJTktfMTAwMDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFNQRUVEXzEwMDpcbiYjNDM7XHRcdFx0YXgxNzlfZGF0YS1cdTAwM2VzcGVlZCA9IEVUSEVSX0xJTktfMTAwO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgU1BFRURfMTA6XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRheDE3OV9kYXRhLVx1MDAzZXNwZWVkID0gRVRIRVJfTElOS18xMDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3BlZWQgPSAwO1xuJiM0MztcdHN3aXRjaCAoYXgxNzlfZGF0YS1cdTAwM2VzcGVlZCkge1xuJiM0MztcdGNhc2UgRVRIRVJfTElOS18yNTAwOlxuJiM0MztcdFx0cmVnOFswXSA9IDB4MDA7XG4mIzQzO1x0XHRyZWc4WzFdID0gMHhGODtcbiYjNDM7XHRcdHJlZzhbMl0gPSAweDA3O1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfVFhfUEFVU0UsIDMsIDMsIHJlZzgpO1xuJiM0MztcbiYjNDM7XHRcdHJlZzhbMF0gPSAweDc4O1xuJiM0MztcdFx0cmVnOFsxXSA9IChBWF9MU09GQ19XQ05UXzdfQUNDRVNTIFx1MDAzY1x1MDAzYyA1KTtcbiYjNDM7XHRcdHJlZzhbMl0gPSAwO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfU1RBVFVTX0NEQywgMywgMywgcmVnOCk7XG4mIzQzO1xuJiM0MztcdFx0cmVnOFswXSA9IDB4NDA7XG4mIzQzO1x0XHRyZWc4WzFdID0gQVhfTUFDX01JUUZGQ1RSTF9GT1JNQVQgfCBBWF9NQUNfTUlRRkZDVFJMX0RST1BfQ1JDIHwgQVhfTUFDX0xTT19FUlJfRU47XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19SWF9EQVRBX0NEQ19DTlQsIDIsIDIsIHJlZzgpO1xuJiM0MztcbiYjNDM7XHRcdHRtcDggPSBBWF9YR01JSV9FTjtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfQkZNX0RBVEEsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHRcdHRtcDggPSAweDFDIHwgQVhfTFNPX0VOSEFOQ0VfRU47XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19MU09fRU5IQU5DRV9DVFJMLCAxLCAxLCBcdTAwMjZ0bXA4KTtcbiYjNDM7XG4mIzQzO1x0XHRtb2RlIHw9IEFYX01FRElVTV9HSUdBTU9ERSB8IEFYX01FRElVTV9GVUxMX0RVUExFWDtcbiYjNDM7XG4mIzQzO1x0XHRzcGVlZCA9IDI1MDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBFVEhFUl9MSU5LXzEwMDA6XG4mIzQzO1x0XHRtb2RlIHw9IEFYX01FRElVTV9HSUdBTU9ERTtcbiYjNDM7XHRcdHNwZWVkID0gMTAwMDtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcbiYjNDM7XHRjYXNlIEVUSEVSX0xJTktfMTAwOlxuJiM0MztcdFx0cmVnOFswXSA9IDB4Nzg7XG4mIzQzO1x0XHRyZWc4WzFdID0gKEFYX0xTT0ZDX1dDTlRfN19BQ0NFU1MgXHUwMDNjXHUwMDNjIDUpIHwgQVhfR01JSV9DUkNfQVBQRU5EO1xuJiM0MztcdFx0cmVnOFsyXSA9IDA7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19SWF9TVEFUVVNfQ0RDLCAzLCAzLCByZWc4KTtcbiYjNDM7XG4mIzQzO1x0XHR0bXA4ID0gMHg0MDtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMSwgMSwgXHUwMDI2dG1wOCk7XG4mIzQzO1xuJiM0MztcdFx0c3BlZWQgPSBzcGVlZCA/IHNwZWVkIDogMTAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgRVRIRVJfTElOS18xMDpcbiYjNDM7XHRcdHJlZzhbMF0gPSAweEZBO1xuJiM0MztcdFx0cmVnOFsxXSA9IChBWF9MU09GQ19XQ05UXzdfQUNDRVNTIFx1MDAzY1x1MDAzYyA1KSB8IEFYX0dNSUlfQ1JDX0FQUEVORDtcbiYjNDM7XHRcdHJlZzhbMl0gPSAweEZGO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfU1RBVFVTX0NEQywgMywgMywgcmVnOCk7XG4mIzQzO1xuJiM0MztcdFx0dG1wOCA9IDB4RkE7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19SWF9EQVRBX0NEQ19DTlQsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHRcdHNwZWVkID0gMTA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBQSFlTSUNBTF9MSU5LX1NUQVRVUywgMSwgMSwgXHUwMDI2bGlua19zdHMpO1xuJiM0MztcdGF4ODgxNzlhX2J1bGtpbl9jb25maWcoZGV2LCBsaW5rX3N0cyk7XG4mIzQzO1xuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHR0bXA4ID0gMDtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfQkZNX0RBVEEsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlZnVsbF9kdXBsZXgpXG4mIzQzO1x0XHRtb2RlIHw9IEFYX01FRElVTV9GVUxMX0RVUExFWDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VuZXQtXHUwMDNlbXR1IFx1MDAzZSAxNTAwKVxuJiM0MztcdFx0bW9kZSB8PSBBWF9NRURJVU1fSlVNQk9fRU47XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIFx1MDAyNm1vZGUpO1xuJiM0MztcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VyeGN0bCk7XG4mIzQzO1xuJiM0MztcdHRtcDggPSBBWF9NQUNfUlhfUEFUSF9SRUFEWSB8IEFYX01BQ19UWF9QQVRIX1JFQURZO1xuJiM0MztcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1BBVEgsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHRheDE3OV9kYXRhLVx1MDAzZWVlZV9lbmFibGVkID0gYXg4ODE3OV9jaGtfZWVlKGRldik7XG4mIzQzO1xuJiM0MztcdG5ldGlmX2NhcnJpZXJfb24oZGV2LVx1MDAzZW5ldCk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9pbmZvKGRldi1cdTAwM2VuZXQsIFwmIzM0O2F4ODgxNzlhIC0gTGluayBzdGF0dXMgaXM6IDEsIExpbmsgc3BlZWQ6ICVkLCBEdXBsZXg6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgIHNwZWVkLCBheDE3OV9kYXRhLVx1MDAzZWZ1bGxfZHVwbGV4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBheDg4MTc5X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbiB7XG4tXHR1OCBidWZbNV07XG4tXHR1MTYgKnRtcDE2O1xuLVx0dTggKnRtcDtcbiBcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXHRzdHJ1Y3QgZXRodG9vbF9rZWVlIGVlZV9kYXRhO1xuJiM0MztcdHUxNiAqdG1wMTY7XG4mIzQzO1x0dTggYnVmWzVdO1xuJiM0MztcdHU4ICp0bXA7XG4gXG4gXHR0bXAxNiA9ICh1MTYgKilidWY7XG4gXHR0bXAgPSAodTggKilidWY7XG4gXG4gXHQvKiBQb3dlciB1cCBldGhlcm5ldCBQSFkgKi9cbi1cdCp0bXAxNiA9IDA7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsIDIsIDIsIHRtcDE2KTtcbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbiYjNDM7XHRcdCp0bXAxNiA9IDA7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsIDIsIDIsIHRtcDE2KTtcbiBcbi1cdCp0bXAxNiA9IEFYX1BIWVBXUl9SU1RDVExfSVBSTDtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEhZUFdSX1JTVENUTCwgMiwgMiwgdG1wMTYpO1xuLVx0bXNsZWVwKDUwMCk7XG4mIzQzO1x0XHQqdG1wMTYgPSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsIDIsIDIsIHRtcDE2KTtcbiYjNDM7XHRcdG1zbGVlcCg1MDApO1xuIFxuLVx0KnRtcCA9IEFYX0NMS19TRUxFQ1RfQUNTIHwgQVhfQ0xLX1NFTEVDVF9CQ1M7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NMS19TRUxFQ1QsIDEsIDEsIHRtcCk7XG4tXHRtc2xlZXAoMjAwKTtcbiYjNDM7XHRcdCp0bXAgPSBBWF9DTEtfU0VMRUNUX0FDUyB8IEFYX0NMS19TRUxFQ1RfQkNTO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DTEtfU0VMRUNULCAxLCAxLCB0bXApO1xuJiM0MztcdFx0bXNsZWVwKDIwMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdCp0bXAgPSBBWF9QSFlfUE9XRVI7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgdG1wKTtcbiYjNDM7XHRcdG1zbGVlcCgyNTApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuJiM0MztcdFx0KnRtcDE2ID0gYXg4ODE3OV9tZGlvX3JlYWQoZGV2LVx1MDAzZW5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xuJiM0MztcdFx0KnRtcDE2IFx1MDAyNj0gfihBRFZFUlRJU0VfMTBGVUxMIHwgQURWRVJUSVNFXzEwSEFMRik7XG4mIzQzO1x0XHQqdG1wMTYgfD0gQURWRVJUSVNFX1JFU1Y7IC8qIEFkdmVydGlzZSAyLjVHQml0IGxpbmsgKi9cbiYjNDM7XHRcdGF4ODgxNzlfbWRpb193cml0ZShkZXYtXHUwMDNlbmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwgKnRtcDE2KTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBFdGhlcm5ldCBQSFkgQXV0byBEZXRhY2gqL1xuIFx0YXg4ODE3OV9hdXRvX2RldGFjaChkZXYpO1xuIFxuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbiYjNDM7XHRcdCp0bXAgPSBBWF9NQUNfRUZGX0VOO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQlVMS19PVVRfQ1RSTCwgMSwgMSwgdG1wKTtcbiYjNDM7XG4mIzQzO1x0XHQqdG1wMTYgPSAwO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsIHRtcDE2KTtcbiYjNDM7XG4mIzQzO1x0XHQqdG1wID0gMHgwNDtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfTE9XLCAxLCAxLCB0bXApO1xuJiM0MztcdFx0KnRtcCA9IDB4MTA7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsIDEsIDEsIHRtcCk7XG4mIzQzO1xuJiM0MztcdFx0KnRtcCA9IDA7XG4mIzQzO1x0XHRpZiAoZGV2LVx1MDAzZW5ldC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKVxuJiM0MztcdFx0XHQqdG1wIHw9IEFYX1ZMQU5fQ09OVFJPTF9WRkU7XG4mIzQzO1x0XHRpZiAoZGV2LVx1MDAzZW5ldC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlgpXG4mIzQzO1x0XHRcdCp0bXAgfD0gQVhfVkxBTl9DT05UUk9MX1ZTTztcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCB0bXApO1xuJiM0MztcbiYjNDM7XHRcdCp0bXAgPSAweGZmO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fSU5UX01BU0ssIDEsIDEsIHRtcCk7XG4mIzQzO1xuJiM0MztcdFx0KnRtcCA9IDA7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19CTV9SWF9ETUFfQ1RMLCAxLCAxLCB0bXApO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fVFhfRE1BX0NUTCwgMSwgMSwgdG1wKTtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0FSQ19DVFJMLCAxLCAxLCB0bXApO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfU1dQX0NUUkwsIDEsIDEsIHRtcCk7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19UWF9IRFJfQ0tTVU0sIDEsIDEsIHRtcCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIFJlYWQgTUFDIGFkZHJlc3MgZnJvbSBEVEIgb3IgYXNpeCBjaGlwICovXG4gXHRheDg4MTc5X2dldF9tYWNfYWRkcihkZXYpO1xuIFx0bWVtY3B5KGRldi1cdTAwM2VuZXQtXHUwMDNlcGVybV9hZGRyLCBkZXYtXHUwMDNlbmV0LVx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XG4gXG4gXHQvKiBSWCBidWxrIGNvbmZpZ3VyYXRpb24gKi9cbi1cdG1lbWNweSh0bXAsIFx1MDAyNkFYODgxNzlfQlVMS0lOX1NJWkVbMF0sIDUpO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9CVUxLSU5fUUNUUkwsIDUsIDUsIHRtcCk7XG4tXG4tXHRkZXYtXHUwMDNlcnhfdXJiX3NpemUgPSAxMDI0ICogMjA7XG4tXG4tXHQqdG1wID0gMHgzNDtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfTE9XLCAxLCAxLCB0bXApO1xuLVxuLVx0KnRtcCA9IDB4NTI7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsXG4tXHRcdFx0ICAxLCAxLCB0bXApO1xuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuJiM0MztcdFx0bWVtY3B5KHRtcCwgXHUwMDI2QVg4ODE3OV9CVUxLSU5fU0laRVswXSwgNSk7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0JVTEtJTl9RQ1RSTCwgNSwgNSwgdG1wKTtcbiYjNDM7XHRcdCp0bXAgPSAweDM0O1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QQVVTRV9XQVRFUkxWTF9MT1csIDEsIDEsIHRtcCk7XG4mIzQzO1xuJiM0MztcdFx0KnRtcCA9IDB4NTI7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsXG4mIzQzO1x0XHRcdFx0ICAxLCAxLCB0bXApO1xuJiM0MztcdFx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMTAyNCAqIDIwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBUaGUgQnVsay1SZWdpc3RlciBjb25maWd1cmF0aW9uIGZvciB0aGUgQVg4ODE3OUEgaXMgZG9uZSBpblxuJiM0MztcdFx0ICogYXg4ODE3OWFfbGlua19yZXNldCgpLCBvbmNlIHRoZSBsaW5rIGlzIHVwIGZvciBhIGdpdmVuIGxpbmsgYW5kIFVTQi1zcGVlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGF4MTc5X2RhdGEtXHUwMDNlaXNfYXg4ODc3MmQpXG4mIzQzO1x0XHRcdGRldi1cdTAwM2VyeF91cmJfc2l6ZSA9IDEwMjQgKiAyNDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMTAyNCAqIDQ4O1xuJiM0MztcdH1cbiBcbiBcdC8qIEVuYWJsZSBjaGVja3N1bSBvZmZsb2FkICovXG4gXHQqdG1wID0gQVhfUlhDT0VfSVAgfCBBWF9SWENPRV9UQ1AgfCBBWF9SWENPRV9VRFAgfFxuIFx0ICAgICAgIEFYX1JYQ09FX1RDUFY2IHwgQVhfUlhDT0VfVURQVjY7XG4gXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYQ09FX0NUTCwgMSwgMSwgdG1wKTtcbiYjNDM7XHRheDE3OV9kYXRhLVx1MDAzZXJ4X2NoZWNrc3VtID0gMTtcbiBcbiBcdCp0bXAgPSBBWF9UWENPRV9JUCB8IEFYX1RYQ09FX1RDUCB8IEFYX1RYQ09FX1VEUCB8XG4gXHQgICAgICAgQVhfVFhDT0VfVENQVjYgfCBBWF9UWENPRV9VRFBWNjtcbiBcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfVFhDT0VfQ1RMLCAxLCAxLCB0bXApO1xuIFxuIFx0LyogQ29uZmlndXJlIFJYIGNvbnRyb2wgcmVnaXN0ZXIgPVx1MDAzZSBzdGFydCBvcGVyYXRpb24gKi9cbi1cdCp0bXAxNiA9IEFYX1JYX0NUTF9EUk9QQ1JDRVJSIHwgQVhfUlhfQ1RMX0lQRSB8IEFYX1JYX0NUTF9TVEFSVCB8XG4tXHRcdCBBWF9SWF9DVExfQVAgfCBBWF9SWF9DVExfQU1BTEwgfCBBWF9SWF9DVExfQUI7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgdG1wMTYpO1xuLVxuLVx0KnRtcCA9IEFYX01PTklUT1JfTU9ERV9QTUVUWVBFIHwgQVhfTU9OSVRPUl9NT0RFX1BNRVBPTCB8XG4tXHQgICAgICAgQVhfTU9OSVRPUl9NT0RFX1JXTVA7XG4mIzQzO1x0YXgxNzlfZGF0YS1cdTAwM2VyeGN0bCA9IEFYX1JYX0NUTF9EUk9QQ1JDRVJSIHwgQVhfUlhfQ1RMX1NUQVJUIHxcbiYjNDM7XHRcdFx0ICAgIEFYX1JYX0NUTF9BUCB8IEFYX1JYX0NUTF9BTUFMTCB8IEFYX1JYX0NUTF9BQjtcbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VpcF9hbGlnbilcbiYjNDM7XHRcdGF4MTc5X2RhdGEtXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX0lQRTtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VyeGN0bCk7XG4mIzQzO1xuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSlcbiYjNDM7XHRcdCp0bXAgPSBBWF9NT05JVE9SX01PREVfUE1FVFlQRSB8IEFYX01PTklUT1JfTU9ERV9QTUVQT0wgfCBBWF9NT05JVE9SX01PREVfUldNUDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHQqdG1wID0gQVhfTU9OSVRPUl9NT0RFX1JXTVA7XG4gXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELCAxLCAxLCB0bXApO1xuIFxuIFx0LyogQ29uZmlndXJlIGRlZmF1bHQgbWVkaXVtIHR5cGUgPVx1MDAzZSBnaWdhICovXG4gXHQqdG1wMTYgPSBBWF9NRURJVU1fUkVDRUlWRV9FTiB8IEFYX01FRElVTV9UWEZMT1dfQ1RSTEVOIHxcbi1cdFx0IEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX0ZVTExfRFVQTEVYIHxcbi1cdFx0IEFYX01FRElVTV9HSUdBTU9ERTtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLFxuLVx0XHRcdCAgMiwgMiwgdG1wMTYpO1xuJiM0MztcdFx0IEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX0ZVTExfRFVQTEVYO1xuJiM0MztcdGlmICghYXgxNzlfZGF0YS1cdTAwM2Vpc19heDg4NzcyZClcbiYjNDM7XHRcdCp0bXAxNiB8PSBBWF9NRURJVU1fR0lHQU1PREU7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIHRtcDE2KTtcbiBcbiBcdC8qIENoZWNrIGlmIFdvTCBpcyBzdXBwb3J0ZWQgKi9cbiBcdGF4MTc5X2RhdGEtXHUwMDNld29sX3N1cHBvcnRlZCA9IDA7XG5AQCAtMTY1NCwxNiAmIzQzOzI3NDUsMjkgQEAgc3RhdGljIGludCBheDg4MTc5X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbiBcdFx0XHQgICAgIDEsIDEsIFx1MDAyNnRtcCkgXHUwMDNlIDApXG4gXHRcdGF4MTc5X2RhdGEtXHUwMDNld29sX3N1cHBvcnRlZCA9IFdBS0VfTUFHSUMgfCBXQUtFX1BIWTtcbiBcbi1cdGF4ODgxNzlfbGVkX3NldHRpbmcoZGV2KTtcbiYjNDM7XHQvKiBGb3IgY2hpcHMgc3RhcnRpbmcgd2l0aCBBWDg4MTc5QSwgTEVEUyBhcmUgY29uZmlndXJlZCBieSB0aGUgYWRhcHRlclxuJiM0MztcdCAqIGZpcm13YXJlIGRpcmVjdGx5IGZyb20gRUVQUk9NL0VGVVNFIHZhbHVlc1xuJiM0MztcdCAqL1xuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSlcbiYjNDM7XHRcdGF4ODgxNzlfbGVkX3NldHRpbmcoZGV2KTtcbiBcbiBcdGF4MTc5X2RhdGEtXHUwMDNlZWVlX2VuYWJsZWQgPSAwO1xuIFx0YXgxNzlfZGF0YS1cdTAwM2VlZWVfYWN0aXZlID0gMDtcbiBcbi1cdGF4ODgxNzlfZGlzYWJsZV9lZWUoZGV2KTtcbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbiYjNDM7XHRcdGF4ODgxNzlfZWVlX2NvbmZpZyhkZXYsIGZhbHNlKTtcbiBcbi1cdGF4ODgxNzlfZXRodG9vbF9nZXRfZWVlKGRldiwgXHUwMDI2ZWVlX2RhdGEpO1xuLVx0bGlua21vZGVfemVybyhlZWVfZGF0YS5hZHZlcnRpc2VkKTtcbi1cdGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgXHUwMDI2ZWVlX2RhdGEpO1xuJiM0MztcdFx0YXg4ODE3OV9ldGh0b29sX2dldF9lZWUoZGV2LCBcdTAwMjZlZWVfZGF0YSk7XG4mIzQzO1x0XHRsaW5rbW9kZV96ZXJvKGVlZV9kYXRhLmFkdmVydGlzZWQpO1xuJiM0MztcdFx0YXg4ODE3OV9ldGh0b29sX3NldF9lZWUoZGV2LCBcdTAwMjZlZWVfZGF0YSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGF4ODgxNzlfZWVlX2NvbmZpZyhkZXYsIHRydWUpO1xuJiM0MztcdFx0YXg4ODE3OV9ldGh0b29sX2dldF9lZWUoZGV2LCBcdTAwMjZlZWVfZGF0YSk7XG4mIzQzO1x0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCwgZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7XG4mIzQzO1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgyNzkpXG4mIzQzO1x0XHRcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULCBlZWVfZGF0YS5hZHZlcnRpc2VkKTtcbiYjNDM7XHRcdGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgXHUwMDI2ZWVlX2RhdGEpO1xuJiM0MztcdH1cbiBcbiBcdC8qIFJlc3RhcnQgYXV0b25lZyAqL1xuIFx0bWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbkBAIC0xNzA3LDYgJiM0MzsyODExLDI0IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBheDg4MTc5YV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldilcbiYjNDM7e1xuJiM0MztcdHUxNiByZWcxNjtcbiYjNDM7XHR1OCByZWc4O1xuJiM0MztcbiYjNDM7XHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcdTAwMjZyZWcxNik7XG4mIzQzO1x0cmVnMTYgXHUwMDI2PSB+QVhfTUVESVVNX1JFQ0VJVkVfRU47XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIFx1MDAyNnJlZzE2KTtcbiYjNDM7XG4mIzQzO1x0cmVnMTYgPSAwO1xuJiM0MztcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCBcdTAwMjZyZWcxNik7XG4mIzQzO1xuJiM0MztcdHJlZzggPSAwO1xuJiM0MztcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnJlZzgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzlfaW5mbyA9IHtcbiBcdC5kZXNjcmlwdGlvbiA9IFwmIzM0O0FTSVggQVg4ODE3OSBVU0IgMy4wIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4gXHQuYmluZCA9IGF4ODgxNzlfYmluZCxcbkBAIC0xNzMzLDYgJiM0MzsyODU1LDQ1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODE3OGFfaW5mbyA9IHtcbiBcdC50eF9maXh1cCA9IGF4ODgxNzlfdHhfZml4dXAsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTc5YV9pbmZvID0ge1xuJiM0MztcdC5kZXNjcmlwdGlvbiA9IFwmIzM0O0FTSVggQVg4ODE3OUEgVVNCIDMuMiBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdC5iaW5kID0gYXg4ODE3OWFfYmluZCxcbiYjNDM7XHQudW5iaW5kID0gYXg4ODE3OWFfdW5iaW5kLFxuJiM0MztcdC5zdGF0dXMgPSBheDg4MTc5X3N0YXR1cyxcbiYjNDM7XHQubGlua19yZXNldCA9IGF4ODgxNzlhX2xpbmtfcmVzZXQsXG4mIzQzO1x0LnJlc2V0ID0gYXg4ODE3OV9yZXNldCxcbiYjNDM7XHQuc3RvcCA9IGF4ODgxNzlhX3N0b3AsXG4mIzQzO1x0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VUIHwgRkxBR19BVk9JRF9VTkxJTktfVVJCUyxcbiYjNDM7XHQucnhfZml4dXAgPSBheDg4MTc5YV9yeF9maXh1cCxcbiYjNDM7XHQudHhfZml4dXAgPSBheDg4MTc5YV90eF9maXh1cCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODc3MmRfaW5mbyA9IHtcbiYjNDM7XHQuZGVzY3JpcHRpb24gPSBcJiMzNDtBU0lYIEFYODg3NzJEL0UgVVNCIDIuMCBGYXN0IEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdC5iaW5kID0gYXg4ODE3OWFfYmluZCxcbiYjNDM7XHQudW5iaW5kID0gYXg4ODE3OWFfdW5iaW5kLFxuJiM0MztcdC5zdGF0dXMgPSBheDg4MTc5X3N0YXR1cyxcbiYjNDM7XHQubGlua19yZXNldCA9IGF4ODgxNzlhX2xpbmtfcmVzZXQsXG4mIzQzO1x0LnJlc2V0ID0gYXg4ODE3OV9yZXNldCxcbiYjNDM7XHQuc3RvcCA9IGF4ODgxNzlhX3N0b3AsXG4mIzQzO1x0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VUIHwgRkxBR19BVk9JRF9VTkxJTktfVVJCUyxcbiYjNDM7XHQucnhfZml4dXAgPSBheDg4MTc5YV9yeF9maXh1cCxcbiYjNDM7XHQudHhfZml4dXAgPSBheDg4MTc5YV90eF9maXh1cCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODI3OV9pbmZvID0ge1xuJiM0MztcdC5kZXNjcmlwdGlvbiA9IFwmIzM0O0FTSVggQVg4ODI3OSBVU0IgMy4yIDIuNUdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4mIzQzO1x0LmJpbmQgPSBheDg4MTc5YV9iaW5kLFxuJiM0MztcdC51bmJpbmQgPSBheDg4MTc5YV91bmJpbmQsXG4mIzQzO1x0LnN0YXR1cyA9IGF4ODgxNzlfc3RhdHVzLFxuJiM0MztcdC5saW5rX3Jlc2V0ID0gYXg4ODE3OWFfbGlua19yZXNldCxcbiYjNDM7XHQucmVzZXQgPSBheDg4MTc5X3Jlc2V0LFxuJiM0MztcdC5zdG9wID0gYXg4ODE3OWFfc3RvcCxcbiYjNDM7XHQuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYIHwgRkxBR19NVUxUSV9QQUNLRVQgfCBGTEFHX0FWT0lEX1VOTElOS19VUkJTLFxuJiM0MztcdC5yeF9maXh1cCA9IGF4ODgxNzlhX3J4X2ZpeHVwLFxuJiM0MztcdC50eF9maXh1cCA9IGF4ODgxNzlhX3R4X2ZpeHVwLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGN5cHJlc3NfR1gzX2luZm8gPSB7XG4gXHQuZGVzY3JpcHRpb24gPSBcJiMzNDtDeXByZXNzIEdYMyBTdXBlclNwZWVkIHRvIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlclwmIzM0OyxcbiBcdC5iaW5kID0gYXg4ODE3OV9iaW5kLFxuQEAgLTE4NzgsNiAmIzQzOzMwMzksMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBhdF91bWMyMDAwc3BfaW5mbyA9IHtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgcHJvZHVjdHNbXSA9IHtcbiB7XG4mIzQzO1x0LyogQVNJWCBBWDg4MTc5QS9CIFVTQiAzLjIgR2lnYWJpdCBFdGhlcm5ldCAqL1xuJiM0MztcdFVTQl9ERVZJQ0VfVkVSKDB4MGI5NSwgMHgxNzkwLCAweDAyMDAsIDB4MDIwMCksXG4mIzQzO1x0LmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2YXg4ODE3OWFfaW5mbyxcbiYjNDM7fSwge1xuJiM0MztcdC8qIEFTSVggQVg4ODc3MkQgVVNCIDIuMCAxMDBNYml0IEV0aGVybmV0ICovXG4mIzQzO1x0VVNCX0RFVklDRV9WRVIoMHgwYjk1LCAweDE3OTAsIDB4MDMwMCwgMHgwMzAwKSxcbiYjNDM7XHQuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZylcdTAwMjZheDg4NzcyZF9pbmZvLFxuJiM0Mzt9LCB7XG4mIzQzO1x0LyogQVNJWCBBWDg4Mjc5IFVTQiAzLjIgMi41R0JpdCBFdGhlcm5ldCAqL1xuJiM0MztcdFVTQl9ERVZJQ0VfVkVSKDB4MGI5NSwgMHgxNzkwLCAweDA0MDAsIDB4MDQwMCksXG4mIzQzO1x0LmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2YXg4ODI3OV9pbmZvLFxuJiM0Mzt9LCB7XG4gXHQvKiBBU0lYIEFYODgxNzkgMTAvMTAwLzEwMDAgKi9cbiBcdFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGI5NSwgMHgxNzkwLCAweGZmLCAweGZmLCAwKSxcbiBcdC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKVx1MDAyNmF4ODgxNzlfaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0FYODgxNzlfMTc4QSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F4ODgxNzlhX2JpbmQmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfdW5iaW5kJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX2xpbmtfcmVzZXQmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfcnhfZml4dXAmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfdHhfZml4dXAmIzM0OywKICAgICYjMzQ7YXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZCYjMzQ7LAogICAgJiMzNDtheDE3OWFfdmxhbl9yeF9raWxsX3ZpZCYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9nZXRfcGF1c2VwYXJhbSYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9zZXRfcGF1c2VwYXJhbSYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9yeF9jaGVja3N1bSYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9idWxraW5fY29uZmlnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgbmV3IEFTSVggVVNCIEV0aGVybmV0IGNoaXBzIChBWDg4MTc5QSwgQVg4ODc3MkQsIEFYODgyNzkpIHRvIHRoZSBheDg4MTc5XzE3OGEgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiwgbGluayByZXNldCwgYW5kIHBhY2tldCBwYXJzaW5nIChyeC90eCBmaXh1cCkgbG9naWMgc3BlY2lmaWMgdG8gdGhlc2UgY2hpcHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgVVNCIGRldmljZSBiaW5kaW5nIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWMzNzc5NWJhYWI1ZGU2OGZlZWJlMzJiNGUyY2Y4YjM3ZjVhZjVhNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMTE6MDE6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMgYi9kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMKaW5kZXggOThmODk5ZWEyZTk0NjIuLjEyZmMyMGU1Zjc2ZTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jCkBAIC0xMyw5ICYjNDM7MTMsMTIgQEAKICNpbmNsdWRlICZsdDtsaW51eC91c2IvdXNibmV0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiAKICNkZWZpbmUgQVg4ODE3OV9QSFlfSUQJCQkJMHgwMwogI2RlZmluZSBBWF9FRVBST01fTEVOCQkJCTB4MTAwCiYjNDM7I2RlZmluZSBBWDg4Mjc5X0VFUFJPTV9MRU4JCQkweDQwMDAKJiM0MzsjZGVmaW5lIEFYODgxNzlBX0VFUFJPTV9MRU4JCQkoMzIgKiAyMCkKICNkZWZpbmUgQVg4ODE3OV9FRVBST01fTUFHSUMJCQkweDE3OTAwYjk1CiAjZGVmaW5lIEFYX01DQVNUX0ZMVFNJWkUJCQk4CiAjZGVmaW5lIEFYX01BWF9NQ0FTVAkJCQk2NApAQCAtMzIsMTcgJiM0MzszNSwzMyBAQAogI2RlZmluZSBBWF9BQ0NFU1NfRUVQUk9NCQkJMHgwNAogI2RlZmluZSBBWF9BQ0NFU1NfRUZVUwkJCQkweDA1CiAjZGVmaW5lIEFYX1JFTE9BRF9FRVBST01fRUZVU0UJCQkweDA2Ci0jZGVmaW5lIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gJCQkweDU0Ci0jZGVmaW5lIEFYX1BBVVNFX1dBVEVSTFZMX0xPVwkJCTB4NTUKLQomIzQzOyNkZWZpbmUgQVg4ODE3OUFfV0FLRVVQX1NFVFRJTkcJCQkweDA3CiYjNDM7I2RlZmluZSBBWF9GV19NT0RFCQkJCTB4MDgKJiM0MzsjZGVmaW5lIEFYX0dQSFlfQ1RMCQkJCTB4MEYKJiM0MzsjZGVmaW5lIEFYODgxNzlBX0ZMQVNIX1JFQUQJCQkweDIxCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9GTEFTSF9XRU4JCQkweDIyCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9GTEFTSF9XRElTCQkJMHgyMwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfV1JJVEUJCQkweDI0CiYjNDM7I2RlZmluZSBBWDg4MTc5QV9QSFlfQ0xBVVNFNDUJCQkweDI3CiYjNDM7I2RlZmluZSBBWDg4MTc5QV9GTEFTSF9FUkFTRV9TRUNUSU9OCQkweDI4CiYjNDM7I2RlZmluZSBBWDg4MTc5QV9BQ0NFU1NfQkwJCQkweDJBCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9QSFlfUE9XRVIJCQkweDMxCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNICQkJMHhDMAomIzQzOyNkZWZpbmUgQVhfUEFVU0VfV0FURVJMVkxfTE9XCQkJMHg1NAomIzQzOyNkZWZpbmUgQVhfUEFVU0VfV0FURVJMVkxfSElHSAkJCTB4NTUKJiM0MzsKJiM0MzsjZGVmaW5lIEFYX0ZXX01PREVfMTc5QQkJCQkweDAxCiAjZGVmaW5lIFBIWVNJQ0FMX0xJTktfU1RBVFVTCQkJMHgwMgogCSNkZWZpbmUJQVhfVVNCX1NTCQkweDA0CiAJI2RlZmluZQlBWF9VU0JfSFMJCTB4MDIKJiM0MzsJI2RlZmluZSBBWF9VU0JfRlMJCTB4MDEKIAogI2RlZmluZSBHRU5FUkFMX1NUQVRVUwkJCQkweDAzCiAvKiBDaGVjayBBWDg4MTc5IHZlcnNpb24uIFVBMTpCaXQyID0gMCwgIFVBMjpCaXQyID0gMSAqLwogCSNkZWZpbmUJQVhfU0VDTEQJCTB4MDQKIAomIzQzOyNkZWZpbmUgQVhfQ0hJUF9TVEFUVVMJCQkJMHgwNQomIzQzOwogI2RlZmluZSBBWF9TUk9NX0FERFIJCQkJMHgwNwogI2RlZmluZSBBWF9TUk9NX0NNRAkJCQkweDBhCiAJI2RlZmluZSBFRVBfUkQJCQkweDA0CkBAIC02Miw2ICYjNDM7ODEsMTUgQEAKIAkjZGVmaW5lIEFYX1JYX0NUTF9QUk8JCTB4MDAwMQogCSNkZWZpbmUgQVhfUlhfQ1RMX1NUT1AJCTB4MDAwMAogCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9FVEhfVFhfR0FQCQkJMHgwRAomIzQzOwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfQkZNX0RBVEEJCQkweDBFCiYjNDM7CSNkZWZpbmUgQVhfVFhfUVVFVUVfQ0ZHCQkweDAyCiYjNDM7CSNkZWZpbmUgQVhfVFhfUVVFVUVfU0VUCQkweDA4CiYjNDM7CSNkZWZpbmUgQVhfVFhfUTFfQUhCX0ZDX0VOCTB4MTAKJiM0MzsJI2RlZmluZSBBWF9UWF9RMl9BSEJfRkNfRU4JMHgyMAomIzQzOwkjZGVmaW5lIEFYX1hHTUlJX0VOCQkweDgwCiYjNDM7CiAjZGVmaW5lIEFYX05PREVfSUQJCQkJMHgxMAogI2RlZmluZSBBWF9NVUxGTFRBUlkJCQkJMHgxNgogCkBAIC05MSw3ICYjNDM7MTE5LDIxIEBACiAJI2RlZmluZSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkwJMHgwMDIwCiAJI2RlZmluZSBBWF9QSFlQV1JfUlNUQ1RMX0FUCTB4MTAwMAogCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MJCTB4MkEKJiM0MzsKJiM0MzsjZGVmaW5lIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTAkJMHgyQgomIzQzOwkjZGVmaW5lIEFYX1ZMQU5fQ09OVFJPTF9XRQkweDAwMDEKJiM0MzsJI2RlZmluZSBBWF9WTEFOX0NPTlRST0xfUkQJMHgwMDAyCiYjNDM7CSNkZWZpbmUgQVhfVkxBTl9DT05UUk9MX1ZTTwkweDAwMTAKJiM0MzsJI2RlZmluZSBBWF9WTEFOX0NPTlRST0xfVkZFCTB4MDAyMAomIzQzOwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMAkJCTB4MkMKJiM0MzsjZGVmaW5lIEFYODgxNzlBX1ZMQU5fSURfREFUQTEJCQkweDJECiYjNDM7CiAjZGVmaW5lIEFYX1JYX0JVTEtJTl9RQ1RSTAkJCTB4MmUKJiM0MzsKJiM0MzsjZGVmaW5lIEFYX0dQSFlfRUVFX0NUUkwJCQkweDAxCiYjNDM7CiAjZGVmaW5lIEFYX0NMS19TRUxFQ1QJCQkJMHgzMwogCSNkZWZpbmUgQVhfQ0xLX1NFTEVDVF9CQ1MJMHgwMQogCSNkZWZpbmUgQVhfQ0xLX1NFTEVDVF9BQ1MJMHgwMgpAQCAtMTExLDcgJiM0MzsxNTMsNTEgQEAKIAkjZGVmaW5lIEFYX1RYQ09FX1RDUFY2CQkweDIwCiAJI2RlZmluZSBBWF9UWENPRV9VRFBWNgkJMHg0MAogCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfQk1fSU5UX01BU0sJCTB4NDEKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19CTV9SWF9ETUFfQ1RMCQkweDQzCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfQk1fVFhfRE1BX0NUTAkJMHg0NgomIzQzOwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DREMJCTB4NkQKJiM0MzsJI2RlZmluZSBBWF9MU09GQ19XQ05UXzdfQUNDRVNTCTB4MDMKJiM0MzsJI2RlZmluZSBBWF9HTUlJX0NSQ19BUFBFTkQJMHgxMAomIzQzOwogI2RlZmluZSBBWF9MRURDVFJMCQkJCTB4NzMKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19BUkNfQ1RSTAkJCTB4OUUKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19TV1BfQ1RSTAkJCTB4QjEKJiM0MzsKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19UWF9QQVVTRQkJCTB4QjIKJiM0MzsKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19DRENfREVMQVlfVFgJCTB4QjUKJiM0MzsKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19QQVRICQkJMHhCNwomIzQzOwkjZGVmaW5lIEFYX01BQ19SWF9QQVRIX1JFQURZCTB4MDEKJiM0MzsJI2RlZmluZSBBWF9NQUNfVFhfUEFUSF9SRUFEWQkweDAyCiYjNDM7CiYjNDM7I2RlZmluZSBBWDg4MTc5QV9ORVdfUEFVU0VfQ1RSTAkJCTB4QjgKJiM0MzsJI2RlZmluZSBBWF9ORVdfUEFVU0VfRU4JCTB4MDEKJiM0MzsKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19CVUxLX09VVF9DVFJMCQkweEI5CiYjNDM7CSNkZWZpbmUgQVhfTUFDX0VGRl9FTgkJMHgwMgomIzQzOwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVAkJMHhDMAomIzQzOwkjZGVmaW5lIEFYX01BQ19MU09fRVJSX0VOCTB4MDQKJiM0MzsJI2RlZmluZSBBWF9NQUNfTUlRRkZDVFJMX0ZPUk1BVAkweDEwCiYjNDM7CSNkZWZpbmUgQVhfTUFDX01JUUZGQ1RSTF9EUk9QX0NSQyAweDIwCiYjNDM7CiYjNDM7I2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNIX0RFTEFZCSg1VUwgJmx0OyZsdDsgOCkKJiM0MzsjZGVmaW5lIEFYODgxNzlBX0FVVE9ERVRBQ0hfRU4JCTEKJiM0MzsKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19MU09fRU5IQU5DRV9DVFJMCQkweEMzCiYjNDM7CSNkZWZpbmUgQVhfTFNPX0VOSEFOQ0VfRU4JMHgwMQomIzQzOwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX1RYX0hEUl9DS1NVTQkJMHhDQwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfRVA1X0VIUgkJCTB4RjkKJiM0MzsKJiM0MzsjZGVmaW5lIEFYX1BIWV9QT1dFUgkJCQkweDAyCiYjNDM7CiYjNDM7I2RlZmluZSBFUEhZX0xPV19QT1dFUl9FTgkJCTB4MDEKJiM0MzsjZGVmaW5lIFM1X1dPTF9FTgkJCQkweDA0CiYjNDM7I2RlZmluZSBTNV9XT0xfTE9XX1BPV0VSCQkJMHgyMAogCiAjZGVmaW5lIEdNSUlfUEhZX1BIWVNSCQkJCTB4MTEKIAkjZGVmaW5lIEdNSUlfUEhZX1BIWVNSX1NNQVNLCTB4YzAwMApAQCAtMTY0LDggJiM0MzsyNTAsNTYgQEAKIAkjZGVmaW5lIEdNSUlfUEhZX1BHU0VMX1BBR0UzCTB4MDAwMwogCSNkZWZpbmUgR01JSV9QSFlfUEdTRUxfUEFHRTUJMHgwMDA1CiAKJiM0MzsvKiBUWCBEZXNjcmlwdG9yICovCiYjNDM7I2RlZmluZSBBWDE3OUFfVFhfREVTQ19MRU5fTUFTSwkJMHgxRkZGRkYKJiM0MzsjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX0RST1BfUEFERAlCSVQoMjgpCiYjNDM7I2RlZmluZSBBWDE3OUFfVFhfREVTQ19WTEFOCQlCSVQoMjkpCiYjNDM7I2RlZmluZSBBWDE3OUFfVFhfREVTQ19NU1NfTUFTSwkJMHg3RkZGCiYjNDM7I2RlZmluZSBBWDE3OUFfVFhfREVTQ19NU1NfU0hJRlQJMHgyMAomIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfVkxBTl9NQVNLCTB4RkZGRgomIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfVkxBTl9TSElGVAkweDMwCiYjNDM7CiYjNDM7LyogUlggUGFja2V0IERlc2NyaXB0b3IgKi8KJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9FUlIJCUJJVCgwKQomIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0VSUgkJQklUKDEpCiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfTDRfVFlQRV9NQVNLCTB4MUMKJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9VRFAJCTB4MDQKJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9UQ1AJCTB4MTAKJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MM19UWVBFX01BU0sJMHg2MAomIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0lQCQkweDIwCiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfTDNfSVA2CQkweDQwCiYjNDM7CiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfVkxBTgkJQklUKDEwKQomIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX1JYX09LCQlCSVQoMTEpCiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfRFJPUAkJQklUKDMxKQomIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0xFTl9NQVNLCTB4N0ZGRjAwMDAKJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MRU5fU0hJRlQJMHgxMAomIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX1ZMQU5fU0hJRlQJMHgyMAomIzQzOwomIzQzOy8qIFJYIERlc2NyaXB0b3IgaGVhZGVyICovCiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfREhfUEtUX0NOVF9NQVNLCQkweDFGRkYKJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9ESF9ERVNDX09GRlNFVF9NQVNLCTB4RkZGRkUwMDAKJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9ESF9ERVNDX09GRlNFVF9TSElGVAkweDBECiYjNDM7CiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfSFdfUEFECQkJMHgwMgomIzQzOwogc3RhdGljIGludCBheDg4MTc5X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldik7CiAKJiM0MztlbnVtIGF4X2V0aGVyX2xpbmtfc3BlZWQgewomIzQzOwlFVEhFUl9MSU5LX05PTkUgPSAwLAomIzQzOwlFVEhFUl9MSU5LXzEwICAgPSAxLAomIzQzOwlFVEhFUl9MSU5LXzEwMCAgPSAyLAomIzQzOwlFVEhFUl9MSU5LXzEwMDAgPSAzLAomIzQzOwlFVEhFUl9MSU5LXzI1MDAgPSA0LAomIzQzO307CiYjNDM7CiYjNDM7ZW51bSBheF9jaGlwX3ZlcnNpb24gewomIzQzOwlBWF9WRVJTSU9OX0lOVkFMSUQJCT0gMHgwLAomIzQzOwlBWF9WRVJTSU9OX0FYODgxNzkJCT0gMHg0LAomIzQzOwlBWF9WRVJTSU9OX0FYODgxNzlBCQk9IDB4NiwJLyogQWxzbyBBWDg4NzcyRCAqLwomIzQzOwlBWF9WRVJTSU9OX0FYODgyNzkJCT0gMHg3LAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgYXg4ODE3OV9kYXRhIHsKIAl1OCAgZWVlX2VuYWJsZWQ7CiAJdTggIGVlZV9hY3RpdmU7CkBAIC0xNzQsNiAmIzQzOzMwOCwxNiBAQCBzdHJ1Y3QgYXg4ODE3OV9kYXRhIHsKIAl1MzIgd29sX3N1cHBvcnRlZDsKIAl1MzIgd29sb3B0czsKIAl1OCBkaXNjb25uZWN0aW5nOwomIzQzOwl1OCBjaGlwX3ZlcnNpb247CiYjNDM7CXU4IGZ3X3ZlcnNpb25bNF07CiYjNDM7CXU4IGlzX2F4ODg3NzJkOwomIzQzOwl1OCBpcF9hbGlnbjsKJiM0MzsJdTggbGluazsKJiM0MzsJdTggc3BlZWQ7CiYjNDM7CXU4IGZ1bGxfZHVwbGV4OwomIzQzOwl1OCByeF9jaGVja3N1bTsKJiM0MzsJdTggZWVwcm9tX3JlYWRfY21kOwomIzQzOwl1MTYgZWVwcm9tX2Jsb2NrOwogfTsKIAogc3RydWN0IGF4ODgxNzlfaW50X2RhdGEgewpAQCAtMTgxLDE1ICYjNDM7MzI1LDQ4IEBAIHN0cnVjdCBheDg4MTc5X2ludF9kYXRhIHsKIAlfX2xlMzIgaW50ZGF0YTI7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKJiM0MztzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIHsKIAl1bnNpZ25lZCBjaGFyIGN0cmwsIHRpbWVyX2wsIHRpbWVyX2gsIHNpemUsIGlmZzsKLX0gQVg4ODE3OV9CVUxLSU5fU0laRVtdID0JewomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODE3OV9CVUxLSU5fU0laRVtdID0JewogCXs3LCAweDRmLCAwLAkweDEyLCAweGZmfSwKIAl7NywgMHgyMCwgMywJMHgxNiwgMHhmZn0sCiAJezcsIDB4YWUsIDcsCTB4MTgsIDB4ZmZ9LAogCXs3LCAweGNjLCAweDRjLCAweDE4LCA4fSwKIH07CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGF4X2J1bGtpbl9zZXR0aW5ncyBBWDg4MTc5QV9CVUxLSU5fU0laRVtdID0gewomIzQzOwl7NSwgMHg3QiwgMHgwMCwJMHgxNywgMHgwRn0sCS8qIDFHLCBTUyAqLwomIzQzOwl7NSwgMHhDMCwgMHgwMiwJMHgwNiwgMHgwRn0sCS8qIDFHLCBIUyAqLwomIzQzOwl7NywgMHhGMCwgMHgwMCwJMHgwQywgMHgwRn0sCS8qIDEwME0sIEZ1bGwsIFNTICovCiYjNDM7CXs2LCAweDAwLCAweDAwLAkweDA2LCAweDBGfSwJLyogMTAwTSwgSGFsZiwgU1MgKi8KJiM0MzsJezUsIDB4QzAsIDB4MDQsCTB4MDYsIDB4MEZ9LAkvKiAxMDBNLCBGdWxsLCBIUyAqLwomIzQzOwl7NywgMHhDMCwgMHgwNCwJMHgwNiwgMHgwRn0sCS8qIDEwME0sIEhhbGYsIEhTICovCiYjNDM7CXs3LCAweDAwLCAweDAwLAkweDAzLCAweDNGfSwJLyogRlMgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIEFYODg3NzJEX0JVTEtJTl9TSVpFW10gPSB7CiYjNDM7CXswLCAweDAwLCAweDAwLAkweDAwLCAweDAwfSwJLyogMUcsIFNTICh1bnVzZWQpICovCiYjNDM7CXswLCAweDAwLCAweDAwLAkweDAwLCAweDAwfSwJLyogMUcsIEhTICh1bnVzZWQpICovCiYjNDM7CXswLCAweDAwLCAweDAwLAkweDAwLCAweDAwfSwJLyogMTAwTSwgRnVsbCwgU1MgKHVudXNlZCkgKi8KJiM0MzsJezAsIDB4MDAsIDB4MDAsCTB4MDAsIDB4MDB9LAkvKiAxMDBNLCBIYWxmLCBTUyAodW51c2VkKSAqLwomIzQzOwl7NSwgMHhDMCwgMHgwNCwJMHgwNiwgMHgwRn0sCS8qIDEwME0sIEZ1bGwsIEhTICovCiYjNDM7CXs3LCAweEMwLCAweDA0LAkweDA2LCAweDBGfSwJLyogMTAwTSwgSGFsZiwgSFMgKi8KJiM0MzsJezcsIDB4MDAsIDB4MDAsCTB4MDMsIDB4M0Z9LAkvKiBGUyAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODI3OV9CVUxLSU5fU0laRVtdID0gewomIzQzOwl7NSwgMHgxMCwgMHgwMSwJMHgxMSwgMHgwRn0sCS8qIDIuNUcgKi8KJiM0MzsJezcsIDB4QjMsIDB4MDEsCTB4MTEsIDB4MEZ9LAkvKiAxRywgU1MgKi8KJiM0MzsJezcsIDB4QzAsIDB4MDIsCTB4MDYsIDB4MEZ9LAkvKiAxRywgSFMgKi8KJiM0MzsJezcsIDB4ODAsIDB4MDEsCTB4MDMsIDB4MEZ9LAkvKiAxMDBNLCBGdWxsLCBTUyAqLwomIzQzOwl7NywgMHg4MCwgMHgwMSwJMHgwMywgMHgwRn0sCS8qIDEwME0sIEhhbGYsIFNTICovCiYjNDM7CXs3LCAweDgwLCAweDAxLAkweDAzLCAweDBGfSwJLyogMTAwTSwgRnVsbCwgSFMgKi8KJiM0MzsJezcsIDB4ODAsIDB4MDEsCTB4MDMsIDB4MEZ9LAkvKiAxMDBNLCBIYWxmLCBIUyAqLwomIzQzOwl7NywgMHgwMCwgMHgwMCwJMHgwMywgMHgzRn0sCS8qIEZTICovCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyB2b2lkIGF4ODgxNzlfc2V0X3BtX21vZGUoc3RydWN0IHVzYm5ldCAqZGV2LCBib29sIHBtX21vZGUpCiB7CiAJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CkBAIC0zMTMsNiAmIzQzOzQ5MCw3IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAogCiBzdGF0aWMgdm9pZCBheDg4MTc5X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKIHsKJiM0MzsJc3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiAJc3RydWN0IGF4ODgxNzlfaW50X2RhdGEgKmV2ZW50OwogCXUzMiBsaW5rOwogCkBAIC0zMjMsNiAmIzQzOzUwMSw5IEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKQogCWxlMzJfdG9fY3B1cygodm9pZCAqKSZhbXA7ZXZlbnQtJmd0O2ludGRhdGExKTsKIAogCWxpbmsgPSAoKChfX2ZvcmNlIHUzMilldmVudC0mZ3Q7aW50ZGF0YTEpICZhbXA7IEFYX0lOVF9QUExTX0xJTkspICZndDsmZ3Q7IDE2OwomIzQzOwlkYXRhLSZndDtzcGVlZCA9ICgoKF9fZm9yY2UgdTMyKWV2ZW50LSZndDtpbnRkYXRhMSkgJmd0OyZndDsgOCkgJmFtcDsgMHg3OwomIzQzOwlkYXRhLSZndDtmdWxsX2R1cGxleCA9ICgoKF9fZm9yY2UgdTMyKWV2ZW50LSZndDtpbnRkYXRhMSkgJmd0OyZndDsgMTIpICZhbXA7IDB4MTsKJiM0MzsJZGF0YS0mZ3Q7bGluayA9IGxpbms7CiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYtJmd0O25ldCkgIT0gbGluaykgewogCQl1c2JuZXRfbGlua19jaGFuZ2UoZGV2LCBsaW5rLCAxKTsKQEAgLTQwMyw2ICYjNDM7NTg0LDMyIEBAIGF4ODgxNzlfcGh5X3dyaXRlX21tZF9pbmRpcmVjdChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBwcnRhZCwgdTE2IGRldmFkLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBheF9yZWFkX21tZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBkZXZfYWRkciwgdTE2IHJlZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwomIzQzOwl1MTYgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7Y2hpcF92ZXJzaW9uICZndDs9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHsKJiM0MzsJCXJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfQ0xBVVNFNDUsIGRldl9hZGRyLCByZWcsIDIsICZhbXA7cmVzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsIHJlZywgZGV2X2FkZHIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGF4X3dyaXRlX21tZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBkZXZfYWRkciwgdTE2IHJlZywgdTE2IGRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LSZndDtkcml2ZXJfcHJpdjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2NoaXBfdmVyc2lvbiAmZ3Q7PSBBWF9WRVJTSU9OX0FYODgxNzlBKQomIzQzOwkJcmV0dXJuIGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfUEhZX0NMQVVTRTQ1LCBkZXZfYWRkciwgcmVnLCAyLCAmYW1wO2RhdGEpOwomIzQzOwomIzQzOwlyZXR1cm4gYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KGRldiwgcmVnLCBkZXZfYWRkciwgZGF0YSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBheDg4MTc5X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CkBAIC00MTQsNyAmIzQzOzYyMSw2IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIAogCXVzYm5ldF9zdXNwZW5kKGludGYsIG1lc3NhZ2UpOwogCi0JLyogRW5hYmxlIFdvTCAqLwogCWlmIChwcml2LSZndDt3b2xvcHRzKSB7CiAJCWF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NT05JVE9SX01PRCwKIAkJCQkgMSwgMSwgJmFtcDt0bXA4KTsKQEAgLTQyNSw2ICYjNDM7NjMxLDI2IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIAogCQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELAogCQkJCSAgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJCWlmIChwcml2LSZndDtjaGlwX3ZlcnNpb24gJmd0Oz0gQVhfVkVSU0lPTl9BWDg4MTc5QSkgewomIzQzOwkJCWF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsICZhbXA7dG1wMTYpOwomIzQzOwkJCXRtcDE2IHw9IEFYX01FRElVTV9SRUNFSVZFX0VOOwomIzQzOwkJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCAmYW1wO3RtcDE2KTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChwcml2LSZndDtjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KQomIzQzOwkJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfV0FLRVVQX1NFVFRJTkcsIDgsCiYjNDM7CQkJCQkgIEVQSFlfTE9XX1BPV0VSX0VOIHwgUzVfV09MX0VOCiYjNDM7CQkJCQkgIHwgUzVfV09MX0xPV19QT1dFUiB8IDB4ODAwMCwgMCwgTlVMTCk7CiYjNDM7CiYjNDM7CX0gZWxzZSBpZiAocHJpdi0mZ3Q7Y2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkgewomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9XQUtFVVBfU0VUVElORywgOCwgMHg4MDAwLCAwLCBOVUxMKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7Y2hpcF92ZXJzaW9uICZndDs9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfV0FLRVVQX1NFVFRJTkcsIDAsIEVQSFlfTE9XX1BPV0VSX0VOLCAwLCBOVUxMKTsKJiM0MzsJCWF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCBmYWxzZSk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBEaXNhYmxlIFJYIHBhdGggKi8KQEAgLTQzNiwxMSAmIzQzOzY2MiwxMSBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiAKIAkvKiBGb3JjZSBidWxrLWluIHplcm8gbGVuZ3RoICovCiAJYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsCi0JCQkgMiwgMiwgJmFtcDt0bXAxNik7CiYjNDM7CQkJMiwgMiwgJmFtcDt0bXAxNik7CiAKIAl0bXAxNiB8PSBBWF9QSFlQV1JfUlNUQ1RMX0JaIHwgQVhfUEhZUFdSX1JTVENUTF9JUFJMOwogCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEhZUFdSX1JTVENUTCwKLQkJCSAgMiwgMiwgJmFtcDt0bXAxNik7CiYjNDM7CQkJMiwgMiwgJmFtcDt0bXAxNik7CiAKIAkvKiBjaGFuZ2UgY2xvY2sgKi8KIAl0bXA4ID0gMDsKQEAgLTQ1NiwxMiAmIzQzOzY4MiwxOSBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgdGhlIGF1dG9kZXRhY2ggZnVuY3Rpb24uICovCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYnkgb2Zmc2V0IDB4NDMgb2YgRUVQUk9NICovCiYjNDM7LyogVGhpcyBmdW5jdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IG9mZnNldCAweDQzIG9mIEVFUFJPTSBmb3IgdGhlIEFYODgxNzkgKi8KIHN0YXRpYyBpbnQgYXg4ODE3OV9hdXRvX2RldGFjaChzdHJ1Y3QgdXNibmV0ICpkZXYpCiB7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwogCXUxNiB0bXAxNjsKIAl1OCB0bXA4OwogCiYjNDM7CWlmIChwcml2LSZndDtjaGlwX3ZlcnNpb24gJmd0Oz0gQVhfVkVSU0lPTl9BWDg4MTc5QSkgewomIzQzOwkJdG1wMTYgPSBBWDg4MTc5QV9BVVRPREVUQUNIX0RFTEFZOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9BVVRPREVUQUNILCB0bXAxNiwgMCwgMCwgTlVMTCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCWlmIChheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX0VFUFJPTSwgMHg0MywgMSwgMiwgJmFtcDt0bXAxNikgJmx0OyAwKQogCQlyZXR1cm4gMDsKIApAQCAtNDg0LDExICYjNDM7NzE3LDMxIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9hdXRvX2RldGFjaChzdHJ1Y3QgdXNibmV0ICpkZXYpCiBzdGF0aWMgaW50IGF4ODgxNzlfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGE7CiYjNDM7CXU4IHJlZzg7CiAKJiM0MzsJYXgxNzlfZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiAJYXg4ODE3OV9zZXRfcG1fbW9kZShkZXYsIHRydWUpOwogCiAJdXNibmV0X2xpbmtfY2hhbmdlKGRldiwgMCwgMCk7CiAKJiM0MzsJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiAmZ3Q7PSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7CiYjNDM7CQlheDg4MTc5X3JlYWRfY21kKGRldiwgQVg4ODE3OUFfUEhZX1BPV0VSLCAwLCAwLCAxLCAmYW1wO3JlZzgpOwomIzQzOwkJaWYgKCEocmVnOCAmYW1wOyBBWF9QSFlfUE9XRVIpKSB7CiYjNDM7CQkJcmVnOCA9IEFYX1BIWV9QT1dFUjsKJiM0MzsJCQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgJmFtcDtyZWc4KTsKJiM0MzsJCQltc2xlZXAoMjUwKTsKJiM0MzsJCX0KJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfRldfTU9ERSwgQVhfRldfTU9ERV8xNzlBLCAwLCAwLCBOVUxMKTsKJiM0MzsKJiM0MzsJCS8qIE5vdywgdGhhdCBBWF9GV19NT0RFXzE3OUEgaXMgZW5hYmxlZCwgdGhlIFBIWSBuZWVkcyBhIHBvd2VyLWN5Y2xlLgomIzQzOwkJICogUEhZLXBvd2VyIGlzIHJlLWVuYWJsZWQgaW4gYXg4ODE3OV9yZXNldCgpCiYjNDM7CQkgKi8KJiM0MzsJCXJlZzggPSAwOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsICZhbXA7cmVnOCk7CiYjNDM7CQltc2xlZXAoMjUwKTsKJiM0MzsJfQomIzQzOwogCWF4ODgxNzlfcmVzZXQoZGV2KTsKIAogCWF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCBmYWxzZSk7CkBAIC01MTAsNiAmIzQzOzc2MywyMSBAQCBzdGF0aWMgdm9pZCBheDg4MTc5X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiAJdXNibmV0X2Rpc2Nvbm5lY3QoaW50Zik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBheDg4MTc5X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LSZndDtkcml2ZXJfcHJpdjsKJiM0MzsKJiM0MzsJLyogSW5oZXJpdCBzdGFuZGFyZCBkZXZpY2UgaW5mbyAqLwomIzQzOwl1c2JuZXRfZ2V0X2RydmluZm8obmV0LCBpbmZvKTsKJiM0MzsJaWYgKHByaXYtJmd0O2NoaXBfdmVyc2lvbiAmbHQ7IEFYX1ZFUlNJT05fQVg4ODE3OUEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNucHJpbnRmKGluZm8tJmd0O2Z3X3ZlcnNpb24sIHNpemVvZihpbmZvLSZndDtmd192ZXJzaW9uKSwgJiMzNDslZC4lZC4lZC4lZCYjMzQ7LAomIzQzOwkJIHByaXYtJmd0O2Z3X3ZlcnNpb25bMF0sIHByaXYtJmd0O2Z3X3ZlcnNpb25bMV0sCiYjNDM7CQkgcHJpdi0mZ3Q7ZndfdmVyc2lvblsyXSwgcHJpdi0mZ3Q7ZndfdmVyc2lvblszXSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIGF4ODgxNzlfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQogewpAQCAtNTM2LDQxICYjNDM7ODA0LDc0IEBAIGF4ODgxNzlfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQogCiBzdGF0aWMgaW50IGF4ODgxNzlfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKLQlyZXR1cm4gQVhfRUVQUk9NX0xFTjsKJiM0MzsJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKJiM0MzsJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTsKJiM0MzsKJiM0MzsJYXgxNzlfZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiYjNDM7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKQomIzQzOwkJcmV0dXJuIEFYX0VFUFJPTV9MRU47CiYjNDM7CWVsc2UgaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiAmZ3Q7PSBBWF9WRVJTSU9OX0FYODgyNzkpCiYjNDM7CQlyZXR1cm4gQVg4ODI3OV9FRVBST01fTEVOOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gQVg4ODE3OUFfRUVQUk9NX0xFTjsKIH0KIAotc3RhdGljIGludAotYXg4ODE3OV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLAotCQkgICB1OCAqZGF0YSkKJiM0MztzdGF0aWMgdm9pZAomIzQzO2F4ODgxNzlfZWVwcm9tX2FjY2Vzc19wYXJhbXMoc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSwgaW50IGksIHUxNiAqdmFsdWUsIHUxNiAqaWR4KQomIzQzO3sKJiM0MzsJLyogQVg4ODE3OSBoYXMgYSB3b3JkLWFkZHJlc3NhYmxlIEVFUFJPTQomIzQzOwkgKiBBWDg4MTc5QSB1c2VzIEVGVVNFUyB3aXRoIDIwIGJ5dGVzIGxlbmd0aAomIzQzOwkgKiBBWDg4Mjc5IGhhcyBhbiBFRVBST00gYWRkcmVzc2FibGUgaW4gMjU2IGJ5dGUgYmxvY2tzCiYjNDM7CSAqLwomIzQzOwlpZiAoYXgxNzlfZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uICZsdDsgQVhfVkVSU0lPTl9BWDg4MTc5QSkgewomIzQzOwkJKnZhbHVlID0gaTsKJiM0MzsJCSppZHggPSAxOwomIzQzOwl9IGVsc2UgaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiAmZ3Q7PSBBWF9WRVJTSU9OX0FYODgyNzkpIHsKJiM0MzsJCSp2YWx1ZSA9IChpICogYXgxNzlfZGF0YS0mZ3Q7ZWVwcm9tX2Jsb2NrKSAmZ3Q7Jmd0OyAxNjsKJiM0MzsJCSppZHggPSAoaSAqIGF4MTc5X2RhdGEtJmd0O2VlcHJvbV9ibG9jaykgJmFtcDsgMHhmZmZmOwomIzQzOwl9IGVsc2UgewomIzQzOwkJKnZhbHVlID0gaSAmbHQ7Jmx0OyA0OwomIzQzOwkJKmlkeCA9IDA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBheDg4MTc5X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0JdTE2ICplZXByb21fYnVmZjsKLQlpbnQgZmlyc3Rfd29yZCwgbGFzdF93b3JkOwotCWludCBpLCByZXQ7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGE7CiYjNDM7CWludCBmaXJzdCwgbGFzdCwgaSwgcmV0OwomIzQzOwl1OCAqZWVwcm9tX2J1ZmY7CiYjNDM7CiYjNDM7CWF4MTc5X2RhdGEgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwogCiAJaWYgKGVlcHJvbS0mZ3Q7bGVuID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZWVwcm9tLSZndDttYWdpYyA9IEFYODgxNzlfRUVQUk9NX01BR0lDOwogCi0JZmlyc3Rfd29yZCA9IGVlcHJvbS0mZ3Q7b2Zmc2V0ICZndDsmZ3Q7IDE7Ci0JbGFzdF93b3JkID0gKGVlcHJvbS0mZ3Q7b2Zmc2V0ICYjNDM7IGVlcHJvbS0mZ3Q7bGVuIC0gMSkgJmd0OyZndDsgMTsKLQllZXByb21fYnVmZiA9IGttYWxsb2NfYXJyYXkobGFzdF93b3JkIC0gZmlyc3Rfd29yZCAmIzQzOyAxLCBzaXplb2YodTE2KSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWZpcnN0ID0gZWVwcm9tLSZndDtvZmZzZXQgLyBheDE3OV9kYXRhLSZndDtlZXByb21fYmxvY2s7CiYjNDM7CWxhc3QgPSAoZWVwcm9tLSZndDtvZmZzZXQgJiM0MzsgZWVwcm9tLSZndDtsZW4gLSAxKSAvIGF4MTc5X2RhdGEtJmd0O2VlcHJvbV9ibG9jazsKJiM0MzsKJiM0MzsJZWVwcm9tX2J1ZmYgPSBremFsbG9jKChsYXN0IC0gZmlyc3QgJiM0MzsgMSkgKiBheDE3OV9kYXRhLSZndDtlZXByb21fYmxvY2ssIEdGUF9LRVJORUwpOwogCWlmICghZWVwcm9tX2J1ZmYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogYXg4ODE3OS8xNzhBIHJldHVybnMgMiBieXRlcyBmcm9tIGVlcHJvbSBvbiByZWFkICovCi0JZm9yIChpID0gZmlyc3Rfd29yZDsgaSAmbHQ7PSBsYXN0X3dvcmQ7IGkmIzQzOyYjNDM7KSB7Ci0JCXJldCA9IF9fYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19FRVBST00sIGksIDEsIDIsCi0JCQkJCSAmYW1wO2VlcHJvbV9idWZmW2kgLSBmaXJzdF93b3JkXSk7CiYjNDM7CWZvciAoaSA9IGZpcnN0OyBpICZsdDs9IGxhc3Q7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MTYgdmFsdWUsIGlkeDsKJiM0MzsKJiM0MzsJCWF4ODgxNzlfZWVwcm9tX2FjY2Vzc19wYXJhbXMoYXgxNzlfZGF0YSwgaSwgJmFtcDt2YWx1ZSwgJmFtcDtpZHgpOwomIzQzOwkJcmV0ID0gX19heDg4MTc5X3JlYWRfY21kKGRldiwgYXgxNzlfZGF0YS0mZ3Q7ZWVwcm9tX3JlYWRfY21kLAomIzQzOwkJCQkJIHZhbHVlLCBpZHgsIGF4MTc5X2RhdGEtJmd0O2VlcHJvbV9ibG9jaywKJiM0MzsJCQkJCSBlZXByb21fYnVmZiAmIzQzOyAoaSAtIGZpcnN0KSAqIGF4MTc5X2RhdGEtJmd0O2VlcHJvbV9ibG9jayk7CiYjNDM7CiAJCWlmIChyZXQgJmx0OyAwKSB7CiAJCQlrZnJlZShlZXByb21fYnVmZik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIAotCW1lbWNweShkYXRhLCAodTggKillZXByb21fYnVmZiAmIzQzOyAoZWVwcm9tLSZndDtvZmZzZXQgJmFtcDsgMSksIGVlcHJvbS0mZ3Q7bGVuKTsKJiM0MzsJbWVtY3B5KGRhdGEsIGVlcHJvbV9idWZmICYjNDM7IGVlcHJvbS0mZ3Q7b2Zmc2V0ICUgYXgxNzlfZGF0YS0mZ3Q7ZWVwcm9tX2Jsb2NrLCBlZXByb20tJmd0O2xlbik7CiAJa2ZyZWUoZWVwcm9tX2J1ZmYpOwogCXJldHVybiAwOwogfQpAQCAtNTgwLDEyICYjNDM7ODgxLDE3IEBAIGF4ODgxNzlfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwKIAkJICAgdTggKmRhdGEpCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKJiM0MzsJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTsKIAl1MTYgKmVlcHJvbV9idWZmOwogCWludCBmaXJzdF93b3JkOwogCWludCBsYXN0X3dvcmQ7CiAJaW50IHJldDsKIAlpbnQgaTsKIAomIzQzOwlheDE3OV9kYXRhID0gZGV2LSZndDtkcml2ZXJfcHJpdjsKJiM0MzsJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiAmZ3Q7PSBBWF9WRVJTSU9OX0FYODgxNzlBKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwogCW5ldGRldl9kYmcobmV0LCAmIzM0O3dyaXRlIEVFUFJPTSBsZW4gJWQsIG9mZnNldCAlZCwgbWFnaWMgMHgleFxuJiMzNDssCiAJCSAgIGVlcHJvbS0mZ3Q7bGVuLCBlZXByb20tJmd0O29mZnNldCwgZWVwcm9tLSZndDttYWdpYyk7CiAKQEAgLTY1MSwxMiAmIzQzOzk1NywzOSBAQCBheDg4MTc5X3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sCiB9CiAKIHN0YXRpYyBpbnQgYXg4ODE3OV9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwKLQkJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQomIzQzOwkJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhOwomIzQzOwlpbnQgdjsKJiM0MzsKJiM0MzsJZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiAKIAltaWlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MoJmFtcDtkZXYtJmd0O21paSwgY21kKTsKIAomIzQzOwlpZiAoZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uICZndDs9IEFYX1ZFUlNJT05fQVg4ODI3OSkgewomIzQzOwkJbGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsCiYjNDM7CQkJCSBjbWQtJmd0O2xpbmtfbW9kZXMuc3VwcG9ydGVkKTsKJiM0MzsKJiM0MzsJCXYgPSBheDg4MTc5X21kaW9fcmVhZChkZXYtJmd0O25ldCwgZGV2LSZndDttaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKJiM0MzsJCWlmICh2ICZndDs9IDAgJmFtcDsmYW1wOyB2ICZhbXA7IEFEVkVSVElTRV9SRVNWKQomIzQzOwkJCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULAomIzQzOwkJCQkJIGNtZC0mZ3Q7bGlua19tb2Rlcy5hZHZlcnRpc2luZyk7CiYjNDM7CiYjNDM7CQl2ID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTsKJiM0MzsJCWlmIChkYXRhLSZndDtzcGVlZCA9PSBFVEhFUl9MSU5LXzI1MDApIHsKJiM0MzsJCQljbWQtJmd0O2Jhc2Uuc3BlZWQgPSBTUEVFRF8yNTAwOwomIzQzOwkJCS8qIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUcgaXMgYnJva2VuLCBidXQgd2UgY2FuIGRlZHVjZSB0aGF0CiYjNDM7CQkJICogdGhlIGxpbmstcGFydG5lciBhZHZlcnRpc2VkIDI1MDBNIGlmIHJlbW90ZWx5IEFOIHN1Y2NjZWRlZAomIzQzOwkJCSAqIGZvciBsaW5rIHNwZWVkICZndDsgMTAwME0gYW5kIHdlIGxvY2FsbHkgaGF2ZSBhIGxpbmsgc3BlZWQgb2YKJiM0MzsJCQkgKiAyNTAwTQomIzQzOwkJCSAqLwomIzQzOwkJCWlmICh2ICZndDs9IDAgJmFtcDsmYW1wOyB2ICZhbXA7IE1ESU9fQU5fMTBHQlRfU1RBVF9SRU1PSykKJiM0MzsJCQkJbGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsCiYjNDM7CQkJCQkJIGNtZC0mZ3Q7bGlua19tb2Rlcy5scF9hZHZlcnRpc2luZyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY0LDM0ICYjNDM7OTk3LDEyOCBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhOwomIzQzOwlpbnQgdjsKJiM0MzsKJiM0MzsJZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiYjNDM7CiYjNDM7CS8qIG1paV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyBoYW5kbGVzIHVua25vd24gYml0cyBpbiBNSUlfQURWRVJUSVNFCiYjNDM7CSAqIHRyYW5zcGFyZW50bHksIHNvIGZvciB0aGUgMi41R0JpdCBsaW5rIHNwZWVkIG9mIHRoZSBBWF9WRVJTSU9OX0FYODgyNzkKJiM0MzsJICogd2UganVzdCBzZXQgdXAgQURWRVJUSVNFX1JFU1YgYmVmb3JlIGNhbGxpbmcgbWlpX2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzCiYjNDM7CSAqIGF0IGxlYXN0IGZvciBzcGVlZHMgJmx0OyAyNTAwCiYjNDM7CSAqLwomIzQzOwlpZiAoZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkgewomIzQzOwkJdiA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LSZndDttaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKJiM0MzsJCWlmICh2ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gdjsKJiM0MzsKJiM0MzsJCWlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsCiYjNDM7CQkJCSAgICAgIGNtZC0mZ3Q7bGlua19tb2Rlcy5hZHZlcnRpc2luZykpCiYjNDM7CQkJdiB8PSBBRFZFUlRJU0VfUkVTVjsKJiM0MzsJCWVsc2UKJiM0MzsJCQl2ICZhbXA7PSB+QURWRVJUSVNFX1JFU1Y7CiYjNDM7CQlheDg4MTc5X21kaW9fd3JpdGUobmV0LCBkZXYtJmd0O21paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIHYpOwomIzQzOwkJaWYgKGNtZC0mZ3Q7YmFzZS5zcGVlZCA9PSBTUEVFRF8yNTAwKQomIzQzOwkJCXJldHVybiBtaWlfbndheV9yZXN0YXJ0KCZhbXA7ZGV2LSZndDttaWkpOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIG1paV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncygmYW1wO2Rldi0mZ3Q7bWlpLCBjbWQpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYXg4ODE3OWFfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhOwomIzQzOwl1MTYgYm1jciwgbGNsYWR2LCBybXRhZHY7CiYjNDM7CXU4IGNhcDsKJiM0MzsKJiM0MzsJZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiYjNDM7CiYjNDM7CWlmIChkYXRhLSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlibWNyID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtJmd0O21paS5waHlfaWQsIE1JSV9CTUNSKTsKJiM0MzsJbGNsYWR2ID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtJmd0O21paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOwomIzQzOwlybXRhZHYgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi0mZ3Q7bWlpLnBoeV9pZCwgTUlJX0xQQSk7CiYjNDM7CiYjNDM7CWlmICghKGJtY3IgJmFtcDsgQk1DUl9BTkVOQUJMRSkpIHsKJiM0MzsJCXBhdXNlLSZndDthdXRvbmVnID0gMDsKJiM0MzsJCXBhdXNlLSZndDtyeF9wYXVzZSA9IDA7CiYjNDM7CQlwYXVzZS0mZ3Q7dHhfcGF1c2UgPSAwOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBhdXNlLSZndDthdXRvbmVnID0gMTsKJiM0MzsKJiM0MzsJY2FwID0gbWlpX3Jlc29sdmVfZmxvd2N0cmxfZmR4KGxjbGFkdiwgcm10YWR2KTsKJiM0MzsKJiM0MzsJaWYgKGNhcCAmYW1wOyBGTE9XX0NUUkxfUlgpCiYjNDM7CQlwYXVzZS0mZ3Q7cnhfcGF1c2UgPSAxOwomIzQzOwomIzQzOwlpZiAoY2FwICZhbXA7IEZMT1dfQ1RSTF9UWCkKJiM0MzsJCXBhdXNlLSZndDt0eF9wYXVzZSA9IDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYXg4ODE3OWFfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhOwomIzQzOwl1MTYgb2xkLCBuZXcxLCBibWNyOwomIzQzOwl1OCBjYXAgPSAwOwomIzQzOwomIzQzOwlkYXRhID0gZGV2LSZndDtkcml2ZXJfcHJpdjsKJiM0MzsKJiM0MzsJaWYgKGRhdGEtJmd0O2NoaXBfdmVyc2lvbiAmbHQ7IEFYX1ZFUlNJT05fQVg4ODE3OUEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWJtY3IgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi0mZ3Q7bWlpLnBoeV9pZCwgTUlJX0JNQ1IpOwomIzQzOwlpZiAocGF1c2UtJmd0O2F1dG9uZWcgJmFtcDsmYW1wOyAhKGJtY3IgJmFtcDsgQk1DUl9BTkVOQUJMRSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHBhdXNlLSZndDtyeF9wYXVzZSkKJiM0MzsJCWNhcCB8PSBGTE9XX0NUUkxfUlg7CiYjNDM7CiYjNDM7CWlmIChwYXVzZS0mZ3Q7dHhfcGF1c2UpCiYjNDM7CQljYXAgfD0gRkxPV19DVFJMX1RYOwomIzQzOwomIzQzOwlvbGQgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi0mZ3Q7bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CiYjNDM7CW5ldzEgPSAob2xkICZhbXA7IH4oQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNKSkgfAomIzQzOwkJbWlpX2FkdmVydGlzZV9mbG93Y3RybChjYXApOwomIzQzOwlpZiAob2xkICE9IG5ldzEpCiYjNDM7CQlheDg4MTc5X21kaW9fd3JpdGUobmV0LCBkZXYtJmd0O21paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIG5ldzEpOwomIzQzOwomIzQzOwlyZXR1cm4gbWlpX253YXlfcmVzdGFydCgmYW1wO2Rldi0mZ3Q7bWlpKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiBheDg4MTc5X2V0aHRvb2xfZ2V0X2VlZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpCiB7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwogCWludCB2YWw7CiAKIAkvKiBHZXQgU3VwcG9ydGVkIEVFRSAqLwotCXZhbCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgTURJT19QQ1NfRUVFX0FCTEUsCi0JCQkJCSAgICBNRElPX01NRF9QQ1MpOwomIzQzOwl2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX1BDUywgTURJT19QQ1NfRUVFX0FCTEUpOwogCWlmICh2YWwgJmx0OyAwKQogCQlyZXR1cm4gdmFsOwogCW1paV9lZWVfY2FwMV9tb2RfbGlua21vZGVfdChkYXRhLSZndDtzdXBwb3J0ZWQsIHZhbCk7CiAKIAkvKiBHZXQgYWR2ZXJ0aXNlbWVudCBFRUUgKi8KLQl2YWwgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsIE1ESU9fQU5fRUVFX0FEViwKLQkJCQkJICAgIE1ESU9fTU1EX0FOKTsKJiM0MzsJdmFsID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWKTsKIAlpZiAodmFsICZsdDsgMCkKIAkJcmV0dXJuIHZhbDsKIAltaWlfZWVlX2NhcDFfbW9kX2xpbmttb2RlX3QoZGF0YS0mZ3Q7YWR2ZXJ0aXNlZCwgdmFsKTsKIAogCS8qIEdldCBMUCBhZHZlcnRpc2VtZW50IEVFRSAqLwotCXZhbCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgTURJT19BTl9FRUVfTFBBQkxFLAotCQkJCQkgICAgTURJT19NTURfQU4pOwomIzQzOwl2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9MUEFCTEUpOwogCWlmICh2YWwgJmx0OyAwKQogCQlyZXR1cm4gdmFsOwogCW1paV9lZWVfY2FwMV9tb2RfbGlua21vZGVfdChkYXRhLSZndDtscF9hZHZlcnRpc2VkLCB2YWwpOwomIzQzOwlpZiAocHJpdi0mZ3Q7Y2hpcF92ZXJzaW9uICZndDs9IEFYX1ZFUlNJT05fQVg4ODI3OSkgewomIzQzOwkJdmFsID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfTFBBQkxFMik7CiYjNDM7CQlpZiAodmFsICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gdmFsOwomIzQzOwkJbWlpX2VlZV9jYXAyX21vZF9saW5rbW9kZV9hZHZfdChkYXRhLSZndDtscF9hZHZlcnRpc2VkLCB2YWwpOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcwMSw4ICYjNDM7MTEyOCw3IEBAIGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSkKIHsKIAl1MTYgdG1wMTYgPSBsaW5rbW9kZV90b19taWlfZWVlX2NhcDFfdChkYXRhLSZndDthZHZlcnRpc2VkKTsKIAotCXJldHVybiBheDg4MTc5X3BoeV93cml0ZV9tbWRfaW5kaXJlY3QoZGV2LCBNRElPX0FOX0VFRV9BRFYsCi0JCQkJCSAgICAgIE1ESU9fTU1EX0FOLCB0bXAxNik7CiYjNDM7CXJldHVybiBheF93cml0ZV9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWLCB0bXAxNik7CiB9CiAKIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGtfZWVlKHN0cnVjdCB1c2JuZXQgKmRldikKQEAgLTcxMiw0MCAmIzQzOzExMzgsMjcgQEAgc3RhdGljIGludCBheDg4MTc5X2Noa19lZWUoc3RydWN0IHVzYm5ldCAqZGV2KQogCiAJbWlpX2V0aHRvb2xfZ3NldCgmYW1wO2Rldi0mZ3Q7bWlpLCAmYW1wO2VjbWQpOwogCi0JaWYgKGVjbWQuZHVwbGV4ICZhbXA7IERVUExFWF9GVUxMKSB7CiYjNDM7CXByaXYtJmd0O2VlZV9hY3RpdmUgPSAwOwomIzQzOwlpZiAoKHByaXYtJmd0O2NoaXBfdmVyc2lvbiAmbHQ7IEFYX1ZFUlNJT05fQVg4ODI3OSAmYW1wOyZhbXA7IChlY21kLmR1cGxleCAmYW1wOyBEVVBMRVhfRlVMTCkpIHx8CiYjNDM7CSAgICAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwICZhbXA7JmFtcDsgKGVjbWQuZHVwbGV4ICZhbXA7IERVUExFWF9GVUxMKSkpIHsKIAkJaW50IGVlZV9scCwgZWVlX2NhcCwgZWVlX2FkdjsKIAkJdTMyIGxwLCBjYXAsIGFkdiwgc3VwcG9ydGVkID0gMDsKIAotCQllZWVfY2FwID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LAotCQkJCQkJCU1ESU9fUENTX0VFRV9BQkxFLAotCQkJCQkJCU1ESU9fTU1EX1BDUyk7Ci0JCWlmIChlZWVfY2FwICZsdDsgMCkgewotCQkJcHJpdi0mZ3Q7ZWVlX2FjdGl2ZSA9IDA7CiYjNDM7CQllZWVfY2FwID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9QQ1MsIE1ESU9fUENTX0VFRV9BQkxFKTsKJiM0MzsJCWlmIChlZWVfY2FwICZsdDsgMCkKIAkJCXJldHVybiBmYWxzZTsKLQkJfQogCiAJCWNhcCA9IG1tZF9lZWVfY2FwX3RvX2V0aHRvb2xfc3VwX3QoZWVlX2NhcCk7Ci0JCWlmICghY2FwKSB7Ci0JCQlwcml2LSZndDtlZWVfYWN0aXZlID0gMDsKJiM0MzsJCWlmICghY2FwKQogCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJZWVlX2xwID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LAotCQkJCQkJICAgICAgIE1ESU9fQU5fRUVFX0xQQUJMRSwKLQkJCQkJCSAgICAgICBNRElPX01NRF9BTik7Ci0JCWlmIChlZWVfbHAgJmx0OyAwKSB7Ci0JCQlwcml2LSZndDtlZWVfYWN0aXZlID0gMDsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQogCi0JCWVlZV9hZHYgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsCi0JCQkJCQkJTURJT19BTl9FRUVfQURWLAotCQkJCQkJCU1ESU9fTU1EX0FOKTsKJiM0MzsJCWVlZV9scCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0xQQUJMRSk7CiYjNDM7CQlpZiAoZWVlX2xwICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKIAotCQlpZiAoZWVlX2FkdiAmbHQ7IDApIHsKLQkJCXByaXYtJmd0O2VlZV9hY3RpdmUgPSAwOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9CiYjNDM7CQllZWVfYWR2ID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWKTsKJiM0MzsJCWlmIChlZWVfYWR2ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKIAogCQlhZHYgPSBtbWRfZWVlX2Fkdl90b19ldGh0b29sX2Fkdl90KGVlZV9hZHYpOwogCQlscCA9IG1tZF9lZWVfYWR2X3RvX2V0aHRvb2xfYWR2X3QoZWVlX2xwKTsKQEAgLTc1Myw2NSAmIzQzOzExNjYsNTMgQEAgc3RhdGljIGludCBheDg4MTc5X2Noa19lZWUoc3RydWN0IHVzYm5ldCAqZGV2KQogCQkJICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgOgogCQkJICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbDsKIAotCQlpZiAoIShscCAmYW1wOyBhZHYgJmFtcDsgc3VwcG9ydGVkKSkgewotCQkJcHJpdi0mZ3Q7ZWVlX2FjdGl2ZSA9IDA7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KJiM0MzsJCWlmICghKGxwICZhbXA7IGFkdiAmYW1wOyBzdXBwb3J0ZWQpKQomIzQzOwkJCXJldHVybiB0cnVlOwogCiAJCXByaXYtJmd0O2VlZV9hY3RpdmUgPSAxOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlwcml2LSZndDtlZWVfYWN0aXZlID0gMDsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGF4ODgxNzlfZGlzYWJsZV9lZWUoc3RydWN0IHVzYm5ldCAqZGV2KQotewotCXUxNiB0bXAxNjsKLQotCXRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTM7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKLQkJCSAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsICZhbXA7dG1wMTYpOwotCi0JdG1wMTYgPSAweDMyNDY7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKLQkJCSAgTUlJX1BIWUFERFIsIDIsICZhbXA7dG1wMTYpOwotCi0JdG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFMDsKLQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELAotCQkJICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgJmFtcDt0bXAxNik7Ci19Ci0KLXN0YXRpYyB2b2lkIGF4ODgxNzlfZW5hYmxlX2VlZShzdHJ1Y3QgdXNibmV0ICpkZXYpCiYjNDM7c3RhdGljIHZvaWQgYXg4ODE3OV9lZWVfY29uZmlnKHN0cnVjdCB1c2JuZXQgKmRldiwgYm9vbCBlbmFibGUpCiB7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwogCXUxNiB0bXAxNjsKIAotCXRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTM7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKLQkJCSAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsICZhbXA7dG1wMTYpOwotCi0JdG1wMTYgPSAweDMyNDc7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKLQkJCSAgTUlJX1BIWUFERFIsIDIsICZhbXA7dG1wMTYpOwotCi0JdG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFNTsKLQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELAotCQkJICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgJmFtcDt0bXAxNik7Ci0KLQl0bXAxNiA9IDB4MDY4MDsKLQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELAotCQkJICBNSUlfQk1TUiwgMiwgJmFtcDt0bXAxNik7CiYjNDM7CWlmIChwcml2LSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7CiYjNDM7CQl0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UzOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKJiM0MzsJCQkJICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgJmFtcDt0bXAxNik7CiYjNDM7CiYjNDM7CQl0bXAxNiA9IGVuYWJsZSA/IDB4MzI0NyA6IDB4MzI0NjsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsCiYjNDM7CQkJCSAgTUlJX1BIWUFERFIsIDIsICZhbXA7dG1wMTYpOwomIzQzOwkJaWYgKGVuYWJsZSkgewomIzQzOwkJCXRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTU7CiYjNDM7CQkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKJiM0MzsJCQkJCSAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsICZhbXA7dG1wMTYpOwomIzQzOwomIzQzOwkJCXRtcDE2ID0gMHgwNjgwOwomIzQzOwkJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsCiYjNDM7CQkJCQkgIE1JSV9CTVNSLCAyLCAmYW1wO3RtcDE2KTsKJiM0MzsJCX0KIAotCXRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTA7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKLQkJCSAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsICZhbXA7dG1wMTYpOwomIzQzOwkJdG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFMDsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsCiYjNDM7CQkJCSAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsICZhbXA7dG1wMTYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9HUEhZX0NUTCwgQVhfR1BIWV9FRUVfQ1RSTCwgZW5hYmxlLCAwLCBOVUxMKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IGF4ODgxNzlfZ2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZGF0YSkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCXN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2OwomIzQzOwomIzQzOwlwcml2ID0gZGV2LSZndDtkcml2ZXJfcHJpdjsKIAogCWVkYXRhLSZndDtlZWVfZW5hYmxlZCA9IHByaXYtJmd0O2VlZV9lbmFibGVkOwogCWVkYXRhLSZndDtlZWVfYWN0aXZlID0gcHJpdi0mZ3Q7ZWVlX2FjdGl2ZTsKQEAgLTgyMiwxOCAmIzQzOzEyMjMsMjAgQEAgc3RhdGljIGludCBheDg4MTc5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpCiBzdGF0aWMgaW50IGF4ODgxNzlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZGF0YSkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCXN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2OwogCWludCByZXQ7CiAKJiM0MzsJcHJpdiA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiYjNDM7CiAJcHJpdi0mZ3Q7ZWVlX2VuYWJsZWQgPSBlZGF0YS0mZ3Q7ZWVlX2VuYWJsZWQ7CiAJaWYgKCFwcml2LSZndDtlZWVfZW5hYmxlZCkgewotCQlheDg4MTc5X2Rpc2FibGVfZWVlKGRldik7CiYjNDM7CQlheDg4MTc5X2VlZV9jb25maWcoZGV2LCBmYWxzZSk7CiAJfSBlbHNlIHsKIAkJcHJpdi0mZ3Q7ZWVlX2VuYWJsZWQgPSBheDg4MTc5X2Noa19lZWUoZGV2KTsKIAkJaWYgKCFwcml2LSZndDtlZWVfZW5hYmxlZCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCQlheDg4MTc5X2VuYWJsZV9lZWUoZGV2KTsKJiM0MzsJCWF4ODgxNzlfZWVlX2NvbmZpZyhkZXYsIHRydWUpOwogCX0KIAogCXJldCA9IGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgZWRhdGEpOwpAQCAtODQ4LDYgJiM0MzsxMjUxLDcgQEAgc3RhdGljIGludCBheDg4MTc5X3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpCiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3OV9ldGh0b29sX29wcyA9IHsKJiM0MzsJLmdldF9kcnZpbmZvCQk9IGF4ODgxNzlfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbAkJPSB1c2JuZXRfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gdXNibmV0X3NldF9tc2dsZXZlbCwKQEAgLTg2MSwxNiAmIzQzOzEyNjUsNzggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheDg4MTc5X2V0aHRvb2xfb3BzID0gewogCS5ud2F5X3Jlc2V0CQk9IHVzYm5ldF9ud2F5X3Jlc2V0LAogCS5nZXRfbGlua19rc2V0dGluZ3MJPSBheDg4MTc5X2dldF9saW5rX2tzZXR0aW5ncywKIAkuc2V0X2xpbmtfa3NldHRpbmdzCT0gYXg4ODE3OV9zZXRfbGlua19rc2V0dGluZ3MsCiYjNDM7CS5nZXRfcGF1c2VwYXJhbQkJPSBheDg4MTc5YV9nZXRfcGF1c2VwYXJhbSwKJiM0MzsJLnNldF9wYXVzZXBhcmFtCQk9IGF4ODgxNzlhX3NldF9wYXVzZXBhcmFtLAogCS5nZXRfdHNfaW5mbwkJPSBldGh0b29sX29wX2dldF90c19pbmZvLAogfTsKIAomIzQzO3N0YXRpYyBpbnQgYXgxNzlhX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgX19iZTE2IHByb3RvLCB1MTYgdmlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKJiM0MzsJdTggdmxhbl9jdHJsOwomIzQzOwl1MTYgcmVnMTY7CiYjNDM7CXU4IHJlZzg7CiYjNDM7CiYjNDM7CWF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsICZhbXA7cmVnOCk7CiYjNDM7CXZsYW5fY3RybCA9IHJlZzg7CiYjNDM7CiYjNDM7CS8qIEFkZHJlc3MgKi8KJiM0MzsJcmVnOCA9ICh2aWQgLyAxNik7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9BRERSRVNTLCAxLCAxLCAmYW1wO3JlZzgpOwomIzQzOwomIzQzOwkvKiBEYXRhICovCiYjNDM7CXJlZzggPSB2bGFuX2N0cmwgfCBBWF9WTEFOX0NPTlRST0xfUkQ7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCAmYW1wO3JlZzgpOwomIzQzOwomIzQzOwlheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMCwgMiwgMiwgJmFtcDtyZWcxNik7CiYjNDM7CXJlZzE2ICZhbXA7PSB+KDEgJmx0OyZsdDsgKHZpZCAlIDE2KSk7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMCwgMiwgMiwgJmFtcDtyZWcxNik7CiYjNDM7CiYjNDM7CXJlZzggPSB2bGFuX2N0cmwgfCBBWF9WTEFOX0NPTlRST0xfV0U7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCAmYW1wO3JlZzgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBheDE3OWFfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIF9fYmUxNiBwcm90bywgdTE2IHZpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiYjNDM7CXU4IHZsYW5fY3RybDsKJiM0MzsJdTE2IHJlZzE2OwomIzQzOwl1OCByZWc4OwomIzQzOwomIzQzOwlheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCAmYW1wO3JlZzgpOwomIzQzOwl2bGFuX2N0cmwgPSByZWc4OwomIzQzOwomIzQzOwkvKiBBZGRyZXNzICovCiYjNDM7CXJlZzggPSAodmlkIC8gMTYpOwomIzQzOwlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQUREUkVTUywgMSwgMSwgJmFtcDtyZWc4KTsKJiM0MzsKJiM0MzsJLyogRGF0YSAqLwomIzQzOwlyZWc4ID0gdmxhbl9jdHJsIHwgQVhfVkxBTl9DT05UUk9MX1JEOwomIzQzOwlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgJmFtcDtyZWc4KTsKJiM0MzsKJiM0MzsJYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfREFUQTAsIDIsIDIsICZhbXA7cmVnMTYpOwomIzQzOwlyZWcxNiB8PSAoMSAmbHQ7Jmx0OyAodmlkICUgMTYpKTsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCAmYW1wO3JlZzE2KTsKJiM0MzsKJiM0MzsJcmVnOCA9IHZsYW5fY3RybCB8IEFYX1ZMQU5fQ09OVFJPTF9XRTsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsICZhbXA7cmVnOCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGF4ODgxNzlfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0Jc3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiAJdTggKm1fZmlsdGVyID0gKCh1OCAqKWRldi0mZ3Q7ZGF0YSk7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7CiYjNDM7CiYjNDM7CWRhdGEgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwogCi0JZGF0YS0mZ3Q7cnhjdGwgPSAoQVhfUlhfQ1RMX1NUQVJUIHwgQVhfUlhfQ1RMX0FCIHwgQVhfUlhfQ1RMX0lQRSk7CiYjNDM7CWRhdGEtJmd0O3J4Y3RsID0gKEFYX1JYX0NUTF9TVEFSVCB8IEFYX1JYX0NUTF9BQiB8IEFYX1JYX0NUTF9EUk9QQ1JDRVJSKTsKJiM0MzsJaWYgKGRhdGEtJmd0O2lwX2FsaWduKQomIzQzOwkJZGF0YS0mZ3Q7cnhjdGwgfD0gQVhfUlhfQ1RMX0lQRTsKIAogCWlmIChuZXQtJmd0O2ZsYWdzICZhbXA7IElGRl9QUk9NSVNDKSB7CiAJCWRhdGEtJmd0O3J4Y3RsIHw9IEFYX1JYX0NUTF9QUk87CkBAIC05MDksNiAmIzQzOzEzNzUsNyBAQCBheDg4MTc5X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKIHsKIAl1OCB0bXA7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKJiM0MzsJc3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiAJbmV0ZGV2X2ZlYXR1cmVzX3QgY2hhbmdlZCA9IG5ldC0mZ3Q7ZmVhdHVyZXMgXiBmZWF0dXJlczsKIAogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfSVBfQ1NVTSkgewpAQCAtOTI4LDYgJiM0MzsxMzk1LDM0IEBAIGF4ODgxNzlfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCQl0bXAgXj0gQVhfUlhDT0VfSVAgfCBBWF9SWENPRV9UQ1AgfCBBWF9SWENPRV9VRFAgfAogCQkgICAgICAgQVhfUlhDT0VfVENQVjYgfCBBWF9SWENPRV9VRFBWNjsKIAkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWENPRV9DVEwsIDEsIDEsICZhbXA7dG1wKTsKJiM0MzsJCWRhdGEtJmd0O3J4X2NoZWNrc3VtID0gISEoZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9SWENTVU0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikgewomIzQzOwkJYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgJmFtcDt0bXApOwomIzQzOwkJdG1wIF49IEFYX1ZMQU5fQ09OVFJPTF9WRkU7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgJmFtcDt0bXApOwomIzQzOwkJaWYgKGZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikgewomIzQzOwkJCWZvciAoaW50IGkgPSAwOyBpICZsdDsgMjU2OyBpJiM0MzsmIzQzOykgewomIzQzOwkJCQl1MTYgdG1wMTY7CiYjNDM7CQkJCS8qIEFkZHJlc3MgKi8KJiM0MzsJCQkJdG1wID0gaTsKJiM0MzsJCQkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MsCiYjNDM7CQkJCQkJICAxLCAxLCAmYW1wO3RtcCk7CiYjNDM7CQkJCS8qIERhdGEgKi8KJiM0MzsJCQkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLAomIzQzOwkJCQkJCSAgMiwgMiwgJmFtcDt0bXAxNik7CiYjNDM7CQkJCXRtcCA9IEFYX1ZMQU5fQ09OVFJPTF9XRTsKJiM0MzsJCQkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsCiYjNDM7CQkJCQkJICAxLCAxLCAmYW1wO3RtcCk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYKSB7CiYjNDM7CQlheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCAmYW1wO3RtcCk7CiYjNDM7CQl0bXAgXj0gQVhfVkxBTl9DT05UUk9MX1ZTTzsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCAmYW1wO3RtcCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05OTUsNiAmIzQzOzE0OTAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzlfbmV0ZGV2X29wcyA9IHsKIAkubmRvX2V0aF9pb2N0bAkJPSB1c2JuZXRfbWlpX2lvY3RsLAogCS5uZG9fc2V0X3J4X21vZGUJPSBheDg4MTc5X3NldF9tdWx0aWNhc3QsCiAJLm5kb19zZXRfZmVhdHVyZXMJPSBheDg4MTc5X3NldF9mZWF0dXJlcywKJiM0MzsJLm5kb192bGFuX3J4X2FkZF92aWQJPSBheDE3OWFfdmxhbl9yeF9hZGRfdmlkLAomIzQzOwkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZCwKIH07CiAKIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGVja19lZXByb20oc3RydWN0IHVzYm5ldCAqZGV2KQpAQCAtMTI5Myw2ICYjNDM7MTc5MCwxNyBAQCBzdGF0aWMgaW50IGF4ODgxNzlfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogCiAJZGV2LSZndDtkcml2ZXJfcHJpdiA9IGF4MTc5X2RhdGE7CiAKJiM0MzsJcmV0ID0gYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NISVBfU1RBVFVTLAomIzQzOwkJCSAgICAgICAxLCAxLCAmYW1wO2F4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfbm9kZXY7CiYjNDM7CiYjNDM7CWF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiA9IChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmFtcDsgMHhmMCkgJmd0OyZndDsgNDsKJiM0MzsJYXgxNzlfZGF0YS0mZ3Q7aXNfYXg4ODc3MmQgPSAwOwomIzQzOwlheDE3OV9kYXRhLSZndDtpcF9hbGlnbiA9IDE7CiYjNDM7CWF4MTc5X2RhdGEtJmd0O2VlcHJvbV9yZWFkX2NtZCA9IEFYX0FDQ0VTU19FRVBST007CiYjNDM7CWF4MTc5X2RhdGEtJmd0O2VlcHJvbV9ibG9jayA9IDI7CiYjNDM7CiAJZGV2LSZndDtuZXQtJmd0O25ldGRldl9vcHMgPSAmYW1wO2F4ODgxNzlfbmV0ZGV2X29wczsKIAlkZXYtJmd0O25ldC0mZ3Q7ZXRodG9vbF9vcHMgPSAmYW1wO2F4ODgxNzlfZXRodG9vbF9vcHM7CiAJZGV2LSZndDtuZXQtJmd0O25lZWRlZF9oZWFkcm9vbSA9IDg7CkBAIC0xMzE3LDYgJiM0MzsxODI1LDEyMCBAQCBzdGF0aWMgaW50IGF4ODgxNzlfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogCWF4ODgxNzlfcmVzZXQoZGV2KTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9ub2RldjoKJiM0MzsJa2ZyZWUoYXgxNzlfZGF0YSk7CiYjNDM7CWF4MTc5X2RhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGF4ODgxNzlhX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKJiM0MzsJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogQ2hlY2sgaWYgdmVuZG9yIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsJaWYgKHVkZXYtJmd0O2FjdGNvbmZpZy0mZ3Q7ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKJiM0MzsJCW5ldGRldl9pbmZvKGRldi0mZ3Q7bmV0LCAmIzM0O1N3aXRjaGluZyB0byB2ZW5kb3IgbW9kZVxuJiMzNDspOwomIzQzOwkJdXNiX2RyaXZlcl9zZXRfY29uZmlndXJhdGlvbih1ZGV2LCAxKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJYXgxNzlfZGF0YSA9IGt6YWxsb2Nfb2JqKCpheDE3OV9kYXRhKTsKJiM0MzsJaWYgKCFheDE3OV9kYXRhKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWRldi0mZ3Q7ZHJpdmVyX3ByaXYgPSBheDE3OV9kYXRhOwomIzQzOwomIzQzOwlyZXQgPSBheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfQ0hJUF9TVEFUVVMsCiYjNDM7CQkJICAgICAgIDEsIDEsICZhbXA7YXgxNzlfZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9ub2RldjsKJiM0MzsKJiM0MzsJYXgxNzlfZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uID0gKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiAmYW1wOyAweGYwKSAmZ3Q7Jmd0OyA0OwomIzQzOwlheDE3OV9kYXRhLSZndDtpc19heDg4NzcyZCA9IDA7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkgewomIzQzOwkJaWYgKHVkZXYtJmd0O2Rlc2NyaXB0b3IuYmNkRGV2aWNlID09IDB4MzAwKQomIzQzOwkJCWF4MTc5X2RhdGEtJmd0O2lzX2F4ODg3NzJkID0gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IDM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBheDg4MTc5X3JlYWRfY21kKGRldiwgQVg4ODE3OUFfQUNDRVNTX0JMLCAoMHhGRCAmIzQzOyBpKSwKJiM0MzsJCQkJICAgICAgIDEsIDEsICZhbXA7YXgxNzlfZGF0YS0mZ3Q7ZndfdmVyc2lvbltpXSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlheDE3OV9kYXRhLSZndDtmd192ZXJzaW9uW2ldID0gMHhmZjsKJiM0MzsJfQomIzQzOwluZXRkZXZfaW5mbyhkZXYtJmd0O25ldCwgJiMzNDtBWDg4MTc5QS8yNzkvNzcyRCBDaGlwIFZlcnNpb246ICV4LCBGVzogJWQuJWQuJWQuJWRcbiYjMzQ7LAomIzQzOwkJICAgIGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiwKJiM0MzsJCSAgICBheDE3OV9kYXRhLSZndDtmd192ZXJzaW9uWzBdLCBheDE3OV9kYXRhLSZndDtmd192ZXJzaW9uWzFdLAomIzQzOwkJICAgIGF4MTc5X2RhdGEtJmd0O2Z3X3ZlcnNpb25bMl0sIGF4MTc5X2RhdGEtJmd0O2Z3X3ZlcnNpb25bM10pOwomIzQzOwomIzQzOwkvKiBUaGUgQVg4ODI3OSByZXF1aXJlcyBib3RoIHRoZSBBWF9SWF9DVExfSVBFIGFuZCBBWF9SWF9DVExfRFJPUENSQ0VSUgomIzQzOwkgKiBiaXRzIHNldCBpbiBBWF9SWF9DVEwgZm9yIGNyZWF0aW5nIGNvcnJlY3QgUlgtVVJCcy4gQVhfUlhfQ1RMX0RST1BDUkNFUlIKJiM0MzsJICogaXMgYW55d2F5IHNldCBmb3IgYWxsIGNoaXBzLCBtYWtlIHN1cmUgQVhfUlhfQ1RMX0lQRSBpcyBzZXQgdmlhIGlwX2FsaWduLgomIzQzOwkgKiBBbHNvIGNvbmZpZ3VyZSBlZXByb20gYWNjZXNzIHBhcmFtZXRlcnMuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXgxNzlfZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkgewomIzQzOwkJYXgxNzlfZGF0YS0mZ3Q7aXBfYWxpZ24gPSAxOwomIzQzOwkJYXgxNzlfZGF0YS0mZ3Q7ZWVwcm9tX3JlYWRfY21kID0gQVg4ODE3OUFfRkxBU0hfUkVBRDsKJiM0MzsJCWF4MTc5X2RhdGEtJmd0O2VlcHJvbV9ibG9jayA9IDI1NjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWF4MTc5X2RhdGEtJmd0O2lwX2FsaWduID0gMDsKJiM0MzsJCWF4MTc5X2RhdGEtJmd0O2VlcHJvbV9yZWFkX2NtZCA9IEFYX0FDQ0VTU19FRlVTOwomIzQzOwkJYXgxNzlfZGF0YS0mZ3Q7ZWVwcm9tX2Jsb2NrID0gMjA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2LSZndDtuZXQtJmd0O25ldGRldl9vcHMgPSAmYW1wO2F4ODgxNzlfbmV0ZGV2X29wczsKJiM0MzsJZGV2LSZndDtuZXQtJmd0O2V0aHRvb2xfb3BzID0gJmFtcDtheDg4MTc5X2V0aHRvb2xfb3BzOwomIzQzOwlkZXYtJmd0O25ldC0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gODsKJiM0MzsJZGV2LSZndDtuZXQtJmd0O25lZWRlZF90YWlscm9vbSA9IDg7CiYjNDM7CWRldi0mZ3Q7bmV0LSZndDttaW5fbXR1ID0gRVRIX01JTl9NVFU7CiYjNDM7CWRldi0mZ3Q7aGFyZF9tdHUgPSA5ICogMTAyNDsKJiM0MzsJZGV2LSZndDtuZXQtJmd0O21heF9tdHUgPSBkZXYtJmd0O2hhcmRfbXR1IC0gZGV2LSZndDtuZXQtJmd0O2hhcmRfaGVhZGVyX2xlbjsKJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSBNSUkgc3RydWN0dXJlICovCiYjNDM7CWRldi0mZ3Q7bWlpLmRldiA9IGRldi0mZ3Q7bmV0OwomIzQzOwlkZXYtJmd0O21paS5tZGlvX3JlYWQgPSBheDg4MTc5X21kaW9fcmVhZDsKJiM0MzsJZGV2LSZndDttaWkubWRpb193cml0ZSA9IGF4ODgxNzlfbWRpb193cml0ZTsKJiM0MzsJZGV2LSZndDttaWkucGh5X2lkX21hc2sgPSAweGZmOwomIzQzOwlkZXYtJmd0O21paS5yZWdfbnVtX21hc2sgPSAweGZmOwomIzQzOwlkZXYtJmd0O21paS5waHlfaWQgPSAweDAzOwomIzQzOwlpZiAoIWF4MTc5X2RhdGEtJmd0O2lzX2F4ODg3NzJkKQomIzQzOwkJZGV2LSZndDttaWkuc3VwcG9ydHNfZ21paSA9IDE7CiYjNDM7CiYjNDM7CWRldi0mZ3Q7bmV0LSZndDtmZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwKJiM0MzsJCQkgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU08gfAomIzQzOwkJCSAgICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfAomIzQzOwkJCSAgICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjsKJiM0MzsKJiM0MzsJZGV2LSZndDtuZXQtJmd0O2h3X2ZlYXR1cmVzIHw9IGRldi0mZ3Q7bmV0LSZndDtmZWF0dXJlczsKJiM0MzsKJiM0MzsJZGV2LSZndDtuZXQtJmd0O3ZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwKJiM0MzsJCQkJICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU087CiYjNDM7CiYjNDM7CW5ldGlmX3NldF90c29fbWF4X3NpemUoZGV2LSZndDtuZXQsIDE2Mzg0KTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIFRyYW5zbWlzc2lvbiBvZiBMaW5rIFNwZWVkIGJ5dGUgaW4gaW50ZXJydXB0IFVSQiAqLwomIzQzOwlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0ZXX01PREUsIEFYX0ZXX01PREVfMTc5QSwgMCwgMCwgTlVMTCk7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfUkVMT0FEX0VFUFJPTV9FRlVTRSwgMCwgMCwgMCwgTlVMTCk7CiYjNDM7CiYjNDM7CS8qIFJlYWQgTUFDIGFkZHJlc3MgZnJvbSBEVEIgb3IgQVNJWCBjaGlwICovCiYjNDM7CWF4ODgxNzlfZ2V0X21hY19hZGRyKGRldik7CiYjNDM7CW1lbWNweShkZXYtJmd0O25ldC0mZ3Q7cGVybV9hZGRyLCBkZXYtJmd0O25ldC0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX25vZGV2OgomIzQzOwlrZnJlZShheDE3OV9kYXRhKTsKJiM0MzsJYXgxNzlfZGF0YSA9IE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGF4ODgxNzlfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC0xMzM4LDYgJiM0MzsxOTYwLDIyIEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiAJa2ZyZWUoYXgxNzlfZGF0YSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBheDg4MTc5YV91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwomIzQzOwl1MTYgdG1wMTY7CiYjNDM7CXU4IHRtcDg7CiYjNDM7CiYjNDM7CS8qIENvbmZpZ3VyZSBSWCBjb250cm9sIHJlZ2lzdGVyID0mZ3Q7IHN0b3Agb3BlcmF0aW9uICovCiYjNDM7CXRtcDE2ID0gQVhfUlhfQ1RMX1NUT1A7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCAmYW1wO3RtcDE2KTsKJiM0MzsKJiM0MzsJdG1wOCA9IDA7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfUEhZX1BPV0VSLCAwLCAwLCAxLCAmYW1wO3RtcDgpOwomIzQzOwomIzQzOwlrZnJlZShheDE3OV9kYXRhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZAogYXg4ODE3OV9yeF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKnBrdF9oZHIpCiB7CkBAIC0xMzU0LDYgJiM0MzsxOTkyLDIxIEBAIGF4ODgxNzlfcnhfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpwa3RfaGRyKQogCQlza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYXg4ODE3OWFfcnhfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IHBrdF9kZXNjKQomIzQzO3sKJiM0MzsJdTMyIHBrdF90eXBlOwomIzQzOwomIzQzOwlza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiYjNDM7CS8qIGNoZWNrc3VtIGVycm9yIGJpdCBpcyBzZXQgKi8KJiM0MzsJaWYgKHBrdF9kZXNjICZhbXA7IEFYMTc5QV9SWF9QRF9MNF9FUlIgfHwgcGt0X2Rlc2MgJmFtcDsgQVgxNzlBX1JYX1BEX0wzX0VSUikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGt0X3R5cGUgPSBwa3RfZGVzYyAmYW1wOyBBWDE3OUFfUlhfUERfTDRfVFlQRV9NQVNLOwomIzQzOwkvKiBJdCBtdXN0IGJlIGEgVENQIG9yIFVEUCBwYWNrZXQgd2l0aCBhIHZhbGlkIGNoZWNrc3VtICovCiYjNDM7CWlmIChwa3RfdHlwZSA9PSBBWDE3OUFfUlhfUERfTDRfVENQIHx8IHBrdF90eXBlID09IEFYMTc5QV9SWF9QRF9MNF9VRFApCiYjNDM7CQlza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYXg4ODE3OV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKmF4X3NrYjsKQEAgLTE0NzIsNiAmIzQzOzIxMjUsMTIxIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGF4ODgxNzlhX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiOwomIzQzOwl1MzIgaGRyX29mZiwgcGt0X2VuZDsKJiM0MzsJdTY0ICpwa3RfZGVzY19wdHI7CiYjNDM7CXUxNiB2bGFuX3RhZzsKJiM0MzsJdTE2IHBrdF9jbnQ7CiYjNDM7CXU2NCByeF9oZHI7CiYjNDM7CiYjNDM7CS8qIFNLQiBjb250ZW50cyBmb3IgQVgxNzlBLWJhc2VkIGNoaXBzOgomIzQzOwkgKiAgICZsdDtwYWNrZXQgMSZndDsKJiM0MzsJICogICAuLi4KJiM0MzsJICogICAmbHQ7cGFja2V0IE4mZ3Q7CiYjNDM7CSAqICAgJmx0O3Blci1wYWNrZXQgbWV0YWRhdGEgZW50cnkgMSZndDsKJiM0MzsJICogICAuLi4KJiM0MzsJICogICAmbHQ7cGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSBOJmd0OwomIzQzOwkgKiAgICZsdDtyeF9oZHImZ3Q7CiYjNDM7CSAqCiYjNDM7CSAqIHdoZXJlOgomIzQzOwkgKiAgICZsdDtwYWNrZXQgTiZndDsgY29udGFpbnMgcGt0X2xlbiBkYXRhIGJ5dGVzIGFuZCBwYWRkaW5nOgomIzQzOwkgKgkJMiBieXRlcyBvZiBJUCBhbGlnbm1lbnQgKG9wdGlvbmFsLCBkZXBlbmRzIG9uIEFYX1JYX0NUTF9JUEUgZmxhZykKJiM0MzsJICoJCXBhY2tldCBkYXRhIHJlY2VpdmVkCiYjNDM7CSAqCQlvcHRpb25hbCBwYWRkaW5nIHRvIDgtYnl0ZXMgYm91bmRhcnkKJiM0MzsJICogICAmbHQ7cGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSBOJmd0OyBjb250YWlucyA4IGJ5dGVzOgomIzQzOwkgKgkJcGt0X2xlbiBhbmQgZmllbGRzIEFYX1JYSERSXyoKJiM0MzsJICogICAmbHQ7cngtaGRyJmd0Owljb250YWlucyA4IGJ5dGVzOgomIzQzOwkgKgkJcGt0X2NudCBhbmQgaGRyX29mZiAob2Zmc2V0IG9mICZsdDtwZXItcGFja2V0IG1ldGFkYXRhIGVudHJ5IDEmZ3Q7KQomIzQzOwkgKgomIzQzOwkgKiBwa3RfY250IGlzIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBwZXItcGFja2V0IG1ldGFkYXRhIGFycmF5LgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJaWYgKCFza2IgfHwgc2tiLSZndDtsZW4gJmx0OyBzaXplb2YocnhfaGRyKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkvKiBSWCBEZXNjcmlwdG9yIEhlYWRlciAqLwomIzQzOwlza2JfdHJpbShza2IsIHNrYi0mZ3Q7bGVuIC0gc2l6ZW9mKHJ4X2hkcikpOwomIzQzOwlyeF9oZHIgPSBsZTY0X3RvX2NwdXAoKHU2NCAqKXNrYl90YWlsX3BvaW50ZXIoc2tiKSk7CiYjNDM7CiYjNDM7CS8qIENoZWNrIHRoZXNlIHBhY2tldHMgKi8KJiM0MzsJaGRyX29mZiA9IChyeF9oZHIgJmFtcDsgQVgxNzlBX1JYX0RIX0RFU0NfT0ZGU0VUX01BU0spICZndDsmZ3Q7IEFYMTc5QV9SWF9ESF9ERVNDX09GRlNFVF9TSElGVDsKJiM0MzsJcGt0X2NudCA9IHJ4X2hkciAmYW1wOyBBWDE3OUFfUlhfREhfUEtUX0NOVF9NQVNLOwomIzQzOwomIzQzOwkvKiBDb25zaXN0ZW5jeSBjaGVjayBoZWFkZXIgcG9zaXRpb24gKi8KJiM0MzsJaWYgKGhkcl9vZmYgIT0gc2tiLSZndDtsZW4gLSAocGt0X2NudCAqIHNpemVvZihyeF9oZHIpKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgYm91bmRzIG9mIHRoZSBtZXRhZGF0YSBhcnJheSBhcmUgaW5zaWRlIHRoZSBTS0IKJiM0MzsJICogKGFuZCBpbiBmcm9udCBvZiB0aGUgY291bnRlciBhdCB0aGUgZW5kKS4KJiM0MzsJICovCiYjNDM7CWlmIChwa3RfY250ICogOCAmIzQzOyBoZHJfb2ZmICZndDsgc2tiLSZndDtsZW4pCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJLyogUGFja2V0cyBtdXN0IG5vdCBvdmVybGFwIHRoZSBtZXRhZGF0YSBhcnJheSAqLwomIzQzOwlza2JfdHJpbShza2IsIGhkcl9vZmYpOwomIzQzOwomIzQzOwlpZiAoIXBrdF9jbnQpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJLyogR2V0IHRoZSBmaXJzdCBSWCBwYWNrZXQgZGVzY3JpcHRvciAqLwomIzQzOwlwa3RfZGVzY19wdHIgPSAodTY0ICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBoZHJfb2ZmKTsKJiM0MzsKJiM0MzsJcGt0X2VuZCA9IDA7CiYjNDM7CXdoaWxlIChwa3RfY250LS0pIHsKJiM0MzsJCXU2NCBwa3RfZGVzYyA9IGxlNjRfdG9fY3B1cChwa3RfZGVzY19wdHIpOwomIzQzOwkJdTMyIHBrdF9sZW5fcGx1c19wYWRkOwomIzQzOwkJdTMyIHBrdF9sZW47CiYjNDM7CiYjNDM7CQlwa3RfbGVuID0gKHUzMikoKHBrdF9kZXNjICZhbXA7IEFYMTc5QV9SWF9QRF9MRU5fTUFTSykgJmd0OyZndDsgQVgxNzlBX1JYX1BEX0xFTl9TSElGVCkKJiM0MzsJCQkgIC0gKGF4MTc5X2RhdGEtJmd0O2lwX2FsaWduID8gMiA6IDApOwomIzQzOwkJcGt0X2xlbl9wbHVzX3BhZGQgPSAoKHBrdF9sZW4gJiM0MzsgNyAmIzQzOyAoYXgxNzlfZGF0YS0mZ3Q7aXBfYWxpZ24gPyAyIDogMCkpICZhbXA7IDB4N0ZGRjgpOwomIzQzOwomIzQzOwkJcGt0X2VuZCAmIzQzOz0gcGt0X2xlbl9wbHVzX3BhZGQ7CiYjNDM7CQlpZiAocGt0X2VuZCAmZ3Q7IGhkcl9vZmYgfHwgKHBrdF9jbnQgPT0gMCAmYW1wOyZhbXA7IHBrdF9lbmQgIT0gaGRyX29mZikpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CiYjNDM7CQlpZiAocGt0X2Rlc2MgJmFtcDsgQVgxNzlBX1JYX1BEX0RST1AgfHwgIShwa3RfZGVzYyAmYW1wOyBBWDE3OUFfUlhfUERfUlhfT0spIHx8CiYjNDM7CQkgICAgcGt0X2xlbiAmZ3Q7IChkZXYtJmd0O2hhcmRfbXR1ICYjNDM7IEFYMTc5QV9SWF9IV19QQUQpKSB7CiYjNDM7CQkJc2tiX3B1bGwoc2tiLCBwa3RfbGVuX3BsdXNfcGFkZCk7CiYjNDM7CiYjNDM7CQkJLyogTmV4dCBSWCBQYWNrZXQgRGVzY3JpcHRvciAqLwomIzQzOwkJCXBrdF9kZXNjX3B0ciYjNDM7JiM0Mzs7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlheF9za2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKGRldi0mZ3Q7bmV0LCBwa3RfbGVuKTsKJiM0MzsJCWlmICghYXhfc2tiKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkJc2tiX3B1dChheF9za2IsIHBrdF9sZW4pOwomIzQzOwkJbWVtY3B5KGF4X3NrYi0mZ3Q7ZGF0YSwgc2tiLSZndDtkYXRhICYjNDM7IChheDE3OV9kYXRhLSZndDtpcF9hbGlnbiA/IEFYMTc5QV9SWF9IV19QQUQgOiAwKSwKJiM0MzsJCSAgICAgICBwa3RfbGVuKTsKJiM0MzsKJiM0MzsJCWlmIChheDE3OV9kYXRhLSZndDtyeF9jaGVja3N1bSkKJiM0MzsJCQlheDg4MTc5YV9yeF9jaGVja3N1bShheF9za2IsIHBrdF9kZXNjKTsKJiM0MzsKJiM0MzsJCWlmIChwa3RfZGVzYyAmYW1wOyBBWDE3OUFfUlhfUERfVkxBTikgewomIzQzOwkJCXZsYW5fdGFnID0gcGt0X2Rlc2MgJmd0OyZndDsgQVgxNzlBX1JYX1BEX1ZMQU5fU0hJRlQ7CiYjNDM7CQkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhheF9za2IsIGh0b25zKEVUSF9QXzgwMjFRKSwKJiM0MzsJCQkJCSAgICAgICB2bGFuX3RhZyAmYW1wOyBWTEFOX1ZJRF9NQVNLKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXVzYm5ldF9za2JfcmV0dXJuKGRldiwgYXhfc2tiKTsKJiM0MzsJCXNrYl9wdWxsKHNrYiwgcGt0X2xlbl9wbHVzX3BhZGQpOwomIzQzOwomIzQzOwkJLyogTmV4dCBSWCBQYWNrZXQgSGVhZGVyICovCiYjNDM7CQlwa3RfZGVzY19wdHImIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAxOwomIzQzOwomIzQzO2VycjoKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBza19idWZmICoKIGF4ODgxNzlfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBmbGFncykKIHsKQEAgLTE1MDUsNiAmIzQzOzIyNzMsNTkgQEAgYXg4ODE3OV90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGZsYWdzKQogCXJldHVybiBza2I7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgomIzQzO2F4ODgxNzlhX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpCiYjNDM7ewomIzQzOwl1NjQgdHhfZGVzYyA9IHNrYi0mZ3Q7bGVuICZhbXA7IEFYMTc5QV9UWF9ERVNDX0xFTl9NQVNLOwomIzQzOwlpbnQgZnJhbWVfc2l6ZSA9IGRldi0mZ3Q7bWF4cGFja2V0OwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiOwomIzQzOwl1NjQgKnR4X2Rlc2NfcHRyOwomIzQzOwlpbnQgcGFkZGluZ19zaXplOwomIzQzOwlpbnQgaGVhZHJvb207CiYjNDM7CWludCB0YWlscm9vbTsKJiM0MzsJdTE2IHRjaSA9IDA7CiYjNDM7CiYjNDM7CS8qIFRTTyBNU1MgKi8KJiM0MzsJdHhfZGVzYyB8PSAoKHU2NCkoc2tiX3NoaW5mbyhza2IpLSZndDtnc29fc2l6ZSAmYW1wOyBBWDE3OUFfVFhfREVTQ19NU1NfTUFTSykpICZsdDsmbHQ7CiYjNDM7CQkgICBBWDE3OUFfVFhfREVTQ19NU1NfU0hJRlQ7CiYjNDM7CiYjNDM7CWhlYWRyb29tID0gKHNrYi0mZ3Q7bGVuICYjNDM7IHNpemVvZih0eF9kZXNjKSkgJSA4OwomIzQzOwlwYWRkaW5nX3NpemUgPSBoZWFkcm9vbSA/IDggLSBoZWFkcm9vbSA6IDA7CiYjNDM7CiYjNDM7CWlmICgoKHNrYi0mZ3Q7bGVuICYjNDM7IHNpemVvZih0eF9kZXNjKSAmIzQzOyBwYWRkaW5nX3NpemUpICUgZnJhbWVfc2l6ZSkgPT0gMCkgewomIzQzOwkJcGFkZGluZ19zaXplICYjNDM7PSA4OwomIzQzOwkJdHhfZGVzYyB8PSBBWDE3OUFfVFhfREVTQ19EUk9QX1BBREQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKChkZXYtJmd0O25ldC0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFgpICZhbXA7JmFtcDsgKHZsYW5fZ2V0X3RhZyhza2IsICZhbXA7dGNpKSAmZ3Q7PSAwKSkgewomIzQzOwkJdHhfZGVzYyB8PSBBWDE3OUFfVFhfREVTQ19WTEFOOwomIzQzOwkJdHhfZGVzYyB8PSAoKHU2NCl0Y2kgJmFtcDsgQVgxNzlBX1RYX0RFU0NfVkxBTl9NQVNLKSAmbHQ7Jmx0OyBBWDE3OUFfVFhfREVTQ19WTEFOX1NISUZUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtjYW5fZG1hX3NnICZhbXA7JmFtcDsgKGRldi0mZ3Q7bmV0LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX1NHKSAmYW1wOyZhbXA7IHNrYl9saW5lYXJpemUoc2tiKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwloZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpOwomIzQzOwl0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpOwomIzQzOwomIzQzOwlpZiAoIShoZWFkcm9vbSAmZ3Q7PSBzaXplb2YodHhfZGVzYykgJmFtcDsmYW1wOyB0YWlscm9vbSAmZ3Q7PSBwYWRkaW5nX3NpemUpKSB7CiYjNDM7CQlheF9za2IgPSBza2JfY29weV9leHBhbmQoc2tiLCBzaXplb2YodHhfZGVzYyksIHBhZGRpbmdfc2l6ZSwgZmxhZ3MpOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJCXNrYiA9IGF4X3NrYjsKJiM0MzsJCWlmICghc2tiKQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CWlmIChwYWRkaW5nX3NpemUgIT0gMCkKJiM0MzsJCXNrYl9wdXRfemVybyhza2IsIHBhZGRpbmdfc2l6ZSk7CiYjNDM7CS8qIENvcHkgVFggaGVhZGVyICovCiYjNDM7CXR4X2Rlc2NfcHRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YodHhfZGVzYykpOwomIzQzOwkqdHhfZGVzY19wdHIgPSBjcHVfdG9fbGU2NCh0eF9kZXNjKTsKJiM0MzsKJiM0MzsJdXNibmV0X3NldF9za2JfdHhfc3RhdHMoc2tiLCAxLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNrYjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGF4ODgxNzlfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCiB7CiAJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CkBAIC0xNTgwLDczICYjNDM7MjQwMSwzNDMgQEAgc3RhdGljIGludCBheDg4MTc5X2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYXg4ODE3OWFfYnVsa2luX2NvbmZpZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGxpbmtfc3RzKQomIzQzO3sKJiM0MzsJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgKmJ1bGtpbl9kYXRhOwomIzQzOwlpbnQgaW5kZXggPSAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKGF4MTc5X2RhdGEtJmd0O3NwZWVkKSB7CiYjNDM7CWNhc2UgRVRIRVJfTElOS18yNTAwOgkvKiBBWDg4Mjc5IG9ubHkgKi8KJiM0MzsJCWluZGV4ID0gMDsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEVUSEVSX0xJTktfMTAwMDoJLyogQVg4ODI3OSAmYW1wOyBBWDg4MTc4QSAqLwomIzQzOwkJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHsKJiM0MzsJCQlpZiAobGlua19zdHMgJmFtcDsgQVhfVVNCX1NTKQomIzQzOwkJCQlpbmRleCA9IDE7CiYjNDM7CQkJZWxzZSBpZiAobGlua19zdHMgJmFtcDsgQVhfVVNCX0hTKQomIzQzOwkJCQlpbmRleCA9IDI7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWlmIChsaW5rX3N0cyAmYW1wOyBBWF9VU0JfU1MpCiYjNDM7CQkJCWluZGV4ID0gMDsKJiM0MzsJCQllbHNlIGlmIChsaW5rX3N0cyAmYW1wOyBBWF9VU0JfSFMpCiYjNDM7CQkJCWluZGV4ID0gMTsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEVUSEVSX0xJTktfMTAwOgomIzQzOwkJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHsKJiM0MzsJCQlpZiAobGlua19zdHMgJmFtcDsgQVhfVVNCX1NTKQomIzQzOwkJCQlpbmRleCA9IDM7CiYjNDM7CQkJZWxzZSBpZiAobGlua19zdHMgJmFtcDsgQVhfVVNCX0hTKQomIzQzOwkJCQlpbmRleCA9IDU7CiYjNDM7CQkJaWYgKCFheDE3OV9kYXRhLSZndDtmdWxsX2R1cGxleCkKJiM0MzsJCQkJaW5kZXgmIzQzOyYjNDM7OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQkvKiBBWDg4Mjc5QSAmYW1wOyBBWDg4Mjc3RCAqLwomIzQzOwkJCWlmIChsaW5rX3N0cyAmYW1wOyBBWF9VU0JfU1MpCiYjNDM7CQkJCWluZGV4ID0gMjsKJiM0MzsJCQllbHNlIGlmIChsaW5rX3N0cyAmYW1wOyBBWF9VU0JfSFMpCiYjNDM7CQkJCWluZGV4ID0gNDsKJiM0MzsJCQlpZiAoIWF4MTc5X2RhdGEtJmd0O2Z1bGxfZHVwbGV4KQomIzQzOwkJCQlpbmRleCYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBFVEhFUl9MSU5LXzEwOgomIzQzOwkJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpCiYjNDM7CQkJaW5kZXggPSA3OwomIzQzOwkJZWxzZQomIzQzOwkJCWluZGV4ID0gNjsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwlkZWZhdWx0OgkvKiBObyBsaW5rICovCiYjNDM7CQlpbmRleCA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkgJmFtcDsmYW1wOyAobGlua19zdHMgJmFtcDsgQVhfVVNCX0ZTKSkKJiM0MzsJCWluZGV4ID0gNzsKJiM0MzsKJiM0MzsJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHsKJiM0MzsJCWJ1bGtpbl9kYXRhID0gQVg4ODI3OV9CVUxLSU5fU0laRTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChheDE3OV9kYXRhLSZndDtpc19heDg4NzcyZCkKJiM0MzsJCQlidWxraW5fZGF0YSA9IEFYODg3NzJEX0JVTEtJTl9TSVpFOwomIzQzOwkJZWxzZQomIzQzOwkJCWJ1bGtpbl9kYXRhID0gQVg4ODE3OUFfQlVMS0lOX1NJWkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9CVUxLSU5fUUNUUkwsIDUsIDUsICZhbXA7YnVsa2luX2RhdGFbaW5kZXhdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBheDg4MTc5YV9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwomIzQzOwl1OCB0bXA4LCBsaW5rX3N0cywgcmVnOFszXTsKJiM0MzsJdTE2IHRtcDE2LCBtb2RlLCBzcGVlZDsKJiM0MzsKJiM0MzsJaWYgKCFheDE3OV9kYXRhLSZndDtsaW5rKSB7CiYjNDM7CQluZXRkZXZfaW5mbyhkZXYtJmd0O25ldCwgJiMzNDtheDg4MTc5YSAtIExpbmsgc3RhdHVzIGlzOiAwXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdG9wIFJYL1RYIGZvciBsaW5rIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsJdG1wMTYgPSBBWF9SWF9DVExfU1RPUDsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsICZhbXA7dG1wMTYpOwomIzQzOwl0bXA4ID0gMDsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUEFUSCwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJdG1wOCA9IDB4YTU7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0NEQ19ERUxBWV9UWCwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJdG1wMTYgPSAweDA0MTA7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfTE9XLCAyLCAyLCAmYW1wO3RtcDE2KTsKJiM0MzsKJiM0MzsJdG1wOCA9IDA7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfRVRIX1RYX0dBUCwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJdG1wOCA9IDB4MDc7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfRVA1X0VIUiwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJdG1wOCA9IDB4MjggfCBBWF9ORVdfUEFVU0VfRU47CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTkVXX1BBVVNFX0NUUkwsIDEsIDEsICZhbXA7dG1wOCk7CiYjNDM7CiYjNDM7CW1vZGUgPSBBWF9NRURJVU1fUkVDRUlWRV9FTiB8IEFYX01FRElVTV9UWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX1JYRkxPV19DVFJMRU47CiYjNDM7CiYjNDM7CS8qIExpbmsgaXMgdXAsIGJ1dCBzb21lIG9sZGVyIEFYODgxNzlBIEZXIHZlcnNpb25zIGRvIG5vdCBzZW5kIGxpbmsgc3BlZWQKJiM0MzsJICogYW5kIGR1cGxleCBzdGF0dXMgaW4gaW50ZXJydXB0IFVSQiwgc28gcmVhZCBpdCB2aWEgTUlJCiYjNDM7CSAqLwomIzQzOwlpZiAoIWF4MTc5X2RhdGEtJmd0O3NwZWVkKSB7CiYjNDM7CQlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7CiYjNDM7CiYjNDM7CQltaWlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MoJmFtcDtkZXYtJmd0O21paSwgJmFtcDtjbWQpOwomIzQzOwkJYXgxNzlfZGF0YS0mZ3Q7ZnVsbF9kdXBsZXggPSBjbWQuYmFzZS5kdXBsZXg7CiYjNDM7CQlzd2l0Y2ggKGNtZC5iYXNlLnNwZWVkKSB7CiYjNDM7CQljYXNlIFNQRUVEXzEwMDA6CiYjNDM7CQkJYXgxNzlfZGF0YS0mZ3Q7c3BlZWQgPSBFVEhFUl9MSU5LXzEwMDA7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIFNQRUVEXzEwMDoKJiM0MzsJCQlheDE3OV9kYXRhLSZndDtzcGVlZCA9IEVUSEVSX0xJTktfMTAwOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBTUEVFRF8xMDoKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJYXgxNzlfZGF0YS0mZ3Q7c3BlZWQgPSBFVEhFUl9MSU5LXzEwOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfTsKJiM0MzsJfQomIzQzOwomIzQzOwlzcGVlZCA9IDA7CiYjNDM7CXN3aXRjaCAoYXgxNzlfZGF0YS0mZ3Q7c3BlZWQpIHsKJiM0MzsJY2FzZSBFVEhFUl9MSU5LXzI1MDA6CiYjNDM7CQlyZWc4WzBdID0gMHgwMDsKJiM0MzsJCXJlZzhbMV0gPSAweEY4OwomIzQzOwkJcmVnOFsyXSA9IDB4MDc7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19UWF9QQVVTRSwgMywgMywgcmVnOCk7CiYjNDM7CiYjNDM7CQlyZWc4WzBdID0gMHg3ODsKJiM0MzsJCXJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyAmbHQ7Jmx0OyA1KTsKJiM0MzsJCXJlZzhbMl0gPSAwOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfU1RBVFVTX0NEQywgMywgMywgcmVnOCk7CiYjNDM7CiYjNDM7CQlyZWc4WzBdID0gMHg0MDsKJiM0MzsJCXJlZzhbMV0gPSBBWF9NQUNfTUlRRkZDVFJMX0ZPUk1BVCB8IEFYX01BQ19NSVFGRkNUUkxfRFJPUF9DUkMgfCBBWF9NQUNfTFNPX0VSUl9FTjsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMiwgMiwgcmVnOCk7CiYjNDM7CiYjNDM7CQl0bXA4ID0gQVhfWEdNSUlfRU47CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX0JGTV9EQVRBLCAxLCAxLCAmYW1wO3RtcDgpOwomIzQzOwomIzQzOwkJdG1wOCA9IDB4MUMgfCBBWF9MU09fRU5IQU5DRV9FTjsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0xTT19FTkhBTkNFX0NUUkwsIDEsIDEsICZhbXA7dG1wOCk7CiYjNDM7CiYjNDM7CQltb2RlIHw9IEFYX01FRElVTV9HSUdBTU9ERSB8IEFYX01FRElVTV9GVUxMX0RVUExFWDsKJiM0MzsKJiM0MzsJCXNwZWVkID0gMjUwMDsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEVUSEVSX0xJTktfMTAwMDoKJiM0MzsJCW1vZGUgfD0gQVhfTUVESVVNX0dJR0FNT0RFOwomIzQzOwkJc3BlZWQgPSAxMDAwOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CiYjNDM7CWNhc2UgRVRIRVJfTElOS18xMDA6CiYjNDM7CQlyZWc4WzBdID0gMHg3ODsKJiM0MzsJCXJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyAmbHQ7Jmx0OyA1KSB8IEFYX0dNSUlfQ1JDX0FQUEVORDsKJiM0MzsJCXJlZzhbMl0gPSAwOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfU1RBVFVTX0NEQywgMywgMywgcmVnOCk7CiYjNDM7CiYjNDM7CQl0bXA4ID0gMHg0MDsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJCXNwZWVkID0gc3BlZWQgPyBzcGVlZCA6IDEwMDsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEVUSEVSX0xJTktfMTA6CiYjNDM7CQlyZWc4WzBdID0gMHhGQTsKJiM0MzsJCXJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyAmbHQ7Jmx0OyA1KSB8IEFYX0dNSUlfQ1JDX0FQUEVORDsKJiM0MzsJCXJlZzhbMl0gPSAweEZGOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfU1RBVFVTX0NEQywgMywgMywgcmVnOCk7CiYjNDM7CiYjNDM7CQl0bXA4ID0gMHhGQTsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJCXNwZWVkID0gMTA7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgUEhZU0lDQUxfTElOS19TVEFUVVMsIDEsIDEsICZhbXA7bGlua19zdHMpOwomIzQzOwlheDg4MTc5YV9idWxraW5fY29uZmlnKGRldiwgbGlua19zdHMpOwomIzQzOwomIzQzOwlpZiAoYXgxNzlfZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uICZsdDsgQVhfVkVSU0lPTl9BWDg4Mjc5KSB7CiYjNDM7CQl0bXA4ID0gMDsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfQkZNX0RBVEEsIDEsIDEsICZhbXA7dG1wOCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGF4MTc5X2RhdGEtJmd0O2Z1bGxfZHVwbGV4KQomIzQzOwkJbW9kZSB8PSBBWF9NRURJVU1fRlVMTF9EVVBMRVg7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O25ldC0mZ3Q7bXR1ICZndDsgMTUwMCkKJiM0MzsJCW1vZGUgfD0gQVhfTUVESVVNX0pVTUJPX0VOOwomIzQzOwlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwgMiwgMiwgJmFtcDttb2RlKTsKJiM0MzsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsICZhbXA7YXgxNzlfZGF0YS0mZ3Q7cnhjdGwpOwomIzQzOwomIzQzOwl0bXA4ID0gQVhfTUFDX1JYX1BBVEhfUkVBRFkgfCBBWF9NQUNfVFhfUEFUSF9SRUFEWTsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUEFUSCwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJYXgxNzlfZGF0YS0mZ3Q7ZWVlX2VuYWJsZWQgPSBheDg4MTc5X2Noa19lZWUoZGV2KTsKJiM0MzsKJiM0MzsJbmV0aWZfY2Fycmllcl9vbihkZXYtJmd0O25ldCk7CiYjNDM7CiYjNDM7CW5ldGRldl9pbmZvKGRldi0mZ3Q7bmV0LCAmIzM0O2F4ODgxNzlhIC0gTGluayBzdGF0dXMgaXM6IDEsIExpbmsgc3BlZWQ6ICVkLCBEdXBsZXg6ICVkXG4mIzM0OywKJiM0MzsJCSAgICBzcGVlZCwgYXgxNzlfZGF0YS0mZ3Q7ZnVsbF9kdXBsZXgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGF4ODgxNzlfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQogewotCXU4IGJ1Zls1XTsKLQl1MTYgKnRtcDE2OwotCXU4ICp0bXA7CiAJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiAJc3RydWN0IGV0aHRvb2xfa2VlZSBlZWVfZGF0YTsKJiM0MzsJdTE2ICp0bXAxNjsKJiM0MzsJdTggYnVmWzVdOwomIzQzOwl1OCAqdG1wOwogCiAJdG1wMTYgPSAodTE2ICopYnVmOwogCXRtcCA9ICh1OCAqKWJ1ZjsKIAogCS8qIFBvd2VyIHVwIGV0aGVybmV0IFBIWSAqLwotCSp0bXAxNiA9IDA7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLCAyLCAyLCB0bXAxNik7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7CiYjNDM7CQkqdG1wMTYgPSAwOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLCAyLCAyLCB0bXAxNik7CiAKLQkqdG1wMTYgPSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLCAyLCAyLCB0bXAxNik7Ci0JbXNsZWVwKDUwMCk7CiYjNDM7CQkqdG1wMTYgPSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsIDIsIDIsIHRtcDE2KTsKJiM0MzsJCW1zbGVlcCg1MDApOwogCi0JKnRtcCA9IEFYX0NMS19TRUxFQ1RfQUNTIHwgQVhfQ0xLX1NFTEVDVF9CQ1M7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DTEtfU0VMRUNULCAxLCAxLCB0bXApOwotCW1zbGVlcCgyMDApOwomIzQzOwkJKnRtcCA9IEFYX0NMS19TRUxFQ1RfQUNTIHwgQVhfQ0xLX1NFTEVDVF9CQ1M7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NMS19TRUxFQ1QsIDEsIDEsIHRtcCk7CiYjNDM7CQltc2xlZXAoMjAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCSp0bXAgPSBBWF9QSFlfUE9XRVI7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgdG1wKTsKJiM0MzsJCW1zbGVlcCgyNTApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7CiYjNDM7CQkqdG1wMTYgPSBheDg4MTc5X21kaW9fcmVhZChkZXYtJmd0O25ldCwgZGV2LSZndDttaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKJiM0MzsJCSp0bXAxNiAmYW1wOz0gfihBRFZFUlRJU0VfMTBGVUxMIHwgQURWRVJUSVNFXzEwSEFMRik7CiYjNDM7CQkqdG1wMTYgfD0gQURWRVJUSVNFX1JFU1Y7IC8qIEFkdmVydGlzZSAyLjVHQml0IGxpbmsgKi8KJiM0MzsJCWF4ODgxNzlfbWRpb193cml0ZShkZXYtJmd0O25ldCwgZGV2LSZndDttaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLCAqdG1wMTYpOwomIzQzOwl9CiAKIAkvKiBFdGhlcm5ldCBQSFkgQXV0byBEZXRhY2gqLwogCWF4ODgxNzlfYXV0b19kZXRhY2goZGV2KTsKIAomIzQzOwlpZiAoYXgxNzlfZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uICZndDs9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHsKJiM0MzsJCSp0bXAgPSBBWF9NQUNfRUZGX0VOOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQlVMS19PVVRfQ1RSTCwgMSwgMSwgdG1wKTsKJiM0MzsKJiM0MzsJCSp0bXAxNiA9IDA7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgdG1wMTYpOwomIzQzOwomIzQzOwkJKnRtcCA9IDB4MDQ7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMSwgMSwgdG1wKTsKJiM0MzsJCSp0bXAgPSAweDEwOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QQVVTRV9XQVRFUkxWTF9ISUdILCAxLCAxLCB0bXApOwomIzQzOwomIzQzOwkJKnRtcCA9IDA7CiYjNDM7CQlpZiAoZGV2LSZndDtuZXQtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikKJiM0MzsJCQkqdG1wIHw9IEFYX1ZMQU5fQ09OVFJPTF9WRkU7CiYjNDM7CQlpZiAoZGV2LSZndDtuZXQtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYKQomIzQzOwkJCSp0bXAgfD0gQVhfVkxBTl9DT05UUk9MX1ZTTzsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCB0bXApOwomIzQzOwomIzQzOwkJKnRtcCA9IDB4ZmY7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19CTV9JTlRfTUFTSywgMSwgMSwgdG1wKTsKJiM0MzsKJiM0MzsJCSp0bXAgPSAwOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fUlhfRE1BX0NUTCwgMSwgMSwgdG1wKTsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0JNX1RYX0RNQV9DVEwsIDEsIDEsIHRtcCk7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19BUkNfQ1RSTCwgMSwgMSwgdG1wKTsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1NXUF9DVFJMLCAxLCAxLCB0bXApOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfVFhfSERSX0NLU1VNLCAxLCAxLCB0bXApOwomIzQzOwl9CiYjNDM7CiAJLyogUmVhZCBNQUMgYWRkcmVzcyBmcm9tIERUQiBvciBhc2l4IGNoaXAgKi8KIAlheDg4MTc5X2dldF9tYWNfYWRkcihkZXYpOwogCW1lbWNweShkZXYtJmd0O25ldC0mZ3Q7cGVybV9hZGRyLCBkZXYtJmd0O25ldC0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAogCS8qIFJYIGJ1bGsgY29uZmlndXJhdGlvbiAqLwotCW1lbWNweSh0bXAsICZhbXA7QVg4ODE3OV9CVUxLSU5fU0laRVswXSwgNSk7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9CVUxLSU5fUUNUUkwsIDUsIDUsIHRtcCk7Ci0KLQlkZXYtJmd0O3J4X3VyYl9zaXplID0gMTAyNCAqIDIwOwotCi0JKnRtcCA9IDB4MzQ7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QQVVTRV9XQVRFUkxWTF9MT1csIDEsIDEsIHRtcCk7Ci0KLQkqdG1wID0gMHg1MjsKLQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsCi0JCQkgIDEsIDEsIHRtcCk7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7CiYjNDM7CQltZW1jcHkodG1wLCAmYW1wO0FYODgxNzlfQlVMS0lOX1NJWkVbMF0sIDUpOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9CVUxLSU5fUUNUUkwsIDUsIDUsIHRtcCk7CiYjNDM7CQkqdG1wID0gMHgzNDsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfTE9XLCAxLCAxLCB0bXApOwomIzQzOwomIzQzOwkJKnRtcCA9IDB4NTI7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsCiYjNDM7CQkJCSAgMSwgMSwgdG1wKTsKJiM0MzsJCWRldi0mZ3Q7cnhfdXJiX3NpemUgPSAxMDI0ICogMjA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBUaGUgQnVsay1SZWdpc3RlciBjb25maWd1cmF0aW9uIGZvciB0aGUgQVg4ODE3OUEgaXMgZG9uZSBpbgomIzQzOwkJICogYXg4ODE3OWFfbGlua19yZXNldCgpLCBvbmNlIHRoZSBsaW5rIGlzIHVwIGZvciBhIGdpdmVuIGxpbmsgYW5kIFVTQi1zcGVlZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGF4MTc5X2RhdGEtJmd0O2lzX2F4ODg3NzJkKQomIzQzOwkJCWRldi0mZ3Q7cnhfdXJiX3NpemUgPSAxMDI0ICogMjQ7CiYjNDM7CQllbHNlCiYjNDM7CQkJZGV2LSZndDtyeF91cmJfc2l6ZSA9IDEwMjQgKiA0ODsKJiM0MzsJfQogCiAJLyogRW5hYmxlIGNoZWNrc3VtIG9mZmxvYWQgKi8KIAkqdG1wID0gQVhfUlhDT0VfSVAgfCBBWF9SWENPRV9UQ1AgfCBBWF9SWENPRV9VRFAgfAogCSAgICAgICBBWF9SWENPRV9UQ1BWNiB8IEFYX1JYQ09FX1VEUFY2OwogCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhDT0VfQ1RMLCAxLCAxLCB0bXApOwomIzQzOwlheDE3OV9kYXRhLSZndDtyeF9jaGVja3N1bSA9IDE7CiAKIAkqdG1wID0gQVhfVFhDT0VfSVAgfCBBWF9UWENPRV9UQ1AgfCBBWF9UWENPRV9VRFAgfAogCSAgICAgICBBWF9UWENPRV9UQ1BWNiB8IEFYX1RYQ09FX1VEUFY2OwogCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfVFhDT0VfQ1RMLCAxLCAxLCB0bXApOwogCiAJLyogQ29uZmlndXJlIFJYIGNvbnRyb2wgcmVnaXN0ZXIgPSZndDsgc3RhcnQgb3BlcmF0aW9uICovCi0JKnRtcDE2ID0gQVhfUlhfQ1RMX0RST1BDUkNFUlIgfCBBWF9SWF9DVExfSVBFIHwgQVhfUlhfQ1RMX1NUQVJUIHwKLQkJIEFYX1JYX0NUTF9BUCB8IEFYX1JYX0NUTF9BTUFMTCB8IEFYX1JYX0NUTF9BQjsKLQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgdG1wMTYpOwotCi0JKnRtcCA9IEFYX01PTklUT1JfTU9ERV9QTUVUWVBFIHwgQVhfTU9OSVRPUl9NT0RFX1BNRVBPTCB8Ci0JICAgICAgIEFYX01PTklUT1JfTU9ERV9SV01QOwomIzQzOwlheDE3OV9kYXRhLSZndDtyeGN0bCA9IEFYX1JYX0NUTF9EUk9QQ1JDRVJSIHwgQVhfUlhfQ1RMX1NUQVJUIHwKJiM0MzsJCQkgICAgQVhfUlhfQ1RMX0FQIHwgQVhfUlhfQ1RMX0FNQUxMIHwgQVhfUlhfQ1RMX0FCOwomIzQzOwlpZiAoYXgxNzlfZGF0YS0mZ3Q7aXBfYWxpZ24pCiYjNDM7CQlheDE3OV9kYXRhLSZndDtyeGN0bCB8PSBBWF9SWF9DVExfSVBFOwomIzQzOwlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgJmFtcDtheDE3OV9kYXRhLSZndDtyeGN0bCk7CiYjNDM7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKQomIzQzOwkJKnRtcCA9IEFYX01PTklUT1JfTU9ERV9QTUVUWVBFIHwgQVhfTU9OSVRPUl9NT0RFX1BNRVBPTCB8IEFYX01PTklUT1JfTU9ERV9SV01QOwomIzQzOwllbHNlCiYjNDM7CQkqdG1wID0gQVhfTU9OSVRPUl9NT0RFX1JXTVA7CiAJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NT05JVE9SX01PRCwgMSwgMSwgdG1wKTsKIAogCS8qIENvbmZpZ3VyZSBkZWZhdWx0IG1lZGl1bSB0eXBlID0mZ3Q7IGdpZ2EgKi8KIAkqdG1wMTYgPSBBWF9NRURJVU1fUkVDRUlWRV9FTiB8IEFYX01FRElVTV9UWEZMT1dfQ1RSTEVOIHwKLQkJIEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX0ZVTExfRFVQTEVYIHwKLQkJIEFYX01FRElVTV9HSUdBTU9ERTsKLQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwKLQkJCSAgMiwgMiwgdG1wMTYpOwomIzQzOwkJIEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX0ZVTExfRFVQTEVYOwomIzQzOwlpZiAoIWF4MTc5X2RhdGEtJmd0O2lzX2F4ODg3NzJkKQomIzQzOwkJKnRtcDE2IHw9IEFYX01FRElVTV9HSUdBTU9ERTsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIHRtcDE2KTsKIAogCS8qIENoZWNrIGlmIFdvTCBpcyBzdXBwb3J0ZWQgKi8KIAlheDE3OV9kYXRhLSZndDt3b2xfc3VwcG9ydGVkID0gMDsKQEAgLTE2NTQsMTYgJiM0MzsyNzQ1LDI5IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCiAJCQkgICAgIDEsIDEsICZhbXA7dG1wKSAmZ3Q7IDApCiAJCWF4MTc5X2RhdGEtJmd0O3dvbF9zdXBwb3J0ZWQgPSBXQUtFX01BR0lDIHwgV0FLRV9QSFk7CiAKLQlheDg4MTc5X2xlZF9zZXR0aW5nKGRldik7CiYjNDM7CS8qIEZvciBjaGlwcyBzdGFydGluZyB3aXRoIEFYODgxNzlBLCBMRURTIGFyZSBjb25maWd1cmVkIGJ5IHRoZSBhZGFwdGVyCiYjNDM7CSAqIGZpcm13YXJlIGRpcmVjdGx5IGZyb20gRUVQUk9NL0VGVVNFIHZhbHVlcwomIzQzOwkgKi8KJiM0MzsJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiAmbHQ7IEFYX1ZFUlNJT05fQVg4ODE3OUEpCiYjNDM7CQlheDg4MTc5X2xlZF9zZXR0aW5nKGRldik7CiAKIAlheDE3OV9kYXRhLSZndDtlZWVfZW5hYmxlZCA9IDA7CiAJYXgxNzlfZGF0YS0mZ3Q7ZWVlX2FjdGl2ZSA9IDA7CiAKLQlheDg4MTc5X2Rpc2FibGVfZWVlKGRldik7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7CiYjNDM7CQlheDg4MTc5X2VlZV9jb25maWcoZGV2LCBmYWxzZSk7CiAKLQlheDg4MTc5X2V0aHRvb2xfZ2V0X2VlZShkZXYsICZhbXA7ZWVlX2RhdGEpOwotCWxpbmttb2RlX3plcm8oZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7Ci0JYXg4ODE3OV9ldGh0b29sX3NldF9lZWUoZGV2LCAmYW1wO2VlZV9kYXRhKTsKJiM0MzsJCWF4ODgxNzlfZXRodG9vbF9nZXRfZWVlKGRldiwgJmFtcDtlZWVfZGF0YSk7CiYjNDM7CQlsaW5rbW9kZV96ZXJvKGVlZV9kYXRhLmFkdmVydGlzZWQpOwomIzQzOwkJYXg4ODE3OV9ldGh0b29sX3NldF9lZWUoZGV2LCAmYW1wO2VlZV9kYXRhKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWF4ODgxNzlfZWVlX2NvbmZpZyhkZXYsIHRydWUpOwomIzQzOwkJYXg4ODE3OV9ldGh0b29sX2dldF9lZWUoZGV2LCAmYW1wO2VlZV9kYXRhKTsKJiM0MzsJCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULCBlZWVfZGF0YS5hZHZlcnRpc2VkKTsKJiM0MzsJCWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmd0Oz0gQVhfVkVSU0lPTl9BWDg4Mjc5KQomIzQzOwkJCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULCBlZWVfZGF0YS5hZHZlcnRpc2VkKTsKJiM0MzsJCWF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgJmFtcDtlZWVfZGF0YSk7CiYjNDM7CX0KIAogCS8qIFJlc3RhcnQgYXV0b25lZyAqLwogCW1paV9ud2F5X3Jlc3RhcnQoJmFtcDtkZXYtJmd0O21paSk7CkBAIC0xNzA3LDYgJiM0MzsyODExLDI0IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYXg4ODE3OWFfc3RvcChzdHJ1Y3QgdXNibmV0ICpkZXYpCiYjNDM7ewomIzQzOwl1MTYgcmVnMTY7CiYjNDM7CXU4IHJlZzg7CiYjNDM7CiYjNDM7CWF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsICZhbXA7cmVnMTYpOwomIzQzOwlyZWcxNiAmYW1wOz0gfkFYX01FRElVTV9SRUNFSVZFX0VOOwomIzQzOwlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwgMiwgMiwgJmFtcDtyZWcxNik7CiYjNDM7CiYjNDM7CXJlZzE2ID0gMDsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsICZhbXA7cmVnMTYpOwomIzQzOwomIzQzOwlyZWc4ID0gMDsKJiM0MzsJYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgJmFtcDtyZWc4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTc5X2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gJiMzNDtBU0lYIEFYODgxNzkgVVNCIDMuMCBHaWdhYml0IEV0aGVybmV0JiMzNDssCiAJLmJpbmQgPSBheDg4MTc5X2JpbmQsCkBAIC0xNzMzLDYgJiM0MzsyODU1LDQ1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODE3OGFfaW5mbyA9IHsKIAkudHhfZml4dXAgPSBheDg4MTc5X3R4X2ZpeHVwLAogfTsKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODE3OWFfaW5mbyA9IHsKJiM0MzsJLmRlc2NyaXB0aW9uID0gJiMzNDtBU0lYIEFYODgxNzlBIFVTQiAzLjIgR2lnYWJpdCBFdGhlcm5ldCYjMzQ7LAomIzQzOwkuYmluZCA9IGF4ODgxNzlhX2JpbmQsCiYjNDM7CS51bmJpbmQgPSBheDg4MTc5YV91bmJpbmQsCiYjNDM7CS5zdGF0dXMgPSBheDg4MTc5X3N0YXR1cywKJiM0MzsJLmxpbmtfcmVzZXQgPSBheDg4MTc5YV9saW5rX3Jlc2V0LAomIzQzOwkucmVzZXQgPSBheDg4MTc5X3Jlc2V0LAomIzQzOwkuc3RvcCA9IGF4ODgxNzlhX3N0b3AsCiYjNDM7CS5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVggfCBGTEFHX01VTFRJX1BBQ0tFVCB8IEZMQUdfQVZPSURfVU5MSU5LX1VSQlMsCiYjNDM7CS5yeF9maXh1cCA9IGF4ODgxNzlhX3J4X2ZpeHVwLAomIzQzOwkudHhfZml4dXAgPSBheDg4MTc5YV90eF9maXh1cCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODc3MmRfaW5mbyA9IHsKJiM0MzsJLmRlc2NyaXB0aW9uID0gJiMzNDtBU0lYIEFYODg3NzJEL0UgVVNCIDIuMCBGYXN0IEV0aGVybmV0JiMzNDssCiYjNDM7CS5iaW5kID0gYXg4ODE3OWFfYmluZCwKJiM0MzsJLnVuYmluZCA9IGF4ODgxNzlhX3VuYmluZCwKJiM0MzsJLnN0YXR1cyA9IGF4ODgxNzlfc3RhdHVzLAomIzQzOwkubGlua19yZXNldCA9IGF4ODgxNzlhX2xpbmtfcmVzZXQsCiYjNDM7CS5yZXNldCA9IGF4ODgxNzlfcmVzZXQsCiYjNDM7CS5zdG9wID0gYXg4ODE3OWFfc3RvcCwKJiM0MzsJLmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VUIHwgRkxBR19BVk9JRF9VTkxJTktfVVJCUywKJiM0MzsJLnJ4X2ZpeHVwID0gYXg4ODE3OWFfcnhfZml4dXAsCiYjNDM7CS50eF9maXh1cCA9IGF4ODgxNzlhX3R4X2ZpeHVwLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4Mjc5X2luZm8gPSB7CiYjNDM7CS5kZXNjcmlwdGlvbiA9ICYjMzQ7QVNJWCBBWDg4Mjc5IFVTQiAzLjIgMi41R2lnYWJpdCBFdGhlcm5ldCYjMzQ7LAomIzQzOwkuYmluZCA9IGF4ODgxNzlhX2JpbmQsCiYjNDM7CS51bmJpbmQgPSBheDg4MTc5YV91bmJpbmQsCiYjNDM7CS5zdGF0dXMgPSBheDg4MTc5X3N0YXR1cywKJiM0MzsJLmxpbmtfcmVzZXQgPSBheDg4MTc5YV9saW5rX3Jlc2V0LAomIzQzOwkucmVzZXQgPSBheDg4MTc5X3Jlc2V0LAomIzQzOwkuc3RvcCA9IGF4ODgxNzlhX3N0b3AsCiYjNDM7CS5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVggfCBGTEFHX01VTFRJX1BBQ0tFVCB8IEZMQUdfQVZPSURfVU5MSU5LX1VSQlMsCiYjNDM7CS5yeF9maXh1cCA9IGF4ODgxNzlhX3J4X2ZpeHVwLAomIzQzOwkudHhfZml4dXAgPSBheDg4MTc5YV90eF9maXh1cCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjeXByZXNzX0dYM19pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9ICYjMzQ7Q3lwcmVzcyBHWDMgU3VwZXJTcGVlZCB0byBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXImIzM0OywKIAkuYmluZCA9IGF4ODgxNzlfYmluZCwKQEAgLTE4NzgsNiAmIzQzOzMwMzksMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBhdF91bWMyMDAwc3BfaW5mbyA9IHsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHByb2R1Y3RzW10gPSB7CiB7CiYjNDM7CS8qIEFTSVggQVg4ODE3OUEvQiBVU0IgMy4yIEdpZ2FiaXQgRXRoZXJuZXQgKi8KJiM0MzsJVVNCX0RFVklDRV9WRVIoMHgwYjk1LCAweDE3OTAsIDB4MDIwMCwgMHgwMjAwKSwKJiM0MzsJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmFtcDtheDg4MTc5YV9pbmZvLAomIzQzO30sIHsKJiM0MzsJLyogQVNJWCBBWDg4NzcyRCBVU0IgMi4wIDEwME1iaXQgRXRoZXJuZXQgKi8KJiM0MzsJVVNCX0RFVklDRV9WRVIoMHgwYjk1LCAweDE3OTAsIDB4MDMwMCwgMHgwMzAwKSwKJiM0MzsJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmFtcDtheDg4NzcyZF9pbmZvLAomIzQzO30sIHsKJiM0MzsJLyogQVNJWCBBWDg4Mjc5IFVTQiAzLjIgMi41R0JpdCBFdGhlcm5ldCAqLwomIzQzOwlVU0JfREVWSUNFX1ZFUigweDBiOTUsIDB4MTc5MCwgMHgwNDAwLCAweDA0MDApLAomIzQzOwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmYW1wO2F4ODgyNzlfaW5mbywKJiM0Mzt9LCB7CiAJLyogQVNJWCBBWDg4MTc5IDEwLzEwMC8xMDAwICovCiAJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwYjk1LCAweDE3OTAsIDB4ZmYsIDB4ZmYsIDApLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSZhbXA7YXg4ODE3OV9pbmZvLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTgwNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBWDg4MTc5IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgYGRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBsZXQmIzM5O3MgYnJlYWsgaXQgZG93biBmcm9tIGEgZnVuY3Rpb25hbCB0ZXN0aW5nIHBlcnNwZWN0aXZlLiBJdCYjMzk7cyBhZGRpbmcgc3VwcG9ydCBmb3IgYSBoYW5kZnVsIG9mIG5ldyBjaGlwczogdGhlIEFYODgxNzlBLCBBWDg4NzcyRCwgYW5kIEFYODgyNzkuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgYXJjaGl0ZWN0dXJhbCBkaWZmZXJlbmNlcyB0aGF0IHJlcXVpcmUgbmV3IGRldmljZSBpbmZvIHN0cnVjdHVyZXM6IGBheDg4MTc5YV9pbmZvYCwgYGF4ODg3NzJkX2luZm9gLCBgYXg4ODI3OV9pbmZvYC4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGVzZSBuZXcgc3RydWN0dXJlcyBoaW50cyBhdCBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciBtYXBwaW5ncyBvciBjb250cm9sIHNlcXVlbmNlcywgd2hpY2ggaXMgYWx3YXlzIGEganVpY3kgdGFyZ2V0IGZvciBmaW5kaW5nIHN1YnRsZSBpc3N1ZXMuCgpXZSBhbHNvIGhhdmUgbmV3IGZ1bmN0aW9uczogYGF4ODgxNzlhX2JpbmRgLCBgYXg4ODE3OWFfdW5iaW5kYCwgYGF4ODgxNzlhX3J4X2ZpeHVwYCwgYGF4ODgxNzlhX3R4X2ZpeHVwYCwgYGF4ODgxNzlhX2xpbmtfcmVzZXRgLCBgYXg4ODE3OWFfc3RvcGAuIFRoZXNlIHByb2JhYmx5IGltcGxlbWVudCB0aGUgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgbGluayBoYW5kbGluZyBmb3IgZWFjaCBvZiB0aGVzZSBuZXcgY2hpcHNldHMuIFRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGV4aXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBheDg4MTc5X3Jlc2V0YCBhbmQgYGF4ODgxNzlfc3RhdHVzYCBpbXBsaWVzIGVpdGhlciBzaGFyZWQgZnVuY3Rpb25hbGl0eSBhY3Jvc3MgY2hpcHNldHMgb3IgbW9kaWZpY2F0aW9ucyB0byBoYW5kbGUgdGhlIG5ldyBkZXZpY2VzIGdyYWNlZnVsbHkuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gYSBVU0IgbmV0d29yayBkcml2ZXIsIHdoaWNoIGlzIGFscmVhZHkgYSBmYWlybHkgY29tcGxleCBhcmVhLiBOZXR3b3JrIGRyaXZlcnMsIGluIGdlbmVyYWwsIGFyZSBhbHdheXMgaGlnaC12YWx1ZSB0YXJnZXRzIGJlY2F1c2Ugb2YgdGhlIGhpZ2ggbGlrZWxpaG9vZCBvZiBleHBsb2l0YWJsZSBmbGF3cy4gVGhpcyBwYXRjaCwgd2l0aCBpdHMgYWRkaXRpb25zIG9mIHN1cHBvcnQgZm9yIHNldmVyYWwgbmV3IGNoaXBzLCBoYXMgZGVmaW5pdGVseSBwaXF1ZWQgbXkgaW50ZXJlc3QuIFRoZSBjb21wbGV4aXR5LCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBVU0IsIGFuZCB0aGUgcG90ZW50aWFsIGZvciBvZmYtYnktb25lIGVycm9ycyBpbiB0aGVzZSBmaXh1cCBmdW5jdGlvbnMgbWFrZSB0aGlzIHBhdGNoIGFuIG9idmlvdXMgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcGx5LCBsZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIHRoaXMuIEkgbmVlZCB0byBrbm93IHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSBpbnZvbHZlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBgZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlYCBmb3IgdGhlIGZpbGVuYW1lIGl0c2VsZjogYGRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F4ODgxNzlfMTc4YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9MTQ9YXNpeC15IDo9IGFzaXhfZGV2aWNlcy5vIGFzaXhfY29tbW9uLm8gYXg4ODE3MmEub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxNzlfMTc4QSkgICAgICAmIzQzOz0gYXg4ODE3OV8xNzhhLm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfVVNCX05FVF9DRENFVEhFUilcdCYjNDM7PSBjZGNfZXRoZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzU2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVVNCIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBVU0JfTkVUX0FYODgxNzlfMTc4QWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLgoKRnJvbSBsb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBpdCBzZWVtcyBWTEFOIHN1cHBvcnQgaXMgYmVpbmcgYWRkZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBgYXgxNzlhX3ZsYW5fcnhfa2lsbF92aWRgIGFuZCBgYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZGAuIEl0IGFsc28gdXRpbGl6ZXMgYHZsYW5fZ2V0X3RhZ2AgYW5kIGBfX3ZsYW5faHdhY2NlbF9wdXRfdGFnYC4gVGhlc2UgVkxBTiBmdW5jdGlvbnMgYXJlIGNvbW1vbmx5IGxpbmtlZCB0byBgVkxBTl84MDIxUWAsIHNvIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSB0aGF0IHRoYXQmIzM5O3MgZW5hYmxlZCBhcyB3ZWxsLgoKVG8gY29uZmlybSBhbnkgZGVwZW5kZW5jaWVzLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlIGFuZCBzZWFyY2ggZm9yIHRoZSBgVVNCX05FVF9BWDg4MTc5XzE3OEFgIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5LiBUaGF0IHNob3VsZCBwcm92aWRlIGEgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gYW55IG1hbmRhdG9yeSBvciBwb3RlbnRpYWxseSBoZWxwZnVsIHJlbGF0ZWQgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtVU0JfTkVUX0FYODgxNzlfMTc4QSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTE2Nj1jb25maWcgVVNCX05FVF9BWDg4MTdYXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTk3LVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTk4OmNvbmZpZyBVU0JfTkVUX0FYODgxNzlfMTc4QVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTk5LVx0dHJpc3RhdGUgXCYjMzQ7QVNJWCBBWDg4MTc5LzE3OEEgVVNCIDMuMC8yLjAgdG8gR2lnYWJpdCBFdGhlcm5ldFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjk0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBVU0IgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIFVTQiBuZXR3b3JrIGRyaXZlciBzaXR1YXRpb24sIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgdGhlIG1vc3QgcmVsZXZhbnQgc2VjdGlvbiB3aWxsIGJlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYmAgZGlyZWN0b3J5LiBBbmQgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBwcmltYXJ5IG1lYW5zIG9mIGRlZmluaW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTbywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTguIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0IOKAkyBob3BlZnVsbHksIGl0IGNvbnRhaW5zIHRoZSBjb3JlIG9wdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGJlaW5nIGNvbmZpZ3VyZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBrZXkgc2V0dGluZ3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk1Olx0XHQgIFRoaXMgZHJpdmVyIGNyZWF0ZXMgYW4gaW50ZXJmYWNlIG5hbWVkIFwmIzM0O2V0aFhcJiMzNDssIHdoZXJlIFggZGVwZW5kcyBvblxuIDE5NjpcdFx0ICB3aGF0IG90aGVyIG5ldHdvcmtpbmcgZGV2aWNlcyB5b3UgaGF2ZSBpbiB1c2UuXG4gMTk3Olx0XG4gMTk4Olx0Y29uZmlnIFVTQl9ORVRfQVg4ODE3OV8xNzhBXG4gMTk5Olx0XHR0cmlzdGF0ZSBcJiMzNDtBU0lYIEFYODgxNzkvMTc4QSBVU0IgMy4wLzIuMCB0byBHaWdhYml0IEV0aGVybmV0XCYjMzQ7XG4gMjAwOlx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiAyMDE6XHRcdHNlbGVjdCBDUkMzMlxuIDIwMjpcdFx0c2VsZWN0IFBIWUxJQlxuIDIwMzpcdFx0ZGVmYXVsdCB5XG4gMjA0Olx0XHRoZWxwXG4gMjA1Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgQVNJWCBBWDg4MTc5IGJhc2VkIFVTQiAzLjAvMi4wXG4gMjA2Olx0XHQgIHRvIEdpZ2FiaXQgRXRoZXJuZXQgYWRhcHRlcnMuXG4gMjA3Olx0XG4gMjA4Olx0XHQgIFRoaXMgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBkZXZpY2VzOlxuIDIwOTpcdFx0ICAgICogQVNJWCBBWDg4MTc5XG4gMjEwOlx0XHQgICAgKiBBU0lYIEFYODgxNzhBXG4gMjExOlx0XHQgICAgKiBTaXRjb21tIExOLTAzMlxuIDIxMjpcdFxuIDIxMzpcdFx0ICBUaGlzIGRyaXZlciBjcmVhdGVzIGFuIGludGVyZmFjZSBuYW1lZCBcJiMzNDtldGhYXCYjMzQ7LCB3aGVyZSBYIGRlcGVuZHMgb25cbiAyMTQ6XHRcdCAgd2hhdCBvdGhlciBuZXR3b3JraW5nIGRldmljZXMgeW91IGhhdmUgaW4gdXNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODU1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIHRoZSBGdXp6aW5nIFRhcmdldDogQVg4ODE3OUEgVVNCIE5ldHdvcmsgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgY29yZSBjb25maWd1cmF0aW9uIHNlZW1zIHRvIGJlIGBVU0JfTkVUX0FYODgxNzlfMTc4QWAuIFRoYXQmIzM5O3Mgd2hlcmUgd2UgbmVlZCB0byBzdGFydC4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzIHNwZWNpZmljIFVTQiBuZXR3b3JrIGRyaXZlci4KCkxldCYjMzk7cyBzZWUgd2hhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMuIFJpZ2h0LCBoZXJlIGFyZSB0aGUgbmV3IHN5bWJvbHM6IGBheDg4MTc5YV9iaW5kYCwgYGF4ODgxNzlhX3VuYmluZGAsIGBheDg4MTc5YV9yeF9maXh1cGAsIGBheDg4MTc5YV90eF9maXh1cGAsIGBheDg4MTc5YV9saW5rX3Jlc2V0YCwgYGF4ODgxNzlhX3N0b3BgLCBgYXgxNzlhX3ZsYW5fcnhfa2lsbF92aWRgLCBgYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZGAsIGBheDg4MTc5YV9nZXRfcGF1c2VwYXJhbWAsIGBheDg4MTc5YV9zZXRfcGF1c2VwYXJhbWAsIGBheDg4MTc5YV9yeF9jaGVja3N1bWAsIGFuZCBgYXg4ODE3OWFfYnVsa2luX2NvbmZpZ2AuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQuIGBheDg4MTc5YV9yeF9maXh1cGAgYW5kIGBheDg4MTc5YV90eF9maXh1cGAuLi4gdGhvc2UgYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucy4gTm9ybWFsbHksIEkmIzM5O2QgYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zIGFzIHRoZXkgY2FuIGJlIGxlc3MgZWZmaWNpZW50IHRvIGZ1enouIEhvd2V2ZXIsIGNvbnNpZGVyaW5nIHRoaXMgaXMgYSAqVVNCIG5ldHdvcmsgZHJpdmVyKiwgdGhlIGByeF9maXh1cGAgYW5kIGB0eF9maXh1cGAgZnVuY3Rpb25zIGFyZSB3aGVyZSBhbGwgdGhlIHBhY2tldCBwYXJzaW5nIG1hZ2ljIGhhcHBlbnMgYW5kIGFyZSBkZXZpY2Utc3BlY2lmaWMuIFRoZXkmIzM5O3JlIGV4YWN0bHkgd2hhdCB3ZSB3YW50IHRvIHRhcmdldCB3aXRoIFVTQiBmdXp6aW5nLCBhcyB0aGV5JiMzOTtsbCBsaWtlbHkgYmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgbWFsZm9ybWVkIGRhdGEgZnJvbSB0aGUgZGV2aWNlLgoKV2FpdCwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcHJvbXB0LiBJIHJlbWVtYmVyIGl0IHNheWluZyB0byAmIzM0O2F2b2lkIGhvdC1wYXRoIGZ1bmN0aW9ucyYjMzQ7LiBCdXQgaW4gdGhpcyBjb250ZXh0LCBleGNsdWRpbmcgdGhlbSB3b3VsZCBiZSBhIG1pc3Rha2UuIFRoZXNlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoZSBVU0IgZGF0YSEgSWYgSSBza2lwIHRoZW0sIEkgbWlzcyB0aGUgbW9zdCBpbXBvcnRhbnQgbG9naWMgZm9yIGZ1enppbmcuCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGdvaW5nIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgYXg4ODE3OWFfYmluZGAsIGBheDg4MTc5YV9saW5rX3Jlc2V0YCwgYGF4ODgxNzlhX3J4X2ZpeHVwYCwgYGF4ODgxNzlhX3R4X2ZpeHVwYCwgYGF4MTc5YV92bGFuX3J4X2FkZF92aWRgLCBhbmQgYGF4MTc5YV92bGFuX3J4X2tpbGxfdmlkYC4KClRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgYXg4ODE3OWFfcnhfZml4dXBgLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrLiBZZXMsIGl0JiMzOTtzIGNhbGxlZCBmb3IgZXZlcnkgVVJCIHJlY2VpdmVkLCBzbyBpdCByZWFsbHkgKmlzKiBjb3JlIHRvIHRoZSBwYWNrZXQgcGFyc2luZy4gRGVmaW5pdGVseSBpbmNsdWRpbmcgdGhhdC4KCkZpbmFsbHksIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uOiBgVVNCX05FVF9BWDg4MTc5XzE3OEFgLgoKQW5kLCBhIGZpbmFsIHRob3VnaHQsIGNvdWxkIGBWTEFOXzgwMjFRYCBiZSBuZWVkZWQgdG8gYWxsb3cgVkxBTiBmdW5jdGlvbnMgdG8gYmUgY29tcGlsZWQgb3IgcmVhY2hhYmxlPyBUaGUgY29kZSB1c2VzIGB2bGFuX2dldF90YWdgIGFuZCBgX192bGFuX2h3YWNjZWxfcHV0X3RhZ2Ag4oCTIHRob3NlIGFyZSBkZWZpbmVkIGluIGBsaW51eC9pZl92bGFuLmhgLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9nZXRfdGFnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmg9NTQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTUxLS8qKlxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NTUyOiAqIF9fdmxhbl9nZXRfdGFnIC0gZ2V0IHRoZSBWTEFOIElEIHRoYXQgaXMgcGFydCBvZiB0aGUgcGF5bG9hZFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTUzLSAqIEBza2I6IHNrYnVmZiB0byBxdWVyeVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTU1Ny0gKi9cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjU1ODpzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5fZ2V0X3RhZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZsYW5fdGNpKVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTU5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD01NzY9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2h3YWNjZWxfZ2V0X3RhZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTU4OC0vKipcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjU4OTogKiB2bGFuX2dldF90YWcgLSBnZXQgdGhlIFZMQU4gSUQgZnJvbSB0aGUgc2tiXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01OTAtICogQHNrYjogc2tidWZmIHRvIHF1ZXJ5XG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTk0LSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NTk1OnN0YXRpYyBpbmxpbmUgaW50IHZsYW5fZ2V0X3RhZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZsYW5fdGNpKVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTk2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01OTktXHR9IGVsc2Uge1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NjAwOlx0XHRyZXR1cm4gX192bGFuX2dldF90YWcoc2tiLCB2bGFuX3RjaSk7XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC02MDEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzM5CgkJCQkJCQlvdXRwdXQ6IDI5OAoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQVg4ODE3OUEgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQgc2VlbXMgdGhlIGRldmVsb3BlcnMgYXJlIGFkZGluZyBzdXBwb3J0IGZvciBzb21lIG5ldyBBU0lYIFVTQiBFdGhlcm5ldCBjaGlwcyDigJMgdGhlIEFYODgxNzlBLCBBWDg4NzcyRCwgYW5kIEFYODgyNzkg4oCTIHRvIHRoZSBleGlzdGluZyBgYXg4ODE3OV8xNzhhYCBkcml2ZXIuIEludGVyZXN0aW5nLiBJIG5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGlubGluZSwgYW5kIGNvbXBpbGF0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGhpbmdlIG9uIGBDT05GSUdfVkxBTl84MDIxUWAuIEhvd2V2ZXIsIHdoaWxlIG5vdCBlc3NlbnRpYWwsIGBWTEFOXzgwMjFRYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGZvciB0ZXN0aW5nIHRoZSBWTEFOIGZ1bmN0aW9uYWxpdHkg4oCTIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIGZ1bGwgY292ZXJhZ2UuIFRoZSBjb3JlIGZvY3VzLCBob3dldmVyLCBpcyBvbiBgVVNCX05FVF9BWDg4MTc5XzE3OEFgLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gc2NydXRpbml6ZSBhcmU6IGBheDg4MTc5YV9iaW5kYCwgYGF4ODgxNzlhX3VuYmluZGAsIGBheDg4MTc5YV9saW5rX3Jlc2V0YCwgYGF4ODgxNzlhX3J4X2ZpeHVwYCwgYGF4ODgxNzlhX3R4X2ZpeHVwYCwgYGF4MTc5YV92bGFuX3J4X2FkZF92aWRgLCBgYXgxNzlhX3ZsYW5fcnhfa2lsbF92aWRgLCBgYXg4ODE3OWFfZ2V0X3BhdXNlcGFyYW1gLCBgYXg4ODE3OWFfc2V0X3BhdXNlcGFyYW1gLCBgYXg4ODE3OWFfcnhfY2hlY2tzdW1gLCBhbmQgYGF4ODgxNzlhX2J1bGtpbl9jb25maWdgLiBUaGVzZSBzZWVtIHRvIHJlcHJlc2VudCB0aGUgY29yZSBkcml2ZXIgZnVuY3Rpb25hbGl0eSwgZGVhbGluZyB3aXRoIGRldmljZSBiaW5kaW5nLCB1bmJpbmRpbmcsIGxpbmsgbWFuYWdlbWVudCwgUlgvVFggcGFja2V0IGhhbmRsaW5nLCBWTEFOIG1hbmlwdWxhdGlvbiwgcGF1c2UgcGFyYW1ldGVyIGhhbmRsaW5nLCBjaGVja3N1bSBvZmZsb2FkaW5nIGFuZCBidWxrIGRhdGEgdHJhbnNmZXIgY29uZmlndXJhdGlvbi4KCkZyb20gbXkgcGVyc3BlY3RpdmUsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgbGluayByZXNldCBsb2dpYywgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHN0ZXBzIChSWC9UWCBmaXh1cCksIGFsbCBzcGVjaWZpYyB0byB0aGVzZSBuZXcgY2hpcHMuIFNvLCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgSSYjMzk7ZCB3YW50IHRvIGhlYXZpbHkgZm9jdXMgb24gdGhlIG5ldyBVU0IgZGV2aWNlIGJpbmRpbmcgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocywgcGFydGljdWxhcmx5IHRoZSBSWCBhbmQgVFggZml4dXAgcm91dGluZXMuIFRoZXNlIGFyZSB0aGUgYXJlYXMgd2hlcmUgbmV3IGxvZ2ljIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFyZSBtb3N0IGxpa2VseSB0byBlbWVyZ2UuCgpJJiMzOTtsbCBsb2cgYFVTQl9ORVRfQVg4ODE3OV8xNzhBYCBhcyB0aGUgcmVsZXZhbnQgY29uZmlnLCBhbmQgdGhlbiBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0FYODgxNzlfMTc4QSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F4ODgxNzlhX2JpbmQmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfdW5iaW5kJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX2xpbmtfcmVzZXQmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfcnhfZml4dXAmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfdHhfZml4dXAmIzM0OywKICAgICYjMzQ7YXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZCYjMzQ7LAogICAgJiMzNDtheDE3OWFfdmxhbl9yeF9raWxsX3ZpZCYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9nZXRfcGF1c2VwYXJhbSYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9zZXRfcGF1c2VwYXJhbSYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9yeF9jaGVja3N1bSYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9idWxraW5fY29uZmlnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgbmV3IEFTSVggVVNCIEV0aGVybmV0IGNoaXBzIChBWDg4MTc5QSwgQVg4ODc3MkQsIEFYODgyNzkpIHRvIHRoZSBheDg4MTc5XzE3OGEgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiwgbGluayByZXNldCwgYW5kIHBhY2tldCBwYXJzaW5nIChyeC90eCBmaXh1cCkgbG9naWMgc3BlY2lmaWMgdG8gdGhlc2UgY2hpcHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgVVNCIGRldmljZSBiaW5kaW5nIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX05FVF9BWDg4MTc5XzE3OEEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtheDg4MTc5YV9iaW5kJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX3VuYmluZCYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9saW5rX3Jlc2V0JiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX3J4X2ZpeHVwJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX3R4X2ZpeHVwJiMzNDssCiAgICAmIzM0O2F4MTc5YV92bGFuX3J4X2FkZF92aWQmIzM0OywKICAgICYjMzQ7YXgxNzlhX3ZsYW5fcnhfa2lsbF92aWQmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfZ2V0X3BhdXNlcGFyYW0mIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfc2V0X3BhdXNlcGFyYW0mIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfcnhfY2hlY2tzdW0mIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfYnVsa2luX2NvbmZpZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIG5ldyBBU0lYIFVTQiBFdGhlcm5ldCBjaGlwcyAoQVg4ODE3OUEsIEFYODg3NzJELCBBWDg4Mjc5KSB0byB0aGUgYXg4ODE3OV8xNzhhIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24sIGxpbmsgcmVzZXQsIGFuZCBwYWNrZXQgcGFyc2luZyAocngvdHggZml4dXApIGxvZ2ljIHNwZWNpZmljIHRvIHRoZXNlIGNoaXBzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IFVTQiBkZXZpY2UgYmluZGluZyBhbmQgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowMToyNS42Mjg0NDE0MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTU4OTQ0MzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0FYODgxNzlfMTc4QVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF4ODgxNzlhX2JpbmRcIixcbiAgICBcImF4ODgxNzlhX3VuYmluZFwiLFxuICAgIFwiYXg4ODE3OWFfbGlua19yZXNldFwiLFxuICAgIFwiYXg4ODE3OWFfcnhfZml4dXBcIixcbiAgICBcImF4ODgxNzlhX3R4X2ZpeHVwXCIsXG4gICAgXCJheDE3OWFfdmxhbl9yeF9hZGRfdmlkXCIsXG4gICAgXCJheDE3OWFfdmxhbl9yeF9raWxsX3ZpZFwiLFxuICAgIFwiYXg4ODE3OWFfZ2V0X3BhdXNlcGFyYW1cIixcbiAgICBcImF4ODgxNzlhX3NldF9wYXVzZXBhcmFtXCIsXG4gICAgXCJheDg4MTc5YV9yeF9jaGVja3N1bVwiLFxuICAgIFwiYXg4ODE3OWFfYnVsa2luX2NvbmZpZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgbmV3IEFTSVggVVNCIEV0aGVybmV0IGNoaXBzIChBWDg4MTc5QSwgQVg4ODc3MkQsIEFYODgyNzkpIHRvIHRoZSBheDg4MTc5XzE3OGEgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiwgbGluayByZXNldCwgYW5kIHBhY2tldCBwYXJzaW5nIChyeC90eCBmaXh1cCkgbG9naWMgc3BlY2lmaWMgdG8gdGhlc2UgY2hpcHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgVVNCIGRldmljZSBiaW5kaW5nIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDE6MjUuNjI4NDUxMDA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTg3MjE0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YzM3Nzk1YmFhYjVkZTY4ZmVlYmUzMmI0ZTJjZjhiMzdmNWFmNWE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDEgMTE6MDE6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jIGIvZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jXFxuaW5kZXggOThmODk5ZWEyZTk0NjIuLjEyZmMyMGU1Zjc2ZTY5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY1xcbkBAIC0xMyw5ICsxMywxMiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL3VzYm5ldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIEFYODgxNzlfUEhZX0lEXFx0XFx0XFx0XFx0MHgwM1xcbiAjZGVmaW5lIEFYX0VFUFJPTV9MRU5cXHRcXHRcXHRcXHQweDEwMFxcbisjZGVmaW5lIEFYODgyNzlfRUVQUk9NX0xFTlxcdFxcdFxcdDB4NDAwMFxcbisjZGVmaW5lIEFYODgxNzlBX0VFUFJPTV9MRU5cXHRcXHRcXHQoMzIgKiAyMClcXG4gI2RlZmluZSBBWDg4MTc5X0VFUFJPTV9NQUdJQ1xcdFxcdFxcdDB4MTc5MDBiOTVcXG4gI2RlZmluZSBBWF9NQ0FTVF9GTFRTSVpFXFx0XFx0XFx0OFxcbiAjZGVmaW5lIEFYX01BWF9NQ0FTVFxcdFxcdFxcdFxcdDY0XFxuQEAgLTMyLDE3ICszNSwzMyBAQFxcbiAjZGVmaW5lIEFYX0FDQ0VTU19FRVBST01cXHRcXHRcXHQweDA0XFxuICNkZWZpbmUgQVhfQUNDRVNTX0VGVVNcXHRcXHRcXHRcXHQweDA1XFxuICNkZWZpbmUgQVhfUkVMT0FEX0VFUFJPTV9FRlVTRVxcdFxcdFxcdDB4MDZcXG4tI2RlZmluZSBBWF9QQVVTRV9XQVRFUkxWTF9ISUdIXFx0XFx0XFx0MHg1NFxcbi0jZGVmaW5lIEFYX1BBVVNFX1dBVEVSTFZMX0xPV1xcdFxcdFxcdDB4NTVcXG4tXFxuKyNkZWZpbmUgQVg4ODE3OUFfV0FLRVVQX1NFVFRJTkdcXHRcXHRcXHQweDA3XFxuKyNkZWZpbmUgQVhfRldfTU9ERVxcdFxcdFxcdFxcdDB4MDhcXG4rI2RlZmluZSBBWF9HUEhZX0NUTFxcdFxcdFxcdFxcdDB4MEZcXG4rI2RlZmluZSBBWDg4MTc5QV9GTEFTSF9SRUFEXFx0XFx0XFx0MHgyMVxcbisjZGVmaW5lIEFYODgxNzlBX0ZMQVNIX1dFTlxcdFxcdFxcdDB4MjJcXG4rI2RlZmluZSBBWDg4MTc5QV9GTEFTSF9XRElTXFx0XFx0XFx0MHgyM1xcbisjZGVmaW5lIEFYODgxNzlBX0ZMQVNIX1dSSVRFXFx0XFx0XFx0MHgyNFxcbisjZGVmaW5lIEFYODgxNzlBX1BIWV9DTEFVU0U0NVxcdFxcdFxcdDB4MjdcXG4rI2RlZmluZSBBWDg4MTc5QV9GTEFTSF9FUkFTRV9TRUNUSU9OXFx0XFx0MHgyOFxcbisjZGVmaW5lIEFYODgxNzlBX0FDQ0VTU19CTFxcdFxcdFxcdDB4MkFcXG4rI2RlZmluZSBBWDg4MTc5QV9QSFlfUE9XRVJcXHRcXHRcXHQweDMxXFxuKyNkZWZpbmUgQVg4ODE3OUFfQVVUT0RFVEFDSFxcdFxcdFxcdDB4QzBcXG4rI2RlZmluZSBBWF9QQVVTRV9XQVRFUkxWTF9MT1dcXHRcXHRcXHQweDU0XFxuKyNkZWZpbmUgQVhfUEFVU0VfV0FURVJMVkxfSElHSFxcdFxcdFxcdDB4NTVcXG4rXFxuKyNkZWZpbmUgQVhfRldfTU9ERV8xNzlBXFx0XFx0XFx0XFx0MHgwMVxcbiAjZGVmaW5lIFBIWVNJQ0FMX0xJTktfU1RBVFVTXFx0XFx0XFx0MHgwMlxcbiBcXHQjZGVmaW5lXFx0QVhfVVNCX1NTXFx0XFx0MHgwNFxcbiBcXHQjZGVmaW5lXFx0QVhfVVNCX0hTXFx0XFx0MHgwMlxcbitcXHQjZGVmaW5lIEFYX1VTQl9GU1xcdFxcdDB4MDFcXG4gXFxuICNkZWZpbmUgR0VORVJBTF9TVEFUVVNcXHRcXHRcXHRcXHQweDAzXFxuIC8qIENoZWNrIEFYODgxNzkgdmVyc2lvbi4gVUExOkJpdDIgPSAwLCAgVUEyOkJpdDIgPSAxICovXFxuIFxcdCNkZWZpbmVcXHRBWF9TRUNMRFxcdFxcdDB4MDRcXG4gXFxuKyNkZWZpbmUgQVhfQ0hJUF9TVEFUVVNcXHRcXHRcXHRcXHQweDA1XFxuK1xcbiAjZGVmaW5lIEFYX1NST01fQUREUlxcdFxcdFxcdFxcdDB4MDdcXG4gI2RlZmluZSBBWF9TUk9NX0NNRFxcdFxcdFxcdFxcdDB4MGFcXG4gXFx0I2RlZmluZSBFRVBfUkRcXHRcXHRcXHQweDA0XFxuQEAgLTYyLDYgKzgxLDE1IEBAXFxuIFxcdCNkZWZpbmUgQVhfUlhfQ1RMX1BST1xcdFxcdDB4MDAwMVxcbiBcXHQjZGVmaW5lIEFYX1JYX0NUTF9TVE9QXFx0XFx0MHgwMDAwXFxuIFxcbisjZGVmaW5lIEFYODgxNzlBX0VUSF9UWF9HQVBcXHRcXHRcXHQweDBEXFxuK1xcbisjZGVmaW5lIEFYODgxNzlBX0JGTV9EQVRBXFx0XFx0XFx0MHgwRVxcbitcXHQjZGVmaW5lIEFYX1RYX1FVRVVFX0NGR1xcdFxcdDB4MDJcXG4rXFx0I2RlZmluZSBBWF9UWF9RVUVVRV9TRVRcXHRcXHQweDA4XFxuK1xcdCNkZWZpbmUgQVhfVFhfUTFfQUhCX0ZDX0VOXFx0MHgxMFxcbitcXHQjZGVmaW5lIEFYX1RYX1EyX0FIQl9GQ19FTlxcdDB4MjBcXG4rXFx0I2RlZmluZSBBWF9YR01JSV9FTlxcdFxcdDB4ODBcXG4rXFxuICNkZWZpbmUgQVhfTk9ERV9JRFxcdFxcdFxcdFxcdDB4MTBcXG4gI2RlZmluZSBBWF9NVUxGTFRBUllcXHRcXHRcXHRcXHQweDE2XFxuIFxcbkBAIC05MSw3ICsxMTksMjEgQEBcXG4gXFx0I2RlZmluZSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkxcXHQweDAwMjBcXG4gXFx0I2RlZmluZSBBWF9QSFlQV1JfUlNUQ1RMX0FUXFx0MHgxMDAwXFxuIFxcbisjZGVmaW5lIEFYODgxNzlBX1ZMQU5fSURfQUREUkVTU1xcdFxcdDB4MkFcXG4rXFxuKyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MXFx0XFx0MHgyQlxcbitcXHQjZGVmaW5lIEFYX1ZMQU5fQ09OVFJPTF9XRVxcdDB4MDAwMVxcbitcXHQjZGVmaW5lIEFYX1ZMQU5fQ09OVFJPTF9SRFxcdDB4MDAwMlxcbitcXHQjZGVmaW5lIEFYX1ZMQU5fQ09OVFJPTF9WU09cXHQweDAwMTBcXG4rXFx0I2RlZmluZSBBWF9WTEFOX0NPTlRST0xfVkZFXFx0MHgwMDIwXFxuK1xcbisjZGVmaW5lIEFYODgxNzlBX1ZMQU5fSURfREFUQTBcXHRcXHRcXHQweDJDXFxuKyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMVxcdFxcdFxcdDB4MkRcXG4rXFxuICNkZWZpbmUgQVhfUlhfQlVMS0lOX1FDVFJMXFx0XFx0XFx0MHgyZVxcbitcXG4rI2RlZmluZSBBWF9HUEhZX0VFRV9DVFJMXFx0XFx0XFx0MHgwMVxcbitcXG4gI2RlZmluZSBBWF9DTEtfU0VMRUNUXFx0XFx0XFx0XFx0MHgzM1xcbiBcXHQjZGVmaW5lIEFYX0NMS19TRUxFQ1RfQkNTXFx0MHgwMVxcbiBcXHQjZGVmaW5lIEFYX0NMS19TRUxFQ1RfQUNTXFx0MHgwMlxcbkBAIC0xMTEsNyArMTUzLDUxIEBAXFxuIFxcdCNkZWZpbmUgQVhfVFhDT0VfVENQVjZcXHRcXHQweDIwXFxuIFxcdCNkZWZpbmUgQVhfVFhDT0VfVURQVjZcXHRcXHQweDQwXFxuIFxcbisjZGVmaW5lIEFYODgxNzlBX01BQ19CTV9JTlRfTUFTS1xcdFxcdDB4NDFcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfQk1fUlhfRE1BX0NUTFxcdFxcdDB4NDNcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfQk1fVFhfRE1BX0NUTFxcdFxcdDB4NDZcXG4rXFxuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DRENcXHRcXHQweDZEXFxuK1xcdCNkZWZpbmUgQVhfTFNPRkNfV0NOVF83X0FDQ0VTU1xcdDB4MDNcXG4rXFx0I2RlZmluZSBBWF9HTUlJX0NSQ19BUFBFTkRcXHQweDEwXFxuK1xcbiAjZGVmaW5lIEFYX0xFRENUUkxcXHRcXHRcXHRcXHQweDczXFxuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX0FSQ19DVFJMXFx0XFx0XFx0MHg5RVxcbisjZGVmaW5lIEFYODgxNzlBX01BQ19TV1BfQ1RSTFxcdFxcdFxcdDB4QjFcXG4rXFxuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX1RYX1BBVVNFXFx0XFx0XFx0MHhCMlxcbitcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfQ0RDX0RFTEFZX1RYXFx0XFx0MHhCNVxcbitcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfUEFUSFxcdFxcdFxcdDB4QjdcXG4rXFx0I2RlZmluZSBBWF9NQUNfUlhfUEFUSF9SRUFEWVxcdDB4MDFcXG4rXFx0I2RlZmluZSBBWF9NQUNfVFhfUEFUSF9SRUFEWVxcdDB4MDJcXG4rXFxuKyNkZWZpbmUgQVg4ODE3OUFfTkVXX1BBVVNFX0NUUkxcXHRcXHRcXHQweEI4XFxuK1xcdCNkZWZpbmUgQVhfTkVXX1BBVVNFX0VOXFx0XFx0MHgwMVxcbitcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfQlVMS19PVVRfQ1RSTFxcdFxcdDB4QjlcXG4rXFx0I2RlZmluZSBBWF9NQUNfRUZGX0VOXFx0XFx0MHgwMlxcbitcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfUlhfREFUQV9DRENfQ05UXFx0XFx0MHhDMFxcbitcXHQjZGVmaW5lIEFYX01BQ19MU09fRVJSX0VOXFx0MHgwNFxcbitcXHQjZGVmaW5lIEFYX01BQ19NSVFGRkNUUkxfRk9STUFUXFx0MHgxMFxcbitcXHQjZGVmaW5lIEFYX01BQ19NSVFGRkNUUkxfRFJPUF9DUkMgMHgyMFxcbitcXG4rI2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNIX0RFTEFZXFx0KDVVTCBcXHUwMDNjXFx1MDAzYyA4KVxcbisjZGVmaW5lIEFYODgxNzlBX0FVVE9ERVRBQ0hfRU5cXHRcXHQxXFxuK1xcbisjZGVmaW5lIEFYODgxNzlBX01BQ19MU09fRU5IQU5DRV9DVFJMXFx0XFx0MHhDM1xcbitcXHQjZGVmaW5lIEFYX0xTT19FTkhBTkNFX0VOXFx0MHgwMVxcbitcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfVFhfSERSX0NLU1VNXFx0XFx0MHhDQ1xcbisjZGVmaW5lIEFYODgxNzlBX0VQNV9FSFJcXHRcXHRcXHQweEY5XFxuK1xcbisjZGVmaW5lIEFYX1BIWV9QT1dFUlxcdFxcdFxcdFxcdDB4MDJcXG4rXFxuKyNkZWZpbmUgRVBIWV9MT1dfUE9XRVJfRU5cXHRcXHRcXHQweDAxXFxuKyNkZWZpbmUgUzVfV09MX0VOXFx0XFx0XFx0XFx0MHgwNFxcbisjZGVmaW5lIFM1X1dPTF9MT1dfUE9XRVJcXHRcXHRcXHQweDIwXFxuIFxcbiAjZGVmaW5lIEdNSUlfUEhZX1BIWVNSXFx0XFx0XFx0XFx0MHgxMVxcbiBcXHQjZGVmaW5lIEdNSUlfUEhZX1BIWVNSX1NNQVNLXFx0MHhjMDAwXFxuQEAgLTE2NCw4ICsyNTAsNTYgQEBcXG4gXFx0I2RlZmluZSBHTUlJX1BIWV9QR1NFTF9QQUdFM1xcdDB4MDAwM1xcbiBcXHQjZGVmaW5lIEdNSUlfUEhZX1BHU0VMX1BBR0U1XFx0MHgwMDA1XFxuIFxcbisvKiBUWCBEZXNjcmlwdG9yICovXFxuKyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfTEVOX01BU0tcXHRcXHQweDFGRkZGRlxcbisjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX0RST1BfUEFERFxcdEJJVCgyOClcXG4rI2RlZmluZSBBWDE3OUFfVFhfREVTQ19WTEFOXFx0XFx0QklUKDI5KVxcbisjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX01TU19NQVNLXFx0XFx0MHg3RkZGXFxuKyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfTVNTX1NISUZUXFx0MHgyMFxcbisjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX1ZMQU5fTUFTS1xcdDB4RkZGRlxcbisjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX1ZMQU5fU0hJRlRcXHQweDMwXFxuK1xcbisvKiBSWCBQYWNrZXQgRGVzY3JpcHRvciAqL1xcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9FUlJcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTDNfRVJSXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0w0X1RZUEVfTUFTS1xcdDB4MUNcXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTDRfVURQXFx0XFx0MHgwNFxcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9UQ1BcXHRcXHQweDEwXFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX1RZUEVfTUFTS1xcdDB4NjBcXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTDNfSVBcXHRcXHQweDIwXFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0lQNlxcdFxcdDB4NDBcXG4rXFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX1ZMQU5cXHRcXHRCSVQoMTApXFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX1JYX09LXFx0XFx0QklUKDExKVxcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9EUk9QXFx0XFx0QklUKDMxKVxcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9MRU5fTUFTS1xcdDB4N0ZGRjAwMDBcXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTEVOX1NISUZUXFx0MHgxMFxcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9WTEFOX1NISUZUXFx0MHgyMFxcbitcXG4rLyogUlggRGVzY3JpcHRvciBoZWFkZXIgKi9cXG4rI2RlZmluZSBBWDE3OUFfUlhfREhfUEtUX0NOVF9NQVNLXFx0XFx0MHgxRkZGXFxuKyNkZWZpbmUgQVgxNzlBX1JYX0RIX0RFU0NfT0ZGU0VUX01BU0tcXHQweEZGRkZFMDAwXFxuKyNkZWZpbmUgQVgxNzlBX1JYX0RIX0RFU0NfT0ZGU0VUX1NISUZUXFx0MHgwRFxcbitcXG4rI2RlZmluZSBBWDE3OUFfUlhfSFdfUEFEXFx0XFx0XFx0MHgwMlxcbitcXG4gc3RhdGljIGludCBheDg4MTc5X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldik7XFxuIFxcbitlbnVtIGF4X2V0aGVyX2xpbmtfc3BlZWQge1xcbitcXHRFVEhFUl9MSU5LX05PTkUgPSAwLFxcbitcXHRFVEhFUl9MSU5LXzEwICAgPSAxLFxcbitcXHRFVEhFUl9MSU5LXzEwMCAgPSAyLFxcbitcXHRFVEhFUl9MSU5LXzEwMDAgPSAzLFxcbitcXHRFVEhFUl9MSU5LXzI1MDAgPSA0LFxcbit9O1xcbitcXG4rZW51bSBheF9jaGlwX3ZlcnNpb24ge1xcbitcXHRBWF9WRVJTSU9OX0lOVkFMSURcXHRcXHQ9IDB4MCxcXG4rXFx0QVhfVkVSU0lPTl9BWDg4MTc5XFx0XFx0PSAweDQsXFxuK1xcdEFYX1ZFUlNJT05fQVg4ODE3OUFcXHRcXHQ9IDB4NixcXHQvKiBBbHNvIEFYODg3NzJEICovXFxuK1xcdEFYX1ZFUlNJT05fQVg4ODI3OVxcdFxcdD0gMHg3LFxcbit9O1xcbitcXG4gc3RydWN0IGF4ODgxNzlfZGF0YSB7XFxuIFxcdHU4ICBlZWVfZW5hYmxlZDtcXG4gXFx0dTggIGVlZV9hY3RpdmU7XFxuQEAgLTE3NCw2ICszMDgsMTYgQEAgc3RydWN0IGF4ODgxNzlfZGF0YSB7XFxuIFxcdHUzMiB3b2xfc3VwcG9ydGVkO1xcbiBcXHR1MzIgd29sb3B0cztcXG4gXFx0dTggZGlzY29ubmVjdGluZztcXG4rXFx0dTggY2hpcF92ZXJzaW9uO1xcbitcXHR1OCBmd192ZXJzaW9uWzRdO1xcbitcXHR1OCBpc19heDg4NzcyZDtcXG4rXFx0dTggaXBfYWxpZ247XFxuK1xcdHU4IGxpbms7XFxuK1xcdHU4IHNwZWVkO1xcbitcXHR1OCBmdWxsX2R1cGxleDtcXG4rXFx0dTggcnhfY2hlY2tzdW07XFxuK1xcdHU4IGVlcHJvbV9yZWFkX2NtZDtcXG4rXFx0dTE2IGVlcHJvbV9ibG9jaztcXG4gfTtcXG4gXFxuIHN0cnVjdCBheDg4MTc5X2ludF9kYXRhIHtcXG5AQCAtMTgxLDE1ICszMjUsNDggQEAgc3RydWN0IGF4ODgxNzlfaW50X2RhdGEge1xcbiBcXHRfX2xlMzIgaW50ZGF0YTI7XFxuIH07XFxuIFxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHtcXG4rc3RydWN0IGF4X2J1bGtpbl9zZXR0aW5ncyB7XFxuIFxcdHVuc2lnbmVkIGNoYXIgY3RybCwgdGltZXJfbCwgdGltZXJfaCwgc2l6ZSwgaWZnO1xcbi19IEFYODgxNzlfQlVMS0lOX1NJWkVbXSA9XFx0e1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODE3OV9CVUxLSU5fU0laRVtdID1cXHR7XFxuIFxcdHs3LCAweDRmLCAwLFxcdDB4MTIsIDB4ZmZ9LFxcbiBcXHR7NywgMHgyMCwgMyxcXHQweDE2LCAweGZmfSxcXG4gXFx0ezcsIDB4YWUsIDcsXFx0MHgxOCwgMHhmZn0sXFxuIFxcdHs3LCAweGNjLCAweDRjLCAweDE4LCA4fSxcXG4gfTtcXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIEFYODgxNzlBX0JVTEtJTl9TSVpFW10gPSB7XFxuK1xcdHs1LCAweDdCLCAweDAwLFxcdDB4MTcsIDB4MEZ9LFxcdC8qIDFHLCBTUyAqL1xcbitcXHR7NSwgMHhDMCwgMHgwMixcXHQweDA2LCAweDBGfSxcXHQvKiAxRywgSFMgKi9cXG4rXFx0ezcsIDB4RjAsIDB4MDAsXFx0MHgwQywgMHgwRn0sXFx0LyogMTAwTSwgRnVsbCwgU1MgKi9cXG4rXFx0ezYsIDB4MDAsIDB4MDAsXFx0MHgwNiwgMHgwRn0sXFx0LyogMTAwTSwgSGFsZiwgU1MgKi9cXG4rXFx0ezUsIDB4QzAsIDB4MDQsXFx0MHgwNiwgMHgwRn0sXFx0LyogMTAwTSwgRnVsbCwgSFMgKi9cXG4rXFx0ezcsIDB4QzAsIDB4MDQsXFx0MHgwNiwgMHgwRn0sXFx0LyogMTAwTSwgSGFsZiwgSFMgKi9cXG4rXFx0ezcsIDB4MDAsIDB4MDAsXFx0MHgwMywgMHgzRn0sXFx0LyogRlMgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIEFYODg3NzJEX0JVTEtJTl9TSVpFW10gPSB7XFxuK1xcdHswLCAweDAwLCAweDAwLFxcdDB4MDAsIDB4MDB9LFxcdC8qIDFHLCBTUyAodW51c2VkKSAqL1xcbitcXHR7MCwgMHgwMCwgMHgwMCxcXHQweDAwLCAweDAwfSxcXHQvKiAxRywgSFMgKHVudXNlZCkgKi9cXG4rXFx0ezAsIDB4MDAsIDB4MDAsXFx0MHgwMCwgMHgwMH0sXFx0LyogMTAwTSwgRnVsbCwgU1MgKHVudXNlZCkgKi9cXG4rXFx0ezAsIDB4MDAsIDB4MDAsXFx0MHgwMCwgMHgwMH0sXFx0LyogMTAwTSwgSGFsZiwgU1MgKHVudXNlZCkgKi9cXG4rXFx0ezUsIDB4QzAsIDB4MDQsXFx0MHgwNiwgMHgwRn0sXFx0LyogMTAwTSwgRnVsbCwgSFMgKi9cXG4rXFx0ezcsIDB4QzAsIDB4MDQsXFx0MHgwNiwgMHgwRn0sXFx0LyogMTAwTSwgSGFsZiwgSFMgKi9cXG4rXFx0ezcsIDB4MDAsIDB4MDAsXFx0MHgwMywgMHgzRn0sXFx0LyogRlMgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIEFYODgyNzlfQlVMS0lOX1NJWkVbXSA9IHtcXG4rXFx0ezUsIDB4MTAsIDB4MDEsXFx0MHgxMSwgMHgwRn0sXFx0LyogMi41RyAqL1xcbitcXHR7NywgMHhCMywgMHgwMSxcXHQweDExLCAweDBGfSxcXHQvKiAxRywgU1MgKi9cXG4rXFx0ezcsIDB4QzAsIDB4MDIsXFx0MHgwNiwgMHgwRn0sXFx0LyogMUcsIEhTICovXFxuK1xcdHs3LCAweDgwLCAweDAxLFxcdDB4MDMsIDB4MEZ9LFxcdC8qIDEwME0sIEZ1bGwsIFNTICovXFxuK1xcdHs3LCAweDgwLCAweDAxLFxcdDB4MDMsIDB4MEZ9LFxcdC8qIDEwME0sIEhhbGYsIFNTICovXFxuK1xcdHs3LCAweDgwLCAweDAxLFxcdDB4MDMsIDB4MEZ9LFxcdC8qIDEwME0sIEZ1bGwsIEhTICovXFxuK1xcdHs3LCAweDgwLCAweDAxLFxcdDB4MDMsIDB4MEZ9LFxcdC8qIDEwME0sIEhhbGYsIEhTICovXFxuK1xcdHs3LCAweDAwLCAweDAwLFxcdDB4MDMsIDB4M0Z9LFxcdC8qIEZTICovXFxuK307XFxuK1xcbiBzdGF0aWMgdm9pZCBheDg4MTc5X3NldF9wbV9tb2RlKHN0cnVjdCB1c2JuZXQgKmRldiwgYm9vbCBwbV9tb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbkBAIC0zMTMsNiArNDkwLDcgQEAgc3RhdGljIGludCBheDg4MTc5X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXFxuIFxcbiBzdGF0aWMgdm9pZCBheDg4MTc5X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcXG4ge1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gXFx0c3RydWN0IGF4ODgxNzlfaW50X2RhdGEgKmV2ZW50O1xcbiBcXHR1MzIgbGluaztcXG4gXFxuQEAgLTMyMyw2ICs1MDEsOSBAQCBzdGF0aWMgdm9pZCBheDg4MTc5X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcXG4gXFx0bGUzMl90b19jcHVzKCh2b2lkICopXFx1MDAyNmV2ZW50LVxcdTAwM2VpbnRkYXRhMSk7XFxuIFxcbiBcXHRsaW5rID0gKCgoX19mb3JjZSB1MzIpZXZlbnQtXFx1MDAzZWludGRhdGExKSBcXHUwMDI2IEFYX0lOVF9QUExTX0xJTkspIFxcdTAwM2VcXHUwMDNlIDE2O1xcbitcXHRkYXRhLVxcdTAwM2VzcGVlZCA9ICgoKF9fZm9yY2UgdTMyKWV2ZW50LVxcdTAwM2VpbnRkYXRhMSkgXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweDc7XFxuK1xcdGRhdGEtXFx1MDAzZWZ1bGxfZHVwbGV4ID0gKCgoX19mb3JjZSB1MzIpZXZlbnQtXFx1MDAzZWludGRhdGExKSBcXHUwMDNlXFx1MDAzZSAxMikgXFx1MDAyNiAweDE7XFxuK1xcdGRhdGEtXFx1MDAzZWxpbmsgPSBsaW5rO1xcbiBcXG4gXFx0aWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2LVxcdTAwM2VuZXQpICE9IGxpbmspIHtcXG4gXFx0XFx0dXNibmV0X2xpbmtfY2hhbmdlKGRldiwgbGluaywgMSk7XFxuQEAgLTQwMyw2ICs1ODQsMzIgQEAgYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHBydGFkLCB1MTYgZGV2YWQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGF4X3JlYWRfbW1kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IGRldl9hZGRyLCB1MTYgcmVnKVxcbit7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbitcXHR1MTYgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XFxuK1xcdFxcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfQ0xBVVNFNDUsIGRldl9hZGRyLCByZWcsIDIsIFxcdTAwMjZyZXMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgcmVnLCBkZXZfYWRkcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYXhfd3JpdGVfbW1kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IGRldl9hZGRyLCB1MTYgcmVnLCB1MTYgZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSlcXG4rXFx0XFx0cmV0dXJuIGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfUEhZX0NMQVVTRTQ1LCBkZXZfYWRkciwgcmVnLCAyLCBcXHUwMDI2ZGF0YSk7XFxuK1xcbitcXHRyZXR1cm4gYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KGRldiwgcmVnLCBkZXZfYWRkciwgZGF0YSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcbkBAIC00MTQsNyArNjIxLDYgQEAgc3RhdGljIGludCBheDg4MTc5X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKVxcbiBcXG4gXFx0dXNibmV0X3N1c3BlbmQoaW50ZiwgbWVzc2FnZSk7XFxuIFxcbi1cXHQvKiBFbmFibGUgV29MICovXFxuIFxcdGlmIChwcml2LVxcdTAwM2V3b2xvcHRzKSB7XFxuIFxcdFxcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NT05JVE9SX01PRCxcXG4gXFx0XFx0XFx0XFx0IDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG5AQCAtNDI1LDYgKzYzMSwyNiBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXFxuIFxcbiBcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELFxcbiBcXHRcXHRcXHRcXHQgIDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xcbitcXHRcXHRcXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcXHUwMDI2dG1wMTYpO1xcbitcXHRcXHRcXHR0bXAxNiB8PSBBWF9NRURJVU1fUkVDRUlWRV9FTjtcXG4rXFx0XFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KVxcbitcXHRcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1dBS0VVUF9TRVRUSU5HLCA4LFxcbitcXHRcXHRcXHRcXHRcXHQgIEVQSFlfTE9XX1BPV0VSX0VOIHwgUzVfV09MX0VOXFxuK1xcdFxcdFxcdFxcdFxcdCAgfCBTNV9XT0xfTE9XX1BPV0VSIHwgMHg4MDAwLCAwLCBOVUxMKTtcXG4rXFxuK1xcdH0gZWxzZSBpZiAocHJpdi1cXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xcbitcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1dBS0VVUF9TRVRUSU5HLCA4LCAweDgwMDAsIDAsIE5VTEwpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9XQUtFVVBfU0VUVElORywgMCwgRVBIWV9MT1dfUE9XRVJfRU4sIDAsIE5VTEwpO1xcbitcXHRcXHRheDg4MTc5X3NldF9wbV9tb2RlKGRldiwgZmFsc2UpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogRGlzYWJsZSBSWCBwYXRoICovXFxuQEAgLTQzNiwxMSArNjYyLDExIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcXG4gXFxuIFxcdC8qIEZvcmNlIGJ1bGstaW4gemVybyBsZW5ndGggKi9cXG4gXFx0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsXFxuLVxcdFxcdFxcdCAyLCAyLCBcXHUwMDI2dG1wMTYpO1xcbitcXHRcXHRcXHQyLCAyLCBcXHUwMDI2dG1wMTYpO1xcbiBcXG4gXFx0dG1wMTYgfD0gQVhfUEhZUFdSX1JTVENUTF9CWiB8IEFYX1BIWVBXUl9SU1RDVExfSVBSTDtcXG4gXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLFxcbi1cXHRcXHRcXHQgIDIsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdFxcdFxcdDIsIDIsIFxcdTAwMjZ0bXAxNik7XFxuIFxcbiBcXHQvKiBjaGFuZ2UgY2xvY2sgKi9cXG4gXFx0dG1wOCA9IDA7XFxuQEAgLTQ1NiwxMiArNjgyLDE5IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcXG4gfVxcbiBcXG4gLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgYXV0b2RldGFjaCBmdW5jdGlvbi4gKi9cXG4tLyogVGhpcyBmdW5jdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IG9mZnNldCAweDQzIG9mIEVFUFJPTSAqL1xcbisvKiBUaGlzIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYnkgb2Zmc2V0IDB4NDMgb2YgRUVQUk9NIGZvciB0aGUgQVg4ODE3OSAqL1xcbiBzdGF0aWMgaW50IGF4ODgxNzlfYXV0b19kZXRhY2goc3RydWN0IHVzYm5ldCAqZGV2KVxcbiB7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiBcXHR1MTYgdG1wMTY7XFxuIFxcdHU4IHRtcDg7XFxuIFxcbitcXHRpZiAocHJpdi1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcXG4rXFx0XFx0dG1wMTYgPSBBWDg4MTc5QV9BVVRPREVUQUNIX0RFTEFZO1xcbitcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX0FVVE9ERVRBQ0gsIHRtcDE2LCAwLCAwLCBOVUxMKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX0VFUFJPTSwgMHg0MywgMSwgMiwgXFx1MDAyNnRtcDE2KSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG5AQCAtNDg0LDExICs3MTcsMzEgQEAgc3RhdGljIGludCBheDg4MTc5X2F1dG9fZGV0YWNoKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gc3RhdGljIGludCBheDg4MTc5X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhO1xcbitcXHR1OCByZWc4O1xcbiBcXG4rXFx0YXgxNzlfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuIFxcdGF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCB0cnVlKTtcXG4gXFxuIFxcdHVzYm5ldF9saW5rX2NoYW5nZShkZXYsIDAsIDApO1xcbiBcXG4rXFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XFxuK1xcdFxcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFxcdTAwMjZyZWc4KTtcXG4rXFx0XFx0aWYgKCEocmVnOCBcXHUwMDI2IEFYX1BIWV9QT1dFUikpIHtcXG4rXFx0XFx0XFx0cmVnOCA9IEFYX1BIWV9QT1dFUjtcXG4rXFx0XFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFxcdTAwMjZyZWc4KTtcXG4rXFx0XFx0XFx0bXNsZWVwKDI1MCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9GV19NT0RFLCBBWF9GV19NT0RFXzE3OUEsIDAsIDAsIE5VTEwpO1xcbitcXG4rXFx0XFx0LyogTm93LCB0aGF0IEFYX0ZXX01PREVfMTc5QSBpcyBlbmFibGVkLCB0aGUgUEhZIG5lZWRzIGEgcG93ZXItY3ljbGUuXFxuK1xcdFxcdCAqIFBIWS1wb3dlciBpcyByZS1lbmFibGVkIGluIGF4ODgxNzlfcmVzZXQoKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVnOCA9IDA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfUEhZX1BPV0VSLCAwLCAwLCAxLCBcXHUwMDI2cmVnOCk7XFxuK1xcdFxcdG1zbGVlcCgyNTApO1xcbitcXHR9XFxuK1xcbiBcXHRheDg4MTc5X3Jlc2V0KGRldik7XFxuIFxcbiBcXHRheDg4MTc5X3NldF9wbV9tb2RlKGRldiwgZmFsc2UpO1xcbkBAIC01MTAsNiArNzYzLDIxIEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gXFx0dXNibmV0X2Rpc2Nvbm5lY3QoaW50Zik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGF4ODgxNzlfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFxuK1xcdC8qIEluaGVyaXQgc3RhbmRhcmQgZGV2aWNlIGluZm8gKi9cXG4rXFx0dXNibmV0X2dldF9kcnZpbmZvKG5ldCwgaW5mbyk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzbnByaW50ZihpbmZvLVxcdTAwM2Vmd192ZXJzaW9uLCBzaXplb2YoaW5mby1cXHUwMDNlZndfdmVyc2lvbiksIFxcXCIlZC4lZC4lZC4lZFxcXCIsXFxuK1xcdFxcdCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uWzBdLCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uWzFdLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvblsyXSwgcHJpdi1cXHUwMDNlZndfdmVyc2lvblszXSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkXFxuIGF4ODgxNzlfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKVxcbiB7XFxuQEAgLTUzNiw0MSArODA0LDc0IEBAIGF4ODgxNzlfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKVxcbiBcXG4gc3RhdGljIGludCBheDg4MTc5X2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuIHtcXG4tXFx0cmV0dXJuIEFYX0VFUFJPTV9MRU47XFxuK1xcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGE7XFxuK1xcbitcXHRheDE3OV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKVxcbitcXHRcXHRyZXR1cm4gQVhfRUVQUk9NX0xFTjtcXG4rXFx0ZWxzZSBpZiAoYXgxNzlfZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSlcXG4rXFx0XFx0cmV0dXJuIEFYODgyNzlfRUVQUk9NX0xFTjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXR1cm4gQVg4ODE3OUFfRUVQUk9NX0xFTjtcXG4gfVxcbiBcXG4tc3RhdGljIGludFxcbi1heDg4MTc5X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXFxuLVxcdFxcdCAgIHU4ICpkYXRhKVxcbitzdGF0aWMgdm9pZFxcbitheDg4MTc5X2VlcHJvbV9hY2Nlc3NfcGFyYW1zKHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEsIGludCBpLCB1MTYgKnZhbHVlLCB1MTYgKmlkeClcXG4re1xcbitcXHQvKiBBWDg4MTc5IGhhcyBhIHdvcmQtYWRkcmVzc2FibGUgRUVQUk9NXFxuK1xcdCAqIEFYODgxNzlBIHVzZXMgRUZVU0VTIHdpdGggMjAgYnl0ZXMgbGVuZ3RoXFxuK1xcdCAqIEFYODgyNzkgaGFzIGFuIEVFUFJPTSBhZGRyZXNzYWJsZSBpbiAyNTYgYnl0ZSBibG9ja3NcXG4rXFx0ICovXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XFxuK1xcdFxcdCp2YWx1ZSA9IGk7XFxuK1xcdFxcdCppZHggPSAxO1xcbitcXHR9IGVsc2UgaWYgKGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcXG4rXFx0XFx0KnZhbHVlID0gKGkgKiBheDE3OV9kYXRhLVxcdTAwM2VlZXByb21fYmxvY2spIFxcdTAwM2VcXHUwMDNlIDE2O1xcbitcXHRcXHQqaWR4ID0gKGkgKiBheDE3OV9kYXRhLVxcdTAwM2VlZXByb21fYmxvY2spIFxcdTAwMjYgMHhmZmZmO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQqdmFsdWUgPSBpIFxcdTAwM2NcXHUwMDNjIDQ7XFxuK1xcdFxcdCppZHggPSAwO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYXg4ODE3OV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbi1cXHR1MTYgKmVlcHJvbV9idWZmO1xcbi1cXHRpbnQgZmlyc3Rfd29yZCwgbGFzdF93b3JkO1xcbi1cXHRpbnQgaSwgcmV0O1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhO1xcbitcXHRpbnQgZmlyc3QsIGxhc3QsIGksIHJldDtcXG4rXFx0dTggKmVlcHJvbV9idWZmO1xcbitcXG4rXFx0YXgxNzlfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuIFxcbiBcXHRpZiAoZWVwcm9tLVxcdTAwM2VsZW4gPT0gMClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRlZXByb20tXFx1MDAzZW1hZ2ljID0gQVg4ODE3OV9FRVBST01fTUFHSUM7XFxuIFxcbi1cXHRmaXJzdF93b3JkID0gZWVwcm9tLVxcdTAwM2VvZmZzZXQgXFx1MDAzZVxcdTAwM2UgMTtcXG4tXFx0bGFzdF93b3JkID0gKGVlcHJvbS1cXHUwMDNlb2Zmc2V0ICsgZWVwcm9tLVxcdTAwM2VsZW4gLSAxKSBcXHUwMDNlXFx1MDAzZSAxO1xcbi1cXHRlZXByb21fYnVmZiA9IGttYWxsb2NfYXJyYXkobGFzdF93b3JkIC0gZmlyc3Rfd29yZCArIDEsIHNpemVvZih1MTYpLFxcbi1cXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdGZpcnN0ID0gZWVwcm9tLVxcdTAwM2VvZmZzZXQgLyBheDE3OV9kYXRhLVxcdTAwM2VlZXByb21fYmxvY2s7XFxuK1xcdGxhc3QgPSAoZWVwcm9tLVxcdTAwM2VvZmZzZXQgKyBlZXByb20tXFx1MDAzZWxlbiAtIDEpIC8gYXgxNzlfZGF0YS1cXHUwMDNlZWVwcm9tX2Jsb2NrO1xcbitcXG4rXFx0ZWVwcm9tX2J1ZmYgPSBremFsbG9jKChsYXN0IC0gZmlyc3QgKyAxKSAqIGF4MTc5X2RhdGEtXFx1MDAzZWVlcHJvbV9ibG9jaywgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghZWVwcm9tX2J1ZmYpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0LyogYXg4ODE3OS8xNzhBIHJldHVybnMgMiBieXRlcyBmcm9tIGVlcHJvbSBvbiByZWFkICovXFxuLVxcdGZvciAoaSA9IGZpcnN0X3dvcmQ7IGkgXFx1MDAzYz0gbGFzdF93b3JkOyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gX19heDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX0VFUFJPTSwgaSwgMSwgMixcXG4tXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZlZXByb21fYnVmZltpIC0gZmlyc3Rfd29yZF0pO1xcbitcXHRmb3IgKGkgPSBmaXJzdDsgaSBcXHUwMDNjPSBsYXN0OyBpKyspIHtcXG4rXFx0XFx0dTE2IHZhbHVlLCBpZHg7XFxuK1xcbitcXHRcXHRheDg4MTc5X2VlcHJvbV9hY2Nlc3NfcGFyYW1zKGF4MTc5X2RhdGEsIGksIFxcdTAwMjZ2YWx1ZSwgXFx1MDAyNmlkeCk7XFxuK1xcdFxcdHJldCA9IF9fYXg4ODE3OV9yZWFkX2NtZChkZXYsIGF4MTc5X2RhdGEtXFx1MDAzZWVlcHJvbV9yZWFkX2NtZCxcXG4rXFx0XFx0XFx0XFx0XFx0IHZhbHVlLCBpZHgsIGF4MTc5X2RhdGEtXFx1MDAzZWVlcHJvbV9ibG9jayxcXG4rXFx0XFx0XFx0XFx0XFx0IGVlcHJvbV9idWZmICsgKGkgLSBmaXJzdCkgKiBheDE3OV9kYXRhLVxcdTAwM2VlZXByb21fYmxvY2spO1xcbitcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0a2ZyZWUoZWVwcm9tX2J1ZmYpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRtZW1jcHkoZGF0YSwgKHU4ICopZWVwcm9tX2J1ZmYgKyAoZWVwcm9tLVxcdTAwM2VvZmZzZXQgXFx1MDAyNiAxKSwgZWVwcm9tLVxcdTAwM2VsZW4pO1xcbitcXHRtZW1jcHkoZGF0YSwgZWVwcm9tX2J1ZmYgKyBlZXByb20tXFx1MDAzZW9mZnNldCAlIGF4MTc5X2RhdGEtXFx1MDAzZWVlcHJvbV9ibG9jaywgZWVwcm9tLVxcdTAwM2VsZW4pO1xcbiBcXHRrZnJlZShlZXByb21fYnVmZik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTU4MCwxMiArODgxLDE3IEBAIGF4ODgxNzlfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSxcXG4gXFx0XFx0ICAgdTggKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG4rXFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTtcXG4gXFx0dTE2ICplZXByb21fYnVmZjtcXG4gXFx0aW50IGZpcnN0X3dvcmQ7XFxuIFxcdGludCBsYXN0X3dvcmQ7XFxuIFxcdGludCByZXQ7XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0YXgxNzlfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4gXFx0bmV0ZGV2X2RiZyhuZXQsIFxcXCJ3cml0ZSBFRVBST00gbGVuICVkLCBvZmZzZXQgJWQsIG1hZ2ljIDB4JXhcXFxcblxcXCIsXFxuIFxcdFxcdCAgIGVlcHJvbS1cXHUwMDNlbGVuLCBlZXByb20tXFx1MDAzZW9mZnNldCwgZWVwcm9tLVxcdTAwM2VtYWdpYyk7XFxuIFxcbkBAIC02NTEsMTIgKzk1NywzOSBAQCBheDg4MTc5X3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuIHtcXG4gXFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG4rXFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YTtcXG4rXFx0aW50IHY7XFxuK1xcbitcXHRkYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gXFxuIFxcdG1paV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhcXHUwMDI2ZGV2LVxcdTAwM2VtaWksIGNtZCk7XFxuIFxcbitcXHRpZiAoZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xcbitcXHRcXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0XFx0IGNtZC1cXHUwMDNlbGlua19tb2Rlcy5zdXBwb3J0ZWQpO1xcbitcXG4rXFx0XFx0diA9IGF4ODgxNzlfbWRpb19yZWFkKGRldi1cXHUwMDNlbmV0LCBkZXYtXFx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xcbitcXHRcXHRpZiAodiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHYgXFx1MDAyNiBBRFZFUlRJU0VfUkVTVilcXG4rXFx0XFx0XFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXFxuK1xcdFxcdFxcdFxcdFxcdCBjbWQtXFx1MDAzZWxpbmtfbW9kZXMuYWR2ZXJ0aXNpbmcpO1xcbitcXG4rXFx0XFx0diA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XFxuK1xcdFxcdGlmIChkYXRhLVxcdTAwM2VzcGVlZCA9PSBFVEhFUl9MSU5LXzI1MDApIHtcXG4rXFx0XFx0XFx0Y21kLVxcdTAwM2ViYXNlLnNwZWVkID0gU1BFRURfMjUwMDtcXG4rXFx0XFx0XFx0LyogTURJT19BTl8xMEdCVF9TVEFUX0xQMl81RyBpcyBicm9rZW4sIGJ1dCB3ZSBjYW4gZGVkdWNlIHRoYXRcXG4rXFx0XFx0XFx0ICogdGhlIGxpbmstcGFydG5lciBhZHZlcnRpc2VkIDI1MDBNIGlmIHJlbW90ZWx5IEFOIHN1Y2NjZWRlZFxcbitcXHRcXHRcXHQgKiBmb3IgbGluayBzcGVlZCBcXHUwMDNlIDEwMDBNIGFuZCB3ZSBsb2NhbGx5IGhhdmUgYSBsaW5rIHNwZWVkIG9mXFxuK1xcdFxcdFxcdCAqIDI1MDBNXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAodiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHYgXFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfUkVNT0spXFxuK1xcdFxcdFxcdFxcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY21kLVxcdTAwM2VsaW5rX21vZGVzLmxwX2FkdmVydGlzaW5nKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNjY0LDM0ICs5OTcsMTI4IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhO1xcbitcXHRpbnQgdjtcXG4rXFxuK1xcdGRhdGEgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbitcXG4rXFx0LyogbWlpX2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzIGhhbmRsZXMgdW5rbm93biBiaXRzIGluIE1JSV9BRFZFUlRJU0VcXG4rXFx0ICogdHJhbnNwYXJlbnRseSwgc28gZm9yIHRoZSAyLjVHQml0IGxpbmsgc3BlZWQgb2YgdGhlIEFYX1ZFUlNJT05fQVg4ODI3OVxcbitcXHQgKiB3ZSBqdXN0IHNldCB1cCBBRFZFUlRJU0VfUkVTViBiZWZvcmUgY2FsbGluZyBtaWlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3NcXG4rXFx0ICogYXQgbGVhc3QgZm9yIHNwZWVkcyBcXHUwMDNjIDI1MDBcXG4rXFx0ICovXFxuK1xcdGlmIChkYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XFxuK1xcdFxcdHYgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi1cXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7XFxuK1xcdFxcdGlmICh2IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHY7XFxuK1xcbitcXHRcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHRcXHQgICAgICBjbWQtXFx1MDAzZWxpbmtfbW9kZXMuYWR2ZXJ0aXNpbmcpKVxcbitcXHRcXHRcXHR2IHw9IEFEVkVSVElTRV9SRVNWO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHYgXFx1MDAyNj0gfkFEVkVSVElTRV9SRVNWO1xcbitcXHRcXHRheDg4MTc5X21kaW9fd3JpdGUobmV0LCBkZXYtXFx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIHYpO1xcbitcXHRcXHRpZiAoY21kLVxcdTAwM2ViYXNlLnNwZWVkID09IFNQRUVEXzI1MDApXFxuK1xcdFxcdFxcdHJldHVybiBtaWlfbndheV9yZXN0YXJ0KFxcdTAwMjZkZXYtXFx1MDAzZW1paSk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiBtaWlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MoXFx1MDAyNmRldi1cXHUwMDNlbWlpLCBjbWQpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBheDg4MTc5YV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSlcXG4re1xcbitcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhO1xcbitcXHR1MTYgYm1jciwgbGNsYWR2LCBybXRhZHY7XFxuK1xcdHU4IGNhcDtcXG4rXFxuK1xcdGRhdGEgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbitcXG4rXFx0aWYgKGRhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGJtY3IgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi1cXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0JNQ1IpO1xcbitcXHRsY2xhZHYgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi1cXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7XFxuK1xcdHJtdGFkdiA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LVxcdTAwM2VtaWkucGh5X2lkLCBNSUlfTFBBKTtcXG4rXFxuK1xcdGlmICghKGJtY3IgXFx1MDAyNiBCTUNSX0FORU5BQkxFKSkge1xcbitcXHRcXHRwYXVzZS1cXHUwMDNlYXV0b25lZyA9IDA7XFxuK1xcdFxcdHBhdXNlLVxcdTAwM2VyeF9wYXVzZSA9IDA7XFxuK1xcdFxcdHBhdXNlLVxcdTAwM2V0eF9wYXVzZSA9IDA7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cGF1c2UtXFx1MDAzZWF1dG9uZWcgPSAxO1xcbitcXG4rXFx0Y2FwID0gbWlpX3Jlc29sdmVfZmxvd2N0cmxfZmR4KGxjbGFkdiwgcm10YWR2KTtcXG4rXFxuK1xcdGlmIChjYXAgXFx1MDAyNiBGTE9XX0NUUkxfUlgpXFxuK1xcdFxcdHBhdXNlLVxcdTAwM2VyeF9wYXVzZSA9IDE7XFxuK1xcbitcXHRpZiAoY2FwIFxcdTAwMjYgRkxPV19DVFJMX1RYKVxcbitcXHRcXHRwYXVzZS1cXHUwMDNldHhfcGF1c2UgPSAxO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGF4ODgxNzlhX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxcbit7XFxuK1xcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XFxuK1xcdHUxNiBvbGQsIG5ldzEsIGJtY3I7XFxuK1xcdHU4IGNhcCA9IDA7XFxuK1xcbitcXHRkYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFxuK1xcdGlmIChkYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRibWNyID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtXFx1MDAzZW1paS5waHlfaWQsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKHBhdXNlLVxcdTAwM2VhdXRvbmVnIFxcdTAwMjZcXHUwMDI2ICEoYm1jciBcXHUwMDI2IEJNQ1JfQU5FTkFCTEUpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwYXVzZS1cXHUwMDNlcnhfcGF1c2UpXFxuK1xcdFxcdGNhcCB8PSBGTE9XX0NUUkxfUlg7XFxuK1xcbitcXHRpZiAocGF1c2UtXFx1MDAzZXR4X3BhdXNlKVxcbitcXHRcXHRjYXAgfD0gRkxPV19DVFJMX1RYO1xcbitcXG4rXFx0b2xkID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtXFx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xcbitcXHRuZXcxID0gKG9sZCBcXHUwMDI2IH4oQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNKSkgfFxcbitcXHRcXHRtaWlfYWR2ZXJ0aXNlX2Zsb3djdHJsKGNhcCk7XFxuK1xcdGlmIChvbGQgIT0gbmV3MSlcXG4rXFx0XFx0YXg4ODE3OV9tZGlvX3dyaXRlKG5ldCwgZGV2LVxcdTAwM2VtaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLCBuZXcxKTtcXG4rXFxuK1xcdHJldHVybiBtaWlfbndheV9yZXN0YXJ0KFxcdTAwMjZkZXYtXFx1MDAzZW1paSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnRcXG4gYXg4ODE3OV9ldGh0b29sX2dldF9lZWUoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxcbiB7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiBcXHRpbnQgdmFsO1xcbiBcXG4gXFx0LyogR2V0IFN1cHBvcnRlZCBFRUUgKi9cXG4tXFx0dmFsID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LCBNRElPX1BDU19FRUVfQUJMRSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIE1ESU9fTU1EX1BDUyk7XFxuK1xcdHZhbCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfUENTLCBNRElPX1BDU19FRUVfQUJMRSk7XFxuIFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gdmFsO1xcbiBcXHRtaWlfZWVlX2NhcDFfbW9kX2xpbmttb2RlX3QoZGF0YS1cXHUwMDNlc3VwcG9ydGVkLCB2YWwpO1xcbiBcXG4gXFx0LyogR2V0IGFkdmVydGlzZW1lbnQgRUVFICovXFxuLVxcdHZhbCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgTURJT19BTl9FRUVfQURWLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgTURJT19NTURfQU4pO1xcbitcXHR2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9BRFYpO1xcbiBcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHZhbDtcXG4gXFx0bWlpX2VlZV9jYXAxX21vZF9saW5rbW9kZV90KGRhdGEtXFx1MDAzZWFkdmVydGlzZWQsIHZhbCk7XFxuIFxcbiBcXHQvKiBHZXQgTFAgYWR2ZXJ0aXNlbWVudCBFRUUgKi9cXG4tXFx0dmFsID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LCBNRElPX0FOX0VFRV9MUEFCTEUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBNRElPX01NRF9BTik7XFxuK1xcdHZhbCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0xQQUJMRSk7XFxuIFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gdmFsO1xcbiBcXHRtaWlfZWVlX2NhcDFfbW9kX2xpbmttb2RlX3QoZGF0YS1cXHUwMDNlbHBfYWR2ZXJ0aXNlZCwgdmFsKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcXG4rXFx0XFx0dmFsID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfTFBBQkxFMik7XFxuK1xcdFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gdmFsO1xcbitcXHRcXHRtaWlfZWVlX2NhcDJfbW9kX2xpbmttb2RlX2Fkdl90KGRhdGEtXFx1MDAzZWxwX2FkdmVydGlzZWQsIHZhbCk7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTcwMSw4ICsxMTI4LDcgQEAgYXg4ODE3OV9ldGh0b29sX3NldF9lZWUoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxcbiB7XFxuIFxcdHUxNiB0bXAxNiA9IGxpbmttb2RlX3RvX21paV9lZWVfY2FwMV90KGRhdGEtXFx1MDAzZWFkdmVydGlzZWQpO1xcbiBcXG4tXFx0cmV0dXJuIGF4ODgxNzlfcGh5X3dyaXRlX21tZF9pbmRpcmVjdChkZXYsIE1ESU9fQU5fRUVFX0FEVixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgTURJT19NTURfQU4sIHRtcDE2KTtcXG4rXFx0cmV0dXJuIGF4X3dyaXRlX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9BRFYsIHRtcDE2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBheDg4MTc5X2Noa19lZWUoc3RydWN0IHVzYm5ldCAqZGV2KVxcbkBAIC03MTIsNDAgKzExMzgsMjcgQEAgc3RhdGljIGludCBheDg4MTc5X2Noa19lZWUoc3RydWN0IHVzYm5ldCAqZGV2KVxcbiBcXG4gXFx0bWlpX2V0aHRvb2xfZ3NldChcXHUwMDI2ZGV2LVxcdTAwM2VtaWksIFxcdTAwMjZlY21kKTtcXG4gXFxuLVxcdGlmIChlY21kLmR1cGxleCBcXHUwMDI2IERVUExFWF9GVUxMKSB7XFxuK1xcdHByaXYtXFx1MDAzZWVlZV9hY3RpdmUgPSAwO1xcbitcXHRpZiAoKHByaXYtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODI3OSBcXHUwMDI2XFx1MDAyNiAoZWNtZC5kdXBsZXggXFx1MDAyNiBEVVBMRVhfRlVMTCkpIHx8XFxuK1xcdCAgICAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwIFxcdTAwMjZcXHUwMDI2IChlY21kLmR1cGxleCBcXHUwMDI2IERVUExFWF9GVUxMKSkpIHtcXG4gXFx0XFx0aW50IGVlZV9scCwgZWVlX2NhcCwgZWVlX2FkdjtcXG4gXFx0XFx0dTMyIGxwLCBjYXAsIGFkdiwgc3VwcG9ydGVkID0gMDtcXG4gXFxuLVxcdFxcdGVlZV9jYXAgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdE1ESU9fUENTX0VFRV9BQkxFLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRNRElPX01NRF9QQ1MpO1xcbi1cXHRcXHRpZiAoZWVlX2NhcCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0cHJpdi1cXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XFxuK1xcdFxcdGVlZV9jYXAgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX1BDUywgTURJT19QQ1NfRUVFX0FCTEUpO1xcbitcXHRcXHRpZiAoZWVlX2NhcCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0fVxcbiBcXG4gXFx0XFx0Y2FwID0gbW1kX2VlZV9jYXBfdG9fZXRodG9vbF9zdXBfdChlZWVfY2FwKTtcXG4tXFx0XFx0aWYgKCFjYXApIHtcXG4tXFx0XFx0XFx0cHJpdi1cXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XFxuK1xcdFxcdGlmICghY2FwKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGVlZV9scCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1ESU9fQU5fRUVFX0xQQUJMRSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1ESU9fTU1EX0FOKTtcXG4tXFx0XFx0aWYgKGVlZV9scCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0cHJpdi1cXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0fVxcbiBcXG4tXFx0XFx0ZWVlX2FkdiA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0TURJT19BTl9FRUVfQURWLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRNRElPX01NRF9BTik7XFxuK1xcdFxcdGVlZV9scCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0xQQUJMRSk7XFxuK1xcdFxcdGlmIChlZWVfbHAgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdFxcdGlmIChlZWVfYWR2IFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRwcml2LVxcdTAwM2VlZWVfYWN0aXZlID0gMDtcXG4tXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGVlZV9hZHYgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9BRFYpO1xcbitcXHRcXHRpZiAoZWVlX2FkdiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0XFx0YWR2ID0gbW1kX2VlZV9hZHZfdG9fZXRodG9vbF9hZHZfdChlZWVfYWR2KTtcXG4gXFx0XFx0bHAgPSBtbWRfZWVlX2Fkdl90b19ldGh0b29sX2Fkdl90KGVlZV9scCk7XFxuQEAgLTc1Myw2NSArMTE2Niw1MyBAQCBzdGF0aWMgaW50IGF4ODgxNzlfY2hrX2VlZShzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIFxcdFxcdFxcdCAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIDpcXG4gXFx0XFx0XFx0ICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbDtcXG4gXFxuLVxcdFxcdGlmICghKGxwIFxcdTAwMjYgYWR2IFxcdTAwMjYgc3VwcG9ydGVkKSkge1xcbi1cXHRcXHRcXHRwcml2LVxcdTAwM2VlZWVfYWN0aXZlID0gMDtcXG4tXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGlmICghKGxwIFxcdTAwMjYgYWR2IFxcdTAwMjYgc3VwcG9ydGVkKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRcXHRwcml2LVxcdTAwM2VlZWVfYWN0aXZlID0gMTtcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHByaXYtXFx1MDAzZWVlZV9hY3RpdmUgPSAwO1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGF4ODgxNzlfZGlzYWJsZV9lZWUoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi17XFxuLVxcdHUxNiB0bXAxNjtcXG4tXFxuLVxcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTM7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuLVxcdFxcdFxcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFxcdTAwMjZ0bXAxNik7XFxuLVxcbi1cXHR0bXAxNiA9IDB4MzI0NjtcXG4tXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcXG4tXFx0XFx0XFx0ICBNSUlfUEhZQUREUiwgMiwgXFx1MDAyNnRtcDE2KTtcXG4tXFxuLVxcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTA7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuLVxcdFxcdFxcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFxcdTAwMjZ0bXAxNik7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGF4ODgxNzlfZW5hYmxlX2VlZShzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuK3N0YXRpYyB2b2lkIGF4ODgxNzlfZWVlX2NvbmZpZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIGJvb2wgZW5hYmxlKVxcbiB7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiBcXHR1MTYgdG1wMTY7XFxuIFxcbi1cXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UzO1xcbi1cXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxcbi1cXHRcXHRcXHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcXHUwMDI2dG1wMTYpO1xcbi1cXG4tXFx0dG1wMTYgPSAweDMyNDc7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuLVxcdFxcdFxcdCAgTUlJX1BIWUFERFIsIDIsIFxcdTAwMjZ0bXAxNik7XFxuLVxcbi1cXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0U1O1xcbi1cXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxcbi1cXHRcXHRcXHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcXHUwMDI2dG1wMTYpO1xcbi1cXG4tXFx0dG1wMTYgPSAweDA2ODA7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuLVxcdFxcdFxcdCAgTUlJX0JNU1IsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XFxuK1xcdFxcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTM7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuK1xcdFxcdFxcdFxcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcbitcXHRcXHR0bXAxNiA9IGVuYWJsZSA/IDB4MzI0NyA6IDB4MzI0NjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcXG4rXFx0XFx0XFx0XFx0ICBNSUlfUEhZQUREUiwgMiwgXFx1MDAyNnRtcDE2KTtcXG4rXFx0XFx0aWYgKGVuYWJsZSkge1xcbitcXHRcXHRcXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0U1O1xcbitcXHRcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxcbitcXHRcXHRcXHRcXHRcXHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcXHUwMDI2dG1wMTYpO1xcbitcXG4rXFx0XFx0XFx0dG1wMTYgPSAweDA2ODA7XFxuK1xcdFxcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgTUlJX0JNU1IsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTA7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuLVxcdFxcdFxcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdFxcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuK1xcdFxcdFxcdFxcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfR1BIWV9DVEwsIEFYX0dQSFlfRUVFX0NUUkwsIGVuYWJsZSwgMCwgTlVMTCk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGludCBheDg4MTc5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG4tXFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXY7XFxuK1xcbitcXHRwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gXFxuIFxcdGVkYXRhLVxcdTAwM2VlZWVfZW5hYmxlZCA9IHByaXYtXFx1MDAzZWVlZV9lbmFibGVkO1xcbiBcXHRlZGF0YS1cXHUwMDNlZWVlX2FjdGl2ZSA9IHByaXYtXFx1MDAzZWVlZV9hY3RpdmU7XFxuQEAgLTgyMiwxOCArMTIyMywyMCBAQCBzdGF0aWMgaW50IGF4ODgxNzlfZ2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZGF0YSlcXG4gc3RhdGljIGludCBheDg4MTc5X3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG4tXFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXY7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFxuIFxcdHByaXYtXFx1MDAzZWVlZV9lbmFibGVkID0gZWRhdGEtXFx1MDAzZWVlZV9lbmFibGVkO1xcbiBcXHRpZiAoIXByaXYtXFx1MDAzZWVlZV9lbmFibGVkKSB7XFxuLVxcdFxcdGF4ODgxNzlfZGlzYWJsZV9lZWUoZGV2KTtcXG4rXFx0XFx0YXg4ODE3OV9lZWVfY29uZmlnKGRldiwgZmFsc2UpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRwcml2LVxcdTAwM2VlZWVfZW5hYmxlZCA9IGF4ODgxNzlfY2hrX2VlZShkZXYpO1xcbiBcXHRcXHRpZiAoIXByaXYtXFx1MDAzZWVlZV9lbmFibGVkKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRcXHRheDg4MTc5X2VuYWJsZV9lZWUoZGV2KTtcXG4rXFx0XFx0YXg4ODE3OV9lZWVfY29uZmlnKGRldiwgdHJ1ZSk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgZWRhdGEpO1xcbkBAIC04NDgsNiArMTI1MSw3IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzlfZXRodG9vbF9vcHMgPSB7XFxuK1xcdC5nZXRfZHJ2aW5mb1xcdFxcdD0gYXg4ODE3OV9nZXRfZHJ2aW5mbyxcXG4gXFx0LmdldF9saW5rXFx0XFx0PSBldGh0b29sX29wX2dldF9saW5rLFxcbiBcXHQuZ2V0X21zZ2xldmVsXFx0XFx0PSB1c2JuZXRfZ2V0X21zZ2xldmVsLFxcbiBcXHQuc2V0X21zZ2xldmVsXFx0XFx0PSB1c2JuZXRfc2V0X21zZ2xldmVsLFxcbkBAIC04NjEsMTYgKzEyNjUsNzggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheDg4MTc5X2V0aHRvb2xfb3BzID0ge1xcbiBcXHQubndheV9yZXNldFxcdFxcdD0gdXNibmV0X253YXlfcmVzZXQsXFxuIFxcdC5nZXRfbGlua19rc2V0dGluZ3NcXHQ9IGF4ODgxNzlfZ2V0X2xpbmtfa3NldHRpbmdzLFxcbiBcXHQuc2V0X2xpbmtfa3NldHRpbmdzXFx0PSBheDg4MTc5X3NldF9saW5rX2tzZXR0aW5ncyxcXG4rXFx0LmdldF9wYXVzZXBhcmFtXFx0XFx0PSBheDg4MTc5YV9nZXRfcGF1c2VwYXJhbSxcXG4rXFx0LnNldF9wYXVzZXBhcmFtXFx0XFx0PSBheDg4MTc5YV9zZXRfcGF1c2VwYXJhbSxcXG4gXFx0LmdldF90c19pbmZvXFx0XFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxcbiB9O1xcbiBcXG4rc3RhdGljIGludCBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXFxuK3tcXG4rXFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG4rXFx0dTggdmxhbl9jdHJsO1xcbitcXHR1MTYgcmVnMTY7XFxuK1xcdHU4IHJlZzg7XFxuK1xcbitcXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcXHUwMDI2cmVnOCk7XFxuK1xcdHZsYW5fY3RybCA9IHJlZzg7XFxuK1xcbitcXHQvKiBBZGRyZXNzICovXFxuK1xcdHJlZzggPSAodmlkIC8gMTYpO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQUREUkVTUywgMSwgMSwgXFx1MDAyNnJlZzgpO1xcbitcXG4rXFx0LyogRGF0YSAqL1xcbitcXHRyZWc4ID0gdmxhbl9jdHJsIHwgQVhfVkxBTl9DT05UUk9MX1JEO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXFx1MDAyNnJlZzgpO1xcbitcXG4rXFx0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfREFUQTAsIDIsIDIsIFxcdTAwMjZyZWcxNik7XFxuK1xcdHJlZzE2IFxcdTAwMjY9IH4oMSBcXHUwMDNjXFx1MDAzYyAodmlkICUgMTYpKTtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCBcXHUwMDI2cmVnMTYpO1xcbitcXG4rXFx0cmVnOCA9IHZsYW5fY3RybCB8IEFYX1ZMQU5fQ09OVFJPTF9XRTtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZyZWc4KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGF4MTc5YV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxcbit7XFxuK1xcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuK1xcdHU4IHZsYW5fY3RybDtcXG4rXFx0dTE2IHJlZzE2O1xcbitcXHR1OCByZWc4O1xcbitcXG4rXFx0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXFx1MDAyNnJlZzgpO1xcbitcXHR2bGFuX2N0cmwgPSByZWc4O1xcbitcXG4rXFx0LyogQWRkcmVzcyAqL1xcbitcXHRyZWc4ID0gKHZpZCAvIDE2KTtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MsIDEsIDEsIFxcdTAwMjZyZWc4KTtcXG4rXFxuK1xcdC8qIERhdGEgKi9cXG4rXFx0cmVnOCA9IHZsYW5fY3RybCB8IEFYX1ZMQU5fQ09OVFJPTF9SRDtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZyZWc4KTtcXG4rXFxuK1xcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCBcXHUwMDI2cmVnMTYpO1xcbitcXHRyZWcxNiB8PSAoMSBcXHUwMDNjXFx1MDAzYyAodmlkICUgMTYpKTtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCBcXHUwMDI2cmVnMTYpO1xcbitcXG4rXFx0cmVnOCA9IHZsYW5fY3RybCB8IEFYX1ZMQU5fQ09OVFJPTF9XRTtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZyZWc4KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBheDg4MTc5X3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbi1cXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gXFx0dTggKm1fZmlsdGVyID0gKCh1OCAqKWRldi1cXHUwMDNlZGF0YSk7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XFxuK1xcbitcXHRkYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gXFxuLVxcdGRhdGEtXFx1MDAzZXJ4Y3RsID0gKEFYX1JYX0NUTF9TVEFSVCB8IEFYX1JYX0NUTF9BQiB8IEFYX1JYX0NUTF9JUEUpO1xcbitcXHRkYXRhLVxcdTAwM2VyeGN0bCA9IChBWF9SWF9DVExfU1RBUlQgfCBBWF9SWF9DVExfQUIgfCBBWF9SWF9DVExfRFJPUENSQ0VSUik7XFxuK1xcdGlmIChkYXRhLVxcdTAwM2VpcF9hbGlnbilcXG4rXFx0XFx0ZGF0YS1cXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX0lQRTtcXG4gXFxuIFxcdGlmIChuZXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1BST01JU0MpIHtcXG4gXFx0XFx0ZGF0YS1cXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX1BSTztcXG5AQCAtOTA5LDYgKzEzNzUsNyBAQCBheDg4MTc5X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4ge1xcbiBcXHR1OCB0bXA7XFxuIFxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGEgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiBcXHRuZXRkZXZfZmVhdHVyZXNfdCBjaGFuZ2VkID0gbmV0LVxcdTAwM2VmZWF0dXJlcyBeIGZlYXR1cmVzO1xcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0lQX0NTVU0pIHtcXG5AQCAtOTI4LDYgKzEzOTUsMzQgQEAgYXg4ODE3OV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuIFxcdFxcdHRtcCBePSBBWF9SWENPRV9JUCB8IEFYX1JYQ09FX1RDUCB8IEFYX1JYQ09FX1VEUCB8XFxuIFxcdFxcdCAgICAgICBBWF9SWENPRV9UQ1BWNiB8IEFYX1JYQ09FX1VEUFY2O1xcbiBcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYQ09FX0NUTCwgMSwgMSwgXFx1MDAyNnRtcCk7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXJ4X2NoZWNrc3VtID0gISEoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1JYQ1NVTSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChjaGFuZ2VkIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XFxuK1xcdFxcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZ0bXApO1xcbitcXHRcXHR0bXAgXj0gQVhfVkxBTl9DT05UUk9MX1ZGRTtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZ0bXApO1xcbitcXHRcXHRpZiAoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpIHtcXG4rXFx0XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyAyNTY7IGkrKykge1xcbitcXHRcXHRcXHRcXHR1MTYgdG1wMTY7XFxuK1xcdFxcdFxcdFxcdC8qIEFkZHJlc3MgKi9cXG4rXFx0XFx0XFx0XFx0dG1wID0gaTtcXG4rXFx0XFx0XFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgMSwgMSwgXFx1MDAyNnRtcCk7XFxuK1xcdFxcdFxcdFxcdC8qIERhdGEgKi9cXG4rXFx0XFx0XFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIDIsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdFxcdFxcdFxcdHRtcCA9IEFYX1ZMQU5fQ09OVFJPTF9XRTtcXG4rXFx0XFx0XFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgMSwgMSwgXFx1MDAyNnRtcCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoY2hhbmdlZCBcXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYKSB7XFxuK1xcdFxcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZ0bXApO1xcbitcXHRcXHR0bXAgXj0gQVhfVkxBTl9DT05UUk9MX1ZTTztcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZ0bXApO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtOTk1LDYgKzE0OTAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzlfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19ldGhfaW9jdGxcXHRcXHQ9IHVzYm5ldF9taWlfaW9jdGwsXFxuIFxcdC5uZG9fc2V0X3J4X21vZGVcXHQ9IGF4ODgxNzlfc2V0X211bHRpY2FzdCxcXG4gXFx0Lm5kb19zZXRfZmVhdHVyZXNcXHQ9IGF4ODgxNzlfc2V0X2ZlYXR1cmVzLFxcbitcXHQubmRvX3ZsYW5fcnhfYWRkX3ZpZFxcdD0gYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZCxcXG4rXFx0Lm5kb192bGFuX3J4X2tpbGxfdmlkXFx0PSBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZCxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGVja19lZXByb20oc3RydWN0IHVzYm5ldCAqZGV2KVxcbkBAIC0xMjkzLDYgKzE3OTAsMTcgQEAgc3RhdGljIGludCBheDg4MTc5X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gXFxuIFxcdGRldi1cXHUwMDNlZHJpdmVyX3ByaXYgPSBheDE3OV9kYXRhO1xcbiBcXG4rXFx0cmV0ID0gYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NISVBfU1RBVFVTLFxcbitcXHRcXHRcXHQgICAgICAgMSwgMSwgXFx1MDAyNmF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9ub2RldjtcXG4rXFxuK1xcdGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiA9IChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAyNiAweGYwKSBcXHUwMDNlXFx1MDAzZSA0O1xcbitcXHRheDE3OV9kYXRhLVxcdTAwM2Vpc19heDg4NzcyZCA9IDA7XFxuK1xcdGF4MTc5X2RhdGEtXFx1MDAzZWlwX2FsaWduID0gMTtcXG4rXFx0YXgxNzlfZGF0YS1cXHUwMDNlZWVwcm9tX3JlYWRfY21kID0gQVhfQUNDRVNTX0VFUFJPTTtcXG4rXFx0YXgxNzlfZGF0YS1cXHUwMDNlZWVwcm9tX2Jsb2NrID0gMjtcXG4rXFxuIFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNmF4ODgxNzlfbmV0ZGV2X29wcztcXG4gXFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNmF4ODgxNzlfZXRodG9vbF9vcHM7XFxuIFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSA4O1xcbkBAIC0xMzE3LDYgKzE4MjUsMTIwIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIFxcdGF4ODgxNzlfcmVzZXQoZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX25vZGV2OlxcbitcXHRrZnJlZShheDE3OV9kYXRhKTtcXG4rXFx0YXgxNzlfZGF0YSA9IE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGF4ODgxNzlhX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4re1xcbitcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBDaGVjayBpZiB2ZW5kb3IgY29uZmlndXJhdGlvbiAqL1xcbitcXHRpZiAodWRldi1cXHUwMDNlYWN0Y29uZmlnLVxcdTAwM2VkZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkge1xcbitcXHRcXHRuZXRkZXZfaW5mbyhkZXYtXFx1MDAzZW5ldCwgXFxcIlN3aXRjaGluZyB0byB2ZW5kb3IgbW9kZVxcXFxuXFxcIik7XFxuK1xcdFxcdHVzYl9kcml2ZXJfc2V0X2NvbmZpZ3VyYXRpb24odWRldiwgMSk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGF4MTc5X2RhdGEgPSBremFsbG9jX29iaigqYXgxNzlfZGF0YSk7XFxuK1xcdGlmICghYXgxNzlfZGF0YSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRkZXYtXFx1MDAzZWRyaXZlcl9wcml2ID0gYXgxNzlfZGF0YTtcXG4rXFxuK1xcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DSElQX1NUQVRVUyxcXG4rXFx0XFx0XFx0ICAgICAgIDEsIDEsIFxcdTAwMjZheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfbm9kZXY7XFxuK1xcbitcXHRheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gPSAoYXgxNzlfZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwMjYgMHhmMCkgXFx1MDAzZVxcdTAwM2UgNDtcXG4rXFx0YXgxNzlfZGF0YS1cXHUwMDNlaXNfYXg4ODc3MmQgPSAwO1xcbitcXHRpZiAoYXgxNzlfZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcXG4rXFx0XFx0aWYgKHVkZXYtXFx1MDAzZWRlc2NyaXB0b3IuYmNkRGV2aWNlID09IDB4MzAwKVxcbitcXHRcXHRcXHRheDE3OV9kYXRhLVxcdTAwM2Vpc19heDg4NzcyZCA9IDE7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgMzsgaSsrKSB7XFxuK1xcdFxcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9BQ0NFU1NfQkwsICgweEZEICsgaSksXFxuK1xcdFxcdFxcdFxcdCAgICAgICAxLCAxLCBcXHUwMDI2YXgxNzlfZGF0YS1cXHUwMDNlZndfdmVyc2lvbltpXSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRheDE3OV9kYXRhLVxcdTAwM2Vmd192ZXJzaW9uW2ldID0gMHhmZjtcXG4rXFx0fVxcbitcXHRuZXRkZXZfaW5mbyhkZXYtXFx1MDAzZW5ldCwgXFxcIkFYODgxNzlBLzI3OS83NzJEIENoaXAgVmVyc2lvbjogJXgsIEZXOiAlZC4lZC4lZC4lZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgIGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbixcXG4rXFx0XFx0ICAgIGF4MTc5X2RhdGEtXFx1MDAzZWZ3X3ZlcnNpb25bMF0sIGF4MTc5X2RhdGEtXFx1MDAzZWZ3X3ZlcnNpb25bMV0sXFxuK1xcdFxcdCAgICBheDE3OV9kYXRhLVxcdTAwM2Vmd192ZXJzaW9uWzJdLCBheDE3OV9kYXRhLVxcdTAwM2Vmd192ZXJzaW9uWzNdKTtcXG4rXFxuK1xcdC8qIFRoZSBBWDg4Mjc5IHJlcXVpcmVzIGJvdGggdGhlIEFYX1JYX0NUTF9JUEUgYW5kIEFYX1JYX0NUTF9EUk9QQ1JDRVJSXFxuK1xcdCAqIGJpdHMgc2V0IGluIEFYX1JYX0NUTCBmb3IgY3JlYXRpbmcgY29ycmVjdCBSWC1VUkJzLiBBWF9SWF9DVExfRFJPUENSQ0VSUlxcbitcXHQgKiBpcyBhbnl3YXkgc2V0IGZvciBhbGwgY2hpcHMsIG1ha2Ugc3VyZSBBWF9SWF9DVExfSVBFIGlzIHNldCB2aWEgaXBfYWxpZ24uXFxuK1xcdCAqIEFsc28gY29uZmlndXJlIGVlcHJvbSBhY2Nlc3MgcGFyYW1ldGVycy5cXG4rXFx0ICovXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XFxuK1xcdFxcdGF4MTc5X2RhdGEtXFx1MDAzZWlwX2FsaWduID0gMTtcXG4rXFx0XFx0YXgxNzlfZGF0YS1cXHUwMDNlZWVwcm9tX3JlYWRfY21kID0gQVg4ODE3OUFfRkxBU0hfUkVBRDtcXG4rXFx0XFx0YXgxNzlfZGF0YS1cXHUwMDNlZWVwcm9tX2Jsb2NrID0gMjU2O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRheDE3OV9kYXRhLVxcdTAwM2VpcF9hbGlnbiA9IDA7XFxuK1xcdFxcdGF4MTc5X2RhdGEtXFx1MDAzZWVlcHJvbV9yZWFkX2NtZCA9IEFYX0FDQ0VTU19FRlVTO1xcbitcXHRcXHRheDE3OV9kYXRhLVxcdTAwM2VlZXByb21fYmxvY2sgPSAyMDtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2YXg4ODE3OV9uZXRkZXZfb3BzO1xcbitcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2YXg4ODE3OV9ldGh0b29sX29wcztcXG4rXFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDg7XFxuK1xcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VuZWVkZWRfdGFpbHJvb20gPSA4O1xcbitcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xcbitcXHRkZXYtXFx1MDAzZWhhcmRfbXR1ID0gOSAqIDEwMjQ7XFxuK1xcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtYXhfbXR1ID0gZGV2LVxcdTAwM2VoYXJkX210dSAtIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIE1JSSBzdHJ1Y3R1cmUgKi9cXG4rXFx0ZGV2LVxcdTAwM2VtaWkuZGV2ID0gZGV2LVxcdTAwM2VuZXQ7XFxuK1xcdGRldi1cXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGF4ODgxNzlfbWRpb19yZWFkO1xcbitcXHRkZXYtXFx1MDAzZW1paS5tZGlvX3dyaXRlID0gYXg4ODE3OV9tZGlvX3dyaXRlO1xcbitcXHRkZXYtXFx1MDAzZW1paS5waHlfaWRfbWFzayA9IDB4ZmY7XFxuK1xcdGRldi1cXHUwMDNlbWlpLnJlZ19udW1fbWFzayA9IDB4ZmY7XFxuK1xcdGRldi1cXHUwMDNlbWlpLnBoeV9pZCA9IDB4MDM7XFxuK1xcdGlmICghYXgxNzlfZGF0YS1cXHUwMDNlaXNfYXg4ODc3MmQpXFxuK1xcdFxcdGRldi1cXHUwMDNlbWlpLnN1cHBvcnRzX2dtaWkgPSAxO1xcbitcXG4rXFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxcbitcXHRcXHRcXHQgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU08gfFxcbitcXHRcXHRcXHQgICAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHxcXG4rXFx0XFx0XFx0ICAgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xcbitcXG4rXFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IGRldi1cXHUwMDNlbmV0LVxcdTAwM2VmZWF0dXJlcztcXG4rXFxuK1xcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2V2bGFuX2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8XFxuK1xcdFxcdFxcdFxcdCAgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfVFNPO1xcbitcXG4rXFx0bmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShkZXYtXFx1MDAzZW5ldCwgMTYzODQpO1xcbitcXG4rXFx0LyogRW5hYmxlIFRyYW5zbWlzc2lvbiBvZiBMaW5rIFNwZWVkIGJ5dGUgaW4gaW50ZXJydXB0IFVSQiAqL1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0ZXX01PREUsIEFYX0ZXX01PREVfMTc5QSwgMCwgMCwgTlVMTCk7XFxuK1xcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfUkVMT0FEX0VFUFJPTV9FRlVTRSwgMCwgMCwgMCwgTlVMTCk7XFxuK1xcbitcXHQvKiBSZWFkIE1BQyBhZGRyZXNzIGZyb20gRFRCIG9yIEFTSVggY2hpcCAqL1xcbitcXHRheDg4MTc5X2dldF9tYWNfYWRkcihkZXYpO1xcbitcXHRtZW1jcHkoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXBlcm1fYWRkciwgZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9ub2RldjpcXG4rXFx0a2ZyZWUoYXgxNzlfZGF0YSk7XFxuK1xcdGF4MTc5X2RhdGEgPSBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYXg4ODE3OV91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5AQCAtMTMzOCw2ICsxOTYwLDIyIEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIFxcdGtmcmVlKGF4MTc5X2RhdGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBheDg4MTc5YV91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4re1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFx0dTE2IHRtcDE2O1xcbitcXHR1OCB0bXA4O1xcbitcXG4rXFx0LyogQ29uZmlndXJlIFJYIGNvbnRyb2wgcmVnaXN0ZXIgPVxcdTAwM2Ugc3RvcCBvcGVyYXRpb24gKi9cXG4rXFx0dG1wMTYgPSBBWF9SWF9DVExfU1RPUDtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcbitcXHR0bXA4ID0gMDtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFxuK1xcdGtmcmVlKGF4MTc5X2RhdGEpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZFxcbiBheDg4MTc5X3J4X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqcGt0X2hkcilcXG4ge1xcbkBAIC0xMzU0LDYgKzE5OTIsMjEgQEAgYXg4ODE3OV9yeF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKnBrdF9oZHIpXFxuIFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGF4ODgxNzlhX3J4X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBwa3RfZGVzYylcXG4re1xcbitcXHR1MzIgcGt0X3R5cGU7XFxuK1xcbitcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XFxuK1xcdC8qIGNoZWNrc3VtIGVycm9yIGJpdCBpcyBzZXQgKi9cXG4rXFx0aWYgKHBrdF9kZXNjIFxcdTAwMjYgQVgxNzlBX1JYX1BEX0w0X0VSUiB8fCBwa3RfZGVzYyBcXHUwMDI2IEFYMTc5QV9SWF9QRF9MM19FUlIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBrdF90eXBlID0gcGt0X2Rlc2MgXFx1MDAyNiBBWDE3OUFfUlhfUERfTDRfVFlQRV9NQVNLO1xcbitcXHQvKiBJdCBtdXN0IGJlIGEgVENQIG9yIFVEUCBwYWNrZXQgd2l0aCBhIHZhbGlkIGNoZWNrc3VtICovXFxuK1xcdGlmIChwa3RfdHlwZSA9PSBBWDE3OUFfUlhfUERfTDRfVENQIHx8IHBrdF90eXBlID09IEFYMTc5QV9SWF9QRF9MNF9VRFApXFxuK1xcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKmF4X3NrYjtcXG5AQCAtMTQ3Miw2ICsyMTI1LDEyMSBAQCBzdGF0aWMgaW50IGF4ODgxNzlfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBheDg4MTc5YV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuK1xcdHN0cnVjdCBza19idWZmICpheF9za2I7XFxuK1xcdHUzMiBoZHJfb2ZmLCBwa3RfZW5kO1xcbitcXHR1NjQgKnBrdF9kZXNjX3B0cjtcXG4rXFx0dTE2IHZsYW5fdGFnO1xcbitcXHR1MTYgcGt0X2NudDtcXG4rXFx0dTY0IHJ4X2hkcjtcXG4rXFxuK1xcdC8qIFNLQiBjb250ZW50cyBmb3IgQVgxNzlBLWJhc2VkIGNoaXBzOlxcbitcXHQgKiAgIFxcdTAwM2NwYWNrZXQgMVxcdTAwM2VcXG4rXFx0ICogICAuLi5cXG4rXFx0ICogICBcXHUwMDNjcGFja2V0IE5cXHUwMDNlXFxuK1xcdCAqICAgXFx1MDAzY3Blci1wYWNrZXQgbWV0YWRhdGEgZW50cnkgMVxcdTAwM2VcXG4rXFx0ICogICAuLi5cXG4rXFx0ICogICBcXHUwMDNjcGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSBOXFx1MDAzZVxcbitcXHQgKiAgIFxcdTAwM2NyeF9oZHJcXHUwMDNlXFxuK1xcdCAqXFxuK1xcdCAqIHdoZXJlOlxcbitcXHQgKiAgIFxcdTAwM2NwYWNrZXQgTlxcdTAwM2UgY29udGFpbnMgcGt0X2xlbiBkYXRhIGJ5dGVzIGFuZCBwYWRkaW5nOlxcbitcXHQgKlxcdFxcdDIgYnl0ZXMgb2YgSVAgYWxpZ25tZW50IChvcHRpb25hbCwgZGVwZW5kcyBvbiBBWF9SWF9DVExfSVBFIGZsYWcpXFxuK1xcdCAqXFx0XFx0cGFja2V0IGRhdGEgcmVjZWl2ZWRcXG4rXFx0ICpcXHRcXHRvcHRpb25hbCBwYWRkaW5nIHRvIDgtYnl0ZXMgYm91bmRhcnlcXG4rXFx0ICogICBcXHUwMDNjcGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSBOXFx1MDAzZSBjb250YWlucyA4IGJ5dGVzOlxcbitcXHQgKlxcdFxcdHBrdF9sZW4gYW5kIGZpZWxkcyBBWF9SWEhEUl8qXFxuK1xcdCAqICAgXFx1MDAzY3J4LWhkclxcdTAwM2VcXHRjb250YWlucyA4IGJ5dGVzOlxcbitcXHQgKlxcdFxcdHBrdF9jbnQgYW5kIGhkcl9vZmYgKG9mZnNldCBvZiBcXHUwMDNjcGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSAxXFx1MDAzZSlcXG4rXFx0ICpcXG4rXFx0ICogcGt0X2NudCBpcyBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgcGVyLXBhY2tldCBtZXRhZGF0YSBhcnJheS5cXG4rXFx0ICovXFxuK1xcbitcXHRpZiAoIXNrYiB8fCBza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZihyeF9oZHIpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdC8qIFJYIERlc2NyaXB0b3IgSGVhZGVyICovXFxuK1xcdHNrYl90cmltKHNrYiwgc2tiLVxcdTAwM2VsZW4gLSBzaXplb2YocnhfaGRyKSk7XFxuK1xcdHJ4X2hkciA9IGxlNjRfdG9fY3B1cCgodTY0ICopc2tiX3RhaWxfcG9pbnRlcihza2IpKTtcXG4rXFxuK1xcdC8qIENoZWNrIHRoZXNlIHBhY2tldHMgKi9cXG4rXFx0aGRyX29mZiA9IChyeF9oZHIgXFx1MDAyNiBBWDE3OUFfUlhfREhfREVTQ19PRkZTRVRfTUFTSykgXFx1MDAzZVxcdTAwM2UgQVgxNzlBX1JYX0RIX0RFU0NfT0ZGU0VUX1NISUZUO1xcbitcXHRwa3RfY250ID0gcnhfaGRyIFxcdTAwMjYgQVgxNzlBX1JYX0RIX1BLVF9DTlRfTUFTSztcXG4rXFxuK1xcdC8qIENvbnNpc3RlbmN5IGNoZWNrIGhlYWRlciBwb3NpdGlvbiAqL1xcbitcXHRpZiAoaGRyX29mZiAhPSBza2ItXFx1MDAzZWxlbiAtIChwa3RfY250ICogc2l6ZW9mKHJ4X2hkcikpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBib3VuZHMgb2YgdGhlIG1ldGFkYXRhIGFycmF5IGFyZSBpbnNpZGUgdGhlIFNLQlxcbitcXHQgKiAoYW5kIGluIGZyb250IG9mIHRoZSBjb3VudGVyIGF0IHRoZSBlbmQpLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBrdF9jbnQgKiA4ICsgaGRyX29mZiBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdC8qIFBhY2tldHMgbXVzdCBub3Qgb3ZlcmxhcCB0aGUgbWV0YWRhdGEgYXJyYXkgKi9cXG4rXFx0c2tiX3RyaW0oc2tiLCBoZHJfb2ZmKTtcXG4rXFxuK1xcdGlmICghcGt0X2NudClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHQvKiBHZXQgdGhlIGZpcnN0IFJYIHBhY2tldCBkZXNjcmlwdG9yICovXFxuK1xcdHBrdF9kZXNjX3B0ciA9ICh1NjQgKikoc2tiLVxcdTAwM2VkYXRhICsgaGRyX29mZik7XFxuK1xcbitcXHRwa3RfZW5kID0gMDtcXG4rXFx0d2hpbGUgKHBrdF9jbnQtLSkge1xcbitcXHRcXHR1NjQgcGt0X2Rlc2MgPSBsZTY0X3RvX2NwdXAocGt0X2Rlc2NfcHRyKTtcXG4rXFx0XFx0dTMyIHBrdF9sZW5fcGx1c19wYWRkO1xcbitcXHRcXHR1MzIgcGt0X2xlbjtcXG4rXFxuK1xcdFxcdHBrdF9sZW4gPSAodTMyKSgocGt0X2Rlc2MgXFx1MDAyNiBBWDE3OUFfUlhfUERfTEVOX01BU0spIFxcdTAwM2VcXHUwMDNlIEFYMTc5QV9SWF9QRF9MRU5fU0hJRlQpXFxuK1xcdFxcdFxcdCAgLSAoYXgxNzlfZGF0YS1cXHUwMDNlaXBfYWxpZ24gPyAyIDogMCk7XFxuK1xcdFxcdHBrdF9sZW5fcGx1c19wYWRkID0gKChwa3RfbGVuICsgNyArIChheDE3OV9kYXRhLVxcdTAwM2VpcF9hbGlnbiA/IDIgOiAwKSkgXFx1MDAyNiAweDdGRkY4KTtcXG4rXFxuK1xcdFxcdHBrdF9lbmQgKz0gcGt0X2xlbl9wbHVzX3BhZGQ7XFxuK1xcdFxcdGlmIChwa3RfZW5kIFxcdTAwM2UgaGRyX29mZiB8fCAocGt0X2NudCA9PSAwIFxcdTAwMjZcXHUwMDI2IHBrdF9lbmQgIT0gaGRyX29mZikpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0XFx0aWYgKHBrdF9kZXNjIFxcdTAwMjYgQVgxNzlBX1JYX1BEX0RST1AgfHwgIShwa3RfZGVzYyBcXHUwMDI2IEFYMTc5QV9SWF9QRF9SWF9PSykgfHxcXG4rXFx0XFx0ICAgIHBrdF9sZW4gXFx1MDAzZSAoZGV2LVxcdTAwM2VoYXJkX210dSArIEFYMTc5QV9SWF9IV19QQUQpKSB7XFxuK1xcdFxcdFxcdHNrYl9wdWxsKHNrYiwgcGt0X2xlbl9wbHVzX3BhZGQpO1xcbitcXG4rXFx0XFx0XFx0LyogTmV4dCBSWCBQYWNrZXQgRGVzY3JpcHRvciAqL1xcbitcXHRcXHRcXHRwa3RfZGVzY19wdHIrKztcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGF4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LVxcdTAwM2VuZXQsIHBrdF9sZW4pO1xcbitcXHRcXHRpZiAoIWF4X3NrYilcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRcXHRza2JfcHV0KGF4X3NrYiwgcGt0X2xlbik7XFxuK1xcdFxcdG1lbWNweShheF9za2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlZGF0YSArIChheDE3OV9kYXRhLVxcdTAwM2VpcF9hbGlnbiA/IEFYMTc5QV9SWF9IV19QQUQgOiAwKSxcXG4rXFx0XFx0ICAgICAgIHBrdF9sZW4pO1xcbitcXG4rXFx0XFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZXJ4X2NoZWNrc3VtKVxcbitcXHRcXHRcXHRheDg4MTc5YV9yeF9jaGVja3N1bShheF9za2IsIHBrdF9kZXNjKTtcXG4rXFxuK1xcdFxcdGlmIChwa3RfZGVzYyBcXHUwMDI2IEFYMTc5QV9SWF9QRF9WTEFOKSB7XFxuK1xcdFxcdFxcdHZsYW5fdGFnID0gcGt0X2Rlc2MgXFx1MDAzZVxcdTAwM2UgQVgxNzlBX1JYX1BEX1ZMQU5fU0hJRlQ7XFxuK1xcdFxcdFxcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoYXhfc2tiLCBodG9ucyhFVEhfUF84MDIxUSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB2bGFuX3RhZyBcXHUwMDI2IFZMQU5fVklEX01BU0spO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIGF4X3NrYik7XFxuK1xcdFxcdHNrYl9wdWxsKHNrYiwgcGt0X2xlbl9wbHVzX3BhZGQpO1xcbitcXG4rXFx0XFx0LyogTmV4dCBSWCBQYWNrZXQgSGVhZGVyICovXFxuK1xcdFxcdHBrdF9kZXNjX3B0cisrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4rXFxuK2VycjpcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxuIGF4ODgxNzlfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBmbGFncylcXG4ge1xcbkBAIC0xNTA1LDYgKzIyNzMsNTkgQEAgYXg4ODE3OV90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGZsYWdzKVxcbiBcXHRyZXR1cm4gc2tiO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbitheDg4MTc5YV90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGZsYWdzKVxcbit7XFxuK1xcdHU2NCB0eF9kZXNjID0gc2tiLVxcdTAwM2VsZW4gXFx1MDAyNiBBWDE3OUFfVFhfREVTQ19MRU5fTUFTSztcXG4rXFx0aW50IGZyYW1lX3NpemUgPSBkZXYtXFx1MDAzZW1heHBhY2tldDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKmF4X3NrYjtcXG4rXFx0dTY0ICp0eF9kZXNjX3B0cjtcXG4rXFx0aW50IHBhZGRpbmdfc2l6ZTtcXG4rXFx0aW50IGhlYWRyb29tO1xcbitcXHRpbnQgdGFpbHJvb207XFxuK1xcdHUxNiB0Y2kgPSAwO1xcbitcXG4rXFx0LyogVFNPIE1TUyAqL1xcbitcXHR0eF9kZXNjIHw9ICgodTY0KShza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb19zaXplIFxcdTAwMjYgQVgxNzlBX1RYX0RFU0NfTVNTX01BU0spKSBcXHUwMDNjXFx1MDAzY1xcbitcXHRcXHQgICBBWDE3OUFfVFhfREVTQ19NU1NfU0hJRlQ7XFxuK1xcbitcXHRoZWFkcm9vbSA9IChza2ItXFx1MDAzZWxlbiArIHNpemVvZih0eF9kZXNjKSkgJSA4O1xcbitcXHRwYWRkaW5nX3NpemUgPSBoZWFkcm9vbSA/IDggLSBoZWFkcm9vbSA6IDA7XFxuK1xcbitcXHRpZiAoKChza2ItXFx1MDAzZWxlbiArIHNpemVvZih0eF9kZXNjKSArIHBhZGRpbmdfc2l6ZSkgJSBmcmFtZV9zaXplKSA9PSAwKSB7XFxuK1xcdFxcdHBhZGRpbmdfc2l6ZSArPSA4O1xcbitcXHRcXHR0eF9kZXNjIHw9IEFYMTc5QV9UWF9ERVNDX0RST1BfUEFERDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKChkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCkgXFx1MDAyNlxcdTAwMjYgKHZsYW5fZ2V0X3RhZyhza2IsIFxcdTAwMjZ0Y2kpIFxcdTAwM2U9IDApKSB7XFxuK1xcdFxcdHR4X2Rlc2MgfD0gQVgxNzlBX1RYX0RFU0NfVkxBTjtcXG4rXFx0XFx0dHhfZGVzYyB8PSAoKHU2NCl0Y2kgXFx1MDAyNiBBWDE3OUFfVFhfREVTQ19WTEFOX01BU0spIFxcdTAwM2NcXHUwMDNjIEFYMTc5QV9UWF9ERVNDX1ZMQU5fU0hJRlQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VjYW5fZG1hX3NnIFxcdTAwMjZcXHUwMDI2IChkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1NHKSBcXHUwMDI2XFx1MDAyNiBza2JfbGluZWFyaXplKHNrYikpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0aGVhZHJvb20gPSBza2JfaGVhZHJvb20oc2tiKTtcXG4rXFx0dGFpbHJvb20gPSBza2JfdGFpbHJvb20oc2tiKTtcXG4rXFxuK1xcdGlmICghKGhlYWRyb29tIFxcdTAwM2U9IHNpemVvZih0eF9kZXNjKSBcXHUwMDI2XFx1MDAyNiB0YWlscm9vbSBcXHUwMDNlPSBwYWRkaW5nX3NpemUpKSB7XFxuK1xcdFxcdGF4X3NrYiA9IHNrYl9jb3B5X2V4cGFuZChza2IsIHNpemVvZih0eF9kZXNjKSwgcGFkZGluZ19zaXplLCBmbGFncyk7XFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdFxcdHNrYiA9IGF4X3NrYjtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcdGlmIChwYWRkaW5nX3NpemUgIT0gMClcXG4rXFx0XFx0c2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZ19zaXplKTtcXG4rXFx0LyogQ29weSBUWCBoZWFkZXIgKi9cXG4rXFx0dHhfZGVzY19wdHIgPSBza2JfcHVzaChza2IsIHNpemVvZih0eF9kZXNjKSk7XFxuK1xcdCp0eF9kZXNjX3B0ciA9IGNwdV90b19sZTY0KHR4X2Rlc2MpO1xcbitcXG4rXFx0dXNibmV0X3NldF9za2JfdHhfc3RhdHMoc2tiLCAxLCAwKTtcXG4rXFxuK1xcdHJldHVybiBza2I7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG5AQCAtMTU4MCw3MyArMjQwMSwzNDMgQEAgc3RhdGljIGludCBheDg4MTc5X2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYXg4ODE3OWFfYnVsa2luX2NvbmZpZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGxpbmtfc3RzKVxcbit7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbitcXHRjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzICpidWxraW5fZGF0YTtcXG4rXFx0aW50IGluZGV4ID0gMDtcXG4rXFxuK1xcdHN3aXRjaCAoYXgxNzlfZGF0YS1cXHUwMDNlc3BlZWQpIHtcXG4rXFx0Y2FzZSBFVEhFUl9MSU5LXzI1MDA6XFx0LyogQVg4ODI3OSBvbmx5ICovXFxuK1xcdFxcdGluZGV4ID0gMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEVUSEVSX0xJTktfMTAwMDpcXHQvKiBBWDg4Mjc5IFxcdTAwMjYgQVg4ODE3OEEgKi9cXG4rXFx0XFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcXG4rXFx0XFx0XFx0aWYgKGxpbmtfc3RzIFxcdTAwMjYgQVhfVVNCX1NTKVxcbitcXHRcXHRcXHRcXHRpbmRleCA9IDE7XFxuK1xcdFxcdFxcdGVsc2UgaWYgKGxpbmtfc3RzIFxcdTAwMjYgQVhfVVNCX0hTKVxcbitcXHRcXHRcXHRcXHRpbmRleCA9IDI7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGlmIChsaW5rX3N0cyBcXHUwMDI2IEFYX1VTQl9TUylcXG4rXFx0XFx0XFx0XFx0aW5kZXggPSAwO1xcbitcXHRcXHRcXHRlbHNlIGlmIChsaW5rX3N0cyBcXHUwMDI2IEFYX1VTQl9IUylcXG4rXFx0XFx0XFx0XFx0aW5kZXggPSAxO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBFVEhFUl9MSU5LXzEwMDpcXG4rXFx0XFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcXG4rXFx0XFx0XFx0aWYgKGxpbmtfc3RzIFxcdTAwMjYgQVhfVVNCX1NTKVxcbitcXHRcXHRcXHRcXHRpbmRleCA9IDM7XFxuK1xcdFxcdFxcdGVsc2UgaWYgKGxpbmtfc3RzIFxcdTAwMjYgQVhfVVNCX0hTKVxcbitcXHRcXHRcXHRcXHRpbmRleCA9IDU7XFxuK1xcdFxcdFxcdGlmICghYXgxNzlfZGF0YS1cXHUwMDNlZnVsbF9kdXBsZXgpXFxuK1xcdFxcdFxcdFxcdGluZGV4Kys7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qIEFYODgyNzlBIFxcdTAwMjYgQVg4ODI3N0QgKi9cXG4rXFx0XFx0XFx0aWYgKGxpbmtfc3RzIFxcdTAwMjYgQVhfVVNCX1NTKVxcbitcXHRcXHRcXHRcXHRpbmRleCA9IDI7XFxuK1xcdFxcdFxcdGVsc2UgaWYgKGxpbmtfc3RzIFxcdTAwMjYgQVhfVVNCX0hTKVxcbitcXHRcXHRcXHRcXHRpbmRleCA9IDQ7XFxuK1xcdFxcdFxcdGlmICghYXgxNzlfZGF0YS1cXHUwMDNlZnVsbF9kdXBsZXgpXFxuK1xcdFxcdFxcdFxcdGluZGV4Kys7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEVUSEVSX0xJTktfMTA6XFxuK1xcdFxcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KVxcbitcXHRcXHRcXHRpbmRleCA9IDc7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aW5kZXggPSA2O1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGRlZmF1bHQ6XFx0LyogTm8gbGluayAqL1xcbitcXHRcXHRpbmRleCA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5IFxcdTAwMjZcXHUwMDI2IChsaW5rX3N0cyBcXHUwMDI2IEFYX1VTQl9GUykpXFxuK1xcdFxcdGluZGV4ID0gNztcXG4rXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XFxuK1xcdFxcdGJ1bGtpbl9kYXRhID0gQVg4ODI3OV9CVUxLSU5fU0laRTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWlzX2F4ODg3NzJkKVxcbitcXHRcXHRcXHRidWxraW5fZGF0YSA9IEFYODg3NzJEX0JVTEtJTl9TSVpFO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGJ1bGtpbl9kYXRhID0gQVg4ODE3OUFfQlVMS0lOX1NJWkU7XFxuK1xcdH1cXG4rXFxuK1xcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQlVMS0lOX1FDVFJMLCA1LCA1LCBcXHUwMDI2YnVsa2luX2RhdGFbaW5kZXhdKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBheDg4MTc5YV9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFx0dTggdG1wOCwgbGlua19zdHMsIHJlZzhbM107XFxuK1xcdHUxNiB0bXAxNiwgbW9kZSwgc3BlZWQ7XFxuK1xcbitcXHRpZiAoIWF4MTc5X2RhdGEtXFx1MDAzZWxpbmspIHtcXG4rXFx0XFx0bmV0ZGV2X2luZm8oZGV2LVxcdTAwM2VuZXQsIFxcXCJheDg4MTc5YSAtIExpbmsgc3RhdHVzIGlzOiAwXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0b3AgUlgvVFggZm9yIGxpbmsgY29uZmlndXJhdGlvbiAqL1xcbitcXHR0bXAxNiA9IEFYX1JYX0NUTF9TVE9QO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXFx1MDAyNnRtcDE2KTtcXG4rXFx0dG1wOCA9IDA7XFxuK1xcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1BBVEgsIDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFxuK1xcdHRtcDggPSAweGE1O1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19DRENfREVMQVlfVFgsIDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFxuK1xcdHRtcDE2ID0gMHgwNDEwO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMiwgMiwgXFx1MDAyNnRtcDE2KTtcXG4rXFxuK1xcdHRtcDggPSAwO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX0VUSF9UWF9HQVAsIDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFxuK1xcdHRtcDggPSAweDA3O1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX0VQNV9FSFIsIDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFxuK1xcdHRtcDggPSAweDI4IHwgQVhfTkVXX1BBVVNFX0VOO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX05FV19QQVVTRV9DVFJMLCAxLCAxLCBcXHUwMDI2dG1wOCk7XFxuK1xcbitcXHRtb2RlID0gQVhfTUVESVVNX1JFQ0VJVkVfRU4gfCBBWF9NRURJVU1fVFhGTE9XX0NUUkxFTiB8IEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOO1xcbitcXG4rXFx0LyogTGluayBpcyB1cCwgYnV0IHNvbWUgb2xkZXIgQVg4ODE3OUEgRlcgdmVyc2lvbnMgZG8gbm90IHNlbmQgbGluayBzcGVlZFxcbitcXHQgKiBhbmQgZHVwbGV4IHN0YXR1cyBpbiBpbnRlcnJ1cHQgVVJCLCBzbyByZWFkIGl0IHZpYSBNSUlcXG4rXFx0ICovXFxuK1xcdGlmICghYXgxNzlfZGF0YS1cXHUwMDNlc3BlZWQpIHtcXG4rXFx0XFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xcbitcXG4rXFx0XFx0bWlpX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKFxcdTAwMjZkZXYtXFx1MDAzZW1paSwgXFx1MDAyNmNtZCk7XFxuK1xcdFxcdGF4MTc5X2RhdGEtXFx1MDAzZWZ1bGxfZHVwbGV4ID0gY21kLmJhc2UuZHVwbGV4O1xcbitcXHRcXHRzd2l0Y2ggKGNtZC5iYXNlLnNwZWVkKSB7XFxuK1xcdFxcdGNhc2UgU1BFRURfMTAwMDpcXG4rXFx0XFx0XFx0YXgxNzlfZGF0YS1cXHUwMDNlc3BlZWQgPSBFVEhFUl9MSU5LXzEwMDA7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFNQRUVEXzEwMDpcXG4rXFx0XFx0XFx0YXgxNzlfZGF0YS1cXHUwMDNlc3BlZWQgPSBFVEhFUl9MSU5LXzEwMDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgU1BFRURfMTA6XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGF4MTc5X2RhdGEtXFx1MDAzZXNwZWVkID0gRVRIRVJfTElOS18xMDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH07XFxuK1xcdH1cXG4rXFxuK1xcdHNwZWVkID0gMDtcXG4rXFx0c3dpdGNoIChheDE3OV9kYXRhLVxcdTAwM2VzcGVlZCkge1xcbitcXHRjYXNlIEVUSEVSX0xJTktfMjUwMDpcXG4rXFx0XFx0cmVnOFswXSA9IDB4MDA7XFxuK1xcdFxcdHJlZzhbMV0gPSAweEY4O1xcbitcXHRcXHRyZWc4WzJdID0gMHgwNztcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfVFhfUEFVU0UsIDMsIDMsIHJlZzgpO1xcbitcXG4rXFx0XFx0cmVnOFswXSA9IDB4Nzg7XFxuK1xcdFxcdHJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyBcXHUwMDNjXFx1MDAzYyA1KTtcXG4rXFx0XFx0cmVnOFsyXSA9IDA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DREMsIDMsIDMsIHJlZzgpO1xcbitcXG4rXFx0XFx0cmVnOFswXSA9IDB4NDA7XFxuK1xcdFxcdHJlZzhbMV0gPSBBWF9NQUNfTUlRRkZDVFJMX0ZPUk1BVCB8IEFYX01BQ19NSVFGRkNUUkxfRFJPUF9DUkMgfCBBWF9NQUNfTFNPX0VSUl9FTjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfREFUQV9DRENfQ05ULCAyLCAyLCByZWc4KTtcXG4rXFxuK1xcdFxcdHRtcDggPSBBWF9YR01JSV9FTjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9CRk1fREFUQSwgMSwgMSwgXFx1MDAyNnRtcDgpO1xcbitcXG4rXFx0XFx0dG1wOCA9IDB4MUMgfCBBWF9MU09fRU5IQU5DRV9FTjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfTFNPX0VOSEFOQ0VfQ1RSTCwgMSwgMSwgXFx1MDAyNnRtcDgpO1xcbitcXG4rXFx0XFx0bW9kZSB8PSBBWF9NRURJVU1fR0lHQU1PREUgfCBBWF9NRURJVU1fRlVMTF9EVVBMRVg7XFxuK1xcbitcXHRcXHRzcGVlZCA9IDI1MDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBFVEhFUl9MSU5LXzEwMDA6XFxuK1xcdFxcdG1vZGUgfD0gQVhfTUVESVVNX0dJR0FNT0RFO1xcbitcXHRcXHRzcGVlZCA9IDEwMDA7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXG4rXFx0Y2FzZSBFVEhFUl9MSU5LXzEwMDpcXG4rXFx0XFx0cmVnOFswXSA9IDB4Nzg7XFxuK1xcdFxcdHJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyBcXHUwMDNjXFx1MDAzYyA1KSB8IEFYX0dNSUlfQ1JDX0FQUEVORDtcXG4rXFx0XFx0cmVnOFsyXSA9IDA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DREMsIDMsIDMsIHJlZzgpO1xcbitcXG4rXFx0XFx0dG1wOCA9IDB4NDA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMSwgMSwgXFx1MDAyNnRtcDgpO1xcbitcXG4rXFx0XFx0c3BlZWQgPSBzcGVlZCA/IHNwZWVkIDogMTAwO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgRVRIRVJfTElOS18xMDpcXG4rXFx0XFx0cmVnOFswXSA9IDB4RkE7XFxuK1xcdFxcdHJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyBcXHUwMDNjXFx1MDAzYyA1KSB8IEFYX0dNSUlfQ1JDX0FQUEVORDtcXG4rXFx0XFx0cmVnOFsyXSA9IDB4RkY7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DREMsIDMsIDMsIHJlZzgpO1xcbitcXG4rXFx0XFx0dG1wOCA9IDB4RkE7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMSwgMSwgXFx1MDAyNnRtcDgpO1xcbitcXG4rXFx0XFx0c3BlZWQgPSAxMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBQSFlTSUNBTF9MSU5LX1NUQVRVUywgMSwgMSwgXFx1MDAyNmxpbmtfc3RzKTtcXG4rXFx0YXg4ODE3OWFfYnVsa2luX2NvbmZpZyhkZXYsIGxpbmtfc3RzKTtcXG4rXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgyNzkpIHtcXG4rXFx0XFx0dG1wOCA9IDA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfQkZNX0RBVEEsIDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWZ1bGxfZHVwbGV4KVxcbitcXHRcXHRtb2RlIHw9IEFYX01FRElVTV9GVUxMX0RVUExFWDtcXG4rXFxuK1xcdGlmIChkZXYtXFx1MDAzZW5ldC1cXHUwMDNlbXR1IFxcdTAwM2UgMTUwMClcXG4rXFx0XFx0bW9kZSB8PSBBWF9NRURJVU1fSlVNQk9fRU47XFxuK1xcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcXHUwMDI2bW9kZSk7XFxuK1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXFx1MDAyNmF4MTc5X2RhdGEtXFx1MDAzZXJ4Y3RsKTtcXG4rXFxuK1xcdHRtcDggPSBBWF9NQUNfUlhfUEFUSF9SRUFEWSB8IEFYX01BQ19UWF9QQVRIX1JFQURZO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19QQVRILCAxLCAxLCBcXHUwMDI2dG1wOCk7XFxuK1xcbitcXHRheDE3OV9kYXRhLVxcdTAwM2VlZWVfZW5hYmxlZCA9IGF4ODgxNzlfY2hrX2VlZShkZXYpO1xcbitcXG4rXFx0bmV0aWZfY2Fycmllcl9vbihkZXYtXFx1MDAzZW5ldCk7XFxuK1xcbitcXHRuZXRkZXZfaW5mbyhkZXYtXFx1MDAzZW5ldCwgXFxcImF4ODgxNzlhIC0gTGluayBzdGF0dXMgaXM6IDEsIExpbmsgc3BlZWQ6ICVkLCBEdXBsZXg6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgc3BlZWQsIGF4MTc5X2RhdGEtXFx1MDAzZWZ1bGxfZHVwbGV4KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGF4ODgxNzlfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbiB7XFxuLVxcdHU4IGJ1Zls1XTtcXG4tXFx0dTE2ICp0bXAxNjtcXG4tXFx0dTggKnRtcDtcXG4gXFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuIFxcdHN0cnVjdCBldGh0b29sX2tlZWUgZWVlX2RhdGE7XFxuK1xcdHUxNiAqdG1wMTY7XFxuK1xcdHU4IGJ1Zls1XTtcXG4rXFx0dTggKnRtcDtcXG4gXFxuIFxcdHRtcDE2ID0gKHUxNiAqKWJ1ZjtcXG4gXFx0dG1wID0gKHU4ICopYnVmO1xcbiBcXG4gXFx0LyogUG93ZXIgdXAgZXRoZXJuZXQgUEhZICovXFxuLVxcdCp0bXAxNiA9IDA7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEhZUFdSX1JTVENUTCwgMiwgMiwgdG1wMTYpO1xcbitcXHRpZiAoYXgxNzlfZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xcbitcXHRcXHQqdG1wMTYgPSAwO1xcbitcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsIDIsIDIsIHRtcDE2KTtcXG4gXFxuLVxcdCp0bXAxNiA9IEFYX1BIWVBXUl9SU1RDVExfSVBSTDtcXG4tXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLCAyLCAyLCB0bXAxNik7XFxuLVxcdG1zbGVlcCg1MDApO1xcbitcXHRcXHQqdG1wMTYgPSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEhZUFdSX1JTVENUTCwgMiwgMiwgdG1wMTYpO1xcbitcXHRcXHRtc2xlZXAoNTAwKTtcXG4gXFxuLVxcdCp0bXAgPSBBWF9DTEtfU0VMRUNUX0FDUyB8IEFYX0NMS19TRUxFQ1RfQkNTO1xcbi1cXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NMS19TRUxFQ1QsIDEsIDEsIHRtcCk7XFxuLVxcdG1zbGVlcCgyMDApO1xcbitcXHRcXHQqdG1wID0gQVhfQ0xLX1NFTEVDVF9BQ1MgfCBBWF9DTEtfU0VMRUNUX0JDUztcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DTEtfU0VMRUNULCAxLCAxLCB0bXApO1xcbitcXHRcXHRtc2xlZXAoMjAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0KnRtcCA9IEFYX1BIWV9QT1dFUjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIHRtcCk7XFxuK1xcdFxcdG1zbGVlcCgyNTApO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoYXgxNzlfZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xcbitcXHRcXHQqdG1wMTYgPSBheDg4MTc5X21kaW9fcmVhZChkZXYtXFx1MDAzZW5ldCwgZGV2LVxcdTAwM2VtaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTtcXG4rXFx0XFx0KnRtcDE2IFxcdTAwMjY9IH4oQURWRVJUSVNFXzEwRlVMTCB8IEFEVkVSVElTRV8xMEhBTEYpO1xcbitcXHRcXHQqdG1wMTYgfD0gQURWRVJUSVNFX1JFU1Y7IC8qIEFkdmVydGlzZSAyLjVHQml0IGxpbmsgKi9cXG4rXFx0XFx0YXg4ODE3OV9tZGlvX3dyaXRlKGRldi1cXHUwMDNlbmV0LCBkZXYtXFx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsICp0bXAxNik7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIEV0aGVybmV0IFBIWSBBdXRvIERldGFjaCovXFxuIFxcdGF4ODgxNzlfYXV0b19kZXRhY2goZGV2KTtcXG4gXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xcbitcXHRcXHQqdG1wID0gQVhfTUFDX0VGRl9FTjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQlVMS19PVVRfQ1RSTCwgMSwgMSwgdG1wKTtcXG4rXFxuK1xcdFxcdCp0bXAxNiA9IDA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCB0bXAxNik7XFxuK1xcbitcXHRcXHQqdG1wID0gMHgwNDtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QQVVTRV9XQVRFUkxWTF9MT1csIDEsIDEsIHRtcCk7XFxuK1xcdFxcdCp0bXAgPSAweDEwO1xcbitcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsIDEsIDEsIHRtcCk7XFxuK1xcbitcXHRcXHQqdG1wID0gMDtcXG4rXFx0XFx0aWYgKGRldi1cXHUwMDNlbmV0LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUilcXG4rXFx0XFx0XFx0KnRtcCB8PSBBWF9WTEFOX0NPTlRST0xfVkZFO1xcbitcXHRcXHRpZiAoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlgpXFxuK1xcdFxcdFxcdCp0bXAgfD0gQVhfVkxBTl9DT05UUk9MX1ZTTztcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIHRtcCk7XFxuK1xcbitcXHRcXHQqdG1wID0gMHhmZjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fSU5UX01BU0ssIDEsIDEsIHRtcCk7XFxuK1xcbitcXHRcXHQqdG1wID0gMDtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fUlhfRE1BX0NUTCwgMSwgMSwgdG1wKTtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fVFhfRE1BX0NUTCwgMSwgMSwgdG1wKTtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQVJDX0NUUkwsIDEsIDEsIHRtcCk7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1NXUF9DVFJMLCAxLCAxLCB0bXApO1xcbitcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19UWF9IRFJfQ0tTVU0sIDEsIDEsIHRtcCk7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIFJlYWQgTUFDIGFkZHJlc3MgZnJvbSBEVEIgb3IgYXNpeCBjaGlwICovXFxuIFxcdGF4ODgxNzlfZ2V0X21hY19hZGRyKGRldik7XFxuIFxcdG1lbWNweShkZXYtXFx1MDAzZW5ldC1cXHUwMDNlcGVybV9hZGRyLCBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcXG4gXFxuIFxcdC8qIFJYIGJ1bGsgY29uZmlndXJhdGlvbiAqL1xcbi1cXHRtZW1jcHkodG1wLCBcXHUwMDI2QVg4ODE3OV9CVUxLSU5fU0laRVswXSwgNSk7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQlVMS0lOX1FDVFJMLCA1LCA1LCB0bXApO1xcbi1cXG4tXFx0ZGV2LVxcdTAwM2VyeF91cmJfc2l6ZSA9IDEwMjQgKiAyMDtcXG4tXFxuLVxcdCp0bXAgPSAweDM0O1xcbi1cXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMSwgMSwgdG1wKTtcXG4tXFxuLVxcdCp0bXAgPSAweDUyO1xcbi1cXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsXFxuLVxcdFxcdFxcdCAgMSwgMSwgdG1wKTtcXG4rXFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcXG4rXFx0XFx0bWVtY3B5KHRtcCwgXFx1MDAyNkFYODgxNzlfQlVMS0lOX1NJWkVbMF0sIDUpO1xcbitcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0JVTEtJTl9RQ1RSTCwgNSwgNSwgdG1wKTtcXG4rXFx0XFx0KnRtcCA9IDB4MzQ7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfTE9XLCAxLCAxLCB0bXApO1xcbitcXG4rXFx0XFx0KnRtcCA9IDB4NTI7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfSElHSCxcXG4rXFx0XFx0XFx0XFx0ICAxLCAxLCB0bXApO1xcbitcXHRcXHRkZXYtXFx1MDAzZXJ4X3VyYl9zaXplID0gMTAyNCAqIDIwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBUaGUgQnVsay1SZWdpc3RlciBjb25maWd1cmF0aW9uIGZvciB0aGUgQVg4ODE3OUEgaXMgZG9uZSBpblxcbitcXHRcXHQgKiBheDg4MTc5YV9saW5rX3Jlc2V0KCksIG9uY2UgdGhlIGxpbmsgaXMgdXAgZm9yIGEgZ2l2ZW4gbGluayBhbmQgVVNCLXNwZWVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWlzX2F4ODg3NzJkKVxcbitcXHRcXHRcXHRkZXYtXFx1MDAzZXJ4X3VyYl9zaXplID0gMTAyNCAqIDI0O1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGRldi1cXHUwMDNlcnhfdXJiX3NpemUgPSAxMDI0ICogNDg7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIEVuYWJsZSBjaGVja3N1bSBvZmZsb2FkICovXFxuIFxcdCp0bXAgPSBBWF9SWENPRV9JUCB8IEFYX1JYQ09FX1RDUCB8IEFYX1JYQ09FX1VEUCB8XFxuIFxcdCAgICAgICBBWF9SWENPRV9UQ1BWNiB8IEFYX1JYQ09FX1VEUFY2O1xcbiBcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYQ09FX0NUTCwgMSwgMSwgdG1wKTtcXG4rXFx0YXgxNzlfZGF0YS1cXHUwMDNlcnhfY2hlY2tzdW0gPSAxO1xcbiBcXG4gXFx0KnRtcCA9IEFYX1RYQ09FX0lQIHwgQVhfVFhDT0VfVENQIHwgQVhfVFhDT0VfVURQIHxcXG4gXFx0ICAgICAgIEFYX1RYQ09FX1RDUFY2IHwgQVhfVFhDT0VfVURQVjY7XFxuIFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfVFhDT0VfQ1RMLCAxLCAxLCB0bXApO1xcbiBcXG4gXFx0LyogQ29uZmlndXJlIFJYIGNvbnRyb2wgcmVnaXN0ZXIgPVxcdTAwM2Ugc3RhcnQgb3BlcmF0aW9uICovXFxuLVxcdCp0bXAxNiA9IEFYX1JYX0NUTF9EUk9QQ1JDRVJSIHwgQVhfUlhfQ1RMX0lQRSB8IEFYX1JYX0NUTF9TVEFSVCB8XFxuLVxcdFxcdCBBWF9SWF9DVExfQVAgfCBBWF9SWF9DVExfQU1BTEwgfCBBWF9SWF9DVExfQUI7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCB0bXAxNik7XFxuLVxcbi1cXHQqdG1wID0gQVhfTU9OSVRPUl9NT0RFX1BNRVRZUEUgfCBBWF9NT05JVE9SX01PREVfUE1FUE9MIHxcXG4tXFx0ICAgICAgIEFYX01PTklUT1JfTU9ERV9SV01QO1xcbitcXHRheDE3OV9kYXRhLVxcdTAwM2VyeGN0bCA9IEFYX1JYX0NUTF9EUk9QQ1JDRVJSIHwgQVhfUlhfQ1RMX1NUQVJUIHxcXG4rXFx0XFx0XFx0ICAgIEFYX1JYX0NUTF9BUCB8IEFYX1JYX0NUTF9BTUFMTCB8IEFYX1JYX0NUTF9BQjtcXG4rXFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWlwX2FsaWduKVxcbitcXHRcXHRheDE3OV9kYXRhLVxcdTAwM2VyeGN0bCB8PSBBWF9SWF9DVExfSVBFO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXFx1MDAyNmF4MTc5X2RhdGEtXFx1MDAzZXJ4Y3RsKTtcXG4rXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKVxcbitcXHRcXHQqdG1wID0gQVhfTU9OSVRPUl9NT0RFX1BNRVRZUEUgfCBBWF9NT05JVE9SX01PREVfUE1FUE9MIHwgQVhfTU9OSVRPUl9NT0RFX1JXTVA7XFxuK1xcdGVsc2VcXG4rXFx0XFx0KnRtcCA9IEFYX01PTklUT1JfTU9ERV9SV01QO1xcbiBcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELCAxLCAxLCB0bXApO1xcbiBcXG4gXFx0LyogQ29uZmlndXJlIGRlZmF1bHQgbWVkaXVtIHR5cGUgPVxcdTAwM2UgZ2lnYSAqL1xcbiBcXHQqdG1wMTYgPSBBWF9NRURJVU1fUkVDRUlWRV9FTiB8IEFYX01FRElVTV9UWEZMT1dfQ1RSTEVOIHxcXG4tXFx0XFx0IEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX0ZVTExfRFVQTEVYIHxcXG4tXFx0XFx0IEFYX01FRElVTV9HSUdBTU9ERTtcXG4tXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsXFxuLVxcdFxcdFxcdCAgMiwgMiwgdG1wMTYpO1xcbitcXHRcXHQgQVhfTUVESVVNX1JYRkxPV19DVFJMRU4gfCBBWF9NRURJVU1fRlVMTF9EVVBMRVg7XFxuK1xcdGlmICghYXgxNzlfZGF0YS1cXHUwMDNlaXNfYXg4ODc3MmQpXFxuK1xcdFxcdCp0bXAxNiB8PSBBWF9NRURJVU1fR0lHQU1PREU7XFxuK1xcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCB0bXAxNik7XFxuIFxcbiBcXHQvKiBDaGVjayBpZiBXb0wgaXMgc3VwcG9ydGVkICovXFxuIFxcdGF4MTc5X2RhdGEtXFx1MDAzZXdvbF9zdXBwb3J0ZWQgPSAwO1xcbkBAIC0xNjU0LDE2ICsyNzQ1LDI5IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIFxcdFxcdFxcdCAgICAgMSwgMSwgXFx1MDAyNnRtcCkgXFx1MDAzZSAwKVxcbiBcXHRcXHRheDE3OV9kYXRhLVxcdTAwM2V3b2xfc3VwcG9ydGVkID0gV0FLRV9NQUdJQyB8IFdBS0VfUEhZO1xcbiBcXG4tXFx0YXg4ODE3OV9sZWRfc2V0dGluZyhkZXYpO1xcbitcXHQvKiBGb3IgY2hpcHMgc3RhcnRpbmcgd2l0aCBBWDg4MTc5QSwgTEVEUyBhcmUgY29uZmlndXJlZCBieSB0aGUgYWRhcHRlclxcbitcXHQgKiBmaXJtd2FyZSBkaXJlY3RseSBmcm9tIEVFUFJPTS9FRlVTRSB2YWx1ZXNcXG4rXFx0ICovXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKVxcbitcXHRcXHRheDg4MTc5X2xlZF9zZXR0aW5nKGRldik7XFxuIFxcbiBcXHRheDE3OV9kYXRhLVxcdTAwM2VlZWVfZW5hYmxlZCA9IDA7XFxuIFxcdGF4MTc5X2RhdGEtXFx1MDAzZWVlZV9hY3RpdmUgPSAwO1xcbiBcXG4tXFx0YXg4ODE3OV9kaXNhYmxlX2VlZShkZXYpO1xcbitcXHRpZiAoYXgxNzlfZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xcbitcXHRcXHRheDg4MTc5X2VlZV9jb25maWcoZGV2LCBmYWxzZSk7XFxuIFxcbi1cXHRheDg4MTc5X2V0aHRvb2xfZ2V0X2VlZShkZXYsIFxcdTAwMjZlZWVfZGF0YSk7XFxuLVxcdGxpbmttb2RlX3plcm8oZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7XFxuLVxcdGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgXFx1MDAyNmVlZV9kYXRhKTtcXG4rXFx0XFx0YXg4ODE3OV9ldGh0b29sX2dldF9lZWUoZGV2LCBcXHUwMDI2ZWVlX2RhdGEpO1xcbitcXHRcXHRsaW5rbW9kZV96ZXJvKGVlZV9kYXRhLmFkdmVydGlzZWQpO1xcbitcXHRcXHRheDg4MTc5X2V0aHRvb2xfc2V0X2VlZShkZXYsIFxcdTAwMjZlZWVfZGF0YSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGF4ODgxNzlfZWVlX2NvbmZpZyhkZXYsIHRydWUpO1xcbitcXHRcXHRheDg4MTc5X2V0aHRvb2xfZ2V0X2VlZShkZXYsIFxcdTAwMjZlZWVfZGF0YSk7XFxuK1xcdFxcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULCBlZWVfZGF0YS5hZHZlcnRpc2VkKTtcXG4rXFx0XFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgyNzkpXFxuK1xcdFxcdFxcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULCBlZWVfZGF0YS5hZHZlcnRpc2VkKTtcXG4rXFx0XFx0YXg4ODE3OV9ldGh0b29sX3NldF9lZWUoZGV2LCBcXHUwMDI2ZWVlX2RhdGEpO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBSZXN0YXJ0IGF1dG9uZWcgKi9cXG4gXFx0bWlpX253YXlfcmVzdGFydChcXHUwMDI2ZGV2LVxcdTAwM2VtaWkpO1xcbkBAIC0xNzA3LDYgKzI4MTEsMjQgQEAgc3RhdGljIGludCBheDg4MTc5X3N0b3Aoc3RydWN0IHVzYm5ldCAqZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBheDg4MTc5YV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldilcXG4re1xcbitcXHR1MTYgcmVnMTY7XFxuK1xcdHU4IHJlZzg7XFxuK1xcbitcXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcXHUwMDI2cmVnMTYpO1xcbitcXHRyZWcxNiBcXHUwMDI2PSB+QVhfTUVESVVNX1JFQ0VJVkVfRU47XFxuK1xcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcXHUwMDI2cmVnMTYpO1xcbitcXG4rXFx0cmVnMTYgPSAwO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXFx1MDAyNnJlZzE2KTtcXG4rXFxuK1xcdHJlZzggPSAwO1xcbitcXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVg4ODE3OUFfUEhZX1BPV0VSLCAwLCAwLCAxLCBcXHUwMDI2cmVnOCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTc5X2luZm8gPSB7XFxuIFxcdC5kZXNjcmlwdGlvbiA9IFxcXCJBU0lYIEFYODgxNzkgVVNCIDMuMCBHaWdhYml0IEV0aGVybmV0XFxcIixcXG4gXFx0LmJpbmQgPSBheDg4MTc5X2JpbmQsXFxuQEAgLTE3MzMsNiArMjg1NSw0NSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzhhX2luZm8gPSB7XFxuIFxcdC50eF9maXh1cCA9IGF4ODgxNzlfdHhfZml4dXAsXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzlhX2luZm8gPSB7XFxuK1xcdC5kZXNjcmlwdGlvbiA9IFxcXCJBU0lYIEFYODgxNzlBIFVTQiAzLjIgR2lnYWJpdCBFdGhlcm5ldFxcXCIsXFxuK1xcdC5iaW5kID0gYXg4ODE3OWFfYmluZCxcXG4rXFx0LnVuYmluZCA9IGF4ODgxNzlhX3VuYmluZCxcXG4rXFx0LnN0YXR1cyA9IGF4ODgxNzlfc3RhdHVzLFxcbitcXHQubGlua19yZXNldCA9IGF4ODgxNzlhX2xpbmtfcmVzZXQsXFxuK1xcdC5yZXNldCA9IGF4ODgxNzlfcmVzZXQsXFxuK1xcdC5zdG9wID0gYXg4ODE3OWFfc3RvcCxcXG4rXFx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VUIHwgRkxBR19BVk9JRF9VTkxJTktfVVJCUyxcXG4rXFx0LnJ4X2ZpeHVwID0gYXg4ODE3OWFfcnhfZml4dXAsXFxuK1xcdC50eF9maXh1cCA9IGF4ODgxNzlhX3R4X2ZpeHVwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4NzcyZF9pbmZvID0ge1xcbitcXHQuZGVzY3JpcHRpb24gPSBcXFwiQVNJWCBBWDg4NzcyRC9FIFVTQiAyLjAgRmFzdCBFdGhlcm5ldFxcXCIsXFxuK1xcdC5iaW5kID0gYXg4ODE3OWFfYmluZCxcXG4rXFx0LnVuYmluZCA9IGF4ODgxNzlhX3VuYmluZCxcXG4rXFx0LnN0YXR1cyA9IGF4ODgxNzlfc3RhdHVzLFxcbitcXHQubGlua19yZXNldCA9IGF4ODgxNzlhX2xpbmtfcmVzZXQsXFxuK1xcdC5yZXNldCA9IGF4ODgxNzlfcmVzZXQsXFxuK1xcdC5zdG9wID0gYXg4ODE3OWFfc3RvcCxcXG4rXFx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VUIHwgRkxBR19BVk9JRF9VTkxJTktfVVJCUyxcXG4rXFx0LnJ4X2ZpeHVwID0gYXg4ODE3OWFfcnhfZml4dXAsXFxuK1xcdC50eF9maXh1cCA9IGF4ODgxNzlhX3R4X2ZpeHVwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4Mjc5X2luZm8gPSB7XFxuK1xcdC5kZXNjcmlwdGlvbiA9IFxcXCJBU0lYIEFYODgyNzkgVVNCIDMuMiAyLjVHaWdhYml0IEV0aGVybmV0XFxcIixcXG4rXFx0LmJpbmQgPSBheDg4MTc5YV9iaW5kLFxcbitcXHQudW5iaW5kID0gYXg4ODE3OWFfdW5iaW5kLFxcbitcXHQuc3RhdHVzID0gYXg4ODE3OV9zdGF0dXMsXFxuK1xcdC5saW5rX3Jlc2V0ID0gYXg4ODE3OWFfbGlua19yZXNldCxcXG4rXFx0LnJlc2V0ID0gYXg4ODE3OV9yZXNldCxcXG4rXFx0LnN0b3AgPSBheDg4MTc5YV9zdG9wLFxcbitcXHQuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYIHwgRkxBR19NVUxUSV9QQUNLRVQgfCBGTEFHX0FWT0lEX1VOTElOS19VUkJTLFxcbitcXHQucnhfZml4dXAgPSBheDg4MTc5YV9yeF9maXh1cCxcXG4rXFx0LnR4X2ZpeHVwID0gYXg4ODE3OWFfdHhfZml4dXAsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGN5cHJlc3NfR1gzX2luZm8gPSB7XFxuIFxcdC5kZXNjcmlwdGlvbiA9IFxcXCJDeXByZXNzIEdYMyBTdXBlclNwZWVkIHRvIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlclxcXCIsXFxuIFxcdC5iaW5kID0gYXg4ODE3OV9iaW5kLFxcbkBAIC0xODc4LDYgKzMwMzksMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBhdF91bWMyMDAwc3BfaW5mbyA9IHtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwcm9kdWN0c1tdID0ge1xcbiB7XFxuK1xcdC8qIEFTSVggQVg4ODE3OUEvQiBVU0IgMy4yIEdpZ2FiaXQgRXRoZXJuZXQgKi9cXG4rXFx0VVNCX0RFVklDRV9WRVIoMHgwYjk1LCAweDE3OTAsIDB4MDIwMCwgMHgwMjAwKSxcXG4rXFx0LmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmF4ODgxNzlhX2luZm8sXFxuK30sIHtcXG4rXFx0LyogQVNJWCBBWDg4NzcyRCBVU0IgMi4wIDEwME1iaXQgRXRoZXJuZXQgKi9cXG4rXFx0VVNCX0RFVklDRV9WRVIoMHgwYjk1LCAweDE3OTAsIDB4MDMwMCwgMHgwMzAwKSxcXG4rXFx0LmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmF4ODg3NzJkX2luZm8sXFxuK30sIHtcXG4rXFx0LyogQVNJWCBBWDg4Mjc5IFVTQiAzLjIgMi41R0JpdCBFdGhlcm5ldCAqL1xcbitcXHRVU0JfREVWSUNFX1ZFUigweDBiOTUsIDB4MTc5MCwgMHgwNDAwLCAweDA0MDApLFxcbitcXHQuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZylcXHUwMDI2YXg4ODI3OV9pbmZvLFxcbit9LCB7XFxuIFxcdC8qIEFTSVggQVg4ODE3OSAxMC8xMDAvMTAwMCAqL1xcbiBcXHRVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDBiOTUsIDB4MTc5MCwgMHhmZiwgMHhmZiwgMCksXFxuIFxcdC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKVxcdTAwMjZheDg4MTc5X2luZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjAxOjI2LjUyODI1MTY0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA2ODk2MTYzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9BWDg4MTc5XzE3OEFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJheDg4MTc5YV9iaW5kXCIsXG4gICAgXCJheDg4MTc5YV91bmJpbmRcIixcbiAgICBcImF4ODgxNzlhX2xpbmtfcmVzZXRcIixcbiAgICBcImF4ODgxNzlhX3J4X2ZpeHVwXCIsXG4gICAgXCJheDg4MTc5YV90eF9maXh1cFwiLFxuICAgIFwiYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZFwiLFxuICAgIFwiYXgxNzlhX3ZsYW5fcnhfa2lsbF92aWRcIixcbiAgICBcImF4ODgxNzlhX2dldF9wYXVzZXBhcmFtXCIsXG4gICAgXCJheDg4MTc5YV9zZXRfcGF1c2VwYXJhbVwiLFxuICAgIFwiYXg4ODE3OWFfcnhfY2hlY2tzdW1cIixcbiAgICBcImF4ODgxNzlhX2J1bGtpbl9jb25maWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIG5ldyBBU0lYIFVTQiBFdGhlcm5ldCBjaGlwcyAoQVg4ODE3OUEsIEFYODg3NzJELCBBWDg4Mjc5KSB0byB0aGUgYXg4ODE3OV8xNzhhIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24sIGxpbmsgcmVzZXQsIGFuZCBwYWNrZXQgcGFyc2luZyAocngvdHggZml4dXApIGxvZ2ljIHNwZWNpZmljIHRvIHRoZXNlIGNoaXBzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IFVTQiBkZXZpY2UgYmluZGluZyBhbmQgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWMzNzc5NWJhYWI1ZGU2OGZlZWJlMzJiNGUyY2Y4YjM3ZjVhZjVhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTE6MDE6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMgYi9kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmNcbmluZGV4IDk4Zjg5OWVhMmU5NDYyLi4xMmZjMjBlNWY3NmU2OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jXG5AQCAtMTMsOSArMTMsMTIgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvdXNibmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuIFxuICNkZWZpbmUgQVg4ODE3OV9QSFlfSURcdFx0XHRcdDB4MDNcbiAjZGVmaW5lIEFYX0VFUFJPTV9MRU5cdFx0XHRcdDB4MTAwXG4rI2RlZmluZSBBWDg4Mjc5X0VFUFJPTV9MRU5cdFx0XHQweDQwMDBcbisjZGVmaW5lIEFYODgxNzlBX0VFUFJPTV9MRU5cdFx0XHQoMzIgKiAyMClcbiAjZGVmaW5lIEFYODgxNzlfRUVQUk9NX01BR0lDXHRcdFx0MHgxNzkwMGI5NVxuICNkZWZpbmUgQVhfTUNBU1RfRkxUU0laRVx0XHRcdDhcbiAjZGVmaW5lIEFYX01BWF9NQ0FTVFx0XHRcdFx0NjRcbkBAIC0zMiwxNyArMzUsMzMgQEBcbiAjZGVmaW5lIEFYX0FDQ0VTU19FRVBST01cdFx0XHQweDA0XG4gI2RlZmluZSBBWF9BQ0NFU1NfRUZVU1x0XHRcdFx0MHgwNVxuICNkZWZpbmUgQVhfUkVMT0FEX0VFUFJPTV9FRlVTRVx0XHRcdDB4MDZcbi0jZGVmaW5lIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0hcdFx0XHQweDU0XG4tI2RlZmluZSBBWF9QQVVTRV9XQVRFUkxWTF9MT1dcdFx0XHQweDU1XG4tXG4rI2RlZmluZSBBWDg4MTc5QV9XQUtFVVBfU0VUVElOR1x0XHRcdDB4MDdcbisjZGVmaW5lIEFYX0ZXX01PREVcdFx0XHRcdDB4MDhcbisjZGVmaW5lIEFYX0dQSFlfQ1RMXHRcdFx0XHQweDBGXG4rI2RlZmluZSBBWDg4MTc5QV9GTEFTSF9SRUFEXHRcdFx0MHgyMVxuKyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfV0VOXHRcdFx0MHgyMlxuKyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfV0RJU1x0XHRcdDB4MjNcbisjZGVmaW5lIEFYODgxNzlBX0ZMQVNIX1dSSVRFXHRcdFx0MHgyNFxuKyNkZWZpbmUgQVg4ODE3OUFfUEhZX0NMQVVTRTQ1XHRcdFx0MHgyN1xuKyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfRVJBU0VfU0VDVElPTlx0XHQweDI4XG4rI2RlZmluZSBBWDg4MTc5QV9BQ0NFU1NfQkxcdFx0XHQweDJBXG4rI2RlZmluZSBBWDg4MTc5QV9QSFlfUE9XRVJcdFx0XHQweDMxXG4rI2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNIXHRcdFx0MHhDMFxuKyNkZWZpbmUgQVhfUEFVU0VfV0FURVJMVkxfTE9XXHRcdFx0MHg1NFxuKyNkZWZpbmUgQVhfUEFVU0VfV0FURVJMVkxfSElHSFx0XHRcdDB4NTVcbitcbisjZGVmaW5lIEFYX0ZXX01PREVfMTc5QVx0XHRcdFx0MHgwMVxuICNkZWZpbmUgUEhZU0lDQUxfTElOS19TVEFUVVNcdFx0XHQweDAyXG4gXHQjZGVmaW5lXHRBWF9VU0JfU1NcdFx0MHgwNFxuIFx0I2RlZmluZVx0QVhfVVNCX0hTXHRcdDB4MDJcbitcdCNkZWZpbmUgQVhfVVNCX0ZTXHRcdDB4MDFcbiBcbiAjZGVmaW5lIEdFTkVSQUxfU1RBVFVTXHRcdFx0XHQweDAzXG4gLyogQ2hlY2sgQVg4ODE3OSB2ZXJzaW9uLiBVQTE6Qml0MiA9IDAsICBVQTI6Qml0MiA9IDEgKi9cbiBcdCNkZWZpbmVcdEFYX1NFQ0xEXHRcdDB4MDRcbiBcbisjZGVmaW5lIEFYX0NISVBfU1RBVFVTXHRcdFx0XHQweDA1XG4rXG4gI2RlZmluZSBBWF9TUk9NX0FERFJcdFx0XHRcdDB4MDdcbiAjZGVmaW5lIEFYX1NST01fQ01EXHRcdFx0XHQweDBhXG4gXHQjZGVmaW5lIEVFUF9SRFx0XHRcdDB4MDRcbkBAIC02Miw2ICs4MSwxNSBAQFxuIFx0I2RlZmluZSBBWF9SWF9DVExfUFJPXHRcdDB4MDAwMVxuIFx0I2RlZmluZSBBWF9SWF9DVExfU1RPUFx0XHQweDAwMDBcbiBcbisjZGVmaW5lIEFYODgxNzlBX0VUSF9UWF9HQVBcdFx0XHQweDBEXG4rXG4rI2RlZmluZSBBWDg4MTc5QV9CRk1fREFUQVx0XHRcdDB4MEVcbitcdCNkZWZpbmUgQVhfVFhfUVVFVUVfQ0ZHXHRcdDB4MDJcbitcdCNkZWZpbmUgQVhfVFhfUVVFVUVfU0VUXHRcdDB4MDhcbitcdCNkZWZpbmUgQVhfVFhfUTFfQUhCX0ZDX0VOXHQweDEwXG4rXHQjZGVmaW5lIEFYX1RYX1EyX0FIQl9GQ19FTlx0MHgyMFxuK1x0I2RlZmluZSBBWF9YR01JSV9FTlx0XHQweDgwXG4rXG4gI2RlZmluZSBBWF9OT0RFX0lEXHRcdFx0XHQweDEwXG4gI2RlZmluZSBBWF9NVUxGTFRBUllcdFx0XHRcdDB4MTZcbiBcbkBAIC05MSw3ICsxMTksMjEgQEBcbiBcdCNkZWZpbmUgQVhfUEhZUFdSX1JTVENUTF9JUFJMXHQweDAwMjBcbiBcdCNkZWZpbmUgQVhfUEhZUFdSX1JTVENUTF9BVFx0MHgxMDAwXG4gXG4rI2RlZmluZSBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1NcdFx0MHgyQVxuK1xuKyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MXHRcdDB4MkJcbitcdCNkZWZpbmUgQVhfVkxBTl9DT05UUk9MX1dFXHQweDAwMDFcbitcdCNkZWZpbmUgQVhfVkxBTl9DT05UUk9MX1JEXHQweDAwMDJcbitcdCNkZWZpbmUgQVhfVkxBTl9DT05UUk9MX1ZTT1x0MHgwMDEwXG4rXHQjZGVmaW5lIEFYX1ZMQU5fQ09OVFJPTF9WRkVcdDB4MDAyMFxuK1xuKyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMFx0XHRcdDB4MkNcbisjZGVmaW5lIEFYODgxNzlBX1ZMQU5fSURfREFUQTFcdFx0XHQweDJEXG4rXG4gI2RlZmluZSBBWF9SWF9CVUxLSU5fUUNUUkxcdFx0XHQweDJlXG4rXG4rI2RlZmluZSBBWF9HUEhZX0VFRV9DVFJMXHRcdFx0MHgwMVxuK1xuICNkZWZpbmUgQVhfQ0xLX1NFTEVDVFx0XHRcdFx0MHgzM1xuIFx0I2RlZmluZSBBWF9DTEtfU0VMRUNUX0JDU1x0MHgwMVxuIFx0I2RlZmluZSBBWF9DTEtfU0VMRUNUX0FDU1x0MHgwMlxuQEAgLTExMSw3ICsxNTMsNTEgQEBcbiBcdCNkZWZpbmUgQVhfVFhDT0VfVENQVjZcdFx0MHgyMFxuIFx0I2RlZmluZSBBWF9UWENPRV9VRFBWNlx0XHQweDQwXG4gXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfQk1fSU5UX01BU0tcdFx0MHg0MVxuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX0JNX1JYX0RNQV9DVExcdFx0MHg0M1xuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX0JNX1RYX0RNQV9DVExcdFx0MHg0NlxuK1xuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DRENcdFx0MHg2RFxuK1x0I2RlZmluZSBBWF9MU09GQ19XQ05UXzdfQUNDRVNTXHQweDAzXG4rXHQjZGVmaW5lIEFYX0dNSUlfQ1JDX0FQUEVORFx0MHgxMFxuK1xuICNkZWZpbmUgQVhfTEVEQ1RSTFx0XHRcdFx0MHg3M1xuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX0FSQ19DVFJMXHRcdFx0MHg5RVxuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX1NXUF9DVFJMXHRcdFx0MHhCMVxuK1xuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX1RYX1BBVVNFXHRcdFx0MHhCMlxuK1xuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX0NEQ19ERUxBWV9UWFx0XHQweEI1XG4rXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfUEFUSFx0XHRcdDB4QjdcbitcdCNkZWZpbmUgQVhfTUFDX1JYX1BBVEhfUkVBRFlcdDB4MDFcbitcdCNkZWZpbmUgQVhfTUFDX1RYX1BBVEhfUkVBRFlcdDB4MDJcbitcbisjZGVmaW5lIEFYODgxNzlBX05FV19QQVVTRV9DVFJMXHRcdFx0MHhCOFxuK1x0I2RlZmluZSBBWF9ORVdfUEFVU0VfRU5cdFx0MHgwMVxuK1xuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX0JVTEtfT1VUX0NUUkxcdFx0MHhCOVxuK1x0I2RlZmluZSBBWF9NQUNfRUZGX0VOXHRcdDB4MDJcbitcbisjZGVmaW5lIEFYODgxNzlBX01BQ19SWF9EQVRBX0NEQ19DTlRcdFx0MHhDMFxuK1x0I2RlZmluZSBBWF9NQUNfTFNPX0VSUl9FTlx0MHgwNFxuK1x0I2RlZmluZSBBWF9NQUNfTUlRRkZDVFJMX0ZPUk1BVFx0MHgxMFxuK1x0I2RlZmluZSBBWF9NQUNfTUlRRkZDVFJMX0RST1BfQ1JDIDB4MjBcbitcbisjZGVmaW5lIEFYODgxNzlBX0FVVE9ERVRBQ0hfREVMQVlcdCg1VUwgXHUwMDNjXHUwMDNjIDgpXG4rI2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNIX0VOXHRcdDFcbitcbisjZGVmaW5lIEFYODgxNzlBX01BQ19MU09fRU5IQU5DRV9DVFJMXHRcdDB4QzNcbitcdCNkZWZpbmUgQVhfTFNPX0VOSEFOQ0VfRU5cdDB4MDFcbitcbisjZGVmaW5lIEFYODgxNzlBX01BQ19UWF9IRFJfQ0tTVU1cdFx0MHhDQ1xuKyNkZWZpbmUgQVg4ODE3OUFfRVA1X0VIUlx0XHRcdDB4RjlcbitcbisjZGVmaW5lIEFYX1BIWV9QT1dFUlx0XHRcdFx0MHgwMlxuK1xuKyNkZWZpbmUgRVBIWV9MT1dfUE9XRVJfRU5cdFx0XHQweDAxXG4rI2RlZmluZSBTNV9XT0xfRU5cdFx0XHRcdDB4MDRcbisjZGVmaW5lIFM1X1dPTF9MT1dfUE9XRVJcdFx0XHQweDIwXG4gXG4gI2RlZmluZSBHTUlJX1BIWV9QSFlTUlx0XHRcdFx0MHgxMVxuIFx0I2RlZmluZSBHTUlJX1BIWV9QSFlTUl9TTUFTS1x0MHhjMDAwXG5AQCAtMTY0LDggKzI1MCw1NiBAQFxuIFx0I2RlZmluZSBHTUlJX1BIWV9QR1NFTF9QQUdFM1x0MHgwMDAzXG4gXHQjZGVmaW5lIEdNSUlfUEhZX1BHU0VMX1BBR0U1XHQweDAwMDVcbiBcbisvKiBUWCBEZXNjcmlwdG9yICovXG4rI2RlZmluZSBBWDE3OUFfVFhfREVTQ19MRU5fTUFTS1x0XHQweDFGRkZGRlxuKyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfRFJPUF9QQUREXHRCSVQoMjgpXG4rI2RlZmluZSBBWDE3OUFfVFhfREVTQ19WTEFOXHRcdEJJVCgyOSlcbisjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX01TU19NQVNLXHRcdDB4N0ZGRlxuKyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfTVNTX1NISUZUXHQweDIwXG4rI2RlZmluZSBBWDE3OUFfVFhfREVTQ19WTEFOX01BU0tcdDB4RkZGRlxuKyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfVkxBTl9TSElGVFx0MHgzMFxuK1xuKy8qIFJYIFBhY2tldCBEZXNjcmlwdG9yICovXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTDRfRVJSXHRcdEJJVCgwKVxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0VSUlx0XHRCSVQoMSlcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9UWVBFX01BU0tcdDB4MUNcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9VRFBcdFx0MHgwNFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0w0X1RDUFx0XHQweDEwXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTDNfVFlQRV9NQVNLXHQweDYwXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTDNfSVBcdFx0MHgyMFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0lQNlx0XHQweDQwXG4rXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfVkxBTlx0XHRCSVQoMTApXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfUlhfT0tcdFx0QklUKDExKVxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0RST1BcdFx0QklUKDMxKVxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0xFTl9NQVNLXHQweDdGRkYwMDAwXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTEVOX1NISUZUXHQweDEwXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfVkxBTl9TSElGVFx0MHgyMFxuK1xuKy8qIFJYIERlc2NyaXB0b3IgaGVhZGVyICovXG4rI2RlZmluZSBBWDE3OUFfUlhfREhfUEtUX0NOVF9NQVNLXHRcdDB4MUZGRlxuKyNkZWZpbmUgQVgxNzlBX1JYX0RIX0RFU0NfT0ZGU0VUX01BU0tcdDB4RkZGRkUwMDBcbisjZGVmaW5lIEFYMTc5QV9SWF9ESF9ERVNDX09GRlNFVF9TSElGVFx0MHgwRFxuK1xuKyNkZWZpbmUgQVgxNzlBX1JYX0hXX1BBRFx0XHRcdDB4MDJcbitcbiBzdGF0aWMgaW50IGF4ODgxNzlfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KTtcbiBcbitlbnVtIGF4X2V0aGVyX2xpbmtfc3BlZWQge1xuK1x0RVRIRVJfTElOS19OT05FID0gMCxcbitcdEVUSEVSX0xJTktfMTAgICA9IDEsXG4rXHRFVEhFUl9MSU5LXzEwMCAgPSAyLFxuK1x0RVRIRVJfTElOS18xMDAwID0gMyxcbitcdEVUSEVSX0xJTktfMjUwMCA9IDQsXG4rfTtcbitcbitlbnVtIGF4X2NoaXBfdmVyc2lvbiB7XG4rXHRBWF9WRVJTSU9OX0lOVkFMSURcdFx0PSAweDAsXG4rXHRBWF9WRVJTSU9OX0FYODgxNzlcdFx0PSAweDQsXG4rXHRBWF9WRVJTSU9OX0FYODgxNzlBXHRcdD0gMHg2LFx0LyogQWxzbyBBWDg4NzcyRCAqL1xuK1x0QVhfVkVSU0lPTl9BWDg4Mjc5XHRcdD0gMHg3LFxuK307XG4rXG4gc3RydWN0IGF4ODgxNzlfZGF0YSB7XG4gXHR1OCAgZWVlX2VuYWJsZWQ7XG4gXHR1OCAgZWVlX2FjdGl2ZTtcbkBAIC0xNzQsNiArMzA4LDE2IEBAIHN0cnVjdCBheDg4MTc5X2RhdGEge1xuIFx0dTMyIHdvbF9zdXBwb3J0ZWQ7XG4gXHR1MzIgd29sb3B0cztcbiBcdHU4IGRpc2Nvbm5lY3Rpbmc7XG4rXHR1OCBjaGlwX3ZlcnNpb247XG4rXHR1OCBmd192ZXJzaW9uWzRdO1xuK1x0dTggaXNfYXg4ODc3MmQ7XG4rXHR1OCBpcF9hbGlnbjtcbitcdHU4IGxpbms7XG4rXHR1OCBzcGVlZDtcbitcdHU4IGZ1bGxfZHVwbGV4O1xuK1x0dTggcnhfY2hlY2tzdW07XG4rXHR1OCBlZXByb21fcmVhZF9jbWQ7XG4rXHR1MTYgZWVwcm9tX2Jsb2NrO1xuIH07XG4gXG4gc3RydWN0IGF4ODgxNzlfaW50X2RhdGEge1xuQEAgLTE4MSwxNSArMzI1LDQ4IEBAIHN0cnVjdCBheDg4MTc5X2ludF9kYXRhIHtcbiBcdF9fbGUzMiBpbnRkYXRhMjtcbiB9O1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuK3N0cnVjdCBheF9idWxraW5fc2V0dGluZ3Mge1xuIFx0dW5zaWduZWQgY2hhciBjdHJsLCB0aW1lcl9sLCB0aW1lcl9oLCBzaXplLCBpZmc7XG4tfSBBWDg4MTc5X0JVTEtJTl9TSVpFW10gPVx0e1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODE3OV9CVUxLSU5fU0laRVtdID1cdHtcbiBcdHs3LCAweDRmLCAwLFx0MHgxMiwgMHhmZn0sXG4gXHR7NywgMHgyMCwgMyxcdDB4MTYsIDB4ZmZ9LFxuIFx0ezcsIDB4YWUsIDcsXHQweDE4LCAweGZmfSxcbiBcdHs3LCAweGNjLCAweDRjLCAweDE4LCA4fSxcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIEFYODgxNzlBX0JVTEtJTl9TSVpFW10gPSB7XG4rXHR7NSwgMHg3QiwgMHgwMCxcdDB4MTcsIDB4MEZ9LFx0LyogMUcsIFNTICovXG4rXHR7NSwgMHhDMCwgMHgwMixcdDB4MDYsIDB4MEZ9LFx0LyogMUcsIEhTICovXG4rXHR7NywgMHhGMCwgMHgwMCxcdDB4MEMsIDB4MEZ9LFx0LyogMTAwTSwgRnVsbCwgU1MgKi9cbitcdHs2LCAweDAwLCAweDAwLFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBIYWxmLCBTUyAqL1xuK1x0ezUsIDB4QzAsIDB4MDQsXHQweDA2LCAweDBGfSxcdC8qIDEwME0sIEZ1bGwsIEhTICovXG4rXHR7NywgMHhDMCwgMHgwNCxcdDB4MDYsIDB4MEZ9LFx0LyogMTAwTSwgSGFsZiwgSFMgKi9cbitcdHs3LCAweDAwLCAweDAwLFx0MHgwMywgMHgzRn0sXHQvKiBGUyAqL1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODc3MkRfQlVMS0lOX1NJWkVbXSA9IHtcbitcdHswLCAweDAwLCAweDAwLFx0MHgwMCwgMHgwMH0sXHQvKiAxRywgU1MgKHVudXNlZCkgKi9cbitcdHswLCAweDAwLCAweDAwLFx0MHgwMCwgMHgwMH0sXHQvKiAxRywgSFMgKHVudXNlZCkgKi9cbitcdHswLCAweDAwLCAweDAwLFx0MHgwMCwgMHgwMH0sXHQvKiAxMDBNLCBGdWxsLCBTUyAodW51c2VkKSAqL1xuK1x0ezAsIDB4MDAsIDB4MDAsXHQweDAwLCAweDAwfSxcdC8qIDEwME0sIEhhbGYsIFNTICh1bnVzZWQpICovXG4rXHR7NSwgMHhDMCwgMHgwNCxcdDB4MDYsIDB4MEZ9LFx0LyogMTAwTSwgRnVsbCwgSFMgKi9cbitcdHs3LCAweEMwLCAweDA0LFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBIYWxmLCBIUyAqL1xuK1x0ezcsIDB4MDAsIDB4MDAsXHQweDAzLCAweDNGfSxcdC8qIEZTICovXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGF4X2J1bGtpbl9zZXR0aW5ncyBBWDg4Mjc5X0JVTEtJTl9TSVpFW10gPSB7XG4rXHR7NSwgMHgxMCwgMHgwMSxcdDB4MTEsIDB4MEZ9LFx0LyogMi41RyAqL1xuK1x0ezcsIDB4QjMsIDB4MDEsXHQweDExLCAweDBGfSxcdC8qIDFHLCBTUyAqL1xuK1x0ezcsIDB4QzAsIDB4MDIsXHQweDA2LCAweDBGfSxcdC8qIDFHLCBIUyAqL1xuK1x0ezcsIDB4ODAsIDB4MDEsXHQweDAzLCAweDBGfSxcdC8qIDEwME0sIEZ1bGwsIFNTICovXG4rXHR7NywgMHg4MCwgMHgwMSxcdDB4MDMsIDB4MEZ9LFx0LyogMTAwTSwgSGFsZiwgU1MgKi9cbitcdHs3LCAweDgwLCAweDAxLFx0MHgwMywgMHgwRn0sXHQvKiAxMDBNLCBGdWxsLCBIUyAqL1xuK1x0ezcsIDB4ODAsIDB4MDEsXHQweDAzLCAweDBGfSxcdC8qIDEwME0sIEhhbGYsIEhTICovXG4rXHR7NywgMHgwMCwgMHgwMCxcdDB4MDMsIDB4M0Z9LFx0LyogRlMgKi9cbit9O1xuK1xuIHN0YXRpYyB2b2lkIGF4ODgxNzlfc2V0X3BtX21vZGUoc3RydWN0IHVzYm5ldCAqZGV2LCBib29sIHBtX21vZGUpXG4ge1xuIFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbkBAIC0zMTMsNiArNDkwLDcgQEAgc3RhdGljIGludCBheDg4MTc5X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXG4gXG4gc3RhdGljIHZvaWQgYXg4ODE3OV9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpXG4ge1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiBcdHN0cnVjdCBheDg4MTc5X2ludF9kYXRhICpldmVudDtcbiBcdHUzMiBsaW5rO1xuIFxuQEAgLTMyMyw2ICs1MDEsOSBAQCBzdGF0aWMgdm9pZCBheDg4MTc5X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcbiBcdGxlMzJfdG9fY3B1cygodm9pZCAqKVx1MDAyNmV2ZW50LVx1MDAzZWludGRhdGExKTtcbiBcbiBcdGxpbmsgPSAoKChfX2ZvcmNlIHUzMilldmVudC1cdTAwM2VpbnRkYXRhMSkgXHUwMDI2IEFYX0lOVF9QUExTX0xJTkspIFx1MDAzZVx1MDAzZSAxNjtcbitcdGRhdGEtXHUwMDNlc3BlZWQgPSAoKChfX2ZvcmNlIHUzMilldmVudC1cdTAwM2VpbnRkYXRhMSkgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweDc7XG4rXHRkYXRhLVx1MDAzZWZ1bGxfZHVwbGV4ID0gKCgoX19mb3JjZSB1MzIpZXZlbnQtXHUwMDNlaW50ZGF0YTEpIFx1MDAzZVx1MDAzZSAxMikgXHUwMDI2IDB4MTtcbitcdGRhdGEtXHUwMDNlbGluayA9IGxpbms7XG4gXG4gXHRpZiAobmV0aWZfY2Fycmllcl9vayhkZXYtXHUwMDNlbmV0KSAhPSBsaW5rKSB7XG4gXHRcdHVzYm5ldF9saW5rX2NoYW5nZShkZXYsIGxpbmssIDEpO1xuQEAgLTQwMyw2ICs1ODQsMzIgQEAgYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHBydGFkLCB1MTYgZGV2YWQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBheF9yZWFkX21tZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBkZXZfYWRkciwgdTE2IHJlZylcbit7XG4rXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1x0dTE2IHJlcztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XG4rXHRcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfQ0xBVVNFNDUsIGRldl9hZGRyLCByZWcsIDIsIFx1MDAyNnJlcyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsIHJlZywgZGV2X2FkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGF4X3dyaXRlX21tZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBkZXZfYWRkciwgdTE2IHJlZywgdTE2IGRhdGEpXG4re1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbitcbitcdGlmIChwcml2LVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4rXHRcdHJldHVybiBheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1BIWV9DTEFVU0U0NSwgZGV2X2FkZHIsIHJlZywgMiwgXHUwMDI2ZGF0YSk7XG4rXG4rXHRyZXR1cm4gYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KGRldiwgcmVnLCBkZXZfYWRkciwgZGF0YSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbiB7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuQEAgLTQxNCw3ICs2MjEsNiBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXG4gXG4gXHR1c2JuZXRfc3VzcGVuZChpbnRmLCBtZXNzYWdlKTtcbiBcbi1cdC8qIEVuYWJsZSBXb0wgKi9cbiBcdGlmIChwcml2LVx1MDAzZXdvbG9wdHMpIHtcbiBcdFx0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELFxuIFx0XHRcdFx0IDEsIDEsIFx1MDAyNnRtcDgpO1xuQEAgLTQyNSw2ICs2MzEsMjYgQEAgc3RhdGljIGludCBheDg4MTc5X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKVxuIFxuIFx0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELFxuIFx0XHRcdFx0ICAxLCAxLCBcdTAwMjZ0bXA4KTtcbitcbitcdFx0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuK1x0XHRcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIFx1MDAyNnRtcDE2KTtcbitcdFx0XHR0bXAxNiB8PSBBWF9NRURJVU1fUkVDRUlWRV9FTjtcbitcdFx0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwgMiwgMiwgXHUwMDI2dG1wMTYpO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChwcml2LVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpXG4rXHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9XQUtFVVBfU0VUVElORywgOCxcbitcdFx0XHRcdFx0ICBFUEhZX0xPV19QT1dFUl9FTiB8IFM1X1dPTF9FTlxuK1x0XHRcdFx0XHQgIHwgUzVfV09MX0xPV19QT1dFUiB8IDB4ODAwMCwgMCwgTlVMTCk7XG4rXG4rXHR9IGVsc2UgaWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1dBS0VVUF9TRVRUSU5HLCA4LCAweDgwMDAsIDAsIE5VTEwpO1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1dBS0VVUF9TRVRUSU5HLCAwLCBFUEhZX0xPV19QT1dFUl9FTiwgMCwgTlVMTCk7XG4rXHRcdGF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCBmYWxzZSk7XG4rXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0LyogRGlzYWJsZSBSWCBwYXRoICovXG5AQCAtNDM2LDExICs2NjIsMTEgQEAgc3RhdGljIGludCBheDg4MTc5X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKVxuIFxuIFx0LyogRm9yY2UgYnVsay1pbiB6ZXJvIGxlbmd0aCAqL1xuIFx0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsXG4tXHRcdFx0IDIsIDIsIFx1MDAyNnRtcDE2KTtcbitcdFx0XHQyLCAyLCBcdTAwMjZ0bXAxNik7XG4gXG4gXHR0bXAxNiB8PSBBWF9QSFlQV1JfUlNUQ1RMX0JaIHwgQVhfUEhZUFdSX1JTVENUTF9JUFJMO1xuIFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLFxuLVx0XHRcdCAgMiwgMiwgXHUwMDI2dG1wMTYpO1xuK1x0XHRcdDIsIDIsIFx1MDAyNnRtcDE2KTtcbiBcbiBcdC8qIGNoYW5nZSBjbG9jayAqL1xuIFx0dG1wOCA9IDA7XG5AQCAtNDU2LDEyICs2ODIsMTkgQEAgc3RhdGljIGludCBheDg4MTc5X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKVxuIH1cbiBcbiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBhdXRvZGV0YWNoIGZ1bmN0aW9uLiAqL1xuLS8qIFRoaXMgZnVuY3Rpb24gaXMgZGV0ZXJtaW5lZCBieSBvZmZzZXQgMHg0MyBvZiBFRVBST00gKi9cbisvKiBUaGlzIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYnkgb2Zmc2V0IDB4NDMgb2YgRUVQUk9NIGZvciB0aGUgQVg4ODE3OSAqL1xuIHN0YXRpYyBpbnQgYXg4ODE3OV9hdXRvX2RldGFjaChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4ge1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiBcdHUxNiB0bXAxNjtcbiBcdHU4IHRtcDg7XG4gXG4rXHRpZiAocHJpdi1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XG4rXHRcdHRtcDE2ID0gQVg4ODE3OUFfQVVUT0RFVEFDSF9ERUxBWTtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9BVVRPREVUQUNILCB0bXAxNiwgMCwgMCwgTlVMTCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0aWYgKGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfRUVQUk9NLCAweDQzLCAxLCAyLCBcdTAwMjZ0bXAxNikgXHUwMDNjIDApXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTQ4NCwxMSArNzE3LDMxIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9hdXRvX2RldGFjaChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gc3RhdGljIGludCBheDg4MTc5X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiB7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTtcbitcdHU4IHJlZzg7XG4gXG4rXHRheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFx0YXg4ODE3OV9zZXRfcG1fbW9kZShkZXYsIHRydWUpO1xuIFxuIFx0dXNibmV0X2xpbmtfY2hhbmdlKGRldiwgMCwgMCk7XG4gXG4rXHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XG4rXHRcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnJlZzgpO1xuK1x0XHRpZiAoIShyZWc4IFx1MDAyNiBBWF9QSFlfUE9XRVIpKSB7XG4rXHRcdFx0cmVnOCA9IEFYX1BIWV9QT1dFUjtcbitcdFx0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgXHUwMDI2cmVnOCk7XG4rXHRcdFx0bXNsZWVwKDI1MCk7XG4rXHRcdH1cbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9GV19NT0RFLCBBWF9GV19NT0RFXzE3OUEsIDAsIDAsIE5VTEwpO1xuK1xuK1x0XHQvKiBOb3csIHRoYXQgQVhfRldfTU9ERV8xNzlBIGlzIGVuYWJsZWQsIHRoZSBQSFkgbmVlZHMgYSBwb3dlci1jeWNsZS5cbitcdFx0ICogUEhZLXBvd2VyIGlzIHJlLWVuYWJsZWQgaW4gYXg4ODE3OV9yZXNldCgpXG4rXHRcdCAqL1xuK1x0XHRyZWc4ID0gMDtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnJlZzgpO1xuK1x0XHRtc2xlZXAoMjUwKTtcbitcdH1cbitcbiBcdGF4ODgxNzlfcmVzZXQoZGV2KTtcbiBcbiBcdGF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCBmYWxzZSk7XG5AQCAtNTEwLDYgKzc2MywyMSBAQCBzdGF0aWMgdm9pZCBheDg4MTc5X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHR1c2JuZXRfZGlzY29ubmVjdChpbnRmKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYXg4ODE3OV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4rXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1xuK1x0LyogSW5oZXJpdCBzdGFuZGFyZCBkZXZpY2UgaW5mbyAqL1xuK1x0dXNibmV0X2dldF9kcnZpbmZvKG5ldCwgaW5mbyk7XG4rXHRpZiAocHJpdi1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4rXHRcdHJldHVybjtcbitcbitcdHNucHJpbnRmKGluZm8tXHUwMDNlZndfdmVyc2lvbiwgc2l6ZW9mKGluZm8tXHUwMDNlZndfdmVyc2lvbiksIFwiJWQuJWQuJWQuJWRcIixcbitcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvblswXSwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uWzFdLFxuK1x0XHQgcHJpdi1cdTAwM2Vmd192ZXJzaW9uWzJdLCBwcml2LVx1MDAzZWZ3X3ZlcnNpb25bM10pO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIGF4ODgxNzlfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKVxuIHtcbkBAIC01MzYsNDEgKzgwNCw3NCBAQCBheDg4MTc5X3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29saW5mbylcbiBcbiBzdGF0aWMgaW50IGF4ODgxNzlfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiB7XG4tXHRyZXR1cm4gQVhfRUVQUk9NX0xFTjtcbitcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4rXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhO1xuK1xuK1x0YXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbitcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSlcbitcdFx0cmV0dXJuIEFYX0VFUFJPTV9MRU47XG4rXHRlbHNlIGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSlcbitcdFx0cmV0dXJuIEFYODgyNzlfRUVQUk9NX0xFTjtcbitcdGVsc2VcbitcdFx0cmV0dXJuIEFYODgxNzlBX0VFUFJPTV9MRU47XG4gfVxuIFxuLXN0YXRpYyBpbnRcbi1heDg4MTc5X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXG4tXHRcdCAgIHU4ICpkYXRhKVxuK3N0YXRpYyB2b2lkXG4rYXg4ODE3OV9lZXByb21fYWNjZXNzX3BhcmFtcyhzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhLCBpbnQgaSwgdTE2ICp2YWx1ZSwgdTE2ICppZHgpXG4re1xuK1x0LyogQVg4ODE3OSBoYXMgYSB3b3JkLWFkZHJlc3NhYmxlIEVFUFJPTVxuK1x0ICogQVg4ODE3OUEgdXNlcyBFRlVTRVMgd2l0aCAyMCBieXRlcyBsZW5ndGhcbitcdCAqIEFYODgyNzkgaGFzIGFuIEVFUFJPTSBhZGRyZXNzYWJsZSBpbiAyNTYgYnl0ZSBibG9ja3NcbitcdCAqL1xuK1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XG4rXHRcdCp2YWx1ZSA9IGk7XG4rXHRcdCppZHggPSAxO1xuK1x0fSBlbHNlIGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHQqdmFsdWUgPSAoaSAqIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrKSBcdTAwM2VcdTAwM2UgMTY7XG4rXHRcdCppZHggPSAoaSAqIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrKSBcdTAwMjYgMHhmZmZmO1xuK1x0fSBlbHNlIHtcbitcdFx0KnZhbHVlID0gaSBcdTAwM2NcdTAwM2MgNDtcbitcdFx0KmlkeCA9IDA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgYXg4ODE3OV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuLVx0dTE2ICplZXByb21fYnVmZjtcbi1cdGludCBmaXJzdF93b3JkLCBsYXN0X3dvcmQ7XG4tXHRpbnQgaSwgcmV0O1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTtcbitcdGludCBmaXJzdCwgbGFzdCwgaSwgcmV0O1xuK1x0dTggKmVlcHJvbV9idWZmO1xuK1xuK1x0YXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiBcbiBcdGlmIChlZXByb20tXHUwMDNlbGVuID09IDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZWVwcm9tLVx1MDAzZW1hZ2ljID0gQVg4ODE3OV9FRVBST01fTUFHSUM7XG4gXG4tXHRmaXJzdF93b3JkID0gZWVwcm9tLVx1MDAzZW9mZnNldCBcdTAwM2VcdTAwM2UgMTtcbi1cdGxhc3Rfd29yZCA9IChlZXByb20tXHUwMDNlb2Zmc2V0ICsgZWVwcm9tLVx1MDAzZWxlbiAtIDEpIFx1MDAzZVx1MDAzZSAxO1xuLVx0ZWVwcm9tX2J1ZmYgPSBrbWFsbG9jX2FycmF5KGxhc3Rfd29yZCAtIGZpcnN0X3dvcmQgKyAxLCBzaXplb2YodTE2KSxcbi1cdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbitcdGZpcnN0ID0gZWVwcm9tLVx1MDAzZW9mZnNldCAvIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrO1xuK1x0bGFzdCA9IChlZXByb20tXHUwMDNlb2Zmc2V0ICsgZWVwcm9tLVx1MDAzZWxlbiAtIDEpIC8gYXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2s7XG4rXG4rXHRlZXByb21fYnVmZiA9IGt6YWxsb2MoKGxhc3QgLSBmaXJzdCArIDEpICogYXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2ssIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFlZXByb21fYnVmZilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHQvKiBheDg4MTc5LzE3OEEgcmV0dXJucyAyIGJ5dGVzIGZyb20gZWVwcm9tIG9uIHJlYWQgKi9cbi1cdGZvciAoaSA9IGZpcnN0X3dvcmQ7IGkgXHUwMDNjPSBsYXN0X3dvcmQ7IGkrKykge1xuLVx0XHRyZXQgPSBfX2F4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfRUVQUk9NLCBpLCAxLCAyLFxuLVx0XHRcdFx0XHQgXHUwMDI2ZWVwcm9tX2J1ZmZbaSAtIGZpcnN0X3dvcmRdKTtcbitcdGZvciAoaSA9IGZpcnN0OyBpIFx1MDAzYz0gbGFzdDsgaSsrKSB7XG4rXHRcdHUxNiB2YWx1ZSwgaWR4O1xuK1xuK1x0XHRheDg4MTc5X2VlcHJvbV9hY2Nlc3NfcGFyYW1zKGF4MTc5X2RhdGEsIGksIFx1MDAyNnZhbHVlLCBcdTAwMjZpZHgpO1xuK1x0XHRyZXQgPSBfX2F4ODgxNzlfcmVhZF9jbWQoZGV2LCBheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9yZWFkX2NtZCxcbitcdFx0XHRcdFx0IHZhbHVlLCBpZHgsIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrLFxuK1x0XHRcdFx0XHQgZWVwcm9tX2J1ZmYgKyAoaSAtIGZpcnN0KSAqIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrKTtcbitcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRcdGtmcmVlKGVlcHJvbV9idWZmKTtcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0fVxuIFx0fVxuIFxuLVx0bWVtY3B5KGRhdGEsICh1OCAqKWVlcHJvbV9idWZmICsgKGVlcHJvbS1cdTAwM2VvZmZzZXQgXHUwMDI2IDEpLCBlZXByb20tXHUwMDNlbGVuKTtcbitcdG1lbWNweShkYXRhLCBlZXByb21fYnVmZiArIGVlcHJvbS1cdTAwM2VvZmZzZXQgJSBheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9ibG9jaywgZWVwcm9tLVx1MDAzZWxlbik7XG4gXHRrZnJlZShlZXByb21fYnVmZik7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTgwLDEyICs4ODEsMTcgQEAgYXg4ODE3OV9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLFxuIFx0XHQgICB1OCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTtcbiBcdHUxNiAqZWVwcm9tX2J1ZmY7XG4gXHRpbnQgZmlyc3Rfd29yZDtcbiBcdGludCBsYXN0X3dvcmQ7XG4gXHRpbnQgcmV0O1xuIFx0aW50IGk7XG4gXG4rXHRheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuIFx0bmV0ZGV2X2RiZyhuZXQsIFwid3JpdGUgRUVQUk9NIGxlbiAlZCwgb2Zmc2V0ICVkLCBtYWdpYyAweCV4XFxuXCIsXG4gXHRcdCAgIGVlcHJvbS1cdTAwM2VsZW4sIGVlcHJvbS1cdTAwM2VvZmZzZXQsIGVlcHJvbS1cdTAwM2VtYWdpYyk7XG4gXG5AQCAtNjUxLDEyICs5NTcsMzkgQEAgYXg4ODE3OV9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLFxuIH1cbiBcbiBzdGF0aWMgaW50IGF4ODgxNzlfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4ge1xuIFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XG4rXHRpbnQgdjtcbitcbitcdGRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXG4gXHRtaWlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MoXHUwMDI2ZGV2LVx1MDAzZW1paSwgY21kKTtcbiBcbitcdGlmIChkYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHRcdCBjbWQtXHUwMDNlbGlua19tb2Rlcy5zdXBwb3J0ZWQpO1xuK1xuK1x0XHR2ID0gYXg4ODE3OV9tZGlvX3JlYWQoZGV2LVx1MDAzZW5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xuK1x0XHRpZiAodiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHYgXHUwMDI2IEFEVkVSVElTRV9SRVNWKVxuK1x0XHRcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuK1x0XHRcdFx0XHQgY21kLVx1MDAzZWxpbmtfbW9kZXMuYWR2ZXJ0aXNpbmcpO1xuK1xuK1x0XHR2ID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcbitcdFx0aWYgKGRhdGEtXHUwMDNlc3BlZWQgPT0gRVRIRVJfTElOS18yNTAwKSB7XG4rXHRcdFx0Y21kLVx1MDAzZWJhc2Uuc3BlZWQgPSBTUEVFRF8yNTAwO1xuK1x0XHRcdC8qIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUcgaXMgYnJva2VuLCBidXQgd2UgY2FuIGRlZHVjZSB0aGF0XG4rXHRcdFx0ICogdGhlIGxpbmstcGFydG5lciBhZHZlcnRpc2VkIDI1MDBNIGlmIHJlbW90ZWx5IEFOIHN1Y2NjZWRlZFxuK1x0XHRcdCAqIGZvciBsaW5rIHNwZWVkIFx1MDAzZSAxMDAwTSBhbmQgd2UgbG9jYWxseSBoYXZlIGEgbGluayBzcGVlZCBvZlxuK1x0XHRcdCAqIDI1MDBNXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHYgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiB2IFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfUkVNT0spXG4rXHRcdFx0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHRcdFx0XHQgY21kLVx1MDAzZWxpbmtfbW9kZXMubHBfYWR2ZXJ0aXNpbmcpO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjY0LDM0ICs5OTcsMTI4IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4ge1xuIFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XG4rXHRpbnQgdjtcbitcbitcdGRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4rXG4rXHQvKiBtaWlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MgaGFuZGxlcyB1bmtub3duIGJpdHMgaW4gTUlJX0FEVkVSVElTRVxuK1x0ICogdHJhbnNwYXJlbnRseSwgc28gZm9yIHRoZSAyLjVHQml0IGxpbmsgc3BlZWQgb2YgdGhlIEFYX1ZFUlNJT05fQVg4ODI3OVxuK1x0ICogd2UganVzdCBzZXQgdXAgQURWRVJUSVNFX1JFU1YgYmVmb3JlIGNhbGxpbmcgbWlpX2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzXG4rXHQgKiBhdCBsZWFzdCBmb3Igc3BlZWRzIFx1MDAzYyAyNTAwXG4rXHQgKi9cbitcdGlmIChkYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcbitcdFx0diA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xuK1x0XHRpZiAodiBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gdjtcbitcbitcdFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHRcdCAgICAgIGNtZC1cdTAwM2VsaW5rX21vZGVzLmFkdmVydGlzaW5nKSlcbitcdFx0XHR2IHw9IEFEVkVSVElTRV9SRVNWO1xuK1x0XHRlbHNlXG4rXHRcdFx0diBcdTAwMjY9IH5BRFZFUlRJU0VfUkVTVjtcbitcdFx0YXg4ODE3OV9tZGlvX3dyaXRlKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIHYpO1xuK1x0XHRpZiAoY21kLVx1MDAzZWJhc2Uuc3BlZWQgPT0gU1BFRURfMjUwMClcbitcdFx0XHRyZXR1cm4gbWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbitcdH1cbitcbiBcdHJldHVybiBtaWlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MoXHUwMDI2ZGV2LVx1MDAzZW1paSwgY21kKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYXg4ODE3OWFfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpXG4re1xuK1x0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XG4rXHR1MTYgYm1jciwgbGNsYWR2LCBybXRhZHY7XG4rXHR1OCBjYXA7XG4rXG4rXHRkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1xuK1x0aWYgKGRhdGEtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRibWNyID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0JNQ1IpO1xuK1x0bGNsYWR2ID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7XG4rXHRybXRhZHYgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi1cdTAwM2VtaWkucGh5X2lkLCBNSUlfTFBBKTtcbitcbitcdGlmICghKGJtY3IgXHUwMDI2IEJNQ1JfQU5FTkFCTEUpKSB7XG4rXHRcdHBhdXNlLVx1MDAzZWF1dG9uZWcgPSAwO1xuK1x0XHRwYXVzZS1cdTAwM2VyeF9wYXVzZSA9IDA7XG4rXHRcdHBhdXNlLVx1MDAzZXR4X3BhdXNlID0gMDtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cGF1c2UtXHUwMDNlYXV0b25lZyA9IDE7XG4rXG4rXHRjYXAgPSBtaWlfcmVzb2x2ZV9mbG93Y3RybF9mZHgobGNsYWR2LCBybXRhZHYpO1xuK1xuK1x0aWYgKGNhcCBcdTAwMjYgRkxPV19DVFJMX1JYKVxuK1x0XHRwYXVzZS1cdTAwM2VyeF9wYXVzZSA9IDE7XG4rXG4rXHRpZiAoY2FwIFx1MDAyNiBGTE9XX0NUUkxfVFgpXG4rXHRcdHBhdXNlLVx1MDAzZXR4X3BhdXNlID0gMTtcbit9XG4rXG4rc3RhdGljIGludCBheDg4MTc5YV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSlcbit7XG4rXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YTtcbitcdHUxNiBvbGQsIG5ldzEsIGJtY3I7XG4rXHR1OCBjYXAgPSAwO1xuK1xuK1x0ZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbitcbitcdGlmIChkYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0Ym1jciA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9CTUNSKTtcbitcdGlmIChwYXVzZS1cdTAwM2VhdXRvbmVnIFx1MDAyNlx1MDAyNiAhKGJtY3IgXHUwMDI2IEJNQ1JfQU5FTkFCTEUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChwYXVzZS1cdTAwM2VyeF9wYXVzZSlcbitcdFx0Y2FwIHw9IEZMT1dfQ1RSTF9SWDtcbitcbitcdGlmIChwYXVzZS1cdTAwM2V0eF9wYXVzZSlcbitcdFx0Y2FwIHw9IEZMT1dfQ1RSTF9UWDtcbitcbitcdG9sZCA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xuK1x0bmV3MSA9IChvbGQgXHUwMDI2IH4oQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNKSkgfFxuK1x0XHRtaWlfYWR2ZXJ0aXNlX2Zsb3djdHJsKGNhcCk7XG4rXHRpZiAob2xkICE9IG5ldzEpXG4rXHRcdGF4ODgxNzlfbWRpb193cml0ZShuZXQsIGRldi1cdTAwM2VtaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLCBuZXcxKTtcbitcbitcdHJldHVybiBtaWlfbndheV9yZXN0YXJ0KFx1MDAyNmRldi1cdTAwM2VtaWkpO1xuK31cbitcbiBzdGF0aWMgaW50XG4gYXg4ODE3OV9ldGh0b29sX2dldF9lZWUoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIHtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXHRpbnQgdmFsO1xuIFxuIFx0LyogR2V0IFN1cHBvcnRlZCBFRUUgKi9cbi1cdHZhbCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgTURJT19QQ1NfRUVFX0FCTEUsXG4tXHRcdFx0XHRcdCAgICBNRElPX01NRF9QQ1MpO1xuK1x0dmFsID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9QQ1MsIE1ESU9fUENTX0VFRV9BQkxFKTtcbiBcdGlmICh2YWwgXHUwMDNjIDApXG4gXHRcdHJldHVybiB2YWw7XG4gXHRtaWlfZWVlX2NhcDFfbW9kX2xpbmttb2RlX3QoZGF0YS1cdTAwM2VzdXBwb3J0ZWQsIHZhbCk7XG4gXG4gXHQvKiBHZXQgYWR2ZXJ0aXNlbWVudCBFRUUgKi9cbi1cdHZhbCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgTURJT19BTl9FRUVfQURWLFxuLVx0XHRcdFx0XHQgICAgTURJT19NTURfQU4pO1xuK1x0dmFsID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWKTtcbiBcdGlmICh2YWwgXHUwMDNjIDApXG4gXHRcdHJldHVybiB2YWw7XG4gXHRtaWlfZWVlX2NhcDFfbW9kX2xpbmttb2RlX3QoZGF0YS1cdTAwM2VhZHZlcnRpc2VkLCB2YWwpO1xuIFxuIFx0LyogR2V0IExQIGFkdmVydGlzZW1lbnQgRUVFICovXG4tXHR2YWwgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsIE1ESU9fQU5fRUVFX0xQQUJMRSxcbi1cdFx0XHRcdFx0ICAgIE1ESU9fTU1EX0FOKTtcbitcdHZhbCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0xQQUJMRSk7XG4gXHRpZiAodmFsIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdmFsO1xuIFx0bWlpX2VlZV9jYXAxX21vZF9saW5rbW9kZV90KGRhdGEtXHUwMDNlbHBfYWR2ZXJ0aXNlZCwgdmFsKTtcbitcdGlmIChwcml2LVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHR2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9MUEFCTEUyKTtcbitcdFx0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gdmFsO1xuK1x0XHRtaWlfZWVlX2NhcDJfbW9kX2xpbmttb2RlX2Fkdl90KGRhdGEtXHUwMDNlbHBfYWR2ZXJ0aXNlZCwgdmFsKTtcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03MDEsOCArMTEyOCw3IEBAIGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcbiB7XG4gXHR1MTYgdG1wMTYgPSBsaW5rbW9kZV90b19taWlfZWVlX2NhcDFfdChkYXRhLVx1MDAzZWFkdmVydGlzZWQpO1xuIFxuLVx0cmV0dXJuIGF4ODgxNzlfcGh5X3dyaXRlX21tZF9pbmRpcmVjdChkZXYsIE1ESU9fQU5fRUVFX0FEVixcbi1cdFx0XHRcdFx0ICAgICAgTURJT19NTURfQU4sIHRtcDE2KTtcbitcdHJldHVybiBheF93cml0ZV9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWLCB0bXAxNik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGtfZWVlKHN0cnVjdCB1c2JuZXQgKmRldilcbkBAIC03MTIsNDAgKzExMzgsMjcgQEAgc3RhdGljIGludCBheDg4MTc5X2Noa19lZWUoc3RydWN0IHVzYm5ldCAqZGV2KVxuIFxuIFx0bWlpX2V0aHRvb2xfZ3NldChcdTAwMjZkZXYtXHUwMDNlbWlpLCBcdTAwMjZlY21kKTtcbiBcbi1cdGlmIChlY21kLmR1cGxleCBcdTAwMjYgRFVQTEVYX0ZVTEwpIHtcbitcdHByaXYtXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XG4rXHRpZiAoKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzYyBBWF9WRVJTSU9OX0FYODgyNzkgXHUwMDI2XHUwMDI2IChlY21kLmR1cGxleCBcdTAwMjYgRFVQTEVYX0ZVTEwpKSB8fFxuK1x0ICAgIChlY21kLnNwZWVkID09IFNQRUVEXzEwMDAgXHUwMDI2XHUwMDI2IChlY21kLmR1cGxleCBcdTAwMjYgRFVQTEVYX0ZVTEwpKSkge1xuIFx0XHRpbnQgZWVlX2xwLCBlZWVfY2FwLCBlZWVfYWR2O1xuIFx0XHR1MzIgbHAsIGNhcCwgYWR2LCBzdXBwb3J0ZWQgPSAwO1xuIFxuLVx0XHRlZWVfY2FwID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LFxuLVx0XHRcdFx0XHRcdFx0TURJT19QQ1NfRUVFX0FCTEUsXG4tXHRcdFx0XHRcdFx0XHRNRElPX01NRF9QQ1MpO1xuLVx0XHRpZiAoZWVlX2NhcCBcdTAwM2MgMCkge1xuLVx0XHRcdHByaXYtXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XG4rXHRcdGVlZV9jYXAgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX1BDUywgTURJT19QQ1NfRUVFX0FCTEUpO1xuK1x0XHRpZiAoZWVlX2NhcCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcbiBcdFx0Y2FwID0gbW1kX2VlZV9jYXBfdG9fZXRodG9vbF9zdXBfdChlZWVfY2FwKTtcbi1cdFx0aWYgKCFjYXApIHtcbi1cdFx0XHRwcml2LVx1MDAzZWVlZV9hY3RpdmUgPSAwO1xuK1x0XHRpZiAoIWNhcClcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbi1cbi1cdFx0ZWVlX2xwID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LFxuLVx0XHRcdFx0XHRcdCAgICAgICBNRElPX0FOX0VFRV9MUEFCTEUsXG4tXHRcdFx0XHRcdFx0ICAgICAgIE1ESU9fTU1EX0FOKTtcbi1cdFx0aWYgKGVlZV9scCBcdTAwM2MgMCkge1xuLVx0XHRcdHByaXYtXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4gXG4tXHRcdGVlZV9hZHYgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsXG4tXHRcdFx0XHRcdFx0XHRNRElPX0FOX0VFRV9BRFYsXG4tXHRcdFx0XHRcdFx0XHRNRElPX01NRF9BTik7XG4rXHRcdGVlZV9scCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0xQQUJMRSk7XG4rXHRcdGlmIChlZWVfbHAgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRcdGlmIChlZWVfYWR2IFx1MDAzYyAwKSB7XG4tXHRcdFx0cHJpdi1cdTAwM2VlZWVfYWN0aXZlID0gMDtcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbitcdFx0ZWVlX2FkdiA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0FEVik7XG4rXHRcdGlmIChlZWVfYWR2IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0XHRhZHYgPSBtbWRfZWVlX2Fkdl90b19ldGh0b29sX2Fkdl90KGVlZV9hZHYpO1xuIFx0XHRscCA9IG1tZF9lZWVfYWR2X3RvX2V0aHRvb2xfYWR2X3QoZWVlX2xwKTtcbkBAIC03NTMsNjUgKzExNjYsNTMgQEAgc3RhdGljIGludCBheDg4MTc5X2Noa19lZWUoc3RydWN0IHVzYm5ldCAqZGV2KVxuIFx0XHRcdCAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIDpcbiBcdFx0XHQgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsO1xuIFxuLVx0XHRpZiAoIShscCBcdTAwMjYgYWR2IFx1MDAyNiBzdXBwb3J0ZWQpKSB7XG4tXHRcdFx0cHJpdi1cdTAwM2VlZWVfYWN0aXZlID0gMDtcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbitcdFx0aWYgKCEobHAgXHUwMDI2IGFkdiBcdTAwMjYgc3VwcG9ydGVkKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdFx0cHJpdi1cdTAwM2VlZWVfYWN0aXZlID0gMTtcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRwcml2LVx1MDAzZWVlZV9hY3RpdmUgPSAwO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBheDg4MTc5X2Rpc2FibGVfZWVlKHN0cnVjdCB1c2JuZXQgKmRldilcbi17XG4tXHR1MTYgdG1wMTY7XG4tXG4tXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UzO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbi1cdFx0XHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcdTAwMjZ0bXAxNik7XG4tXG4tXHR0bXAxNiA9IDB4MzI0Njtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBNSUlfUEhZQUREUiwgMiwgXHUwMDI2dG1wMTYpO1xuLVxuLVx0dG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFMDtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBheDg4MTc5X2VuYWJsZV9lZWUoc3RydWN0IHVzYm5ldCAqZGV2KVxuK3N0YXRpYyB2b2lkIGF4ODgxNzlfZWVlX2NvbmZpZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIGJvb2wgZW5hYmxlKVxuIHtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXHR1MTYgdG1wMTY7XG4gXG4tXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UzO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbi1cdFx0XHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcdTAwMjZ0bXAxNik7XG4tXG4tXHR0bXAxNiA9IDB4MzI0Nztcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBNSUlfUEhZQUREUiwgMiwgXHUwMDI2dG1wMTYpO1xuLVxuLVx0dG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFNTtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuLVxuLVx0dG1wMTYgPSAweDA2ODA7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuLVx0XHRcdCAgTUlJX0JNU1IsIDIsIFx1MDAyNnRtcDE2KTtcbitcdGlmIChwcml2LVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuK1x0XHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UzO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuK1x0XHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuK1xuK1x0XHR0bXAxNiA9IGVuYWJsZSA/IDB4MzI0NyA6IDB4MzI0NjtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbitcdFx0XHRcdCAgTUlJX1BIWUFERFIsIDIsIFx1MDAyNnRtcDE2KTtcbitcdFx0aWYgKGVuYWJsZSkge1xuK1x0XHRcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTU7XG4rXHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbitcdFx0XHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuK1xuK1x0XHRcdHRtcDE2ID0gMHgwNjgwO1xuK1x0XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4rXHRcdFx0XHRcdCAgTUlJX0JNU1IsIDIsIFx1MDAyNnRtcDE2KTtcbitcdFx0fVxuIFxuLVx0dG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFMDtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuK1x0XHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UwO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuK1x0XHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuK1x0fSBlbHNlIHtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9HUEhZX0NUTCwgQVhfR1BIWV9FRUVfQ1RSTCwgZW5hYmxlLCAwLCBOVUxMKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCBheDg4MTc5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpXG4ge1xuIFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbi1cdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4rXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2O1xuK1xuK1x0cHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiBcbiBcdGVkYXRhLVx1MDAzZWVlZV9lbmFibGVkID0gcHJpdi1cdTAwM2VlZWVfZW5hYmxlZDtcbiBcdGVkYXRhLVx1MDAzZWVlZV9hY3RpdmUgPSBwcml2LVx1MDAzZWVlZV9hY3RpdmU7XG5AQCAtODIyLDE4ICsxMjIzLDIwIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxuIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4tXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdjtcbiBcdGludCByZXQ7XG4gXG4rXHRwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1xuIFx0cHJpdi1cdTAwM2VlZWVfZW5hYmxlZCA9IGVkYXRhLVx1MDAzZWVlZV9lbmFibGVkO1xuIFx0aWYgKCFwcml2LVx1MDAzZWVlZV9lbmFibGVkKSB7XG4tXHRcdGF4ODgxNzlfZGlzYWJsZV9lZWUoZGV2KTtcbitcdFx0YXg4ODE3OV9lZWVfY29uZmlnKGRldiwgZmFsc2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cHJpdi1cdTAwM2VlZWVfZW5hYmxlZCA9IGF4ODgxNzlfY2hrX2VlZShkZXYpO1xuIFx0XHRpZiAoIXByaXYtXHUwMDNlZWVlX2VuYWJsZWQpXG4gXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0XHRheDg4MTc5X2VuYWJsZV9lZWUoZGV2KTtcbitcdFx0YXg4ODE3OV9lZWVfY29uZmlnKGRldiwgdHJ1ZSk7XG4gXHR9XG4gXG4gXHRyZXQgPSBheDg4MTc5X2V0aHRvb2xfc2V0X2VlZShkZXYsIGVkYXRhKTtcbkBAIC04NDgsNiArMTI1MSw3IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzlfZXRodG9vbF9vcHMgPSB7XG4rXHQuZ2V0X2RydmluZm9cdFx0PSBheDg4MTc5X2dldF9kcnZpbmZvLFxuIFx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbiBcdC5nZXRfbXNnbGV2ZWxcdFx0PSB1c2JuZXRfZ2V0X21zZ2xldmVsLFxuIFx0LnNldF9tc2dsZXZlbFx0XHQ9IHVzYm5ldF9zZXRfbXNnbGV2ZWwsXG5AQCAtODYxLDE2ICsxMjY1LDc4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3OV9ldGh0b29sX29wcyA9IHtcbiBcdC5ud2F5X3Jlc2V0XHRcdD0gdXNibmV0X253YXlfcmVzZXQsXG4gXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IGF4ODgxNzlfZ2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LnNldF9saW5rX2tzZXR0aW5nc1x0PSBheDg4MTc5X3NldF9saW5rX2tzZXR0aW5ncyxcbitcdC5nZXRfcGF1c2VwYXJhbVx0XHQ9IGF4ODgxNzlhX2dldF9wYXVzZXBhcmFtLFxuK1x0LnNldF9wYXVzZXBhcmFtXHRcdD0gYXg4ODE3OWFfc2V0X3BhdXNlcGFyYW0sXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuIH07XG4gXG4rc3RhdGljIGludCBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXG4re1xuK1x0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbitcdHU4IHZsYW5fY3RybDtcbitcdHUxNiByZWcxNjtcbitcdHU4IHJlZzg7XG4rXG4rXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZyZWc4KTtcbitcdHZsYW5fY3RybCA9IHJlZzg7XG4rXG4rXHQvKiBBZGRyZXNzICovXG4rXHRyZWc4ID0gKHZpZCAvIDE2KTtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9BRERSRVNTLCAxLCAxLCBcdTAwMjZyZWc4KTtcbitcbitcdC8qIERhdGEgKi9cbitcdHJlZzggPSB2bGFuX2N0cmwgfCBBWF9WTEFOX0NPTlRST0xfUkQ7XG4rXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2cmVnOCk7XG4rXG4rXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMCwgMiwgMiwgXHUwMDI2cmVnMTYpO1xuK1x0cmVnMTYgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjICh2aWQgJSAxNikpO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCBcdTAwMjZyZWcxNik7XG4rXG4rXHRyZWc4ID0gdmxhbl9jdHJsIHwgQVhfVkxBTl9DT05UUk9MX1dFO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFx1MDAyNnJlZzgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXG4re1xuK1x0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbitcdHU4IHZsYW5fY3RybDtcbitcdHUxNiByZWcxNjtcbitcdHU4IHJlZzg7XG4rXG4rXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZyZWc4KTtcbitcdHZsYW5fY3RybCA9IHJlZzg7XG4rXG4rXHQvKiBBZGRyZXNzICovXG4rXHRyZWc4ID0gKHZpZCAvIDE2KTtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9BRERSRVNTLCAxLCAxLCBcdTAwMjZyZWc4KTtcbitcbitcdC8qIERhdGEgKi9cbitcdHJlZzggPSB2bGFuX2N0cmwgfCBBWF9WTEFOX0NPTlRST0xfUkQ7XG4rXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2cmVnOCk7XG4rXG4rXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMCwgMiwgMiwgXHUwMDI2cmVnMTYpO1xuK1x0cmVnMTYgfD0gKDEgXHUwMDNjXHUwMDNjICh2aWQgJSAxNikpO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCBcdTAwMjZyZWcxNik7XG4rXG4rXHRyZWc4ID0gdmxhbl9jdHJsIHwgQVhfVkxBTl9DT05UUk9MX1dFO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFx1MDAyNnJlZzgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGF4ODgxNzlfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4tXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFx0dTggKm1fZmlsdGVyID0gKCh1OCAqKWRldi1cdTAwM2VkYXRhKTtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XG4rXG4rXHRkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFxuLVx0ZGF0YS1cdTAwM2VyeGN0bCA9IChBWF9SWF9DVExfU1RBUlQgfCBBWF9SWF9DVExfQUIgfCBBWF9SWF9DVExfSVBFKTtcbitcdGRhdGEtXHUwMDNlcnhjdGwgPSAoQVhfUlhfQ1RMX1NUQVJUIHwgQVhfUlhfQ1RMX0FCIHwgQVhfUlhfQ1RMX0RST1BDUkNFUlIpO1xuK1x0aWYgKGRhdGEtXHUwMDNlaXBfYWxpZ24pXG4rXHRcdGRhdGEtXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX0lQRTtcbiBcbiBcdGlmIChuZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSB7XG4gXHRcdGRhdGEtXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX1BSTztcbkBAIC05MDksNiArMTM3NSw3IEBAIGF4ODgxNzlfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIHtcbiBcdHU4IHRtcDtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4rXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFx0bmV0ZGV2X2ZlYXR1cmVzX3QgY2hhbmdlZCA9IG5ldC1cdTAwM2VmZWF0dXJlcyBeIGZlYXR1cmVzO1xuIFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfSVBfQ1NVTSkge1xuQEAgLTkyOCw2ICsxMzk1LDM0IEBAIGF4ODgxNzlfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0XHR0bXAgXj0gQVhfUlhDT0VfSVAgfCBBWF9SWENPRV9UQ1AgfCBBWF9SWENPRV9VRFAgfFxuIFx0XHQgICAgICAgQVhfUlhDT0VfVENQVjYgfCBBWF9SWENPRV9VRFBWNjtcbiBcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWENPRV9DVEwsIDEsIDEsIFx1MDAyNnRtcCk7XG4rXHRcdGRhdGEtXHUwMDNlcnhfY2hlY2tzdW0gPSAhIShmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9SWENTVU0pO1xuK1x0fVxuK1xuK1x0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikge1xuK1x0XHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZ0bXApO1xuK1x0XHR0bXAgXj0gQVhfVkxBTl9DT05UUk9MX1ZGRTtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFx1MDAyNnRtcCk7XG4rXHRcdGlmIChmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XG4rXHRcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIDI1NjsgaSsrKSB7XG4rXHRcdFx0XHR1MTYgdG1wMTY7XG4rXHRcdFx0XHQvKiBBZGRyZXNzICovXG4rXHRcdFx0XHR0bXAgPSBpO1xuK1x0XHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MsXG4rXHRcdFx0XHRcdFx0ICAxLCAxLCBcdTAwMjZ0bXApO1xuK1x0XHRcdFx0LyogRGF0YSAqL1xuK1x0XHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLFxuK1x0XHRcdFx0XHRcdCAgMiwgMiwgXHUwMDI2dG1wMTYpO1xuK1x0XHRcdFx0dG1wID0gQVhfVkxBTl9DT05UUk9MX1dFO1xuK1x0XHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsXG4rXHRcdFx0XHRcdFx0ICAxLCAxLCBcdTAwMjZ0bXApO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYKSB7XG4rXHRcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFx1MDAyNnRtcCk7XG4rXHRcdHRtcCBePSBBWF9WTEFOX0NPTlRST0xfVlNPO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2dG1wKTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTk5NSw2ICsxNDkwLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBheDg4MTc5X25ldGRldl9vcHMgPSB7XG4gXHQubmRvX2V0aF9pb2N0bFx0XHQ9IHVzYm5ldF9taWlfaW9jdGwsXG4gXHQubmRvX3NldF9yeF9tb2RlXHQ9IGF4ODgxNzlfc2V0X211bHRpY2FzdCxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzXHQ9IGF4ODgxNzlfc2V0X2ZlYXR1cmVzLFxuK1x0Lm5kb192bGFuX3J4X2FkZF92aWRcdD0gYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZCxcbitcdC5uZG9fdmxhbl9yeF9raWxsX3ZpZFx0PSBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGVja19lZXByb20oc3RydWN0IHVzYm5ldCAqZGV2KVxuQEAgLTEyOTMsNiArMTc5MCwxNyBAQCBzdGF0aWMgaW50IGF4ODgxNzlfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFxuIFx0ZGV2LVx1MDAzZWRyaXZlcl9wcml2ID0gYXgxNzlfZGF0YTtcbiBcbitcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DSElQX1NUQVRVUyxcbitcdFx0XHQgICAgICAgMSwgMSwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfbm9kZXY7XG4rXG4rXHRheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9IChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwMjYgMHhmMCkgXHUwMDNlXHUwMDNlIDQ7XG4rXHRheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkID0gMDtcbitcdGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPSAxO1xuK1x0YXgxNzlfZGF0YS1cdTAwM2VlZXByb21fcmVhZF9jbWQgPSBBWF9BQ0NFU1NfRUVQUk9NO1xuK1x0YXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2sgPSAyO1xuK1xuIFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2YXg4ODE3OV9uZXRkZXZfb3BzO1xuIFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNmF4ODgxNzlfZXRodG9vbF9vcHM7XG4gXHRkZXYtXHUwMDNlbmV0LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDg7XG5AQCAtMTMxNyw2ICsxODI1LDEyMCBAQCBzdGF0aWMgaW50IGF4ODgxNzlfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0YXg4ODE3OV9yZXNldChkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX25vZGV2OlxuK1x0a2ZyZWUoYXgxNzlfZGF0YSk7XG4rXHRheDE3OV9kYXRhID0gTlVMTDtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYXg4ODE3OWFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuK3tcbitcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogQ2hlY2sgaWYgdmVuZG9yIGNvbmZpZ3VyYXRpb24gKi9cbitcdGlmICh1ZGV2LVx1MDAzZWFjdGNvbmZpZy1cdTAwM2VkZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcIlN3aXRjaGluZyB0byB2ZW5kb3IgbW9kZVxcblwiKTtcbitcdFx0dXNiX2RyaXZlcl9zZXRfY29uZmlndXJhdGlvbih1ZGV2LCAxKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGF4MTc5X2RhdGEgPSBremFsbG9jX29iaigqYXgxNzlfZGF0YSk7XG4rXHRpZiAoIWF4MTc5X2RhdGEpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0ZGV2LVx1MDAzZWRyaXZlcl9wcml2ID0gYXgxNzlfZGF0YTtcbitcbitcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DSElQX1NUQVRVUyxcbitcdFx0XHQgICAgICAgMSwgMSwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfbm9kZXY7XG4rXG4rXHRheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9IChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwMjYgMHhmMCkgXHUwMDNlXHUwMDNlIDQ7XG4rXHRheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkID0gMDtcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XG4rXHRcdGlmICh1ZGV2LVx1MDAzZWRlc2NyaXB0b3IuYmNkRGV2aWNlID09IDB4MzAwKVxuK1x0XHRcdGF4MTc5X2RhdGEtXHUwMDNlaXNfYXg4ODc3MmQgPSAxO1xuK1x0fVxuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIDM7IGkrKykge1xuK1x0XHRyZXQgPSBheDg4MTc5X3JlYWRfY21kKGRldiwgQVg4ODE3OUFfQUNDRVNTX0JMLCAoMHhGRCArIGkpLFxuK1x0XHRcdFx0ICAgICAgIDEsIDEsIFx1MDAyNmF4MTc5X2RhdGEtXHUwMDNlZndfdmVyc2lvbltpXSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0YXgxNzlfZGF0YS1cdTAwM2Vmd192ZXJzaW9uW2ldID0gMHhmZjtcbitcdH1cbitcdG5ldGRldl9pbmZvKGRldi1cdTAwM2VuZXQsIFwiQVg4ODE3OUEvMjc5Lzc3MkQgQ2hpcCBWZXJzaW9uOiAleCwgRlc6ICVkLiVkLiVkLiVkXFxuXCIsXG4rXHRcdCAgICBheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbixcbitcdFx0ICAgIGF4MTc5X2RhdGEtXHUwMDNlZndfdmVyc2lvblswXSwgYXgxNzlfZGF0YS1cdTAwM2Vmd192ZXJzaW9uWzFdLFxuK1x0XHQgICAgYXgxNzlfZGF0YS1cdTAwM2Vmd192ZXJzaW9uWzJdLCBheDE3OV9kYXRhLVx1MDAzZWZ3X3ZlcnNpb25bM10pO1xuK1xuK1x0LyogVGhlIEFYODgyNzkgcmVxdWlyZXMgYm90aCB0aGUgQVhfUlhfQ1RMX0lQRSBhbmQgQVhfUlhfQ1RMX0RST1BDUkNFUlJcbitcdCAqIGJpdHMgc2V0IGluIEFYX1JYX0NUTCBmb3IgY3JlYXRpbmcgY29ycmVjdCBSWC1VUkJzLiBBWF9SWF9DVExfRFJPUENSQ0VSUlxuK1x0ICogaXMgYW55d2F5IHNldCBmb3IgYWxsIGNoaXBzLCBtYWtlIHN1cmUgQVhfUlhfQ1RMX0lQRSBpcyBzZXQgdmlhIGlwX2FsaWduLlxuK1x0ICogQWxzbyBjb25maWd1cmUgZWVwcm9tIGFjY2VzcyBwYXJhbWV0ZXJzLlxuK1x0ICovXG4rXHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4rXHRcdGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPSAxO1xuK1x0XHRheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9yZWFkX2NtZCA9IEFYODgxNzlBX0ZMQVNIX1JFQUQ7XG4rXHRcdGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrID0gMjU2O1xuK1x0fSBlbHNlIHtcbitcdFx0YXgxNzlfZGF0YS1cdTAwM2VpcF9hbGlnbiA9IDA7XG4rXHRcdGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX3JlYWRfY21kID0gQVhfQUNDRVNTX0VGVVM7XG4rXHRcdGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrID0gMjA7XG4rXHR9XG4rXG4rXHRkZXYtXHUwMDNlbmV0LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZheDg4MTc5X25ldGRldl9vcHM7XG4rXHRkZXYtXHUwMDNlbmV0LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2YXg4ODE3OV9ldGh0b29sX29wcztcbitcdGRldi1cdTAwM2VuZXQtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gODtcbitcdGRldi1cdTAwM2VuZXQtXHUwMDNlbmVlZGVkX3RhaWxyb29tID0gODtcbitcdGRldi1cdTAwM2VuZXQtXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xuK1x0ZGV2LVx1MDAzZWhhcmRfbXR1ID0gOSAqIDEwMjQ7XG4rXHRkZXYtXHUwMDNlbmV0LVx1MDAzZW1heF9tdHUgPSBkZXYtXHUwMDNlaGFyZF9tdHUgLSBkZXYtXHUwMDNlbmV0LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcbitcdC8qIEluaXRpYWxpemUgTUlJIHN0cnVjdHVyZSAqL1xuK1x0ZGV2LVx1MDAzZW1paS5kZXYgPSBkZXYtXHUwMDNlbmV0O1xuK1x0ZGV2LVx1MDAzZW1paS5tZGlvX3JlYWQgPSBheDg4MTc5X21kaW9fcmVhZDtcbitcdGRldi1cdTAwM2VtaWkubWRpb193cml0ZSA9IGF4ODgxNzlfbWRpb193cml0ZTtcbitcdGRldi1cdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweGZmO1xuK1x0ZGV2LVx1MDAzZW1paS5yZWdfbnVtX21hc2sgPSAweGZmO1xuK1x0ZGV2LVx1MDAzZW1paS5waHlfaWQgPSAweDAzO1xuK1x0aWYgKCFheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkKVxuK1x0XHRkZXYtXHUwMDNlbWlpLnN1cHBvcnRzX2dtaWkgPSAxO1xuK1xuK1x0ZGV2LVx1MDAzZW5ldC1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcbitcdFx0XHQgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU08gfFxuK1x0XHRcdCAgICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfFxuK1x0XHRcdCAgICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcbitcbitcdGRldi1cdTAwM2VuZXQtXHUwMDNlaHdfZmVhdHVyZXMgfD0gZGV2LVx1MDAzZW5ldC1cdTAwM2VmZWF0dXJlcztcbitcbitcdGRldi1cdTAwM2VuZXQtXHUwMDNldmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxuK1x0XHRcdFx0ICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU087XG4rXG4rXHRuZXRpZl9zZXRfdHNvX21heF9zaXplKGRldi1cdTAwM2VuZXQsIDE2Mzg0KTtcbitcbitcdC8qIEVuYWJsZSBUcmFuc21pc3Npb24gb2YgTGluayBTcGVlZCBieXRlIGluIGludGVycnVwdCBVUkIgKi9cbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfRldfTU9ERSwgQVhfRldfTU9ERV8xNzlBLCAwLCAwLCBOVUxMKTtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfUkVMT0FEX0VFUFJPTV9FRlVTRSwgMCwgMCwgMCwgTlVMTCk7XG4rXG4rXHQvKiBSZWFkIE1BQyBhZGRyZXNzIGZyb20gRFRCIG9yIEFTSVggY2hpcCAqL1xuK1x0YXg4ODE3OV9nZXRfbWFjX2FkZHIoZGV2KTtcbitcdG1lbWNweShkZXYtXHUwMDNlbmV0LVx1MDAzZXBlcm1fYWRkciwgZGV2LVx1MDAzZW5ldC1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX25vZGV2OlxuK1x0a2ZyZWUoYXgxNzlfZGF0YSk7XG4rXHRheDE3OV9kYXRhID0gTlVMTDtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGF4ODgxNzlfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG5AQCAtMTMzOCw2ICsxOTYwLDIyIEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRrZnJlZShheDE3OV9kYXRhKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYXg4ODE3OWFfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4re1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbitcdHUxNiB0bXAxNjtcbitcdHU4IHRtcDg7XG4rXG4rXHQvKiBDb25maWd1cmUgUlggY29udHJvbCByZWdpc3RlciA9XHUwMDNlIHN0b3Agb3BlcmF0aW9uICovXG4rXHR0bXAxNiA9IEFYX1JYX0NUTF9TVE9QO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsIFx1MDAyNnRtcDE2KTtcbitcbitcdHRtcDggPSAwO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnRtcDgpO1xuK1xuK1x0a2ZyZWUoYXgxNzlfZGF0YSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gYXg4ODE3OV9yeF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKnBrdF9oZHIpXG4ge1xuQEAgLTEzNTQsNiArMTk5MiwyMSBAQCBheDg4MTc5X3J4X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqcGt0X2hkcilcbiBcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBheDg4MTc5YV9yeF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgcGt0X2Rlc2MpXG4re1xuK1x0dTMyIHBrdF90eXBlO1xuK1xuK1x0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XG4rXHQvKiBjaGVja3N1bSBlcnJvciBiaXQgaXMgc2V0ICovXG4rXHRpZiAocGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MNF9FUlIgfHwgcGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MM19FUlIpXG4rXHRcdHJldHVybjtcbitcbitcdHBrdF90eXBlID0gcGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MNF9UWVBFX01BU0s7XG4rXHQvKiBJdCBtdXN0IGJlIGEgVENQIG9yIFVEUCBwYWNrZXQgd2l0aCBhIHZhbGlkIGNoZWNrc3VtICovXG4rXHRpZiAocGt0X3R5cGUgPT0gQVgxNzlBX1JYX1BEX0w0X1RDUCB8fCBwa3RfdHlwZSA9PSBBWDE3OUFfUlhfUERfTDRfVURQKVxuK1x0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYXg4ODE3OV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKmF4X3NrYjtcbkBAIC0xNDcyLDYgKzIxMjUsMTIxIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBheDg4MTc5YV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbitcdHN0cnVjdCBza19idWZmICpheF9za2I7XG4rXHR1MzIgaGRyX29mZiwgcGt0X2VuZDtcbitcdHU2NCAqcGt0X2Rlc2NfcHRyO1xuK1x0dTE2IHZsYW5fdGFnO1xuK1x0dTE2IHBrdF9jbnQ7XG4rXHR1NjQgcnhfaGRyO1xuK1xuK1x0LyogU0tCIGNvbnRlbnRzIGZvciBBWDE3OUEtYmFzZWQgY2hpcHM6XG4rXHQgKiAgIFx1MDAzY3BhY2tldCAxXHUwMDNlXG4rXHQgKiAgIC4uLlxuK1x0ICogICBcdTAwM2NwYWNrZXQgTlx1MDAzZVxuK1x0ICogICBcdTAwM2NwZXItcGFja2V0IG1ldGFkYXRhIGVudHJ5IDFcdTAwM2VcbitcdCAqICAgLi4uXG4rXHQgKiAgIFx1MDAzY3Blci1wYWNrZXQgbWV0YWRhdGEgZW50cnkgTlx1MDAzZVxuK1x0ICogICBcdTAwM2NyeF9oZHJcdTAwM2VcbitcdCAqXG4rXHQgKiB3aGVyZTpcbitcdCAqICAgXHUwMDNjcGFja2V0IE5cdTAwM2UgY29udGFpbnMgcGt0X2xlbiBkYXRhIGJ5dGVzIGFuZCBwYWRkaW5nOlxuK1x0ICpcdFx0MiBieXRlcyBvZiBJUCBhbGlnbm1lbnQgKG9wdGlvbmFsLCBkZXBlbmRzIG9uIEFYX1JYX0NUTF9JUEUgZmxhZylcbitcdCAqXHRcdHBhY2tldCBkYXRhIHJlY2VpdmVkXG4rXHQgKlx0XHRvcHRpb25hbCBwYWRkaW5nIHRvIDgtYnl0ZXMgYm91bmRhcnlcbitcdCAqICAgXHUwMDNjcGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSBOXHUwMDNlIGNvbnRhaW5zIDggYnl0ZXM6XG4rXHQgKlx0XHRwa3RfbGVuIGFuZCBmaWVsZHMgQVhfUlhIRFJfKlxuK1x0ICogICBcdTAwM2NyeC1oZHJcdTAwM2VcdGNvbnRhaW5zIDggYnl0ZXM6XG4rXHQgKlx0XHRwa3RfY250IGFuZCBoZHJfb2ZmIChvZmZzZXQgb2YgXHUwMDNjcGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSAxXHUwMDNlKVxuK1x0ICpcbitcdCAqIHBrdF9jbnQgaXMgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHBlci1wYWNrZXQgbWV0YWRhdGEgYXJyYXkuXG4rXHQgKi9cbitcbitcdGlmICghc2tiIHx8IHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihyeF9oZHIpKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdC8qIFJYIERlc2NyaXB0b3IgSGVhZGVyICovXG4rXHRza2JfdHJpbShza2IsIHNrYi1cdTAwM2VsZW4gLSBzaXplb2YocnhfaGRyKSk7XG4rXHRyeF9oZHIgPSBsZTY0X3RvX2NwdXAoKHU2NCAqKXNrYl90YWlsX3BvaW50ZXIoc2tiKSk7XG4rXG4rXHQvKiBDaGVjayB0aGVzZSBwYWNrZXRzICovXG4rXHRoZHJfb2ZmID0gKHJ4X2hkciBcdTAwMjYgQVgxNzlBX1JYX0RIX0RFU0NfT0ZGU0VUX01BU0spIFx1MDAzZVx1MDAzZSBBWDE3OUFfUlhfREhfREVTQ19PRkZTRVRfU0hJRlQ7XG4rXHRwa3RfY250ID0gcnhfaGRyIFx1MDAyNiBBWDE3OUFfUlhfREhfUEtUX0NOVF9NQVNLO1xuK1xuK1x0LyogQ29uc2lzdGVuY3kgY2hlY2sgaGVhZGVyIHBvc2l0aW9uICovXG4rXHRpZiAoaGRyX29mZiAhPSBza2ItXHUwMDNlbGVuIC0gKHBrdF9jbnQgKiBzaXplb2YocnhfaGRyKSkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0LyogTWFrZSBzdXJlIHRoYXQgdGhlIGJvdW5kcyBvZiB0aGUgbWV0YWRhdGEgYXJyYXkgYXJlIGluc2lkZSB0aGUgU0tCXG4rXHQgKiAoYW5kIGluIGZyb250IG9mIHRoZSBjb3VudGVyIGF0IHRoZSBlbmQpLlxuK1x0ICovXG4rXHRpZiAocGt0X2NudCAqIDggKyBoZHJfb2ZmIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdC8qIFBhY2tldHMgbXVzdCBub3Qgb3ZlcmxhcCB0aGUgbWV0YWRhdGEgYXJyYXkgKi9cbitcdHNrYl90cmltKHNrYiwgaGRyX29mZik7XG4rXG4rXHRpZiAoIXBrdF9jbnQpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0LyogR2V0IHRoZSBmaXJzdCBSWCBwYWNrZXQgZGVzY3JpcHRvciAqL1xuK1x0cGt0X2Rlc2NfcHRyID0gKHU2NCAqKShza2ItXHUwMDNlZGF0YSArIGhkcl9vZmYpO1xuK1xuK1x0cGt0X2VuZCA9IDA7XG4rXHR3aGlsZSAocGt0X2NudC0tKSB7XG4rXHRcdHU2NCBwa3RfZGVzYyA9IGxlNjRfdG9fY3B1cChwa3RfZGVzY19wdHIpO1xuK1x0XHR1MzIgcGt0X2xlbl9wbHVzX3BhZGQ7XG4rXHRcdHUzMiBwa3RfbGVuO1xuK1xuK1x0XHRwa3RfbGVuID0gKHUzMikoKHBrdF9kZXNjIFx1MDAyNiBBWDE3OUFfUlhfUERfTEVOX01BU0spIFx1MDAzZVx1MDAzZSBBWDE3OUFfUlhfUERfTEVOX1NISUZUKVxuK1x0XHRcdCAgLSAoYXgxNzlfZGF0YS1cdTAwM2VpcF9hbGlnbiA/IDIgOiAwKTtcbitcdFx0cGt0X2xlbl9wbHVzX3BhZGQgPSAoKHBrdF9sZW4gKyA3ICsgKGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPyAyIDogMCkpIFx1MDAyNiAweDdGRkY4KTtcbitcbitcdFx0cGt0X2VuZCArPSBwa3RfbGVuX3BsdXNfcGFkZDtcbitcdFx0aWYgKHBrdF9lbmQgXHUwMDNlIGhkcl9vZmYgfHwgKHBrdF9jbnQgPT0gMCBcdTAwMjZcdTAwMjYgcGt0X2VuZCAhPSBoZHJfb2ZmKSlcbitcdFx0XHRnb3RvIGVycjtcbitcbitcdFx0aWYgKHBrdF9kZXNjIFx1MDAyNiBBWDE3OUFfUlhfUERfRFJPUCB8fCAhKHBrdF9kZXNjIFx1MDAyNiBBWDE3OUFfUlhfUERfUlhfT0spIHx8XG4rXHRcdCAgICBwa3RfbGVuIFx1MDAzZSAoZGV2LVx1MDAzZWhhcmRfbXR1ICsgQVgxNzlBX1JYX0hXX1BBRCkpIHtcbitcdFx0XHRza2JfcHVsbChza2IsIHBrdF9sZW5fcGx1c19wYWRkKTtcbitcbitcdFx0XHQvKiBOZXh0IFJYIFBhY2tldCBEZXNjcmlwdG9yICovXG4rXHRcdFx0cGt0X2Rlc2NfcHRyKys7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0YXhfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihkZXYtXHUwMDNlbmV0LCBwa3RfbGVuKTtcbitcdFx0aWYgKCFheF9za2IpXG4rXHRcdFx0Z290byBlcnI7XG4rXG4rXHRcdHNrYl9wdXQoYXhfc2tiLCBwa3RfbGVuKTtcbitcdFx0bWVtY3B5KGF4X3NrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlZGF0YSArIChheDE3OV9kYXRhLVx1MDAzZWlwX2FsaWduID8gQVgxNzlBX1JYX0hXX1BBRCA6IDApLFxuK1x0XHQgICAgICAgcGt0X2xlbik7XG4rXG4rXHRcdGlmIChheDE3OV9kYXRhLVx1MDAzZXJ4X2NoZWNrc3VtKVxuK1x0XHRcdGF4ODgxNzlhX3J4X2NoZWNrc3VtKGF4X3NrYiwgcGt0X2Rlc2MpO1xuK1xuK1x0XHRpZiAocGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9WTEFOKSB7XG4rXHRcdFx0dmxhbl90YWcgPSBwa3RfZGVzYyBcdTAwM2VcdTAwM2UgQVgxNzlBX1JYX1BEX1ZMQU5fU0hJRlQ7XG4rXHRcdFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhheF9za2IsIGh0b25zKEVUSF9QXzgwMjFRKSxcbitcdFx0XHRcdFx0ICAgICAgIHZsYW5fdGFnIFx1MDAyNiBWTEFOX1ZJRF9NQVNLKTtcbitcdFx0fVxuK1xuK1x0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIGF4X3NrYik7XG4rXHRcdHNrYl9wdWxsKHNrYiwgcGt0X2xlbl9wbHVzX3BhZGQpO1xuK1xuK1x0XHQvKiBOZXh0IFJYIFBhY2tldCBIZWFkZXIgKi9cbitcdFx0cGt0X2Rlc2NfcHRyKys7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMTtcbitcbitlcnI6XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBza19idWZmICpcbiBheDg4MTc5X3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpXG4ge1xuQEAgLTE1MDUsNiArMjI3Myw1OSBAQCBheDg4MTc5X3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpXG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuK2F4ODgxNzlhX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpXG4re1xuK1x0dTY0IHR4X2Rlc2MgPSBza2ItXHUwMDNlbGVuIFx1MDAyNiBBWDE3OUFfVFhfREVTQ19MRU5fTUFTSztcbitcdGludCBmcmFtZV9zaXplID0gZGV2LVx1MDAzZW1heHBhY2tldDtcbitcdHN0cnVjdCBza19idWZmICpheF9za2I7XG4rXHR1NjQgKnR4X2Rlc2NfcHRyO1xuK1x0aW50IHBhZGRpbmdfc2l6ZTtcbitcdGludCBoZWFkcm9vbTtcbitcdGludCB0YWlscm9vbTtcbitcdHUxNiB0Y2kgPSAwO1xuK1xuK1x0LyogVFNPIE1TUyAqL1xuK1x0dHhfZGVzYyB8PSAoKHU2NCkoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb19zaXplIFx1MDAyNiBBWDE3OUFfVFhfREVTQ19NU1NfTUFTSykpIFx1MDAzY1x1MDAzY1xuK1x0XHQgICBBWDE3OUFfVFhfREVTQ19NU1NfU0hJRlQ7XG4rXG4rXHRoZWFkcm9vbSA9IChza2ItXHUwMDNlbGVuICsgc2l6ZW9mKHR4X2Rlc2MpKSAlIDg7XG4rXHRwYWRkaW5nX3NpemUgPSBoZWFkcm9vbSA/IDggLSBoZWFkcm9vbSA6IDA7XG4rXG4rXHRpZiAoKChza2ItXHUwMDNlbGVuICsgc2l6ZW9mKHR4X2Rlc2MpICsgcGFkZGluZ19zaXplKSAlIGZyYW1lX3NpemUpID09IDApIHtcbitcdFx0cGFkZGluZ19zaXplICs9IDg7XG4rXHRcdHR4X2Rlc2MgfD0gQVgxNzlBX1RYX0RFU0NfRFJPUF9QQUREO1xuK1x0fVxuK1xuK1x0aWYgKChkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCkgXHUwMDI2XHUwMDI2ICh2bGFuX2dldF90YWcoc2tiLCBcdTAwMjZ0Y2kpIFx1MDAzZT0gMCkpIHtcbitcdFx0dHhfZGVzYyB8PSBBWDE3OUFfVFhfREVTQ19WTEFOO1xuK1x0XHR0eF9kZXNjIHw9ICgodTY0KXRjaSBcdTAwMjYgQVgxNzlBX1RYX0RFU0NfVkxBTl9NQVNLKSBcdTAwM2NcdTAwM2MgQVgxNzlBX1RYX0RFU0NfVkxBTl9TSElGVDtcbitcdH1cbitcbitcdGlmICghZGV2LVx1MDAzZWNhbl9kbWFfc2cgXHUwMDI2XHUwMDI2IChkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1NHKSBcdTAwMjZcdTAwMjYgc2tiX2xpbmVhcml6ZShza2IpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7XG4rXHR0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpO1xuK1xuK1x0aWYgKCEoaGVhZHJvb20gXHUwMDNlPSBzaXplb2YodHhfZGVzYykgXHUwMDI2XHUwMDI2IHRhaWxyb29tIFx1MDAzZT0gcGFkZGluZ19zaXplKSkge1xuK1x0XHRheF9za2IgPSBza2JfY29weV9leHBhbmQoc2tiLCBzaXplb2YodHhfZGVzYyksIHBhZGRpbmdfc2l6ZSwgZmxhZ3MpO1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0XHRza2IgPSBheF9za2I7XG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1x0aWYgKHBhZGRpbmdfc2l6ZSAhPSAwKVxuK1x0XHRza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nX3NpemUpO1xuK1x0LyogQ29weSBUWCBoZWFkZXIgKi9cbitcdHR4X2Rlc2NfcHRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YodHhfZGVzYykpO1xuK1x0KnR4X2Rlc2NfcHRyID0gY3B1X3RvX2xlNjQodHhfZGVzYyk7XG4rXG4rXHR1c2JuZXRfc2V0X3NrYl90eF9zdGF0cyhza2IsIDEsIDApO1xuK1xuK1x0cmV0dXJuIHNrYjtcbit9XG4rXG4gc3RhdGljIGludCBheDg4MTc5X2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuIHtcbiBcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5AQCAtMTU4MCw3MyArMjQwMSwzNDMgQEAgc3RhdGljIGludCBheDg4MTc5X2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGF4ODgxNzlhX2J1bGtpbl9jb25maWcoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBsaW5rX3N0cylcbit7XG4rXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1x0Y29uc3Qgc3RydWN0IGF4X2J1bGtpbl9zZXR0aW5ncyAqYnVsa2luX2RhdGE7XG4rXHRpbnQgaW5kZXggPSAwO1xuK1xuK1x0c3dpdGNoIChheDE3OV9kYXRhLVx1MDAzZXNwZWVkKSB7XG4rXHRjYXNlIEVUSEVSX0xJTktfMjUwMDpcdC8qIEFYODgyNzkgb25seSAqL1xuK1x0XHRpbmRleCA9IDA7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBFVEhFUl9MSU5LXzEwMDA6XHQvKiBBWDg4Mjc5IFx1MDAyNiBBWDg4MTc4QSAqL1xuK1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4rXHRcdFx0aWYgKGxpbmtfc3RzIFx1MDAyNiBBWF9VU0JfU1MpXG4rXHRcdFx0XHRpbmRleCA9IDE7XG4rXHRcdFx0ZWxzZSBpZiAobGlua19zdHMgXHUwMDI2IEFYX1VTQl9IUylcbitcdFx0XHRcdGluZGV4ID0gMjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRpZiAobGlua19zdHMgXHUwMDI2IEFYX1VTQl9TUylcbitcdFx0XHRcdGluZGV4ID0gMDtcbitcdFx0XHRlbHNlIGlmIChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX0hTKVxuK1x0XHRcdFx0aW5kZXggPSAxO1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBFVEhFUl9MSU5LXzEwMDpcbitcdFx0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHRcdGlmIChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX1NTKVxuK1x0XHRcdFx0aW5kZXggPSAzO1xuK1x0XHRcdGVsc2UgaWYgKGxpbmtfc3RzIFx1MDAyNiBBWF9VU0JfSFMpXG4rXHRcdFx0XHRpbmRleCA9IDU7XG4rXHRcdFx0aWYgKCFheDE3OV9kYXRhLVx1MDAzZWZ1bGxfZHVwbGV4KVxuK1x0XHRcdFx0aW5kZXgrKztcbitcdFx0fSBlbHNlIHtcbitcdFx0XHQvKiBBWDg4Mjc5QSBcdTAwMjYgQVg4ODI3N0QgKi9cbitcdFx0XHRpZiAobGlua19zdHMgXHUwMDI2IEFYX1VTQl9TUylcbitcdFx0XHRcdGluZGV4ID0gMjtcbitcdFx0XHRlbHNlIGlmIChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX0hTKVxuK1x0XHRcdFx0aW5kZXggPSA0O1xuK1x0XHRcdGlmICghYXgxNzlfZGF0YS1cdTAwM2VmdWxsX2R1cGxleClcbitcdFx0XHRcdGluZGV4Kys7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEVUSEVSX0xJTktfMTA6XG4rXHRcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpXG4rXHRcdFx0aW5kZXggPSA3O1xuK1x0XHRlbHNlXG4rXHRcdFx0aW5kZXggPSA2O1xuK1x0XHRicmVhaztcbitcbitcdGRlZmF1bHQ6XHQvKiBObyBsaW5rICovXG4rXHRcdGluZGV4ID0gMDtcbitcdH1cbitcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkgXHUwMDI2XHUwMDI2IChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX0ZTKSlcbitcdFx0aW5kZXggPSA3O1xuK1xuK1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHRidWxraW5fZGF0YSA9IEFYODgyNzlfQlVMS0lOX1NJWkU7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2Vpc19heDg4NzcyZClcbitcdFx0XHRidWxraW5fZGF0YSA9IEFYODg3NzJEX0JVTEtJTl9TSVpFO1xuK1x0XHRlbHNlXG4rXHRcdFx0YnVsa2luX2RhdGEgPSBBWDg4MTc5QV9CVUxLSU5fU0laRTtcbitcdH1cbitcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQlVMS0lOX1FDVFJMLCA1LCA1LCBcdTAwMjZidWxraW5fZGF0YVtpbmRleF0pO1xuK31cbitcbitzdGF0aWMgaW50IGF4ODgxNzlhX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuK3tcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4rXHR1OCB0bXA4LCBsaW5rX3N0cywgcmVnOFszXTtcbitcdHUxNiB0bXAxNiwgbW9kZSwgc3BlZWQ7XG4rXG4rXHRpZiAoIWF4MTc5X2RhdGEtXHUwMDNlbGluaykge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcImF4ODgxNzlhIC0gTGluayBzdGF0dXMgaXM6IDBcXG5cIik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogU3RvcCBSWC9UWCBmb3IgbGluayBjb25maWd1cmF0aW9uICovXG4rXHR0bXAxNiA9IEFYX1JYX0NUTF9TVE9QO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsIFx1MDAyNnRtcDE2KTtcbitcdHRtcDggPSAwO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUEFUSCwgMSwgMSwgXHUwMDI2dG1wOCk7XG4rXG4rXHR0bXA4ID0gMHhhNTtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0NEQ19ERUxBWV9UWCwgMSwgMSwgXHUwMDI2dG1wOCk7XG4rXG4rXHR0bXAxNiA9IDB4MDQxMDtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfTE9XLCAyLCAyLCBcdTAwMjZ0bXAxNik7XG4rXG4rXHR0bXA4ID0gMDtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfRVRIX1RYX0dBUCwgMSwgMSwgXHUwMDI2dG1wOCk7XG4rXG4rXHR0bXA4ID0gMHgwNztcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfRVA1X0VIUiwgMSwgMSwgXHUwMDI2dG1wOCk7XG4rXG4rXHR0bXA4ID0gMHgyOCB8IEFYX05FV19QQVVTRV9FTjtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTkVXX1BBVVNFX0NUUkwsIDEsIDEsIFx1MDAyNnRtcDgpO1xuK1xuK1x0bW9kZSA9IEFYX01FRElVTV9SRUNFSVZFX0VOIHwgQVhfTUVESVVNX1RYRkxPV19DVFJMRU4gfCBBWF9NRURJVU1fUlhGTE9XX0NUUkxFTjtcbitcbitcdC8qIExpbmsgaXMgdXAsIGJ1dCBzb21lIG9sZGVyIEFYODgxNzlBIEZXIHZlcnNpb25zIGRvIG5vdCBzZW5kIGxpbmsgc3BlZWRcbitcdCAqIGFuZCBkdXBsZXggc3RhdHVzIGluIGludGVycnVwdCBVUkIsIHNvIHJlYWQgaXQgdmlhIE1JSVxuK1x0ICovXG4rXHRpZiAoIWF4MTc5X2RhdGEtXHUwMDNlc3BlZWQpIHtcbitcdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuK1xuK1x0XHRtaWlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MoXHUwMDI2ZGV2LVx1MDAzZW1paSwgXHUwMDI2Y21kKTtcbitcdFx0YXgxNzlfZGF0YS1cdTAwM2VmdWxsX2R1cGxleCA9IGNtZC5iYXNlLmR1cGxleDtcbitcdFx0c3dpdGNoIChjbWQuYmFzZS5zcGVlZCkge1xuK1x0XHRjYXNlIFNQRUVEXzEwMDA6XG4rXHRcdFx0YXgxNzlfZGF0YS1cdTAwM2VzcGVlZCA9IEVUSEVSX0xJTktfMTAwMDtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBTUEVFRF8xMDA6XG4rXHRcdFx0YXgxNzlfZGF0YS1cdTAwM2VzcGVlZCA9IEVUSEVSX0xJTktfMTAwO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFNQRUVEXzEwOlxuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGF4MTc5X2RhdGEtXHUwMDNlc3BlZWQgPSBFVEhFUl9MSU5LXzEwO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9O1xuK1x0fVxuK1xuK1x0c3BlZWQgPSAwO1xuK1x0c3dpdGNoIChheDE3OV9kYXRhLVx1MDAzZXNwZWVkKSB7XG4rXHRjYXNlIEVUSEVSX0xJTktfMjUwMDpcbitcdFx0cmVnOFswXSA9IDB4MDA7XG4rXHRcdHJlZzhbMV0gPSAweEY4O1xuK1x0XHRyZWc4WzJdID0gMHgwNztcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfVFhfUEFVU0UsIDMsIDMsIHJlZzgpO1xuK1xuK1x0XHRyZWc4WzBdID0gMHg3ODtcbitcdFx0cmVnOFsxXSA9IChBWF9MU09GQ19XQ05UXzdfQUNDRVNTIFx1MDAzY1x1MDAzYyA1KTtcbitcdFx0cmVnOFsyXSA9IDA7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DREMsIDMsIDMsIHJlZzgpO1xuK1xuK1x0XHRyZWc4WzBdID0gMHg0MDtcbitcdFx0cmVnOFsxXSA9IEFYX01BQ19NSVFGRkNUUkxfRk9STUFUIHwgQVhfTUFDX01JUUZGQ1RSTF9EUk9QX0NSQyB8IEFYX01BQ19MU09fRVJSX0VOO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19SWF9EQVRBX0NEQ19DTlQsIDIsIDIsIHJlZzgpO1xuK1xuK1x0XHR0bXA4ID0gQVhfWEdNSUlfRU47XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfQkZNX0RBVEEsIDEsIDEsIFx1MDAyNnRtcDgpO1xuK1xuK1x0XHR0bXA4ID0gMHgxQyB8IEFYX0xTT19FTkhBTkNFX0VOO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19MU09fRU5IQU5DRV9DVFJMLCAxLCAxLCBcdTAwMjZ0bXA4KTtcbitcbitcdFx0bW9kZSB8PSBBWF9NRURJVU1fR0lHQU1PREUgfCBBWF9NRURJVU1fRlVMTF9EVVBMRVg7XG4rXG4rXHRcdHNwZWVkID0gMjUwMDtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEVUSEVSX0xJTktfMTAwMDpcbitcdFx0bW9kZSB8PSBBWF9NRURJVU1fR0lHQU1PREU7XG4rXHRcdHNwZWVkID0gMTAwMDtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXG4rXHRjYXNlIEVUSEVSX0xJTktfMTAwOlxuK1x0XHRyZWc4WzBdID0gMHg3ODtcbitcdFx0cmVnOFsxXSA9IChBWF9MU09GQ19XQ05UXzdfQUNDRVNTIFx1MDAzY1x1MDAzYyA1KSB8IEFYX0dNSUlfQ1JDX0FQUEVORDtcbitcdFx0cmVnOFsyXSA9IDA7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DREMsIDMsIDMsIHJlZzgpO1xuK1xuK1x0XHR0bXA4ID0gMHg0MDtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfREFUQV9DRENfQ05ULCAxLCAxLCBcdTAwMjZ0bXA4KTtcbitcbitcdFx0c3BlZWQgPSBzcGVlZCA/IHNwZWVkIDogMTAwO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgRVRIRVJfTElOS18xMDpcbitcdFx0cmVnOFswXSA9IDB4RkE7XG4rXHRcdHJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyBcdTAwM2NcdTAwM2MgNSkgfCBBWF9HTUlJX0NSQ19BUFBFTkQ7XG4rXHRcdHJlZzhbMl0gPSAweEZGO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19SWF9TVEFUVVNfQ0RDLCAzLCAzLCByZWc4KTtcbitcbitcdFx0dG1wOCA9IDB4RkE7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMSwgMSwgXHUwMDI2dG1wOCk7XG4rXG4rXHRcdHNwZWVkID0gMTA7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIFBIWVNJQ0FMX0xJTktfU1RBVFVTLCAxLCAxLCBcdTAwMjZsaW5rX3N0cyk7XG4rXHRheDg4MTc5YV9idWxraW5fY29uZmlnKGRldiwgbGlua19zdHMpO1xuK1xuK1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzYyBBWF9WRVJTSU9OX0FYODgyNzkpIHtcbitcdFx0dG1wOCA9IDA7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfQkZNX0RBVEEsIDEsIDEsIFx1MDAyNnRtcDgpO1xuK1x0fVxuK1xuK1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlZnVsbF9kdXBsZXgpXG4rXHRcdG1vZGUgfD0gQVhfTUVESVVNX0ZVTExfRFVQTEVYO1xuK1xuK1x0aWYgKGRldi1cdTAwM2VuZXQtXHUwMDNlbXR1IFx1MDAzZSAxNTAwKVxuK1x0XHRtb2RlIHw9IEFYX01FRElVTV9KVU1CT19FTjtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcdTAwMjZtb2RlKTtcbitcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCBcdTAwMjZheDE3OV9kYXRhLVx1MDAzZXJ4Y3RsKTtcbitcbitcdHRtcDggPSBBWF9NQUNfUlhfUEFUSF9SRUFEWSB8IEFYX01BQ19UWF9QQVRIX1JFQURZO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUEFUSCwgMSwgMSwgXHUwMDI2dG1wOCk7XG4rXG4rXHRheDE3OV9kYXRhLVx1MDAzZWVlZV9lbmFibGVkID0gYXg4ODE3OV9jaGtfZWVlKGRldik7XG4rXG4rXHRuZXRpZl9jYXJyaWVyX29uKGRldi1cdTAwM2VuZXQpO1xuK1xuK1x0bmV0ZGV2X2luZm8oZGV2LVx1MDAzZW5ldCwgXCJheDg4MTc5YSAtIExpbmsgc3RhdHVzIGlzOiAxLCBMaW5rIHNwZWVkOiAlZCwgRHVwbGV4OiAlZFxcblwiLFxuK1x0XHQgICAgc3BlZWQsIGF4MTc5X2RhdGEtXHUwMDNlZnVsbF9kdXBsZXgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYXg4ODE3OV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4ge1xuLVx0dTggYnVmWzVdO1xuLVx0dTE2ICp0bXAxNjtcbi1cdHU4ICp0bXA7XG4gXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFx0c3RydWN0IGV0aHRvb2xfa2VlZSBlZWVfZGF0YTtcbitcdHUxNiAqdG1wMTY7XG4rXHR1OCBidWZbNV07XG4rXHR1OCAqdG1wO1xuIFxuIFx0dG1wMTYgPSAodTE2ICopYnVmO1xuIFx0dG1wID0gKHU4ICopYnVmO1xuIFxuIFx0LyogUG93ZXIgdXAgZXRoZXJuZXQgUEhZICovXG4tXHQqdG1wMTYgPSAwO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLCAyLCAyLCB0bXAxNik7XG4rXHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbitcdFx0KnRtcDE2ID0gMDtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLCAyLCAyLCB0bXAxNik7XG4gXG4tXHQqdG1wMTYgPSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsIDIsIDIsIHRtcDE2KTtcbi1cdG1zbGVlcCg1MDApO1xuK1x0XHQqdG1wMTYgPSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEhZUFdSX1JTVENUTCwgMiwgMiwgdG1wMTYpO1xuK1x0XHRtc2xlZXAoNTAwKTtcbiBcbi1cdCp0bXAgPSBBWF9DTEtfU0VMRUNUX0FDUyB8IEFYX0NMS19TRUxFQ1RfQkNTO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DTEtfU0VMRUNULCAxLCAxLCB0bXApO1xuLVx0bXNsZWVwKDIwMCk7XG4rXHRcdCp0bXAgPSBBWF9DTEtfU0VMRUNUX0FDUyB8IEFYX0NMS19TRUxFQ1RfQkNTO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NMS19TRUxFQ1QsIDEsIDEsIHRtcCk7XG4rXHRcdG1zbGVlcCgyMDApO1xuK1x0fSBlbHNlIHtcbitcdFx0KnRtcCA9IEFYX1BIWV9QT1dFUjtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIHRtcCk7XG4rXHRcdG1zbGVlcCgyNTApO1xuK1x0fVxuK1xuK1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHQqdG1wMTYgPSBheDg4MTc5X21kaW9fcmVhZChkZXYtXHUwMDNlbmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7XG4rXHRcdCp0bXAxNiBcdTAwMjY9IH4oQURWRVJUSVNFXzEwRlVMTCB8IEFEVkVSVElTRV8xMEhBTEYpO1xuK1x0XHQqdG1wMTYgfD0gQURWRVJUSVNFX1JFU1Y7IC8qIEFkdmVydGlzZSAyLjVHQml0IGxpbmsgKi9cbitcdFx0YXg4ODE3OV9tZGlvX3dyaXRlKGRldi1cdTAwM2VuZXQsIGRldi1cdTAwM2VtaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLCAqdG1wMTYpO1xuK1x0fVxuIFxuIFx0LyogRXRoZXJuZXQgUEhZIEF1dG8gRGV0YWNoKi9cbiBcdGF4ODgxNzlfYXV0b19kZXRhY2goZGV2KTtcbiBcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbitcdFx0KnRtcCA9IEFYX01BQ19FRkZfRU47XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0JVTEtfT1VUX0NUUkwsIDEsIDEsIHRtcCk7XG4rXG4rXHRcdCp0bXAxNiA9IDA7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCB0bXAxNik7XG4rXG4rXHRcdCp0bXAgPSAweDA0O1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMSwgMSwgdG1wKTtcbitcdFx0KnRtcCA9IDB4MTA7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfSElHSCwgMSwgMSwgdG1wKTtcbitcbitcdFx0KnRtcCA9IDA7XG4rXHRcdGlmIChkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpXG4rXHRcdFx0KnRtcCB8PSBBWF9WTEFOX0NPTlRST0xfVkZFO1xuK1x0XHRpZiAoZGV2LVx1MDAzZW5ldC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlgpXG4rXHRcdFx0KnRtcCB8PSBBWF9WTEFOX0NPTlRST0xfVlNPO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgdG1wKTtcbitcbitcdFx0KnRtcCA9IDB4ZmY7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0JNX0lOVF9NQVNLLCAxLCAxLCB0bXApO1xuK1xuK1x0XHQqdG1wID0gMDtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fUlhfRE1BX0NUTCwgMSwgMSwgdG1wKTtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fVFhfRE1BX0NUTCwgMSwgMSwgdG1wKTtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQVJDX0NUUkwsIDEsIDEsIHRtcCk7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1NXUF9DVFJMLCAxLCAxLCB0bXApO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19UWF9IRFJfQ0tTVU0sIDEsIDEsIHRtcCk7XG4rXHR9XG4rXG4gXHQvKiBSZWFkIE1BQyBhZGRyZXNzIGZyb20gRFRCIG9yIGFzaXggY2hpcCAqL1xuIFx0YXg4ODE3OV9nZXRfbWFjX2FkZHIoZGV2KTtcbiBcdG1lbWNweShkZXYtXHUwMDNlbmV0LVx1MDAzZXBlcm1fYWRkciwgZGV2LVx1MDAzZW5ldC1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuIFx0LyogUlggYnVsayBjb25maWd1cmF0aW9uICovXG4tXHRtZW1jcHkodG1wLCBcdTAwMjZBWDg4MTc5X0JVTEtJTl9TSVpFWzBdLCA1KTtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQlVMS0lOX1FDVFJMLCA1LCA1LCB0bXApO1xuLVxuLVx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMTAyNCAqIDIwO1xuLVxuLVx0KnRtcCA9IDB4MzQ7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMSwgMSwgdG1wKTtcbi1cbi1cdCp0bXAgPSAweDUyO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QQVVTRV9XQVRFUkxWTF9ISUdILFxuLVx0XHRcdCAgMSwgMSwgdG1wKTtcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuK1x0XHRtZW1jcHkodG1wLCBcdTAwMjZBWDg4MTc5X0JVTEtJTl9TSVpFWzBdLCA1KTtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9CVUxLSU5fUUNUUkwsIDUsIDUsIHRtcCk7XG4rXHRcdCp0bXAgPSAweDM0O1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMSwgMSwgdG1wKTtcbitcbitcdFx0KnRtcCA9IDB4NTI7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfSElHSCxcbitcdFx0XHRcdCAgMSwgMSwgdG1wKTtcbitcdFx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMTAyNCAqIDIwO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogVGhlIEJ1bGstUmVnaXN0ZXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIEFYODgxNzlBIGlzIGRvbmUgaW5cbitcdFx0ICogYXg4ODE3OWFfbGlua19yZXNldCgpLCBvbmNlIHRoZSBsaW5rIGlzIHVwIGZvciBhIGdpdmVuIGxpbmsgYW5kIFVTQi1zcGVlZC5cbitcdFx0ICovXG4rXHRcdGlmIChheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkKVxuK1x0XHRcdGRldi1cdTAwM2VyeF91cmJfc2l6ZSA9IDEwMjQgKiAyNDtcbitcdFx0ZWxzZVxuK1x0XHRcdGRldi1cdTAwM2VyeF91cmJfc2l6ZSA9IDEwMjQgKiA0ODtcbitcdH1cbiBcbiBcdC8qIEVuYWJsZSBjaGVja3N1bSBvZmZsb2FkICovXG4gXHQqdG1wID0gQVhfUlhDT0VfSVAgfCBBWF9SWENPRV9UQ1AgfCBBWF9SWENPRV9VRFAgfFxuIFx0ICAgICAgIEFYX1JYQ09FX1RDUFY2IHwgQVhfUlhDT0VfVURQVjY7XG4gXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYQ09FX0NUTCwgMSwgMSwgdG1wKTtcbitcdGF4MTc5X2RhdGEtXHUwMDNlcnhfY2hlY2tzdW0gPSAxO1xuIFxuIFx0KnRtcCA9IEFYX1RYQ09FX0lQIHwgQVhfVFhDT0VfVENQIHwgQVhfVFhDT0VfVURQIHxcbiBcdCAgICAgICBBWF9UWENPRV9UQ1BWNiB8IEFYX1RYQ09FX1VEUFY2O1xuIFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9UWENPRV9DVEwsIDEsIDEsIHRtcCk7XG4gXG4gXHQvKiBDb25maWd1cmUgUlggY29udHJvbCByZWdpc3RlciA9XHUwMDNlIHN0YXJ0IG9wZXJhdGlvbiAqL1xuLVx0KnRtcDE2ID0gQVhfUlhfQ1RMX0RST1BDUkNFUlIgfCBBWF9SWF9DVExfSVBFIHwgQVhfUlhfQ1RMX1NUQVJUIHxcbi1cdFx0IEFYX1JYX0NUTF9BUCB8IEFYX1JYX0NUTF9BTUFMTCB8IEFYX1JYX0NUTF9BQjtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCB0bXAxNik7XG4tXG4tXHQqdG1wID0gQVhfTU9OSVRPUl9NT0RFX1BNRVRZUEUgfCBBWF9NT05JVE9SX01PREVfUE1FUE9MIHxcbi1cdCAgICAgICBBWF9NT05JVE9SX01PREVfUldNUDtcbitcdGF4MTc5X2RhdGEtXHUwMDNlcnhjdGwgPSBBWF9SWF9DVExfRFJPUENSQ0VSUiB8IEFYX1JYX0NUTF9TVEFSVCB8XG4rXHRcdFx0ICAgIEFYX1JYX0NUTF9BUCB8IEFYX1JYX0NUTF9BTUFMTCB8IEFYX1JYX0NUTF9BQjtcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWlwX2FsaWduKVxuK1x0XHRheDE3OV9kYXRhLVx1MDAzZXJ4Y3RsIHw9IEFYX1JYX0NUTF9JUEU7XG4rXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VyeGN0bCk7XG4rXG4rXHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4rXHRcdCp0bXAgPSBBWF9NT05JVE9SX01PREVfUE1FVFlQRSB8IEFYX01PTklUT1JfTU9ERV9QTUVQT0wgfCBBWF9NT05JVE9SX01PREVfUldNUDtcbitcdGVsc2VcbitcdFx0KnRtcCA9IEFYX01PTklUT1JfTU9ERV9SV01QO1xuIFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NT05JVE9SX01PRCwgMSwgMSwgdG1wKTtcbiBcbiBcdC8qIENvbmZpZ3VyZSBkZWZhdWx0IG1lZGl1bSB0eXBlID1cdTAwM2UgZ2lnYSAqL1xuIFx0KnRtcDE2ID0gQVhfTUVESVVNX1JFQ0VJVkVfRU4gfCBBWF9NRURJVU1fVFhGTE9XX0NUUkxFTiB8XG4tXHRcdCBBWF9NRURJVU1fUlhGTE9XX0NUUkxFTiB8IEFYX01FRElVTV9GVUxMX0RVUExFWCB8XG4tXHRcdCBBWF9NRURJVU1fR0lHQU1PREU7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSxcbi1cdFx0XHQgIDIsIDIsIHRtcDE2KTtcbitcdFx0IEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX0ZVTExfRFVQTEVYO1xuK1x0aWYgKCFheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkKVxuK1x0XHQqdG1wMTYgfD0gQVhfTUVESVVNX0dJR0FNT0RFO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIHRtcDE2KTtcbiBcbiBcdC8qIENoZWNrIGlmIFdvTCBpcyBzdXBwb3J0ZWQgKi9cbiBcdGF4MTc5X2RhdGEtXHUwMDNld29sX3N1cHBvcnRlZCA9IDA7XG5AQCAtMTY1NCwxNiArMjc0NSwyOSBAQCBzdGF0aWMgaW50IGF4ODgxNzlfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuIFx0XHRcdCAgICAgMSwgMSwgXHUwMDI2dG1wKSBcdTAwM2UgMClcbiBcdFx0YXgxNzlfZGF0YS1cdTAwM2V3b2xfc3VwcG9ydGVkID0gV0FLRV9NQUdJQyB8IFdBS0VfUEhZO1xuIFxuLVx0YXg4ODE3OV9sZWRfc2V0dGluZyhkZXYpO1xuK1x0LyogRm9yIGNoaXBzIHN0YXJ0aW5nIHdpdGggQVg4ODE3OUEsIExFRFMgYXJlIGNvbmZpZ3VyZWQgYnkgdGhlIGFkYXB0ZXJcbitcdCAqIGZpcm13YXJlIGRpcmVjdGx5IGZyb20gRUVQUk9NL0VGVVNFIHZhbHVlc1xuK1x0ICovXG4rXHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4rXHRcdGF4ODgxNzlfbGVkX3NldHRpbmcoZGV2KTtcbiBcbiBcdGF4MTc5X2RhdGEtXHUwMDNlZWVlX2VuYWJsZWQgPSAwO1xuIFx0YXgxNzlfZGF0YS1cdTAwM2VlZWVfYWN0aXZlID0gMDtcbiBcbi1cdGF4ODgxNzlfZGlzYWJsZV9lZWUoZGV2KTtcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuK1x0XHRheDg4MTc5X2VlZV9jb25maWcoZGV2LCBmYWxzZSk7XG4gXG4tXHRheDg4MTc5X2V0aHRvb2xfZ2V0X2VlZShkZXYsIFx1MDAyNmVlZV9kYXRhKTtcbi1cdGxpbmttb2RlX3plcm8oZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7XG4tXHRheDg4MTc5X2V0aHRvb2xfc2V0X2VlZShkZXYsIFx1MDAyNmVlZV9kYXRhKTtcbitcdFx0YXg4ODE3OV9ldGh0b29sX2dldF9lZWUoZGV2LCBcdTAwMjZlZWVfZGF0YSk7XG4rXHRcdGxpbmttb2RlX3plcm8oZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7XG4rXHRcdGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgXHUwMDI2ZWVlX2RhdGEpO1xuK1x0fSBlbHNlIHtcbitcdFx0YXg4ODE3OV9lZWVfY29uZmlnKGRldiwgdHJ1ZSk7XG4rXHRcdGF4ODgxNzlfZXRodG9vbF9nZXRfZWVlKGRldiwgXHUwMDI2ZWVlX2RhdGEpO1xuK1x0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCwgZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7XG4rXHRcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSlcbitcdFx0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCwgZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7XG4rXHRcdGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgXHUwMDI2ZWVlX2RhdGEpO1xuK1x0fVxuIFxuIFx0LyogUmVzdGFydCBhdXRvbmVnICovXG4gXHRtaWlfbndheV9yZXN0YXJ0KFx1MDAyNmRldi1cdTAwM2VtaWkpO1xuQEAgLTE3MDcsNiArMjgxMSwyNCBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc3RvcChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBheDg4MTc5YV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldilcbit7XG4rXHR1MTYgcmVnMTY7XG4rXHR1OCByZWc4O1xuK1xuK1x0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwgMiwgMiwgXHUwMDI2cmVnMTYpO1xuK1x0cmVnMTYgXHUwMDI2PSB+QVhfTUVESVVNX1JFQ0VJVkVfRU47XG4rXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwgMiwgMiwgXHUwMDI2cmVnMTYpO1xuK1xuK1x0cmVnMTYgPSAwO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsIFx1MDAyNnJlZzE2KTtcbitcbitcdHJlZzggPSAwO1xuK1x0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgXHUwMDI2cmVnOCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTc5X2luZm8gPSB7XG4gXHQuZGVzY3JpcHRpb24gPSBcIkFTSVggQVg4ODE3OSBVU0IgMy4wIEdpZ2FiaXQgRXRoZXJuZXRcIixcbiBcdC5iaW5kID0gYXg4ODE3OV9iaW5kLFxuQEAgLTE3MzMsNiArMjg1NSw0NSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzhhX2luZm8gPSB7XG4gXHQudHhfZml4dXAgPSBheDg4MTc5X3R4X2ZpeHVwLFxuIH07XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTc5YV9pbmZvID0ge1xuK1x0LmRlc2NyaXB0aW9uID0gXCJBU0lYIEFYODgxNzlBIFVTQiAzLjIgR2lnYWJpdCBFdGhlcm5ldFwiLFxuK1x0LmJpbmQgPSBheDg4MTc5YV9iaW5kLFxuK1x0LnVuYmluZCA9IGF4ODgxNzlhX3VuYmluZCxcbitcdC5zdGF0dXMgPSBheDg4MTc5X3N0YXR1cyxcbitcdC5saW5rX3Jlc2V0ID0gYXg4ODE3OWFfbGlua19yZXNldCxcbitcdC5yZXNldCA9IGF4ODgxNzlfcmVzZXQsXG4rXHQuc3RvcCA9IGF4ODgxNzlhX3N0b3AsXG4rXHQuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYIHwgRkxBR19NVUxUSV9QQUNLRVQgfCBGTEFHX0FWT0lEX1VOTElOS19VUkJTLFxuK1x0LnJ4X2ZpeHVwID0gYXg4ODE3OWFfcnhfZml4dXAsXG4rXHQudHhfZml4dXAgPSBheDg4MTc5YV90eF9maXh1cCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODc3MmRfaW5mbyA9IHtcbitcdC5kZXNjcmlwdGlvbiA9IFwiQVNJWCBBWDg4NzcyRC9FIFVTQiAyLjAgRmFzdCBFdGhlcm5ldFwiLFxuK1x0LmJpbmQgPSBheDg4MTc5YV9iaW5kLFxuK1x0LnVuYmluZCA9IGF4ODgxNzlhX3VuYmluZCxcbitcdC5zdGF0dXMgPSBheDg4MTc5X3N0YXR1cyxcbitcdC5saW5rX3Jlc2V0ID0gYXg4ODE3OWFfbGlua19yZXNldCxcbitcdC5yZXNldCA9IGF4ODgxNzlfcmVzZXQsXG4rXHQuc3RvcCA9IGF4ODgxNzlhX3N0b3AsXG4rXHQuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYIHwgRkxBR19NVUxUSV9QQUNLRVQgfCBGTEFHX0FWT0lEX1VOTElOS19VUkJTLFxuK1x0LnJ4X2ZpeHVwID0gYXg4ODE3OWFfcnhfZml4dXAsXG4rXHQudHhfZml4dXAgPSBheDg4MTc5YV90eF9maXh1cCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODI3OV9pbmZvID0ge1xuK1x0LmRlc2NyaXB0aW9uID0gXCJBU0lYIEFYODgyNzkgVVNCIDMuMiAyLjVHaWdhYml0IEV0aGVybmV0XCIsXG4rXHQuYmluZCA9IGF4ODgxNzlhX2JpbmQsXG4rXHQudW5iaW5kID0gYXg4ODE3OWFfdW5iaW5kLFxuK1x0LnN0YXR1cyA9IGF4ODgxNzlfc3RhdHVzLFxuK1x0LmxpbmtfcmVzZXQgPSBheDg4MTc5YV9saW5rX3Jlc2V0LFxuK1x0LnJlc2V0ID0gYXg4ODE3OV9yZXNldCxcbitcdC5zdG9wID0gYXg4ODE3OWFfc3RvcCxcbitcdC5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVggfCBGTEFHX01VTFRJX1BBQ0tFVCB8IEZMQUdfQVZPSURfVU5MSU5LX1VSQlMsXG4rXHQucnhfZml4dXAgPSBheDg4MTc5YV9yeF9maXh1cCxcbitcdC50eF9maXh1cCA9IGF4ODgxNzlhX3R4X2ZpeHVwLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjeXByZXNzX0dYM19pbmZvID0ge1xuIFx0LmRlc2NyaXB0aW9uID0gXCJDeXByZXNzIEdYMyBTdXBlclNwZWVkIHRvIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlclwiLFxuIFx0LmJpbmQgPSBheDg4MTc5X2JpbmQsXG5AQCAtMTg3OCw2ICszMDM5LDE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXRfdW1jMjAwMHNwX2luZm8gPSB7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHByb2R1Y3RzW10gPSB7XG4ge1xuK1x0LyogQVNJWCBBWDg4MTc5QS9CIFVTQiAzLjIgR2lnYWJpdCBFdGhlcm5ldCAqL1xuK1x0VVNCX0RFVklDRV9WRVIoMHgwYjk1LCAweDE3OTAsIDB4MDIwMCwgMHgwMjAwKSxcbitcdC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKVx1MDAyNmF4ODgxNzlhX2luZm8sXG4rfSwge1xuK1x0LyogQVNJWCBBWDg4NzcyRCBVU0IgMi4wIDEwME1iaXQgRXRoZXJuZXQgKi9cbitcdFVTQl9ERVZJQ0VfVkVSKDB4MGI5NSwgMHgxNzkwLCAweDAzMDAsIDB4MDMwMCksXG4rXHQuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZylcdTAwMjZheDg4NzcyZF9pbmZvLFxuK30sIHtcbitcdC8qIEFTSVggQVg4ODI3OSBVU0IgMy4yIDIuNUdCaXQgRXRoZXJuZXQgKi9cbitcdFVTQl9ERVZJQ0VfVkVSKDB4MGI5NSwgMHgxNzkwLCAweDA0MDAsIDB4MDQwMCksXG4rXHQuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZylcdTAwMjZheDg4Mjc5X2luZm8sXG4rfSwge1xuIFx0LyogQVNJWCBBWDg4MTc5IDEwLzEwMC8xMDAwICovXG4gXHRVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDBiOTUsIDB4MTc5MCwgMHhmZiwgMHhmZiwgMCksXG4gXHQuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZylcdTAwMjZheDg4MTc5X2luZm8sXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowMToyNi41MjgyNTU0ODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjAxMTE4MDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFYODgxNzkgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgYGRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGxldCdzIGJyZWFrIGl0IGRvd24gZnJvbSBhIGZ1bmN0aW9uYWwgdGVzdGluZyBwZXJzcGVjdGl2ZS4gSXQncyBhZGRpbmcgc3VwcG9ydCBmb3IgYSBoYW5kZnVsIG9mIG5ldyBjaGlwczogdGhlIEFYODgxNzlBLCBBWDg4NzcyRCwgYW5kIEFYODgyNzkuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgYXJjaGl0ZWN0dXJhbCBkaWZmZXJlbmNlcyB0aGF0IHJlcXVpcmUgbmV3IGRldmljZSBpbmZvIHN0cnVjdHVyZXM6IGBheDg4MTc5YV9pbmZvYCwgYGF4ODg3NzJkX2luZm9gLCBgYXg4ODI3OV9pbmZvYC4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGVzZSBuZXcgc3RydWN0dXJlcyBoaW50cyBhdCBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciBtYXBwaW5ncyBvciBjb250cm9sIHNlcXVlbmNlcywgd2hpY2ggaXMgYWx3YXlzIGEganVpY3kgdGFyZ2V0IGZvciBmaW5kaW5nIHN1YnRsZSBpc3N1ZXMuXG5cbldlIGFsc28gaGF2ZSBuZXcgZnVuY3Rpb25zOiBgYXg4ODE3OWFfYmluZGAsIGBheDg4MTc5YV91bmJpbmRgLCBgYXg4ODE3OWFfcnhfZml4dXBgLCBgYXg4ODE3OWFfdHhfZml4dXBgLCBgYXg4ODE3OWFfbGlua19yZXNldGAsIGBheDg4MTc5YV9zdG9wYC4gVGhlc2UgcHJvYmFibHkgaW1wbGVtZW50IHRoZSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBsaW5rIGhhbmRsaW5nIGZvciBlYWNoIG9mIHRoZXNlIG5ldyBjaGlwc2V0cy4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYGF4ODgxNzlfcmVzZXRgIGFuZCBgYXg4ODE3OV9zdGF0dXNgIGltcGxpZXMgZWl0aGVyIHNoYXJlZCBmdW5jdGlvbmFsaXR5IGFjcm9zcyBjaGlwc2V0cyBvciBtb2RpZmljYXRpb25zIHRvIGhhbmRsZSB0aGUgbmV3IGRldmljZXMgZ3JhY2VmdWxseS5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIGEgVVNCIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBpcyBhbHJlYWR5IGEgZmFpcmx5IGNvbXBsZXggYXJlYS4gTmV0d29yayBkcml2ZXJzLCBpbiBnZW5lcmFsLCBhcmUgYWx3YXlzIGhpZ2gtdmFsdWUgdGFyZ2V0cyBiZWNhdXNlIG9mIHRoZSBoaWdoIGxpa2VsaWhvb2Qgb2YgZXhwbG9pdGFibGUgZmxhd3MuIFRoaXMgcGF0Y2gsIHdpdGggaXRzIGFkZGl0aW9ucyBvZiBzdXBwb3J0IGZvciBzZXZlcmFsIG5ldyBjaGlwcywgaGFzIGRlZmluaXRlbHkgcGlxdWVkIG15IGludGVyZXN0LiBUaGUgY29tcGxleGl0eSwgdGhlIGludGVyYWN0aW9uIHdpdGggVVNCLCBhbmQgdGhlIHBvdGVudGlhbCBmb3Igb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gdGhlc2UgZml4dXAgZnVuY3Rpb25zIG1ha2UgdGhpcyBwYXRjaCBhbiBvYnZpb3VzIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuQmVmb3JlIEkgZGl2ZSB0b28gZGVlcGx5LCBsZXQncyBnZXQgYSBoYW5kbGUgb24gd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgdG8gYnVpbGQgdGhpcy4gSSBuZWVkIHRvIGtub3cgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIGludm9sdmVkLiBMZXQncyBzdGFydCBieSBncmVwcGluZyB0aGUgYGRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZWAgZm9yIHRoZSBmaWxlbmFtZSBpdHNlbGY6IGBkcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4MDUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowMTozMi43MjkzNzc1NzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzczMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF4ODgxNzlfMTc4YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTE0PWFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3OV8xNzhBKSAgICAgICs9IGF4ODgxNzlfMTc4YS5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19VU0JfTkVUX0NEQ0VUSEVSKVxcdCs9IGNkY19ldGhlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjAxOjMyLjgzMDc1OTY0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTE1NjcwODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVVNCIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gSSdtIHdvcmtpbmcgd2l0aCBpcyBgVVNCX05FVF9BWDg4MTc5XzE3OEFgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLlxuXG5Gcm9tIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIGl0IHNlZW1zIFZMQU4gc3VwcG9ydCBpcyBiZWluZyBhZGRlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZGAgYW5kIGBheDE3OWFfdmxhbl9yeF9hZGRfdmlkYC4gSXQgYWxzbyB1dGlsaXplcyBgdmxhbl9nZXRfdGFnYCBhbmQgYF9fdmxhbl9od2FjY2VsX3B1dF90YWdgLiBUaGVzZSBWTEFOIGZ1bmN0aW9ucyBhcmUgY29tbW9ubHkgbGlua2VkIHRvIGBWTEFOXzgwMjFRYCwgc28gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHRoYXQgdGhhdCdzIGVuYWJsZWQgYXMgd2VsbC5cblxuVG8gY29uZmlybSBhbnkgZGVwZW5kZW5jaWVzLCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUgYW5kIHNlYXJjaCBmb3IgdGhlIGBVU0JfTkVUX0FYODgxNzlfMTc4QWAgY29uZmlndXJhdGlvbiBzcGVjaWZpY2FsbHkuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBkZWZpbml0aXZlIGFuc3dlciBvbiBhbnkgbWFuZGF0b3J5IG9yIHBvdGVudGlhbGx5IGhlbHBmdWwgcmVsYXRlZCBjb25maWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjc1NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowMjowNS45NDY0MzM4OTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNzM2NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlVTQl9ORVRfQVg4ODE3OV8xNzhBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTE2Nj1jb25maWcgVVNCX05FVF9BWDg4MTdYXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xOTctXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTk4OmNvbmZpZyBVU0JfTkVUX0FYODgxNzlfMTc4QVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE5OS1cXHR0cmlzdGF0ZSBcXFwiQVNJWCBBWDg4MTc5LzE3OEEgVVNCIDMuMC8yLjAgdG8gR2lnYWJpdCBFdGhlcm5ldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDI6MDYuMTA4MTg5MDY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY4MDU1MjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBVU0IgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhpcyBVU0IgbmV0d29yayBkcml2ZXIgc2l0dWF0aW9uLCBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIEdpdmVuIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBtb3N0IHJlbGV2YW50IHNlY3Rpb24gd2lsbCBiZSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC91c2JgIGRpcmVjdG9yeS4gQW5kIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgcHJpbWFyeSBtZWFucyBvZiBkZWZpbmluZyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU28sIGxldCdzIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTguIFRoYXQncyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQg4oCTIGhvcGVmdWxseSwgaXQgY29udGFpbnMgdGhlIGNvcmUgb3B0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbiB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBiZWluZyBjb25maWd1cmVkLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUga2V5IHNldHRpbmdzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzI5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjAyOjA4Ljc4ODc0NjUxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0XFx0ICBUaGlzIGRyaXZlciBjcmVhdGVzIGFuIGludGVyZmFjZSBuYW1lZCBcXFwiZXRoWFxcXCIsIHdoZXJlIFggZGVwZW5kcyBvblxcbiAxOTY6XFx0XFx0ICB3aGF0IG90aGVyIG5ldHdvcmtpbmcgZGV2aWNlcyB5b3UgaGF2ZSBpbiB1c2UuXFxuIDE5NzpcXHRcXG4gMTk4OlxcdGNvbmZpZyBVU0JfTkVUX0FYODgxNzlfMTc4QVxcbiAxOTk6XFx0XFx0dHJpc3RhdGUgXFxcIkFTSVggQVg4ODE3OS8xNzhBIFVTQiAzLjAvMi4wIHRvIEdpZ2FiaXQgRXRoZXJuZXRcXFwiXFxuIDIwMDpcXHRcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG4gMjAxOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAyMDI6XFx0XFx0c2VsZWN0IFBIWUxJQlxcbiAyMDM6XFx0XFx0ZGVmYXVsdCB5XFxuIDIwNDpcXHRcXHRoZWxwXFxuIDIwNTpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgQVNJWCBBWDg4MTc5IGJhc2VkIFVTQiAzLjAvMi4wXFxuIDIwNjpcXHRcXHQgIHRvIEdpZ2FiaXQgRXRoZXJuZXQgYWRhcHRlcnMuXFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdCAgVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGRldmljZXM6XFxuIDIwOTpcXHRcXHQgICAgKiBBU0lYIEFYODgxNzlcXG4gMjEwOlxcdFxcdCAgICAqIEFTSVggQVg4ODE3OEFcXG4gMjExOlxcdFxcdCAgICAqIFNpdGNvbW0gTE4tMDMyXFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdCAgVGhpcyBkcml2ZXIgY3JlYXRlcyBhbiBpbnRlcmZhY2UgbmFtZWQgXFxcImV0aFhcXFwiLCB3aGVyZSBYIGRlcGVuZHMgb25cXG4gMjE0OlxcdFxcdCAgd2hhdCBvdGhlciBuZXR3b3JraW5nIGRldmljZXMgeW91IGhhdmUgaW4gdXNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowMjowOC43ODg5MTUyNzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTgzNTI5OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIHRoZSBGdXp6aW5nIFRhcmdldDogQVg4ODE3OUEgVVNCIE5ldHdvcmsgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBzZWVtcyB0byBiZSBgVVNCX05FVF9BWDg4MTc5XzE3OEFgLiBUaGF0J3Mgd2hlcmUgd2UgbmVlZCB0byBzdGFydC4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzIHNwZWNpZmljIFVTQiBuZXR3b3JrIGRyaXZlci5cblxuTGV0J3Mgc2VlIHdoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zLiBSaWdodCwgaGVyZSBhcmUgdGhlIG5ldyBzeW1ib2xzOiBgYXg4ODE3OWFfYmluZGAsIGBheDg4MTc5YV91bmJpbmRgLCBgYXg4ODE3OWFfcnhfZml4dXBgLCBgYXg4ODE3OWFfdHhfZml4dXBgLCBgYXg4ODE3OWFfbGlua19yZXNldGAsIGBheDg4MTc5YV9zdG9wYCwgYGF4MTc5YV92bGFuX3J4X2tpbGxfdmlkYCwgYGF4MTc5YV92bGFuX3J4X2FkZF92aWRgLCBgYXg4ODE3OWFfZ2V0X3BhdXNlcGFyYW1gLCBgYXg4ODE3OWFfc2V0X3BhdXNlcGFyYW1gLCBgYXg4ODE3OWFfcnhfY2hlY2tzdW1gLCBhbmQgYGF4ODgxNzlhX2J1bGtpbl9jb25maWdgLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQuIGBheDg4MTc5YV9yeF9maXh1cGAgYW5kIGBheDg4MTc5YV90eF9maXh1cGAuLi4gdGhvc2UgYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucy4gTm9ybWFsbHksIEknZCBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMgYXMgdGhleSBjYW4gYmUgbGVzcyBlZmZpY2llbnQgdG8gZnV6ei4gSG93ZXZlciwgY29uc2lkZXJpbmcgdGhpcyBpcyBhICpVU0IgbmV0d29yayBkcml2ZXIqLCB0aGUgYHJ4X2ZpeHVwYCBhbmQgYHR4X2ZpeHVwYCBmdW5jdGlvbnMgYXJlIHdoZXJlIGFsbCB0aGUgcGFja2V0IHBhcnNpbmcgbWFnaWMgaGFwcGVucyBhbmQgYXJlIGRldmljZS1zcGVjaWZpYy4gVGhleSdyZSBleGFjdGx5IHdoYXQgd2Ugd2FudCB0byB0YXJnZXQgd2l0aCBVU0IgZnV6emluZywgYXMgdGhleSdsbCBsaWtlbHkgYmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgbWFsZm9ybWVkIGRhdGEgZnJvbSB0aGUgZGV2aWNlLlxuXG5XYWl0LCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwcm9tcHQuIEkgcmVtZW1iZXIgaXQgc2F5aW5nIHRvIFwiYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zXCIuIEJ1dCBpbiB0aGlzIGNvbnRleHQsIGV4Y2x1ZGluZyB0aGVtIHdvdWxkIGJlIGEgbWlzdGFrZS4gVGhlc2UgYXJlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgdGhlIFVTQiBkYXRhISBJZiBJIHNraXAgdGhlbSwgSSBtaXNzIHRoZSBtb3N0IGltcG9ydGFudCBsb2dpYyBmb3IgZnV6emluZy5cblxuQWxyaWdodCwgc28gSSdtIGdvaW5nIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgYXg4ODE3OWFfYmluZGAsIGBheDg4MTc5YV9saW5rX3Jlc2V0YCwgYGF4ODgxNzlhX3J4X2ZpeHVwYCwgYGF4ODgxNzlhX3R4X2ZpeHVwYCwgYGF4MTc5YV92bGFuX3J4X2FkZF92aWRgLCBhbmQgYGF4MTc5YV92bGFuX3J4X2tpbGxfdmlkYC5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBheDg4MTc5YV9yeF9maXh1cGAsIGxldCdzIGRvdWJsZS1jaGVjay4gWWVzLCBpdCdzIGNhbGxlZCBmb3IgZXZlcnkgVVJCIHJlY2VpdmVkLCBzbyBpdCByZWFsbHkgKmlzKiBjb3JlIHRvIHRoZSBwYWNrZXQgcGFyc2luZy4gRGVmaW5pdGVseSBpbmNsdWRpbmcgdGhhdC5cblxuRmluYWxseSwgYSBxdWljayByZXZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb246IGBVU0JfTkVUX0FYODgxNzlfMTc4QWAuXG5cbkFuZCwgYSBmaW5hbCB0aG91Z2h0LCBjb3VsZCBgVkxBTl84MDIxUWAgYmUgbmVlZGVkIHRvIGFsbG93IFZMQU4gZnVuY3Rpb25zIHRvIGJlIGNvbXBpbGVkIG9yIHJlYWNoYWJsZT8gVGhlIGNvZGUgdXNlcyBgdmxhbl9nZXRfdGFnYCBhbmQgYF9fdmxhbl9od2FjY2VsX3B1dF90YWdgIOKAkyB0aG9zZSBhcmUgZGVmaW5lZCBpbiBgbGludXgvaWZfdmxhbi5oYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODU1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDI6MTguNzcyNDQ5NDMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4Njc1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmxhbl9nZXRfdGFnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTU0ND1zdGF0aWMgaW5saW5lIHZvaWQgX192bGFuX2h3YWNjZWxfcHV0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTUxLS8qKlxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjU1MjogKiBfX3ZsYW5fZ2V0X3RhZyAtIGdldCB0aGUgVkxBTiBJRCB0aGF0IGlzIHBhcnQgb2YgdGhlIHBheWxvYWRcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01NTMtICogQHNrYjogc2tidWZmIHRvIHF1ZXJ5XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01NTctICovXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NTU4OnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9nZXRfdGFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqdmxhbl90Y2kpXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTU5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTU3Nj1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faHdhY2NlbF9nZXRfdGFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01ODgtLyoqXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NTg5OiAqIHZsYW5fZ2V0X3RhZyAtIGdldCB0aGUgVkxBTiBJRCBmcm9tIHRoZSBza2JcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01OTAtICogQHNrYjogc2tidWZmIHRvIHF1ZXJ5XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01OTQtICovXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NTk1OnN0YXRpYyBpbmxpbmUgaW50IHZsYW5fZ2V0X3RhZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZsYW5fdGNpKVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTU5Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01OTktXFx0fSBlbHNlIHtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo2MDA6XFx0XFx0cmV0dXJuIF9fdmxhbl9nZXRfdGFnKHNrYiwgdmxhbl90Y2kpO1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTYwMS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjAyOjE4LjkwNjMzM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTQ5OTQxNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBBWDg4MTc5QSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHRoZSBkZXZlbG9wZXJzIGFyZSBhZGRpbmcgc3VwcG9ydCBmb3Igc29tZSBuZXcgQVNJWCBVU0IgRXRoZXJuZXQgY2hpcHMg4oCTIHRoZSBBWDg4MTc5QSwgQVg4ODc3MkQsIGFuZCBBWDg4Mjc5IOKAkyB0byB0aGUgZXhpc3RpbmcgYGF4ODgxNzlfMTc4YWAgZHJpdmVyLiBJbnRlcmVzdGluZy4gSSBub3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBpbmxpbmUsIGFuZCBjb21waWxhdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGhpbmdlIG9uIGBDT05GSUdfVkxBTl84MDIxUWAuIEhvd2V2ZXIsIHdoaWxlIG5vdCBlc3NlbnRpYWwsIGBWTEFOXzgwMjFRYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGZvciB0ZXN0aW5nIHRoZSBWTEFOIGZ1bmN0aW9uYWxpdHkg4oCTIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIGZ1bGwgY292ZXJhZ2UuIFRoZSBjb3JlIGZvY3VzLCBob3dldmVyLCBpcyBvbiBgVVNCX05FVF9BWDg4MTc5XzE3OEFgLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBzY3J1dGluaXplIGFyZTogYGF4ODgxNzlhX2JpbmRgLCBgYXg4ODE3OWFfdW5iaW5kYCwgYGF4ODgxNzlhX2xpbmtfcmVzZXRgLCBgYXg4ODE3OWFfcnhfZml4dXBgLCBgYXg4ODE3OWFfdHhfZml4dXBgLCBgYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZGAsIGBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZGAsIGBheDg4MTc5YV9nZXRfcGF1c2VwYXJhbWAsIGBheDg4MTc5YV9zZXRfcGF1c2VwYXJhbWAsIGBheDg4MTc5YV9yeF9jaGVja3N1bWAsIGFuZCBgYXg4ODE3OWFfYnVsa2luX2NvbmZpZ2AuIFRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IHRoZSBjb3JlIGRyaXZlciBmdW5jdGlvbmFsaXR5LCBkZWFsaW5nIHdpdGggZGV2aWNlIGJpbmRpbmcsIHVuYmluZGluZywgbGluayBtYW5hZ2VtZW50LCBSWC9UWCBwYWNrZXQgaGFuZGxpbmcsIFZMQU4gbWFuaXB1bGF0aW9uLCBwYXVzZSBwYXJhbWV0ZXIgaGFuZGxpbmcsIGNoZWNrc3VtIG9mZmxvYWRpbmcgYW5kIGJ1bGsgZGF0YSB0cmFuc2ZlciBjb25maWd1cmF0aW9uLlxuXG5Gcm9tIG15IHBlcnNwZWN0aXZlLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGxpbmsgcmVzZXQgbG9naWMsIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyBzdGVwcyAoUlgvVFggZml4dXApLCBhbGwgc3BlY2lmaWMgdG8gdGhlc2UgbmV3IGNoaXBzLiBTbywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIEknZCB3YW50IHRvIGhlYXZpbHkgZm9jdXMgb24gdGhlIG5ldyBVU0IgZGV2aWNlIGJpbmRpbmcgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocywgcGFydGljdWxhcmx5IHRoZSBSWCBhbmQgVFggZml4dXAgcm91dGluZXMuIFRoZXNlIGFyZSB0aGUgYXJlYXMgd2hlcmUgbmV3IGxvZ2ljIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFyZSBtb3N0IGxpa2VseSB0byBlbWVyZ2UuXG5cbkknbGwgbG9nIGBVU0JfTkVUX0FYODgxNzlfMTc4QWAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZywgYW5kIHRoZW4gSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NzM5LCJPdXRwdXRUb2tlbnMiOjI5OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowMjoyNy4wNTYyNzgzNDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE1Nzc1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfQVg4ODE3OV8xNzhBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXg4ODE3OWFfYmluZFwiLFxuICAgIFwiYXg4ODE3OWFfdW5iaW5kXCIsXG4gICAgXCJheDg4MTc5YV9saW5rX3Jlc2V0XCIsXG4gICAgXCJheDg4MTc5YV9yeF9maXh1cFwiLFxuICAgIFwiYXg4ODE3OWFfdHhfZml4dXBcIixcbiAgICBcImF4MTc5YV92bGFuX3J4X2FkZF92aWRcIixcbiAgICBcImF4MTc5YV92bGFuX3J4X2tpbGxfdmlkXCIsXG4gICAgXCJheDg4MTc5YV9nZXRfcGF1c2VwYXJhbVwiLFxuICAgIFwiYXg4ODE3OWFfc2V0X3BhdXNlcGFyYW1cIixcbiAgICBcImF4ODgxNzlhX3J4X2NoZWNrc3VtXCIsXG4gICAgXCJheDg4MTc5YV9idWxraW5fY29uZmlnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBuZXcgQVNJWCBVU0IgRXRoZXJuZXQgY2hpcHMgKEFYODgxNzlBLCBBWDg4NzcyRCwgQVg4ODI3OSkgdG8gdGhlIGF4ODgxNzlfMTc4YSBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGluaXRpYWxpemF0aW9uLCBsaW5rIHJlc2V0LCBhbmQgcGFja2V0IHBhcnNpbmcgKHJ4L3R4IGZpeHVwKSBsb2dpYyBzcGVjaWZpYyB0byB0aGVzZSBjaGlwcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBVU0IgZGV2aWNlIGJpbmRpbmcgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfQVg4ODE3OV8xNzhBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXg4ODE3OWFfYmluZFwiLFxuICAgIFwiYXg4ODE3OWFfdW5iaW5kXCIsXG4gICAgXCJheDg4MTc5YV9saW5rX3Jlc2V0XCIsXG4gICAgXCJheDg4MTc5YV9yeF9maXh1cFwiLFxuICAgIFwiYXg4ODE3OWFfdHhfZml4dXBcIixcbiAgICBcImF4MTc5YV92bGFuX3J4X2FkZF92aWRcIixcbiAgICBcImF4MTc5YV92bGFuX3J4X2tpbGxfdmlkXCIsXG4gICAgXCJheDg4MTc5YV9nZXRfcGF1c2VwYXJhbVwiLFxuICAgIFwiYXg4ODE3OWFfc2V0X3BhdXNlcGFyYW1cIixcbiAgICBcImF4ODgxNzlhX3J4X2NoZWNrc3VtXCIsXG4gICAgXCJheDg4MTc5YV9idWxraW5fY29uZmlnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBuZXcgQVNJWCBVU0IgRXRoZXJuZXQgY2hpcHMgKEFYODgxNzlBLCBBWDg4NzcyRCwgQVg4ODI3OSkgdG8gdGhlIGF4ODgxNzlfMTc4YSBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGluaXRpYWxpemF0aW9uLCBsaW5rIHJlc2V0LCBhbmQgcGFja2V0IHBhcnNpbmcgKHJ4L3R4IGZpeHVwKSBsb2dpYyBzcGVjaWZpYyB0byB0aGVzZSBjaGlwcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBVU0IgZGV2aWNlIGJpbmRpbmcgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowppcpw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 10:53:09 +0000 UTC FinishedAt: 2026-07-01 11:02:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_AX88179_178A" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_AX88179_178A" ], "series_id": "0f346afd-defd-4187-a30d-88711bdcd8b4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ax88179a_bind", "ax88179a_unbind", "ax88179a_link_reset", "ax88179a_rx_fixup", "ax88179a_tx_fixup", "ax179a_vlan_rx_add_vid", "ax179a_vlan_rx_kill_vid", "ax88179a_get_pauseparam", "ax88179a_set_pauseparam", "ax88179a_rx_checksum", "ax88179a_bulkin_config" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQVg4ODE3OV8xNzhBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXg4ODE3OWFfYmluZCYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV91bmJpbmQmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfbGlua19yZXNldCYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9yeF9maXh1cCYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV90eF9maXh1cCYjMzQ7LAogICAgJiMzNDtheDE3OWFfdmxhbl9yeF9hZGRfdmlkJiMzNDssCiAgICAmIzM0O2F4MTc5YV92bGFuX3J4X2tpbGxfdmlkJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX2dldF9wYXVzZXBhcmFtJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX3NldF9wYXVzZXBhcmFtJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX3J4X2NoZWNrc3VtJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX2J1bGtpbl9jb25maWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBuZXcgQVNJWCBVU0IgRXRoZXJuZXQgY2hpcHMgKEFYODgxNzlBLCBBWDg4NzcyRCwgQVg4ODI3OSkgdG8gdGhlIGF4ODgxNzlfMTc4YSBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGluaXRpYWxpemF0aW9uLCBsaW5rIHJlc2V0LCBhbmQgcGFja2V0IHBhcnNpbmcgKHJ4L3R4IGZpeHVwKSBsb2dpYyBzcGVjaWZpYyB0byB0aGVzZSBjaGlwcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBVU0IgZGV2aWNlIGJpbmRpbmcgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWMzNzc5NWJhYWI1ZGU2OGZlZWJlMzJiNGUyY2Y4YjM3ZjVhZjVhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTE6MDE6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jIGIvZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jXG5pbmRleCA5OGY4OTllYTJlOTQ2Mi4uMTJmYzIwZTVmNzZlNjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY1xuQEAgLTEzLDkgJiM0MzsxMywxMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi91c2JuZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuIFxuICNkZWZpbmUgQVg4ODE3OV9QSFlfSURcdFx0XHRcdDB4MDNcbiAjZGVmaW5lIEFYX0VFUFJPTV9MRU5cdFx0XHRcdDB4MTAwXG4mIzQzOyNkZWZpbmUgQVg4ODI3OV9FRVBST01fTEVOXHRcdFx0MHg0MDAwXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfRUVQUk9NX0xFTlx0XHRcdCgzMiAqIDIwKVxuICNkZWZpbmUgQVg4ODE3OV9FRVBST01fTUFHSUNcdFx0XHQweDE3OTAwYjk1XG4gI2RlZmluZSBBWF9NQ0FTVF9GTFRTSVpFXHRcdFx0OFxuICNkZWZpbmUgQVhfTUFYX01DQVNUXHRcdFx0XHQ2NFxuQEAgLTMyLDE3ICYjNDM7MzUsMzMgQEBcbiAjZGVmaW5lIEFYX0FDQ0VTU19FRVBST01cdFx0XHQweDA0XG4gI2RlZmluZSBBWF9BQ0NFU1NfRUZVU1x0XHRcdFx0MHgwNVxuICNkZWZpbmUgQVhfUkVMT0FEX0VFUFJPTV9FRlVTRVx0XHRcdDB4MDZcbi0jZGVmaW5lIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0hcdFx0XHQweDU0XG4tI2RlZmluZSBBWF9QQVVTRV9XQVRFUkxWTF9MT1dcdFx0XHQweDU1XG4tXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfV0FLRVVQX1NFVFRJTkdcdFx0XHQweDA3XG4mIzQzOyNkZWZpbmUgQVhfRldfTU9ERVx0XHRcdFx0MHgwOFxuJiM0MzsjZGVmaW5lIEFYX0dQSFlfQ1RMXHRcdFx0XHQweDBGXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfUkVBRFx0XHRcdDB4MjFcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9GTEFTSF9XRU5cdFx0XHQweDIyXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfV0RJU1x0XHRcdDB4MjNcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9GTEFTSF9XUklURVx0XHRcdDB4MjRcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9QSFlfQ0xBVVNFNDVcdFx0XHQweDI3XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfRVJBU0VfU0VDVElPTlx0XHQweDI4XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfQUNDRVNTX0JMXHRcdFx0MHgyQVxuJiM0MzsjZGVmaW5lIEFYODgxNzlBX1BIWV9QT1dFUlx0XHRcdDB4MzFcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNIXHRcdFx0MHhDMFxuJiM0MzsjZGVmaW5lIEFYX1BBVVNFX1dBVEVSTFZMX0xPV1x0XHRcdDB4NTRcbiYjNDM7I2RlZmluZSBBWF9QQVVTRV9XQVRFUkxWTF9ISUdIXHRcdFx0MHg1NVxuJiM0MztcbiYjNDM7I2RlZmluZSBBWF9GV19NT0RFXzE3OUFcdFx0XHRcdDB4MDFcbiAjZGVmaW5lIFBIWVNJQ0FMX0xJTktfU1RBVFVTXHRcdFx0MHgwMlxuIFx0I2RlZmluZVx0QVhfVVNCX1NTXHRcdDB4MDRcbiBcdCNkZWZpbmVcdEFYX1VTQl9IU1x0XHQweDAyXG4mIzQzO1x0I2RlZmluZSBBWF9VU0JfRlNcdFx0MHgwMVxuIFxuICNkZWZpbmUgR0VORVJBTF9TVEFUVVNcdFx0XHRcdDB4MDNcbiAvKiBDaGVjayBBWDg4MTc5IHZlcnNpb24uIFVBMTpCaXQyID0gMCwgIFVBMjpCaXQyID0gMSAqL1xuIFx0I2RlZmluZVx0QVhfU0VDTERcdFx0MHgwNFxuIFxuJiM0MzsjZGVmaW5lIEFYX0NISVBfU1RBVFVTXHRcdFx0XHQweDA1XG4mIzQzO1xuICNkZWZpbmUgQVhfU1JPTV9BRERSXHRcdFx0XHQweDA3XG4gI2RlZmluZSBBWF9TUk9NX0NNRFx0XHRcdFx0MHgwYVxuIFx0I2RlZmluZSBFRVBfUkRcdFx0XHQweDA0XG5AQCAtNjIsNiAmIzQzOzgxLDE1IEBAXG4gXHQjZGVmaW5lIEFYX1JYX0NUTF9QUk9cdFx0MHgwMDAxXG4gXHQjZGVmaW5lIEFYX1JYX0NUTF9TVE9QXHRcdDB4MDAwMFxuIFxuJiM0MzsjZGVmaW5lIEFYODgxNzlBX0VUSF9UWF9HQVBcdFx0XHQweDBEXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFYODgxNzlBX0JGTV9EQVRBXHRcdFx0MHgwRVxuJiM0MztcdCNkZWZpbmUgQVhfVFhfUVVFVUVfQ0ZHXHRcdDB4MDJcbiYjNDM7XHQjZGVmaW5lIEFYX1RYX1FVRVVFX1NFVFx0XHQweDA4XG4mIzQzO1x0I2RlZmluZSBBWF9UWF9RMV9BSEJfRkNfRU5cdDB4MTBcbiYjNDM7XHQjZGVmaW5lIEFYX1RYX1EyX0FIQl9GQ19FTlx0MHgyMFxuJiM0MztcdCNkZWZpbmUgQVhfWEdNSUlfRU5cdFx0MHg4MFxuJiM0MztcbiAjZGVmaW5lIEFYX05PREVfSURcdFx0XHRcdDB4MTBcbiAjZGVmaW5lIEFYX01VTEZMVEFSWVx0XHRcdFx0MHgxNlxuIFxuQEAgLTkxLDcgJiM0MzsxMTksMjEgQEBcbiBcdCNkZWZpbmUgQVhfUEhZUFdSX1JTVENUTF9JUFJMXHQweDAwMjBcbiBcdCNkZWZpbmUgQVhfUEhZUFdSX1JTVENUTF9BVFx0MHgxMDAwXG4gXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9BRERSRVNTXHRcdDB4MkFcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MXHRcdDB4MkJcbiYjNDM7XHQjZGVmaW5lIEFYX1ZMQU5fQ09OVFJPTF9XRVx0MHgwMDAxXG4mIzQzO1x0I2RlZmluZSBBWF9WTEFOX0NPTlRST0xfUkRcdDB4MDAwMlxuJiM0MztcdCNkZWZpbmUgQVhfVkxBTl9DT05UUk9MX1ZTT1x0MHgwMDEwXG4mIzQzO1x0I2RlZmluZSBBWF9WTEFOX0NPTlRST0xfVkZFXHQweDAwMjBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMFx0XHRcdDB4MkNcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9WTEFOX0lEX0RBVEExXHRcdFx0MHgyRFxuJiM0MztcbiAjZGVmaW5lIEFYX1JYX0JVTEtJTl9RQ1RSTFx0XHRcdDB4MmVcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVhfR1BIWV9FRUVfQ1RSTFx0XHRcdDB4MDFcbiYjNDM7XG4gI2RlZmluZSBBWF9DTEtfU0VMRUNUXHRcdFx0XHQweDMzXG4gXHQjZGVmaW5lIEFYX0NMS19TRUxFQ1RfQkNTXHQweDAxXG4gXHQjZGVmaW5lIEFYX0NMS19TRUxFQ1RfQUNTXHQweDAyXG5AQCAtMTExLDcgJiM0MzsxNTMsNTEgQEBcbiBcdCNkZWZpbmUgQVhfVFhDT0VfVENQVjZcdFx0MHgyMFxuIFx0I2RlZmluZSBBWF9UWENPRV9VRFBWNlx0XHQweDQwXG4gXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX0JNX0lOVF9NQVNLXHRcdDB4NDFcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfQk1fUlhfRE1BX0NUTFx0XHQweDQzXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX0JNX1RYX0RNQV9DVExcdFx0MHg0NlxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfUlhfU1RBVFVTX0NEQ1x0XHQweDZEXG4mIzQzO1x0I2RlZmluZSBBWF9MU09GQ19XQ05UXzdfQUNDRVNTXHQweDAzXG4mIzQzO1x0I2RlZmluZSBBWF9HTUlJX0NSQ19BUFBFTkRcdDB4MTBcbiYjNDM7XG4gI2RlZmluZSBBWF9MRURDVFJMXHRcdFx0XHQweDczXG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX0FSQ19DVFJMXHRcdFx0MHg5RVxuJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19TV1BfQ1RSTFx0XHRcdDB4QjFcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX1RYX1BBVVNFXHRcdFx0MHhCMlxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfQ0RDX0RFTEFZX1RYXHRcdDB4QjVcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX1BBVEhcdFx0XHQweEI3XG4mIzQzO1x0I2RlZmluZSBBWF9NQUNfUlhfUEFUSF9SRUFEWVx0MHgwMVxuJiM0MztcdCNkZWZpbmUgQVhfTUFDX1RYX1BBVEhfUkVBRFlcdDB4MDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTkVXX1BBVVNFX0NUUkxcdFx0XHQweEI4XG4mIzQzO1x0I2RlZmluZSBBWF9ORVdfUEFVU0VfRU5cdFx0MHgwMVxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfQlVMS19PVVRfQ1RSTFx0XHQweEI5XG4mIzQzO1x0I2RlZmluZSBBWF9NQUNfRUZGX0VOXHRcdDB4MDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVFx0XHQweEMwXG4mIzQzO1x0I2RlZmluZSBBWF9NQUNfTFNPX0VSUl9FTlx0MHgwNFxuJiM0MztcdCNkZWZpbmUgQVhfTUFDX01JUUZGQ1RSTF9GT1JNQVRcdDB4MTBcbiYjNDM7XHQjZGVmaW5lIEFYX01BQ19NSVFGRkNUUkxfRFJPUF9DUkMgMHgyMFxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNIX0RFTEFZXHQoNVVMIFx1MDAzY1x1MDAzYyA4KVxuJiM0MzsjZGVmaW5lIEFYODgxNzlBX0FVVE9ERVRBQ0hfRU5cdFx0MVxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfTFNPX0VOSEFOQ0VfQ1RSTFx0XHQweEMzXG4mIzQzO1x0I2RlZmluZSBBWF9MU09fRU5IQU5DRV9FTlx0MHgwMVxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfVFhfSERSX0NLU1VNXHRcdDB4Q0NcbiYjNDM7I2RlZmluZSBBWDg4MTc5QV9FUDVfRUhSXHRcdFx0MHhGOVxuJiM0MztcbiYjNDM7I2RlZmluZSBBWF9QSFlfUE9XRVJcdFx0XHRcdDB4MDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRVBIWV9MT1dfUE9XRVJfRU5cdFx0XHQweDAxXG4mIzQzOyNkZWZpbmUgUzVfV09MX0VOXHRcdFx0XHQweDA0XG4mIzQzOyNkZWZpbmUgUzVfV09MX0xPV19QT1dFUlx0XHRcdDB4MjBcbiBcbiAjZGVmaW5lIEdNSUlfUEhZX1BIWVNSXHRcdFx0XHQweDExXG4gXHQjZGVmaW5lIEdNSUlfUEhZX1BIWVNSX1NNQVNLXHQweGMwMDBcbkBAIC0xNjQsOCAmIzQzOzI1MCw1NiBAQFxuIFx0I2RlZmluZSBHTUlJX1BIWV9QR1NFTF9QQUdFM1x0MHgwMDAzXG4gXHQjZGVmaW5lIEdNSUlfUEhZX1BHU0VMX1BBR0U1XHQweDAwMDVcbiBcbiYjNDM7LyogVFggRGVzY3JpcHRvciAqL1xuJiM0MzsjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX0xFTl9NQVNLXHRcdDB4MUZGRkZGXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfRFJPUF9QQUREXHRCSVQoMjgpXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfVkxBTlx0XHRCSVQoMjkpXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfTVNTX01BU0tcdFx0MHg3RkZGXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfTVNTX1NISUZUXHQweDIwXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfVkxBTl9NQVNLXHQweEZGRkZcbiYjNDM7I2RlZmluZSBBWDE3OUFfVFhfREVTQ19WTEFOX1NISUZUXHQweDMwXG4mIzQzO1xuJiM0MzsvKiBSWCBQYWNrZXQgRGVzY3JpcHRvciAqL1xuJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9FUlJcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0VSUlx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfTDRfVFlQRV9NQVNLXHQweDFDXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0w0X1VEUFx0XHQweDA0XG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0w0X1RDUFx0XHQweDEwXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX1RZUEVfTUFTS1x0MHg2MFxuJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MM19JUFx0XHQweDIwXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0lQNlx0XHQweDQwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9WTEFOXHRcdEJJVCgxMClcbiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfUlhfT0tcdFx0QklUKDExKVxuJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9EUk9QXHRcdEJJVCgzMSlcbiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfTEVOX01BU0tcdDB4N0ZGRjAwMDBcbiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfTEVOX1NISUZUXHQweDEwXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX1ZMQU5fU0hJRlRcdDB4MjBcbiYjNDM7XG4mIzQzOy8qIFJYIERlc2NyaXB0b3IgaGVhZGVyICovXG4mIzQzOyNkZWZpbmUgQVgxNzlBX1JYX0RIX1BLVF9DTlRfTUFTS1x0XHQweDFGRkZcbiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfREhfREVTQ19PRkZTRVRfTUFTS1x0MHhGRkZGRTAwMFxuJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9ESF9ERVNDX09GRlNFVF9TSElGVFx0MHgwRFxuJiM0MztcbiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfSFdfUEFEXHRcdFx0MHgwMlxuJiM0MztcbiBzdGF0aWMgaW50IGF4ODgxNzlfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KTtcbiBcbiYjNDM7ZW51bSBheF9ldGhlcl9saW5rX3NwZWVkIHtcbiYjNDM7XHRFVEhFUl9MSU5LX05PTkUgPSAwLFxuJiM0MztcdEVUSEVSX0xJTktfMTAgICA9IDEsXG4mIzQzO1x0RVRIRVJfTElOS18xMDAgID0gMixcbiYjNDM7XHRFVEhFUl9MSU5LXzEwMDAgPSAzLFxuJiM0MztcdEVUSEVSX0xJTktfMjUwMCA9IDQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIGF4X2NoaXBfdmVyc2lvbiB7XG4mIzQzO1x0QVhfVkVSU0lPTl9JTlZBTElEXHRcdD0gMHgwLFxuJiM0MztcdEFYX1ZFUlNJT05fQVg4ODE3OVx0XHQ9IDB4NCxcbiYjNDM7XHRBWF9WRVJTSU9OX0FYODgxNzlBXHRcdD0gMHg2LFx0LyogQWxzbyBBWDg4NzcyRCAqL1xuJiM0MztcdEFYX1ZFUlNJT05fQVg4ODI3OVx0XHQ9IDB4NyxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGF4ODgxNzlfZGF0YSB7XG4gXHR1OCAgZWVlX2VuYWJsZWQ7XG4gXHR1OCAgZWVlX2FjdGl2ZTtcbkBAIC0xNzQsNiAmIzQzOzMwOCwxNiBAQCBzdHJ1Y3QgYXg4ODE3OV9kYXRhIHtcbiBcdHUzMiB3b2xfc3VwcG9ydGVkO1xuIFx0dTMyIHdvbG9wdHM7XG4gXHR1OCBkaXNjb25uZWN0aW5nO1xuJiM0MztcdHU4IGNoaXBfdmVyc2lvbjtcbiYjNDM7XHR1OCBmd192ZXJzaW9uWzRdO1xuJiM0MztcdHU4IGlzX2F4ODg3NzJkO1xuJiM0MztcdHU4IGlwX2FsaWduO1xuJiM0MztcdHU4IGxpbms7XG4mIzQzO1x0dTggc3BlZWQ7XG4mIzQzO1x0dTggZnVsbF9kdXBsZXg7XG4mIzQzO1x0dTggcnhfY2hlY2tzdW07XG4mIzQzO1x0dTggZWVwcm9tX3JlYWRfY21kO1xuJiM0MztcdHUxNiBlZXByb21fYmxvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgYXg4ODE3OV9pbnRfZGF0YSB7XG5AQCAtMTgxLDE1ICYjNDM7MzI1LDQ4IEBAIHN0cnVjdCBheDg4MTc5X2ludF9kYXRhIHtcbiBcdF9fbGUzMiBpbnRkYXRhMjtcbiB9O1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuJiM0MztzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIHtcbiBcdHVuc2lnbmVkIGNoYXIgY3RybCwgdGltZXJfbCwgdGltZXJfaCwgc2l6ZSwgaWZnO1xuLX0gQVg4ODE3OV9CVUxLSU5fU0laRVtdID1cdHtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIEFYODgxNzlfQlVMS0lOX1NJWkVbXSA9XHR7XG4gXHR7NywgMHg0ZiwgMCxcdDB4MTIsIDB4ZmZ9LFxuIFx0ezcsIDB4MjAsIDMsXHQweDE2LCAweGZmfSxcbiBcdHs3LCAweGFlLCA3LFx0MHgxOCwgMHhmZn0sXG4gXHR7NywgMHhjYywgMHg0YywgMHgxOCwgOH0sXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODE3OUFfQlVMS0lOX1NJWkVbXSA9IHtcbiYjNDM7XHR7NSwgMHg3QiwgMHgwMCxcdDB4MTcsIDB4MEZ9LFx0LyogMUcsIFNTICovXG4mIzQzO1x0ezUsIDB4QzAsIDB4MDIsXHQweDA2LCAweDBGfSxcdC8qIDFHLCBIUyAqL1xuJiM0MztcdHs3LCAweEYwLCAweDAwLFx0MHgwQywgMHgwRn0sXHQvKiAxMDBNLCBGdWxsLCBTUyAqL1xuJiM0MztcdHs2LCAweDAwLCAweDAwLFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBIYWxmLCBTUyAqL1xuJiM0MztcdHs1LCAweEMwLCAweDA0LFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBGdWxsLCBIUyAqL1xuJiM0MztcdHs3LCAweEMwLCAweDA0LFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBIYWxmLCBIUyAqL1xuJiM0MztcdHs3LCAweDAwLCAweDAwLFx0MHgwMywgMHgzRn0sXHQvKiBGUyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODc3MkRfQlVMS0lOX1NJWkVbXSA9IHtcbiYjNDM7XHR7MCwgMHgwMCwgMHgwMCxcdDB4MDAsIDB4MDB9LFx0LyogMUcsIFNTICh1bnVzZWQpICovXG4mIzQzO1x0ezAsIDB4MDAsIDB4MDAsXHQweDAwLCAweDAwfSxcdC8qIDFHLCBIUyAodW51c2VkKSAqL1xuJiM0MztcdHswLCAweDAwLCAweDAwLFx0MHgwMCwgMHgwMH0sXHQvKiAxMDBNLCBGdWxsLCBTUyAodW51c2VkKSAqL1xuJiM0MztcdHswLCAweDAwLCAweDAwLFx0MHgwMCwgMHgwMH0sXHQvKiAxMDBNLCBIYWxmLCBTUyAodW51c2VkKSAqL1xuJiM0MztcdHs1LCAweEMwLCAweDA0LFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBGdWxsLCBIUyAqL1xuJiM0MztcdHs3LCAweEMwLCAweDA0LFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBIYWxmLCBIUyAqL1xuJiM0MztcdHs3LCAweDAwLCAweDAwLFx0MHgwMywgMHgzRn0sXHQvKiBGUyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODI3OV9CVUxLSU5fU0laRVtdID0ge1xuJiM0MztcdHs1LCAweDEwLCAweDAxLFx0MHgxMSwgMHgwRn0sXHQvKiAyLjVHICovXG4mIzQzO1x0ezcsIDB4QjMsIDB4MDEsXHQweDExLCAweDBGfSxcdC8qIDFHLCBTUyAqL1xuJiM0MztcdHs3LCAweEMwLCAweDAyLFx0MHgwNiwgMHgwRn0sXHQvKiAxRywgSFMgKi9cbiYjNDM7XHR7NywgMHg4MCwgMHgwMSxcdDB4MDMsIDB4MEZ9LFx0LyogMTAwTSwgRnVsbCwgU1MgKi9cbiYjNDM7XHR7NywgMHg4MCwgMHgwMSxcdDB4MDMsIDB4MEZ9LFx0LyogMTAwTSwgSGFsZiwgU1MgKi9cbiYjNDM7XHR7NywgMHg4MCwgMHgwMSxcdDB4MDMsIDB4MEZ9LFx0LyogMTAwTSwgRnVsbCwgSFMgKi9cbiYjNDM7XHR7NywgMHg4MCwgMHgwMSxcdDB4MDMsIDB4MEZ9LFx0LyogMTAwTSwgSGFsZiwgSFMgKi9cbiYjNDM7XHR7NywgMHgwMCwgMHgwMCxcdDB4MDMsIDB4M0Z9LFx0LyogRlMgKi9cbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgYXg4ODE3OV9zZXRfcG1fbW9kZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGJvb2wgcG1fbW9kZSlcbiB7XG4gXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuQEAgLTMxMyw2ICYjNDM7NDkwLDcgQEAgc3RhdGljIGludCBheDg4MTc5X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXG4gXG4gc3RhdGljIHZvaWQgYXg4ODE3OV9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpXG4ge1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXHRzdHJ1Y3QgYXg4ODE3OV9pbnRfZGF0YSAqZXZlbnQ7XG4gXHR1MzIgbGluaztcbiBcbkBAIC0zMjMsNiAmIzQzOzUwMSw5IEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKVxuIFx0bGUzMl90b19jcHVzKCh2b2lkICopXHUwMDI2ZXZlbnQtXHUwMDNlaW50ZGF0YTEpO1xuIFxuIFx0bGluayA9ICgoKF9fZm9yY2UgdTMyKWV2ZW50LVx1MDAzZWludGRhdGExKSBcdTAwMjYgQVhfSU5UX1BQTFNfTElOSykgXHUwMDNlXHUwMDNlIDE2O1xuJiM0MztcdGRhdGEtXHUwMDNlc3BlZWQgPSAoKChfX2ZvcmNlIHUzMilldmVudC1cdTAwM2VpbnRkYXRhMSkgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweDc7XG4mIzQzO1x0ZGF0YS1cdTAwM2VmdWxsX2R1cGxleCA9ICgoKF9fZm9yY2UgdTMyKWV2ZW50LVx1MDAzZWludGRhdGExKSBcdTAwM2VcdTAwM2UgMTIpIFx1MDAyNiAweDE7XG4mIzQzO1x0ZGF0YS1cdTAwM2VsaW5rID0gbGluaztcbiBcbiBcdGlmIChuZXRpZl9jYXJyaWVyX29rKGRldi1cdTAwM2VuZXQpICE9IGxpbmspIHtcbiBcdFx0dXNibmV0X2xpbmtfY2hhbmdlKGRldiwgbGluaywgMSk7XG5AQCAtNDAzLDYgJiM0Mzs1ODQsMzIgQEAgYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHBydGFkLCB1MTYgZGV2YWQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYXhfcmVhZF9tbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgZGV2X2FkZHIsIHUxNiByZWcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuJiM0MztcdHUxNiByZXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuJiM0MztcdFx0cmV0ID0gYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYODgxNzlBX1BIWV9DTEFVU0U0NSwgZGV2X2FkZHIsIHJlZywgMiwgXHUwMDI2cmVzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgcmVnLCBkZXZfYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYXhfd3JpdGVfbW1kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IGRldl9hZGRyLCB1MTYgcmVnLCB1MTYgZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4mIzQzO1x0XHRyZXR1cm4gYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfQ0xBVVNFNDUsIGRldl9hZGRyLCByZWcsIDIsIFx1MDAyNmRhdGEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KGRldiwgcmVnLCBkZXZfYWRkciwgZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBheDg4MTc5X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG5AQCAtNDE0LDcgJiM0Mzs2MjEsNiBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXG4gXG4gXHR1c2JuZXRfc3VzcGVuZChpbnRmLCBtZXNzYWdlKTtcbiBcbi1cdC8qIEVuYWJsZSBXb0wgKi9cbiBcdGlmIChwcml2LVx1MDAzZXdvbG9wdHMpIHtcbiBcdFx0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELFxuIFx0XHRcdFx0IDEsIDEsIFx1MDAyNnRtcDgpO1xuQEAgLTQyNSw2ICYjNDM7NjMxLDI2IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbiBcbiBcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NT05JVE9SX01PRCxcbiBcdFx0XHRcdCAgMSwgMSwgXHUwMDI2dG1wOCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuJiM0MztcdFx0XHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcdTAwMjZ0bXAxNik7XG4mIzQzO1x0XHRcdHRtcDE2IHw9IEFYX01FRElVTV9SRUNFSVZFX0VOO1xuJiM0MztcdFx0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwgMiwgMiwgXHUwMDI2dG1wMTYpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpXG4mIzQzO1x0XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfV0FLRVVQX1NFVFRJTkcsIDgsXG4mIzQzO1x0XHRcdFx0XHQgIEVQSFlfTE9XX1BPV0VSX0VOIHwgUzVfV09MX0VOXG4mIzQzO1x0XHRcdFx0XHQgIHwgUzVfV09MX0xPV19QT1dFUiB8IDB4ODAwMCwgMCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdH0gZWxzZSBpZiAocHJpdi1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1dBS0VVUF9TRVRUSU5HLCA4LCAweDgwMDAsIDAsIE5VTEwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9XQUtFVVBfU0VUVElORywgMCwgRVBIWV9MT1dfUE9XRVJfRU4sIDAsIE5VTEwpO1xuJiM0MztcdFx0YXg4ODE3OV9zZXRfcG1fbW9kZShkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0LyogRGlzYWJsZSBSWCBwYXRoICovXG5AQCAtNDM2LDExICYjNDM7NjYyLDExIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbiBcbiBcdC8qIEZvcmNlIGJ1bGstaW4gemVybyBsZW5ndGggKi9cbiBcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLFxuLVx0XHRcdCAyLCAyLCBcdTAwMjZ0bXAxNik7XG4mIzQzO1x0XHRcdDIsIDIsIFx1MDAyNnRtcDE2KTtcbiBcbiBcdHRtcDE2IHw9IEFYX1BIWVBXUl9SU1RDVExfQlogfCBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7XG4gXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsXG4tXHRcdFx0ICAyLCAyLCBcdTAwMjZ0bXAxNik7XG4mIzQzO1x0XHRcdDIsIDIsIFx1MDAyNnRtcDE2KTtcbiBcbiBcdC8qIGNoYW5nZSBjbG9jayAqL1xuIFx0dG1wOCA9IDA7XG5AQCAtNDU2LDEyICYjNDM7NjgyLDE5IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbiB9XG4gXG4gLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgYXV0b2RldGFjaCBmdW5jdGlvbi4gKi9cbi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYnkgb2Zmc2V0IDB4NDMgb2YgRUVQUk9NICovXG4mIzQzOy8qIFRoaXMgZnVuY3Rpb24gaXMgZGV0ZXJtaW5lZCBieSBvZmZzZXQgMHg0MyBvZiBFRVBST00gZm9yIHRoZSBBWDg4MTc5ICovXG4gc3RhdGljIGludCBheDg4MTc5X2F1dG9fZGV0YWNoKHN0cnVjdCB1c2JuZXQgKmRldilcbiB7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiBcdHUxNiB0bXAxNjtcbiBcdHU4IHRtcDg7XG4gXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuJiM0MztcdFx0dG1wMTYgPSBBWDg4MTc5QV9BVVRPREVUQUNIX0RFTEFZO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9BVVRPREVUQUNILCB0bXAxNiwgMCwgMCwgTlVMTCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfRUVQUk9NLCAweDQzLCAxLCAyLCBcdTAwMjZ0bXAxNikgXHUwMDNjIDApXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTQ4NCwxMSAmIzQzOzcxNywzMSBAQCBzdGF0aWMgaW50IGF4ODgxNzlfYXV0b19kZXRhY2goc3RydWN0IHVzYm5ldCAqZGV2KVxuIHN0YXRpYyBpbnQgYXg4ODE3OV9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4ge1xuIFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhO1xuJiM0MztcdHU4IHJlZzg7XG4gXG4mIzQzO1x0YXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiBcdGF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCB0cnVlKTtcbiBcbiBcdHVzYm5ldF9saW5rX2NoYW5nZShkZXYsIDAsIDApO1xuIFxuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbiYjNDM7XHRcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnJlZzgpO1xuJiM0MztcdFx0aWYgKCEocmVnOCBcdTAwMjYgQVhfUEhZX1BPV0VSKSkge1xuJiM0MztcdFx0XHRyZWc4ID0gQVhfUEhZX1BPV0VSO1xuJiM0MztcdFx0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgXHUwMDI2cmVnOCk7XG4mIzQzO1x0XHRcdG1zbGVlcCgyNTApO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9GV19NT0RFLCBBWF9GV19NT0RFXzE3OUEsIDAsIDAsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRcdC8qIE5vdywgdGhhdCBBWF9GV19NT0RFXzE3OUEgaXMgZW5hYmxlZCwgdGhlIFBIWSBuZWVkcyBhIHBvd2VyLWN5Y2xlLlxuJiM0MztcdFx0ICogUEhZLXBvd2VyIGlzIHJlLWVuYWJsZWQgaW4gYXg4ODE3OV9yZXNldCgpXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJlZzggPSAwO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnJlZzgpO1xuJiM0MztcdFx0bXNsZWVwKDI1MCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGF4ODgxNzlfcmVzZXQoZGV2KTtcbiBcbiBcdGF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCBmYWxzZSk7XG5AQCAtNTEwLDYgJiM0Mzs3NjMsMjEgQEAgc3RhdGljIHZvaWQgYXg4ODE3OV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0dXNibmV0X2Rpc2Nvbm5lY3QoaW50Zik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBheDg4MTc5X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4mIzQzO1xuJiM0MztcdC8qIEluaGVyaXQgc3RhbmRhcmQgZGV2aWNlIGluZm8gKi9cbiYjNDM7XHR1c2JuZXRfZ2V0X2RydmluZm8obmV0LCBpbmZvKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGluZm8tXHUwMDNlZndfdmVyc2lvbiwgc2l6ZW9mKGluZm8tXHUwMDNlZndfdmVyc2lvbiksIFwmIzM0OyVkLiVkLiVkLiVkXCYjMzQ7LFxuJiM0MztcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvblswXSwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uWzFdLFxuJiM0MztcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvblsyXSwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uWzNdKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIGF4ODgxNzlfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKVxuIHtcbkBAIC01MzYsNDEgJiM0Mzs4MDQsNzQgQEAgYXg4ODE3OV9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pXG4gXG4gc3RhdGljIGludCBheDg4MTc5X2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG4ge1xuLVx0cmV0dXJuIEFYX0VFUFJPTV9MRU47XG4mIzQzO1x0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhO1xuJiM0MztcbiYjNDM7XHRheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4mIzQzO1x0XHRyZXR1cm4gQVhfRUVQUk9NX0xFTjtcbiYjNDM7XHRlbHNlIGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSlcbiYjNDM7XHRcdHJldHVybiBBWDg4Mjc5X0VFUFJPTV9MRU47XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIEFYODgxNzlBX0VFUFJPTV9MRU47XG4gfVxuIFxuLXN0YXRpYyBpbnRcbi1heDg4MTc5X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXG4tXHRcdCAgIHU4ICpkYXRhKVxuJiM0MztzdGF0aWMgdm9pZFxuJiM0MztheDg4MTc5X2VlcHJvbV9hY2Nlc3NfcGFyYW1zKHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEsIGludCBpLCB1MTYgKnZhbHVlLCB1MTYgKmlkeClcbiYjNDM7e1xuJiM0MztcdC8qIEFYODgxNzkgaGFzIGEgd29yZC1hZGRyZXNzYWJsZSBFRVBST01cbiYjNDM7XHQgKiBBWDg4MTc5QSB1c2VzIEVGVVNFUyB3aXRoIDIwIGJ5dGVzIGxlbmd0aFxuJiM0MztcdCAqIEFYODgyNzkgaGFzIGFuIEVFUFJPTSBhZGRyZXNzYWJsZSBpbiAyNTYgYnl0ZSBibG9ja3NcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbiYjNDM7XHRcdCp2YWx1ZSA9IGk7XG4mIzQzO1x0XHQqaWR4ID0gMTtcbiYjNDM7XHR9IGVsc2UgaWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHQqdmFsdWUgPSAoaSAqIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrKSBcdTAwM2VcdTAwM2UgMTY7XG4mIzQzO1x0XHQqaWR4ID0gKGkgKiBheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9ibG9jaykgXHUwMDI2IDB4ZmZmZjtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0KnZhbHVlID0gaSBcdTAwM2NcdTAwM2MgNDtcbiYjNDM7XHRcdCppZHggPSAwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBheDg4MTc5X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4tXHR1MTYgKmVlcHJvbV9idWZmO1xuLVx0aW50IGZpcnN0X3dvcmQsIGxhc3Rfd29yZDtcbi1cdGludCBpLCByZXQ7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTtcbiYjNDM7XHRpbnQgZmlyc3QsIGxhc3QsIGksIHJldDtcbiYjNDM7XHR1OCAqZWVwcm9tX2J1ZmY7XG4mIzQzO1xuJiM0MztcdGF4MTc5X2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXG4gXHRpZiAoZWVwcm9tLVx1MDAzZWxlbiA9PSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGVlcHJvbS1cdTAwM2VtYWdpYyA9IEFYODgxNzlfRUVQUk9NX01BR0lDO1xuIFxuLVx0Zmlyc3Rfd29yZCA9IGVlcHJvbS1cdTAwM2VvZmZzZXQgXHUwMDNlXHUwMDNlIDE7XG4tXHRsYXN0X3dvcmQgPSAoZWVwcm9tLVx1MDAzZW9mZnNldCAmIzQzOyBlZXByb20tXHUwMDNlbGVuIC0gMSkgXHUwMDNlXHUwMDNlIDE7XG4tXHRlZXByb21fYnVmZiA9IGttYWxsb2NfYXJyYXkobGFzdF93b3JkIC0gZmlyc3Rfd29yZCAmIzQzOyAxLCBzaXplb2YodTE2KSxcbi1cdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRmaXJzdCA9IGVlcHJvbS1cdTAwM2VvZmZzZXQgLyBheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9ibG9jaztcbiYjNDM7XHRsYXN0ID0gKGVlcHJvbS1cdTAwM2VvZmZzZXQgJiM0MzsgZWVwcm9tLVx1MDAzZWxlbiAtIDEpIC8gYXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2s7XG4mIzQzO1xuJiM0MztcdGVlcHJvbV9idWZmID0ga3phbGxvYygobGFzdCAtIGZpcnN0ICYjNDM7IDEpICogYXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2ssIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFlZXByb21fYnVmZilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHQvKiBheDg4MTc5LzE3OEEgcmV0dXJucyAyIGJ5dGVzIGZyb20gZWVwcm9tIG9uIHJlYWQgKi9cbi1cdGZvciAoaSA9IGZpcnN0X3dvcmQ7IGkgXHUwMDNjPSBsYXN0X3dvcmQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJldCA9IF9fYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19FRVBST00sIGksIDEsIDIsXG4tXHRcdFx0XHRcdCBcdTAwMjZlZXByb21fYnVmZltpIC0gZmlyc3Rfd29yZF0pO1xuJiM0MztcdGZvciAoaSA9IGZpcnN0OyBpIFx1MDAzYz0gbGFzdDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUxNiB2YWx1ZSwgaWR4O1xuJiM0MztcbiYjNDM7XHRcdGF4ODgxNzlfZWVwcm9tX2FjY2Vzc19wYXJhbXMoYXgxNzlfZGF0YSwgaSwgXHUwMDI2dmFsdWUsIFx1MDAyNmlkeCk7XG4mIzQzO1x0XHRyZXQgPSBfX2F4ODgxNzlfcmVhZF9jbWQoZGV2LCBheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9yZWFkX2NtZCxcbiYjNDM7XHRcdFx0XHRcdCB2YWx1ZSwgaWR4LCBheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9ibG9jayxcbiYjNDM7XHRcdFx0XHRcdCBlZXByb21fYnVmZiAmIzQzOyAoaSAtIGZpcnN0KSAqIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrKTtcbiYjNDM7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRrZnJlZShlZXByb21fYnVmZik7XG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdH1cbiBcdH1cbiBcbi1cdG1lbWNweShkYXRhLCAodTggKillZXByb21fYnVmZiAmIzQzOyAoZWVwcm9tLVx1MDAzZW9mZnNldCBcdTAwMjYgMSksIGVlcHJvbS1cdTAwM2VsZW4pO1xuJiM0MztcdG1lbWNweShkYXRhLCBlZXByb21fYnVmZiAmIzQzOyBlZXByb20tXHUwMDNlb2Zmc2V0ICUgYXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2ssIGVlcHJvbS1cdTAwM2VsZW4pO1xuIFx0a2ZyZWUoZWVwcm9tX2J1ZmYpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTU4MCwxMiAmIzQzOzg4MSwxNyBAQCBheDg4MTc5X3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXG4gXHRcdCAgIHU4ICpkYXRhKVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTtcbiBcdHUxNiAqZWVwcm9tX2J1ZmY7XG4gXHRpbnQgZmlyc3Rfd29yZDtcbiBcdGludCBsYXN0X3dvcmQ7XG4gXHRpbnQgcmV0O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0YXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgxNzlBKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiBcdG5ldGRldl9kYmcobmV0LCBcJiMzNDt3cml0ZSBFRVBST00gbGVuICVkLCBvZmZzZXQgJWQsIG1hZ2ljIDB4JXhcXG5cJiMzNDssXG4gXHRcdCAgIGVlcHJvbS1cdTAwM2VsZW4sIGVlcHJvbS1cdTAwM2VvZmZzZXQsIGVlcHJvbS1cdTAwM2VtYWdpYyk7XG4gXG5AQCAtNjUxLDEyICYjNDM7OTU3LDM5IEBAIGF4ODgxNzlfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSxcbiB9XG4gXG4gc3RhdGljIGludCBheDg4MTc5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiB7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XG4mIzQzO1x0aW50IHY7XG4mIzQzO1xuJiM0MztcdGRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXG4gXHRtaWlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MoXHUwMDI2ZGV2LVx1MDAzZW1paSwgY21kKTtcbiBcbiYjNDM7XHRpZiAoZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcbiYjNDM7XHRcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuJiM0MztcdFx0XHRcdCBjbWQtXHUwMDNlbGlua19tb2Rlcy5zdXBwb3J0ZWQpO1xuJiM0MztcbiYjNDM7XHRcdHYgPSBheDg4MTc5X21kaW9fcmVhZChkZXYtXHUwMDNlbmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7XG4mIzQzO1x0XHRpZiAodiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHYgXHUwMDI2IEFEVkVSVElTRV9SRVNWKVxuJiM0MztcdFx0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0XHRcdCBjbWQtXHUwMDNlbGlua19tb2Rlcy5hZHZlcnRpc2luZyk7XG4mIzQzO1xuJiM0MztcdFx0diA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XG4mIzQzO1x0XHRpZiAoZGF0YS1cdTAwM2VzcGVlZCA9PSBFVEhFUl9MSU5LXzI1MDApIHtcbiYjNDM7XHRcdFx0Y21kLVx1MDAzZWJhc2Uuc3BlZWQgPSBTUEVFRF8yNTAwO1xuJiM0MztcdFx0XHQvKiBNRElPX0FOXzEwR0JUX1NUQVRfTFAyXzVHIGlzIGJyb2tlbiwgYnV0IHdlIGNhbiBkZWR1Y2UgdGhhdFxuJiM0MztcdFx0XHQgKiB0aGUgbGluay1wYXJ0bmVyIGFkdmVydGlzZWQgMjUwME0gaWYgcmVtb3RlbHkgQU4gc3VjY2NlZGVkXG4mIzQzO1x0XHRcdCAqIGZvciBsaW5rIHNwZWVkIFx1MDAzZSAxMDAwTSBhbmQgd2UgbG9jYWxseSBoYXZlIGEgbGluayBzcGVlZCBvZlxuJiM0MztcdFx0XHQgKiAyNTAwTVxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKHYgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiB2IFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfUkVNT0spXG4mIzQzO1x0XHRcdFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdFx0XHRcdCBjbWQtXHUwMDNlbGlua19tb2Rlcy5scF9hZHZlcnRpc2luZyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02NjQsMzQgJiM0Mzs5OTcsMTI4IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4ge1xuIFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhO1xuJiM0MztcdGludCB2O1xuJiM0MztcbiYjNDM7XHRkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuJiM0MztcbiYjNDM7XHQvKiBtaWlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MgaGFuZGxlcyB1bmtub3duIGJpdHMgaW4gTUlJX0FEVkVSVElTRVxuJiM0MztcdCAqIHRyYW5zcGFyZW50bHksIHNvIGZvciB0aGUgMi41R0JpdCBsaW5rIHNwZWVkIG9mIHRoZSBBWF9WRVJTSU9OX0FYODgyNzlcbiYjNDM7XHQgKiB3ZSBqdXN0IHNldCB1cCBBRFZFUlRJU0VfUkVTViBiZWZvcmUgY2FsbGluZyBtaWlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3NcbiYjNDM7XHQgKiBhdCBsZWFzdCBmb3Igc3BlZWRzIFx1MDAzYyAyNTAwXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRhdGEtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuJiM0MztcdFx0diA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xuJiM0MztcdFx0aWYgKHYgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiB2O1xuJiM0MztcbiYjNDM7XHRcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdFx0ICAgICAgY21kLVx1MDAzZWxpbmtfbW9kZXMuYWR2ZXJ0aXNpbmcpKVxuJiM0MztcdFx0XHR2IHw9IEFEVkVSVElTRV9SRVNWO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHR2IFx1MDAyNj0gfkFEVkVSVElTRV9SRVNWO1xuJiM0MztcdFx0YXg4ODE3OV9tZGlvX3dyaXRlKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIHYpO1xuJiM0MztcdFx0aWYgKGNtZC1cdTAwM2ViYXNlLnNwZWVkID09IFNQRUVEXzI1MDApXG4mIzQzO1x0XHRcdHJldHVybiBtaWlfbndheV9yZXN0YXJ0KFx1MDAyNmRldi1cdTAwM2VtaWkpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gbWlpX2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzKFx1MDAyNmRldi1cdTAwM2VtaWksIGNtZCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBheDg4MTc5YV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YTtcbiYjNDM7XHR1MTYgYm1jciwgbGNsYWR2LCBybXRhZHY7XG4mIzQzO1x0dTggY2FwO1xuJiM0MztcbiYjNDM7XHRkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGJtY3IgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi1cdTAwM2VtaWkucGh5X2lkLCBNSUlfQk1DUik7XG4mIzQzO1x0bGNsYWR2ID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7XG4mIzQzO1x0cm10YWR2ID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0xQQSk7XG4mIzQzO1xuJiM0MztcdGlmICghKGJtY3IgXHUwMDI2IEJNQ1JfQU5FTkFCTEUpKSB7XG4mIzQzO1x0XHRwYXVzZS1cdTAwM2VhdXRvbmVnID0gMDtcbiYjNDM7XHRcdHBhdXNlLVx1MDAzZXJ4X3BhdXNlID0gMDtcbiYjNDM7XHRcdHBhdXNlLVx1MDAzZXR4X3BhdXNlID0gMDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBhdXNlLVx1MDAzZWF1dG9uZWcgPSAxO1xuJiM0MztcbiYjNDM7XHRjYXAgPSBtaWlfcmVzb2x2ZV9mbG93Y3RybF9mZHgobGNsYWR2LCBybXRhZHYpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2FwIFx1MDAyNiBGTE9XX0NUUkxfUlgpXG4mIzQzO1x0XHRwYXVzZS1cdTAwM2VyeF9wYXVzZSA9IDE7XG4mIzQzO1xuJiM0MztcdGlmIChjYXAgXHUwMDI2IEZMT1dfQ1RSTF9UWClcbiYjNDM7XHRcdHBhdXNlLVx1MDAzZXR4X3BhdXNlID0gMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBheDg4MTc5YV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YTtcbiYjNDM7XHR1MTYgb2xkLCBuZXcxLCBibWNyO1xuJiM0MztcdHU4IGNhcCA9IDA7XG4mIzQzO1xuJiM0MztcdGRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChkYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Ym1jciA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAocGF1c2UtXHUwMDNlYXV0b25lZyBcdTAwMjZcdTAwMjYgIShibWNyIFx1MDAyNiBCTUNSX0FORU5BQkxFKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocGF1c2UtXHUwMDNlcnhfcGF1c2UpXG4mIzQzO1x0XHRjYXAgfD0gRkxPV19DVFJMX1JYO1xuJiM0MztcbiYjNDM7XHRpZiAocGF1c2UtXHUwMDNldHhfcGF1c2UpXG4mIzQzO1x0XHRjYXAgfD0gRkxPV19DVFJMX1RYO1xuJiM0MztcbiYjNDM7XHRvbGQgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi1cdTAwM2VtaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTtcbiYjNDM7XHRuZXcxID0gKG9sZCBcdTAwMjYgfihBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU0pKSB8XG4mIzQzO1x0XHRtaWlfYWR2ZXJ0aXNlX2Zsb3djdHJsKGNhcCk7XG4mIzQzO1x0aWYgKG9sZCAhPSBuZXcxKVxuJiM0MztcdFx0YXg4ODE3OV9tZGlvX3dyaXRlKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIG5ldzEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50XG4gYXg4ODE3OV9ldGh0b29sX2dldF9lZWUoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFx0aW50IHZhbDtcbiBcbiBcdC8qIEdldCBTdXBwb3J0ZWQgRUVFICovXG4tXHR2YWwgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsIE1ESU9fUENTX0VFRV9BQkxFLFxuLVx0XHRcdFx0XHQgICAgTURJT19NTURfUENTKTtcbiYjNDM7XHR2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX1BDUywgTURJT19QQ1NfRUVFX0FCTEUpO1xuIFx0aWYgKHZhbCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHZhbDtcbiBcdG1paV9lZWVfY2FwMV9tb2RfbGlua21vZGVfdChkYXRhLVx1MDAzZXN1cHBvcnRlZCwgdmFsKTtcbiBcbiBcdC8qIEdldCBhZHZlcnRpc2VtZW50IEVFRSAqL1xuLVx0dmFsID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LCBNRElPX0FOX0VFRV9BRFYsXG4tXHRcdFx0XHRcdCAgICBNRElPX01NRF9BTik7XG4mIzQzO1x0dmFsID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWKTtcbiBcdGlmICh2YWwgXHUwMDNjIDApXG4gXHRcdHJldHVybiB2YWw7XG4gXHRtaWlfZWVlX2NhcDFfbW9kX2xpbmttb2RlX3QoZGF0YS1cdTAwM2VhZHZlcnRpc2VkLCB2YWwpO1xuIFxuIFx0LyogR2V0IExQIGFkdmVydGlzZW1lbnQgRUVFICovXG4tXHR2YWwgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsIE1ESU9fQU5fRUVFX0xQQUJMRSxcbi1cdFx0XHRcdFx0ICAgIE1ESU9fTU1EX0FOKTtcbiYjNDM7XHR2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9MUEFCTEUpO1xuIFx0aWYgKHZhbCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHZhbDtcbiBcdG1paV9lZWVfY2FwMV9tb2RfbGlua21vZGVfdChkYXRhLVx1MDAzZWxwX2FkdmVydGlzZWQsIHZhbCk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHR2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9MUEFCTEUyKTtcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiB2YWw7XG4mIzQzO1x0XHRtaWlfZWVlX2NhcDJfbW9kX2xpbmttb2RlX2Fkdl90KGRhdGEtXHUwMDNlbHBfYWR2ZXJ0aXNlZCwgdmFsKTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzAxLDggJiM0MzsxMTI4LDcgQEAgYXg4ODE3OV9ldGh0b29sX3NldF9lZWUoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIHtcbiBcdHUxNiB0bXAxNiA9IGxpbmttb2RlX3RvX21paV9lZWVfY2FwMV90KGRhdGEtXHUwMDNlYWR2ZXJ0aXNlZCk7XG4gXG4tXHRyZXR1cm4gYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KGRldiwgTURJT19BTl9FRUVfQURWLFxuLVx0XHRcdFx0XHQgICAgICBNRElPX01NRF9BTiwgdG1wMTYpO1xuJiM0MztcdHJldHVybiBheF93cml0ZV9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWLCB0bXAxNik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGtfZWVlKHN0cnVjdCB1c2JuZXQgKmRldilcbkBAIC03MTIsNDAgJiM0MzsxMTM4LDI3IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGtfZWVlKHN0cnVjdCB1c2JuZXQgKmRldilcbiBcbiBcdG1paV9ldGh0b29sX2dzZXQoXHUwMDI2ZGV2LVx1MDAzZW1paSwgXHUwMDI2ZWNtZCk7XG4gXG4tXHRpZiAoZWNtZC5kdXBsZXggXHUwMDI2IERVUExFWF9GVUxMKSB7XG4mIzQzO1x0cHJpdi1cdTAwM2VlZWVfYWN0aXZlID0gMDtcbiYjNDM7XHRpZiAoKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzYyBBWF9WRVJTSU9OX0FYODgyNzkgXHUwMDI2XHUwMDI2IChlY21kLmR1cGxleCBcdTAwMjYgRFVQTEVYX0ZVTEwpKSB8fFxuJiM0MztcdCAgICAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwIFx1MDAyNlx1MDAyNiAoZWNtZC5kdXBsZXggXHUwMDI2IERVUExFWF9GVUxMKSkpIHtcbiBcdFx0aW50IGVlZV9scCwgZWVlX2NhcCwgZWVlX2FkdjtcbiBcdFx0dTMyIGxwLCBjYXAsIGFkdiwgc3VwcG9ydGVkID0gMDtcbiBcbi1cdFx0ZWVlX2NhcCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldixcbi1cdFx0XHRcdFx0XHRcdE1ESU9fUENTX0VFRV9BQkxFLFxuLVx0XHRcdFx0XHRcdFx0TURJT19NTURfUENTKTtcbi1cdFx0aWYgKGVlZV9jYXAgXHUwMDNjIDApIHtcbi1cdFx0XHRwcml2LVx1MDAzZWVlZV9hY3RpdmUgPSAwO1xuJiM0MztcdFx0ZWVlX2NhcCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfUENTLCBNRElPX1BDU19FRUVfQUJMRSk7XG4mIzQzO1x0XHRpZiAoZWVlX2NhcCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcbiBcdFx0Y2FwID0gbW1kX2VlZV9jYXBfdG9fZXRodG9vbF9zdXBfdChlZWVfY2FwKTtcbi1cdFx0aWYgKCFjYXApIHtcbi1cdFx0XHRwcml2LVx1MDAzZWVlZV9hY3RpdmUgPSAwO1xuJiM0MztcdFx0aWYgKCFjYXApXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4tXG4tXHRcdGVlZV9scCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldixcbi1cdFx0XHRcdFx0XHQgICAgICAgTURJT19BTl9FRUVfTFBBQkxFLFxuLVx0XHRcdFx0XHRcdCAgICAgICBNRElPX01NRF9BTik7XG4tXHRcdGlmIChlZWVfbHAgXHUwMDNjIDApIHtcbi1cdFx0XHRwcml2LVx1MDAzZWVlZV9hY3RpdmUgPSAwO1xuLVx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0fVxuIFxuLVx0XHRlZWVfYWR2ID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LFxuLVx0XHRcdFx0XHRcdFx0TURJT19BTl9FRUVfQURWLFxuLVx0XHRcdFx0XHRcdFx0TURJT19NTURfQU4pO1xuJiM0MztcdFx0ZWVlX2xwID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfTFBBQkxFKTtcbiYjNDM7XHRcdGlmIChlZWVfbHAgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuIFxuLVx0XHRpZiAoZWVlX2FkdiBcdTAwM2MgMCkge1xuLVx0XHRcdHByaXYtXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4mIzQzO1x0XHRlZWVfYWR2ID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWKTtcbiYjNDM7XHRcdGlmIChlZWVfYWR2IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdFx0YWR2ID0gbW1kX2VlZV9hZHZfdG9fZXRodG9vbF9hZHZfdChlZWVfYWR2KTtcbiBcdFx0bHAgPSBtbWRfZWVlX2Fkdl90b19ldGh0b29sX2Fkdl90KGVlZV9scCk7XG5AQCAtNzUzLDY1ICYjNDM7MTE2Niw1MyBAQCBzdGF0aWMgaW50IGF4ODgxNzlfY2hrX2VlZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gXHRcdFx0ICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgOlxuIFx0XHRcdCAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGw7XG4gXG4tXHRcdGlmICghKGxwIFx1MDAyNiBhZHYgXHUwMDI2IHN1cHBvcnRlZCkpIHtcbi1cdFx0XHRwcml2LVx1MDAzZWVlZV9hY3RpdmUgPSAwO1xuLVx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKCEobHAgXHUwMDI2IGFkdiBcdTAwMjYgc3VwcG9ydGVkKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRcdHByaXYtXHUwMDNlZWVlX2FjdGl2ZSA9IDE7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0cHJpdi1cdTAwM2VlZWVfYWN0aXZlID0gMDtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXg4ODE3OV9kaXNhYmxlX2VlZShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4te1xuLVx0dTE2IHRtcDE2O1xuLVxuLVx0dG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFMztcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuLVxuLVx0dG1wMTYgPSAweDMyNDY7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuLVx0XHRcdCAgTUlJX1BIWUFERFIsIDIsIFx1MDAyNnRtcDE2KTtcbi1cbi1cdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTA7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuLVx0XHRcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFx1MDAyNnRtcDE2KTtcbi19XG4tXG4tc3RhdGljIHZvaWQgYXg4ODE3OV9lbmFibGVfZWVlKHN0cnVjdCB1c2JuZXQgKmRldilcbiYjNDM7c3RhdGljIHZvaWQgYXg4ODE3OV9lZWVfY29uZmlnKHN0cnVjdCB1c2JuZXQgKmRldiwgYm9vbCBlbmFibGUpXG4ge1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXHR1MTYgdG1wMTY7XG4gXG4tXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UzO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbi1cdFx0XHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcdTAwMjZ0bXAxNik7XG4tXG4tXHR0bXAxNiA9IDB4MzI0Nztcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBNSUlfUEhZQUREUiwgMiwgXHUwMDI2dG1wMTYpO1xuLVxuLVx0dG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFNTtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuLVxuLVx0dG1wMTYgPSAweDA2ODA7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuLVx0XHRcdCAgTUlJX0JNU1IsIDIsIFx1MDAyNnRtcDE2KTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbiYjNDM7XHRcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTM7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuJiM0MztcdFx0XHRcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFx1MDAyNnRtcDE2KTtcbiYjNDM7XG4mIzQzO1x0XHR0bXAxNiA9IGVuYWJsZSA/IDB4MzI0NyA6IDB4MzI0NjtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4mIzQzO1x0XHRcdFx0ICBNSUlfUEhZQUREUiwgMiwgXHUwMDI2dG1wMTYpO1xuJiM0MztcdFx0aWYgKGVuYWJsZSkge1xuJiM0MztcdFx0XHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0U1O1xuJiM0MztcdFx0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuJiM0MztcdFx0XHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuJiM0MztcbiYjNDM7XHRcdFx0dG1wMTYgPSAweDA2ODA7XG4mIzQzO1x0XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4mIzQzO1x0XHRcdFx0XHQgIE1JSV9CTVNSLCAyLCBcdTAwMjZ0bXAxNik7XG4mIzQzO1x0XHR9XG4gXG4tXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UwO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbi1cdFx0XHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcdTAwMjZ0bXAxNik7XG4mIzQzO1x0XHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UwO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbiYjNDM7XHRcdFx0XHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcdTAwMjZ0bXAxNik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfR1BIWV9DVEwsIEFYX0dQSFlfRUVFX0NUUkwsIGVuYWJsZSwgMCwgTlVMTCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IGF4ODgxNzlfZ2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuLVx0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFxuIFx0ZWRhdGEtXHUwMDNlZWVlX2VuYWJsZWQgPSBwcml2LVx1MDAzZWVlZV9lbmFibGVkO1xuIFx0ZWRhdGEtXHUwMDNlZWVlX2FjdGl2ZSA9IHByaXYtXHUwMDNlZWVlX2FjdGl2ZTtcbkBAIC04MjIsMTggJiM0MzsxMjIzLDIwIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxuIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4tXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXY7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdHByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4mIzQzO1xuIFx0cHJpdi1cdTAwM2VlZWVfZW5hYmxlZCA9IGVkYXRhLVx1MDAzZWVlZV9lbmFibGVkO1xuIFx0aWYgKCFwcml2LVx1MDAzZWVlZV9lbmFibGVkKSB7XG4tXHRcdGF4ODgxNzlfZGlzYWJsZV9lZWUoZGV2KTtcbiYjNDM7XHRcdGF4ODgxNzlfZWVlX2NvbmZpZyhkZXYsIGZhbHNlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHByaXYtXHUwMDNlZWVlX2VuYWJsZWQgPSBheDg4MTc5X2Noa19lZWUoZGV2KTtcbiBcdFx0aWYgKCFwcml2LVx1MDAzZWVlZV9lbmFibGVkKVxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdFx0YXg4ODE3OV9lbmFibGVfZWVlKGRldik7XG4mIzQzO1x0XHRheDg4MTc5X2VlZV9jb25maWcoZGV2LCB0cnVlKTtcbiBcdH1cbiBcbiBcdHJldCA9IGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgZWRhdGEpO1xuQEAgLTg0OCw2ICYjNDM7MTI1MSw3IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzlfZXRodG9vbF9vcHMgPSB7XG4mIzQzO1x0LmdldF9kcnZpbmZvXHRcdD0gYXg4ODE3OV9nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4gXHQuZ2V0X21zZ2xldmVsXHRcdD0gdXNibmV0X2dldF9tc2dsZXZlbCxcbiBcdC5zZXRfbXNnbGV2ZWxcdFx0PSB1c2JuZXRfc2V0X21zZ2xldmVsLFxuQEAgLTg2MSwxNiAmIzQzOzEyNjUsNzggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheDg4MTc5X2V0aHRvb2xfb3BzID0ge1xuIFx0Lm53YXlfcmVzZXRcdFx0PSB1c2JuZXRfbndheV9yZXNldCxcbiBcdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gYXg4ODE3OV9nZXRfbGlua19rc2V0dGluZ3MsXG4gXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IGF4ODgxNzlfc2V0X2xpbmtfa3NldHRpbmdzLFxuJiM0MztcdC5nZXRfcGF1c2VwYXJhbVx0XHQ9IGF4ODgxNzlhX2dldF9wYXVzZXBhcmFtLFxuJiM0MztcdC5zZXRfcGF1c2VwYXJhbVx0XHQ9IGF4ODgxNzlhX3NldF9wYXVzZXBhcmFtLFxuIFx0LmdldF90c19pbmZvXHRcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50IGF4MTc5YV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIF9fYmUxNiBwcm90bywgdTE2IHZpZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4mIzQzO1x0dTggdmxhbl9jdHJsO1xuJiM0MztcdHUxNiByZWcxNjtcbiYjNDM7XHR1OCByZWc4O1xuJiM0MztcbiYjNDM7XHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZyZWc4KTtcbiYjNDM7XHR2bGFuX2N0cmwgPSByZWc4O1xuJiM0MztcbiYjNDM7XHQvKiBBZGRyZXNzICovXG4mIzQzO1x0cmVnOCA9ICh2aWQgLyAxNik7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MsIDEsIDEsIFx1MDAyNnJlZzgpO1xuJiM0MztcbiYjNDM7XHQvKiBEYXRhICovXG4mIzQzO1x0cmVnOCA9IHZsYW5fY3RybCB8IEFYX1ZMQU5fQ09OVFJPTF9SRDtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2cmVnOCk7XG4mIzQzO1xuJiM0MztcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCBcdTAwMjZyZWcxNik7XG4mIzQzO1x0cmVnMTYgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjICh2aWQgJSAxNikpO1xuJiM0MztcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMCwgMiwgMiwgXHUwMDI2cmVnMTYpO1xuJiM0MztcbiYjNDM7XHRyZWc4ID0gdmxhbl9jdHJsIHwgQVhfVkxBTl9DT05UUk9MX1dFO1xuJiM0MztcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZyZWc4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuJiM0MztcdHU4IHZsYW5fY3RybDtcbiYjNDM7XHR1MTYgcmVnMTY7XG4mIzQzO1x0dTggcmVnODtcbiYjNDM7XG4mIzQzO1x0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2cmVnOCk7XG4mIzQzO1x0dmxhbl9jdHJsID0gcmVnODtcbiYjNDM7XG4mIzQzO1x0LyogQWRkcmVzcyAqL1xuJiM0MztcdHJlZzggPSAodmlkIC8gMTYpO1xuJiM0MztcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9BRERSRVNTLCAxLCAxLCBcdTAwMjZyZWc4KTtcbiYjNDM7XG4mIzQzO1x0LyogRGF0YSAqL1xuJiM0MztcdHJlZzggPSB2bGFuX2N0cmwgfCBBWF9WTEFOX0NPTlRST0xfUkQ7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFx1MDAyNnJlZzgpO1xuJiM0MztcbiYjNDM7XHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMCwgMiwgMiwgXHUwMDI2cmVnMTYpO1xuJiM0MztcdHJlZzE2IHw9ICgxIFx1MDAzY1x1MDAzYyAodmlkICUgMTYpKTtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfREFUQTAsIDIsIDIsIFx1MDAyNnJlZzE2KTtcbiYjNDM7XG4mIzQzO1x0cmVnOCA9IHZsYW5fY3RybCB8IEFYX1ZMQU5fQ09OVFJPTF9XRTtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2cmVnOCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGF4ODgxNzlfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4tXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFx0dTggKm1fZmlsdGVyID0gKCh1OCAqKWRldi1cdTAwM2VkYXRhKTtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhO1xuJiM0MztcbiYjNDM7XHRkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFxuLVx0ZGF0YS1cdTAwM2VyeGN0bCA9IChBWF9SWF9DVExfU1RBUlQgfCBBWF9SWF9DVExfQUIgfCBBWF9SWF9DVExfSVBFKTtcbiYjNDM7XHRkYXRhLVx1MDAzZXJ4Y3RsID0gKEFYX1JYX0NUTF9TVEFSVCB8IEFYX1JYX0NUTF9BQiB8IEFYX1JYX0NUTF9EUk9QQ1JDRVJSKTtcbiYjNDM7XHRpZiAoZGF0YS1cdTAwM2VpcF9hbGlnbilcbiYjNDM7XHRcdGRhdGEtXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX0lQRTtcbiBcbiBcdGlmIChuZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSB7XG4gXHRcdGRhdGEtXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX1BSTztcbkBAIC05MDksNiAmIzQzOzEzNzUsNyBAQCBheDg4MTc5X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiB7XG4gXHR1OCB0bXA7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXHRuZXRkZXZfZmVhdHVyZXNfdCBjaGFuZ2VkID0gbmV0LVx1MDAzZWZlYXR1cmVzIF4gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9JUF9DU1VNKSB7XG5AQCAtOTI4LDYgJiM0MzsxMzk1LDM0IEBAIGF4ODgxNzlfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0XHR0bXAgXj0gQVhfUlhDT0VfSVAgfCBBWF9SWENPRV9UQ1AgfCBBWF9SWENPRV9VRFAgfFxuIFx0XHQgICAgICAgQVhfUlhDT0VfVENQVjYgfCBBWF9SWENPRV9VRFBWNjtcbiBcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWENPRV9DVEwsIDEsIDEsIFx1MDAyNnRtcCk7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZXJ4X2NoZWNrc3VtID0gISEoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfUlhDU1VNKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpIHtcbiYjNDM7XHRcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFx1MDAyNnRtcCk7XG4mIzQzO1x0XHR0bXAgXj0gQVhfVkxBTl9DT05UUk9MX1ZGRTtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZ0bXApO1xuJiM0MztcdFx0aWYgKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpIHtcbiYjNDM7XHRcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIDI1NjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHR1MTYgdG1wMTY7XG4mIzQzO1x0XHRcdFx0LyogQWRkcmVzcyAqL1xuJiM0MztcdFx0XHRcdHRtcCA9IGk7XG4mIzQzO1x0XHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MsXG4mIzQzO1x0XHRcdFx0XHRcdCAgMSwgMSwgXHUwMDI2dG1wKTtcbiYjNDM7XHRcdFx0XHQvKiBEYXRhICovXG4mIzQzO1x0XHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLFxuJiM0MztcdFx0XHRcdFx0XHQgIDIsIDIsIFx1MDAyNnRtcDE2KTtcbiYjNDM7XHRcdFx0XHR0bXAgPSBBWF9WTEFOX0NPTlRST0xfV0U7XG4mIzQzO1x0XHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsXG4mIzQzO1x0XHRcdFx0XHRcdCAgMSwgMSwgXHUwMDI2dG1wKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYKSB7XG4mIzQzO1x0XHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZ0bXApO1xuJiM0MztcdFx0dG1wIF49IEFYX1ZMQU5fQ09OVFJPTF9WU087XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2dG1wKTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTk5NSw2ICYjNDM7MTQ5MCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXg4ODE3OV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19ldGhfaW9jdGxcdFx0PSB1c2JuZXRfbWlpX2lvY3RsLFxuIFx0Lm5kb19zZXRfcnhfbW9kZVx0PSBheDg4MTc5X3NldF9tdWx0aWNhc3QsXG4gXHQubmRvX3NldF9mZWF0dXJlc1x0PSBheDg4MTc5X3NldF9mZWF0dXJlcyxcbiYjNDM7XHQubmRvX3ZsYW5fcnhfYWRkX3ZpZFx0PSBheDE3OWFfdmxhbl9yeF9hZGRfdmlkLFxuJiM0MztcdC5uZG9fdmxhbl9yeF9raWxsX3ZpZFx0PSBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGVja19lZXByb20oc3RydWN0IHVzYm5ldCAqZGV2KVxuQEAgLTEyOTMsNiAmIzQzOzE3OTAsMTcgQEAgc3RhdGljIGludCBheDg4MTc5X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiBcbiBcdGRldi1cdTAwM2Vkcml2ZXJfcHJpdiA9IGF4MTc5X2RhdGE7XG4gXG4mIzQzO1x0cmV0ID0gYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NISVBfU1RBVFVTLFxuJiM0MztcdFx0XHQgICAgICAgMSwgMSwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9ub2RldjtcbiYjNDM7XG4mIzQzO1x0YXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPSAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDI2IDB4ZjApIFx1MDAzZVx1MDAzZSA0O1xuJiM0MztcdGF4MTc5X2RhdGEtXHUwMDNlaXNfYXg4ODc3MmQgPSAwO1xuJiM0MztcdGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPSAxO1xuJiM0MztcdGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX3JlYWRfY21kID0gQVhfQUNDRVNTX0VFUFJPTTtcbiYjNDM7XHRheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9ibG9jayA9IDI7XG4mIzQzO1xuIFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2YXg4ODE3OV9uZXRkZXZfb3BzO1xuIFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNmF4ODgxNzlfZXRodG9vbF9vcHM7XG4gXHRkZXYtXHUwMDNlbmV0LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDg7XG5AQCAtMTMxNyw2ICYjNDM7MTgyNSwxMjAgQEAgc3RhdGljIGludCBheDg4MTc5X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiBcdGF4ODgxNzlfcmVzZXQoZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX25vZGV2OlxuJiM0MztcdGtmcmVlKGF4MTc5X2RhdGEpO1xuJiM0MztcdGF4MTc5X2RhdGEgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGF4ODgxNzlhX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIGlmIHZlbmRvciBjb25maWd1cmF0aW9uICovXG4mIzQzO1x0aWYgKHVkZXYtXHUwMDNlYWN0Y29uZmlnLVx1MDAzZWRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7XG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtTd2l0Y2hpbmcgdG8gdmVuZG9yIG1vZGVcXG5cJiMzNDspO1xuJiM0MztcdFx0dXNiX2RyaXZlcl9zZXRfY29uZmlndXJhdGlvbih1ZGV2LCAxKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0YXgxNzlfZGF0YSA9IGt6YWxsb2Nfb2JqKCpheDE3OV9kYXRhKTtcbiYjNDM7XHRpZiAoIWF4MTc5X2RhdGEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZWRyaXZlcl9wcml2ID0gYXgxNzlfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NISVBfU1RBVFVTLFxuJiM0MztcdFx0XHQgICAgICAgMSwgMSwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9ub2RldjtcbiYjNDM7XG4mIzQzO1x0YXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPSAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDI2IDB4ZjApIFx1MDAzZVx1MDAzZSA0O1xuJiM0MztcdGF4MTc5X2RhdGEtXHUwMDNlaXNfYXg4ODc3MmQgPSAwO1xuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XG4mIzQzO1x0XHRpZiAodWRldi1cdTAwM2VkZXNjcmlwdG9yLmJjZERldmljZSA9PSAweDMwMClcbiYjNDM7XHRcdFx0YXgxNzlfZGF0YS1cdTAwM2Vpc19heDg4NzcyZCA9IDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgMzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9BQ0NFU1NfQkwsICgweEZEICYjNDM7IGkpLFxuJiM0MztcdFx0XHRcdCAgICAgICAxLCAxLCBcdTAwMjZheDE3OV9kYXRhLVx1MDAzZWZ3X3ZlcnNpb25baV0pO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YXgxNzlfZGF0YS1cdTAwM2Vmd192ZXJzaW9uW2ldID0gMHhmZjtcbiYjNDM7XHR9XG4mIzQzO1x0bmV0ZGV2X2luZm8oZGV2LVx1MDAzZW5ldCwgXCYjMzQ7QVg4ODE3OUEvMjc5Lzc3MkQgQ2hpcCBWZXJzaW9uOiAleCwgRlc6ICVkLiVkLiVkLiVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgIGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uLFxuJiM0MztcdFx0ICAgIGF4MTc5X2RhdGEtXHUwMDNlZndfdmVyc2lvblswXSwgYXgxNzlfZGF0YS1cdTAwM2Vmd192ZXJzaW9uWzFdLFxuJiM0MztcdFx0ICAgIGF4MTc5X2RhdGEtXHUwMDNlZndfdmVyc2lvblsyXSwgYXgxNzlfZGF0YS1cdTAwM2Vmd192ZXJzaW9uWzNdKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIEFYODgyNzkgcmVxdWlyZXMgYm90aCB0aGUgQVhfUlhfQ1RMX0lQRSBhbmQgQVhfUlhfQ1RMX0RST1BDUkNFUlJcbiYjNDM7XHQgKiBiaXRzIHNldCBpbiBBWF9SWF9DVEwgZm9yIGNyZWF0aW5nIGNvcnJlY3QgUlgtVVJCcy4gQVhfUlhfQ1RMX0RST1BDUkNFUlJcbiYjNDM7XHQgKiBpcyBhbnl3YXkgc2V0IGZvciBhbGwgY2hpcHMsIG1ha2Ugc3VyZSBBWF9SWF9DVExfSVBFIGlzIHNldCB2aWEgaXBfYWxpZ24uXG4mIzQzO1x0ICogQWxzbyBjb25maWd1cmUgZWVwcm9tIGFjY2VzcyBwYXJhbWV0ZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcbiYjNDM7XHRcdGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPSAxO1xuJiM0MztcdFx0YXgxNzlfZGF0YS1cdTAwM2VlZXByb21fcmVhZF9jbWQgPSBBWDg4MTc5QV9GTEFTSF9SRUFEO1xuJiM0MztcdFx0YXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2sgPSAyNTY7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPSAwO1xuJiM0MztcdFx0YXgxNzlfZGF0YS1cdTAwM2VlZXByb21fcmVhZF9jbWQgPSBBWF9BQ0NFU1NfRUZVUztcbiYjNDM7XHRcdGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrID0gMjA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXYtXHUwMDNlbmV0LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZheDg4MTc5X25ldGRldl9vcHM7XG4mIzQzO1x0ZGV2LVx1MDAzZW5ldC1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNmF4ODgxNzlfZXRodG9vbF9vcHM7XG4mIzQzO1x0ZGV2LVx1MDAzZW5ldC1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSA4O1xuJiM0MztcdGRldi1cdTAwM2VuZXQtXHUwMDNlbmVlZGVkX3RhaWxyb29tID0gODtcbiYjNDM7XHRkZXYtXHUwMDNlbmV0LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbiYjNDM7XHRkZXYtXHUwMDNlaGFyZF9tdHUgPSA5ICogMTAyNDtcbiYjNDM7XHRkZXYtXHUwMDNlbmV0LVx1MDAzZW1heF9tdHUgPSBkZXYtXHUwMDNlaGFyZF9tdHUgLSBkZXYtXHUwMDNlbmV0LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBNSUkgc3RydWN0dXJlICovXG4mIzQzO1x0ZGV2LVx1MDAzZW1paS5kZXYgPSBkZXYtXHUwMDNlbmV0O1xuJiM0MztcdGRldi1cdTAwM2VtaWkubWRpb19yZWFkID0gYXg4ODE3OV9tZGlvX3JlYWQ7XG4mIzQzO1x0ZGV2LVx1MDAzZW1paS5tZGlvX3dyaXRlID0gYXg4ODE3OV9tZGlvX3dyaXRlO1xuJiM0MztcdGRldi1cdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweGZmO1xuJiM0MztcdGRldi1cdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHhmZjtcbiYjNDM7XHRkZXYtXHUwMDNlbWlpLnBoeV9pZCA9IDB4MDM7XG4mIzQzO1x0aWYgKCFheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkKVxuJiM0MztcdFx0ZGV2LVx1MDAzZW1paS5zdXBwb3J0c19nbWlpID0gMTtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZW5ldC1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcbiYjNDM7XHRcdFx0ICAgICAgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfVFNPIHxcbiYjNDM7XHRcdFx0ICAgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8XG4mIzQzO1x0XHRcdCAgICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZW5ldC1cdTAwM2Vod19mZWF0dXJlcyB8PSBkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzO1xuJiM0MztcbiYjNDM7XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcbiYjNDM7XHRcdFx0XHQgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX1RTTztcbiYjNDM7XG4mIzQzO1x0bmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShkZXYtXHUwMDNlbmV0LCAxNjM4NCk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBUcmFuc21pc3Npb24gb2YgTGluayBTcGVlZCBieXRlIGluIGludGVycnVwdCBVUkIgKi9cbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0ZXX01PREUsIEFYX0ZXX01PREVfMTc5QSwgMCwgMCwgTlVMTCk7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9SRUxPQURfRUVQUk9NX0VGVVNFLCAwLCAwLCAwLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVhZCBNQUMgYWRkcmVzcyBmcm9tIERUQiBvciBBU0lYIGNoaXAgKi9cbiYjNDM7XHRheDg4MTc5X2dldF9tYWNfYWRkcihkZXYpO1xuJiM0MztcdG1lbWNweShkZXYtXHUwMDNlbmV0LVx1MDAzZXBlcm1fYWRkciwgZGV2LVx1MDAzZW5ldC1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9ub2RldjpcbiYjNDM7XHRrZnJlZShheDE3OV9kYXRhKTtcbiYjNDM7XHRheDE3OV9kYXRhID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYXg4ODE3OV91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbkBAIC0xMzM4LDYgJiM0MzsxOTYwLDIyIEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRrZnJlZShheDE3OV9kYXRhKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGF4ODgxNzlhX3VuYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiYjNDM7XHR1MTYgdG1wMTY7XG4mIzQzO1x0dTggdG1wODtcbiYjNDM7XG4mIzQzO1x0LyogQ29uZmlndXJlIFJYIGNvbnRyb2wgcmVnaXN0ZXIgPVx1MDAzZSBzdG9wIG9wZXJhdGlvbiAqL1xuJiM0MztcdHRtcDE2ID0gQVhfUlhfQ1RMX1NUT1A7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsIFx1MDAyNnRtcDE2KTtcbiYjNDM7XG4mIzQzO1x0dG1wOCA9IDA7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHRrZnJlZShheDE3OV9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIGF4ODgxNzlfcnhfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpwa3RfaGRyKVxuIHtcbkBAIC0xMzU0LDYgJiM0MzsxOTkyLDIxIEBAIGF4ODgxNzlfcnhfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpwa3RfaGRyKVxuIFx0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBheDg4MTc5YV9yeF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgcGt0X2Rlc2MpXG4mIzQzO3tcbiYjNDM7XHR1MzIgcGt0X3R5cGU7XG4mIzQzO1xuJiM0MztcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuJiM0MztcdC8qIGNoZWNrc3VtIGVycm9yIGJpdCBpcyBzZXQgKi9cbiYjNDM7XHRpZiAocGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MNF9FUlIgfHwgcGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MM19FUlIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBrdF90eXBlID0gcGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MNF9UWVBFX01BU0s7XG4mIzQzO1x0LyogSXQgbXVzdCBiZSBhIFRDUCBvciBVRFAgcGFja2V0IHdpdGggYSB2YWxpZCBjaGVja3N1bSAqL1xuJiM0MztcdGlmIChwa3RfdHlwZSA9PSBBWDE3OUFfUlhfUERfTDRfVENQIHx8IHBrdF90eXBlID09IEFYMTc5QV9SWF9QRF9MNF9VRFApXG4mIzQzO1x0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBheDg4MTc5X3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiO1xuQEAgLTE0NzIsNiAmIzQzOzIxMjUsMTIxIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYXg4ODE3OWFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiO1xuJiM0MztcdHUzMiBoZHJfb2ZmLCBwa3RfZW5kO1xuJiM0MztcdHU2NCAqcGt0X2Rlc2NfcHRyO1xuJiM0MztcdHUxNiB2bGFuX3RhZztcbiYjNDM7XHR1MTYgcGt0X2NudDtcbiYjNDM7XHR1NjQgcnhfaGRyO1xuJiM0MztcbiYjNDM7XHQvKiBTS0IgY29udGVudHMgZm9yIEFYMTc5QS1iYXNlZCBjaGlwczpcbiYjNDM7XHQgKiAgIFx1MDAzY3BhY2tldCAxXHUwMDNlXG4mIzQzO1x0ICogICAuLi5cbiYjNDM7XHQgKiAgIFx1MDAzY3BhY2tldCBOXHUwMDNlXG4mIzQzO1x0ICogICBcdTAwM2NwZXItcGFja2V0IG1ldGFkYXRhIGVudHJ5IDFcdTAwM2VcbiYjNDM7XHQgKiAgIC4uLlxuJiM0MztcdCAqICAgXHUwMDNjcGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSBOXHUwMDNlXG4mIzQzO1x0ICogICBcdTAwM2NyeF9oZHJcdTAwM2VcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHdoZXJlOlxuJiM0MztcdCAqICAgXHUwMDNjcGFja2V0IE5cdTAwM2UgY29udGFpbnMgcGt0X2xlbiBkYXRhIGJ5dGVzIGFuZCBwYWRkaW5nOlxuJiM0MztcdCAqXHRcdDIgYnl0ZXMgb2YgSVAgYWxpZ25tZW50IChvcHRpb25hbCwgZGVwZW5kcyBvbiBBWF9SWF9DVExfSVBFIGZsYWcpXG4mIzQzO1x0ICpcdFx0cGFja2V0IGRhdGEgcmVjZWl2ZWRcbiYjNDM7XHQgKlx0XHRvcHRpb25hbCBwYWRkaW5nIHRvIDgtYnl0ZXMgYm91bmRhcnlcbiYjNDM7XHQgKiAgIFx1MDAzY3Blci1wYWNrZXQgbWV0YWRhdGEgZW50cnkgTlx1MDAzZSBjb250YWlucyA4IGJ5dGVzOlxuJiM0MztcdCAqXHRcdHBrdF9sZW4gYW5kIGZpZWxkcyBBWF9SWEhEUl8qXG4mIzQzO1x0ICogICBcdTAwM2NyeC1oZHJcdTAwM2VcdGNvbnRhaW5zIDggYnl0ZXM6XG4mIzQzO1x0ICpcdFx0cGt0X2NudCBhbmQgaGRyX29mZiAob2Zmc2V0IG9mIFx1MDAzY3Blci1wYWNrZXQgbWV0YWRhdGEgZW50cnkgMVx1MDAzZSlcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHBrdF9jbnQgaXMgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHBlci1wYWNrZXQgbWV0YWRhdGEgYXJyYXkuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdGlmICghc2tiIHx8IHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihyeF9oZHIpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFJYIERlc2NyaXB0b3IgSGVhZGVyICovXG4mIzQzO1x0c2tiX3RyaW0oc2tiLCBza2ItXHUwMDNlbGVuIC0gc2l6ZW9mKHJ4X2hkcikpO1xuJiM0MztcdHJ4X2hkciA9IGxlNjRfdG9fY3B1cCgodTY0ICopc2tiX3RhaWxfcG9pbnRlcihza2IpKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgdGhlc2UgcGFja2V0cyAqL1xuJiM0MztcdGhkcl9vZmYgPSAocnhfaGRyIFx1MDAyNiBBWDE3OUFfUlhfREhfREVTQ19PRkZTRVRfTUFTSykgXHUwMDNlXHUwMDNlIEFYMTc5QV9SWF9ESF9ERVNDX09GRlNFVF9TSElGVDtcbiYjNDM7XHRwa3RfY250ID0gcnhfaGRyIFx1MDAyNiBBWDE3OUFfUlhfREhfUEtUX0NOVF9NQVNLO1xuJiM0MztcbiYjNDM7XHQvKiBDb25zaXN0ZW5jeSBjaGVjayBoZWFkZXIgcG9zaXRpb24gKi9cbiYjNDM7XHRpZiAoaGRyX29mZiAhPSBza2ItXHUwMDNlbGVuIC0gKHBrdF9jbnQgKiBzaXplb2YocnhfaGRyKSkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0LyogTWFrZSBzdXJlIHRoYXQgdGhlIGJvdW5kcyBvZiB0aGUgbWV0YWRhdGEgYXJyYXkgYXJlIGluc2lkZSB0aGUgU0tCXG4mIzQzO1x0ICogKGFuZCBpbiBmcm9udCBvZiB0aGUgY291bnRlciBhdCB0aGUgZW5kKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGt0X2NudCAqIDggJiM0MzsgaGRyX29mZiBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBQYWNrZXRzIG11c3Qgbm90IG92ZXJsYXAgdGhlIG1ldGFkYXRhIGFycmF5ICovXG4mIzQzO1x0c2tiX3RyaW0oc2tiLCBoZHJfb2ZmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwa3RfY250KVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIEdldCB0aGUgZmlyc3QgUlggcGFja2V0IGRlc2NyaXB0b3IgKi9cbiYjNDM7XHRwa3RfZGVzY19wdHIgPSAodTY0ICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGhkcl9vZmYpO1xuJiM0MztcbiYjNDM7XHRwa3RfZW5kID0gMDtcbiYjNDM7XHR3aGlsZSAocGt0X2NudC0tKSB7XG4mIzQzO1x0XHR1NjQgcGt0X2Rlc2MgPSBsZTY0X3RvX2NwdXAocGt0X2Rlc2NfcHRyKTtcbiYjNDM7XHRcdHUzMiBwa3RfbGVuX3BsdXNfcGFkZDtcbiYjNDM7XHRcdHUzMiBwa3RfbGVuO1xuJiM0MztcbiYjNDM7XHRcdHBrdF9sZW4gPSAodTMyKSgocGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MRU5fTUFTSykgXHUwMDNlXHUwMDNlIEFYMTc5QV9SWF9QRF9MRU5fU0hJRlQpXG4mIzQzO1x0XHRcdCAgLSAoYXgxNzlfZGF0YS1cdTAwM2VpcF9hbGlnbiA/IDIgOiAwKTtcbiYjNDM7XHRcdHBrdF9sZW5fcGx1c19wYWRkID0gKChwa3RfbGVuICYjNDM7IDcgJiM0MzsgKGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPyAyIDogMCkpIFx1MDAyNiAweDdGRkY4KTtcbiYjNDM7XG4mIzQzO1x0XHRwa3RfZW5kICYjNDM7PSBwa3RfbGVuX3BsdXNfcGFkZDtcbiYjNDM7XHRcdGlmIChwa3RfZW5kIFx1MDAzZSBoZHJfb2ZmIHx8IChwa3RfY250ID09IDAgXHUwMDI2XHUwMDI2IHBrdF9lbmQgIT0gaGRyX29mZikpXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwa3RfZGVzYyBcdTAwMjYgQVgxNzlBX1JYX1BEX0RST1AgfHwgIShwa3RfZGVzYyBcdTAwMjYgQVgxNzlBX1JYX1BEX1JYX09LKSB8fFxuJiM0MztcdFx0ICAgIHBrdF9sZW4gXHUwMDNlIChkZXYtXHUwMDNlaGFyZF9tdHUgJiM0MzsgQVgxNzlBX1JYX0hXX1BBRCkpIHtcbiYjNDM7XHRcdFx0c2tiX3B1bGwoc2tiLCBwa3RfbGVuX3BsdXNfcGFkZCk7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBOZXh0IFJYIFBhY2tldCBEZXNjcmlwdG9yICovXG4mIzQzO1x0XHRcdHBrdF9kZXNjX3B0ciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGF4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LVx1MDAzZW5ldCwgcGt0X2xlbik7XG4mIzQzO1x0XHRpZiAoIWF4X3NrYilcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdFx0c2tiX3B1dChheF9za2IsIHBrdF9sZW4pO1xuJiM0MztcdFx0bWVtY3B5KGF4X3NrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlZGF0YSAmIzQzOyAoYXgxNzlfZGF0YS1cdTAwM2VpcF9hbGlnbiA/IEFYMTc5QV9SWF9IV19QQUQgOiAwKSxcbiYjNDM7XHRcdCAgICAgICBwa3RfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VyeF9jaGVja3N1bSlcbiYjNDM7XHRcdFx0YXg4ODE3OWFfcnhfY2hlY2tzdW0oYXhfc2tiLCBwa3RfZGVzYyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBrdF9kZXNjIFx1MDAyNiBBWDE3OUFfUlhfUERfVkxBTikge1xuJiM0MztcdFx0XHR2bGFuX3RhZyA9IHBrdF9kZXNjIFx1MDAzZVx1MDAzZSBBWDE3OUFfUlhfUERfVkxBTl9TSElGVDtcbiYjNDM7XHRcdFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhheF9za2IsIGh0b25zKEVUSF9QXzgwMjFRKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB2bGFuX3RhZyBcdTAwMjYgVkxBTl9WSURfTUFTSyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBheF9za2IpO1xuJiM0MztcdFx0c2tiX3B1bGwoc2tiLCBwa3RfbGVuX3BsdXNfcGFkZCk7XG4mIzQzO1xuJiM0MztcdFx0LyogTmV4dCBSWCBQYWNrZXQgSGVhZGVyICovXG4mIzQzO1x0XHRwa3RfZGVzY19wdHImIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBza19idWZmICpcbiBheDg4MTc5X3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpXG4ge1xuQEAgLTE1MDUsNiAmIzQzOzIyNzMsNTkgQEAgYXg4ODE3OV90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGZsYWdzKVxuIFx0cmV0dXJuIHNrYjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG4mIzQzO2F4ODgxNzlhX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1NjQgdHhfZGVzYyA9IHNrYi1cdTAwM2VsZW4gXHUwMDI2IEFYMTc5QV9UWF9ERVNDX0xFTl9NQVNLO1xuJiM0MztcdGludCBmcmFtZV9zaXplID0gZGV2LVx1MDAzZW1heHBhY2tldDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiO1xuJiM0MztcdHU2NCAqdHhfZGVzY19wdHI7XG4mIzQzO1x0aW50IHBhZGRpbmdfc2l6ZTtcbiYjNDM7XHRpbnQgaGVhZHJvb207XG4mIzQzO1x0aW50IHRhaWxyb29tO1xuJiM0MztcdHUxNiB0Y2kgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBUU08gTVNTICovXG4mIzQzO1x0dHhfZGVzYyB8PSAoKHU2NCkoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb19zaXplIFx1MDAyNiBBWDE3OUFfVFhfREVTQ19NU1NfTUFTSykpIFx1MDAzY1x1MDAzY1xuJiM0MztcdFx0ICAgQVgxNzlBX1RYX0RFU0NfTVNTX1NISUZUO1xuJiM0MztcbiYjNDM7XHRoZWFkcm9vbSA9IChza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZih0eF9kZXNjKSkgJSA4O1xuJiM0MztcdHBhZGRpbmdfc2l6ZSA9IGhlYWRyb29tID8gOCAtIGhlYWRyb29tIDogMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCgoc2tiLVx1MDAzZWxlbiAmIzQzOyBzaXplb2YodHhfZGVzYykgJiM0MzsgcGFkZGluZ19zaXplKSAlIGZyYW1lX3NpemUpID09IDApIHtcbiYjNDM7XHRcdHBhZGRpbmdfc2l6ZSAmIzQzOz0gODtcbiYjNDM7XHRcdHR4X2Rlc2MgfD0gQVgxNzlBX1RYX0RFU0NfRFJPUF9QQUREO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKChkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCkgXHUwMDI2XHUwMDI2ICh2bGFuX2dldF90YWcoc2tiLCBcdTAwMjZ0Y2kpIFx1MDAzZT0gMCkpIHtcbiYjNDM7XHRcdHR4X2Rlc2MgfD0gQVgxNzlBX1RYX0RFU0NfVkxBTjtcbiYjNDM7XHRcdHR4X2Rlc2MgfD0gKCh1NjQpdGNpIFx1MDAyNiBBWDE3OUFfVFhfREVTQ19WTEFOX01BU0spIFx1MDAzY1x1MDAzYyBBWDE3OUFfVFhfREVTQ19WTEFOX1NISUZUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlY2FuX2RtYV9zZyBcdTAwMjZcdTAwMjYgKGRldi1cdTAwM2VuZXQtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfU0cpIFx1MDAyNlx1MDAyNiBza2JfbGluZWFyaXplKHNrYikpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aGVhZHJvb20gPSBza2JfaGVhZHJvb20oc2tiKTtcbiYjNDM7XHR0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShoZWFkcm9vbSBcdTAwM2U9IHNpemVvZih0eF9kZXNjKSBcdTAwMjZcdTAwMjYgdGFpbHJvb20gXHUwMDNlPSBwYWRkaW5nX3NpemUpKSB7XG4mIzQzO1x0XHRheF9za2IgPSBza2JfY29weV9leHBhbmQoc2tiLCBzaXplb2YodHhfZGVzYyksIHBhZGRpbmdfc2l6ZSwgZmxhZ3MpO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdHNrYiA9IGF4X3NrYjtcbiYjNDM7XHRcdGlmICghc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHBhZGRpbmdfc2l6ZSAhPSAwKVxuJiM0MztcdFx0c2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZ19zaXplKTtcbiYjNDM7XHQvKiBDb3B5IFRYIGhlYWRlciAqL1xuJiM0MztcdHR4X2Rlc2NfcHRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YodHhfZGVzYykpO1xuJiM0MztcdCp0eF9kZXNjX3B0ciA9IGNwdV90b19sZTY0KHR4X2Rlc2MpO1xuJiM0MztcbiYjNDM7XHR1c2JuZXRfc2V0X3NrYl90eF9zdGF0cyhza2IsIDEsIDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2tiO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgYXg4ODE3OV9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbiB7XG4gXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuQEAgLTE1ODAsNzMgJiM0MzsyNDAxLDM0MyBAQCBzdGF0aWMgaW50IGF4ODgxNzlfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGF4ODgxNzlhX2J1bGtpbl9jb25maWcoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBsaW5rX3N0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGF4X2J1bGtpbl9zZXR0aW5ncyAqYnVsa2luX2RhdGE7XG4mIzQzO1x0aW50IGluZGV4ID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChheDE3OV9kYXRhLVx1MDAzZXNwZWVkKSB7XG4mIzQzO1x0Y2FzZSBFVEhFUl9MSU5LXzI1MDA6XHQvKiBBWDg4Mjc5IG9ubHkgKi9cbiYjNDM7XHRcdGluZGV4ID0gMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEVUSEVSX0xJTktfMTAwMDpcdC8qIEFYODgyNzkgXHUwMDI2IEFYODgxNzhBICovXG4mIzQzO1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHRcdGlmIChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX1NTKVxuJiM0MztcdFx0XHRcdGluZGV4ID0gMTtcbiYjNDM7XHRcdFx0ZWxzZSBpZiAobGlua19zdHMgXHUwMDI2IEFYX1VTQl9IUylcbiYjNDM7XHRcdFx0XHRpbmRleCA9IDI7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRpZiAobGlua19zdHMgXHUwMDI2IEFYX1VTQl9TUylcbiYjNDM7XHRcdFx0XHRpbmRleCA9IDA7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKGxpbmtfc3RzIFx1MDAyNiBBWF9VU0JfSFMpXG4mIzQzO1x0XHRcdFx0aW5kZXggPSAxO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgRVRIRVJfTElOS18xMDA6XG4mIzQzO1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHRcdGlmIChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX1NTKVxuJiM0MztcdFx0XHRcdGluZGV4ID0gMztcbiYjNDM7XHRcdFx0ZWxzZSBpZiAobGlua19zdHMgXHUwMDI2IEFYX1VTQl9IUylcbiYjNDM7XHRcdFx0XHRpbmRleCA9IDU7XG4mIzQzO1x0XHRcdGlmICghYXgxNzlfZGF0YS1cdTAwM2VmdWxsX2R1cGxleClcbiYjNDM7XHRcdFx0XHRpbmRleCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKiBBWDg4Mjc5QSBcdTAwMjYgQVg4ODI3N0QgKi9cbiYjNDM7XHRcdFx0aWYgKGxpbmtfc3RzIFx1MDAyNiBBWF9VU0JfU1MpXG4mIzQzO1x0XHRcdFx0aW5kZXggPSAyO1xuJiM0MztcdFx0XHRlbHNlIGlmIChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX0hTKVxuJiM0MztcdFx0XHRcdGluZGV4ID0gNDtcbiYjNDM7XHRcdFx0aWYgKCFheDE3OV9kYXRhLVx1MDAzZWZ1bGxfZHVwbGV4KVxuJiM0MztcdFx0XHRcdGluZGV4JiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRjYXNlIEVUSEVSX0xJTktfMTA6XG4mIzQzO1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KVxuJiM0MztcdFx0XHRpbmRleCA9IDc7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGluZGV4ID0gNjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRkZWZhdWx0Olx0LyogTm8gbGluayAqL1xuJiM0MztcdFx0aW5kZXggPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSBcdTAwMjZcdTAwMjYgKGxpbmtfc3RzIFx1MDAyNiBBWF9VU0JfRlMpKVxuJiM0MztcdFx0aW5kZXggPSA3O1xuJiM0MztcbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHRidWxraW5fZGF0YSA9IEFYODgyNzlfQlVMS0lOX1NJWkU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkKVxuJiM0MztcdFx0XHRidWxraW5fZGF0YSA9IEFYODg3NzJEX0JVTEtJTl9TSVpFO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRidWxraW5fZGF0YSA9IEFYODgxNzlBX0JVTEtJTl9TSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9CVUxLSU5fUUNUUkwsIDUsIDUsIFx1MDAyNmJ1bGtpbl9kYXRhW2luZGV4XSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYXg4ODE3OWFfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuJiM0MztcdHU4IHRtcDgsIGxpbmtfc3RzLCByZWc4WzNdO1xuJiM0MztcdHUxNiB0bXAxNiwgbW9kZSwgc3BlZWQ7XG4mIzQzO1xuJiM0MztcdGlmICghYXgxNzlfZGF0YS1cdTAwM2VsaW5rKSB7XG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtheDg4MTc5YSAtIExpbmsgc3RhdHVzIGlzOiAwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU3RvcCBSWC9UWCBmb3IgbGluayBjb25maWd1cmF0aW9uICovXG4mIzQzO1x0dG1wMTYgPSBBWF9SWF9DVExfU1RPUDtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXHUwMDI2dG1wMTYpO1xuJiM0MztcdHRtcDggPSAwO1xuJiM0MztcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1BBVEgsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHR0bXA4ID0gMHhhNTtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19DRENfREVMQVlfVFgsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHR0bXAxNiA9IDB4MDQxMDtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMiwgMiwgXHUwMDI2dG1wMTYpO1xuJiM0MztcbiYjNDM7XHR0bXA4ID0gMDtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX0VUSF9UWF9HQVAsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHR0bXA4ID0gMHgwNztcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX0VQNV9FSFIsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHR0bXA4ID0gMHgyOCB8IEFYX05FV19QQVVTRV9FTjtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX05FV19QQVVTRV9DVFJMLCAxLCAxLCBcdTAwMjZ0bXA4KTtcbiYjNDM7XG4mIzQzO1x0bW9kZSA9IEFYX01FRElVTV9SRUNFSVZFX0VOIHwgQVhfTUVESVVNX1RYRkxPV19DVFJMRU4gfCBBWF9NRURJVU1fUlhGTE9XX0NUUkxFTjtcbiYjNDM7XG4mIzQzO1x0LyogTGluayBpcyB1cCwgYnV0IHNvbWUgb2xkZXIgQVg4ODE3OUEgRlcgdmVyc2lvbnMgZG8gbm90IHNlbmQgbGluayBzcGVlZFxuJiM0MztcdCAqIGFuZCBkdXBsZXggc3RhdHVzIGluIGludGVycnVwdCBVUkIsIHNvIHJlYWQgaXQgdmlhIE1JSVxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghYXgxNzlfZGF0YS1cdTAwM2VzcGVlZCkge1xuJiM0MztcdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuJiM0MztcbiYjNDM7XHRcdG1paV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhcdTAwMjZkZXYtXHUwMDNlbWlpLCBcdTAwMjZjbWQpO1xuJiM0MztcdFx0YXgxNzlfZGF0YS1cdTAwM2VmdWxsX2R1cGxleCA9IGNtZC5iYXNlLmR1cGxleDtcbiYjNDM7XHRcdHN3aXRjaCAoY21kLmJhc2Uuc3BlZWQpIHtcbiYjNDM7XHRcdGNhc2UgU1BFRURfMTAwMDpcbiYjNDM7XHRcdFx0YXgxNzlfZGF0YS1cdTAwM2VzcGVlZCA9IEVUSEVSX0xJTktfMTAwMDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFNQRUVEXzEwMDpcbiYjNDM7XHRcdFx0YXgxNzlfZGF0YS1cdTAwM2VzcGVlZCA9IEVUSEVSX0xJTktfMTAwO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgU1BFRURfMTA6XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRheDE3OV9kYXRhLVx1MDAzZXNwZWVkID0gRVRIRVJfTElOS18xMDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3BlZWQgPSAwO1xuJiM0MztcdHN3aXRjaCAoYXgxNzlfZGF0YS1cdTAwM2VzcGVlZCkge1xuJiM0MztcdGNhc2UgRVRIRVJfTElOS18yNTAwOlxuJiM0MztcdFx0cmVnOFswXSA9IDB4MDA7XG4mIzQzO1x0XHRyZWc4WzFdID0gMHhGODtcbiYjNDM7XHRcdHJlZzhbMl0gPSAweDA3O1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfVFhfUEFVU0UsIDMsIDMsIHJlZzgpO1xuJiM0MztcbiYjNDM7XHRcdHJlZzhbMF0gPSAweDc4O1xuJiM0MztcdFx0cmVnOFsxXSA9IChBWF9MU09GQ19XQ05UXzdfQUNDRVNTIFx1MDAzY1x1MDAzYyA1KTtcbiYjNDM7XHRcdHJlZzhbMl0gPSAwO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfU1RBVFVTX0NEQywgMywgMywgcmVnOCk7XG4mIzQzO1xuJiM0MztcdFx0cmVnOFswXSA9IDB4NDA7XG4mIzQzO1x0XHRyZWc4WzFdID0gQVhfTUFDX01JUUZGQ1RSTF9GT1JNQVQgfCBBWF9NQUNfTUlRRkZDVFJMX0RST1BfQ1JDIHwgQVhfTUFDX0xTT19FUlJfRU47XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19SWF9EQVRBX0NEQ19DTlQsIDIsIDIsIHJlZzgpO1xuJiM0MztcbiYjNDM7XHRcdHRtcDggPSBBWF9YR01JSV9FTjtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfQkZNX0RBVEEsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHRcdHRtcDggPSAweDFDIHwgQVhfTFNPX0VOSEFOQ0VfRU47XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19MU09fRU5IQU5DRV9DVFJMLCAxLCAxLCBcdTAwMjZ0bXA4KTtcbiYjNDM7XG4mIzQzO1x0XHRtb2RlIHw9IEFYX01FRElVTV9HSUdBTU9ERSB8IEFYX01FRElVTV9GVUxMX0RVUExFWDtcbiYjNDM7XG4mIzQzO1x0XHRzcGVlZCA9IDI1MDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBFVEhFUl9MSU5LXzEwMDA6XG4mIzQzO1x0XHRtb2RlIHw9IEFYX01FRElVTV9HSUdBTU9ERTtcbiYjNDM7XHRcdHNwZWVkID0gMTAwMDtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcbiYjNDM7XHRjYXNlIEVUSEVSX0xJTktfMTAwOlxuJiM0MztcdFx0cmVnOFswXSA9IDB4Nzg7XG4mIzQzO1x0XHRyZWc4WzFdID0gKEFYX0xTT0ZDX1dDTlRfN19BQ0NFU1MgXHUwMDNjXHUwMDNjIDUpIHwgQVhfR01JSV9DUkNfQVBQRU5EO1xuJiM0MztcdFx0cmVnOFsyXSA9IDA7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19SWF9TVEFUVVNfQ0RDLCAzLCAzLCByZWc4KTtcbiYjNDM7XG4mIzQzO1x0XHR0bXA4ID0gMHg0MDtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMSwgMSwgXHUwMDI2dG1wOCk7XG4mIzQzO1xuJiM0MztcdFx0c3BlZWQgPSBzcGVlZCA/IHNwZWVkIDogMTAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgRVRIRVJfTElOS18xMDpcbiYjNDM7XHRcdHJlZzhbMF0gPSAweEZBO1xuJiM0MztcdFx0cmVnOFsxXSA9IChBWF9MU09GQ19XQ05UXzdfQUNDRVNTIFx1MDAzY1x1MDAzYyA1KSB8IEFYX0dNSUlfQ1JDX0FQUEVORDtcbiYjNDM7XHRcdHJlZzhbMl0gPSAweEZGO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfU1RBVFVTX0NEQywgMywgMywgcmVnOCk7XG4mIzQzO1xuJiM0MztcdFx0dG1wOCA9IDB4RkE7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19SWF9EQVRBX0NEQ19DTlQsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHRcdHNwZWVkID0gMTA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBQSFlTSUNBTF9MSU5LX1NUQVRVUywgMSwgMSwgXHUwMDI2bGlua19zdHMpO1xuJiM0MztcdGF4ODgxNzlhX2J1bGtpbl9jb25maWcoZGV2LCBsaW5rX3N0cyk7XG4mIzQzO1xuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4mIzQzO1x0XHR0bXA4ID0gMDtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfQkZNX0RBVEEsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlZnVsbF9kdXBsZXgpXG4mIzQzO1x0XHRtb2RlIHw9IEFYX01FRElVTV9GVUxMX0RVUExFWDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VuZXQtXHUwMDNlbXR1IFx1MDAzZSAxNTAwKVxuJiM0MztcdFx0bW9kZSB8PSBBWF9NRURJVU1fSlVNQk9fRU47XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIFx1MDAyNm1vZGUpO1xuJiM0MztcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VyeGN0bCk7XG4mIzQzO1xuJiM0MztcdHRtcDggPSBBWF9NQUNfUlhfUEFUSF9SRUFEWSB8IEFYX01BQ19UWF9QQVRIX1JFQURZO1xuJiM0MztcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1BBVEgsIDEsIDEsIFx1MDAyNnRtcDgpO1xuJiM0MztcbiYjNDM7XHRheDE3OV9kYXRhLVx1MDAzZWVlZV9lbmFibGVkID0gYXg4ODE3OV9jaGtfZWVlKGRldik7XG4mIzQzO1xuJiM0MztcdG5ldGlmX2NhcnJpZXJfb24oZGV2LVx1MDAzZW5ldCk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9pbmZvKGRldi1cdTAwM2VuZXQsIFwmIzM0O2F4ODgxNzlhIC0gTGluayBzdGF0dXMgaXM6IDEsIExpbmsgc3BlZWQ6ICVkLCBEdXBsZXg6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgIHNwZWVkLCBheDE3OV9kYXRhLVx1MDAzZWZ1bGxfZHVwbGV4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBheDg4MTc5X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbiB7XG4tXHR1OCBidWZbNV07XG4tXHR1MTYgKnRtcDE2O1xuLVx0dTggKnRtcDtcbiBcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXHRzdHJ1Y3QgZXRodG9vbF9rZWVlIGVlZV9kYXRhO1xuJiM0MztcdHUxNiAqdG1wMTY7XG4mIzQzO1x0dTggYnVmWzVdO1xuJiM0MztcdHU4ICp0bXA7XG4gXG4gXHR0bXAxNiA9ICh1MTYgKilidWY7XG4gXHR0bXAgPSAodTggKilidWY7XG4gXG4gXHQvKiBQb3dlciB1cCBldGhlcm5ldCBQSFkgKi9cbi1cdCp0bXAxNiA9IDA7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsIDIsIDIsIHRtcDE2KTtcbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbiYjNDM7XHRcdCp0bXAxNiA9IDA7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsIDIsIDIsIHRtcDE2KTtcbiBcbi1cdCp0bXAxNiA9IEFYX1BIWVBXUl9SU1RDVExfSVBSTDtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEhZUFdSX1JTVENUTCwgMiwgMiwgdG1wMTYpO1xuLVx0bXNsZWVwKDUwMCk7XG4mIzQzO1x0XHQqdG1wMTYgPSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsIDIsIDIsIHRtcDE2KTtcbiYjNDM7XHRcdG1zbGVlcCg1MDApO1xuIFxuLVx0KnRtcCA9IEFYX0NMS19TRUxFQ1RfQUNTIHwgQVhfQ0xLX1NFTEVDVF9CQ1M7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NMS19TRUxFQ1QsIDEsIDEsIHRtcCk7XG4tXHRtc2xlZXAoMjAwKTtcbiYjNDM7XHRcdCp0bXAgPSBBWF9DTEtfU0VMRUNUX0FDUyB8IEFYX0NMS19TRUxFQ1RfQkNTO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DTEtfU0VMRUNULCAxLCAxLCB0bXApO1xuJiM0MztcdFx0bXNsZWVwKDIwMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdCp0bXAgPSBBWF9QSFlfUE9XRVI7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgdG1wKTtcbiYjNDM7XHRcdG1zbGVlcCgyNTApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuJiM0MztcdFx0KnRtcDE2ID0gYXg4ODE3OV9tZGlvX3JlYWQoZGV2LVx1MDAzZW5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xuJiM0MztcdFx0KnRtcDE2IFx1MDAyNj0gfihBRFZFUlRJU0VfMTBGVUxMIHwgQURWRVJUSVNFXzEwSEFMRik7XG4mIzQzO1x0XHQqdG1wMTYgfD0gQURWRVJUSVNFX1JFU1Y7IC8qIEFkdmVydGlzZSAyLjVHQml0IGxpbmsgKi9cbiYjNDM7XHRcdGF4ODgxNzlfbWRpb193cml0ZShkZXYtXHUwMDNlbmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwgKnRtcDE2KTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBFdGhlcm5ldCBQSFkgQXV0byBEZXRhY2gqL1xuIFx0YXg4ODE3OV9hdXRvX2RldGFjaChkZXYpO1xuIFxuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbiYjNDM7XHRcdCp0bXAgPSBBWF9NQUNfRUZGX0VOO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQlVMS19PVVRfQ1RSTCwgMSwgMSwgdG1wKTtcbiYjNDM7XG4mIzQzO1x0XHQqdG1wMTYgPSAwO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsIHRtcDE2KTtcbiYjNDM7XG4mIzQzO1x0XHQqdG1wID0gMHgwNDtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfTE9XLCAxLCAxLCB0bXApO1xuJiM0MztcdFx0KnRtcCA9IDB4MTA7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsIDEsIDEsIHRtcCk7XG4mIzQzO1xuJiM0MztcdFx0KnRtcCA9IDA7XG4mIzQzO1x0XHRpZiAoZGV2LVx1MDAzZW5ldC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKVxuJiM0MztcdFx0XHQqdG1wIHw9IEFYX1ZMQU5fQ09OVFJPTF9WRkU7XG4mIzQzO1x0XHRpZiAoZGV2LVx1MDAzZW5ldC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlgpXG4mIzQzO1x0XHRcdCp0bXAgfD0gQVhfVkxBTl9DT05UUk9MX1ZTTztcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCB0bXApO1xuJiM0MztcbiYjNDM7XHRcdCp0bXAgPSAweGZmO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fSU5UX01BU0ssIDEsIDEsIHRtcCk7XG4mIzQzO1xuJiM0MztcdFx0KnRtcCA9IDA7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19CTV9SWF9ETUFfQ1RMLCAxLCAxLCB0bXApO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fVFhfRE1BX0NUTCwgMSwgMSwgdG1wKTtcbiYjNDM7XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0FSQ19DVFJMLCAxLCAxLCB0bXApO1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfU1dQX0NUUkwsIDEsIDEsIHRtcCk7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19UWF9IRFJfQ0tTVU0sIDEsIDEsIHRtcCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIFJlYWQgTUFDIGFkZHJlc3MgZnJvbSBEVEIgb3IgYXNpeCBjaGlwICovXG4gXHRheDg4MTc5X2dldF9tYWNfYWRkcihkZXYpO1xuIFx0bWVtY3B5KGRldi1cdTAwM2VuZXQtXHUwMDNlcGVybV9hZGRyLCBkZXYtXHUwMDNlbmV0LVx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XG4gXG4gXHQvKiBSWCBidWxrIGNvbmZpZ3VyYXRpb24gKi9cbi1cdG1lbWNweSh0bXAsIFx1MDAyNkFYODgxNzlfQlVMS0lOX1NJWkVbMF0sIDUpO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9CVUxLSU5fUUNUUkwsIDUsIDUsIHRtcCk7XG4tXG4tXHRkZXYtXHUwMDNlcnhfdXJiX3NpemUgPSAxMDI0ICogMjA7XG4tXG4tXHQqdG1wID0gMHgzNDtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfTE9XLCAxLCAxLCB0bXApO1xuLVxuLVx0KnRtcCA9IDB4NTI7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsXG4tXHRcdFx0ICAxLCAxLCB0bXApO1xuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuJiM0MztcdFx0bWVtY3B5KHRtcCwgXHUwMDI2QVg4ODE3OV9CVUxLSU5fU0laRVswXSwgNSk7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0JVTEtJTl9RQ1RSTCwgNSwgNSwgdG1wKTtcbiYjNDM7XHRcdCp0bXAgPSAweDM0O1xuJiM0MztcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QQVVTRV9XQVRFUkxWTF9MT1csIDEsIDEsIHRtcCk7XG4mIzQzO1xuJiM0MztcdFx0KnRtcCA9IDB4NTI7XG4mIzQzO1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsXG4mIzQzO1x0XHRcdFx0ICAxLCAxLCB0bXApO1xuJiM0MztcdFx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMTAyNCAqIDIwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBUaGUgQnVsay1SZWdpc3RlciBjb25maWd1cmF0aW9uIGZvciB0aGUgQVg4ODE3OUEgaXMgZG9uZSBpblxuJiM0MztcdFx0ICogYXg4ODE3OWFfbGlua19yZXNldCgpLCBvbmNlIHRoZSBsaW5rIGlzIHVwIGZvciBhIGdpdmVuIGxpbmsgYW5kIFVTQi1zcGVlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGF4MTc5X2RhdGEtXHUwMDNlaXNfYXg4ODc3MmQpXG4mIzQzO1x0XHRcdGRldi1cdTAwM2VyeF91cmJfc2l6ZSA9IDEwMjQgKiAyNDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMTAyNCAqIDQ4O1xuJiM0MztcdH1cbiBcbiBcdC8qIEVuYWJsZSBjaGVja3N1bSBvZmZsb2FkICovXG4gXHQqdG1wID0gQVhfUlhDT0VfSVAgfCBBWF9SWENPRV9UQ1AgfCBBWF9SWENPRV9VRFAgfFxuIFx0ICAgICAgIEFYX1JYQ09FX1RDUFY2IHwgQVhfUlhDT0VfVURQVjY7XG4gXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYQ09FX0NUTCwgMSwgMSwgdG1wKTtcbiYjNDM7XHRheDE3OV9kYXRhLVx1MDAzZXJ4X2NoZWNrc3VtID0gMTtcbiBcbiBcdCp0bXAgPSBBWF9UWENPRV9JUCB8IEFYX1RYQ09FX1RDUCB8IEFYX1RYQ09FX1VEUCB8XG4gXHQgICAgICAgQVhfVFhDT0VfVENQVjYgfCBBWF9UWENPRV9VRFBWNjtcbiBcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfVFhDT0VfQ1RMLCAxLCAxLCB0bXApO1xuIFxuIFx0LyogQ29uZmlndXJlIFJYIGNvbnRyb2wgcmVnaXN0ZXIgPVx1MDAzZSBzdGFydCBvcGVyYXRpb24gKi9cbi1cdCp0bXAxNiA9IEFYX1JYX0NUTF9EUk9QQ1JDRVJSIHwgQVhfUlhfQ1RMX0lQRSB8IEFYX1JYX0NUTF9TVEFSVCB8XG4tXHRcdCBBWF9SWF9DVExfQVAgfCBBWF9SWF9DVExfQU1BTEwgfCBBWF9SWF9DVExfQUI7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgdG1wMTYpO1xuLVxuLVx0KnRtcCA9IEFYX01PTklUT1JfTU9ERV9QTUVUWVBFIHwgQVhfTU9OSVRPUl9NT0RFX1BNRVBPTCB8XG4tXHQgICAgICAgQVhfTU9OSVRPUl9NT0RFX1JXTVA7XG4mIzQzO1x0YXgxNzlfZGF0YS1cdTAwM2VyeGN0bCA9IEFYX1JYX0NUTF9EUk9QQ1JDRVJSIHwgQVhfUlhfQ1RMX1NUQVJUIHxcbiYjNDM7XHRcdFx0ICAgIEFYX1JYX0NUTF9BUCB8IEFYX1JYX0NUTF9BTUFMTCB8IEFYX1JYX0NUTF9BQjtcbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VpcF9hbGlnbilcbiYjNDM7XHRcdGF4MTc5X2RhdGEtXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX0lQRTtcbiYjNDM7XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VyeGN0bCk7XG4mIzQzO1xuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSlcbiYjNDM7XHRcdCp0bXAgPSBBWF9NT05JVE9SX01PREVfUE1FVFlQRSB8IEFYX01PTklUT1JfTU9ERV9QTUVQT0wgfCBBWF9NT05JVE9SX01PREVfUldNUDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHQqdG1wID0gQVhfTU9OSVRPUl9NT0RFX1JXTVA7XG4gXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELCAxLCAxLCB0bXApO1xuIFxuIFx0LyogQ29uZmlndXJlIGRlZmF1bHQgbWVkaXVtIHR5cGUgPVx1MDAzZSBnaWdhICovXG4gXHQqdG1wMTYgPSBBWF9NRURJVU1fUkVDRUlWRV9FTiB8IEFYX01FRElVTV9UWEZMT1dfQ1RSTEVOIHxcbi1cdFx0IEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX0ZVTExfRFVQTEVYIHxcbi1cdFx0IEFYX01FRElVTV9HSUdBTU9ERTtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLFxuLVx0XHRcdCAgMiwgMiwgdG1wMTYpO1xuJiM0MztcdFx0IEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX0ZVTExfRFVQTEVYO1xuJiM0MztcdGlmICghYXgxNzlfZGF0YS1cdTAwM2Vpc19heDg4NzcyZClcbiYjNDM7XHRcdCp0bXAxNiB8PSBBWF9NRURJVU1fR0lHQU1PREU7XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIHRtcDE2KTtcbiBcbiBcdC8qIENoZWNrIGlmIFdvTCBpcyBzdXBwb3J0ZWQgKi9cbiBcdGF4MTc5X2RhdGEtXHUwMDNld29sX3N1cHBvcnRlZCA9IDA7XG5AQCAtMTY1NCwxNiAmIzQzOzI3NDUsMjkgQEAgc3RhdGljIGludCBheDg4MTc5X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbiBcdFx0XHQgICAgIDEsIDEsIFx1MDAyNnRtcCkgXHUwMDNlIDApXG4gXHRcdGF4MTc5X2RhdGEtXHUwMDNld29sX3N1cHBvcnRlZCA9IFdBS0VfTUFHSUMgfCBXQUtFX1BIWTtcbiBcbi1cdGF4ODgxNzlfbGVkX3NldHRpbmcoZGV2KTtcbiYjNDM7XHQvKiBGb3IgY2hpcHMgc3RhcnRpbmcgd2l0aCBBWDg4MTc5QSwgTEVEUyBhcmUgY29uZmlndXJlZCBieSB0aGUgYWRhcHRlclxuJiM0MztcdCAqIGZpcm13YXJlIGRpcmVjdGx5IGZyb20gRUVQUk9NL0VGVVNFIHZhbHVlc1xuJiM0MztcdCAqL1xuJiM0MztcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSlcbiYjNDM7XHRcdGF4ODgxNzlfbGVkX3NldHRpbmcoZGV2KTtcbiBcbiBcdGF4MTc5X2RhdGEtXHUwMDNlZWVlX2VuYWJsZWQgPSAwO1xuIFx0YXgxNzlfZGF0YS1cdTAwM2VlZWVfYWN0aXZlID0gMDtcbiBcbi1cdGF4ODgxNzlfZGlzYWJsZV9lZWUoZGV2KTtcbiYjNDM7XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbiYjNDM7XHRcdGF4ODgxNzlfZWVlX2NvbmZpZyhkZXYsIGZhbHNlKTtcbiBcbi1cdGF4ODgxNzlfZXRodG9vbF9nZXRfZWVlKGRldiwgXHUwMDI2ZWVlX2RhdGEpO1xuLVx0bGlua21vZGVfemVybyhlZWVfZGF0YS5hZHZlcnRpc2VkKTtcbi1cdGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgXHUwMDI2ZWVlX2RhdGEpO1xuJiM0MztcdFx0YXg4ODE3OV9ldGh0b29sX2dldF9lZWUoZGV2LCBcdTAwMjZlZWVfZGF0YSk7XG4mIzQzO1x0XHRsaW5rbW9kZV96ZXJvKGVlZV9kYXRhLmFkdmVydGlzZWQpO1xuJiM0MztcdFx0YXg4ODE3OV9ldGh0b29sX3NldF9lZWUoZGV2LCBcdTAwMjZlZWVfZGF0YSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGF4ODgxNzlfZWVlX2NvbmZpZyhkZXYsIHRydWUpO1xuJiM0MztcdFx0YXg4ODE3OV9ldGh0b29sX2dldF9lZWUoZGV2LCBcdTAwMjZlZWVfZGF0YSk7XG4mIzQzO1x0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCwgZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7XG4mIzQzO1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgyNzkpXG4mIzQzO1x0XHRcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULCBlZWVfZGF0YS5hZHZlcnRpc2VkKTtcbiYjNDM7XHRcdGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgXHUwMDI2ZWVlX2RhdGEpO1xuJiM0MztcdH1cbiBcbiBcdC8qIFJlc3RhcnQgYXV0b25lZyAqL1xuIFx0bWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbkBAIC0xNzA3LDYgJiM0MzsyODExLDI0IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBheDg4MTc5YV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldilcbiYjNDM7e1xuJiM0MztcdHUxNiByZWcxNjtcbiYjNDM7XHR1OCByZWc4O1xuJiM0MztcbiYjNDM7XHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcdTAwMjZyZWcxNik7XG4mIzQzO1x0cmVnMTYgXHUwMDI2PSB+QVhfTUVESVVNX1JFQ0VJVkVfRU47XG4mIzQzO1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIFx1MDAyNnJlZzE2KTtcbiYjNDM7XG4mIzQzO1x0cmVnMTYgPSAwO1xuJiM0MztcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCBcdTAwMjZyZWcxNik7XG4mIzQzO1xuJiM0MztcdHJlZzggPSAwO1xuJiM0MztcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnJlZzgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzlfaW5mbyA9IHtcbiBcdC5kZXNjcmlwdGlvbiA9IFwmIzM0O0FTSVggQVg4ODE3OSBVU0IgMy4wIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4gXHQuYmluZCA9IGF4ODgxNzlfYmluZCxcbkBAIC0xNzMzLDYgJiM0MzsyODU1LDQ1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODE3OGFfaW5mbyA9IHtcbiBcdC50eF9maXh1cCA9IGF4ODgxNzlfdHhfZml4dXAsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTc5YV9pbmZvID0ge1xuJiM0MztcdC5kZXNjcmlwdGlvbiA9IFwmIzM0O0FTSVggQVg4ODE3OUEgVVNCIDMuMiBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdC5iaW5kID0gYXg4ODE3OWFfYmluZCxcbiYjNDM7XHQudW5iaW5kID0gYXg4ODE3OWFfdW5iaW5kLFxuJiM0MztcdC5zdGF0dXMgPSBheDg4MTc5X3N0YXR1cyxcbiYjNDM7XHQubGlua19yZXNldCA9IGF4ODgxNzlhX2xpbmtfcmVzZXQsXG4mIzQzO1x0LnJlc2V0ID0gYXg4ODE3OV9yZXNldCxcbiYjNDM7XHQuc3RvcCA9IGF4ODgxNzlhX3N0b3AsXG4mIzQzO1x0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VUIHwgRkxBR19BVk9JRF9VTkxJTktfVVJCUyxcbiYjNDM7XHQucnhfZml4dXAgPSBheDg4MTc5YV9yeF9maXh1cCxcbiYjNDM7XHQudHhfZml4dXAgPSBheDg4MTc5YV90eF9maXh1cCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODc3MmRfaW5mbyA9IHtcbiYjNDM7XHQuZGVzY3JpcHRpb24gPSBcJiMzNDtBU0lYIEFYODg3NzJEL0UgVVNCIDIuMCBGYXN0IEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdC5iaW5kID0gYXg4ODE3OWFfYmluZCxcbiYjNDM7XHQudW5iaW5kID0gYXg4ODE3OWFfdW5iaW5kLFxuJiM0MztcdC5zdGF0dXMgPSBheDg4MTc5X3N0YXR1cyxcbiYjNDM7XHQubGlua19yZXNldCA9IGF4ODgxNzlhX2xpbmtfcmVzZXQsXG4mIzQzO1x0LnJlc2V0ID0gYXg4ODE3OV9yZXNldCxcbiYjNDM7XHQuc3RvcCA9IGF4ODgxNzlhX3N0b3AsXG4mIzQzO1x0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VUIHwgRkxBR19BVk9JRF9VTkxJTktfVVJCUyxcbiYjNDM7XHQucnhfZml4dXAgPSBheDg4MTc5YV9yeF9maXh1cCxcbiYjNDM7XHQudHhfZml4dXAgPSBheDg4MTc5YV90eF9maXh1cCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODI3OV9pbmZvID0ge1xuJiM0MztcdC5kZXNjcmlwdGlvbiA9IFwmIzM0O0FTSVggQVg4ODI3OSBVU0IgMy4yIDIuNUdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4mIzQzO1x0LmJpbmQgPSBheDg4MTc5YV9iaW5kLFxuJiM0MztcdC51bmJpbmQgPSBheDg4MTc5YV91bmJpbmQsXG4mIzQzO1x0LnN0YXR1cyA9IGF4ODgxNzlfc3RhdHVzLFxuJiM0MztcdC5saW5rX3Jlc2V0ID0gYXg4ODE3OWFfbGlua19yZXNldCxcbiYjNDM7XHQucmVzZXQgPSBheDg4MTc5X3Jlc2V0LFxuJiM0MztcdC5zdG9wID0gYXg4ODE3OWFfc3RvcCxcbiYjNDM7XHQuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYIHwgRkxBR19NVUxUSV9QQUNLRVQgfCBGTEFHX0FWT0lEX1VOTElOS19VUkJTLFxuJiM0MztcdC5yeF9maXh1cCA9IGF4ODgxNzlhX3J4X2ZpeHVwLFxuJiM0MztcdC50eF9maXh1cCA9IGF4ODgxNzlhX3R4X2ZpeHVwLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGN5cHJlc3NfR1gzX2luZm8gPSB7XG4gXHQuZGVzY3JpcHRpb24gPSBcJiMzNDtDeXByZXNzIEdYMyBTdXBlclNwZWVkIHRvIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlclwmIzM0OyxcbiBcdC5iaW5kID0gYXg4ODE3OV9iaW5kLFxuQEAgLTE4NzgsNiAmIzQzOzMwMzksMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBhdF91bWMyMDAwc3BfaW5mbyA9IHtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgcHJvZHVjdHNbXSA9IHtcbiB7XG4mIzQzO1x0LyogQVNJWCBBWDg4MTc5QS9CIFVTQiAzLjIgR2lnYWJpdCBFdGhlcm5ldCAqL1xuJiM0MztcdFVTQl9ERVZJQ0VfVkVSKDB4MGI5NSwgMHgxNzkwLCAweDAyMDAsIDB4MDIwMCksXG4mIzQzO1x0LmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2YXg4ODE3OWFfaW5mbyxcbiYjNDM7fSwge1xuJiM0MztcdC8qIEFTSVggQVg4ODc3MkQgVVNCIDIuMCAxMDBNYml0IEV0aGVybmV0ICovXG4mIzQzO1x0VVNCX0RFVklDRV9WRVIoMHgwYjk1LCAweDE3OTAsIDB4MDMwMCwgMHgwMzAwKSxcbiYjNDM7XHQuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZylcdTAwMjZheDg4NzcyZF9pbmZvLFxuJiM0Mzt9LCB7XG4mIzQzO1x0LyogQVNJWCBBWDg4Mjc5IFVTQiAzLjIgMi41R0JpdCBFdGhlcm5ldCAqL1xuJiM0MztcdFVTQl9ERVZJQ0VfVkVSKDB4MGI5NSwgMHgxNzkwLCAweDA0MDAsIDB4MDQwMCksXG4mIzQzO1x0LmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2YXg4ODI3OV9pbmZvLFxuJiM0Mzt9LCB7XG4gXHQvKiBBU0lYIEFYODgxNzkgMTAvMTAwLzEwMDAgKi9cbiBcdFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGI5NSwgMHgxNzkwLCAweGZmLCAweGZmLCAwKSxcbiBcdC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKVx1MDAyNmF4ODgxNzlfaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0FYODgxNzlfMTc4QSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F4ODgxNzlhX2JpbmQmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfdW5iaW5kJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX2xpbmtfcmVzZXQmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfcnhfZml4dXAmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfdHhfZml4dXAmIzM0OywKICAgICYjMzQ7YXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZCYjMzQ7LAogICAgJiMzNDtheDE3OWFfdmxhbl9yeF9raWxsX3ZpZCYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9nZXRfcGF1c2VwYXJhbSYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9zZXRfcGF1c2VwYXJhbSYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9yeF9jaGVja3N1bSYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9idWxraW5fY29uZmlnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgbmV3IEFTSVggVVNCIEV0aGVybmV0IGNoaXBzIChBWDg4MTc5QSwgQVg4ODc3MkQsIEFYODgyNzkpIHRvIHRoZSBheDg4MTc5XzE3OGEgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiwgbGluayByZXNldCwgYW5kIHBhY2tldCBwYXJzaW5nIChyeC90eCBmaXh1cCkgbG9naWMgc3BlY2lmaWMgdG8gdGhlc2UgY2hpcHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgVVNCIGRldmljZSBiaW5kaW5nIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWMzNzc5NWJhYWI1ZGU2OGZlZWJlMzJiNGUyY2Y4YjM3ZjVhZjVhNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMTE6MDE6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMgYi9kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMKaW5kZXggOThmODk5ZWEyZTk0NjIuLjEyZmMyMGU1Zjc2ZTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jCkBAIC0xMyw5ICYjNDM7MTMsMTIgQEAKICNpbmNsdWRlICZsdDtsaW51eC91c2IvdXNibmV0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiAKICNkZWZpbmUgQVg4ODE3OV9QSFlfSUQJCQkJMHgwMwogI2RlZmluZSBBWF9FRVBST01fTEVOCQkJCTB4MTAwCiYjNDM7I2RlZmluZSBBWDg4Mjc5X0VFUFJPTV9MRU4JCQkweDQwMDAKJiM0MzsjZGVmaW5lIEFYODgxNzlBX0VFUFJPTV9MRU4JCQkoMzIgKiAyMCkKICNkZWZpbmUgQVg4ODE3OV9FRVBST01fTUFHSUMJCQkweDE3OTAwYjk1CiAjZGVmaW5lIEFYX01DQVNUX0ZMVFNJWkUJCQk4CiAjZGVmaW5lIEFYX01BWF9NQ0FTVAkJCQk2NApAQCAtMzIsMTcgJiM0MzszNSwzMyBAQAogI2RlZmluZSBBWF9BQ0NFU1NfRUVQUk9NCQkJMHgwNAogI2RlZmluZSBBWF9BQ0NFU1NfRUZVUwkJCQkweDA1CiAjZGVmaW5lIEFYX1JFTE9BRF9FRVBST01fRUZVU0UJCQkweDA2Ci0jZGVmaW5lIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gJCQkweDU0Ci0jZGVmaW5lIEFYX1BBVVNFX1dBVEVSTFZMX0xPVwkJCTB4NTUKLQomIzQzOyNkZWZpbmUgQVg4ODE3OUFfV0FLRVVQX1NFVFRJTkcJCQkweDA3CiYjNDM7I2RlZmluZSBBWF9GV19NT0RFCQkJCTB4MDgKJiM0MzsjZGVmaW5lIEFYX0dQSFlfQ1RMCQkJCTB4MEYKJiM0MzsjZGVmaW5lIEFYODgxNzlBX0ZMQVNIX1JFQUQJCQkweDIxCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9GTEFTSF9XRU4JCQkweDIyCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9GTEFTSF9XRElTCQkJMHgyMwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfV1JJVEUJCQkweDI0CiYjNDM7I2RlZmluZSBBWDg4MTc5QV9QSFlfQ0xBVVNFNDUJCQkweDI3CiYjNDM7I2RlZmluZSBBWDg4MTc5QV9GTEFTSF9FUkFTRV9TRUNUSU9OCQkweDI4CiYjNDM7I2RlZmluZSBBWDg4MTc5QV9BQ0NFU1NfQkwJCQkweDJBCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9QSFlfUE9XRVIJCQkweDMxCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNICQkJMHhDMAomIzQzOyNkZWZpbmUgQVhfUEFVU0VfV0FURVJMVkxfTE9XCQkJMHg1NAomIzQzOyNkZWZpbmUgQVhfUEFVU0VfV0FURVJMVkxfSElHSAkJCTB4NTUKJiM0MzsKJiM0MzsjZGVmaW5lIEFYX0ZXX01PREVfMTc5QQkJCQkweDAxCiAjZGVmaW5lIFBIWVNJQ0FMX0xJTktfU1RBVFVTCQkJMHgwMgogCSNkZWZpbmUJQVhfVVNCX1NTCQkweDA0CiAJI2RlZmluZQlBWF9VU0JfSFMJCTB4MDIKJiM0MzsJI2RlZmluZSBBWF9VU0JfRlMJCTB4MDEKIAogI2RlZmluZSBHRU5FUkFMX1NUQVRVUwkJCQkweDAzCiAvKiBDaGVjayBBWDg4MTc5IHZlcnNpb24uIFVBMTpCaXQyID0gMCwgIFVBMjpCaXQyID0gMSAqLwogCSNkZWZpbmUJQVhfU0VDTEQJCTB4MDQKIAomIzQzOyNkZWZpbmUgQVhfQ0hJUF9TVEFUVVMJCQkJMHgwNQomIzQzOwogI2RlZmluZSBBWF9TUk9NX0FERFIJCQkJMHgwNwogI2RlZmluZSBBWF9TUk9NX0NNRAkJCQkweDBhCiAJI2RlZmluZSBFRVBfUkQJCQkweDA0CkBAIC02Miw2ICYjNDM7ODEsMTUgQEAKIAkjZGVmaW5lIEFYX1JYX0NUTF9QUk8JCTB4MDAwMQogCSNkZWZpbmUgQVhfUlhfQ1RMX1NUT1AJCTB4MDAwMAogCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9FVEhfVFhfR0FQCQkJMHgwRAomIzQzOwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfQkZNX0RBVEEJCQkweDBFCiYjNDM7CSNkZWZpbmUgQVhfVFhfUVVFVUVfQ0ZHCQkweDAyCiYjNDM7CSNkZWZpbmUgQVhfVFhfUVVFVUVfU0VUCQkweDA4CiYjNDM7CSNkZWZpbmUgQVhfVFhfUTFfQUhCX0ZDX0VOCTB4MTAKJiM0MzsJI2RlZmluZSBBWF9UWF9RMl9BSEJfRkNfRU4JMHgyMAomIzQzOwkjZGVmaW5lIEFYX1hHTUlJX0VOCQkweDgwCiYjNDM7CiAjZGVmaW5lIEFYX05PREVfSUQJCQkJMHgxMAogI2RlZmluZSBBWF9NVUxGTFRBUlkJCQkJMHgxNgogCkBAIC05MSw3ICYjNDM7MTE5LDIxIEBACiAJI2RlZmluZSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkwJMHgwMDIwCiAJI2RlZmluZSBBWF9QSFlQV1JfUlNUQ1RMX0FUCTB4MTAwMAogCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MJCTB4MkEKJiM0MzsKJiM0MzsjZGVmaW5lIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTAkJMHgyQgomIzQzOwkjZGVmaW5lIEFYX1ZMQU5fQ09OVFJPTF9XRQkweDAwMDEKJiM0MzsJI2RlZmluZSBBWF9WTEFOX0NPTlRST0xfUkQJMHgwMDAyCiYjNDM7CSNkZWZpbmUgQVhfVkxBTl9DT05UUk9MX1ZTTwkweDAwMTAKJiM0MzsJI2RlZmluZSBBWF9WTEFOX0NPTlRST0xfVkZFCTB4MDAyMAomIzQzOwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMAkJCTB4MkMKJiM0MzsjZGVmaW5lIEFYODgxNzlBX1ZMQU5fSURfREFUQTEJCQkweDJECiYjNDM7CiAjZGVmaW5lIEFYX1JYX0JVTEtJTl9RQ1RSTAkJCTB4MmUKJiM0MzsKJiM0MzsjZGVmaW5lIEFYX0dQSFlfRUVFX0NUUkwJCQkweDAxCiYjNDM7CiAjZGVmaW5lIEFYX0NMS19TRUxFQ1QJCQkJMHgzMwogCSNkZWZpbmUgQVhfQ0xLX1NFTEVDVF9CQ1MJMHgwMQogCSNkZWZpbmUgQVhfQ0xLX1NFTEVDVF9BQ1MJMHgwMgpAQCAtMTExLDcgJiM0MzsxNTMsNTEgQEAKIAkjZGVmaW5lIEFYX1RYQ09FX1RDUFY2CQkweDIwCiAJI2RlZmluZSBBWF9UWENPRV9VRFBWNgkJMHg0MAogCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfQk1fSU5UX01BU0sJCTB4NDEKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19CTV9SWF9ETUFfQ1RMCQkweDQzCiYjNDM7I2RlZmluZSBBWDg4MTc5QV9NQUNfQk1fVFhfRE1BX0NUTAkJMHg0NgomIzQzOwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DREMJCTB4NkQKJiM0MzsJI2RlZmluZSBBWF9MU09GQ19XQ05UXzdfQUNDRVNTCTB4MDMKJiM0MzsJI2RlZmluZSBBWF9HTUlJX0NSQ19BUFBFTkQJMHgxMAomIzQzOwogI2RlZmluZSBBWF9MRURDVFJMCQkJCTB4NzMKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19BUkNfQ1RSTAkJCTB4OUUKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19TV1BfQ1RSTAkJCTB4QjEKJiM0MzsKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19UWF9QQVVTRQkJCTB4QjIKJiM0MzsKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19DRENfREVMQVlfVFgJCTB4QjUKJiM0MzsKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19QQVRICQkJMHhCNwomIzQzOwkjZGVmaW5lIEFYX01BQ19SWF9QQVRIX1JFQURZCTB4MDEKJiM0MzsJI2RlZmluZSBBWF9NQUNfVFhfUEFUSF9SRUFEWQkweDAyCiYjNDM7CiYjNDM7I2RlZmluZSBBWDg4MTc5QV9ORVdfUEFVU0VfQ1RSTAkJCTB4QjgKJiM0MzsJI2RlZmluZSBBWF9ORVdfUEFVU0VfRU4JCTB4MDEKJiM0MzsKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19CVUxLX09VVF9DVFJMCQkweEI5CiYjNDM7CSNkZWZpbmUgQVhfTUFDX0VGRl9FTgkJMHgwMgomIzQzOwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVAkJMHhDMAomIzQzOwkjZGVmaW5lIEFYX01BQ19MU09fRVJSX0VOCTB4MDQKJiM0MzsJI2RlZmluZSBBWF9NQUNfTUlRRkZDVFJMX0ZPUk1BVAkweDEwCiYjNDM7CSNkZWZpbmUgQVhfTUFDX01JUUZGQ1RSTF9EUk9QX0NSQyAweDIwCiYjNDM7CiYjNDM7I2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNIX0RFTEFZCSg1VUwgJmx0OyZsdDsgOCkKJiM0MzsjZGVmaW5lIEFYODgxNzlBX0FVVE9ERVRBQ0hfRU4JCTEKJiM0MzsKJiM0MzsjZGVmaW5lIEFYODgxNzlBX01BQ19MU09fRU5IQU5DRV9DVFJMCQkweEMzCiYjNDM7CSNkZWZpbmUgQVhfTFNPX0VOSEFOQ0VfRU4JMHgwMQomIzQzOwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfTUFDX1RYX0hEUl9DS1NVTQkJMHhDQwomIzQzOyNkZWZpbmUgQVg4ODE3OUFfRVA1X0VIUgkJCTB4RjkKJiM0MzsKJiM0MzsjZGVmaW5lIEFYX1BIWV9QT1dFUgkJCQkweDAyCiYjNDM7CiYjNDM7I2RlZmluZSBFUEhZX0xPV19QT1dFUl9FTgkJCTB4MDEKJiM0MzsjZGVmaW5lIFM1X1dPTF9FTgkJCQkweDA0CiYjNDM7I2RlZmluZSBTNV9XT0xfTE9XX1BPV0VSCQkJMHgyMAogCiAjZGVmaW5lIEdNSUlfUEhZX1BIWVNSCQkJCTB4MTEKIAkjZGVmaW5lIEdNSUlfUEhZX1BIWVNSX1NNQVNLCTB4YzAwMApAQCAtMTY0LDggJiM0MzsyNTAsNTYgQEAKIAkjZGVmaW5lIEdNSUlfUEhZX1BHU0VMX1BBR0UzCTB4MDAwMwogCSNkZWZpbmUgR01JSV9QSFlfUEdTRUxfUEFHRTUJMHgwMDA1CiAKJiM0MzsvKiBUWCBEZXNjcmlwdG9yICovCiYjNDM7I2RlZmluZSBBWDE3OUFfVFhfREVTQ19MRU5fTUFTSwkJMHgxRkZGRkYKJiM0MzsjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX0RST1BfUEFERAlCSVQoMjgpCiYjNDM7I2RlZmluZSBBWDE3OUFfVFhfREVTQ19WTEFOCQlCSVQoMjkpCiYjNDM7I2RlZmluZSBBWDE3OUFfVFhfREVTQ19NU1NfTUFTSwkJMHg3RkZGCiYjNDM7I2RlZmluZSBBWDE3OUFfVFhfREVTQ19NU1NfU0hJRlQJMHgyMAomIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfVkxBTl9NQVNLCTB4RkZGRgomIzQzOyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfVkxBTl9TSElGVAkweDMwCiYjNDM7CiYjNDM7LyogUlggUGFja2V0IERlc2NyaXB0b3IgKi8KJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9FUlIJCUJJVCgwKQomIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0VSUgkJQklUKDEpCiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfTDRfVFlQRV9NQVNLCTB4MUMKJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9VRFAJCTB4MDQKJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9UQ1AJCTB4MTAKJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MM19UWVBFX01BU0sJMHg2MAomIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0lQCQkweDIwCiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfTDNfSVA2CQkweDQwCiYjNDM7CiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfVkxBTgkJQklUKDEwKQomIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX1JYX09LCQlCSVQoMTEpCiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfUERfRFJPUAkJQklUKDMxKQomIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX0xFTl9NQVNLCTB4N0ZGRjAwMDAKJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9QRF9MRU5fU0hJRlQJMHgxMAomIzQzOyNkZWZpbmUgQVgxNzlBX1JYX1BEX1ZMQU5fU0hJRlQJMHgyMAomIzQzOwomIzQzOy8qIFJYIERlc2NyaXB0b3IgaGVhZGVyICovCiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfREhfUEtUX0NOVF9NQVNLCQkweDFGRkYKJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9ESF9ERVNDX09GRlNFVF9NQVNLCTB4RkZGRkUwMDAKJiM0MzsjZGVmaW5lIEFYMTc5QV9SWF9ESF9ERVNDX09GRlNFVF9TSElGVAkweDBECiYjNDM7CiYjNDM7I2RlZmluZSBBWDE3OUFfUlhfSFdfUEFECQkJMHgwMgomIzQzOwogc3RhdGljIGludCBheDg4MTc5X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldik7CiAKJiM0MztlbnVtIGF4X2V0aGVyX2xpbmtfc3BlZWQgewomIzQzOwlFVEhFUl9MSU5LX05PTkUgPSAwLAomIzQzOwlFVEhFUl9MSU5LXzEwICAgPSAxLAomIzQzOwlFVEhFUl9MSU5LXzEwMCAgPSAyLAomIzQzOwlFVEhFUl9MSU5LXzEwMDAgPSAzLAomIzQzOwlFVEhFUl9MSU5LXzI1MDAgPSA0LAomIzQzO307CiYjNDM7CiYjNDM7ZW51bSBheF9jaGlwX3ZlcnNpb24gewomIzQzOwlBWF9WRVJTSU9OX0lOVkFMSUQJCT0gMHgwLAomIzQzOwlBWF9WRVJTSU9OX0FYODgxNzkJCT0gMHg0LAomIzQzOwlBWF9WRVJTSU9OX0FYODgxNzlBCQk9IDB4NiwJLyogQWxzbyBBWDg4NzcyRCAqLwomIzQzOwlBWF9WRVJTSU9OX0FYODgyNzkJCT0gMHg3LAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgYXg4ODE3OV9kYXRhIHsKIAl1OCAgZWVlX2VuYWJsZWQ7CiAJdTggIGVlZV9hY3RpdmU7CkBAIC0xNzQsNiAmIzQzOzMwOCwxNiBAQCBzdHJ1Y3QgYXg4ODE3OV9kYXRhIHsKIAl1MzIgd29sX3N1cHBvcnRlZDsKIAl1MzIgd29sb3B0czsKIAl1OCBkaXNjb25uZWN0aW5nOwomIzQzOwl1OCBjaGlwX3ZlcnNpb247CiYjNDM7CXU4IGZ3X3ZlcnNpb25bNF07CiYjNDM7CXU4IGlzX2F4ODg3NzJkOwomIzQzOwl1OCBpcF9hbGlnbjsKJiM0MzsJdTggbGluazsKJiM0MzsJdTggc3BlZWQ7CiYjNDM7CXU4IGZ1bGxfZHVwbGV4OwomIzQzOwl1OCByeF9jaGVja3N1bTsKJiM0MzsJdTggZWVwcm9tX3JlYWRfY21kOwomIzQzOwl1MTYgZWVwcm9tX2Jsb2NrOwogfTsKIAogc3RydWN0IGF4ODgxNzlfaW50X2RhdGEgewpAQCAtMTgxLDE1ICYjNDM7MzI1LDQ4IEBAIHN0cnVjdCBheDg4MTc5X2ludF9kYXRhIHsKIAlfX2xlMzIgaW50ZGF0YTI7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKJiM0MztzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIHsKIAl1bnNpZ25lZCBjaGFyIGN0cmwsIHRpbWVyX2wsIHRpbWVyX2gsIHNpemUsIGlmZzsKLX0gQVg4ODE3OV9CVUxLSU5fU0laRVtdID0JewomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODE3OV9CVUxLSU5fU0laRVtdID0JewogCXs3LCAweDRmLCAwLAkweDEyLCAweGZmfSwKIAl7NywgMHgyMCwgMywJMHgxNiwgMHhmZn0sCiAJezcsIDB4YWUsIDcsCTB4MTgsIDB4ZmZ9LAogCXs3LCAweGNjLCAweDRjLCAweDE4LCA4fSwKIH07CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGF4X2J1bGtpbl9zZXR0aW5ncyBBWDg4MTc5QV9CVUxLSU5fU0laRVtdID0gewomIzQzOwl7NSwgMHg3QiwgMHgwMCwJMHgxNywgMHgwRn0sCS8qIDFHLCBTUyAqLwomIzQzOwl7NSwgMHhDMCwgMHgwMiwJMHgwNiwgMHgwRn0sCS8qIDFHLCBIUyAqLwomIzQzOwl7NywgMHhGMCwgMHgwMCwJMHgwQywgMHgwRn0sCS8qIDEwME0sIEZ1bGwsIFNTICovCiYjNDM7CXs2LCAweDAwLCAweDAwLAkweDA2LCAweDBGfSwJLyogMTAwTSwgSGFsZiwgU1MgKi8KJiM0MzsJezUsIDB4QzAsIDB4MDQsCTB4MDYsIDB4MEZ9LAkvKiAxMDBNLCBGdWxsLCBIUyAqLwomIzQzOwl7NywgMHhDMCwgMHgwNCwJMHgwNiwgMHgwRn0sCS8qIDEwME0sIEhhbGYsIEhTICovCiYjNDM7CXs3LCAweDAwLCAweDAwLAkweDAzLCAweDNGfSwJLyogRlMgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIEFYODg3NzJEX0JVTEtJTl9TSVpFW10gPSB7CiYjNDM7CXswLCAweDAwLCAweDAwLAkweDAwLCAweDAwfSwJLyogMUcsIFNTICh1bnVzZWQpICovCiYjNDM7CXswLCAweDAwLCAweDAwLAkweDAwLCAweDAwfSwJLyogMUcsIEhTICh1bnVzZWQpICovCiYjNDM7CXswLCAweDAwLCAweDAwLAkweDAwLCAweDAwfSwJLyogMTAwTSwgRnVsbCwgU1MgKHVudXNlZCkgKi8KJiM0MzsJezAsIDB4MDAsIDB4MDAsCTB4MDAsIDB4MDB9LAkvKiAxMDBNLCBIYWxmLCBTUyAodW51c2VkKSAqLwomIzQzOwl7NSwgMHhDMCwgMHgwNCwJMHgwNiwgMHgwRn0sCS8qIDEwME0sIEZ1bGwsIEhTICovCiYjNDM7CXs3LCAweEMwLCAweDA0LAkweDA2LCAweDBGfSwJLyogMTAwTSwgSGFsZiwgSFMgKi8KJiM0MzsJezcsIDB4MDAsIDB4MDAsCTB4MDMsIDB4M0Z9LAkvKiBGUyAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODI3OV9CVUxLSU5fU0laRVtdID0gewomIzQzOwl7NSwgMHgxMCwgMHgwMSwJMHgxMSwgMHgwRn0sCS8qIDIuNUcgKi8KJiM0MzsJezcsIDB4QjMsIDB4MDEsCTB4MTEsIDB4MEZ9LAkvKiAxRywgU1MgKi8KJiM0MzsJezcsIDB4QzAsIDB4MDIsCTB4MDYsIDB4MEZ9LAkvKiAxRywgSFMgKi8KJiM0MzsJezcsIDB4ODAsIDB4MDEsCTB4MDMsIDB4MEZ9LAkvKiAxMDBNLCBGdWxsLCBTUyAqLwomIzQzOwl7NywgMHg4MCwgMHgwMSwJMHgwMywgMHgwRn0sCS8qIDEwME0sIEhhbGYsIFNTICovCiYjNDM7CXs3LCAweDgwLCAweDAxLAkweDAzLCAweDBGfSwJLyogMTAwTSwgRnVsbCwgSFMgKi8KJiM0MzsJezcsIDB4ODAsIDB4MDEsCTB4MDMsIDB4MEZ9LAkvKiAxMDBNLCBIYWxmLCBIUyAqLwomIzQzOwl7NywgMHgwMCwgMHgwMCwJMHgwMywgMHgzRn0sCS8qIEZTICovCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyB2b2lkIGF4ODgxNzlfc2V0X3BtX21vZGUoc3RydWN0IHVzYm5ldCAqZGV2LCBib29sIHBtX21vZGUpCiB7CiAJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CkBAIC0zMTMsNiAmIzQzOzQ5MCw3IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAogCiBzdGF0aWMgdm9pZCBheDg4MTc5X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKIHsKJiM0MzsJc3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiAJc3RydWN0IGF4ODgxNzlfaW50X2RhdGEgKmV2ZW50OwogCXUzMiBsaW5rOwogCkBAIC0zMjMsNiAmIzQzOzUwMSw5IEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKQogCWxlMzJfdG9fY3B1cygodm9pZCAqKSZhbXA7ZXZlbnQtJmd0O2ludGRhdGExKTsKIAogCWxpbmsgPSAoKChfX2ZvcmNlIHUzMilldmVudC0mZ3Q7aW50ZGF0YTEpICZhbXA7IEFYX0lOVF9QUExTX0xJTkspICZndDsmZ3Q7IDE2OwomIzQzOwlkYXRhLSZndDtzcGVlZCA9ICgoKF9fZm9yY2UgdTMyKWV2ZW50LSZndDtpbnRkYXRhMSkgJmd0OyZndDsgOCkgJmFtcDsgMHg3OwomIzQzOwlkYXRhLSZndDtmdWxsX2R1cGxleCA9ICgoKF9fZm9yY2UgdTMyKWV2ZW50LSZndDtpbnRkYXRhMSkgJmd0OyZndDsgMTIpICZhbXA7IDB4MTsKJiM0MzsJZGF0YS0mZ3Q7bGluayA9IGxpbms7CiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYtJmd0O25ldCkgIT0gbGluaykgewogCQl1c2JuZXRfbGlua19jaGFuZ2UoZGV2LCBsaW5rLCAxKTsKQEAgLTQwMyw2ICYjNDM7NTg0LDMyIEBAIGF4ODgxNzlfcGh5X3dyaXRlX21tZF9pbmRpcmVjdChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBwcnRhZCwgdTE2IGRldmFkLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBheF9yZWFkX21tZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBkZXZfYWRkciwgdTE2IHJlZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwomIzQzOwl1MTYgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7Y2hpcF92ZXJzaW9uICZndDs9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHsKJiM0MzsJCXJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfQ0xBVVNFNDUsIGRldl9hZGRyLCByZWcsIDIsICZhbXA7cmVzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsIHJlZywgZGV2X2FkZHIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGF4X3dyaXRlX21tZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBkZXZfYWRkciwgdTE2IHJlZywgdTE2IGRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LSZndDtkcml2ZXJfcHJpdjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2NoaXBfdmVyc2lvbiAmZ3Q7PSBBWF9WRVJTSU9OX0FYODgxNzlBKQomIzQzOwkJcmV0dXJuIGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfUEhZX0NMQVVTRTQ1LCBkZXZfYWRkciwgcmVnLCAyLCAmYW1wO2RhdGEpOwomIzQzOwomIzQzOwlyZXR1cm4gYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KGRldiwgcmVnLCBkZXZfYWRkciwgZGF0YSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBheDg4MTc5X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CkBAIC00MTQsNyAmIzQzOzYyMSw2IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIAogCXVzYm5ldF9zdXNwZW5kKGludGYsIG1lc3NhZ2UpOwogCi0JLyogRW5hYmxlIFdvTCAqLwogCWlmIChwcml2LSZndDt3b2xvcHRzKSB7CiAJCWF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NT05JVE9SX01PRCwKIAkJCQkgMSwgMSwgJmFtcDt0bXA4KTsKQEAgLTQyNSw2ICYjNDM7NjMxLDI2IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIAogCQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELAogCQkJCSAgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJCWlmIChwcml2LSZndDtjaGlwX3ZlcnNpb24gJmd0Oz0gQVhfVkVSU0lPTl9BWDg4MTc5QSkgewomIzQzOwkJCWF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsICZhbXA7dG1wMTYpOwomIzQzOwkJCXRtcDE2IHw9IEFYX01FRElVTV9SRUNFSVZFX0VOOwomIzQzOwkJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCAmYW1wO3RtcDE2KTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChwcml2LSZndDtjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KQomIzQzOwkJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfV0FLRVVQX1NFVFRJTkcsIDgsCiYjNDM7CQkJCQkgIEVQSFlfTE9XX1BPV0VSX0VOIHwgUzVfV09MX0VOCiYjNDM7CQkJCQkgIHwgUzVfV09MX0xPV19QT1dFUiB8IDB4ODAwMCwgMCwgTlVMTCk7CiYjNDM7CiYjNDM7CX0gZWxzZSBpZiAocHJpdi0mZ3Q7Y2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkgewomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9XQUtFVVBfU0VUVElORywgOCwgMHg4MDAwLCAwLCBOVUxMKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7Y2hpcF92ZXJzaW9uICZndDs9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfV0FLRVVQX1NFVFRJTkcsIDAsIEVQSFlfTE9XX1BPV0VSX0VOLCAwLCBOVUxMKTsKJiM0MzsJCWF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCBmYWxzZSk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBEaXNhYmxlIFJYIHBhdGggKi8KQEAgLTQzNiwxMSAmIzQzOzY2MiwxMSBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiAKIAkvKiBGb3JjZSBidWxrLWluIHplcm8gbGVuZ3RoICovCiAJYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsCi0JCQkgMiwgMiwgJmFtcDt0bXAxNik7CiYjNDM7CQkJMiwgMiwgJmFtcDt0bXAxNik7CiAKIAl0bXAxNiB8PSBBWF9QSFlQV1JfUlNUQ1RMX0JaIHwgQVhfUEhZUFdSX1JTVENUTF9JUFJMOwogCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEhZUFdSX1JTVENUTCwKLQkJCSAgMiwgMiwgJmFtcDt0bXAxNik7CiYjNDM7CQkJMiwgMiwgJmFtcDt0bXAxNik7CiAKIAkvKiBjaGFuZ2UgY2xvY2sgKi8KIAl0bXA4ID0gMDsKQEAgLTQ1NiwxMiAmIzQzOzY4MiwxOSBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgdGhlIGF1dG9kZXRhY2ggZnVuY3Rpb24uICovCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYnkgb2Zmc2V0IDB4NDMgb2YgRUVQUk9NICovCiYjNDM7LyogVGhpcyBmdW5jdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IG9mZnNldCAweDQzIG9mIEVFUFJPTSBmb3IgdGhlIEFYODgxNzkgKi8KIHN0YXRpYyBpbnQgYXg4ODE3OV9hdXRvX2RldGFjaChzdHJ1Y3QgdXNibmV0ICpkZXYpCiB7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwogCXUxNiB0bXAxNjsKIAl1OCB0bXA4OwogCiYjNDM7CWlmIChwcml2LSZndDtjaGlwX3ZlcnNpb24gJmd0Oz0gQVhfVkVSU0lPTl9BWDg4MTc5QSkgewomIzQzOwkJdG1wMTYgPSBBWDg4MTc5QV9BVVRPREVUQUNIX0RFTEFZOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9BVVRPREVUQUNILCB0bXAxNiwgMCwgMCwgTlVMTCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCWlmIChheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX0VFUFJPTSwgMHg0MywgMSwgMiwgJmFtcDt0bXAxNikgJmx0OyAwKQogCQlyZXR1cm4gMDsKIApAQCAtNDg0LDExICYjNDM7NzE3LDMxIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9hdXRvX2RldGFjaChzdHJ1Y3QgdXNibmV0ICpkZXYpCiBzdGF0aWMgaW50IGF4ODgxNzlfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGE7CiYjNDM7CXU4IHJlZzg7CiAKJiM0MzsJYXgxNzlfZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiAJYXg4ODE3OV9zZXRfcG1fbW9kZShkZXYsIHRydWUpOwogCiAJdXNibmV0X2xpbmtfY2hhbmdlKGRldiwgMCwgMCk7CiAKJiM0MzsJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiAmZ3Q7PSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7CiYjNDM7CQlheDg4MTc5X3JlYWRfY21kKGRldiwgQVg4ODE3OUFfUEhZX1BPV0VSLCAwLCAwLCAxLCAmYW1wO3JlZzgpOwomIzQzOwkJaWYgKCEocmVnOCAmYW1wOyBBWF9QSFlfUE9XRVIpKSB7CiYjNDM7CQkJcmVnOCA9IEFYX1BIWV9QT1dFUjsKJiM0MzsJCQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgJmFtcDtyZWc4KTsKJiM0MzsJCQltc2xlZXAoMjUwKTsKJiM0MzsJCX0KJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfRldfTU9ERSwgQVhfRldfTU9ERV8xNzlBLCAwLCAwLCBOVUxMKTsKJiM0MzsKJiM0MzsJCS8qIE5vdywgdGhhdCBBWF9GV19NT0RFXzE3OUEgaXMgZW5hYmxlZCwgdGhlIFBIWSBuZWVkcyBhIHBvd2VyLWN5Y2xlLgomIzQzOwkJICogUEhZLXBvd2VyIGlzIHJlLWVuYWJsZWQgaW4gYXg4ODE3OV9yZXNldCgpCiYjNDM7CQkgKi8KJiM0MzsJCXJlZzggPSAwOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsICZhbXA7cmVnOCk7CiYjNDM7CQltc2xlZXAoMjUwKTsKJiM0MzsJfQomIzQzOwogCWF4ODgxNzlfcmVzZXQoZGV2KTsKIAogCWF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCBmYWxzZSk7CkBAIC01MTAsNiAmIzQzOzc2MywyMSBAQCBzdGF0aWMgdm9pZCBheDg4MTc5X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiAJdXNibmV0X2Rpc2Nvbm5lY3QoaW50Zik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBheDg4MTc5X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LSZndDtkcml2ZXJfcHJpdjsKJiM0MzsKJiM0MzsJLyogSW5oZXJpdCBzdGFuZGFyZCBkZXZpY2UgaW5mbyAqLwomIzQzOwl1c2JuZXRfZ2V0X2RydmluZm8obmV0LCBpbmZvKTsKJiM0MzsJaWYgKHByaXYtJmd0O2NoaXBfdmVyc2lvbiAmbHQ7IEFYX1ZFUlNJT05fQVg4ODE3OUEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNucHJpbnRmKGluZm8tJmd0O2Z3X3ZlcnNpb24sIHNpemVvZihpbmZvLSZndDtmd192ZXJzaW9uKSwgJiMzNDslZC4lZC4lZC4lZCYjMzQ7LAomIzQzOwkJIHByaXYtJmd0O2Z3X3ZlcnNpb25bMF0sIHByaXYtJmd0O2Z3X3ZlcnNpb25bMV0sCiYjNDM7CQkgcHJpdi0mZ3Q7ZndfdmVyc2lvblsyXSwgcHJpdi0mZ3Q7ZndfdmVyc2lvblszXSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIGF4ODgxNzlfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQogewpAQCAtNTM2LDQxICYjNDM7ODA0LDc0IEBAIGF4ODgxNzlfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQogCiBzdGF0aWMgaW50IGF4ODgxNzlfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKLQlyZXR1cm4gQVhfRUVQUk9NX0xFTjsKJiM0MzsJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKJiM0MzsJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTsKJiM0MzsKJiM0MzsJYXgxNzlfZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiYjNDM7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKQomIzQzOwkJcmV0dXJuIEFYX0VFUFJPTV9MRU47CiYjNDM7CWVsc2UgaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiAmZ3Q7PSBBWF9WRVJTSU9OX0FYODgyNzkpCiYjNDM7CQlyZXR1cm4gQVg4ODI3OV9FRVBST01fTEVOOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gQVg4ODE3OUFfRUVQUk9NX0xFTjsKIH0KIAotc3RhdGljIGludAotYXg4ODE3OV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLAotCQkgICB1OCAqZGF0YSkKJiM0MztzdGF0aWMgdm9pZAomIzQzO2F4ODgxNzlfZWVwcm9tX2FjY2Vzc19wYXJhbXMoc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSwgaW50IGksIHUxNiAqdmFsdWUsIHUxNiAqaWR4KQomIzQzO3sKJiM0MzsJLyogQVg4ODE3OSBoYXMgYSB3b3JkLWFkZHJlc3NhYmxlIEVFUFJPTQomIzQzOwkgKiBBWDg4MTc5QSB1c2VzIEVGVVNFUyB3aXRoIDIwIGJ5dGVzIGxlbmd0aAomIzQzOwkgKiBBWDg4Mjc5IGhhcyBhbiBFRVBST00gYWRkcmVzc2FibGUgaW4gMjU2IGJ5dGUgYmxvY2tzCiYjNDM7CSAqLwomIzQzOwlpZiAoYXgxNzlfZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uICZsdDsgQVhfVkVSU0lPTl9BWDg4MTc5QSkgewomIzQzOwkJKnZhbHVlID0gaTsKJiM0MzsJCSppZHggPSAxOwomIzQzOwl9IGVsc2UgaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiAmZ3Q7PSBBWF9WRVJTSU9OX0FYODgyNzkpIHsKJiM0MzsJCSp2YWx1ZSA9IChpICogYXgxNzlfZGF0YS0mZ3Q7ZWVwcm9tX2Jsb2NrKSAmZ3Q7Jmd0OyAxNjsKJiM0MzsJCSppZHggPSAoaSAqIGF4MTc5X2RhdGEtJmd0O2VlcHJvbV9ibG9jaykgJmFtcDsgMHhmZmZmOwomIzQzOwl9IGVsc2UgewomIzQzOwkJKnZhbHVlID0gaSAmbHQ7Jmx0OyA0OwomIzQzOwkJKmlkeCA9IDA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBheDg4MTc5X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0JdTE2ICplZXByb21fYnVmZjsKLQlpbnQgZmlyc3Rfd29yZCwgbGFzdF93b3JkOwotCWludCBpLCByZXQ7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGE7CiYjNDM7CWludCBmaXJzdCwgbGFzdCwgaSwgcmV0OwomIzQzOwl1OCAqZWVwcm9tX2J1ZmY7CiYjNDM7CiYjNDM7CWF4MTc5X2RhdGEgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwogCiAJaWYgKGVlcHJvbS0mZ3Q7bGVuID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZWVwcm9tLSZndDttYWdpYyA9IEFYODgxNzlfRUVQUk9NX01BR0lDOwogCi0JZmlyc3Rfd29yZCA9IGVlcHJvbS0mZ3Q7b2Zmc2V0ICZndDsmZ3Q7IDE7Ci0JbGFzdF93b3JkID0gKGVlcHJvbS0mZ3Q7b2Zmc2V0ICYjNDM7IGVlcHJvbS0mZ3Q7bGVuIC0gMSkgJmd0OyZndDsgMTsKLQllZXByb21fYnVmZiA9IGttYWxsb2NfYXJyYXkobGFzdF93b3JkIC0gZmlyc3Rfd29yZCAmIzQzOyAxLCBzaXplb2YodTE2KSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWZpcnN0ID0gZWVwcm9tLSZndDtvZmZzZXQgLyBheDE3OV9kYXRhLSZndDtlZXByb21fYmxvY2s7CiYjNDM7CWxhc3QgPSAoZWVwcm9tLSZndDtvZmZzZXQgJiM0MzsgZWVwcm9tLSZndDtsZW4gLSAxKSAvIGF4MTc5X2RhdGEtJmd0O2VlcHJvbV9ibG9jazsKJiM0MzsKJiM0MzsJZWVwcm9tX2J1ZmYgPSBremFsbG9jKChsYXN0IC0gZmlyc3QgJiM0MzsgMSkgKiBheDE3OV9kYXRhLSZndDtlZXByb21fYmxvY2ssIEdGUF9LRVJORUwpOwogCWlmICghZWVwcm9tX2J1ZmYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogYXg4ODE3OS8xNzhBIHJldHVybnMgMiBieXRlcyBmcm9tIGVlcHJvbSBvbiByZWFkICovCi0JZm9yIChpID0gZmlyc3Rfd29yZDsgaSAmbHQ7PSBsYXN0X3dvcmQ7IGkmIzQzOyYjNDM7KSB7Ci0JCXJldCA9IF9fYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19FRVBST00sIGksIDEsIDIsCi0JCQkJCSAmYW1wO2VlcHJvbV9idWZmW2kgLSBmaXJzdF93b3JkXSk7CiYjNDM7CWZvciAoaSA9IGZpcnN0OyBpICZsdDs9IGxhc3Q7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MTYgdmFsdWUsIGlkeDsKJiM0MzsKJiM0MzsJCWF4ODgxNzlfZWVwcm9tX2FjY2Vzc19wYXJhbXMoYXgxNzlfZGF0YSwgaSwgJmFtcDt2YWx1ZSwgJmFtcDtpZHgpOwomIzQzOwkJcmV0ID0gX19heDg4MTc5X3JlYWRfY21kKGRldiwgYXgxNzlfZGF0YS0mZ3Q7ZWVwcm9tX3JlYWRfY21kLAomIzQzOwkJCQkJIHZhbHVlLCBpZHgsIGF4MTc5X2RhdGEtJmd0O2VlcHJvbV9ibG9jaywKJiM0MzsJCQkJCSBlZXByb21fYnVmZiAmIzQzOyAoaSAtIGZpcnN0KSAqIGF4MTc5X2RhdGEtJmd0O2VlcHJvbV9ibG9jayk7CiYjNDM7CiAJCWlmIChyZXQgJmx0OyAwKSB7CiAJCQlrZnJlZShlZXByb21fYnVmZik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIAotCW1lbWNweShkYXRhLCAodTggKillZXByb21fYnVmZiAmIzQzOyAoZWVwcm9tLSZndDtvZmZzZXQgJmFtcDsgMSksIGVlcHJvbS0mZ3Q7bGVuKTsKJiM0MzsJbWVtY3B5KGRhdGEsIGVlcHJvbV9idWZmICYjNDM7IGVlcHJvbS0mZ3Q7b2Zmc2V0ICUgYXgxNzlfZGF0YS0mZ3Q7ZWVwcm9tX2Jsb2NrLCBlZXByb20tJmd0O2xlbik7CiAJa2ZyZWUoZWVwcm9tX2J1ZmYpOwogCXJldHVybiAwOwogfQpAQCAtNTgwLDEyICYjNDM7ODgxLDE3IEBAIGF4ODgxNzlfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwKIAkJICAgdTggKmRhdGEpCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKJiM0MzsJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTsKIAl1MTYgKmVlcHJvbV9idWZmOwogCWludCBmaXJzdF93b3JkOwogCWludCBsYXN0X3dvcmQ7CiAJaW50IHJldDsKIAlpbnQgaTsKIAomIzQzOwlheDE3OV9kYXRhID0gZGV2LSZndDtkcml2ZXJfcHJpdjsKJiM0MzsJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiAmZ3Q7PSBBWF9WRVJTSU9OX0FYODgxNzlBKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwogCW5ldGRldl9kYmcobmV0LCAmIzM0O3dyaXRlIEVFUFJPTSBsZW4gJWQsIG9mZnNldCAlZCwgbWFnaWMgMHgleFxuJiMzNDssCiAJCSAgIGVlcHJvbS0mZ3Q7bGVuLCBlZXByb20tJmd0O29mZnNldCwgZWVwcm9tLSZndDttYWdpYyk7CiAKQEAgLTY1MSwxMiAmIzQzOzk1NywzOSBAQCBheDg4MTc5X3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sCiB9CiAKIHN0YXRpYyBpbnQgYXg4ODE3OV9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwKLQkJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQomIzQzOwkJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhOwomIzQzOwlpbnQgdjsKJiM0MzsKJiM0MzsJZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiAKIAltaWlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MoJmFtcDtkZXYtJmd0O21paSwgY21kKTsKIAomIzQzOwlpZiAoZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uICZndDs9IEFYX1ZFUlNJT05fQVg4ODI3OSkgewomIzQzOwkJbGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsCiYjNDM7CQkJCSBjbWQtJmd0O2xpbmtfbW9kZXMuc3VwcG9ydGVkKTsKJiM0MzsKJiM0MzsJCXYgPSBheDg4MTc5X21kaW9fcmVhZChkZXYtJmd0O25ldCwgZGV2LSZndDttaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKJiM0MzsJCWlmICh2ICZndDs9IDAgJmFtcDsmYW1wOyB2ICZhbXA7IEFEVkVSVElTRV9SRVNWKQomIzQzOwkJCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULAomIzQzOwkJCQkJIGNtZC0mZ3Q7bGlua19tb2Rlcy5hZHZlcnRpc2luZyk7CiYjNDM7CiYjNDM7CQl2ID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTsKJiM0MzsJCWlmIChkYXRhLSZndDtzcGVlZCA9PSBFVEhFUl9MSU5LXzI1MDApIHsKJiM0MzsJCQljbWQtJmd0O2Jhc2Uuc3BlZWQgPSBTUEVFRF8yNTAwOwomIzQzOwkJCS8qIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUcgaXMgYnJva2VuLCBidXQgd2UgY2FuIGRlZHVjZSB0aGF0CiYjNDM7CQkJICogdGhlIGxpbmstcGFydG5lciBhZHZlcnRpc2VkIDI1MDBNIGlmIHJlbW90ZWx5IEFOIHN1Y2NjZWRlZAomIzQzOwkJCSAqIGZvciBsaW5rIHNwZWVkICZndDsgMTAwME0gYW5kIHdlIGxvY2FsbHkgaGF2ZSBhIGxpbmsgc3BlZWQgb2YKJiM0MzsJCQkgKiAyNTAwTQomIzQzOwkJCSAqLwomIzQzOwkJCWlmICh2ICZndDs9IDAgJmFtcDsmYW1wOyB2ICZhbXA7IE1ESU9fQU5fMTBHQlRfU1RBVF9SRU1PSykKJiM0MzsJCQkJbGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsCiYjNDM7CQkJCQkJIGNtZC0mZ3Q7bGlua19tb2Rlcy5scF9hZHZlcnRpc2luZyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY0LDM0ICYjNDM7OTk3LDEyOCBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhOwomIzQzOwlpbnQgdjsKJiM0MzsKJiM0MzsJZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiYjNDM7CiYjNDM7CS8qIG1paV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyBoYW5kbGVzIHVua25vd24gYml0cyBpbiBNSUlfQURWRVJUSVNFCiYjNDM7CSAqIHRyYW5zcGFyZW50bHksIHNvIGZvciB0aGUgMi41R0JpdCBsaW5rIHNwZWVkIG9mIHRoZSBBWF9WRVJTSU9OX0FYODgyNzkKJiM0MzsJICogd2UganVzdCBzZXQgdXAgQURWRVJUSVNFX1JFU1YgYmVmb3JlIGNhbGxpbmcgbWlpX2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzCiYjNDM7CSAqIGF0IGxlYXN0IGZvciBzcGVlZHMgJmx0OyAyNTAwCiYjNDM7CSAqLwomIzQzOwlpZiAoZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkgewomIzQzOwkJdiA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LSZndDttaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKJiM0MzsJCWlmICh2ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gdjsKJiM0MzsKJiM0MzsJCWlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsCiYjNDM7CQkJCSAgICAgIGNtZC0mZ3Q7bGlua19tb2Rlcy5hZHZlcnRpc2luZykpCiYjNDM7CQkJdiB8PSBBRFZFUlRJU0VfUkVTVjsKJiM0MzsJCWVsc2UKJiM0MzsJCQl2ICZhbXA7PSB+QURWRVJUSVNFX1JFU1Y7CiYjNDM7CQlheDg4MTc5X21kaW9fd3JpdGUobmV0LCBkZXYtJmd0O21paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIHYpOwomIzQzOwkJaWYgKGNtZC0mZ3Q7YmFzZS5zcGVlZCA9PSBTUEVFRF8yNTAwKQomIzQzOwkJCXJldHVybiBtaWlfbndheV9yZXN0YXJ0KCZhbXA7ZGV2LSZndDttaWkpOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIG1paV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncygmYW1wO2Rldi0mZ3Q7bWlpLCBjbWQpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYXg4ODE3OWFfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhOwomIzQzOwl1MTYgYm1jciwgbGNsYWR2LCBybXRhZHY7CiYjNDM7CXU4IGNhcDsKJiM0MzsKJiM0MzsJZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiYjNDM7CiYjNDM7CWlmIChkYXRhLSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlibWNyID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtJmd0O21paS5waHlfaWQsIE1JSV9CTUNSKTsKJiM0MzsJbGNsYWR2ID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtJmd0O21paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOwomIzQzOwlybXRhZHYgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi0mZ3Q7bWlpLnBoeV9pZCwgTUlJX0xQQSk7CiYjNDM7CiYjNDM7CWlmICghKGJtY3IgJmFtcDsgQk1DUl9BTkVOQUJMRSkpIHsKJiM0MzsJCXBhdXNlLSZndDthdXRvbmVnID0gMDsKJiM0MzsJCXBhdXNlLSZndDtyeF9wYXVzZSA9IDA7CiYjNDM7CQlwYXVzZS0mZ3Q7dHhfcGF1c2UgPSAwOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBhdXNlLSZndDthdXRvbmVnID0gMTsKJiM0MzsKJiM0MzsJY2FwID0gbWlpX3Jlc29sdmVfZmxvd2N0cmxfZmR4KGxjbGFkdiwgcm10YWR2KTsKJiM0MzsKJiM0MzsJaWYgKGNhcCAmYW1wOyBGTE9XX0NUUkxfUlgpCiYjNDM7CQlwYXVzZS0mZ3Q7cnhfcGF1c2UgPSAxOwomIzQzOwomIzQzOwlpZiAoY2FwICZhbXA7IEZMT1dfQ1RSTF9UWCkKJiM0MzsJCXBhdXNlLSZndDt0eF9wYXVzZSA9IDE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYXg4ODE3OWFfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhOwomIzQzOwl1MTYgb2xkLCBuZXcxLCBibWNyOwomIzQzOwl1OCBjYXAgPSAwOwomIzQzOwomIzQzOwlkYXRhID0gZGV2LSZndDtkcml2ZXJfcHJpdjsKJiM0MzsKJiM0MzsJaWYgKGRhdGEtJmd0O2NoaXBfdmVyc2lvbiAmbHQ7IEFYX1ZFUlNJT05fQVg4ODE3OUEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWJtY3IgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi0mZ3Q7bWlpLnBoeV9pZCwgTUlJX0JNQ1IpOwomIzQzOwlpZiAocGF1c2UtJmd0O2F1dG9uZWcgJmFtcDsmYW1wOyAhKGJtY3IgJmFtcDsgQk1DUl9BTkVOQUJMRSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHBhdXNlLSZndDtyeF9wYXVzZSkKJiM0MzsJCWNhcCB8PSBGTE9XX0NUUkxfUlg7CiYjNDM7CiYjNDM7CWlmIChwYXVzZS0mZ3Q7dHhfcGF1c2UpCiYjNDM7CQljYXAgfD0gRkxPV19DVFJMX1RYOwomIzQzOwomIzQzOwlvbGQgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi0mZ3Q7bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CiYjNDM7CW5ldzEgPSAob2xkICZhbXA7IH4oQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNKSkgfAomIzQzOwkJbWlpX2FkdmVydGlzZV9mbG93Y3RybChjYXApOwomIzQzOwlpZiAob2xkICE9IG5ldzEpCiYjNDM7CQlheDg4MTc5X21kaW9fd3JpdGUobmV0LCBkZXYtJmd0O21paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIG5ldzEpOwomIzQzOwomIzQzOwlyZXR1cm4gbWlpX253YXlfcmVzdGFydCgmYW1wO2Rldi0mZ3Q7bWlpKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiBheDg4MTc5X2V0aHRvb2xfZ2V0X2VlZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpCiB7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwogCWludCB2YWw7CiAKIAkvKiBHZXQgU3VwcG9ydGVkIEVFRSAqLwotCXZhbCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgTURJT19QQ1NfRUVFX0FCTEUsCi0JCQkJCSAgICBNRElPX01NRF9QQ1MpOwomIzQzOwl2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX1BDUywgTURJT19QQ1NfRUVFX0FCTEUpOwogCWlmICh2YWwgJmx0OyAwKQogCQlyZXR1cm4gdmFsOwogCW1paV9lZWVfY2FwMV9tb2RfbGlua21vZGVfdChkYXRhLSZndDtzdXBwb3J0ZWQsIHZhbCk7CiAKIAkvKiBHZXQgYWR2ZXJ0aXNlbWVudCBFRUUgKi8KLQl2YWwgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsIE1ESU9fQU5fRUVFX0FEViwKLQkJCQkJICAgIE1ESU9fTU1EX0FOKTsKJiM0MzsJdmFsID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWKTsKIAlpZiAodmFsICZsdDsgMCkKIAkJcmV0dXJuIHZhbDsKIAltaWlfZWVlX2NhcDFfbW9kX2xpbmttb2RlX3QoZGF0YS0mZ3Q7YWR2ZXJ0aXNlZCwgdmFsKTsKIAogCS8qIEdldCBMUCBhZHZlcnRpc2VtZW50IEVFRSAqLwotCXZhbCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgTURJT19BTl9FRUVfTFBBQkxFLAotCQkJCQkgICAgTURJT19NTURfQU4pOwomIzQzOwl2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9MUEFCTEUpOwogCWlmICh2YWwgJmx0OyAwKQogCQlyZXR1cm4gdmFsOwogCW1paV9lZWVfY2FwMV9tb2RfbGlua21vZGVfdChkYXRhLSZndDtscF9hZHZlcnRpc2VkLCB2YWwpOwomIzQzOwlpZiAocHJpdi0mZ3Q7Y2hpcF92ZXJzaW9uICZndDs9IEFYX1ZFUlNJT05fQVg4ODI3OSkgewomIzQzOwkJdmFsID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfTFBBQkxFMik7CiYjNDM7CQlpZiAodmFsICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gdmFsOwomIzQzOwkJbWlpX2VlZV9jYXAyX21vZF9saW5rbW9kZV9hZHZfdChkYXRhLSZndDtscF9hZHZlcnRpc2VkLCB2YWwpOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcwMSw4ICYjNDM7MTEyOCw3IEBAIGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSkKIHsKIAl1MTYgdG1wMTYgPSBsaW5rbW9kZV90b19taWlfZWVlX2NhcDFfdChkYXRhLSZndDthZHZlcnRpc2VkKTsKIAotCXJldHVybiBheDg4MTc5X3BoeV93cml0ZV9tbWRfaW5kaXJlY3QoZGV2LCBNRElPX0FOX0VFRV9BRFYsCi0JCQkJCSAgICAgIE1ESU9fTU1EX0FOLCB0bXAxNik7CiYjNDM7CXJldHVybiBheF93cml0ZV9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWLCB0bXAxNik7CiB9CiAKIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGtfZWVlKHN0cnVjdCB1c2JuZXQgKmRldikKQEAgLTcxMiw0MCAmIzQzOzExMzgsMjcgQEAgc3RhdGljIGludCBheDg4MTc5X2Noa19lZWUoc3RydWN0IHVzYm5ldCAqZGV2KQogCiAJbWlpX2V0aHRvb2xfZ3NldCgmYW1wO2Rldi0mZ3Q7bWlpLCAmYW1wO2VjbWQpOwogCi0JaWYgKGVjbWQuZHVwbGV4ICZhbXA7IERVUExFWF9GVUxMKSB7CiYjNDM7CXByaXYtJmd0O2VlZV9hY3RpdmUgPSAwOwomIzQzOwlpZiAoKHByaXYtJmd0O2NoaXBfdmVyc2lvbiAmbHQ7IEFYX1ZFUlNJT05fQVg4ODI3OSAmYW1wOyZhbXA7IChlY21kLmR1cGxleCAmYW1wOyBEVVBMRVhfRlVMTCkpIHx8CiYjNDM7CSAgICAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwICZhbXA7JmFtcDsgKGVjbWQuZHVwbGV4ICZhbXA7IERVUExFWF9GVUxMKSkpIHsKIAkJaW50IGVlZV9scCwgZWVlX2NhcCwgZWVlX2FkdjsKIAkJdTMyIGxwLCBjYXAsIGFkdiwgc3VwcG9ydGVkID0gMDsKIAotCQllZWVfY2FwID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LAotCQkJCQkJCU1ESU9fUENTX0VFRV9BQkxFLAotCQkJCQkJCU1ESU9fTU1EX1BDUyk7Ci0JCWlmIChlZWVfY2FwICZsdDsgMCkgewotCQkJcHJpdi0mZ3Q7ZWVlX2FjdGl2ZSA9IDA7CiYjNDM7CQllZWVfY2FwID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9QQ1MsIE1ESU9fUENTX0VFRV9BQkxFKTsKJiM0MzsJCWlmIChlZWVfY2FwICZsdDsgMCkKIAkJCXJldHVybiBmYWxzZTsKLQkJfQogCiAJCWNhcCA9IG1tZF9lZWVfY2FwX3RvX2V0aHRvb2xfc3VwX3QoZWVlX2NhcCk7Ci0JCWlmICghY2FwKSB7Ci0JCQlwcml2LSZndDtlZWVfYWN0aXZlID0gMDsKJiM0MzsJCWlmICghY2FwKQogCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJZWVlX2xwID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LAotCQkJCQkJICAgICAgIE1ESU9fQU5fRUVFX0xQQUJMRSwKLQkJCQkJCSAgICAgICBNRElPX01NRF9BTik7Ci0JCWlmIChlZWVfbHAgJmx0OyAwKSB7Ci0JCQlwcml2LSZndDtlZWVfYWN0aXZlID0gMDsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQogCi0JCWVlZV9hZHYgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsCi0JCQkJCQkJTURJT19BTl9FRUVfQURWLAotCQkJCQkJCU1ESU9fTU1EX0FOKTsKJiM0MzsJCWVlZV9scCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0xQQUJMRSk7CiYjNDM7CQlpZiAoZWVlX2xwICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKIAotCQlpZiAoZWVlX2FkdiAmbHQ7IDApIHsKLQkJCXByaXYtJmd0O2VlZV9hY3RpdmUgPSAwOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9CiYjNDM7CQllZWVfYWR2ID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWKTsKJiM0MzsJCWlmIChlZWVfYWR2ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKIAogCQlhZHYgPSBtbWRfZWVlX2Fkdl90b19ldGh0b29sX2Fkdl90KGVlZV9hZHYpOwogCQlscCA9IG1tZF9lZWVfYWR2X3RvX2V0aHRvb2xfYWR2X3QoZWVlX2xwKTsKQEAgLTc1Myw2NSAmIzQzOzExNjYsNTMgQEAgc3RhdGljIGludCBheDg4MTc5X2Noa19lZWUoc3RydWN0IHVzYm5ldCAqZGV2KQogCQkJICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgOgogCQkJICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbDsKIAotCQlpZiAoIShscCAmYW1wOyBhZHYgJmFtcDsgc3VwcG9ydGVkKSkgewotCQkJcHJpdi0mZ3Q7ZWVlX2FjdGl2ZSA9IDA7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KJiM0MzsJCWlmICghKGxwICZhbXA7IGFkdiAmYW1wOyBzdXBwb3J0ZWQpKQomIzQzOwkJCXJldHVybiB0cnVlOwogCiAJCXByaXYtJmd0O2VlZV9hY3RpdmUgPSAxOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlwcml2LSZndDtlZWVfYWN0aXZlID0gMDsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGF4ODgxNzlfZGlzYWJsZV9lZWUoc3RydWN0IHVzYm5ldCAqZGV2KQotewotCXUxNiB0bXAxNjsKLQotCXRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTM7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKLQkJCSAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsICZhbXA7dG1wMTYpOwotCi0JdG1wMTYgPSAweDMyNDY7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKLQkJCSAgTUlJX1BIWUFERFIsIDIsICZhbXA7dG1wMTYpOwotCi0JdG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFMDsKLQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELAotCQkJICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgJmFtcDt0bXAxNik7Ci19Ci0KLXN0YXRpYyB2b2lkIGF4ODgxNzlfZW5hYmxlX2VlZShzdHJ1Y3QgdXNibmV0ICpkZXYpCiYjNDM7c3RhdGljIHZvaWQgYXg4ODE3OV9lZWVfY29uZmlnKHN0cnVjdCB1c2JuZXQgKmRldiwgYm9vbCBlbmFibGUpCiB7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwogCXUxNiB0bXAxNjsKIAotCXRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTM7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKLQkJCSAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsICZhbXA7dG1wMTYpOwotCi0JdG1wMTYgPSAweDMyNDc7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKLQkJCSAgTUlJX1BIWUFERFIsIDIsICZhbXA7dG1wMTYpOwotCi0JdG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFNTsKLQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELAotCQkJICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgJmFtcDt0bXAxNik7Ci0KLQl0bXAxNiA9IDB4MDY4MDsKLQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELAotCQkJICBNSUlfQk1TUiwgMiwgJmFtcDt0bXAxNik7CiYjNDM7CWlmIChwcml2LSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7CiYjNDM7CQl0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UzOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKJiM0MzsJCQkJICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgJmFtcDt0bXAxNik7CiYjNDM7CiYjNDM7CQl0bXAxNiA9IGVuYWJsZSA/IDB4MzI0NyA6IDB4MzI0NjsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsCiYjNDM7CQkJCSAgTUlJX1BIWUFERFIsIDIsICZhbXA7dG1wMTYpOwomIzQzOwkJaWYgKGVuYWJsZSkgewomIzQzOwkJCXRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTU7CiYjNDM7CQkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKJiM0MzsJCQkJCSAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsICZhbXA7dG1wMTYpOwomIzQzOwomIzQzOwkJCXRtcDE2ID0gMHgwNjgwOwomIzQzOwkJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsCiYjNDM7CQkJCQkgIE1JSV9CTVNSLCAyLCAmYW1wO3RtcDE2KTsKJiM0MzsJCX0KIAotCXRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTA7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCwKLQkJCSAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsICZhbXA7dG1wMTYpOwomIzQzOwkJdG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFMDsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsCiYjNDM7CQkJCSAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsICZhbXA7dG1wMTYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9HUEhZX0NUTCwgQVhfR1BIWV9FRUVfQ1RSTCwgZW5hYmxlLCAwLCBOVUxMKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IGF4ODgxNzlfZ2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZGF0YSkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCXN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2OwomIzQzOwomIzQzOwlwcml2ID0gZGV2LSZndDtkcml2ZXJfcHJpdjsKIAogCWVkYXRhLSZndDtlZWVfZW5hYmxlZCA9IHByaXYtJmd0O2VlZV9lbmFibGVkOwogCWVkYXRhLSZndDtlZWVfYWN0aXZlID0gcHJpdi0mZ3Q7ZWVlX2FjdGl2ZTsKQEAgLTgyMiwxOCAmIzQzOzEyMjMsMjAgQEAgc3RhdGljIGludCBheDg4MTc5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpCiBzdGF0aWMgaW50IGF4ODgxNzlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZGF0YSkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCXN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwomIzQzOwlzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2OwogCWludCByZXQ7CiAKJiM0MzsJcHJpdiA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiYjNDM7CiAJcHJpdi0mZ3Q7ZWVlX2VuYWJsZWQgPSBlZGF0YS0mZ3Q7ZWVlX2VuYWJsZWQ7CiAJaWYgKCFwcml2LSZndDtlZWVfZW5hYmxlZCkgewotCQlheDg4MTc5X2Rpc2FibGVfZWVlKGRldik7CiYjNDM7CQlheDg4MTc5X2VlZV9jb25maWcoZGV2LCBmYWxzZSk7CiAJfSBlbHNlIHsKIAkJcHJpdi0mZ3Q7ZWVlX2VuYWJsZWQgPSBheDg4MTc5X2Noa19lZWUoZGV2KTsKIAkJaWYgKCFwcml2LSZndDtlZWVfZW5hYmxlZCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCQlheDg4MTc5X2VuYWJsZV9lZWUoZGV2KTsKJiM0MzsJCWF4ODgxNzlfZWVlX2NvbmZpZyhkZXYsIHRydWUpOwogCX0KIAogCXJldCA9IGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgZWRhdGEpOwpAQCAtODQ4LDYgJiM0MzsxMjUxLDcgQEAgc3RhdGljIGludCBheDg4MTc5X3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpCiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3OV9ldGh0b29sX29wcyA9IHsKJiM0MzsJLmdldF9kcnZpbmZvCQk9IGF4ODgxNzlfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbAkJPSB1c2JuZXRfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gdXNibmV0X3NldF9tc2dsZXZlbCwKQEAgLTg2MSwxNiAmIzQzOzEyNjUsNzggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheDg4MTc5X2V0aHRvb2xfb3BzID0gewogCS5ud2F5X3Jlc2V0CQk9IHVzYm5ldF9ud2F5X3Jlc2V0LAogCS5nZXRfbGlua19rc2V0dGluZ3MJPSBheDg4MTc5X2dldF9saW5rX2tzZXR0aW5ncywKIAkuc2V0X2xpbmtfa3NldHRpbmdzCT0gYXg4ODE3OV9zZXRfbGlua19rc2V0dGluZ3MsCiYjNDM7CS5nZXRfcGF1c2VwYXJhbQkJPSBheDg4MTc5YV9nZXRfcGF1c2VwYXJhbSwKJiM0MzsJLnNldF9wYXVzZXBhcmFtCQk9IGF4ODgxNzlhX3NldF9wYXVzZXBhcmFtLAogCS5nZXRfdHNfaW5mbwkJPSBldGh0b29sX29wX2dldF90c19pbmZvLAogfTsKIAomIzQzO3N0YXRpYyBpbnQgYXgxNzlhX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgX19iZTE2IHByb3RvLCB1MTYgdmlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKJiM0MzsJdTggdmxhbl9jdHJsOwomIzQzOwl1MTYgcmVnMTY7CiYjNDM7CXU4IHJlZzg7CiYjNDM7CiYjNDM7CWF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsICZhbXA7cmVnOCk7CiYjNDM7CXZsYW5fY3RybCA9IHJlZzg7CiYjNDM7CiYjNDM7CS8qIEFkZHJlc3MgKi8KJiM0MzsJcmVnOCA9ICh2aWQgLyAxNik7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9BRERSRVNTLCAxLCAxLCAmYW1wO3JlZzgpOwomIzQzOwomIzQzOwkvKiBEYXRhICovCiYjNDM7CXJlZzggPSB2bGFuX2N0cmwgfCBBWF9WTEFOX0NPTlRST0xfUkQ7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCAmYW1wO3JlZzgpOwomIzQzOwomIzQzOwlheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMCwgMiwgMiwgJmFtcDtyZWcxNik7CiYjNDM7CXJlZzE2ICZhbXA7PSB+KDEgJmx0OyZsdDsgKHZpZCAlIDE2KSk7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMCwgMiwgMiwgJmFtcDtyZWcxNik7CiYjNDM7CiYjNDM7CXJlZzggPSB2bGFuX2N0cmwgfCBBWF9WTEFOX0NPTlRST0xfV0U7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCAmYW1wO3JlZzgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBheDE3OWFfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIF9fYmUxNiBwcm90bywgdTE2IHZpZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiYjNDM7CXU4IHZsYW5fY3RybDsKJiM0MzsJdTE2IHJlZzE2OwomIzQzOwl1OCByZWc4OwomIzQzOwomIzQzOwlheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCAmYW1wO3JlZzgpOwomIzQzOwl2bGFuX2N0cmwgPSByZWc4OwomIzQzOwomIzQzOwkvKiBBZGRyZXNzICovCiYjNDM7CXJlZzggPSAodmlkIC8gMTYpOwomIzQzOwlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQUREUkVTUywgMSwgMSwgJmFtcDtyZWc4KTsKJiM0MzsKJiM0MzsJLyogRGF0YSAqLwomIzQzOwlyZWc4ID0gdmxhbl9jdHJsIHwgQVhfVkxBTl9DT05UUk9MX1JEOwomIzQzOwlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgJmFtcDtyZWc4KTsKJiM0MzsKJiM0MzsJYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfREFUQTAsIDIsIDIsICZhbXA7cmVnMTYpOwomIzQzOwlyZWcxNiB8PSAoMSAmbHQ7Jmx0OyAodmlkICUgMTYpKTsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCAmYW1wO3JlZzE2KTsKJiM0MzsKJiM0MzsJcmVnOCA9IHZsYW5fY3RybCB8IEFYX1ZMQU5fQ09OVFJPTF9XRTsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsICZhbXA7cmVnOCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGF4ODgxNzlfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0Jc3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiAJdTggKm1fZmlsdGVyID0gKCh1OCAqKWRldi0mZ3Q7ZGF0YSk7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7CiYjNDM7CiYjNDM7CWRhdGEgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwogCi0JZGF0YS0mZ3Q7cnhjdGwgPSAoQVhfUlhfQ1RMX1NUQVJUIHwgQVhfUlhfQ1RMX0FCIHwgQVhfUlhfQ1RMX0lQRSk7CiYjNDM7CWRhdGEtJmd0O3J4Y3RsID0gKEFYX1JYX0NUTF9TVEFSVCB8IEFYX1JYX0NUTF9BQiB8IEFYX1JYX0NUTF9EUk9QQ1JDRVJSKTsKJiM0MzsJaWYgKGRhdGEtJmd0O2lwX2FsaWduKQomIzQzOwkJZGF0YS0mZ3Q7cnhjdGwgfD0gQVhfUlhfQ1RMX0lQRTsKIAogCWlmIChuZXQtJmd0O2ZsYWdzICZhbXA7IElGRl9QUk9NSVNDKSB7CiAJCWRhdGEtJmd0O3J4Y3RsIHw9IEFYX1JYX0NUTF9QUk87CkBAIC05MDksNiAmIzQzOzEzNzUsNyBAQCBheDg4MTc5X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcykKIHsKIAl1OCB0bXA7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKJiM0MzsJc3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiAJbmV0ZGV2X2ZlYXR1cmVzX3QgY2hhbmdlZCA9IG5ldC0mZ3Q7ZmVhdHVyZXMgXiBmZWF0dXJlczsKIAogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfSVBfQ1NVTSkgewpAQCAtOTI4LDYgJiM0MzsxMzk1LDM0IEBAIGF4ODgxNzlfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCQl0bXAgXj0gQVhfUlhDT0VfSVAgfCBBWF9SWENPRV9UQ1AgfCBBWF9SWENPRV9VRFAgfAogCQkgICAgICAgQVhfUlhDT0VfVENQVjYgfCBBWF9SWENPRV9VRFBWNjsKIAkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWENPRV9DVEwsIDEsIDEsICZhbXA7dG1wKTsKJiM0MzsJCWRhdGEtJmd0O3J4X2NoZWNrc3VtID0gISEoZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9SWENTVU0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikgewomIzQzOwkJYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgJmFtcDt0bXApOwomIzQzOwkJdG1wIF49IEFYX1ZMQU5fQ09OVFJPTF9WRkU7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgJmFtcDt0bXApOwomIzQzOwkJaWYgKGZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikgewomIzQzOwkJCWZvciAoaW50IGkgPSAwOyBpICZsdDsgMjU2OyBpJiM0MzsmIzQzOykgewomIzQzOwkJCQl1MTYgdG1wMTY7CiYjNDM7CQkJCS8qIEFkZHJlc3MgKi8KJiM0MzsJCQkJdG1wID0gaTsKJiM0MzsJCQkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MsCiYjNDM7CQkJCQkJICAxLCAxLCAmYW1wO3RtcCk7CiYjNDM7CQkJCS8qIERhdGEgKi8KJiM0MzsJCQkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLAomIzQzOwkJCQkJCSAgMiwgMiwgJmFtcDt0bXAxNik7CiYjNDM7CQkJCXRtcCA9IEFYX1ZMQU5fQ09OVFJPTF9XRTsKJiM0MzsJCQkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsCiYjNDM7CQkJCQkJICAxLCAxLCAmYW1wO3RtcCk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYKSB7CiYjNDM7CQlheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCAmYW1wO3RtcCk7CiYjNDM7CQl0bXAgXj0gQVhfVkxBTl9DT05UUk9MX1ZTTzsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCAmYW1wO3RtcCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05OTUsNiAmIzQzOzE0OTAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzlfbmV0ZGV2X29wcyA9IHsKIAkubmRvX2V0aF9pb2N0bAkJPSB1c2JuZXRfbWlpX2lvY3RsLAogCS5uZG9fc2V0X3J4X21vZGUJPSBheDg4MTc5X3NldF9tdWx0aWNhc3QsCiAJLm5kb19zZXRfZmVhdHVyZXMJPSBheDg4MTc5X3NldF9mZWF0dXJlcywKJiM0MzsJLm5kb192bGFuX3J4X2FkZF92aWQJPSBheDE3OWFfdmxhbl9yeF9hZGRfdmlkLAomIzQzOwkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZCwKIH07CiAKIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGVja19lZXByb20oc3RydWN0IHVzYm5ldCAqZGV2KQpAQCAtMTI5Myw2ICYjNDM7MTc5MCwxNyBAQCBzdGF0aWMgaW50IGF4ODgxNzlfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogCiAJZGV2LSZndDtkcml2ZXJfcHJpdiA9IGF4MTc5X2RhdGE7CiAKJiM0MzsJcmV0ID0gYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NISVBfU1RBVFVTLAomIzQzOwkJCSAgICAgICAxLCAxLCAmYW1wO2F4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfbm9kZXY7CiYjNDM7CiYjNDM7CWF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiA9IChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmFtcDsgMHhmMCkgJmd0OyZndDsgNDsKJiM0MzsJYXgxNzlfZGF0YS0mZ3Q7aXNfYXg4ODc3MmQgPSAwOwomIzQzOwlheDE3OV9kYXRhLSZndDtpcF9hbGlnbiA9IDE7CiYjNDM7CWF4MTc5X2RhdGEtJmd0O2VlcHJvbV9yZWFkX2NtZCA9IEFYX0FDQ0VTU19FRVBST007CiYjNDM7CWF4MTc5X2RhdGEtJmd0O2VlcHJvbV9ibG9jayA9IDI7CiYjNDM7CiAJZGV2LSZndDtuZXQtJmd0O25ldGRldl9vcHMgPSAmYW1wO2F4ODgxNzlfbmV0ZGV2X29wczsKIAlkZXYtJmd0O25ldC0mZ3Q7ZXRodG9vbF9vcHMgPSAmYW1wO2F4ODgxNzlfZXRodG9vbF9vcHM7CiAJZGV2LSZndDtuZXQtJmd0O25lZWRlZF9oZWFkcm9vbSA9IDg7CkBAIC0xMzE3LDYgJiM0MzsxODI1LDEyMCBAQCBzdGF0aWMgaW50IGF4ODgxNzlfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogCWF4ODgxNzlfcmVzZXQoZGV2KTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9ub2RldjoKJiM0MzsJa2ZyZWUoYXgxNzlfZGF0YSk7CiYjNDM7CWF4MTc5X2RhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGF4ODgxNzlhX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKJiM0MzsJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogQ2hlY2sgaWYgdmVuZG9yIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsJaWYgKHVkZXYtJmd0O2FjdGNvbmZpZy0mZ3Q7ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKJiM0MzsJCW5ldGRldl9pbmZvKGRldi0mZ3Q7bmV0LCAmIzM0O1N3aXRjaGluZyB0byB2ZW5kb3IgbW9kZVxuJiMzNDspOwomIzQzOwkJdXNiX2RyaXZlcl9zZXRfY29uZmlndXJhdGlvbih1ZGV2LCAxKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJYXgxNzlfZGF0YSA9IGt6YWxsb2Nfb2JqKCpheDE3OV9kYXRhKTsKJiM0MzsJaWYgKCFheDE3OV9kYXRhKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWRldi0mZ3Q7ZHJpdmVyX3ByaXYgPSBheDE3OV9kYXRhOwomIzQzOwomIzQzOwlyZXQgPSBheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfQ0hJUF9TVEFUVVMsCiYjNDM7CQkJICAgICAgIDEsIDEsICZhbXA7YXgxNzlfZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9ub2RldjsKJiM0MzsKJiM0MzsJYXgxNzlfZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uID0gKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiAmYW1wOyAweGYwKSAmZ3Q7Jmd0OyA0OwomIzQzOwlheDE3OV9kYXRhLSZndDtpc19heDg4NzcyZCA9IDA7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkgewomIzQzOwkJaWYgKHVkZXYtJmd0O2Rlc2NyaXB0b3IuYmNkRGV2aWNlID09IDB4MzAwKQomIzQzOwkJCWF4MTc5X2RhdGEtJmd0O2lzX2F4ODg3NzJkID0gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IDM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBheDg4MTc5X3JlYWRfY21kKGRldiwgQVg4ODE3OUFfQUNDRVNTX0JMLCAoMHhGRCAmIzQzOyBpKSwKJiM0MzsJCQkJICAgICAgIDEsIDEsICZhbXA7YXgxNzlfZGF0YS0mZ3Q7ZndfdmVyc2lvbltpXSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlheDE3OV9kYXRhLSZndDtmd192ZXJzaW9uW2ldID0gMHhmZjsKJiM0MzsJfQomIzQzOwluZXRkZXZfaW5mbyhkZXYtJmd0O25ldCwgJiMzNDtBWDg4MTc5QS8yNzkvNzcyRCBDaGlwIFZlcnNpb246ICV4LCBGVzogJWQuJWQuJWQuJWRcbiYjMzQ7LAomIzQzOwkJICAgIGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiwKJiM0MzsJCSAgICBheDE3OV9kYXRhLSZndDtmd192ZXJzaW9uWzBdLCBheDE3OV9kYXRhLSZndDtmd192ZXJzaW9uWzFdLAomIzQzOwkJICAgIGF4MTc5X2RhdGEtJmd0O2Z3X3ZlcnNpb25bMl0sIGF4MTc5X2RhdGEtJmd0O2Z3X3ZlcnNpb25bM10pOwomIzQzOwomIzQzOwkvKiBUaGUgQVg4ODI3OSByZXF1aXJlcyBib3RoIHRoZSBBWF9SWF9DVExfSVBFIGFuZCBBWF9SWF9DVExfRFJPUENSQ0VSUgomIzQzOwkgKiBiaXRzIHNldCBpbiBBWF9SWF9DVEwgZm9yIGNyZWF0aW5nIGNvcnJlY3QgUlgtVVJCcy4gQVhfUlhfQ1RMX0RST1BDUkNFUlIKJiM0MzsJICogaXMgYW55d2F5IHNldCBmb3IgYWxsIGNoaXBzLCBtYWtlIHN1cmUgQVhfUlhfQ1RMX0lQRSBpcyBzZXQgdmlhIGlwX2FsaWduLgomIzQzOwkgKiBBbHNvIGNvbmZpZ3VyZSBlZXByb20gYWNjZXNzIHBhcmFtZXRlcnMuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXgxNzlfZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkgewomIzQzOwkJYXgxNzlfZGF0YS0mZ3Q7aXBfYWxpZ24gPSAxOwomIzQzOwkJYXgxNzlfZGF0YS0mZ3Q7ZWVwcm9tX3JlYWRfY21kID0gQVg4ODE3OUFfRkxBU0hfUkVBRDsKJiM0MzsJCWF4MTc5X2RhdGEtJmd0O2VlcHJvbV9ibG9jayA9IDI1NjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWF4MTc5X2RhdGEtJmd0O2lwX2FsaWduID0gMDsKJiM0MzsJCWF4MTc5X2RhdGEtJmd0O2VlcHJvbV9yZWFkX2NtZCA9IEFYX0FDQ0VTU19FRlVTOwomIzQzOwkJYXgxNzlfZGF0YS0mZ3Q7ZWVwcm9tX2Jsb2NrID0gMjA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2LSZndDtuZXQtJmd0O25ldGRldl9vcHMgPSAmYW1wO2F4ODgxNzlfbmV0ZGV2X29wczsKJiM0MzsJZGV2LSZndDtuZXQtJmd0O2V0aHRvb2xfb3BzID0gJmFtcDtheDg4MTc5X2V0aHRvb2xfb3BzOwomIzQzOwlkZXYtJmd0O25ldC0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gODsKJiM0MzsJZGV2LSZndDtuZXQtJmd0O25lZWRlZF90YWlscm9vbSA9IDg7CiYjNDM7CWRldi0mZ3Q7bmV0LSZndDttaW5fbXR1ID0gRVRIX01JTl9NVFU7CiYjNDM7CWRldi0mZ3Q7aGFyZF9tdHUgPSA5ICogMTAyNDsKJiM0MzsJZGV2LSZndDtuZXQtJmd0O21heF9tdHUgPSBkZXYtJmd0O2hhcmRfbXR1IC0gZGV2LSZndDtuZXQtJmd0O2hhcmRfaGVhZGVyX2xlbjsKJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSBNSUkgc3RydWN0dXJlICovCiYjNDM7CWRldi0mZ3Q7bWlpLmRldiA9IGRldi0mZ3Q7bmV0OwomIzQzOwlkZXYtJmd0O21paS5tZGlvX3JlYWQgPSBheDg4MTc5X21kaW9fcmVhZDsKJiM0MzsJZGV2LSZndDttaWkubWRpb193cml0ZSA9IGF4ODgxNzlfbWRpb193cml0ZTsKJiM0MzsJZGV2LSZndDttaWkucGh5X2lkX21hc2sgPSAweGZmOwomIzQzOwlkZXYtJmd0O21paS5yZWdfbnVtX21hc2sgPSAweGZmOwomIzQzOwlkZXYtJmd0O21paS5waHlfaWQgPSAweDAzOwomIzQzOwlpZiAoIWF4MTc5X2RhdGEtJmd0O2lzX2F4ODg3NzJkKQomIzQzOwkJZGV2LSZndDttaWkuc3VwcG9ydHNfZ21paSA9IDE7CiYjNDM7CiYjNDM7CWRldi0mZ3Q7bmV0LSZndDtmZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwKJiM0MzsJCQkgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU08gfAomIzQzOwkJCSAgICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfAomIzQzOwkJCSAgICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjsKJiM0MzsKJiM0MzsJZGV2LSZndDtuZXQtJmd0O2h3X2ZlYXR1cmVzIHw9IGRldi0mZ3Q7bmV0LSZndDtmZWF0dXJlczsKJiM0MzsKJiM0MzsJZGV2LSZndDtuZXQtJmd0O3ZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwKJiM0MzsJCQkJICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU087CiYjNDM7CiYjNDM7CW5ldGlmX3NldF90c29fbWF4X3NpemUoZGV2LSZndDtuZXQsIDE2Mzg0KTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIFRyYW5zbWlzc2lvbiBvZiBMaW5rIFNwZWVkIGJ5dGUgaW4gaW50ZXJydXB0IFVSQiAqLwomIzQzOwlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0ZXX01PREUsIEFYX0ZXX01PREVfMTc5QSwgMCwgMCwgTlVMTCk7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfUkVMT0FEX0VFUFJPTV9FRlVTRSwgMCwgMCwgMCwgTlVMTCk7CiYjNDM7CiYjNDM7CS8qIFJlYWQgTUFDIGFkZHJlc3MgZnJvbSBEVEIgb3IgQVNJWCBjaGlwICovCiYjNDM7CWF4ODgxNzlfZ2V0X21hY19hZGRyKGRldik7CiYjNDM7CW1lbWNweShkZXYtJmd0O25ldC0mZ3Q7cGVybV9hZGRyLCBkZXYtJmd0O25ldC0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX25vZGV2OgomIzQzOwlrZnJlZShheDE3OV9kYXRhKTsKJiM0MzsJYXgxNzlfZGF0YSA9IE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGF4ODgxNzlfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC0xMzM4LDYgJiM0MzsxOTYwLDIyIEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiAJa2ZyZWUoYXgxNzlfZGF0YSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBheDg4MTc5YV91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwomIzQzOwl1MTYgdG1wMTY7CiYjNDM7CXU4IHRtcDg7CiYjNDM7CiYjNDM7CS8qIENvbmZpZ3VyZSBSWCBjb250cm9sIHJlZ2lzdGVyID0mZ3Q7IHN0b3Agb3BlcmF0aW9uICovCiYjNDM7CXRtcDE2ID0gQVhfUlhfQ1RMX1NUT1A7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCAmYW1wO3RtcDE2KTsKJiM0MzsKJiM0MzsJdG1wOCA9IDA7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfUEhZX1BPV0VSLCAwLCAwLCAxLCAmYW1wO3RtcDgpOwomIzQzOwomIzQzOwlrZnJlZShheDE3OV9kYXRhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZAogYXg4ODE3OV9yeF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKnBrdF9oZHIpCiB7CkBAIC0xMzU0LDYgJiM0MzsxOTkyLDIxIEBAIGF4ODgxNzlfcnhfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpwa3RfaGRyKQogCQlza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYXg4ODE3OWFfcnhfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IHBrdF9kZXNjKQomIzQzO3sKJiM0MzsJdTMyIHBrdF90eXBlOwomIzQzOwomIzQzOwlza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiYjNDM7CS8qIGNoZWNrc3VtIGVycm9yIGJpdCBpcyBzZXQgKi8KJiM0MzsJaWYgKHBrdF9kZXNjICZhbXA7IEFYMTc5QV9SWF9QRF9MNF9FUlIgfHwgcGt0X2Rlc2MgJmFtcDsgQVgxNzlBX1JYX1BEX0wzX0VSUikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGt0X3R5cGUgPSBwa3RfZGVzYyAmYW1wOyBBWDE3OUFfUlhfUERfTDRfVFlQRV9NQVNLOwomIzQzOwkvKiBJdCBtdXN0IGJlIGEgVENQIG9yIFVEUCBwYWNrZXQgd2l0aCBhIHZhbGlkIGNoZWNrc3VtICovCiYjNDM7CWlmIChwa3RfdHlwZSA9PSBBWDE3OUFfUlhfUERfTDRfVENQIHx8IHBrdF90eXBlID09IEFYMTc5QV9SWF9QRF9MNF9VRFApCiYjNDM7CQlza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYXg4ODE3OV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKmF4X3NrYjsKQEAgLTE0NzIsNiAmIzQzOzIxMjUsMTIxIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGF4ODgxNzlhX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiOwomIzQzOwl1MzIgaGRyX29mZiwgcGt0X2VuZDsKJiM0MzsJdTY0ICpwa3RfZGVzY19wdHI7CiYjNDM7CXUxNiB2bGFuX3RhZzsKJiM0MzsJdTE2IHBrdF9jbnQ7CiYjNDM7CXU2NCByeF9oZHI7CiYjNDM7CiYjNDM7CS8qIFNLQiBjb250ZW50cyBmb3IgQVgxNzlBLWJhc2VkIGNoaXBzOgomIzQzOwkgKiAgICZsdDtwYWNrZXQgMSZndDsKJiM0MzsJICogICAuLi4KJiM0MzsJICogICAmbHQ7cGFja2V0IE4mZ3Q7CiYjNDM7CSAqICAgJmx0O3Blci1wYWNrZXQgbWV0YWRhdGEgZW50cnkgMSZndDsKJiM0MzsJICogICAuLi4KJiM0MzsJICogICAmbHQ7cGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSBOJmd0OwomIzQzOwkgKiAgICZsdDtyeF9oZHImZ3Q7CiYjNDM7CSAqCiYjNDM7CSAqIHdoZXJlOgomIzQzOwkgKiAgICZsdDtwYWNrZXQgTiZndDsgY29udGFpbnMgcGt0X2xlbiBkYXRhIGJ5dGVzIGFuZCBwYWRkaW5nOgomIzQzOwkgKgkJMiBieXRlcyBvZiBJUCBhbGlnbm1lbnQgKG9wdGlvbmFsLCBkZXBlbmRzIG9uIEFYX1JYX0NUTF9JUEUgZmxhZykKJiM0MzsJICoJCXBhY2tldCBkYXRhIHJlY2VpdmVkCiYjNDM7CSAqCQlvcHRpb25hbCBwYWRkaW5nIHRvIDgtYnl0ZXMgYm91bmRhcnkKJiM0MzsJICogICAmbHQ7cGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSBOJmd0OyBjb250YWlucyA4IGJ5dGVzOgomIzQzOwkgKgkJcGt0X2xlbiBhbmQgZmllbGRzIEFYX1JYSERSXyoKJiM0MzsJICogICAmbHQ7cngtaGRyJmd0Owljb250YWlucyA4IGJ5dGVzOgomIzQzOwkgKgkJcGt0X2NudCBhbmQgaGRyX29mZiAob2Zmc2V0IG9mICZsdDtwZXItcGFja2V0IG1ldGFkYXRhIGVudHJ5IDEmZ3Q7KQomIzQzOwkgKgomIzQzOwkgKiBwa3RfY250IGlzIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBwZXItcGFja2V0IG1ldGFkYXRhIGFycmF5LgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJaWYgKCFza2IgfHwgc2tiLSZndDtsZW4gJmx0OyBzaXplb2YocnhfaGRyKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkvKiBSWCBEZXNjcmlwdG9yIEhlYWRlciAqLwomIzQzOwlza2JfdHJpbShza2IsIHNrYi0mZ3Q7bGVuIC0gc2l6ZW9mKHJ4X2hkcikpOwomIzQzOwlyeF9oZHIgPSBsZTY0X3RvX2NwdXAoKHU2NCAqKXNrYl90YWlsX3BvaW50ZXIoc2tiKSk7CiYjNDM7CiYjNDM7CS8qIENoZWNrIHRoZXNlIHBhY2tldHMgKi8KJiM0MzsJaGRyX29mZiA9IChyeF9oZHIgJmFtcDsgQVgxNzlBX1JYX0RIX0RFU0NfT0ZGU0VUX01BU0spICZndDsmZ3Q7IEFYMTc5QV9SWF9ESF9ERVNDX09GRlNFVF9TSElGVDsKJiM0MzsJcGt0X2NudCA9IHJ4X2hkciAmYW1wOyBBWDE3OUFfUlhfREhfUEtUX0NOVF9NQVNLOwomIzQzOwomIzQzOwkvKiBDb25zaXN0ZW5jeSBjaGVjayBoZWFkZXIgcG9zaXRpb24gKi8KJiM0MzsJaWYgKGhkcl9vZmYgIT0gc2tiLSZndDtsZW4gLSAocGt0X2NudCAqIHNpemVvZihyeF9oZHIpKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgYm91bmRzIG9mIHRoZSBtZXRhZGF0YSBhcnJheSBhcmUgaW5zaWRlIHRoZSBTS0IKJiM0MzsJICogKGFuZCBpbiBmcm9udCBvZiB0aGUgY291bnRlciBhdCB0aGUgZW5kKS4KJiM0MzsJICovCiYjNDM7CWlmIChwa3RfY250ICogOCAmIzQzOyBoZHJfb2ZmICZndDsgc2tiLSZndDtsZW4pCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJLyogUGFja2V0cyBtdXN0IG5vdCBvdmVybGFwIHRoZSBtZXRhZGF0YSBhcnJheSAqLwomIzQzOwlza2JfdHJpbShza2IsIGhkcl9vZmYpOwomIzQzOwomIzQzOwlpZiAoIXBrdF9jbnQpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJLyogR2V0IHRoZSBmaXJzdCBSWCBwYWNrZXQgZGVzY3JpcHRvciAqLwomIzQzOwlwa3RfZGVzY19wdHIgPSAodTY0ICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBoZHJfb2ZmKTsKJiM0MzsKJiM0MzsJcGt0X2VuZCA9IDA7CiYjNDM7CXdoaWxlIChwa3RfY250LS0pIHsKJiM0MzsJCXU2NCBwa3RfZGVzYyA9IGxlNjRfdG9fY3B1cChwa3RfZGVzY19wdHIpOwomIzQzOwkJdTMyIHBrdF9sZW5fcGx1c19wYWRkOwomIzQzOwkJdTMyIHBrdF9sZW47CiYjNDM7CiYjNDM7CQlwa3RfbGVuID0gKHUzMikoKHBrdF9kZXNjICZhbXA7IEFYMTc5QV9SWF9QRF9MRU5fTUFTSykgJmd0OyZndDsgQVgxNzlBX1JYX1BEX0xFTl9TSElGVCkKJiM0MzsJCQkgIC0gKGF4MTc5X2RhdGEtJmd0O2lwX2FsaWduID8gMiA6IDApOwomIzQzOwkJcGt0X2xlbl9wbHVzX3BhZGQgPSAoKHBrdF9sZW4gJiM0MzsgNyAmIzQzOyAoYXgxNzlfZGF0YS0mZ3Q7aXBfYWxpZ24gPyAyIDogMCkpICZhbXA7IDB4N0ZGRjgpOwomIzQzOwomIzQzOwkJcGt0X2VuZCAmIzQzOz0gcGt0X2xlbl9wbHVzX3BhZGQ7CiYjNDM7CQlpZiAocGt0X2VuZCAmZ3Q7IGhkcl9vZmYgfHwgKHBrdF9jbnQgPT0gMCAmYW1wOyZhbXA7IHBrdF9lbmQgIT0gaGRyX29mZikpCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CiYjNDM7CQlpZiAocGt0X2Rlc2MgJmFtcDsgQVgxNzlBX1JYX1BEX0RST1AgfHwgIShwa3RfZGVzYyAmYW1wOyBBWDE3OUFfUlhfUERfUlhfT0spIHx8CiYjNDM7CQkgICAgcGt0X2xlbiAmZ3Q7IChkZXYtJmd0O2hhcmRfbXR1ICYjNDM7IEFYMTc5QV9SWF9IV19QQUQpKSB7CiYjNDM7CQkJc2tiX3B1bGwoc2tiLCBwa3RfbGVuX3BsdXNfcGFkZCk7CiYjNDM7CiYjNDM7CQkJLyogTmV4dCBSWCBQYWNrZXQgRGVzY3JpcHRvciAqLwomIzQzOwkJCXBrdF9kZXNjX3B0ciYjNDM7JiM0Mzs7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlheF9za2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKGRldi0mZ3Q7bmV0LCBwa3RfbGVuKTsKJiM0MzsJCWlmICghYXhfc2tiKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkJc2tiX3B1dChheF9za2IsIHBrdF9sZW4pOwomIzQzOwkJbWVtY3B5KGF4X3NrYi0mZ3Q7ZGF0YSwgc2tiLSZndDtkYXRhICYjNDM7IChheDE3OV9kYXRhLSZndDtpcF9hbGlnbiA/IEFYMTc5QV9SWF9IV19QQUQgOiAwKSwKJiM0MzsJCSAgICAgICBwa3RfbGVuKTsKJiM0MzsKJiM0MzsJCWlmIChheDE3OV9kYXRhLSZndDtyeF9jaGVja3N1bSkKJiM0MzsJCQlheDg4MTc5YV9yeF9jaGVja3N1bShheF9za2IsIHBrdF9kZXNjKTsKJiM0MzsKJiM0MzsJCWlmIChwa3RfZGVzYyAmYW1wOyBBWDE3OUFfUlhfUERfVkxBTikgewomIzQzOwkJCXZsYW5fdGFnID0gcGt0X2Rlc2MgJmd0OyZndDsgQVgxNzlBX1JYX1BEX1ZMQU5fU0hJRlQ7CiYjNDM7CQkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhheF9za2IsIGh0b25zKEVUSF9QXzgwMjFRKSwKJiM0MzsJCQkJCSAgICAgICB2bGFuX3RhZyAmYW1wOyBWTEFOX1ZJRF9NQVNLKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXVzYm5ldF9za2JfcmV0dXJuKGRldiwgYXhfc2tiKTsKJiM0MzsJCXNrYl9wdWxsKHNrYiwgcGt0X2xlbl9wbHVzX3BhZGQpOwomIzQzOwomIzQzOwkJLyogTmV4dCBSWCBQYWNrZXQgSGVhZGVyICovCiYjNDM7CQlwa3RfZGVzY19wdHImIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAxOwomIzQzOwomIzQzO2VycjoKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBza19idWZmICoKIGF4ODgxNzlfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBmbGFncykKIHsKQEAgLTE1MDUsNiAmIzQzOzIyNzMsNTkgQEAgYXg4ODE3OV90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGZsYWdzKQogCXJldHVybiBza2I7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgomIzQzO2F4ODgxNzlhX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpCiYjNDM7ewomIzQzOwl1NjQgdHhfZGVzYyA9IHNrYi0mZ3Q7bGVuICZhbXA7IEFYMTc5QV9UWF9ERVNDX0xFTl9NQVNLOwomIzQzOwlpbnQgZnJhbWVfc2l6ZSA9IGRldi0mZ3Q7bWF4cGFja2V0OwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiOwomIzQzOwl1NjQgKnR4X2Rlc2NfcHRyOwomIzQzOwlpbnQgcGFkZGluZ19zaXplOwomIzQzOwlpbnQgaGVhZHJvb207CiYjNDM7CWludCB0YWlscm9vbTsKJiM0MzsJdTE2IHRjaSA9IDA7CiYjNDM7CiYjNDM7CS8qIFRTTyBNU1MgKi8KJiM0MzsJdHhfZGVzYyB8PSAoKHU2NCkoc2tiX3NoaW5mbyhza2IpLSZndDtnc29fc2l6ZSAmYW1wOyBBWDE3OUFfVFhfREVTQ19NU1NfTUFTSykpICZsdDsmbHQ7CiYjNDM7CQkgICBBWDE3OUFfVFhfREVTQ19NU1NfU0hJRlQ7CiYjNDM7CiYjNDM7CWhlYWRyb29tID0gKHNrYi0mZ3Q7bGVuICYjNDM7IHNpemVvZih0eF9kZXNjKSkgJSA4OwomIzQzOwlwYWRkaW5nX3NpemUgPSBoZWFkcm9vbSA/IDggLSBoZWFkcm9vbSA6IDA7CiYjNDM7CiYjNDM7CWlmICgoKHNrYi0mZ3Q7bGVuICYjNDM7IHNpemVvZih0eF9kZXNjKSAmIzQzOyBwYWRkaW5nX3NpemUpICUgZnJhbWVfc2l6ZSkgPT0gMCkgewomIzQzOwkJcGFkZGluZ19zaXplICYjNDM7PSA4OwomIzQzOwkJdHhfZGVzYyB8PSBBWDE3OUFfVFhfREVTQ19EUk9QX1BBREQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKChkZXYtJmd0O25ldC0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFgpICZhbXA7JmFtcDsgKHZsYW5fZ2V0X3RhZyhza2IsICZhbXA7dGNpKSAmZ3Q7PSAwKSkgewomIzQzOwkJdHhfZGVzYyB8PSBBWDE3OUFfVFhfREVTQ19WTEFOOwomIzQzOwkJdHhfZGVzYyB8PSAoKHU2NCl0Y2kgJmFtcDsgQVgxNzlBX1RYX0RFU0NfVkxBTl9NQVNLKSAmbHQ7Jmx0OyBBWDE3OUFfVFhfREVTQ19WTEFOX1NISUZUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtjYW5fZG1hX3NnICZhbXA7JmFtcDsgKGRldi0mZ3Q7bmV0LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX1NHKSAmYW1wOyZhbXA7IHNrYl9saW5lYXJpemUoc2tiKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwloZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpOwomIzQzOwl0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpOwomIzQzOwomIzQzOwlpZiAoIShoZWFkcm9vbSAmZ3Q7PSBzaXplb2YodHhfZGVzYykgJmFtcDsmYW1wOyB0YWlscm9vbSAmZ3Q7PSBwYWRkaW5nX3NpemUpKSB7CiYjNDM7CQlheF9za2IgPSBza2JfY29weV9leHBhbmQoc2tiLCBzaXplb2YodHhfZGVzYyksIHBhZGRpbmdfc2l6ZSwgZmxhZ3MpOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJCXNrYiA9IGF4X3NrYjsKJiM0MzsJCWlmICghc2tiKQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CWlmIChwYWRkaW5nX3NpemUgIT0gMCkKJiM0MzsJCXNrYl9wdXRfemVybyhza2IsIHBhZGRpbmdfc2l6ZSk7CiYjNDM7CS8qIENvcHkgVFggaGVhZGVyICovCiYjNDM7CXR4X2Rlc2NfcHRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YodHhfZGVzYykpOwomIzQzOwkqdHhfZGVzY19wdHIgPSBjcHVfdG9fbGU2NCh0eF9kZXNjKTsKJiM0MzsKJiM0MzsJdXNibmV0X3NldF9za2JfdHhfc3RhdHMoc2tiLCAxLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNrYjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGF4ODgxNzlfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCiB7CiAJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CkBAIC0xNTgwLDczICYjNDM7MjQwMSwzNDMgQEAgc3RhdGljIGludCBheDg4MTc5X2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYXg4ODE3OWFfYnVsa2luX2NvbmZpZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGxpbmtfc3RzKQomIzQzO3sKJiM0MzsJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgKmJ1bGtpbl9kYXRhOwomIzQzOwlpbnQgaW5kZXggPSAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKGF4MTc5X2RhdGEtJmd0O3NwZWVkKSB7CiYjNDM7CWNhc2UgRVRIRVJfTElOS18yNTAwOgkvKiBBWDg4Mjc5IG9ubHkgKi8KJiM0MzsJCWluZGV4ID0gMDsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEVUSEVSX0xJTktfMTAwMDoJLyogQVg4ODI3OSAmYW1wOyBBWDg4MTc4QSAqLwomIzQzOwkJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHsKJiM0MzsJCQlpZiAobGlua19zdHMgJmFtcDsgQVhfVVNCX1NTKQomIzQzOwkJCQlpbmRleCA9IDE7CiYjNDM7CQkJZWxzZSBpZiAobGlua19zdHMgJmFtcDsgQVhfVVNCX0hTKQomIzQzOwkJCQlpbmRleCA9IDI7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWlmIChsaW5rX3N0cyAmYW1wOyBBWF9VU0JfU1MpCiYjNDM7CQkJCWluZGV4ID0gMDsKJiM0MzsJCQllbHNlIGlmIChsaW5rX3N0cyAmYW1wOyBBWF9VU0JfSFMpCiYjNDM7CQkJCWluZGV4ID0gMTsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEVUSEVSX0xJTktfMTAwOgomIzQzOwkJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHsKJiM0MzsJCQlpZiAobGlua19zdHMgJmFtcDsgQVhfVVNCX1NTKQomIzQzOwkJCQlpbmRleCA9IDM7CiYjNDM7CQkJZWxzZSBpZiAobGlua19zdHMgJmFtcDsgQVhfVVNCX0hTKQomIzQzOwkJCQlpbmRleCA9IDU7CiYjNDM7CQkJaWYgKCFheDE3OV9kYXRhLSZndDtmdWxsX2R1cGxleCkKJiM0MzsJCQkJaW5kZXgmIzQzOyYjNDM7OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQkvKiBBWDg4Mjc5QSAmYW1wOyBBWDg4Mjc3RCAqLwomIzQzOwkJCWlmIChsaW5rX3N0cyAmYW1wOyBBWF9VU0JfU1MpCiYjNDM7CQkJCWluZGV4ID0gMjsKJiM0MzsJCQllbHNlIGlmIChsaW5rX3N0cyAmYW1wOyBBWF9VU0JfSFMpCiYjNDM7CQkJCWluZGV4ID0gNDsKJiM0MzsJCQlpZiAoIWF4MTc5X2RhdGEtJmd0O2Z1bGxfZHVwbGV4KQomIzQzOwkJCQlpbmRleCYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBFVEhFUl9MSU5LXzEwOgomIzQzOwkJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpCiYjNDM7CQkJaW5kZXggPSA3OwomIzQzOwkJZWxzZQomIzQzOwkJCWluZGV4ID0gNjsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwlkZWZhdWx0OgkvKiBObyBsaW5rICovCiYjNDM7CQlpbmRleCA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkgJmFtcDsmYW1wOyAobGlua19zdHMgJmFtcDsgQVhfVVNCX0ZTKSkKJiM0MzsJCWluZGV4ID0gNzsKJiM0MzsKJiM0MzsJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHsKJiM0MzsJCWJ1bGtpbl9kYXRhID0gQVg4ODI3OV9CVUxLSU5fU0laRTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChheDE3OV9kYXRhLSZndDtpc19heDg4NzcyZCkKJiM0MzsJCQlidWxraW5fZGF0YSA9IEFYODg3NzJEX0JVTEtJTl9TSVpFOwomIzQzOwkJZWxzZQomIzQzOwkJCWJ1bGtpbl9kYXRhID0gQVg4ODE3OUFfQlVMS0lOX1NJWkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9CVUxLSU5fUUNUUkwsIDUsIDUsICZhbXA7YnVsa2luX2RhdGFbaW5kZXhdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBheDg4MTc5YV9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtJmd0O2RyaXZlcl9wcml2OwomIzQzOwl1OCB0bXA4LCBsaW5rX3N0cywgcmVnOFszXTsKJiM0MzsJdTE2IHRtcDE2LCBtb2RlLCBzcGVlZDsKJiM0MzsKJiM0MzsJaWYgKCFheDE3OV9kYXRhLSZndDtsaW5rKSB7CiYjNDM7CQluZXRkZXZfaW5mbyhkZXYtJmd0O25ldCwgJiMzNDtheDg4MTc5YSAtIExpbmsgc3RhdHVzIGlzOiAwXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdG9wIFJYL1RYIGZvciBsaW5rIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsJdG1wMTYgPSBBWF9SWF9DVExfU1RPUDsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsICZhbXA7dG1wMTYpOwomIzQzOwl0bXA4ID0gMDsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUEFUSCwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJdG1wOCA9IDB4YTU7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0NEQ19ERUxBWV9UWCwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJdG1wMTYgPSAweDA0MTA7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfTE9XLCAyLCAyLCAmYW1wO3RtcDE2KTsKJiM0MzsKJiM0MzsJdG1wOCA9IDA7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfRVRIX1RYX0dBUCwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJdG1wOCA9IDB4MDc7CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfRVA1X0VIUiwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJdG1wOCA9IDB4MjggfCBBWF9ORVdfUEFVU0VfRU47CiYjNDM7CWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTkVXX1BBVVNFX0NUUkwsIDEsIDEsICZhbXA7dG1wOCk7CiYjNDM7CiYjNDM7CW1vZGUgPSBBWF9NRURJVU1fUkVDRUlWRV9FTiB8IEFYX01FRElVTV9UWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX1JYRkxPV19DVFJMRU47CiYjNDM7CiYjNDM7CS8qIExpbmsgaXMgdXAsIGJ1dCBzb21lIG9sZGVyIEFYODgxNzlBIEZXIHZlcnNpb25zIGRvIG5vdCBzZW5kIGxpbmsgc3BlZWQKJiM0MzsJICogYW5kIGR1cGxleCBzdGF0dXMgaW4gaW50ZXJydXB0IFVSQiwgc28gcmVhZCBpdCB2aWEgTUlJCiYjNDM7CSAqLwomIzQzOwlpZiAoIWF4MTc5X2RhdGEtJmd0O3NwZWVkKSB7CiYjNDM7CQlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7CiYjNDM7CiYjNDM7CQltaWlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MoJmFtcDtkZXYtJmd0O21paSwgJmFtcDtjbWQpOwomIzQzOwkJYXgxNzlfZGF0YS0mZ3Q7ZnVsbF9kdXBsZXggPSBjbWQuYmFzZS5kdXBsZXg7CiYjNDM7CQlzd2l0Y2ggKGNtZC5iYXNlLnNwZWVkKSB7CiYjNDM7CQljYXNlIFNQRUVEXzEwMDA6CiYjNDM7CQkJYXgxNzlfZGF0YS0mZ3Q7c3BlZWQgPSBFVEhFUl9MSU5LXzEwMDA7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIFNQRUVEXzEwMDoKJiM0MzsJCQlheDE3OV9kYXRhLSZndDtzcGVlZCA9IEVUSEVSX0xJTktfMTAwOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBTUEVFRF8xMDoKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJYXgxNzlfZGF0YS0mZ3Q7c3BlZWQgPSBFVEhFUl9MSU5LXzEwOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfTsKJiM0MzsJfQomIzQzOwomIzQzOwlzcGVlZCA9IDA7CiYjNDM7CXN3aXRjaCAoYXgxNzlfZGF0YS0mZ3Q7c3BlZWQpIHsKJiM0MzsJY2FzZSBFVEhFUl9MSU5LXzI1MDA6CiYjNDM7CQlyZWc4WzBdID0gMHgwMDsKJiM0MzsJCXJlZzhbMV0gPSAweEY4OwomIzQzOwkJcmVnOFsyXSA9IDB4MDc7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19UWF9QQVVTRSwgMywgMywgcmVnOCk7CiYjNDM7CiYjNDM7CQlyZWc4WzBdID0gMHg3ODsKJiM0MzsJCXJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyAmbHQ7Jmx0OyA1KTsKJiM0MzsJCXJlZzhbMl0gPSAwOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfU1RBVFVTX0NEQywgMywgMywgcmVnOCk7CiYjNDM7CiYjNDM7CQlyZWc4WzBdID0gMHg0MDsKJiM0MzsJCXJlZzhbMV0gPSBBWF9NQUNfTUlRRkZDVFJMX0ZPUk1BVCB8IEFYX01BQ19NSVFGRkNUUkxfRFJPUF9DUkMgfCBBWF9NQUNfTFNPX0VSUl9FTjsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMiwgMiwgcmVnOCk7CiYjNDM7CiYjNDM7CQl0bXA4ID0gQVhfWEdNSUlfRU47CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX0JGTV9EQVRBLCAxLCAxLCAmYW1wO3RtcDgpOwomIzQzOwomIzQzOwkJdG1wOCA9IDB4MUMgfCBBWF9MU09fRU5IQU5DRV9FTjsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0xTT19FTkhBTkNFX0NUUkwsIDEsIDEsICZhbXA7dG1wOCk7CiYjNDM7CiYjNDM7CQltb2RlIHw9IEFYX01FRElVTV9HSUdBTU9ERSB8IEFYX01FRElVTV9GVUxMX0RVUExFWDsKJiM0MzsKJiM0MzsJCXNwZWVkID0gMjUwMDsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEVUSEVSX0xJTktfMTAwMDoKJiM0MzsJCW1vZGUgfD0gQVhfTUVESVVNX0dJR0FNT0RFOwomIzQzOwkJc3BlZWQgPSAxMDAwOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CiYjNDM7CWNhc2UgRVRIRVJfTElOS18xMDA6CiYjNDM7CQlyZWc4WzBdID0gMHg3ODsKJiM0MzsJCXJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyAmbHQ7Jmx0OyA1KSB8IEFYX0dNSUlfQ1JDX0FQUEVORDsKJiM0MzsJCXJlZzhbMl0gPSAwOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfU1RBVFVTX0NEQywgMywgMywgcmVnOCk7CiYjNDM7CiYjNDM7CQl0bXA4ID0gMHg0MDsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJCXNwZWVkID0gc3BlZWQgPyBzcGVlZCA6IDEwMDsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEVUSEVSX0xJTktfMTA6CiYjNDM7CQlyZWc4WzBdID0gMHhGQTsKJiM0MzsJCXJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyAmbHQ7Jmx0OyA1KSB8IEFYX0dNSUlfQ1JDX0FQUEVORDsKJiM0MzsJCXJlZzhbMl0gPSAweEZGOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfU1RBVFVTX0NEQywgMywgMywgcmVnOCk7CiYjNDM7CiYjNDM7CQl0bXA4ID0gMHhGQTsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJCXNwZWVkID0gMTA7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgUEhZU0lDQUxfTElOS19TVEFUVVMsIDEsIDEsICZhbXA7bGlua19zdHMpOwomIzQzOwlheDg4MTc5YV9idWxraW5fY29uZmlnKGRldiwgbGlua19zdHMpOwomIzQzOwomIzQzOwlpZiAoYXgxNzlfZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uICZsdDsgQVhfVkVSU0lPTl9BWDg4Mjc5KSB7CiYjNDM7CQl0bXA4ID0gMDsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfQkZNX0RBVEEsIDEsIDEsICZhbXA7dG1wOCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGF4MTc5X2RhdGEtJmd0O2Z1bGxfZHVwbGV4KQomIzQzOwkJbW9kZSB8PSBBWF9NRURJVU1fRlVMTF9EVVBMRVg7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O25ldC0mZ3Q7bXR1ICZndDsgMTUwMCkKJiM0MzsJCW1vZGUgfD0gQVhfTUVESVVNX0pVTUJPX0VOOwomIzQzOwlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwgMiwgMiwgJmFtcDttb2RlKTsKJiM0MzsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsICZhbXA7YXgxNzlfZGF0YS0mZ3Q7cnhjdGwpOwomIzQzOwomIzQzOwl0bXA4ID0gQVhfTUFDX1JYX1BBVEhfUkVBRFkgfCBBWF9NQUNfVFhfUEFUSF9SRUFEWTsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUEFUSCwgMSwgMSwgJmFtcDt0bXA4KTsKJiM0MzsKJiM0MzsJYXgxNzlfZGF0YS0mZ3Q7ZWVlX2VuYWJsZWQgPSBheDg4MTc5X2Noa19lZWUoZGV2KTsKJiM0MzsKJiM0MzsJbmV0aWZfY2Fycmllcl9vbihkZXYtJmd0O25ldCk7CiYjNDM7CiYjNDM7CW5ldGRldl9pbmZvKGRldi0mZ3Q7bmV0LCAmIzM0O2F4ODgxNzlhIC0gTGluayBzdGF0dXMgaXM6IDEsIExpbmsgc3BlZWQ6ICVkLCBEdXBsZXg6ICVkXG4mIzM0OywKJiM0MzsJCSAgICBzcGVlZCwgYXgxNzlfZGF0YS0mZ3Q7ZnVsbF9kdXBsZXgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGF4ODgxNzlfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQogewotCXU4IGJ1Zls1XTsKLQl1MTYgKnRtcDE2OwotCXU4ICp0bXA7CiAJc3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi0mZ3Q7ZHJpdmVyX3ByaXY7CiAJc3RydWN0IGV0aHRvb2xfa2VlZSBlZWVfZGF0YTsKJiM0MzsJdTE2ICp0bXAxNjsKJiM0MzsJdTggYnVmWzVdOwomIzQzOwl1OCAqdG1wOwogCiAJdG1wMTYgPSAodTE2ICopYnVmOwogCXRtcCA9ICh1OCAqKWJ1ZjsKIAogCS8qIFBvd2VyIHVwIGV0aGVybmV0IFBIWSAqLwotCSp0bXAxNiA9IDA7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLCAyLCAyLCB0bXAxNik7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7CiYjNDM7CQkqdG1wMTYgPSAwOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLCAyLCAyLCB0bXAxNik7CiAKLQkqdG1wMTYgPSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLCAyLCAyLCB0bXAxNik7Ci0JbXNsZWVwKDUwMCk7CiYjNDM7CQkqdG1wMTYgPSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsIDIsIDIsIHRtcDE2KTsKJiM0MzsJCW1zbGVlcCg1MDApOwogCi0JKnRtcCA9IEFYX0NMS19TRUxFQ1RfQUNTIHwgQVhfQ0xLX1NFTEVDVF9CQ1M7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DTEtfU0VMRUNULCAxLCAxLCB0bXApOwotCW1zbGVlcCgyMDApOwomIzQzOwkJKnRtcCA9IEFYX0NMS19TRUxFQ1RfQUNTIHwgQVhfQ0xLX1NFTEVDVF9CQ1M7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NMS19TRUxFQ1QsIDEsIDEsIHRtcCk7CiYjNDM7CQltc2xlZXAoMjAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCSp0bXAgPSBBWF9QSFlfUE9XRVI7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgdG1wKTsKJiM0MzsJCW1zbGVlcCgyNTApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7CiYjNDM7CQkqdG1wMTYgPSBheDg4MTc5X21kaW9fcmVhZChkZXYtJmd0O25ldCwgZGV2LSZndDttaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKJiM0MzsJCSp0bXAxNiAmYW1wOz0gfihBRFZFUlRJU0VfMTBGVUxMIHwgQURWRVJUSVNFXzEwSEFMRik7CiYjNDM7CQkqdG1wMTYgfD0gQURWRVJUSVNFX1JFU1Y7IC8qIEFkdmVydGlzZSAyLjVHQml0IGxpbmsgKi8KJiM0MzsJCWF4ODgxNzlfbWRpb193cml0ZShkZXYtJmd0O25ldCwgZGV2LSZndDttaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLCAqdG1wMTYpOwomIzQzOwl9CiAKIAkvKiBFdGhlcm5ldCBQSFkgQXV0byBEZXRhY2gqLwogCWF4ODgxNzlfYXV0b19kZXRhY2goZGV2KTsKIAomIzQzOwlpZiAoYXgxNzlfZGF0YS0mZ3Q7Y2hpcF92ZXJzaW9uICZndDs9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHsKJiM0MzsJCSp0bXAgPSBBWF9NQUNfRUZGX0VOOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQlVMS19PVVRfQ1RSTCwgMSwgMSwgdG1wKTsKJiM0MzsKJiM0MzsJCSp0bXAxNiA9IDA7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgdG1wMTYpOwomIzQzOwomIzQzOwkJKnRtcCA9IDB4MDQ7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMSwgMSwgdG1wKTsKJiM0MzsJCSp0bXAgPSAweDEwOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QQVVTRV9XQVRFUkxWTF9ISUdILCAxLCAxLCB0bXApOwomIzQzOwomIzQzOwkJKnRtcCA9IDA7CiYjNDM7CQlpZiAoZGV2LSZndDtuZXQtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikKJiM0MzsJCQkqdG1wIHw9IEFYX1ZMQU5fQ09OVFJPTF9WRkU7CiYjNDM7CQlpZiAoZGV2LSZndDtuZXQtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYKQomIzQzOwkJCSp0bXAgfD0gQVhfVkxBTl9DT05UUk9MX1ZTTzsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCB0bXApOwomIzQzOwomIzQzOwkJKnRtcCA9IDB4ZmY7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19CTV9JTlRfTUFTSywgMSwgMSwgdG1wKTsKJiM0MzsKJiM0MzsJCSp0bXAgPSAwOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fUlhfRE1BX0NUTCwgMSwgMSwgdG1wKTsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0JNX1RYX0RNQV9DVEwsIDEsIDEsIHRtcCk7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19BUkNfQ1RSTCwgMSwgMSwgdG1wKTsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1NXUF9DVFJMLCAxLCAxLCB0bXApOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfVFhfSERSX0NLU1VNLCAxLCAxLCB0bXApOwomIzQzOwl9CiYjNDM7CiAJLyogUmVhZCBNQUMgYWRkcmVzcyBmcm9tIERUQiBvciBhc2l4IGNoaXAgKi8KIAlheDg4MTc5X2dldF9tYWNfYWRkcihkZXYpOwogCW1lbWNweShkZXYtJmd0O25ldC0mZ3Q7cGVybV9hZGRyLCBkZXYtJmd0O25ldC0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAogCS8qIFJYIGJ1bGsgY29uZmlndXJhdGlvbiAqLwotCW1lbWNweSh0bXAsICZhbXA7QVg4ODE3OV9CVUxLSU5fU0laRVswXSwgNSk7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9CVUxLSU5fUUNUUkwsIDUsIDUsIHRtcCk7Ci0KLQlkZXYtJmd0O3J4X3VyYl9zaXplID0gMTAyNCAqIDIwOwotCi0JKnRtcCA9IDB4MzQ7Ci0JYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QQVVTRV9XQVRFUkxWTF9MT1csIDEsIDEsIHRtcCk7Ci0KLQkqdG1wID0gMHg1MjsKLQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsCi0JCQkgIDEsIDEsIHRtcCk7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7CiYjNDM7CQltZW1jcHkodG1wLCAmYW1wO0FYODgxNzlfQlVMS0lOX1NJWkVbMF0sIDUpOwomIzQzOwkJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9CVUxLSU5fUUNUUkwsIDUsIDUsIHRtcCk7CiYjNDM7CQkqdG1wID0gMHgzNDsKJiM0MzsJCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfTE9XLCAxLCAxLCB0bXApOwomIzQzOwomIzQzOwkJKnRtcCA9IDB4NTI7CiYjNDM7CQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsCiYjNDM7CQkJCSAgMSwgMSwgdG1wKTsKJiM0MzsJCWRldi0mZ3Q7cnhfdXJiX3NpemUgPSAxMDI0ICogMjA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBUaGUgQnVsay1SZWdpc3RlciBjb25maWd1cmF0aW9uIGZvciB0aGUgQVg4ODE3OUEgaXMgZG9uZSBpbgomIzQzOwkJICogYXg4ODE3OWFfbGlua19yZXNldCgpLCBvbmNlIHRoZSBsaW5rIGlzIHVwIGZvciBhIGdpdmVuIGxpbmsgYW5kIFVTQi1zcGVlZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGF4MTc5X2RhdGEtJmd0O2lzX2F4ODg3NzJkKQomIzQzOwkJCWRldi0mZ3Q7cnhfdXJiX3NpemUgPSAxMDI0ICogMjQ7CiYjNDM7CQllbHNlCiYjNDM7CQkJZGV2LSZndDtyeF91cmJfc2l6ZSA9IDEwMjQgKiA0ODsKJiM0MzsJfQogCiAJLyogRW5hYmxlIGNoZWNrc3VtIG9mZmxvYWQgKi8KIAkqdG1wID0gQVhfUlhDT0VfSVAgfCBBWF9SWENPRV9UQ1AgfCBBWF9SWENPRV9VRFAgfAogCSAgICAgICBBWF9SWENPRV9UQ1BWNiB8IEFYX1JYQ09FX1VEUFY2OwogCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhDT0VfQ1RMLCAxLCAxLCB0bXApOwomIzQzOwlheDE3OV9kYXRhLSZndDtyeF9jaGVja3N1bSA9IDE7CiAKIAkqdG1wID0gQVhfVFhDT0VfSVAgfCBBWF9UWENPRV9UQ1AgfCBBWF9UWENPRV9VRFAgfAogCSAgICAgICBBWF9UWENPRV9UQ1BWNiB8IEFYX1RYQ09FX1VEUFY2OwogCWF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfVFhDT0VfQ1RMLCAxLCAxLCB0bXApOwogCiAJLyogQ29uZmlndXJlIFJYIGNvbnRyb2wgcmVnaXN0ZXIgPSZndDsgc3RhcnQgb3BlcmF0aW9uICovCi0JKnRtcDE2ID0gQVhfUlhfQ1RMX0RST1BDUkNFUlIgfCBBWF9SWF9DVExfSVBFIHwgQVhfUlhfQ1RMX1NUQVJUIHwKLQkJIEFYX1JYX0NUTF9BUCB8IEFYX1JYX0NUTF9BTUFMTCB8IEFYX1JYX0NUTF9BQjsKLQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgdG1wMTYpOwotCi0JKnRtcCA9IEFYX01PTklUT1JfTU9ERV9QTUVUWVBFIHwgQVhfTU9OSVRPUl9NT0RFX1BNRVBPTCB8Ci0JICAgICAgIEFYX01PTklUT1JfTU9ERV9SV01QOwomIzQzOwlheDE3OV9kYXRhLSZndDtyeGN0bCA9IEFYX1JYX0NUTF9EUk9QQ1JDRVJSIHwgQVhfUlhfQ1RMX1NUQVJUIHwKJiM0MzsJCQkgICAgQVhfUlhfQ1RMX0FQIHwgQVhfUlhfQ1RMX0FNQUxMIHwgQVhfUlhfQ1RMX0FCOwomIzQzOwlpZiAoYXgxNzlfZGF0YS0mZ3Q7aXBfYWxpZ24pCiYjNDM7CQlheDE3OV9kYXRhLSZndDtyeGN0bCB8PSBBWF9SWF9DVExfSVBFOwomIzQzOwlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgJmFtcDtheDE3OV9kYXRhLSZndDtyeGN0bCk7CiYjNDM7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKQomIzQzOwkJKnRtcCA9IEFYX01PTklUT1JfTU9ERV9QTUVUWVBFIHwgQVhfTU9OSVRPUl9NT0RFX1BNRVBPTCB8IEFYX01PTklUT1JfTU9ERV9SV01QOwomIzQzOwllbHNlCiYjNDM7CQkqdG1wID0gQVhfTU9OSVRPUl9NT0RFX1JXTVA7CiAJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NT05JVE9SX01PRCwgMSwgMSwgdG1wKTsKIAogCS8qIENvbmZpZ3VyZSBkZWZhdWx0IG1lZGl1bSB0eXBlID0mZ3Q7IGdpZ2EgKi8KIAkqdG1wMTYgPSBBWF9NRURJVU1fUkVDRUlWRV9FTiB8IEFYX01FRElVTV9UWEZMT1dfQ1RSTEVOIHwKLQkJIEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX0ZVTExfRFVQTEVYIHwKLQkJIEFYX01FRElVTV9HSUdBTU9ERTsKLQlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwKLQkJCSAgMiwgMiwgdG1wMTYpOwomIzQzOwkJIEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX0ZVTExfRFVQTEVYOwomIzQzOwlpZiAoIWF4MTc5X2RhdGEtJmd0O2lzX2F4ODg3NzJkKQomIzQzOwkJKnRtcDE2IHw9IEFYX01FRElVTV9HSUdBTU9ERTsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIHRtcDE2KTsKIAogCS8qIENoZWNrIGlmIFdvTCBpcyBzdXBwb3J0ZWQgKi8KIAlheDE3OV9kYXRhLSZndDt3b2xfc3VwcG9ydGVkID0gMDsKQEAgLTE2NTQsMTYgJiM0MzsyNzQ1LDI5IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCiAJCQkgICAgIDEsIDEsICZhbXA7dG1wKSAmZ3Q7IDApCiAJCWF4MTc5X2RhdGEtJmd0O3dvbF9zdXBwb3J0ZWQgPSBXQUtFX01BR0lDIHwgV0FLRV9QSFk7CiAKLQlheDg4MTc5X2xlZF9zZXR0aW5nKGRldik7CiYjNDM7CS8qIEZvciBjaGlwcyBzdGFydGluZyB3aXRoIEFYODgxNzlBLCBMRURTIGFyZSBjb25maWd1cmVkIGJ5IHRoZSBhZGFwdGVyCiYjNDM7CSAqIGZpcm13YXJlIGRpcmVjdGx5IGZyb20gRUVQUk9NL0VGVVNFIHZhbHVlcwomIzQzOwkgKi8KJiM0MzsJaWYgKGF4MTc5X2RhdGEtJmd0O2NoaXBfdmVyc2lvbiAmbHQ7IEFYX1ZFUlNJT05fQVg4ODE3OUEpCiYjNDM7CQlheDg4MTc5X2xlZF9zZXR0aW5nKGRldik7CiAKIAlheDE3OV9kYXRhLSZndDtlZWVfZW5hYmxlZCA9IDA7CiAJYXgxNzlfZGF0YS0mZ3Q7ZWVlX2FjdGl2ZSA9IDA7CiAKLQlheDg4MTc5X2Rpc2FibGVfZWVlKGRldik7CiYjNDM7CWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmx0OyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7CiYjNDM7CQlheDg4MTc5X2VlZV9jb25maWcoZGV2LCBmYWxzZSk7CiAKLQlheDg4MTc5X2V0aHRvb2xfZ2V0X2VlZShkZXYsICZhbXA7ZWVlX2RhdGEpOwotCWxpbmttb2RlX3plcm8oZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7Ci0JYXg4ODE3OV9ldGh0b29sX3NldF9lZWUoZGV2LCAmYW1wO2VlZV9kYXRhKTsKJiM0MzsJCWF4ODgxNzlfZXRodG9vbF9nZXRfZWVlKGRldiwgJmFtcDtlZWVfZGF0YSk7CiYjNDM7CQlsaW5rbW9kZV96ZXJvKGVlZV9kYXRhLmFkdmVydGlzZWQpOwomIzQzOwkJYXg4ODE3OV9ldGh0b29sX3NldF9lZWUoZGV2LCAmYW1wO2VlZV9kYXRhKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWF4ODgxNzlfZWVlX2NvbmZpZyhkZXYsIHRydWUpOwomIzQzOwkJYXg4ODE3OV9ldGh0b29sX2dldF9lZWUoZGV2LCAmYW1wO2VlZV9kYXRhKTsKJiM0MzsJCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULCBlZWVfZGF0YS5hZHZlcnRpc2VkKTsKJiM0MzsJCWlmIChheDE3OV9kYXRhLSZndDtjaGlwX3ZlcnNpb24gJmd0Oz0gQVhfVkVSU0lPTl9BWDg4Mjc5KQomIzQzOwkJCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULCBlZWVfZGF0YS5hZHZlcnRpc2VkKTsKJiM0MzsJCWF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgJmFtcDtlZWVfZGF0YSk7CiYjNDM7CX0KIAogCS8qIFJlc3RhcnQgYXV0b25lZyAqLwogCW1paV9ud2F5X3Jlc3RhcnQoJmFtcDtkZXYtJmd0O21paSk7CkBAIC0xNzA3LDYgJiM0MzsyODExLDI0IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYXg4ODE3OWFfc3RvcChzdHJ1Y3QgdXNibmV0ICpkZXYpCiYjNDM7ewomIzQzOwl1MTYgcmVnMTY7CiYjNDM7CXU4IHJlZzg7CiYjNDM7CiYjNDM7CWF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsICZhbXA7cmVnMTYpOwomIzQzOwlyZWcxNiAmYW1wOz0gfkFYX01FRElVTV9SRUNFSVZFX0VOOwomIzQzOwlheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwgMiwgMiwgJmFtcDtyZWcxNik7CiYjNDM7CiYjNDM7CXJlZzE2ID0gMDsKJiM0MzsJYXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsICZhbXA7cmVnMTYpOwomIzQzOwomIzQzOwlyZWc4ID0gMDsKJiM0MzsJYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgJmFtcDtyZWc4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTc5X2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0gJiMzNDtBU0lYIEFYODgxNzkgVVNCIDMuMCBHaWdhYml0IEV0aGVybmV0JiMzNDssCiAJLmJpbmQgPSBheDg4MTc5X2JpbmQsCkBAIC0xNzMzLDYgJiM0MzsyODU1LDQ1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODE3OGFfaW5mbyA9IHsKIAkudHhfZml4dXAgPSBheDg4MTc5X3R4X2ZpeHVwLAogfTsKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODE3OWFfaW5mbyA9IHsKJiM0MzsJLmRlc2NyaXB0aW9uID0gJiMzNDtBU0lYIEFYODgxNzlBIFVTQiAzLjIgR2lnYWJpdCBFdGhlcm5ldCYjMzQ7LAomIzQzOwkuYmluZCA9IGF4ODgxNzlhX2JpbmQsCiYjNDM7CS51bmJpbmQgPSBheDg4MTc5YV91bmJpbmQsCiYjNDM7CS5zdGF0dXMgPSBheDg4MTc5X3N0YXR1cywKJiM0MzsJLmxpbmtfcmVzZXQgPSBheDg4MTc5YV9saW5rX3Jlc2V0LAomIzQzOwkucmVzZXQgPSBheDg4MTc5X3Jlc2V0LAomIzQzOwkuc3RvcCA9IGF4ODgxNzlhX3N0b3AsCiYjNDM7CS5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVggfCBGTEFHX01VTFRJX1BBQ0tFVCB8IEZMQUdfQVZPSURfVU5MSU5LX1VSQlMsCiYjNDM7CS5yeF9maXh1cCA9IGF4ODgxNzlhX3J4X2ZpeHVwLAomIzQzOwkudHhfZml4dXAgPSBheDg4MTc5YV90eF9maXh1cCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODc3MmRfaW5mbyA9IHsKJiM0MzsJLmRlc2NyaXB0aW9uID0gJiMzNDtBU0lYIEFYODg3NzJEL0UgVVNCIDIuMCBGYXN0IEV0aGVybmV0JiMzNDssCiYjNDM7CS5iaW5kID0gYXg4ODE3OWFfYmluZCwKJiM0MzsJLnVuYmluZCA9IGF4ODgxNzlhX3VuYmluZCwKJiM0MzsJLnN0YXR1cyA9IGF4ODgxNzlfc3RhdHVzLAomIzQzOwkubGlua19yZXNldCA9IGF4ODgxNzlhX2xpbmtfcmVzZXQsCiYjNDM7CS5yZXNldCA9IGF4ODgxNzlfcmVzZXQsCiYjNDM7CS5zdG9wID0gYXg4ODE3OWFfc3RvcCwKJiM0MzsJLmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VUIHwgRkxBR19BVk9JRF9VTkxJTktfVVJCUywKJiM0MzsJLnJ4X2ZpeHVwID0gYXg4ODE3OWFfcnhfZml4dXAsCiYjNDM7CS50eF9maXh1cCA9IGF4ODgxNzlhX3R4X2ZpeHVwLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4Mjc5X2luZm8gPSB7CiYjNDM7CS5kZXNjcmlwdGlvbiA9ICYjMzQ7QVNJWCBBWDg4Mjc5IFVTQiAzLjIgMi41R2lnYWJpdCBFdGhlcm5ldCYjMzQ7LAomIzQzOwkuYmluZCA9IGF4ODgxNzlhX2JpbmQsCiYjNDM7CS51bmJpbmQgPSBheDg4MTc5YV91bmJpbmQsCiYjNDM7CS5zdGF0dXMgPSBheDg4MTc5X3N0YXR1cywKJiM0MzsJLmxpbmtfcmVzZXQgPSBheDg4MTc5YV9saW5rX3Jlc2V0LAomIzQzOwkucmVzZXQgPSBheDg4MTc5X3Jlc2V0LAomIzQzOwkuc3RvcCA9IGF4ODgxNzlhX3N0b3AsCiYjNDM7CS5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVggfCBGTEFHX01VTFRJX1BBQ0tFVCB8IEZMQUdfQVZPSURfVU5MSU5LX1VSQlMsCiYjNDM7CS5yeF9maXh1cCA9IGF4ODgxNzlhX3J4X2ZpeHVwLAomIzQzOwkudHhfZml4dXAgPSBheDg4MTc5YV90eF9maXh1cCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjeXByZXNzX0dYM19pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9ICYjMzQ7Q3lwcmVzcyBHWDMgU3VwZXJTcGVlZCB0byBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXImIzM0OywKIAkuYmluZCA9IGF4ODgxNzlfYmluZCwKQEAgLTE4NzgsNiAmIzQzOzMwMzksMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBhdF91bWMyMDAwc3BfaW5mbyA9IHsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHByb2R1Y3RzW10gPSB7CiB7CiYjNDM7CS8qIEFTSVggQVg4ODE3OUEvQiBVU0IgMy4yIEdpZ2FiaXQgRXRoZXJuZXQgKi8KJiM0MzsJVVNCX0RFVklDRV9WRVIoMHgwYjk1LCAweDE3OTAsIDB4MDIwMCwgMHgwMjAwKSwKJiM0MzsJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmFtcDtheDg4MTc5YV9pbmZvLAomIzQzO30sIHsKJiM0MzsJLyogQVNJWCBBWDg4NzcyRCBVU0IgMi4wIDEwME1iaXQgRXRoZXJuZXQgKi8KJiM0MzsJVVNCX0RFVklDRV9WRVIoMHgwYjk1LCAweDE3OTAsIDB4MDMwMCwgMHgwMzAwKSwKJiM0MzsJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmFtcDtheDg4NzcyZF9pbmZvLAomIzQzO30sIHsKJiM0MzsJLyogQVNJWCBBWDg4Mjc5IFVTQiAzLjIgMi41R0JpdCBFdGhlcm5ldCAqLwomIzQzOwlVU0JfREVWSUNFX1ZFUigweDBiOTUsIDB4MTc5MCwgMHgwNDAwLCAweDA0MDApLAomIzQzOwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmYW1wO2F4ODgyNzlfaW5mbywKJiM0Mzt9LCB7CiAJLyogQVNJWCBBWDg4MTc5IDEwLzEwMC8xMDAwICovCiAJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwYjk1LCAweDE3OTAsIDB4ZmYsIDB4ZmYsIDApLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSZhbXA7YXg4ODE3OV9pbmZvLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTgwNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBWDg4MTc5IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgYGRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBsZXQmIzM5O3MgYnJlYWsgaXQgZG93biBmcm9tIGEgZnVuY3Rpb25hbCB0ZXN0aW5nIHBlcnNwZWN0aXZlLiBJdCYjMzk7cyBhZGRpbmcgc3VwcG9ydCBmb3IgYSBoYW5kZnVsIG9mIG5ldyBjaGlwczogdGhlIEFYODgxNzlBLCBBWDg4NzcyRCwgYW5kIEFYODgyNzkuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgYXJjaGl0ZWN0dXJhbCBkaWZmZXJlbmNlcyB0aGF0IHJlcXVpcmUgbmV3IGRldmljZSBpbmZvIHN0cnVjdHVyZXM6IGBheDg4MTc5YV9pbmZvYCwgYGF4ODg3NzJkX2luZm9gLCBgYXg4ODI3OV9pbmZvYC4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGVzZSBuZXcgc3RydWN0dXJlcyBoaW50cyBhdCBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciBtYXBwaW5ncyBvciBjb250cm9sIHNlcXVlbmNlcywgd2hpY2ggaXMgYWx3YXlzIGEganVpY3kgdGFyZ2V0IGZvciBmaW5kaW5nIHN1YnRsZSBpc3N1ZXMuCgpXZSBhbHNvIGhhdmUgbmV3IGZ1bmN0aW9uczogYGF4ODgxNzlhX2JpbmRgLCBgYXg4ODE3OWFfdW5iaW5kYCwgYGF4ODgxNzlhX3J4X2ZpeHVwYCwgYGF4ODgxNzlhX3R4X2ZpeHVwYCwgYGF4ODgxNzlhX2xpbmtfcmVzZXRgLCBgYXg4ODE3OWFfc3RvcGAuIFRoZXNlIHByb2JhYmx5IGltcGxlbWVudCB0aGUgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgbGluayBoYW5kbGluZyBmb3IgZWFjaCBvZiB0aGVzZSBuZXcgY2hpcHNldHMuIFRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGV4aXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBheDg4MTc5X3Jlc2V0YCBhbmQgYGF4ODgxNzlfc3RhdHVzYCBpbXBsaWVzIGVpdGhlciBzaGFyZWQgZnVuY3Rpb25hbGl0eSBhY3Jvc3MgY2hpcHNldHMgb3IgbW9kaWZpY2F0aW9ucyB0byBoYW5kbGUgdGhlIG5ldyBkZXZpY2VzIGdyYWNlZnVsbHkuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gYSBVU0IgbmV0d29yayBkcml2ZXIsIHdoaWNoIGlzIGFscmVhZHkgYSBmYWlybHkgY29tcGxleCBhcmVhLiBOZXR3b3JrIGRyaXZlcnMsIGluIGdlbmVyYWwsIGFyZSBhbHdheXMgaGlnaC12YWx1ZSB0YXJnZXRzIGJlY2F1c2Ugb2YgdGhlIGhpZ2ggbGlrZWxpaG9vZCBvZiBleHBsb2l0YWJsZSBmbGF3cy4gVGhpcyBwYXRjaCwgd2l0aCBpdHMgYWRkaXRpb25zIG9mIHN1cHBvcnQgZm9yIHNldmVyYWwgbmV3IGNoaXBzLCBoYXMgZGVmaW5pdGVseSBwaXF1ZWQgbXkgaW50ZXJlc3QuIFRoZSBjb21wbGV4aXR5LCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBVU0IsIGFuZCB0aGUgcG90ZW50aWFsIGZvciBvZmYtYnktb25lIGVycm9ycyBpbiB0aGVzZSBmaXh1cCBmdW5jdGlvbnMgbWFrZSB0aGlzIHBhdGNoIGFuIG9idmlvdXMgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcGx5LCBsZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIHRoaXMuIEkgbmVlZCB0byBrbm93IHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSBpbnZvbHZlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBgZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlYCBmb3IgdGhlIGZpbGVuYW1lIGl0c2VsZjogYGRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F4ODgxNzlfMTc4YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvTWFrZWZpbGU9MTQ9YXNpeC15IDo9IGFzaXhfZGV2aWNlcy5vIGFzaXhfY29tbW9uLm8gYXg4ODE3MmEub1xuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxNzlfMTc4QSkgICAgICAmIzQzOz0gYXg4ODE3OV8xNzhhLm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfVVNCX05FVF9DRENFVEhFUilcdCYjNDM7PSBjZGNfZXRoZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzU2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVVNCIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBVU0JfTkVUX0FYODgxNzlfMTc4QWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLgoKRnJvbSBsb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBpdCBzZWVtcyBWTEFOIHN1cHBvcnQgaXMgYmVpbmcgYWRkZWQgd2l0aCBmdW5jdGlvbnMgbGlrZSBgYXgxNzlhX3ZsYW5fcnhfa2lsbF92aWRgIGFuZCBgYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZGAuIEl0IGFsc28gdXRpbGl6ZXMgYHZsYW5fZ2V0X3RhZ2AgYW5kIGBfX3ZsYW5faHdhY2NlbF9wdXRfdGFnYC4gVGhlc2UgVkxBTiBmdW5jdGlvbnMgYXJlIGNvbW1vbmx5IGxpbmtlZCB0byBgVkxBTl84MDIxUWAsIHNvIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSB0aGF0IHRoYXQmIzM5O3MgZW5hYmxlZCBhcyB3ZWxsLgoKVG8gY29uZmlybSBhbnkgZGVwZW5kZW5jaWVzLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlIGFuZCBzZWFyY2ggZm9yIHRoZSBgVVNCX05FVF9BWDg4MTc5XzE3OEFgIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5LiBUaGF0IHNob3VsZCBwcm92aWRlIGEgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gYW55IG1hbmRhdG9yeSBvciBwb3RlbnRpYWxseSBoZWxwZnVsIHJlbGF0ZWQgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtVU0JfTkVUX0FYODgxNzlfMTc4QSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTE2Nj1jb25maWcgVVNCX05FVF9BWDg4MTdYXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTk3LVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTk4OmNvbmZpZyBVU0JfTkVUX0FYODgxNzlfMTc4QVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTk5LVx0dHJpc3RhdGUgXCYjMzQ7QVNJWCBBWDg4MTc5LzE3OEEgVVNCIDMuMC8yLjAgdG8gR2lnYWJpdCBFdGhlcm5ldFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjk0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBVU0IgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIFVTQiBuZXR3b3JrIGRyaXZlciBzaXR1YXRpb24sIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgdGhlIG1vc3QgcmVsZXZhbnQgc2VjdGlvbiB3aWxsIGJlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYmAgZGlyZWN0b3J5LiBBbmQgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBwcmltYXJ5IG1lYW5zIG9mIGRlZmluaW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTbywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTguIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0IOKAkyBob3BlZnVsbHksIGl0IGNvbnRhaW5zIHRoZSBjb3JlIG9wdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGJlaW5nIGNvbmZpZ3VyZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBrZXkgc2V0dGluZ3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk1Olx0XHQgIFRoaXMgZHJpdmVyIGNyZWF0ZXMgYW4gaW50ZXJmYWNlIG5hbWVkIFwmIzM0O2V0aFhcJiMzNDssIHdoZXJlIFggZGVwZW5kcyBvblxuIDE5NjpcdFx0ICB3aGF0IG90aGVyIG5ldHdvcmtpbmcgZGV2aWNlcyB5b3UgaGF2ZSBpbiB1c2UuXG4gMTk3Olx0XG4gMTk4Olx0Y29uZmlnIFVTQl9ORVRfQVg4ODE3OV8xNzhBXG4gMTk5Olx0XHR0cmlzdGF0ZSBcJiMzNDtBU0lYIEFYODgxNzkvMTc4QSBVU0IgMy4wLzIuMCB0byBHaWdhYml0IEV0aGVybmV0XCYjMzQ7XG4gMjAwOlx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiAyMDE6XHRcdHNlbGVjdCBDUkMzMlxuIDIwMjpcdFx0c2VsZWN0IFBIWUxJQlxuIDIwMzpcdFx0ZGVmYXVsdCB5XG4gMjA0Olx0XHRoZWxwXG4gMjA1Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgQVNJWCBBWDg4MTc5IGJhc2VkIFVTQiAzLjAvMi4wXG4gMjA2Olx0XHQgIHRvIEdpZ2FiaXQgRXRoZXJuZXQgYWRhcHRlcnMuXG4gMjA3Olx0XG4gMjA4Olx0XHQgIFRoaXMgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBkZXZpY2VzOlxuIDIwOTpcdFx0ICAgICogQVNJWCBBWDg4MTc5XG4gMjEwOlx0XHQgICAgKiBBU0lYIEFYODgxNzhBXG4gMjExOlx0XHQgICAgKiBTaXRjb21tIExOLTAzMlxuIDIxMjpcdFxuIDIxMzpcdFx0ICBUaGlzIGRyaXZlciBjcmVhdGVzIGFuIGludGVyZmFjZSBuYW1lZCBcJiMzNDtldGhYXCYjMzQ7LCB3aGVyZSBYIGRlcGVuZHMgb25cbiAyMTQ6XHRcdCAgd2hhdCBvdGhlciBuZXR3b3JraW5nIGRldmljZXMgeW91IGhhdmUgaW4gdXNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODU1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIHRoZSBGdXp6aW5nIFRhcmdldDogQVg4ODE3OUEgVVNCIE5ldHdvcmsgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgY29yZSBjb25maWd1cmF0aW9uIHNlZW1zIHRvIGJlIGBVU0JfTkVUX0FYODgxNzlfMTc4QWAuIFRoYXQmIzM5O3Mgd2hlcmUgd2UgbmVlZCB0byBzdGFydC4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzIHNwZWNpZmljIFVTQiBuZXR3b3JrIGRyaXZlci4KCkxldCYjMzk7cyBzZWUgd2hhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMuIFJpZ2h0LCBoZXJlIGFyZSB0aGUgbmV3IHN5bWJvbHM6IGBheDg4MTc5YV9iaW5kYCwgYGF4ODgxNzlhX3VuYmluZGAsIGBheDg4MTc5YV9yeF9maXh1cGAsIGBheDg4MTc5YV90eF9maXh1cGAsIGBheDg4MTc5YV9saW5rX3Jlc2V0YCwgYGF4ODgxNzlhX3N0b3BgLCBgYXgxNzlhX3ZsYW5fcnhfa2lsbF92aWRgLCBgYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZGAsIGBheDg4MTc5YV9nZXRfcGF1c2VwYXJhbWAsIGBheDg4MTc5YV9zZXRfcGF1c2VwYXJhbWAsIGBheDg4MTc5YV9yeF9jaGVja3N1bWAsIGFuZCBgYXg4ODE3OWFfYnVsa2luX2NvbmZpZ2AuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQuIGBheDg4MTc5YV9yeF9maXh1cGAgYW5kIGBheDg4MTc5YV90eF9maXh1cGAuLi4gdGhvc2UgYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucy4gTm9ybWFsbHksIEkmIzM5O2QgYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zIGFzIHRoZXkgY2FuIGJlIGxlc3MgZWZmaWNpZW50IHRvIGZ1enouIEhvd2V2ZXIsIGNvbnNpZGVyaW5nIHRoaXMgaXMgYSAqVVNCIG5ldHdvcmsgZHJpdmVyKiwgdGhlIGByeF9maXh1cGAgYW5kIGB0eF9maXh1cGAgZnVuY3Rpb25zIGFyZSB3aGVyZSBhbGwgdGhlIHBhY2tldCBwYXJzaW5nIG1hZ2ljIGhhcHBlbnMgYW5kIGFyZSBkZXZpY2Utc3BlY2lmaWMuIFRoZXkmIzM5O3JlIGV4YWN0bHkgd2hhdCB3ZSB3YW50IHRvIHRhcmdldCB3aXRoIFVTQiBmdXp6aW5nLCBhcyB0aGV5JiMzOTtsbCBsaWtlbHkgYmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgbWFsZm9ybWVkIGRhdGEgZnJvbSB0aGUgZGV2aWNlLgoKV2FpdCwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcHJvbXB0LiBJIHJlbWVtYmVyIGl0IHNheWluZyB0byAmIzM0O2F2b2lkIGhvdC1wYXRoIGZ1bmN0aW9ucyYjMzQ7LiBCdXQgaW4gdGhpcyBjb250ZXh0LCBleGNsdWRpbmcgdGhlbSB3b3VsZCBiZSBhIG1pc3Rha2UuIFRoZXNlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoZSBVU0IgZGF0YSEgSWYgSSBza2lwIHRoZW0sIEkgbWlzcyB0aGUgbW9zdCBpbXBvcnRhbnQgbG9naWMgZm9yIGZ1enppbmcuCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGdvaW5nIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgYXg4ODE3OWFfYmluZGAsIGBheDg4MTc5YV9saW5rX3Jlc2V0YCwgYGF4ODgxNzlhX3J4X2ZpeHVwYCwgYGF4ODgxNzlhX3R4X2ZpeHVwYCwgYGF4MTc5YV92bGFuX3J4X2FkZF92aWRgLCBhbmQgYGF4MTc5YV92bGFuX3J4X2tpbGxfdmlkYC4KClRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgYXg4ODE3OWFfcnhfZml4dXBgLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrLiBZZXMsIGl0JiMzOTtzIGNhbGxlZCBmb3IgZXZlcnkgVVJCIHJlY2VpdmVkLCBzbyBpdCByZWFsbHkgKmlzKiBjb3JlIHRvIHRoZSBwYWNrZXQgcGFyc2luZy4gRGVmaW5pdGVseSBpbmNsdWRpbmcgdGhhdC4KCkZpbmFsbHksIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uOiBgVVNCX05FVF9BWDg4MTc5XzE3OEFgLgoKQW5kLCBhIGZpbmFsIHRob3VnaHQsIGNvdWxkIGBWTEFOXzgwMjFRYCBiZSBuZWVkZWQgdG8gYWxsb3cgVkxBTiBmdW5jdGlvbnMgdG8gYmUgY29tcGlsZWQgb3IgcmVhY2hhYmxlPyBUaGUgY29kZSB1c2VzIGB2bGFuX2dldF90YWdgIGFuZCBgX192bGFuX2h3YWNjZWxfcHV0X3RhZ2Ag4oCTIHRob3NlIGFyZSBkZWZpbmVkIGluIGBsaW51eC9pZl92bGFuLmhgLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9nZXRfdGFnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmg9NTQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTUxLS8qKlxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NTUyOiAqIF9fdmxhbl9nZXRfdGFnIC0gZ2V0IHRoZSBWTEFOIElEIHRoYXQgaXMgcGFydCBvZiB0aGUgcGF5bG9hZFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTUzLSAqIEBza2I6IHNrYnVmZiB0byBxdWVyeVxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTU1Ny0gKi9cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjU1ODpzdGF0aWMgaW5saW5lIGludCBfX3ZsYW5fZ2V0X3RhZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZsYW5fdGNpKVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTU5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaD01NzY9c3RhdGljIGlubGluZSBpbnQgX192bGFuX2h3YWNjZWxfZ2V0X3RhZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTU4OC0vKipcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjU4OTogKiB2bGFuX2dldF90YWcgLSBnZXQgdGhlIFZMQU4gSUQgZnJvbSB0aGUgc2tiXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01OTAtICogQHNrYjogc2tidWZmIHRvIHF1ZXJ5XG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTk0LSAqL1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NTk1OnN0YXRpYyBpbmxpbmUgaW50IHZsYW5fZ2V0X3RhZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZsYW5fdGNpKVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTk2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01OTktXHR9IGVsc2Uge1xuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NjAwOlx0XHRyZXR1cm4gX192bGFuX2dldF90YWcoc2tiLCB2bGFuX3RjaSk7XG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC02MDEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzM5CgkJCQkJCQlvdXRwdXQ6IDI5OAoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQVg4ODE3OUEgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQgc2VlbXMgdGhlIGRldmVsb3BlcnMgYXJlIGFkZGluZyBzdXBwb3J0IGZvciBzb21lIG5ldyBBU0lYIFVTQiBFdGhlcm5ldCBjaGlwcyDigJMgdGhlIEFYODgxNzlBLCBBWDg4NzcyRCwgYW5kIEFYODgyNzkg4oCTIHRvIHRoZSBleGlzdGluZyBgYXg4ODE3OV8xNzhhYCBkcml2ZXIuIEludGVyZXN0aW5nLiBJIG5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGlubGluZSwgYW5kIGNvbXBpbGF0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGhpbmdlIG9uIGBDT05GSUdfVkxBTl84MDIxUWAuIEhvd2V2ZXIsIHdoaWxlIG5vdCBlc3NlbnRpYWwsIGBWTEFOXzgwMjFRYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGZvciB0ZXN0aW5nIHRoZSBWTEFOIGZ1bmN0aW9uYWxpdHkg4oCTIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIGZ1bGwgY292ZXJhZ2UuIFRoZSBjb3JlIGZvY3VzLCBob3dldmVyLCBpcyBvbiBgVVNCX05FVF9BWDg4MTc5XzE3OEFgLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gc2NydXRpbml6ZSBhcmU6IGBheDg4MTc5YV9iaW5kYCwgYGF4ODgxNzlhX3VuYmluZGAsIGBheDg4MTc5YV9saW5rX3Jlc2V0YCwgYGF4ODgxNzlhX3J4X2ZpeHVwYCwgYGF4ODgxNzlhX3R4X2ZpeHVwYCwgYGF4MTc5YV92bGFuX3J4X2FkZF92aWRgLCBgYXgxNzlhX3ZsYW5fcnhfa2lsbF92aWRgLCBgYXg4ODE3OWFfZ2V0X3BhdXNlcGFyYW1gLCBgYXg4ODE3OWFfc2V0X3BhdXNlcGFyYW1gLCBgYXg4ODE3OWFfcnhfY2hlY2tzdW1gLCBhbmQgYGF4ODgxNzlhX2J1bGtpbl9jb25maWdgLiBUaGVzZSBzZWVtIHRvIHJlcHJlc2VudCB0aGUgY29yZSBkcml2ZXIgZnVuY3Rpb25hbGl0eSwgZGVhbGluZyB3aXRoIGRldmljZSBiaW5kaW5nLCB1bmJpbmRpbmcsIGxpbmsgbWFuYWdlbWVudCwgUlgvVFggcGFja2V0IGhhbmRsaW5nLCBWTEFOIG1hbmlwdWxhdGlvbiwgcGF1c2UgcGFyYW1ldGVyIGhhbmRsaW5nLCBjaGVja3N1bSBvZmZsb2FkaW5nIGFuZCBidWxrIGRhdGEgdHJhbnNmZXIgY29uZmlndXJhdGlvbi4KCkZyb20gbXkgcGVyc3BlY3RpdmUsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgbGluayByZXNldCBsb2dpYywgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHN0ZXBzIChSWC9UWCBmaXh1cCksIGFsbCBzcGVjaWZpYyB0byB0aGVzZSBuZXcgY2hpcHMuIFNvLCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgSSYjMzk7ZCB3YW50IHRvIGhlYXZpbHkgZm9jdXMgb24gdGhlIG5ldyBVU0IgZGV2aWNlIGJpbmRpbmcgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocywgcGFydGljdWxhcmx5IHRoZSBSWCBhbmQgVFggZml4dXAgcm91dGluZXMuIFRoZXNlIGFyZSB0aGUgYXJlYXMgd2hlcmUgbmV3IGxvZ2ljIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFyZSBtb3N0IGxpa2VseSB0byBlbWVyZ2UuCgpJJiMzOTtsbCBsb2cgYFVTQl9ORVRfQVg4ODE3OV8xNzhBYCBhcyB0aGUgcmVsZXZhbnQgY29uZmlnLCBhbmQgdGhlbiBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0FYODgxNzlfMTc4QSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F4ODgxNzlhX2JpbmQmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfdW5iaW5kJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX2xpbmtfcmVzZXQmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfcnhfZml4dXAmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfdHhfZml4dXAmIzM0OywKICAgICYjMzQ7YXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZCYjMzQ7LAogICAgJiMzNDtheDE3OWFfdmxhbl9yeF9raWxsX3ZpZCYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9nZXRfcGF1c2VwYXJhbSYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9zZXRfcGF1c2VwYXJhbSYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9yeF9jaGVja3N1bSYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9idWxraW5fY29uZmlnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgbmV3IEFTSVggVVNCIEV0aGVybmV0IGNoaXBzIChBWDg4MTc5QSwgQVg4ODc3MkQsIEFYODgyNzkpIHRvIHRoZSBheDg4MTc5XzE3OGEgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiwgbGluayByZXNldCwgYW5kIHBhY2tldCBwYXJzaW5nIChyeC90eCBmaXh1cCkgbG9naWMgc3BlY2lmaWMgdG8gdGhlc2UgY2hpcHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgVVNCIGRldmljZSBiaW5kaW5nIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX05FVF9BWDg4MTc5XzE3OEEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtheDg4MTc5YV9iaW5kJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX3VuYmluZCYjMzQ7LAogICAgJiMzNDtheDg4MTc5YV9saW5rX3Jlc2V0JiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX3J4X2ZpeHVwJiMzNDssCiAgICAmIzM0O2F4ODgxNzlhX3R4X2ZpeHVwJiMzNDssCiAgICAmIzM0O2F4MTc5YV92bGFuX3J4X2FkZF92aWQmIzM0OywKICAgICYjMzQ7YXgxNzlhX3ZsYW5fcnhfa2lsbF92aWQmIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfZ2V0X3BhdXNlcGFyYW0mIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfc2V0X3BhdXNlcGFyYW0mIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfcnhfY2hlY2tzdW0mIzM0OywKICAgICYjMzQ7YXg4ODE3OWFfYnVsa2luX2NvbmZpZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIG5ldyBBU0lYIFVTQiBFdGhlcm5ldCBjaGlwcyAoQVg4ODE3OUEsIEFYODg3NzJELCBBWDg4Mjc5KSB0byB0aGUgYXg4ODE3OV8xNzhhIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24sIGxpbmsgcmVzZXQsIGFuZCBwYWNrZXQgcGFyc2luZyAocngvdHggZml4dXApIGxvZ2ljIHNwZWNpZmljIHRvIHRoZXNlIGNoaXBzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IFVTQiBkZXZpY2UgYmluZGluZyBhbmQgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowMToyNS42Mjg0NDE0MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTU4OTQ0MzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0FYODgxNzlfMTc4QVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF4ODgxNzlhX2JpbmRcIixcbiAgICBcImF4ODgxNzlhX3VuYmluZFwiLFxuICAgIFwiYXg4ODE3OWFfbGlua19yZXNldFwiLFxuICAgIFwiYXg4ODE3OWFfcnhfZml4dXBcIixcbiAgICBcImF4ODgxNzlhX3R4X2ZpeHVwXCIsXG4gICAgXCJheDE3OWFfdmxhbl9yeF9hZGRfdmlkXCIsXG4gICAgXCJheDE3OWFfdmxhbl9yeF9raWxsX3ZpZFwiLFxuICAgIFwiYXg4ODE3OWFfZ2V0X3BhdXNlcGFyYW1cIixcbiAgICBcImF4ODgxNzlhX3NldF9wYXVzZXBhcmFtXCIsXG4gICAgXCJheDg4MTc5YV9yeF9jaGVja3N1bVwiLFxuICAgIFwiYXg4ODE3OWFfYnVsa2luX2NvbmZpZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgbmV3IEFTSVggVVNCIEV0aGVybmV0IGNoaXBzIChBWDg4MTc5QSwgQVg4ODc3MkQsIEFYODgyNzkpIHRvIHRoZSBheDg4MTc5XzE3OGEgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiwgbGluayByZXNldCwgYW5kIHBhY2tldCBwYXJzaW5nIChyeC90eCBmaXh1cCkgbG9naWMgc3BlY2lmaWMgdG8gdGhlc2UgY2hpcHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgVVNCIGRldmljZSBiaW5kaW5nIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDE6MjUuNjI4NDUxMDA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTg3MjE0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YzM3Nzk1YmFhYjVkZTY4ZmVlYmUzMmI0ZTJjZjhiMzdmNWFmNWE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDEgMTE6MDE6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jIGIvZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jXFxuaW5kZXggOThmODk5ZWEyZTk0NjIuLjEyZmMyMGU1Zjc2ZTY5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY1xcbkBAIC0xMyw5ICsxMywxMiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL3VzYm5ldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIEFYODgxNzlfUEhZX0lEXFx0XFx0XFx0XFx0MHgwM1xcbiAjZGVmaW5lIEFYX0VFUFJPTV9MRU5cXHRcXHRcXHRcXHQweDEwMFxcbisjZGVmaW5lIEFYODgyNzlfRUVQUk9NX0xFTlxcdFxcdFxcdDB4NDAwMFxcbisjZGVmaW5lIEFYODgxNzlBX0VFUFJPTV9MRU5cXHRcXHRcXHQoMzIgKiAyMClcXG4gI2RlZmluZSBBWDg4MTc5X0VFUFJPTV9NQUdJQ1xcdFxcdFxcdDB4MTc5MDBiOTVcXG4gI2RlZmluZSBBWF9NQ0FTVF9GTFRTSVpFXFx0XFx0XFx0OFxcbiAjZGVmaW5lIEFYX01BWF9NQ0FTVFxcdFxcdFxcdFxcdDY0XFxuQEAgLTMyLDE3ICszNSwzMyBAQFxcbiAjZGVmaW5lIEFYX0FDQ0VTU19FRVBST01cXHRcXHRcXHQweDA0XFxuICNkZWZpbmUgQVhfQUNDRVNTX0VGVVNcXHRcXHRcXHRcXHQweDA1XFxuICNkZWZpbmUgQVhfUkVMT0FEX0VFUFJPTV9FRlVTRVxcdFxcdFxcdDB4MDZcXG4tI2RlZmluZSBBWF9QQVVTRV9XQVRFUkxWTF9ISUdIXFx0XFx0XFx0MHg1NFxcbi0jZGVmaW5lIEFYX1BBVVNFX1dBVEVSTFZMX0xPV1xcdFxcdFxcdDB4NTVcXG4tXFxuKyNkZWZpbmUgQVg4ODE3OUFfV0FLRVVQX1NFVFRJTkdcXHRcXHRcXHQweDA3XFxuKyNkZWZpbmUgQVhfRldfTU9ERVxcdFxcdFxcdFxcdDB4MDhcXG4rI2RlZmluZSBBWF9HUEhZX0NUTFxcdFxcdFxcdFxcdDB4MEZcXG4rI2RlZmluZSBBWDg4MTc5QV9GTEFTSF9SRUFEXFx0XFx0XFx0MHgyMVxcbisjZGVmaW5lIEFYODgxNzlBX0ZMQVNIX1dFTlxcdFxcdFxcdDB4MjJcXG4rI2RlZmluZSBBWDg4MTc5QV9GTEFTSF9XRElTXFx0XFx0XFx0MHgyM1xcbisjZGVmaW5lIEFYODgxNzlBX0ZMQVNIX1dSSVRFXFx0XFx0XFx0MHgyNFxcbisjZGVmaW5lIEFYODgxNzlBX1BIWV9DTEFVU0U0NVxcdFxcdFxcdDB4MjdcXG4rI2RlZmluZSBBWDg4MTc5QV9GTEFTSF9FUkFTRV9TRUNUSU9OXFx0XFx0MHgyOFxcbisjZGVmaW5lIEFYODgxNzlBX0FDQ0VTU19CTFxcdFxcdFxcdDB4MkFcXG4rI2RlZmluZSBBWDg4MTc5QV9QSFlfUE9XRVJcXHRcXHRcXHQweDMxXFxuKyNkZWZpbmUgQVg4ODE3OUFfQVVUT0RFVEFDSFxcdFxcdFxcdDB4QzBcXG4rI2RlZmluZSBBWF9QQVVTRV9XQVRFUkxWTF9MT1dcXHRcXHRcXHQweDU0XFxuKyNkZWZpbmUgQVhfUEFVU0VfV0FURVJMVkxfSElHSFxcdFxcdFxcdDB4NTVcXG4rXFxuKyNkZWZpbmUgQVhfRldfTU9ERV8xNzlBXFx0XFx0XFx0XFx0MHgwMVxcbiAjZGVmaW5lIFBIWVNJQ0FMX0xJTktfU1RBVFVTXFx0XFx0XFx0MHgwMlxcbiBcXHQjZGVmaW5lXFx0QVhfVVNCX1NTXFx0XFx0MHgwNFxcbiBcXHQjZGVmaW5lXFx0QVhfVVNCX0hTXFx0XFx0MHgwMlxcbitcXHQjZGVmaW5lIEFYX1VTQl9GU1xcdFxcdDB4MDFcXG4gXFxuICNkZWZpbmUgR0VORVJBTF9TVEFUVVNcXHRcXHRcXHRcXHQweDAzXFxuIC8qIENoZWNrIEFYODgxNzkgdmVyc2lvbi4gVUExOkJpdDIgPSAwLCAgVUEyOkJpdDIgPSAxICovXFxuIFxcdCNkZWZpbmVcXHRBWF9TRUNMRFxcdFxcdDB4MDRcXG4gXFxuKyNkZWZpbmUgQVhfQ0hJUF9TVEFUVVNcXHRcXHRcXHRcXHQweDA1XFxuK1xcbiAjZGVmaW5lIEFYX1NST01fQUREUlxcdFxcdFxcdFxcdDB4MDdcXG4gI2RlZmluZSBBWF9TUk9NX0NNRFxcdFxcdFxcdFxcdDB4MGFcXG4gXFx0I2RlZmluZSBFRVBfUkRcXHRcXHRcXHQweDA0XFxuQEAgLTYyLDYgKzgxLDE1IEBAXFxuIFxcdCNkZWZpbmUgQVhfUlhfQ1RMX1BST1xcdFxcdDB4MDAwMVxcbiBcXHQjZGVmaW5lIEFYX1JYX0NUTF9TVE9QXFx0XFx0MHgwMDAwXFxuIFxcbisjZGVmaW5lIEFYODgxNzlBX0VUSF9UWF9HQVBcXHRcXHRcXHQweDBEXFxuK1xcbisjZGVmaW5lIEFYODgxNzlBX0JGTV9EQVRBXFx0XFx0XFx0MHgwRVxcbitcXHQjZGVmaW5lIEFYX1RYX1FVRVVFX0NGR1xcdFxcdDB4MDJcXG4rXFx0I2RlZmluZSBBWF9UWF9RVUVVRV9TRVRcXHRcXHQweDA4XFxuK1xcdCNkZWZpbmUgQVhfVFhfUTFfQUhCX0ZDX0VOXFx0MHgxMFxcbitcXHQjZGVmaW5lIEFYX1RYX1EyX0FIQl9GQ19FTlxcdDB4MjBcXG4rXFx0I2RlZmluZSBBWF9YR01JSV9FTlxcdFxcdDB4ODBcXG4rXFxuICNkZWZpbmUgQVhfTk9ERV9JRFxcdFxcdFxcdFxcdDB4MTBcXG4gI2RlZmluZSBBWF9NVUxGTFRBUllcXHRcXHRcXHRcXHQweDE2XFxuIFxcbkBAIC05MSw3ICsxMTksMjEgQEBcXG4gXFx0I2RlZmluZSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkxcXHQweDAwMjBcXG4gXFx0I2RlZmluZSBBWF9QSFlQV1JfUlNUQ1RMX0FUXFx0MHgxMDAwXFxuIFxcbisjZGVmaW5lIEFYODgxNzlBX1ZMQU5fSURfQUREUkVTU1xcdFxcdDB4MkFcXG4rXFxuKyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MXFx0XFx0MHgyQlxcbitcXHQjZGVmaW5lIEFYX1ZMQU5fQ09OVFJPTF9XRVxcdDB4MDAwMVxcbitcXHQjZGVmaW5lIEFYX1ZMQU5fQ09OVFJPTF9SRFxcdDB4MDAwMlxcbitcXHQjZGVmaW5lIEFYX1ZMQU5fQ09OVFJPTF9WU09cXHQweDAwMTBcXG4rXFx0I2RlZmluZSBBWF9WTEFOX0NPTlRST0xfVkZFXFx0MHgwMDIwXFxuK1xcbisjZGVmaW5lIEFYODgxNzlBX1ZMQU5fSURfREFUQTBcXHRcXHRcXHQweDJDXFxuKyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMVxcdFxcdFxcdDB4MkRcXG4rXFxuICNkZWZpbmUgQVhfUlhfQlVMS0lOX1FDVFJMXFx0XFx0XFx0MHgyZVxcbitcXG4rI2RlZmluZSBBWF9HUEhZX0VFRV9DVFJMXFx0XFx0XFx0MHgwMVxcbitcXG4gI2RlZmluZSBBWF9DTEtfU0VMRUNUXFx0XFx0XFx0XFx0MHgzM1xcbiBcXHQjZGVmaW5lIEFYX0NMS19TRUxFQ1RfQkNTXFx0MHgwMVxcbiBcXHQjZGVmaW5lIEFYX0NMS19TRUxFQ1RfQUNTXFx0MHgwMlxcbkBAIC0xMTEsNyArMTUzLDUxIEBAXFxuIFxcdCNkZWZpbmUgQVhfVFhDT0VfVENQVjZcXHRcXHQweDIwXFxuIFxcdCNkZWZpbmUgQVhfVFhDT0VfVURQVjZcXHRcXHQweDQwXFxuIFxcbisjZGVmaW5lIEFYODgxNzlBX01BQ19CTV9JTlRfTUFTS1xcdFxcdDB4NDFcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfQk1fUlhfRE1BX0NUTFxcdFxcdDB4NDNcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfQk1fVFhfRE1BX0NUTFxcdFxcdDB4NDZcXG4rXFxuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DRENcXHRcXHQweDZEXFxuK1xcdCNkZWZpbmUgQVhfTFNPRkNfV0NOVF83X0FDQ0VTU1xcdDB4MDNcXG4rXFx0I2RlZmluZSBBWF9HTUlJX0NSQ19BUFBFTkRcXHQweDEwXFxuK1xcbiAjZGVmaW5lIEFYX0xFRENUUkxcXHRcXHRcXHRcXHQweDczXFxuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX0FSQ19DVFJMXFx0XFx0XFx0MHg5RVxcbisjZGVmaW5lIEFYODgxNzlBX01BQ19TV1BfQ1RSTFxcdFxcdFxcdDB4QjFcXG4rXFxuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX1RYX1BBVVNFXFx0XFx0XFx0MHhCMlxcbitcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfQ0RDX0RFTEFZX1RYXFx0XFx0MHhCNVxcbitcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfUEFUSFxcdFxcdFxcdDB4QjdcXG4rXFx0I2RlZmluZSBBWF9NQUNfUlhfUEFUSF9SRUFEWVxcdDB4MDFcXG4rXFx0I2RlZmluZSBBWF9NQUNfVFhfUEFUSF9SRUFEWVxcdDB4MDJcXG4rXFxuKyNkZWZpbmUgQVg4ODE3OUFfTkVXX1BBVVNFX0NUUkxcXHRcXHRcXHQweEI4XFxuK1xcdCNkZWZpbmUgQVhfTkVXX1BBVVNFX0VOXFx0XFx0MHgwMVxcbitcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfQlVMS19PVVRfQ1RSTFxcdFxcdDB4QjlcXG4rXFx0I2RlZmluZSBBWF9NQUNfRUZGX0VOXFx0XFx0MHgwMlxcbitcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfUlhfREFUQV9DRENfQ05UXFx0XFx0MHhDMFxcbitcXHQjZGVmaW5lIEFYX01BQ19MU09fRVJSX0VOXFx0MHgwNFxcbitcXHQjZGVmaW5lIEFYX01BQ19NSVFGRkNUUkxfRk9STUFUXFx0MHgxMFxcbitcXHQjZGVmaW5lIEFYX01BQ19NSVFGRkNUUkxfRFJPUF9DUkMgMHgyMFxcbitcXG4rI2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNIX0RFTEFZXFx0KDVVTCBcXHUwMDNjXFx1MDAzYyA4KVxcbisjZGVmaW5lIEFYODgxNzlBX0FVVE9ERVRBQ0hfRU5cXHRcXHQxXFxuK1xcbisjZGVmaW5lIEFYODgxNzlBX01BQ19MU09fRU5IQU5DRV9DVFJMXFx0XFx0MHhDM1xcbitcXHQjZGVmaW5lIEFYX0xTT19FTkhBTkNFX0VOXFx0MHgwMVxcbitcXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfVFhfSERSX0NLU1VNXFx0XFx0MHhDQ1xcbisjZGVmaW5lIEFYODgxNzlBX0VQNV9FSFJcXHRcXHRcXHQweEY5XFxuK1xcbisjZGVmaW5lIEFYX1BIWV9QT1dFUlxcdFxcdFxcdFxcdDB4MDJcXG4rXFxuKyNkZWZpbmUgRVBIWV9MT1dfUE9XRVJfRU5cXHRcXHRcXHQweDAxXFxuKyNkZWZpbmUgUzVfV09MX0VOXFx0XFx0XFx0XFx0MHgwNFxcbisjZGVmaW5lIFM1X1dPTF9MT1dfUE9XRVJcXHRcXHRcXHQweDIwXFxuIFxcbiAjZGVmaW5lIEdNSUlfUEhZX1BIWVNSXFx0XFx0XFx0XFx0MHgxMVxcbiBcXHQjZGVmaW5lIEdNSUlfUEhZX1BIWVNSX1NNQVNLXFx0MHhjMDAwXFxuQEAgLTE2NCw4ICsyNTAsNTYgQEBcXG4gXFx0I2RlZmluZSBHTUlJX1BIWV9QR1NFTF9QQUdFM1xcdDB4MDAwM1xcbiBcXHQjZGVmaW5lIEdNSUlfUEhZX1BHU0VMX1BBR0U1XFx0MHgwMDA1XFxuIFxcbisvKiBUWCBEZXNjcmlwdG9yICovXFxuKyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfTEVOX01BU0tcXHRcXHQweDFGRkZGRlxcbisjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX0RST1BfUEFERFxcdEJJVCgyOClcXG4rI2RlZmluZSBBWDE3OUFfVFhfREVTQ19WTEFOXFx0XFx0QklUKDI5KVxcbisjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX01TU19NQVNLXFx0XFx0MHg3RkZGXFxuKyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfTVNTX1NISUZUXFx0MHgyMFxcbisjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX1ZMQU5fTUFTS1xcdDB4RkZGRlxcbisjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX1ZMQU5fU0hJRlRcXHQweDMwXFxuK1xcbisvKiBSWCBQYWNrZXQgRGVzY3JpcHRvciAqL1xcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9FUlJcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTDNfRVJSXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0w0X1RZUEVfTUFTS1xcdDB4MUNcXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTDRfVURQXFx0XFx0MHgwNFxcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9UQ1BcXHRcXHQweDEwXFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX1RZUEVfTUFTS1xcdDB4NjBcXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTDNfSVBcXHRcXHQweDIwXFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0lQNlxcdFxcdDB4NDBcXG4rXFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX1ZMQU5cXHRcXHRCSVQoMTApXFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX1JYX09LXFx0XFx0QklUKDExKVxcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9EUk9QXFx0XFx0QklUKDMxKVxcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9MRU5fTUFTS1xcdDB4N0ZGRjAwMDBcXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTEVOX1NISUZUXFx0MHgxMFxcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9WTEFOX1NISUZUXFx0MHgyMFxcbitcXG4rLyogUlggRGVzY3JpcHRvciBoZWFkZXIgKi9cXG4rI2RlZmluZSBBWDE3OUFfUlhfREhfUEtUX0NOVF9NQVNLXFx0XFx0MHgxRkZGXFxuKyNkZWZpbmUgQVgxNzlBX1JYX0RIX0RFU0NfT0ZGU0VUX01BU0tcXHQweEZGRkZFMDAwXFxuKyNkZWZpbmUgQVgxNzlBX1JYX0RIX0RFU0NfT0ZGU0VUX1NISUZUXFx0MHgwRFxcbitcXG4rI2RlZmluZSBBWDE3OUFfUlhfSFdfUEFEXFx0XFx0XFx0MHgwMlxcbitcXG4gc3RhdGljIGludCBheDg4MTc5X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldik7XFxuIFxcbitlbnVtIGF4X2V0aGVyX2xpbmtfc3BlZWQge1xcbitcXHRFVEhFUl9MSU5LX05PTkUgPSAwLFxcbitcXHRFVEhFUl9MSU5LXzEwICAgPSAxLFxcbitcXHRFVEhFUl9MSU5LXzEwMCAgPSAyLFxcbitcXHRFVEhFUl9MSU5LXzEwMDAgPSAzLFxcbitcXHRFVEhFUl9MSU5LXzI1MDAgPSA0LFxcbit9O1xcbitcXG4rZW51bSBheF9jaGlwX3ZlcnNpb24ge1xcbitcXHRBWF9WRVJTSU9OX0lOVkFMSURcXHRcXHQ9IDB4MCxcXG4rXFx0QVhfVkVSU0lPTl9BWDg4MTc5XFx0XFx0PSAweDQsXFxuK1xcdEFYX1ZFUlNJT05fQVg4ODE3OUFcXHRcXHQ9IDB4NixcXHQvKiBBbHNvIEFYODg3NzJEICovXFxuK1xcdEFYX1ZFUlNJT05fQVg4ODI3OVxcdFxcdD0gMHg3LFxcbit9O1xcbitcXG4gc3RydWN0IGF4ODgxNzlfZGF0YSB7XFxuIFxcdHU4ICBlZWVfZW5hYmxlZDtcXG4gXFx0dTggIGVlZV9hY3RpdmU7XFxuQEAgLTE3NCw2ICszMDgsMTYgQEAgc3RydWN0IGF4ODgxNzlfZGF0YSB7XFxuIFxcdHUzMiB3b2xfc3VwcG9ydGVkO1xcbiBcXHR1MzIgd29sb3B0cztcXG4gXFx0dTggZGlzY29ubmVjdGluZztcXG4rXFx0dTggY2hpcF92ZXJzaW9uO1xcbitcXHR1OCBmd192ZXJzaW9uWzRdO1xcbitcXHR1OCBpc19heDg4NzcyZDtcXG4rXFx0dTggaXBfYWxpZ247XFxuK1xcdHU4IGxpbms7XFxuK1xcdHU4IHNwZWVkO1xcbitcXHR1OCBmdWxsX2R1cGxleDtcXG4rXFx0dTggcnhfY2hlY2tzdW07XFxuK1xcdHU4IGVlcHJvbV9yZWFkX2NtZDtcXG4rXFx0dTE2IGVlcHJvbV9ibG9jaztcXG4gfTtcXG4gXFxuIHN0cnVjdCBheDg4MTc5X2ludF9kYXRhIHtcXG5AQCAtMTgxLDE1ICszMjUsNDggQEAgc3RydWN0IGF4ODgxNzlfaW50X2RhdGEge1xcbiBcXHRfX2xlMzIgaW50ZGF0YTI7XFxuIH07XFxuIFxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHtcXG4rc3RydWN0IGF4X2J1bGtpbl9zZXR0aW5ncyB7XFxuIFxcdHVuc2lnbmVkIGNoYXIgY3RybCwgdGltZXJfbCwgdGltZXJfaCwgc2l6ZSwgaWZnO1xcbi19IEFYODgxNzlfQlVMS0lOX1NJWkVbXSA9XFx0e1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODE3OV9CVUxLSU5fU0laRVtdID1cXHR7XFxuIFxcdHs3LCAweDRmLCAwLFxcdDB4MTIsIDB4ZmZ9LFxcbiBcXHR7NywgMHgyMCwgMyxcXHQweDE2LCAweGZmfSxcXG4gXFx0ezcsIDB4YWUsIDcsXFx0MHgxOCwgMHhmZn0sXFxuIFxcdHs3LCAweGNjLCAweDRjLCAweDE4LCA4fSxcXG4gfTtcXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIEFYODgxNzlBX0JVTEtJTl9TSVpFW10gPSB7XFxuK1xcdHs1LCAweDdCLCAweDAwLFxcdDB4MTcsIDB4MEZ9LFxcdC8qIDFHLCBTUyAqL1xcbitcXHR7NSwgMHhDMCwgMHgwMixcXHQweDA2LCAweDBGfSxcXHQvKiAxRywgSFMgKi9cXG4rXFx0ezcsIDB4RjAsIDB4MDAsXFx0MHgwQywgMHgwRn0sXFx0LyogMTAwTSwgRnVsbCwgU1MgKi9cXG4rXFx0ezYsIDB4MDAsIDB4MDAsXFx0MHgwNiwgMHgwRn0sXFx0LyogMTAwTSwgSGFsZiwgU1MgKi9cXG4rXFx0ezUsIDB4QzAsIDB4MDQsXFx0MHgwNiwgMHgwRn0sXFx0LyogMTAwTSwgRnVsbCwgSFMgKi9cXG4rXFx0ezcsIDB4QzAsIDB4MDQsXFx0MHgwNiwgMHgwRn0sXFx0LyogMTAwTSwgSGFsZiwgSFMgKi9cXG4rXFx0ezcsIDB4MDAsIDB4MDAsXFx0MHgwMywgMHgzRn0sXFx0LyogRlMgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIEFYODg3NzJEX0JVTEtJTl9TSVpFW10gPSB7XFxuK1xcdHswLCAweDAwLCAweDAwLFxcdDB4MDAsIDB4MDB9LFxcdC8qIDFHLCBTUyAodW51c2VkKSAqL1xcbitcXHR7MCwgMHgwMCwgMHgwMCxcXHQweDAwLCAweDAwfSxcXHQvKiAxRywgSFMgKHVudXNlZCkgKi9cXG4rXFx0ezAsIDB4MDAsIDB4MDAsXFx0MHgwMCwgMHgwMH0sXFx0LyogMTAwTSwgRnVsbCwgU1MgKHVudXNlZCkgKi9cXG4rXFx0ezAsIDB4MDAsIDB4MDAsXFx0MHgwMCwgMHgwMH0sXFx0LyogMTAwTSwgSGFsZiwgU1MgKHVudXNlZCkgKi9cXG4rXFx0ezUsIDB4QzAsIDB4MDQsXFx0MHgwNiwgMHgwRn0sXFx0LyogMTAwTSwgRnVsbCwgSFMgKi9cXG4rXFx0ezcsIDB4QzAsIDB4MDQsXFx0MHgwNiwgMHgwRn0sXFx0LyogMTAwTSwgSGFsZiwgSFMgKi9cXG4rXFx0ezcsIDB4MDAsIDB4MDAsXFx0MHgwMywgMHgzRn0sXFx0LyogRlMgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIEFYODgyNzlfQlVMS0lOX1NJWkVbXSA9IHtcXG4rXFx0ezUsIDB4MTAsIDB4MDEsXFx0MHgxMSwgMHgwRn0sXFx0LyogMi41RyAqL1xcbitcXHR7NywgMHhCMywgMHgwMSxcXHQweDExLCAweDBGfSxcXHQvKiAxRywgU1MgKi9cXG4rXFx0ezcsIDB4QzAsIDB4MDIsXFx0MHgwNiwgMHgwRn0sXFx0LyogMUcsIEhTICovXFxuK1xcdHs3LCAweDgwLCAweDAxLFxcdDB4MDMsIDB4MEZ9LFxcdC8qIDEwME0sIEZ1bGwsIFNTICovXFxuK1xcdHs3LCAweDgwLCAweDAxLFxcdDB4MDMsIDB4MEZ9LFxcdC8qIDEwME0sIEhhbGYsIFNTICovXFxuK1xcdHs3LCAweDgwLCAweDAxLFxcdDB4MDMsIDB4MEZ9LFxcdC8qIDEwME0sIEZ1bGwsIEhTICovXFxuK1xcdHs3LCAweDgwLCAweDAxLFxcdDB4MDMsIDB4MEZ9LFxcdC8qIDEwME0sIEhhbGYsIEhTICovXFxuK1xcdHs3LCAweDAwLCAweDAwLFxcdDB4MDMsIDB4M0Z9LFxcdC8qIEZTICovXFxuK307XFxuK1xcbiBzdGF0aWMgdm9pZCBheDg4MTc5X3NldF9wbV9tb2RlKHN0cnVjdCB1c2JuZXQgKmRldiwgYm9vbCBwbV9tb2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbkBAIC0zMTMsNiArNDkwLDcgQEAgc3RhdGljIGludCBheDg4MTc5X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXFxuIFxcbiBzdGF0aWMgdm9pZCBheDg4MTc5X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcXG4ge1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gXFx0c3RydWN0IGF4ODgxNzlfaW50X2RhdGEgKmV2ZW50O1xcbiBcXHR1MzIgbGluaztcXG4gXFxuQEAgLTMyMyw2ICs1MDEsOSBAQCBzdGF0aWMgdm9pZCBheDg4MTc5X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcXG4gXFx0bGUzMl90b19jcHVzKCh2b2lkICopXFx1MDAyNmV2ZW50LVxcdTAwM2VpbnRkYXRhMSk7XFxuIFxcbiBcXHRsaW5rID0gKCgoX19mb3JjZSB1MzIpZXZlbnQtXFx1MDAzZWludGRhdGExKSBcXHUwMDI2IEFYX0lOVF9QUExTX0xJTkspIFxcdTAwM2VcXHUwMDNlIDE2O1xcbitcXHRkYXRhLVxcdTAwM2VzcGVlZCA9ICgoKF9fZm9yY2UgdTMyKWV2ZW50LVxcdTAwM2VpbnRkYXRhMSkgXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweDc7XFxuK1xcdGRhdGEtXFx1MDAzZWZ1bGxfZHVwbGV4ID0gKCgoX19mb3JjZSB1MzIpZXZlbnQtXFx1MDAzZWludGRhdGExKSBcXHUwMDNlXFx1MDAzZSAxMikgXFx1MDAyNiAweDE7XFxuK1xcdGRhdGEtXFx1MDAzZWxpbmsgPSBsaW5rO1xcbiBcXG4gXFx0aWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2LVxcdTAwM2VuZXQpICE9IGxpbmspIHtcXG4gXFx0XFx0dXNibmV0X2xpbmtfY2hhbmdlKGRldiwgbGluaywgMSk7XFxuQEAgLTQwMyw2ICs1ODQsMzIgQEAgYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHBydGFkLCB1MTYgZGV2YWQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGF4X3JlYWRfbW1kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IGRldl9hZGRyLCB1MTYgcmVnKVxcbit7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbitcXHR1MTYgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XFxuK1xcdFxcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfQ0xBVVNFNDUsIGRldl9hZGRyLCByZWcsIDIsIFxcdTAwMjZyZXMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgcmVnLCBkZXZfYWRkcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYXhfd3JpdGVfbW1kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IGRldl9hZGRyLCB1MTYgcmVnLCB1MTYgZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSlcXG4rXFx0XFx0cmV0dXJuIGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfUEhZX0NMQVVTRTQ1LCBkZXZfYWRkciwgcmVnLCAyLCBcXHUwMDI2ZGF0YSk7XFxuK1xcbitcXHRyZXR1cm4gYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KGRldiwgcmVnLCBkZXZfYWRkciwgZGF0YSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcbkBAIC00MTQsNyArNjIxLDYgQEAgc3RhdGljIGludCBheDg4MTc5X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKVxcbiBcXG4gXFx0dXNibmV0X3N1c3BlbmQoaW50ZiwgbWVzc2FnZSk7XFxuIFxcbi1cXHQvKiBFbmFibGUgV29MICovXFxuIFxcdGlmIChwcml2LVxcdTAwM2V3b2xvcHRzKSB7XFxuIFxcdFxcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NT05JVE9SX01PRCxcXG4gXFx0XFx0XFx0XFx0IDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG5AQCAtNDI1LDYgKzYzMSwyNiBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXFxuIFxcbiBcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELFxcbiBcXHRcXHRcXHRcXHQgIDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xcbitcXHRcXHRcXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcXHUwMDI2dG1wMTYpO1xcbitcXHRcXHRcXHR0bXAxNiB8PSBBWF9NRURJVU1fUkVDRUlWRV9FTjtcXG4rXFx0XFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KVxcbitcXHRcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1dBS0VVUF9TRVRUSU5HLCA4LFxcbitcXHRcXHRcXHRcXHRcXHQgIEVQSFlfTE9XX1BPV0VSX0VOIHwgUzVfV09MX0VOXFxuK1xcdFxcdFxcdFxcdFxcdCAgfCBTNV9XT0xfTE9XX1BPV0VSIHwgMHg4MDAwLCAwLCBOVUxMKTtcXG4rXFxuK1xcdH0gZWxzZSBpZiAocHJpdi1cXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xcbitcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1dBS0VVUF9TRVRUSU5HLCA4LCAweDgwMDAsIDAsIE5VTEwpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9XQUtFVVBfU0VUVElORywgMCwgRVBIWV9MT1dfUE9XRVJfRU4sIDAsIE5VTEwpO1xcbitcXHRcXHRheDg4MTc5X3NldF9wbV9tb2RlKGRldiwgZmFsc2UpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogRGlzYWJsZSBSWCBwYXRoICovXFxuQEAgLTQzNiwxMSArNjYyLDExIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcXG4gXFxuIFxcdC8qIEZvcmNlIGJ1bGstaW4gemVybyBsZW5ndGggKi9cXG4gXFx0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsXFxuLVxcdFxcdFxcdCAyLCAyLCBcXHUwMDI2dG1wMTYpO1xcbitcXHRcXHRcXHQyLCAyLCBcXHUwMDI2dG1wMTYpO1xcbiBcXG4gXFx0dG1wMTYgfD0gQVhfUEhZUFdSX1JTVENUTF9CWiB8IEFYX1BIWVBXUl9SU1RDVExfSVBSTDtcXG4gXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLFxcbi1cXHRcXHRcXHQgIDIsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdFxcdFxcdDIsIDIsIFxcdTAwMjZ0bXAxNik7XFxuIFxcbiBcXHQvKiBjaGFuZ2UgY2xvY2sgKi9cXG4gXFx0dG1wOCA9IDA7XFxuQEAgLTQ1NiwxMiArNjgyLDE5IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcXG4gfVxcbiBcXG4gLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgYXV0b2RldGFjaCBmdW5jdGlvbi4gKi9cXG4tLyogVGhpcyBmdW5jdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IG9mZnNldCAweDQzIG9mIEVFUFJPTSAqL1xcbisvKiBUaGlzIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYnkgb2Zmc2V0IDB4NDMgb2YgRUVQUk9NIGZvciB0aGUgQVg4ODE3OSAqL1xcbiBzdGF0aWMgaW50IGF4ODgxNzlfYXV0b19kZXRhY2goc3RydWN0IHVzYm5ldCAqZGV2KVxcbiB7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiBcXHR1MTYgdG1wMTY7XFxuIFxcdHU4IHRtcDg7XFxuIFxcbitcXHRpZiAocHJpdi1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcXG4rXFx0XFx0dG1wMTYgPSBBWDg4MTc5QV9BVVRPREVUQUNIX0RFTEFZO1xcbitcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX0FVVE9ERVRBQ0gsIHRtcDE2LCAwLCAwLCBOVUxMKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX0VFUFJPTSwgMHg0MywgMSwgMiwgXFx1MDAyNnRtcDE2KSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG5AQCAtNDg0LDExICs3MTcsMzEgQEAgc3RhdGljIGludCBheDg4MTc5X2F1dG9fZGV0YWNoKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gc3RhdGljIGludCBheDg4MTc5X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhO1xcbitcXHR1OCByZWc4O1xcbiBcXG4rXFx0YXgxNzlfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuIFxcdGF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCB0cnVlKTtcXG4gXFxuIFxcdHVzYm5ldF9saW5rX2NoYW5nZShkZXYsIDAsIDApO1xcbiBcXG4rXFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XFxuK1xcdFxcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFxcdTAwMjZyZWc4KTtcXG4rXFx0XFx0aWYgKCEocmVnOCBcXHUwMDI2IEFYX1BIWV9QT1dFUikpIHtcXG4rXFx0XFx0XFx0cmVnOCA9IEFYX1BIWV9QT1dFUjtcXG4rXFx0XFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFxcdTAwMjZyZWc4KTtcXG4rXFx0XFx0XFx0bXNsZWVwKDI1MCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9GV19NT0RFLCBBWF9GV19NT0RFXzE3OUEsIDAsIDAsIE5VTEwpO1xcbitcXG4rXFx0XFx0LyogTm93LCB0aGF0IEFYX0ZXX01PREVfMTc5QSBpcyBlbmFibGVkLCB0aGUgUEhZIG5lZWRzIGEgcG93ZXItY3ljbGUuXFxuK1xcdFxcdCAqIFBIWS1wb3dlciBpcyByZS1lbmFibGVkIGluIGF4ODgxNzlfcmVzZXQoKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVnOCA9IDA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVg4ODE3OUFfUEhZX1BPV0VSLCAwLCAwLCAxLCBcXHUwMDI2cmVnOCk7XFxuK1xcdFxcdG1zbGVlcCgyNTApO1xcbitcXHR9XFxuK1xcbiBcXHRheDg4MTc5X3Jlc2V0KGRldik7XFxuIFxcbiBcXHRheDg4MTc5X3NldF9wbV9tb2RlKGRldiwgZmFsc2UpO1xcbkBAIC01MTAsNiArNzYzLDIxIEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gXFx0dXNibmV0X2Rpc2Nvbm5lY3QoaW50Zik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGF4ODgxNzlfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFxuK1xcdC8qIEluaGVyaXQgc3RhbmRhcmQgZGV2aWNlIGluZm8gKi9cXG4rXFx0dXNibmV0X2dldF9kcnZpbmZvKG5ldCwgaW5mbyk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzbnByaW50ZihpbmZvLVxcdTAwM2Vmd192ZXJzaW9uLCBzaXplb2YoaW5mby1cXHUwMDNlZndfdmVyc2lvbiksIFxcXCIlZC4lZC4lZC4lZFxcXCIsXFxuK1xcdFxcdCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uWzBdLCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uWzFdLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvblsyXSwgcHJpdi1cXHUwMDNlZndfdmVyc2lvblszXSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkXFxuIGF4ODgxNzlfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKVxcbiB7XFxuQEAgLTUzNiw0MSArODA0LDc0IEBAIGF4ODgxNzlfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKVxcbiBcXG4gc3RhdGljIGludCBheDg4MTc5X2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuIHtcXG4tXFx0cmV0dXJuIEFYX0VFUFJPTV9MRU47XFxuK1xcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGE7XFxuK1xcbitcXHRheDE3OV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKVxcbitcXHRcXHRyZXR1cm4gQVhfRUVQUk9NX0xFTjtcXG4rXFx0ZWxzZSBpZiAoYXgxNzlfZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSlcXG4rXFx0XFx0cmV0dXJuIEFYODgyNzlfRUVQUk9NX0xFTjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXR1cm4gQVg4ODE3OUFfRUVQUk9NX0xFTjtcXG4gfVxcbiBcXG4tc3RhdGljIGludFxcbi1heDg4MTc5X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXFxuLVxcdFxcdCAgIHU4ICpkYXRhKVxcbitzdGF0aWMgdm9pZFxcbitheDg4MTc5X2VlcHJvbV9hY2Nlc3NfcGFyYW1zKHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEsIGludCBpLCB1MTYgKnZhbHVlLCB1MTYgKmlkeClcXG4re1xcbitcXHQvKiBBWDg4MTc5IGhhcyBhIHdvcmQtYWRkcmVzc2FibGUgRUVQUk9NXFxuK1xcdCAqIEFYODgxNzlBIHVzZXMgRUZVU0VTIHdpdGggMjAgYnl0ZXMgbGVuZ3RoXFxuK1xcdCAqIEFYODgyNzkgaGFzIGFuIEVFUFJPTSBhZGRyZXNzYWJsZSBpbiAyNTYgYnl0ZSBibG9ja3NcXG4rXFx0ICovXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XFxuK1xcdFxcdCp2YWx1ZSA9IGk7XFxuK1xcdFxcdCppZHggPSAxO1xcbitcXHR9IGVsc2UgaWYgKGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcXG4rXFx0XFx0KnZhbHVlID0gKGkgKiBheDE3OV9kYXRhLVxcdTAwM2VlZXByb21fYmxvY2spIFxcdTAwM2VcXHUwMDNlIDE2O1xcbitcXHRcXHQqaWR4ID0gKGkgKiBheDE3OV9kYXRhLVxcdTAwM2VlZXByb21fYmxvY2spIFxcdTAwMjYgMHhmZmZmO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQqdmFsdWUgPSBpIFxcdTAwM2NcXHUwMDNjIDQ7XFxuK1xcdFxcdCppZHggPSAwO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYXg4ODE3OV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbi1cXHR1MTYgKmVlcHJvbV9idWZmO1xcbi1cXHRpbnQgZmlyc3Rfd29yZCwgbGFzdF93b3JkO1xcbi1cXHRpbnQgaSwgcmV0O1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhO1xcbitcXHRpbnQgZmlyc3QsIGxhc3QsIGksIHJldDtcXG4rXFx0dTggKmVlcHJvbV9idWZmO1xcbitcXG4rXFx0YXgxNzlfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuIFxcbiBcXHRpZiAoZWVwcm9tLVxcdTAwM2VsZW4gPT0gMClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRlZXByb20tXFx1MDAzZW1hZ2ljID0gQVg4ODE3OV9FRVBST01fTUFHSUM7XFxuIFxcbi1cXHRmaXJzdF93b3JkID0gZWVwcm9tLVxcdTAwM2VvZmZzZXQgXFx1MDAzZVxcdTAwM2UgMTtcXG4tXFx0bGFzdF93b3JkID0gKGVlcHJvbS1cXHUwMDNlb2Zmc2V0ICsgZWVwcm9tLVxcdTAwM2VsZW4gLSAxKSBcXHUwMDNlXFx1MDAzZSAxO1xcbi1cXHRlZXByb21fYnVmZiA9IGttYWxsb2NfYXJyYXkobGFzdF93b3JkIC0gZmlyc3Rfd29yZCArIDEsIHNpemVvZih1MTYpLFxcbi1cXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdGZpcnN0ID0gZWVwcm9tLVxcdTAwM2VvZmZzZXQgLyBheDE3OV9kYXRhLVxcdTAwM2VlZXByb21fYmxvY2s7XFxuK1xcdGxhc3QgPSAoZWVwcm9tLVxcdTAwM2VvZmZzZXQgKyBlZXByb20tXFx1MDAzZWxlbiAtIDEpIC8gYXgxNzlfZGF0YS1cXHUwMDNlZWVwcm9tX2Jsb2NrO1xcbitcXG4rXFx0ZWVwcm9tX2J1ZmYgPSBremFsbG9jKChsYXN0IC0gZmlyc3QgKyAxKSAqIGF4MTc5X2RhdGEtXFx1MDAzZWVlcHJvbV9ibG9jaywgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghZWVwcm9tX2J1ZmYpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0LyogYXg4ODE3OS8xNzhBIHJldHVybnMgMiBieXRlcyBmcm9tIGVlcHJvbSBvbiByZWFkICovXFxuLVxcdGZvciAoaSA9IGZpcnN0X3dvcmQ7IGkgXFx1MDAzYz0gbGFzdF93b3JkOyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gX19heDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX0VFUFJPTSwgaSwgMSwgMixcXG4tXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZlZXByb21fYnVmZltpIC0gZmlyc3Rfd29yZF0pO1xcbitcXHRmb3IgKGkgPSBmaXJzdDsgaSBcXHUwMDNjPSBsYXN0OyBpKyspIHtcXG4rXFx0XFx0dTE2IHZhbHVlLCBpZHg7XFxuK1xcbitcXHRcXHRheDg4MTc5X2VlcHJvbV9hY2Nlc3NfcGFyYW1zKGF4MTc5X2RhdGEsIGksIFxcdTAwMjZ2YWx1ZSwgXFx1MDAyNmlkeCk7XFxuK1xcdFxcdHJldCA9IF9fYXg4ODE3OV9yZWFkX2NtZChkZXYsIGF4MTc5X2RhdGEtXFx1MDAzZWVlcHJvbV9yZWFkX2NtZCxcXG4rXFx0XFx0XFx0XFx0XFx0IHZhbHVlLCBpZHgsIGF4MTc5X2RhdGEtXFx1MDAzZWVlcHJvbV9ibG9jayxcXG4rXFx0XFx0XFx0XFx0XFx0IGVlcHJvbV9idWZmICsgKGkgLSBmaXJzdCkgKiBheDE3OV9kYXRhLVxcdTAwM2VlZXByb21fYmxvY2spO1xcbitcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0a2ZyZWUoZWVwcm9tX2J1ZmYpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRtZW1jcHkoZGF0YSwgKHU4ICopZWVwcm9tX2J1ZmYgKyAoZWVwcm9tLVxcdTAwM2VvZmZzZXQgXFx1MDAyNiAxKSwgZWVwcm9tLVxcdTAwM2VsZW4pO1xcbitcXHRtZW1jcHkoZGF0YSwgZWVwcm9tX2J1ZmYgKyBlZXByb20tXFx1MDAzZW9mZnNldCAlIGF4MTc5X2RhdGEtXFx1MDAzZWVlcHJvbV9ibG9jaywgZWVwcm9tLVxcdTAwM2VsZW4pO1xcbiBcXHRrZnJlZShlZXByb21fYnVmZik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTU4MCwxMiArODgxLDE3IEBAIGF4ODgxNzlfc2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSxcXG4gXFx0XFx0ICAgdTggKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG4rXFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTtcXG4gXFx0dTE2ICplZXByb21fYnVmZjtcXG4gXFx0aW50IGZpcnN0X3dvcmQ7XFxuIFxcdGludCBsYXN0X3dvcmQ7XFxuIFxcdGludCByZXQ7XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0YXgxNzlfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4gXFx0bmV0ZGV2X2RiZyhuZXQsIFxcXCJ3cml0ZSBFRVBST00gbGVuICVkLCBvZmZzZXQgJWQsIG1hZ2ljIDB4JXhcXFxcblxcXCIsXFxuIFxcdFxcdCAgIGVlcHJvbS1cXHUwMDNlbGVuLCBlZXByb20tXFx1MDAzZW9mZnNldCwgZWVwcm9tLVxcdTAwM2VtYWdpYyk7XFxuIFxcbkBAIC02NTEsMTIgKzk1NywzOSBAQCBheDg4MTc5X3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuIHtcXG4gXFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG4rXFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YTtcXG4rXFx0aW50IHY7XFxuK1xcbitcXHRkYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gXFxuIFxcdG1paV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhcXHUwMDI2ZGV2LVxcdTAwM2VtaWksIGNtZCk7XFxuIFxcbitcXHRpZiAoZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xcbitcXHRcXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0XFx0IGNtZC1cXHUwMDNlbGlua19tb2Rlcy5zdXBwb3J0ZWQpO1xcbitcXG4rXFx0XFx0diA9IGF4ODgxNzlfbWRpb19yZWFkKGRldi1cXHUwMDNlbmV0LCBkZXYtXFx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xcbitcXHRcXHRpZiAodiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHYgXFx1MDAyNiBBRFZFUlRJU0VfUkVTVilcXG4rXFx0XFx0XFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXFxuK1xcdFxcdFxcdFxcdFxcdCBjbWQtXFx1MDAzZWxpbmtfbW9kZXMuYWR2ZXJ0aXNpbmcpO1xcbitcXG4rXFx0XFx0diA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XFxuK1xcdFxcdGlmIChkYXRhLVxcdTAwM2VzcGVlZCA9PSBFVEhFUl9MSU5LXzI1MDApIHtcXG4rXFx0XFx0XFx0Y21kLVxcdTAwM2ViYXNlLnNwZWVkID0gU1BFRURfMjUwMDtcXG4rXFx0XFx0XFx0LyogTURJT19BTl8xMEdCVF9TVEFUX0xQMl81RyBpcyBicm9rZW4sIGJ1dCB3ZSBjYW4gZGVkdWNlIHRoYXRcXG4rXFx0XFx0XFx0ICogdGhlIGxpbmstcGFydG5lciBhZHZlcnRpc2VkIDI1MDBNIGlmIHJlbW90ZWx5IEFOIHN1Y2NjZWRlZFxcbitcXHRcXHRcXHQgKiBmb3IgbGluayBzcGVlZCBcXHUwMDNlIDEwMDBNIGFuZCB3ZSBsb2NhbGx5IGhhdmUgYSBsaW5rIHNwZWVkIG9mXFxuK1xcdFxcdFxcdCAqIDI1MDBNXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAodiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHYgXFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfUkVNT0spXFxuK1xcdFxcdFxcdFxcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY21kLVxcdTAwM2VsaW5rX21vZGVzLmxwX2FkdmVydGlzaW5nKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNjY0LDM0ICs5OTcsMTI4IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhO1xcbitcXHRpbnQgdjtcXG4rXFxuK1xcdGRhdGEgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbitcXG4rXFx0LyogbWlpX2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzIGhhbmRsZXMgdW5rbm93biBiaXRzIGluIE1JSV9BRFZFUlRJU0VcXG4rXFx0ICogdHJhbnNwYXJlbnRseSwgc28gZm9yIHRoZSAyLjVHQml0IGxpbmsgc3BlZWQgb2YgdGhlIEFYX1ZFUlNJT05fQVg4ODI3OVxcbitcXHQgKiB3ZSBqdXN0IHNldCB1cCBBRFZFUlRJU0VfUkVTViBiZWZvcmUgY2FsbGluZyBtaWlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3NcXG4rXFx0ICogYXQgbGVhc3QgZm9yIHNwZWVkcyBcXHUwMDNjIDI1MDBcXG4rXFx0ICovXFxuK1xcdGlmIChkYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XFxuK1xcdFxcdHYgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi1cXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7XFxuK1xcdFxcdGlmICh2IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHY7XFxuK1xcbitcXHRcXHRpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbitcXHRcXHRcXHRcXHQgICAgICBjbWQtXFx1MDAzZWxpbmtfbW9kZXMuYWR2ZXJ0aXNpbmcpKVxcbitcXHRcXHRcXHR2IHw9IEFEVkVSVElTRV9SRVNWO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHYgXFx1MDAyNj0gfkFEVkVSVElTRV9SRVNWO1xcbitcXHRcXHRheDg4MTc5X21kaW9fd3JpdGUobmV0LCBkZXYtXFx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIHYpO1xcbitcXHRcXHRpZiAoY21kLVxcdTAwM2ViYXNlLnNwZWVkID09IFNQRUVEXzI1MDApXFxuK1xcdFxcdFxcdHJldHVybiBtaWlfbndheV9yZXN0YXJ0KFxcdTAwMjZkZXYtXFx1MDAzZW1paSk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiBtaWlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MoXFx1MDAyNmRldi1cXHUwMDNlbWlpLCBjbWQpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBheDg4MTc5YV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSlcXG4re1xcbitcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhO1xcbitcXHR1MTYgYm1jciwgbGNsYWR2LCBybXRhZHY7XFxuK1xcdHU4IGNhcDtcXG4rXFxuK1xcdGRhdGEgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbitcXG4rXFx0aWYgKGRhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGJtY3IgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi1cXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0JNQ1IpO1xcbitcXHRsY2xhZHYgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi1cXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7XFxuK1xcdHJtdGFkdiA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LVxcdTAwM2VtaWkucGh5X2lkLCBNSUlfTFBBKTtcXG4rXFxuK1xcdGlmICghKGJtY3IgXFx1MDAyNiBCTUNSX0FORU5BQkxFKSkge1xcbitcXHRcXHRwYXVzZS1cXHUwMDNlYXV0b25lZyA9IDA7XFxuK1xcdFxcdHBhdXNlLVxcdTAwM2VyeF9wYXVzZSA9IDA7XFxuK1xcdFxcdHBhdXNlLVxcdTAwM2V0eF9wYXVzZSA9IDA7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cGF1c2UtXFx1MDAzZWF1dG9uZWcgPSAxO1xcbitcXG4rXFx0Y2FwID0gbWlpX3Jlc29sdmVfZmxvd2N0cmxfZmR4KGxjbGFkdiwgcm10YWR2KTtcXG4rXFxuK1xcdGlmIChjYXAgXFx1MDAyNiBGTE9XX0NUUkxfUlgpXFxuK1xcdFxcdHBhdXNlLVxcdTAwM2VyeF9wYXVzZSA9IDE7XFxuK1xcbitcXHRpZiAoY2FwIFxcdTAwMjYgRkxPV19DVFJMX1RYKVxcbitcXHRcXHRwYXVzZS1cXHUwMDNldHhfcGF1c2UgPSAxO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGF4ODgxNzlhX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxcbit7XFxuK1xcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XFxuK1xcdHUxNiBvbGQsIG5ldzEsIGJtY3I7XFxuK1xcdHU4IGNhcCA9IDA7XFxuK1xcbitcXHRkYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFxuK1xcdGlmIChkYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRibWNyID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtXFx1MDAzZW1paS5waHlfaWQsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKHBhdXNlLVxcdTAwM2VhdXRvbmVnIFxcdTAwMjZcXHUwMDI2ICEoYm1jciBcXHUwMDI2IEJNQ1JfQU5FTkFCTEUpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwYXVzZS1cXHUwMDNlcnhfcGF1c2UpXFxuK1xcdFxcdGNhcCB8PSBGTE9XX0NUUkxfUlg7XFxuK1xcbitcXHRpZiAocGF1c2UtXFx1MDAzZXR4X3BhdXNlKVxcbitcXHRcXHRjYXAgfD0gRkxPV19DVFJMX1RYO1xcbitcXG4rXFx0b2xkID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtXFx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xcbitcXHRuZXcxID0gKG9sZCBcXHUwMDI2IH4oQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNKSkgfFxcbitcXHRcXHRtaWlfYWR2ZXJ0aXNlX2Zsb3djdHJsKGNhcCk7XFxuK1xcdGlmIChvbGQgIT0gbmV3MSlcXG4rXFx0XFx0YXg4ODE3OV9tZGlvX3dyaXRlKG5ldCwgZGV2LVxcdTAwM2VtaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLCBuZXcxKTtcXG4rXFxuK1xcdHJldHVybiBtaWlfbndheV9yZXN0YXJ0KFxcdTAwMjZkZXYtXFx1MDAzZW1paSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnRcXG4gYXg4ODE3OV9ldGh0b29sX2dldF9lZWUoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxcbiB7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiBcXHRpbnQgdmFsO1xcbiBcXG4gXFx0LyogR2V0IFN1cHBvcnRlZCBFRUUgKi9cXG4tXFx0dmFsID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LCBNRElPX1BDU19FRUVfQUJMRSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIE1ESU9fTU1EX1BDUyk7XFxuK1xcdHZhbCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfUENTLCBNRElPX1BDU19FRUVfQUJMRSk7XFxuIFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gdmFsO1xcbiBcXHRtaWlfZWVlX2NhcDFfbW9kX2xpbmttb2RlX3QoZGF0YS1cXHUwMDNlc3VwcG9ydGVkLCB2YWwpO1xcbiBcXG4gXFx0LyogR2V0IGFkdmVydGlzZW1lbnQgRUVFICovXFxuLVxcdHZhbCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgTURJT19BTl9FRUVfQURWLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgTURJT19NTURfQU4pO1xcbitcXHR2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9BRFYpO1xcbiBcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHZhbDtcXG4gXFx0bWlpX2VlZV9jYXAxX21vZF9saW5rbW9kZV90KGRhdGEtXFx1MDAzZWFkdmVydGlzZWQsIHZhbCk7XFxuIFxcbiBcXHQvKiBHZXQgTFAgYWR2ZXJ0aXNlbWVudCBFRUUgKi9cXG4tXFx0dmFsID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LCBNRElPX0FOX0VFRV9MUEFCTEUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBNRElPX01NRF9BTik7XFxuK1xcdHZhbCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0xQQUJMRSk7XFxuIFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gdmFsO1xcbiBcXHRtaWlfZWVlX2NhcDFfbW9kX2xpbmttb2RlX3QoZGF0YS1cXHUwMDNlbHBfYWR2ZXJ0aXNlZCwgdmFsKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcXG4rXFx0XFx0dmFsID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfTFBBQkxFMik7XFxuK1xcdFxcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gdmFsO1xcbitcXHRcXHRtaWlfZWVlX2NhcDJfbW9kX2xpbmttb2RlX2Fkdl90KGRhdGEtXFx1MDAzZWxwX2FkdmVydGlzZWQsIHZhbCk7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTcwMSw4ICsxMTI4LDcgQEAgYXg4ODE3OV9ldGh0b29sX3NldF9lZWUoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxcbiB7XFxuIFxcdHUxNiB0bXAxNiA9IGxpbmttb2RlX3RvX21paV9lZWVfY2FwMV90KGRhdGEtXFx1MDAzZWFkdmVydGlzZWQpO1xcbiBcXG4tXFx0cmV0dXJuIGF4ODgxNzlfcGh5X3dyaXRlX21tZF9pbmRpcmVjdChkZXYsIE1ESU9fQU5fRUVFX0FEVixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgTURJT19NTURfQU4sIHRtcDE2KTtcXG4rXFx0cmV0dXJuIGF4X3dyaXRlX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9BRFYsIHRtcDE2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBheDg4MTc5X2Noa19lZWUoc3RydWN0IHVzYm5ldCAqZGV2KVxcbkBAIC03MTIsNDAgKzExMzgsMjcgQEAgc3RhdGljIGludCBheDg4MTc5X2Noa19lZWUoc3RydWN0IHVzYm5ldCAqZGV2KVxcbiBcXG4gXFx0bWlpX2V0aHRvb2xfZ3NldChcXHUwMDI2ZGV2LVxcdTAwM2VtaWksIFxcdTAwMjZlY21kKTtcXG4gXFxuLVxcdGlmIChlY21kLmR1cGxleCBcXHUwMDI2IERVUExFWF9GVUxMKSB7XFxuK1xcdHByaXYtXFx1MDAzZWVlZV9hY3RpdmUgPSAwO1xcbitcXHRpZiAoKHByaXYtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODI3OSBcXHUwMDI2XFx1MDAyNiAoZWNtZC5kdXBsZXggXFx1MDAyNiBEVVBMRVhfRlVMTCkpIHx8XFxuK1xcdCAgICAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwIFxcdTAwMjZcXHUwMDI2IChlY21kLmR1cGxleCBcXHUwMDI2IERVUExFWF9GVUxMKSkpIHtcXG4gXFx0XFx0aW50IGVlZV9scCwgZWVlX2NhcCwgZWVlX2FkdjtcXG4gXFx0XFx0dTMyIGxwLCBjYXAsIGFkdiwgc3VwcG9ydGVkID0gMDtcXG4gXFxuLVxcdFxcdGVlZV9jYXAgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdE1ESU9fUENTX0VFRV9BQkxFLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRNRElPX01NRF9QQ1MpO1xcbi1cXHRcXHRpZiAoZWVlX2NhcCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0cHJpdi1cXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XFxuK1xcdFxcdGVlZV9jYXAgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX1BDUywgTURJT19QQ1NfRUVFX0FCTEUpO1xcbitcXHRcXHRpZiAoZWVlX2NhcCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0fVxcbiBcXG4gXFx0XFx0Y2FwID0gbW1kX2VlZV9jYXBfdG9fZXRodG9vbF9zdXBfdChlZWVfY2FwKTtcXG4tXFx0XFx0aWYgKCFjYXApIHtcXG4tXFx0XFx0XFx0cHJpdi1cXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XFxuK1xcdFxcdGlmICghY2FwKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGVlZV9scCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1ESU9fQU5fRUVFX0xQQUJMRSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1ESU9fTU1EX0FOKTtcXG4tXFx0XFx0aWYgKGVlZV9scCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0cHJpdi1cXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0fVxcbiBcXG4tXFx0XFx0ZWVlX2FkdiA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0TURJT19BTl9FRUVfQURWLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRNRElPX01NRF9BTik7XFxuK1xcdFxcdGVlZV9scCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0xQQUJMRSk7XFxuK1xcdFxcdGlmIChlZWVfbHAgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdFxcdGlmIChlZWVfYWR2IFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRwcml2LVxcdTAwM2VlZWVfYWN0aXZlID0gMDtcXG4tXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGVlZV9hZHYgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9BRFYpO1xcbitcXHRcXHRpZiAoZWVlX2FkdiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0XFx0YWR2ID0gbW1kX2VlZV9hZHZfdG9fZXRodG9vbF9hZHZfdChlZWVfYWR2KTtcXG4gXFx0XFx0bHAgPSBtbWRfZWVlX2Fkdl90b19ldGh0b29sX2Fkdl90KGVlZV9scCk7XFxuQEAgLTc1Myw2NSArMTE2Niw1MyBAQCBzdGF0aWMgaW50IGF4ODgxNzlfY2hrX2VlZShzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIFxcdFxcdFxcdCAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIDpcXG4gXFx0XFx0XFx0ICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbDtcXG4gXFxuLVxcdFxcdGlmICghKGxwIFxcdTAwMjYgYWR2IFxcdTAwMjYgc3VwcG9ydGVkKSkge1xcbi1cXHRcXHRcXHRwcml2LVxcdTAwM2VlZWVfYWN0aXZlID0gMDtcXG4tXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGlmICghKGxwIFxcdTAwMjYgYWR2IFxcdTAwMjYgc3VwcG9ydGVkKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRcXHRwcml2LVxcdTAwM2VlZWVfYWN0aXZlID0gMTtcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHByaXYtXFx1MDAzZWVlZV9hY3RpdmUgPSAwO1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGF4ODgxNzlfZGlzYWJsZV9lZWUoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi17XFxuLVxcdHUxNiB0bXAxNjtcXG4tXFxuLVxcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTM7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuLVxcdFxcdFxcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFxcdTAwMjZ0bXAxNik7XFxuLVxcbi1cXHR0bXAxNiA9IDB4MzI0NjtcXG4tXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcXG4tXFx0XFx0XFx0ICBNSUlfUEhZQUREUiwgMiwgXFx1MDAyNnRtcDE2KTtcXG4tXFxuLVxcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTA7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuLVxcdFxcdFxcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFxcdTAwMjZ0bXAxNik7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGF4ODgxNzlfZW5hYmxlX2VlZShzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuK3N0YXRpYyB2b2lkIGF4ODgxNzlfZWVlX2NvbmZpZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIGJvb2wgZW5hYmxlKVxcbiB7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiBcXHR1MTYgdG1wMTY7XFxuIFxcbi1cXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UzO1xcbi1cXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxcbi1cXHRcXHRcXHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcXHUwMDI2dG1wMTYpO1xcbi1cXG4tXFx0dG1wMTYgPSAweDMyNDc7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuLVxcdFxcdFxcdCAgTUlJX1BIWUFERFIsIDIsIFxcdTAwMjZ0bXAxNik7XFxuLVxcbi1cXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0U1O1xcbi1cXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxcbi1cXHRcXHRcXHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcXHUwMDI2dG1wMTYpO1xcbi1cXG4tXFx0dG1wMTYgPSAweDA2ODA7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuLVxcdFxcdFxcdCAgTUlJX0JNU1IsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XFxuK1xcdFxcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTM7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuK1xcdFxcdFxcdFxcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcbitcXHRcXHR0bXAxNiA9IGVuYWJsZSA/IDB4MzI0NyA6IDB4MzI0NjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcXG4rXFx0XFx0XFx0XFx0ICBNSUlfUEhZQUREUiwgMiwgXFx1MDAyNnRtcDE2KTtcXG4rXFx0XFx0aWYgKGVuYWJsZSkge1xcbitcXHRcXHRcXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0U1O1xcbitcXHRcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxcbitcXHRcXHRcXHRcXHRcXHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcXHUwMDI2dG1wMTYpO1xcbitcXG4rXFx0XFx0XFx0dG1wMTYgPSAweDA2ODA7XFxuK1xcdFxcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgTUlJX0JNU1IsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTA7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuLVxcdFxcdFxcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdFxcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXFxuK1xcdFxcdFxcdFxcdCAgR01JSV9QSFlfUEFHRV9TRUxFQ1QsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfR1BIWV9DVEwsIEFYX0dQSFlfRUVFX0NUUkwsIGVuYWJsZSwgMCwgTlVMTCk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGludCBheDg4MTc5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG4tXFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXY7XFxuK1xcbitcXHRwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gXFxuIFxcdGVkYXRhLVxcdTAwM2VlZWVfZW5hYmxlZCA9IHByaXYtXFx1MDAzZWVlZV9lbmFibGVkO1xcbiBcXHRlZGF0YS1cXHUwMDNlZWVlX2FjdGl2ZSA9IHByaXYtXFx1MDAzZWVlZV9hY3RpdmU7XFxuQEAgLTgyMiwxOCArMTIyMywyMCBAQCBzdGF0aWMgaW50IGF4ODgxNzlfZ2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZGF0YSlcXG4gc3RhdGljIGludCBheDg4MTc5X3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG4tXFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXY7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFxuIFxcdHByaXYtXFx1MDAzZWVlZV9lbmFibGVkID0gZWRhdGEtXFx1MDAzZWVlZV9lbmFibGVkO1xcbiBcXHRpZiAoIXByaXYtXFx1MDAzZWVlZV9lbmFibGVkKSB7XFxuLVxcdFxcdGF4ODgxNzlfZGlzYWJsZV9lZWUoZGV2KTtcXG4rXFx0XFx0YXg4ODE3OV9lZWVfY29uZmlnKGRldiwgZmFsc2UpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRwcml2LVxcdTAwM2VlZWVfZW5hYmxlZCA9IGF4ODgxNzlfY2hrX2VlZShkZXYpO1xcbiBcXHRcXHRpZiAoIXByaXYtXFx1MDAzZWVlZV9lbmFibGVkKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRcXHRheDg4MTc5X2VuYWJsZV9lZWUoZGV2KTtcXG4rXFx0XFx0YXg4ODE3OV9lZWVfY29uZmlnKGRldiwgdHJ1ZSk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgZWRhdGEpO1xcbkBAIC04NDgsNiArMTI1MSw3IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzlfZXRodG9vbF9vcHMgPSB7XFxuK1xcdC5nZXRfZHJ2aW5mb1xcdFxcdD0gYXg4ODE3OV9nZXRfZHJ2aW5mbyxcXG4gXFx0LmdldF9saW5rXFx0XFx0PSBldGh0b29sX29wX2dldF9saW5rLFxcbiBcXHQuZ2V0X21zZ2xldmVsXFx0XFx0PSB1c2JuZXRfZ2V0X21zZ2xldmVsLFxcbiBcXHQuc2V0X21zZ2xldmVsXFx0XFx0PSB1c2JuZXRfc2V0X21zZ2xldmVsLFxcbkBAIC04NjEsMTYgKzEyNjUsNzggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheDg4MTc5X2V0aHRvb2xfb3BzID0ge1xcbiBcXHQubndheV9yZXNldFxcdFxcdD0gdXNibmV0X253YXlfcmVzZXQsXFxuIFxcdC5nZXRfbGlua19rc2V0dGluZ3NcXHQ9IGF4ODgxNzlfZ2V0X2xpbmtfa3NldHRpbmdzLFxcbiBcXHQuc2V0X2xpbmtfa3NldHRpbmdzXFx0PSBheDg4MTc5X3NldF9saW5rX2tzZXR0aW5ncyxcXG4rXFx0LmdldF9wYXVzZXBhcmFtXFx0XFx0PSBheDg4MTc5YV9nZXRfcGF1c2VwYXJhbSxcXG4rXFx0LnNldF9wYXVzZXBhcmFtXFx0XFx0PSBheDg4MTc5YV9zZXRfcGF1c2VwYXJhbSxcXG4gXFx0LmdldF90c19pbmZvXFx0XFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxcbiB9O1xcbiBcXG4rc3RhdGljIGludCBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXFxuK3tcXG4rXFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcXG4rXFx0dTggdmxhbl9jdHJsO1xcbitcXHR1MTYgcmVnMTY7XFxuK1xcdHU4IHJlZzg7XFxuK1xcbitcXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcXHUwMDI2cmVnOCk7XFxuK1xcdHZsYW5fY3RybCA9IHJlZzg7XFxuK1xcbitcXHQvKiBBZGRyZXNzICovXFxuK1xcdHJlZzggPSAodmlkIC8gMTYpO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQUREUkVTUywgMSwgMSwgXFx1MDAyNnJlZzgpO1xcbitcXG4rXFx0LyogRGF0YSAqL1xcbitcXHRyZWc4ID0gdmxhbl9jdHJsIHwgQVhfVkxBTl9DT05UUk9MX1JEO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXFx1MDAyNnJlZzgpO1xcbitcXG4rXFx0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfREFUQTAsIDIsIDIsIFxcdTAwMjZyZWcxNik7XFxuK1xcdHJlZzE2IFxcdTAwMjY9IH4oMSBcXHUwMDNjXFx1MDAzYyAodmlkICUgMTYpKTtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCBcXHUwMDI2cmVnMTYpO1xcbitcXG4rXFx0cmVnOCA9IHZsYW5fY3RybCB8IEFYX1ZMQU5fQ09OVFJPTF9XRTtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZyZWc4KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGF4MTc5YV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgX19iZTE2IHByb3RvLCB1MTYgdmlkKVxcbit7XFxuK1xcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuK1xcdHU4IHZsYW5fY3RybDtcXG4rXFx0dTE2IHJlZzE2O1xcbitcXHR1OCByZWc4O1xcbitcXG4rXFx0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXFx1MDAyNnJlZzgpO1xcbitcXHR2bGFuX2N0cmwgPSByZWc4O1xcbitcXG4rXFx0LyogQWRkcmVzcyAqL1xcbitcXHRyZWc4ID0gKHZpZCAvIDE2KTtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MsIDEsIDEsIFxcdTAwMjZyZWc4KTtcXG4rXFxuK1xcdC8qIERhdGEgKi9cXG4rXFx0cmVnOCA9IHZsYW5fY3RybCB8IEFYX1ZMQU5fQ09OVFJPTF9SRDtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZyZWc4KTtcXG4rXFxuK1xcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCBcXHUwMDI2cmVnMTYpO1xcbitcXHRyZWcxNiB8PSAoMSBcXHUwMDNjXFx1MDAzYyAodmlkICUgMTYpKTtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCBcXHUwMDI2cmVnMTYpO1xcbitcXG4rXFx0cmVnOCA9IHZsYW5fY3RybCB8IEFYX1ZMQU5fQ09OVFJPTF9XRTtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZyZWc4KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBheDg4MTc5X3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xcbi1cXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gXFx0dTggKm1fZmlsdGVyID0gKCh1OCAqKWRldi1cXHUwMDNlZGF0YSk7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XFxuK1xcbitcXHRkYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gXFxuLVxcdGRhdGEtXFx1MDAzZXJ4Y3RsID0gKEFYX1JYX0NUTF9TVEFSVCB8IEFYX1JYX0NUTF9BQiB8IEFYX1JYX0NUTF9JUEUpO1xcbitcXHRkYXRhLVxcdTAwM2VyeGN0bCA9IChBWF9SWF9DVExfU1RBUlQgfCBBWF9SWF9DVExfQUIgfCBBWF9SWF9DVExfRFJPUENSQ0VSUik7XFxuK1xcdGlmIChkYXRhLVxcdTAwM2VpcF9hbGlnbilcXG4rXFx0XFx0ZGF0YS1cXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX0lQRTtcXG4gXFxuIFxcdGlmIChuZXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1BST01JU0MpIHtcXG4gXFx0XFx0ZGF0YS1cXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX1BSTztcXG5AQCAtOTA5LDYgKzEzNzUsNyBAQCBheDg4MTc5X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4ge1xcbiBcXHR1OCB0bXA7XFxuIFxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGEgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiBcXHRuZXRkZXZfZmVhdHVyZXNfdCBjaGFuZ2VkID0gbmV0LVxcdTAwM2VmZWF0dXJlcyBeIGZlYXR1cmVzO1xcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0lQX0NTVU0pIHtcXG5AQCAtOTI4LDYgKzEzOTUsMzQgQEAgYXg4ODE3OV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuIFxcdFxcdHRtcCBePSBBWF9SWENPRV9JUCB8IEFYX1JYQ09FX1RDUCB8IEFYX1JYQ09FX1VEUCB8XFxuIFxcdFxcdCAgICAgICBBWF9SWENPRV9UQ1BWNiB8IEFYX1JYQ09FX1VEUFY2O1xcbiBcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYQ09FX0NUTCwgMSwgMSwgXFx1MDAyNnRtcCk7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXJ4X2NoZWNrc3VtID0gISEoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1JYQ1NVTSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChjaGFuZ2VkIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XFxuK1xcdFxcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZ0bXApO1xcbitcXHRcXHR0bXAgXj0gQVhfVkxBTl9DT05UUk9MX1ZGRTtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZ0bXApO1xcbitcXHRcXHRpZiAoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpIHtcXG4rXFx0XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyAyNTY7IGkrKykge1xcbitcXHRcXHRcXHRcXHR1MTYgdG1wMTY7XFxuK1xcdFxcdFxcdFxcdC8qIEFkZHJlc3MgKi9cXG4rXFx0XFx0XFx0XFx0dG1wID0gaTtcXG4rXFx0XFx0XFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgMSwgMSwgXFx1MDAyNnRtcCk7XFxuK1xcdFxcdFxcdFxcdC8qIERhdGEgKi9cXG4rXFx0XFx0XFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIDIsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcdFxcdFxcdFxcdHRtcCA9IEFYX1ZMQU5fQ09OVFJPTF9XRTtcXG4rXFx0XFx0XFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgMSwgMSwgXFx1MDAyNnRtcCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoY2hhbmdlZCBcXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYKSB7XFxuK1xcdFxcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZ0bXApO1xcbitcXHRcXHR0bXAgXj0gQVhfVkxBTl9DT05UUk9MX1ZTTztcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFxcdTAwMjZ0bXApO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtOTk1LDYgKzE0OTAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzlfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19ldGhfaW9jdGxcXHRcXHQ9IHVzYm5ldF9taWlfaW9jdGwsXFxuIFxcdC5uZG9fc2V0X3J4X21vZGVcXHQ9IGF4ODgxNzlfc2V0X211bHRpY2FzdCxcXG4gXFx0Lm5kb19zZXRfZmVhdHVyZXNcXHQ9IGF4ODgxNzlfc2V0X2ZlYXR1cmVzLFxcbitcXHQubmRvX3ZsYW5fcnhfYWRkX3ZpZFxcdD0gYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZCxcXG4rXFx0Lm5kb192bGFuX3J4X2tpbGxfdmlkXFx0PSBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZCxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGVja19lZXByb20oc3RydWN0IHVzYm5ldCAqZGV2KVxcbkBAIC0xMjkzLDYgKzE3OTAsMTcgQEAgc3RhdGljIGludCBheDg4MTc5X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gXFxuIFxcdGRldi1cXHUwMDNlZHJpdmVyX3ByaXYgPSBheDE3OV9kYXRhO1xcbiBcXG4rXFx0cmV0ID0gYXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NISVBfU1RBVFVTLFxcbitcXHRcXHRcXHQgICAgICAgMSwgMSwgXFx1MDAyNmF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9ub2RldjtcXG4rXFxuK1xcdGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiA9IChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAyNiAweGYwKSBcXHUwMDNlXFx1MDAzZSA0O1xcbitcXHRheDE3OV9kYXRhLVxcdTAwM2Vpc19heDg4NzcyZCA9IDA7XFxuK1xcdGF4MTc5X2RhdGEtXFx1MDAzZWlwX2FsaWduID0gMTtcXG4rXFx0YXgxNzlfZGF0YS1cXHUwMDNlZWVwcm9tX3JlYWRfY21kID0gQVhfQUNDRVNTX0VFUFJPTTtcXG4rXFx0YXgxNzlfZGF0YS1cXHUwMDNlZWVwcm9tX2Jsb2NrID0gMjtcXG4rXFxuIFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNmF4ODgxNzlfbmV0ZGV2X29wcztcXG4gXFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNmF4ODgxNzlfZXRodG9vbF9vcHM7XFxuIFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSA4O1xcbkBAIC0xMzE3LDYgKzE4MjUsMTIwIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIFxcdGF4ODgxNzlfcmVzZXQoZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX25vZGV2OlxcbitcXHRrZnJlZShheDE3OV9kYXRhKTtcXG4rXFx0YXgxNzlfZGF0YSA9IE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGF4ODgxNzlhX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4re1xcbitcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBDaGVjayBpZiB2ZW5kb3IgY29uZmlndXJhdGlvbiAqL1xcbitcXHRpZiAodWRldi1cXHUwMDNlYWN0Y29uZmlnLVxcdTAwM2VkZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkge1xcbitcXHRcXHRuZXRkZXZfaW5mbyhkZXYtXFx1MDAzZW5ldCwgXFxcIlN3aXRjaGluZyB0byB2ZW5kb3IgbW9kZVxcXFxuXFxcIik7XFxuK1xcdFxcdHVzYl9kcml2ZXJfc2V0X2NvbmZpZ3VyYXRpb24odWRldiwgMSk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGF4MTc5X2RhdGEgPSBremFsbG9jX29iaigqYXgxNzlfZGF0YSk7XFxuK1xcdGlmICghYXgxNzlfZGF0YSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRkZXYtXFx1MDAzZWRyaXZlcl9wcml2ID0gYXgxNzlfZGF0YTtcXG4rXFxuK1xcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DSElQX1NUQVRVUyxcXG4rXFx0XFx0XFx0ICAgICAgIDEsIDEsIFxcdTAwMjZheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfbm9kZXY7XFxuK1xcbitcXHRheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gPSAoYXgxNzlfZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwMjYgMHhmMCkgXFx1MDAzZVxcdTAwM2UgNDtcXG4rXFx0YXgxNzlfZGF0YS1cXHUwMDNlaXNfYXg4ODc3MmQgPSAwO1xcbitcXHRpZiAoYXgxNzlfZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcXG4rXFx0XFx0aWYgKHVkZXYtXFx1MDAzZWRlc2NyaXB0b3IuYmNkRGV2aWNlID09IDB4MzAwKVxcbitcXHRcXHRcXHRheDE3OV9kYXRhLVxcdTAwM2Vpc19heDg4NzcyZCA9IDE7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgMzsgaSsrKSB7XFxuK1xcdFxcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9BQ0NFU1NfQkwsICgweEZEICsgaSksXFxuK1xcdFxcdFxcdFxcdCAgICAgICAxLCAxLCBcXHUwMDI2YXgxNzlfZGF0YS1cXHUwMDNlZndfdmVyc2lvbltpXSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRheDE3OV9kYXRhLVxcdTAwM2Vmd192ZXJzaW9uW2ldID0gMHhmZjtcXG4rXFx0fVxcbitcXHRuZXRkZXZfaW5mbyhkZXYtXFx1MDAzZW5ldCwgXFxcIkFYODgxNzlBLzI3OS83NzJEIENoaXAgVmVyc2lvbjogJXgsIEZXOiAlZC4lZC4lZC4lZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgIGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbixcXG4rXFx0XFx0ICAgIGF4MTc5X2RhdGEtXFx1MDAzZWZ3X3ZlcnNpb25bMF0sIGF4MTc5X2RhdGEtXFx1MDAzZWZ3X3ZlcnNpb25bMV0sXFxuK1xcdFxcdCAgICBheDE3OV9kYXRhLVxcdTAwM2Vmd192ZXJzaW9uWzJdLCBheDE3OV9kYXRhLVxcdTAwM2Vmd192ZXJzaW9uWzNdKTtcXG4rXFxuK1xcdC8qIFRoZSBBWDg4Mjc5IHJlcXVpcmVzIGJvdGggdGhlIEFYX1JYX0NUTF9JUEUgYW5kIEFYX1JYX0NUTF9EUk9QQ1JDRVJSXFxuK1xcdCAqIGJpdHMgc2V0IGluIEFYX1JYX0NUTCBmb3IgY3JlYXRpbmcgY29ycmVjdCBSWC1VUkJzLiBBWF9SWF9DVExfRFJPUENSQ0VSUlxcbitcXHQgKiBpcyBhbnl3YXkgc2V0IGZvciBhbGwgY2hpcHMsIG1ha2Ugc3VyZSBBWF9SWF9DVExfSVBFIGlzIHNldCB2aWEgaXBfYWxpZ24uXFxuK1xcdCAqIEFsc28gY29uZmlndXJlIGVlcHJvbSBhY2Nlc3MgcGFyYW1ldGVycy5cXG4rXFx0ICovXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XFxuK1xcdFxcdGF4MTc5X2RhdGEtXFx1MDAzZWlwX2FsaWduID0gMTtcXG4rXFx0XFx0YXgxNzlfZGF0YS1cXHUwMDNlZWVwcm9tX3JlYWRfY21kID0gQVg4ODE3OUFfRkxBU0hfUkVBRDtcXG4rXFx0XFx0YXgxNzlfZGF0YS1cXHUwMDNlZWVwcm9tX2Jsb2NrID0gMjU2O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRheDE3OV9kYXRhLVxcdTAwM2VpcF9hbGlnbiA9IDA7XFxuK1xcdFxcdGF4MTc5X2RhdGEtXFx1MDAzZWVlcHJvbV9yZWFkX2NtZCA9IEFYX0FDQ0VTU19FRlVTO1xcbitcXHRcXHRheDE3OV9kYXRhLVxcdTAwM2VlZXByb21fYmxvY2sgPSAyMDtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2YXg4ODE3OV9uZXRkZXZfb3BzO1xcbitcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2YXg4ODE3OV9ldGh0b29sX29wcztcXG4rXFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDg7XFxuK1xcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VuZWVkZWRfdGFpbHJvb20gPSA4O1xcbitcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xcbitcXHRkZXYtXFx1MDAzZWhhcmRfbXR1ID0gOSAqIDEwMjQ7XFxuK1xcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtYXhfbXR1ID0gZGV2LVxcdTAwM2VoYXJkX210dSAtIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIE1JSSBzdHJ1Y3R1cmUgKi9cXG4rXFx0ZGV2LVxcdTAwM2VtaWkuZGV2ID0gZGV2LVxcdTAwM2VuZXQ7XFxuK1xcdGRldi1cXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGF4ODgxNzlfbWRpb19yZWFkO1xcbitcXHRkZXYtXFx1MDAzZW1paS5tZGlvX3dyaXRlID0gYXg4ODE3OV9tZGlvX3dyaXRlO1xcbitcXHRkZXYtXFx1MDAzZW1paS5waHlfaWRfbWFzayA9IDB4ZmY7XFxuK1xcdGRldi1cXHUwMDNlbWlpLnJlZ19udW1fbWFzayA9IDB4ZmY7XFxuK1xcdGRldi1cXHUwMDNlbWlpLnBoeV9pZCA9IDB4MDM7XFxuK1xcdGlmICghYXgxNzlfZGF0YS1cXHUwMDNlaXNfYXg4ODc3MmQpXFxuK1xcdFxcdGRldi1cXHUwMDNlbWlpLnN1cHBvcnRzX2dtaWkgPSAxO1xcbitcXG4rXFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxcbitcXHRcXHRcXHQgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU08gfFxcbitcXHRcXHRcXHQgICAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHxcXG4rXFx0XFx0XFx0ICAgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xcbitcXG4rXFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IGRldi1cXHUwMDNlbmV0LVxcdTAwM2VmZWF0dXJlcztcXG4rXFxuK1xcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2V2bGFuX2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8XFxuK1xcdFxcdFxcdFxcdCAgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfVFNPO1xcbitcXG4rXFx0bmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShkZXYtXFx1MDAzZW5ldCwgMTYzODQpO1xcbitcXG4rXFx0LyogRW5hYmxlIFRyYW5zbWlzc2lvbiBvZiBMaW5rIFNwZWVkIGJ5dGUgaW4gaW50ZXJydXB0IFVSQiAqL1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0ZXX01PREUsIEFYX0ZXX01PREVfMTc5QSwgMCwgMCwgTlVMTCk7XFxuK1xcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfUkVMT0FEX0VFUFJPTV9FRlVTRSwgMCwgMCwgMCwgTlVMTCk7XFxuK1xcbitcXHQvKiBSZWFkIE1BQyBhZGRyZXNzIGZyb20gRFRCIG9yIEFTSVggY2hpcCAqL1xcbitcXHRheDg4MTc5X2dldF9tYWNfYWRkcihkZXYpO1xcbitcXHRtZW1jcHkoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXBlcm1fYWRkciwgZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9ub2RldjpcXG4rXFx0a2ZyZWUoYXgxNzlfZGF0YSk7XFxuK1xcdGF4MTc5X2RhdGEgPSBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYXg4ODE3OV91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG5AQCAtMTMzOCw2ICsxOTYwLDIyIEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIFxcdGtmcmVlKGF4MTc5X2RhdGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBheDg4MTc5YV91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4re1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFx0dTE2IHRtcDE2O1xcbitcXHR1OCB0bXA4O1xcbitcXG4rXFx0LyogQ29uZmlndXJlIFJYIGNvbnRyb2wgcmVnaXN0ZXIgPVxcdTAwM2Ugc3RvcCBvcGVyYXRpb24gKi9cXG4rXFx0dG1wMTYgPSBBWF9SWF9DVExfU1RPUDtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsIFxcdTAwMjZ0bXAxNik7XFxuK1xcbitcXHR0bXA4ID0gMDtcXG4rXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFxuK1xcdGtmcmVlKGF4MTc5X2RhdGEpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZFxcbiBheDg4MTc5X3J4X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqcGt0X2hkcilcXG4ge1xcbkBAIC0xMzU0LDYgKzE5OTIsMjEgQEAgYXg4ODE3OV9yeF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKnBrdF9oZHIpXFxuIFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGF4ODgxNzlhX3J4X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBwa3RfZGVzYylcXG4re1xcbitcXHR1MzIgcGt0X3R5cGU7XFxuK1xcbitcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XFxuK1xcdC8qIGNoZWNrc3VtIGVycm9yIGJpdCBpcyBzZXQgKi9cXG4rXFx0aWYgKHBrdF9kZXNjIFxcdTAwMjYgQVgxNzlBX1JYX1BEX0w0X0VSUiB8fCBwa3RfZGVzYyBcXHUwMDI2IEFYMTc5QV9SWF9QRF9MM19FUlIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBrdF90eXBlID0gcGt0X2Rlc2MgXFx1MDAyNiBBWDE3OUFfUlhfUERfTDRfVFlQRV9NQVNLO1xcbitcXHQvKiBJdCBtdXN0IGJlIGEgVENQIG9yIFVEUCBwYWNrZXQgd2l0aCBhIHZhbGlkIGNoZWNrc3VtICovXFxuK1xcdGlmIChwa3RfdHlwZSA9PSBBWDE3OUFfUlhfUERfTDRfVENQIHx8IHBrdF90eXBlID09IEFYMTc5QV9SWF9QRF9MNF9VRFApXFxuK1xcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKmF4X3NrYjtcXG5AQCAtMTQ3Miw2ICsyMTI1LDEyMSBAQCBzdGF0aWMgaW50IGF4ODgxNzlfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBheDg4MTc5YV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuK1xcdHN0cnVjdCBza19idWZmICpheF9za2I7XFxuK1xcdHUzMiBoZHJfb2ZmLCBwa3RfZW5kO1xcbitcXHR1NjQgKnBrdF9kZXNjX3B0cjtcXG4rXFx0dTE2IHZsYW5fdGFnO1xcbitcXHR1MTYgcGt0X2NudDtcXG4rXFx0dTY0IHJ4X2hkcjtcXG4rXFxuK1xcdC8qIFNLQiBjb250ZW50cyBmb3IgQVgxNzlBLWJhc2VkIGNoaXBzOlxcbitcXHQgKiAgIFxcdTAwM2NwYWNrZXQgMVxcdTAwM2VcXG4rXFx0ICogICAuLi5cXG4rXFx0ICogICBcXHUwMDNjcGFja2V0IE5cXHUwMDNlXFxuK1xcdCAqICAgXFx1MDAzY3Blci1wYWNrZXQgbWV0YWRhdGEgZW50cnkgMVxcdTAwM2VcXG4rXFx0ICogICAuLi5cXG4rXFx0ICogICBcXHUwMDNjcGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSBOXFx1MDAzZVxcbitcXHQgKiAgIFxcdTAwM2NyeF9oZHJcXHUwMDNlXFxuK1xcdCAqXFxuK1xcdCAqIHdoZXJlOlxcbitcXHQgKiAgIFxcdTAwM2NwYWNrZXQgTlxcdTAwM2UgY29udGFpbnMgcGt0X2xlbiBkYXRhIGJ5dGVzIGFuZCBwYWRkaW5nOlxcbitcXHQgKlxcdFxcdDIgYnl0ZXMgb2YgSVAgYWxpZ25tZW50IChvcHRpb25hbCwgZGVwZW5kcyBvbiBBWF9SWF9DVExfSVBFIGZsYWcpXFxuK1xcdCAqXFx0XFx0cGFja2V0IGRhdGEgcmVjZWl2ZWRcXG4rXFx0ICpcXHRcXHRvcHRpb25hbCBwYWRkaW5nIHRvIDgtYnl0ZXMgYm91bmRhcnlcXG4rXFx0ICogICBcXHUwMDNjcGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSBOXFx1MDAzZSBjb250YWlucyA4IGJ5dGVzOlxcbitcXHQgKlxcdFxcdHBrdF9sZW4gYW5kIGZpZWxkcyBBWF9SWEhEUl8qXFxuK1xcdCAqICAgXFx1MDAzY3J4LWhkclxcdTAwM2VcXHRjb250YWlucyA4IGJ5dGVzOlxcbitcXHQgKlxcdFxcdHBrdF9jbnQgYW5kIGhkcl9vZmYgKG9mZnNldCBvZiBcXHUwMDNjcGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSAxXFx1MDAzZSlcXG4rXFx0ICpcXG4rXFx0ICogcGt0X2NudCBpcyBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgcGVyLXBhY2tldCBtZXRhZGF0YSBhcnJheS5cXG4rXFx0ICovXFxuK1xcbitcXHRpZiAoIXNrYiB8fCBza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZihyeF9oZHIpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdC8qIFJYIERlc2NyaXB0b3IgSGVhZGVyICovXFxuK1xcdHNrYl90cmltKHNrYiwgc2tiLVxcdTAwM2VsZW4gLSBzaXplb2YocnhfaGRyKSk7XFxuK1xcdHJ4X2hkciA9IGxlNjRfdG9fY3B1cCgodTY0ICopc2tiX3RhaWxfcG9pbnRlcihza2IpKTtcXG4rXFxuK1xcdC8qIENoZWNrIHRoZXNlIHBhY2tldHMgKi9cXG4rXFx0aGRyX29mZiA9IChyeF9oZHIgXFx1MDAyNiBBWDE3OUFfUlhfREhfREVTQ19PRkZTRVRfTUFTSykgXFx1MDAzZVxcdTAwM2UgQVgxNzlBX1JYX0RIX0RFU0NfT0ZGU0VUX1NISUZUO1xcbitcXHRwa3RfY250ID0gcnhfaGRyIFxcdTAwMjYgQVgxNzlBX1JYX0RIX1BLVF9DTlRfTUFTSztcXG4rXFxuK1xcdC8qIENvbnNpc3RlbmN5IGNoZWNrIGhlYWRlciBwb3NpdGlvbiAqL1xcbitcXHRpZiAoaGRyX29mZiAhPSBza2ItXFx1MDAzZWxlbiAtIChwa3RfY250ICogc2l6ZW9mKHJ4X2hkcikpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBib3VuZHMgb2YgdGhlIG1ldGFkYXRhIGFycmF5IGFyZSBpbnNpZGUgdGhlIFNLQlxcbitcXHQgKiAoYW5kIGluIGZyb250IG9mIHRoZSBjb3VudGVyIGF0IHRoZSBlbmQpLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBrdF9jbnQgKiA4ICsgaGRyX29mZiBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdC8qIFBhY2tldHMgbXVzdCBub3Qgb3ZlcmxhcCB0aGUgbWV0YWRhdGEgYXJyYXkgKi9cXG4rXFx0c2tiX3RyaW0oc2tiLCBoZHJfb2ZmKTtcXG4rXFxuK1xcdGlmICghcGt0X2NudClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHQvKiBHZXQgdGhlIGZpcnN0IFJYIHBhY2tldCBkZXNjcmlwdG9yICovXFxuK1xcdHBrdF9kZXNjX3B0ciA9ICh1NjQgKikoc2tiLVxcdTAwM2VkYXRhICsgaGRyX29mZik7XFxuK1xcbitcXHRwa3RfZW5kID0gMDtcXG4rXFx0d2hpbGUgKHBrdF9jbnQtLSkge1xcbitcXHRcXHR1NjQgcGt0X2Rlc2MgPSBsZTY0X3RvX2NwdXAocGt0X2Rlc2NfcHRyKTtcXG4rXFx0XFx0dTMyIHBrdF9sZW5fcGx1c19wYWRkO1xcbitcXHRcXHR1MzIgcGt0X2xlbjtcXG4rXFxuK1xcdFxcdHBrdF9sZW4gPSAodTMyKSgocGt0X2Rlc2MgXFx1MDAyNiBBWDE3OUFfUlhfUERfTEVOX01BU0spIFxcdTAwM2VcXHUwMDNlIEFYMTc5QV9SWF9QRF9MRU5fU0hJRlQpXFxuK1xcdFxcdFxcdCAgLSAoYXgxNzlfZGF0YS1cXHUwMDNlaXBfYWxpZ24gPyAyIDogMCk7XFxuK1xcdFxcdHBrdF9sZW5fcGx1c19wYWRkID0gKChwa3RfbGVuICsgNyArIChheDE3OV9kYXRhLVxcdTAwM2VpcF9hbGlnbiA/IDIgOiAwKSkgXFx1MDAyNiAweDdGRkY4KTtcXG4rXFxuK1xcdFxcdHBrdF9lbmQgKz0gcGt0X2xlbl9wbHVzX3BhZGQ7XFxuK1xcdFxcdGlmIChwa3RfZW5kIFxcdTAwM2UgaGRyX29mZiB8fCAocGt0X2NudCA9PSAwIFxcdTAwMjZcXHUwMDI2IHBrdF9lbmQgIT0gaGRyX29mZikpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0XFx0aWYgKHBrdF9kZXNjIFxcdTAwMjYgQVgxNzlBX1JYX1BEX0RST1AgfHwgIShwa3RfZGVzYyBcXHUwMDI2IEFYMTc5QV9SWF9QRF9SWF9PSykgfHxcXG4rXFx0XFx0ICAgIHBrdF9sZW4gXFx1MDAzZSAoZGV2LVxcdTAwM2VoYXJkX210dSArIEFYMTc5QV9SWF9IV19QQUQpKSB7XFxuK1xcdFxcdFxcdHNrYl9wdWxsKHNrYiwgcGt0X2xlbl9wbHVzX3BhZGQpO1xcbitcXG4rXFx0XFx0XFx0LyogTmV4dCBSWCBQYWNrZXQgRGVzY3JpcHRvciAqL1xcbitcXHRcXHRcXHRwa3RfZGVzY19wdHIrKztcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGF4X3NrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LVxcdTAwM2VuZXQsIHBrdF9sZW4pO1xcbitcXHRcXHRpZiAoIWF4X3NrYilcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRcXHRza2JfcHV0KGF4X3NrYiwgcGt0X2xlbik7XFxuK1xcdFxcdG1lbWNweShheF9za2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlZGF0YSArIChheDE3OV9kYXRhLVxcdTAwM2VpcF9hbGlnbiA/IEFYMTc5QV9SWF9IV19QQUQgOiAwKSxcXG4rXFx0XFx0ICAgICAgIHBrdF9sZW4pO1xcbitcXG4rXFx0XFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZXJ4X2NoZWNrc3VtKVxcbitcXHRcXHRcXHRheDg4MTc5YV9yeF9jaGVja3N1bShheF9za2IsIHBrdF9kZXNjKTtcXG4rXFxuK1xcdFxcdGlmIChwa3RfZGVzYyBcXHUwMDI2IEFYMTc5QV9SWF9QRF9WTEFOKSB7XFxuK1xcdFxcdFxcdHZsYW5fdGFnID0gcGt0X2Rlc2MgXFx1MDAzZVxcdTAwM2UgQVgxNzlBX1JYX1BEX1ZMQU5fU0hJRlQ7XFxuK1xcdFxcdFxcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoYXhfc2tiLCBodG9ucyhFVEhfUF84MDIxUSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB2bGFuX3RhZyBcXHUwMDI2IFZMQU5fVklEX01BU0spO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIGF4X3NrYik7XFxuK1xcdFxcdHNrYl9wdWxsKHNrYiwgcGt0X2xlbl9wbHVzX3BhZGQpO1xcbitcXG4rXFx0XFx0LyogTmV4dCBSWCBQYWNrZXQgSGVhZGVyICovXFxuK1xcdFxcdHBrdF9kZXNjX3B0cisrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4rXFxuK2VycjpcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxuIGF4ODgxNzlfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBmbGFncylcXG4ge1xcbkBAIC0xNTA1LDYgKzIyNzMsNTkgQEAgYXg4ODE3OV90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGZsYWdzKVxcbiBcXHRyZXR1cm4gc2tiO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbitheDg4MTc5YV90eF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGZsYWdzKVxcbit7XFxuK1xcdHU2NCB0eF9kZXNjID0gc2tiLVxcdTAwM2VsZW4gXFx1MDAyNiBBWDE3OUFfVFhfREVTQ19MRU5fTUFTSztcXG4rXFx0aW50IGZyYW1lX3NpemUgPSBkZXYtXFx1MDAzZW1heHBhY2tldDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKmF4X3NrYjtcXG4rXFx0dTY0ICp0eF9kZXNjX3B0cjtcXG4rXFx0aW50IHBhZGRpbmdfc2l6ZTtcXG4rXFx0aW50IGhlYWRyb29tO1xcbitcXHRpbnQgdGFpbHJvb207XFxuK1xcdHUxNiB0Y2kgPSAwO1xcbitcXG4rXFx0LyogVFNPIE1TUyAqL1xcbitcXHR0eF9kZXNjIHw9ICgodTY0KShza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb19zaXplIFxcdTAwMjYgQVgxNzlBX1RYX0RFU0NfTVNTX01BU0spKSBcXHUwMDNjXFx1MDAzY1xcbitcXHRcXHQgICBBWDE3OUFfVFhfREVTQ19NU1NfU0hJRlQ7XFxuK1xcbitcXHRoZWFkcm9vbSA9IChza2ItXFx1MDAzZWxlbiArIHNpemVvZih0eF9kZXNjKSkgJSA4O1xcbitcXHRwYWRkaW5nX3NpemUgPSBoZWFkcm9vbSA/IDggLSBoZWFkcm9vbSA6IDA7XFxuK1xcbitcXHRpZiAoKChza2ItXFx1MDAzZWxlbiArIHNpemVvZih0eF9kZXNjKSArIHBhZGRpbmdfc2l6ZSkgJSBmcmFtZV9zaXplKSA9PSAwKSB7XFxuK1xcdFxcdHBhZGRpbmdfc2l6ZSArPSA4O1xcbitcXHRcXHR0eF9kZXNjIHw9IEFYMTc5QV9UWF9ERVNDX0RST1BfUEFERDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKChkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCkgXFx1MDAyNlxcdTAwMjYgKHZsYW5fZ2V0X3RhZyhza2IsIFxcdTAwMjZ0Y2kpIFxcdTAwM2U9IDApKSB7XFxuK1xcdFxcdHR4X2Rlc2MgfD0gQVgxNzlBX1RYX0RFU0NfVkxBTjtcXG4rXFx0XFx0dHhfZGVzYyB8PSAoKHU2NCl0Y2kgXFx1MDAyNiBBWDE3OUFfVFhfREVTQ19WTEFOX01BU0spIFxcdTAwM2NcXHUwMDNjIEFYMTc5QV9UWF9ERVNDX1ZMQU5fU0hJRlQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VjYW5fZG1hX3NnIFxcdTAwMjZcXHUwMDI2IChkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1NHKSBcXHUwMDI2XFx1MDAyNiBza2JfbGluZWFyaXplKHNrYikpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0aGVhZHJvb20gPSBza2JfaGVhZHJvb20oc2tiKTtcXG4rXFx0dGFpbHJvb20gPSBza2JfdGFpbHJvb20oc2tiKTtcXG4rXFxuK1xcdGlmICghKGhlYWRyb29tIFxcdTAwM2U9IHNpemVvZih0eF9kZXNjKSBcXHUwMDI2XFx1MDAyNiB0YWlscm9vbSBcXHUwMDNlPSBwYWRkaW5nX3NpemUpKSB7XFxuK1xcdFxcdGF4X3NrYiA9IHNrYl9jb3B5X2V4cGFuZChza2IsIHNpemVvZih0eF9kZXNjKSwgcGFkZGluZ19zaXplLCBmbGFncyk7XFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdFxcdHNrYiA9IGF4X3NrYjtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcdGlmIChwYWRkaW5nX3NpemUgIT0gMClcXG4rXFx0XFx0c2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZ19zaXplKTtcXG4rXFx0LyogQ29weSBUWCBoZWFkZXIgKi9cXG4rXFx0dHhfZGVzY19wdHIgPSBza2JfcHVzaChza2IsIHNpemVvZih0eF9kZXNjKSk7XFxuK1xcdCp0eF9kZXNjX3B0ciA9IGNwdV90b19sZTY0KHR4X2Rlc2MpO1xcbitcXG4rXFx0dXNibmV0X3NldF9za2JfdHhfc3RhdHMoc2tiLCAxLCAwKTtcXG4rXFxuK1xcdHJldHVybiBza2I7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG5AQCAtMTU4MCw3MyArMjQwMSwzNDMgQEAgc3RhdGljIGludCBheDg4MTc5X2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYXg4ODE3OWFfYnVsa2luX2NvbmZpZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGxpbmtfc3RzKVxcbit7XFxuK1xcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbitcXHRjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzICpidWxraW5fZGF0YTtcXG4rXFx0aW50IGluZGV4ID0gMDtcXG4rXFxuK1xcdHN3aXRjaCAoYXgxNzlfZGF0YS1cXHUwMDNlc3BlZWQpIHtcXG4rXFx0Y2FzZSBFVEhFUl9MSU5LXzI1MDA6XFx0LyogQVg4ODI3OSBvbmx5ICovXFxuK1xcdFxcdGluZGV4ID0gMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEVUSEVSX0xJTktfMTAwMDpcXHQvKiBBWDg4Mjc5IFxcdTAwMjYgQVg4ODE3OEEgKi9cXG4rXFx0XFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcXG4rXFx0XFx0XFx0aWYgKGxpbmtfc3RzIFxcdTAwMjYgQVhfVVNCX1NTKVxcbitcXHRcXHRcXHRcXHRpbmRleCA9IDE7XFxuK1xcdFxcdFxcdGVsc2UgaWYgKGxpbmtfc3RzIFxcdTAwMjYgQVhfVVNCX0hTKVxcbitcXHRcXHRcXHRcXHRpbmRleCA9IDI7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGlmIChsaW5rX3N0cyBcXHUwMDI2IEFYX1VTQl9TUylcXG4rXFx0XFx0XFx0XFx0aW5kZXggPSAwO1xcbitcXHRcXHRcXHRlbHNlIGlmIChsaW5rX3N0cyBcXHUwMDI2IEFYX1VTQl9IUylcXG4rXFx0XFx0XFx0XFx0aW5kZXggPSAxO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBFVEhFUl9MSU5LXzEwMDpcXG4rXFx0XFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcXG4rXFx0XFx0XFx0aWYgKGxpbmtfc3RzIFxcdTAwMjYgQVhfVVNCX1NTKVxcbitcXHRcXHRcXHRcXHRpbmRleCA9IDM7XFxuK1xcdFxcdFxcdGVsc2UgaWYgKGxpbmtfc3RzIFxcdTAwMjYgQVhfVVNCX0hTKVxcbitcXHRcXHRcXHRcXHRpbmRleCA9IDU7XFxuK1xcdFxcdFxcdGlmICghYXgxNzlfZGF0YS1cXHUwMDNlZnVsbF9kdXBsZXgpXFxuK1xcdFxcdFxcdFxcdGluZGV4Kys7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qIEFYODgyNzlBIFxcdTAwMjYgQVg4ODI3N0QgKi9cXG4rXFx0XFx0XFx0aWYgKGxpbmtfc3RzIFxcdTAwMjYgQVhfVVNCX1NTKVxcbitcXHRcXHRcXHRcXHRpbmRleCA9IDI7XFxuK1xcdFxcdFxcdGVsc2UgaWYgKGxpbmtfc3RzIFxcdTAwMjYgQVhfVVNCX0hTKVxcbitcXHRcXHRcXHRcXHRpbmRleCA9IDQ7XFxuK1xcdFxcdFxcdGlmICghYXgxNzlfZGF0YS1cXHUwMDNlZnVsbF9kdXBsZXgpXFxuK1xcdFxcdFxcdFxcdGluZGV4Kys7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIEVUSEVSX0xJTktfMTA6XFxuK1xcdFxcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KVxcbitcXHRcXHRcXHRpbmRleCA9IDc7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aW5kZXggPSA2O1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGRlZmF1bHQ6XFx0LyogTm8gbGluayAqL1xcbitcXHRcXHRpbmRleCA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5IFxcdTAwMjZcXHUwMDI2IChsaW5rX3N0cyBcXHUwMDI2IEFYX1VTQl9GUykpXFxuK1xcdFxcdGluZGV4ID0gNztcXG4rXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XFxuK1xcdFxcdGJ1bGtpbl9kYXRhID0gQVg4ODI3OV9CVUxLSU5fU0laRTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWlzX2F4ODg3NzJkKVxcbitcXHRcXHRcXHRidWxraW5fZGF0YSA9IEFYODg3NzJEX0JVTEtJTl9TSVpFO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGJ1bGtpbl9kYXRhID0gQVg4ODE3OUFfQlVMS0lOX1NJWkU7XFxuK1xcdH1cXG4rXFxuK1xcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQlVMS0lOX1FDVFJMLCA1LCA1LCBcXHUwMDI2YnVsa2luX2RhdGFbaW5kZXhdKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBheDg4MTc5YV9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4rXFx0dTggdG1wOCwgbGlua19zdHMsIHJlZzhbM107XFxuK1xcdHUxNiB0bXAxNiwgbW9kZSwgc3BlZWQ7XFxuK1xcbitcXHRpZiAoIWF4MTc5X2RhdGEtXFx1MDAzZWxpbmspIHtcXG4rXFx0XFx0bmV0ZGV2X2luZm8oZGV2LVxcdTAwM2VuZXQsIFxcXCJheDg4MTc5YSAtIExpbmsgc3RhdHVzIGlzOiAwXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0b3AgUlgvVFggZm9yIGxpbmsgY29uZmlndXJhdGlvbiAqL1xcbitcXHR0bXAxNiA9IEFYX1JYX0NUTF9TVE9QO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXFx1MDAyNnRtcDE2KTtcXG4rXFx0dG1wOCA9IDA7XFxuK1xcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1BBVEgsIDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFxuK1xcdHRtcDggPSAweGE1O1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19DRENfREVMQVlfVFgsIDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFxuK1xcdHRtcDE2ID0gMHgwNDEwO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMiwgMiwgXFx1MDAyNnRtcDE2KTtcXG4rXFxuK1xcdHRtcDggPSAwO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX0VUSF9UWF9HQVAsIDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFxuK1xcdHRtcDggPSAweDA3O1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX0VQNV9FSFIsIDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFxuK1xcdHRtcDggPSAweDI4IHwgQVhfTkVXX1BBVVNFX0VOO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX05FV19QQVVTRV9DVFJMLCAxLCAxLCBcXHUwMDI2dG1wOCk7XFxuK1xcbitcXHRtb2RlID0gQVhfTUVESVVNX1JFQ0VJVkVfRU4gfCBBWF9NRURJVU1fVFhGTE9XX0NUUkxFTiB8IEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOO1xcbitcXG4rXFx0LyogTGluayBpcyB1cCwgYnV0IHNvbWUgb2xkZXIgQVg4ODE3OUEgRlcgdmVyc2lvbnMgZG8gbm90IHNlbmQgbGluayBzcGVlZFxcbitcXHQgKiBhbmQgZHVwbGV4IHN0YXR1cyBpbiBpbnRlcnJ1cHQgVVJCLCBzbyByZWFkIGl0IHZpYSBNSUlcXG4rXFx0ICovXFxuK1xcdGlmICghYXgxNzlfZGF0YS1cXHUwMDNlc3BlZWQpIHtcXG4rXFx0XFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xcbitcXG4rXFx0XFx0bWlpX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKFxcdTAwMjZkZXYtXFx1MDAzZW1paSwgXFx1MDAyNmNtZCk7XFxuK1xcdFxcdGF4MTc5X2RhdGEtXFx1MDAzZWZ1bGxfZHVwbGV4ID0gY21kLmJhc2UuZHVwbGV4O1xcbitcXHRcXHRzd2l0Y2ggKGNtZC5iYXNlLnNwZWVkKSB7XFxuK1xcdFxcdGNhc2UgU1BFRURfMTAwMDpcXG4rXFx0XFx0XFx0YXgxNzlfZGF0YS1cXHUwMDNlc3BlZWQgPSBFVEhFUl9MSU5LXzEwMDA7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFNQRUVEXzEwMDpcXG4rXFx0XFx0XFx0YXgxNzlfZGF0YS1cXHUwMDNlc3BlZWQgPSBFVEhFUl9MSU5LXzEwMDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgU1BFRURfMTA6XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGF4MTc5X2RhdGEtXFx1MDAzZXNwZWVkID0gRVRIRVJfTElOS18xMDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH07XFxuK1xcdH1cXG4rXFxuK1xcdHNwZWVkID0gMDtcXG4rXFx0c3dpdGNoIChheDE3OV9kYXRhLVxcdTAwM2VzcGVlZCkge1xcbitcXHRjYXNlIEVUSEVSX0xJTktfMjUwMDpcXG4rXFx0XFx0cmVnOFswXSA9IDB4MDA7XFxuK1xcdFxcdHJlZzhbMV0gPSAweEY4O1xcbitcXHRcXHRyZWc4WzJdID0gMHgwNztcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfVFhfUEFVU0UsIDMsIDMsIHJlZzgpO1xcbitcXG4rXFx0XFx0cmVnOFswXSA9IDB4Nzg7XFxuK1xcdFxcdHJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyBcXHUwMDNjXFx1MDAzYyA1KTtcXG4rXFx0XFx0cmVnOFsyXSA9IDA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DREMsIDMsIDMsIHJlZzgpO1xcbitcXG4rXFx0XFx0cmVnOFswXSA9IDB4NDA7XFxuK1xcdFxcdHJlZzhbMV0gPSBBWF9NQUNfTUlRRkZDVFJMX0ZPUk1BVCB8IEFYX01BQ19NSVFGRkNUUkxfRFJPUF9DUkMgfCBBWF9NQUNfTFNPX0VSUl9FTjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfREFUQV9DRENfQ05ULCAyLCAyLCByZWc4KTtcXG4rXFxuK1xcdFxcdHRtcDggPSBBWF9YR01JSV9FTjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9CRk1fREFUQSwgMSwgMSwgXFx1MDAyNnRtcDgpO1xcbitcXG4rXFx0XFx0dG1wOCA9IDB4MUMgfCBBWF9MU09fRU5IQU5DRV9FTjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfTFNPX0VOSEFOQ0VfQ1RSTCwgMSwgMSwgXFx1MDAyNnRtcDgpO1xcbitcXG4rXFx0XFx0bW9kZSB8PSBBWF9NRURJVU1fR0lHQU1PREUgfCBBWF9NRURJVU1fRlVMTF9EVVBMRVg7XFxuK1xcbitcXHRcXHRzcGVlZCA9IDI1MDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBFVEhFUl9MSU5LXzEwMDA6XFxuK1xcdFxcdG1vZGUgfD0gQVhfTUVESVVNX0dJR0FNT0RFO1xcbitcXHRcXHRzcGVlZCA9IDEwMDA7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXG4rXFx0Y2FzZSBFVEhFUl9MSU5LXzEwMDpcXG4rXFx0XFx0cmVnOFswXSA9IDB4Nzg7XFxuK1xcdFxcdHJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyBcXHUwMDNjXFx1MDAzYyA1KSB8IEFYX0dNSUlfQ1JDX0FQUEVORDtcXG4rXFx0XFx0cmVnOFsyXSA9IDA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DREMsIDMsIDMsIHJlZzgpO1xcbitcXG4rXFx0XFx0dG1wOCA9IDB4NDA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMSwgMSwgXFx1MDAyNnRtcDgpO1xcbitcXG4rXFx0XFx0c3BlZWQgPSBzcGVlZCA/IHNwZWVkIDogMTAwO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgRVRIRVJfTElOS18xMDpcXG4rXFx0XFx0cmVnOFswXSA9IDB4RkE7XFxuK1xcdFxcdHJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyBcXHUwMDNjXFx1MDAzYyA1KSB8IEFYX0dNSUlfQ1JDX0FQUEVORDtcXG4rXFx0XFx0cmVnOFsyXSA9IDB4RkY7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DREMsIDMsIDMsIHJlZzgpO1xcbitcXG4rXFx0XFx0dG1wOCA9IDB4RkE7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMSwgMSwgXFx1MDAyNnRtcDgpO1xcbitcXG4rXFx0XFx0c3BlZWQgPSAxMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBQSFlTSUNBTF9MSU5LX1NUQVRVUywgMSwgMSwgXFx1MDAyNmxpbmtfc3RzKTtcXG4rXFx0YXg4ODE3OWFfYnVsa2luX2NvbmZpZyhkZXYsIGxpbmtfc3RzKTtcXG4rXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgyNzkpIHtcXG4rXFx0XFx0dG1wOCA9IDA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfQkZNX0RBVEEsIDEsIDEsIFxcdTAwMjZ0bXA4KTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWZ1bGxfZHVwbGV4KVxcbitcXHRcXHRtb2RlIHw9IEFYX01FRElVTV9GVUxMX0RVUExFWDtcXG4rXFxuK1xcdGlmIChkZXYtXFx1MDAzZW5ldC1cXHUwMDNlbXR1IFxcdTAwM2UgMTUwMClcXG4rXFx0XFx0bW9kZSB8PSBBWF9NRURJVU1fSlVNQk9fRU47XFxuK1xcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcXHUwMDI2bW9kZSk7XFxuK1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXFx1MDAyNmF4MTc5X2RhdGEtXFx1MDAzZXJ4Y3RsKTtcXG4rXFxuK1xcdHRtcDggPSBBWF9NQUNfUlhfUEFUSF9SRUFEWSB8IEFYX01BQ19UWF9QQVRIX1JFQURZO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19QQVRILCAxLCAxLCBcXHUwMDI2dG1wOCk7XFxuK1xcbitcXHRheDE3OV9kYXRhLVxcdTAwM2VlZWVfZW5hYmxlZCA9IGF4ODgxNzlfY2hrX2VlZShkZXYpO1xcbitcXG4rXFx0bmV0aWZfY2Fycmllcl9vbihkZXYtXFx1MDAzZW5ldCk7XFxuK1xcbitcXHRuZXRkZXZfaW5mbyhkZXYtXFx1MDAzZW5ldCwgXFxcImF4ODgxNzlhIC0gTGluayBzdGF0dXMgaXM6IDEsIExpbmsgc3BlZWQ6ICVkLCBEdXBsZXg6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgc3BlZWQsIGF4MTc5X2RhdGEtXFx1MDAzZWZ1bGxfZHVwbGV4KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGF4ODgxNzlfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbiB7XFxuLVxcdHU4IGJ1Zls1XTtcXG4tXFx0dTE2ICp0bXAxNjtcXG4tXFx0dTggKnRtcDtcXG4gXFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuIFxcdHN0cnVjdCBldGh0b29sX2tlZWUgZWVlX2RhdGE7XFxuK1xcdHUxNiAqdG1wMTY7XFxuK1xcdHU4IGJ1Zls1XTtcXG4rXFx0dTggKnRtcDtcXG4gXFxuIFxcdHRtcDE2ID0gKHUxNiAqKWJ1ZjtcXG4gXFx0dG1wID0gKHU4ICopYnVmO1xcbiBcXG4gXFx0LyogUG93ZXIgdXAgZXRoZXJuZXQgUEhZICovXFxuLVxcdCp0bXAxNiA9IDA7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEhZUFdSX1JTVENUTCwgMiwgMiwgdG1wMTYpO1xcbitcXHRpZiAoYXgxNzlfZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xcbitcXHRcXHQqdG1wMTYgPSAwO1xcbitcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsIDIsIDIsIHRtcDE2KTtcXG4gXFxuLVxcdCp0bXAxNiA9IEFYX1BIWVBXUl9SU1RDVExfSVBSTDtcXG4tXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLCAyLCAyLCB0bXAxNik7XFxuLVxcdG1zbGVlcCg1MDApO1xcbitcXHRcXHQqdG1wMTYgPSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEhZUFdSX1JTVENUTCwgMiwgMiwgdG1wMTYpO1xcbitcXHRcXHRtc2xlZXAoNTAwKTtcXG4gXFxuLVxcdCp0bXAgPSBBWF9DTEtfU0VMRUNUX0FDUyB8IEFYX0NMS19TRUxFQ1RfQkNTO1xcbi1cXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NMS19TRUxFQ1QsIDEsIDEsIHRtcCk7XFxuLVxcdG1zbGVlcCgyMDApO1xcbitcXHRcXHQqdG1wID0gQVhfQ0xLX1NFTEVDVF9BQ1MgfCBBWF9DTEtfU0VMRUNUX0JDUztcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DTEtfU0VMRUNULCAxLCAxLCB0bXApO1xcbitcXHRcXHRtc2xlZXAoMjAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0KnRtcCA9IEFYX1BIWV9QT1dFUjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIHRtcCk7XFxuK1xcdFxcdG1zbGVlcCgyNTApO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoYXgxNzlfZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xcbitcXHRcXHQqdG1wMTYgPSBheDg4MTc5X21kaW9fcmVhZChkZXYtXFx1MDAzZW5ldCwgZGV2LVxcdTAwM2VtaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTtcXG4rXFx0XFx0KnRtcDE2IFxcdTAwMjY9IH4oQURWRVJUSVNFXzEwRlVMTCB8IEFEVkVSVElTRV8xMEhBTEYpO1xcbitcXHRcXHQqdG1wMTYgfD0gQURWRVJUSVNFX1JFU1Y7IC8qIEFkdmVydGlzZSAyLjVHQml0IGxpbmsgKi9cXG4rXFx0XFx0YXg4ODE3OV9tZGlvX3dyaXRlKGRldi1cXHUwMDNlbmV0LCBkZXYtXFx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsICp0bXAxNik7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIEV0aGVybmV0IFBIWSBBdXRvIERldGFjaCovXFxuIFxcdGF4ODgxNzlfYXV0b19kZXRhY2goZGV2KTtcXG4gXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xcbitcXHRcXHQqdG1wID0gQVhfTUFDX0VGRl9FTjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQlVMS19PVVRfQ1RSTCwgMSwgMSwgdG1wKTtcXG4rXFxuK1xcdFxcdCp0bXAxNiA9IDA7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCB0bXAxNik7XFxuK1xcbitcXHRcXHQqdG1wID0gMHgwNDtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QQVVTRV9XQVRFUkxWTF9MT1csIDEsIDEsIHRtcCk7XFxuK1xcdFxcdCp0bXAgPSAweDEwO1xcbitcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsIDEsIDEsIHRtcCk7XFxuK1xcbitcXHRcXHQqdG1wID0gMDtcXG4rXFx0XFx0aWYgKGRldi1cXHUwMDNlbmV0LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUilcXG4rXFx0XFx0XFx0KnRtcCB8PSBBWF9WTEFOX0NPTlRST0xfVkZFO1xcbitcXHRcXHRpZiAoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlgpXFxuK1xcdFxcdFxcdCp0bXAgfD0gQVhfVkxBTl9DT05UUk9MX1ZTTztcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIHRtcCk7XFxuK1xcbitcXHRcXHQqdG1wID0gMHhmZjtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fSU5UX01BU0ssIDEsIDEsIHRtcCk7XFxuK1xcbitcXHRcXHQqdG1wID0gMDtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fUlhfRE1BX0NUTCwgMSwgMSwgdG1wKTtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fVFhfRE1BX0NUTCwgMSwgMSwgdG1wKTtcXG4rXFx0XFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQVJDX0NUUkwsIDEsIDEsIHRtcCk7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1NXUF9DVFJMLCAxLCAxLCB0bXApO1xcbitcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19UWF9IRFJfQ0tTVU0sIDEsIDEsIHRtcCk7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIFJlYWQgTUFDIGFkZHJlc3MgZnJvbSBEVEIgb3IgYXNpeCBjaGlwICovXFxuIFxcdGF4ODgxNzlfZ2V0X21hY19hZGRyKGRldik7XFxuIFxcdG1lbWNweShkZXYtXFx1MDAzZW5ldC1cXHUwMDNlcGVybV9hZGRyLCBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcXG4gXFxuIFxcdC8qIFJYIGJ1bGsgY29uZmlndXJhdGlvbiAqL1xcbi1cXHRtZW1jcHkodG1wLCBcXHUwMDI2QVg4ODE3OV9CVUxLSU5fU0laRVswXSwgNSk7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQlVMS0lOX1FDVFJMLCA1LCA1LCB0bXApO1xcbi1cXG4tXFx0ZGV2LVxcdTAwM2VyeF91cmJfc2l6ZSA9IDEwMjQgKiAyMDtcXG4tXFxuLVxcdCp0bXAgPSAweDM0O1xcbi1cXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMSwgMSwgdG1wKTtcXG4tXFxuLVxcdCp0bXAgPSAweDUyO1xcbi1cXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0gsXFxuLVxcdFxcdFxcdCAgMSwgMSwgdG1wKTtcXG4rXFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcXG4rXFx0XFx0bWVtY3B5KHRtcCwgXFx1MDAyNkFYODgxNzlfQlVMS0lOX1NJWkVbMF0sIDUpO1xcbitcXHRcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0JVTEtJTl9RQ1RSTCwgNSwgNSwgdG1wKTtcXG4rXFx0XFx0KnRtcCA9IDB4MzQ7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfTE9XLCAxLCAxLCB0bXApO1xcbitcXG4rXFx0XFx0KnRtcCA9IDB4NTI7XFxuK1xcdFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfSElHSCxcXG4rXFx0XFx0XFx0XFx0ICAxLCAxLCB0bXApO1xcbitcXHRcXHRkZXYtXFx1MDAzZXJ4X3VyYl9zaXplID0gMTAyNCAqIDIwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBUaGUgQnVsay1SZWdpc3RlciBjb25maWd1cmF0aW9uIGZvciB0aGUgQVg4ODE3OUEgaXMgZG9uZSBpblxcbitcXHRcXHQgKiBheDg4MTc5YV9saW5rX3Jlc2V0KCksIG9uY2UgdGhlIGxpbmsgaXMgdXAgZm9yIGEgZ2l2ZW4gbGluayBhbmQgVVNCLXNwZWVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWlzX2F4ODg3NzJkKVxcbitcXHRcXHRcXHRkZXYtXFx1MDAzZXJ4X3VyYl9zaXplID0gMTAyNCAqIDI0O1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGRldi1cXHUwMDNlcnhfdXJiX3NpemUgPSAxMDI0ICogNDg7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIEVuYWJsZSBjaGVja3N1bSBvZmZsb2FkICovXFxuIFxcdCp0bXAgPSBBWF9SWENPRV9JUCB8IEFYX1JYQ09FX1RDUCB8IEFYX1JYQ09FX1VEUCB8XFxuIFxcdCAgICAgICBBWF9SWENPRV9UQ1BWNiB8IEFYX1JYQ09FX1VEUFY2O1xcbiBcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYQ09FX0NUTCwgMSwgMSwgdG1wKTtcXG4rXFx0YXgxNzlfZGF0YS1cXHUwMDNlcnhfY2hlY2tzdW0gPSAxO1xcbiBcXG4gXFx0KnRtcCA9IEFYX1RYQ09FX0lQIHwgQVhfVFhDT0VfVENQIHwgQVhfVFhDT0VfVURQIHxcXG4gXFx0ICAgICAgIEFYX1RYQ09FX1RDUFY2IHwgQVhfVFhDT0VfVURQVjY7XFxuIFxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfVFhDT0VfQ1RMLCAxLCAxLCB0bXApO1xcbiBcXG4gXFx0LyogQ29uZmlndXJlIFJYIGNvbnRyb2wgcmVnaXN0ZXIgPVxcdTAwM2Ugc3RhcnQgb3BlcmF0aW9uICovXFxuLVxcdCp0bXAxNiA9IEFYX1JYX0NUTF9EUk9QQ1JDRVJSIHwgQVhfUlhfQ1RMX0lQRSB8IEFYX1JYX0NUTF9TVEFSVCB8XFxuLVxcdFxcdCBBWF9SWF9DVExfQVAgfCBBWF9SWF9DVExfQU1BTEwgfCBBWF9SWF9DVExfQUI7XFxuLVxcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCB0bXAxNik7XFxuLVxcbi1cXHQqdG1wID0gQVhfTU9OSVRPUl9NT0RFX1BNRVRZUEUgfCBBWF9NT05JVE9SX01PREVfUE1FUE9MIHxcXG4tXFx0ICAgICAgIEFYX01PTklUT1JfTU9ERV9SV01QO1xcbitcXHRheDE3OV9kYXRhLVxcdTAwM2VyeGN0bCA9IEFYX1JYX0NUTF9EUk9QQ1JDRVJSIHwgQVhfUlhfQ1RMX1NUQVJUIHxcXG4rXFx0XFx0XFx0ICAgIEFYX1JYX0NUTF9BUCB8IEFYX1JYX0NUTF9BTUFMTCB8IEFYX1JYX0NUTF9BQjtcXG4rXFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWlwX2FsaWduKVxcbitcXHRcXHRheDE3OV9kYXRhLVxcdTAwM2VyeGN0bCB8PSBBWF9SWF9DVExfSVBFO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXFx1MDAyNmF4MTc5X2RhdGEtXFx1MDAzZXJ4Y3RsKTtcXG4rXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKVxcbitcXHRcXHQqdG1wID0gQVhfTU9OSVRPUl9NT0RFX1BNRVRZUEUgfCBBWF9NT05JVE9SX01PREVfUE1FUE9MIHwgQVhfTU9OSVRPUl9NT0RFX1JXTVA7XFxuK1xcdGVsc2VcXG4rXFx0XFx0KnRtcCA9IEFYX01PTklUT1JfTU9ERV9SV01QO1xcbiBcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELCAxLCAxLCB0bXApO1xcbiBcXG4gXFx0LyogQ29uZmlndXJlIGRlZmF1bHQgbWVkaXVtIHR5cGUgPVxcdTAwM2UgZ2lnYSAqL1xcbiBcXHQqdG1wMTYgPSBBWF9NRURJVU1fUkVDRUlWRV9FTiB8IEFYX01FRElVTV9UWEZMT1dfQ1RSTEVOIHxcXG4tXFx0XFx0IEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX0ZVTExfRFVQTEVYIHxcXG4tXFx0XFx0IEFYX01FRElVTV9HSUdBTU9ERTtcXG4tXFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsXFxuLVxcdFxcdFxcdCAgMiwgMiwgdG1wMTYpO1xcbitcXHRcXHQgQVhfTUVESVVNX1JYRkxPV19DVFJMRU4gfCBBWF9NRURJVU1fRlVMTF9EVVBMRVg7XFxuK1xcdGlmICghYXgxNzlfZGF0YS1cXHUwMDNlaXNfYXg4ODc3MmQpXFxuK1xcdFxcdCp0bXAxNiB8PSBBWF9NRURJVU1fR0lHQU1PREU7XFxuK1xcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCB0bXAxNik7XFxuIFxcbiBcXHQvKiBDaGVjayBpZiBXb0wgaXMgc3VwcG9ydGVkICovXFxuIFxcdGF4MTc5X2RhdGEtXFx1MDAzZXdvbF9zdXBwb3J0ZWQgPSAwO1xcbkBAIC0xNjU0LDE2ICsyNzQ1LDI5IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIFxcdFxcdFxcdCAgICAgMSwgMSwgXFx1MDAyNnRtcCkgXFx1MDAzZSAwKVxcbiBcXHRcXHRheDE3OV9kYXRhLVxcdTAwM2V3b2xfc3VwcG9ydGVkID0gV0FLRV9NQUdJQyB8IFdBS0VfUEhZO1xcbiBcXG4tXFx0YXg4ODE3OV9sZWRfc2V0dGluZyhkZXYpO1xcbitcXHQvKiBGb3IgY2hpcHMgc3RhcnRpbmcgd2l0aCBBWDg4MTc5QSwgTEVEUyBhcmUgY29uZmlndXJlZCBieSB0aGUgYWRhcHRlclxcbitcXHQgKiBmaXJtd2FyZSBkaXJlY3RseSBmcm9tIEVFUFJPTS9FRlVTRSB2YWx1ZXNcXG4rXFx0ICovXFxuK1xcdGlmIChheDE3OV9kYXRhLVxcdTAwM2VjaGlwX3ZlcnNpb24gXFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKVxcbitcXHRcXHRheDg4MTc5X2xlZF9zZXR0aW5nKGRldik7XFxuIFxcbiBcXHRheDE3OV9kYXRhLVxcdTAwM2VlZWVfZW5hYmxlZCA9IDA7XFxuIFxcdGF4MTc5X2RhdGEtXFx1MDAzZWVlZV9hY3RpdmUgPSAwO1xcbiBcXG4tXFx0YXg4ODE3OV9kaXNhYmxlX2VlZShkZXYpO1xcbitcXHRpZiAoYXgxNzlfZGF0YS1cXHUwMDNlY2hpcF92ZXJzaW9uIFxcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xcbitcXHRcXHRheDg4MTc5X2VlZV9jb25maWcoZGV2LCBmYWxzZSk7XFxuIFxcbi1cXHRheDg4MTc5X2V0aHRvb2xfZ2V0X2VlZShkZXYsIFxcdTAwMjZlZWVfZGF0YSk7XFxuLVxcdGxpbmttb2RlX3plcm8oZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7XFxuLVxcdGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgXFx1MDAyNmVlZV9kYXRhKTtcXG4rXFx0XFx0YXg4ODE3OV9ldGh0b29sX2dldF9lZWUoZGV2LCBcXHUwMDI2ZWVlX2RhdGEpO1xcbitcXHRcXHRsaW5rbW9kZV96ZXJvKGVlZV9kYXRhLmFkdmVydGlzZWQpO1xcbitcXHRcXHRheDg4MTc5X2V0aHRvb2xfc2V0X2VlZShkZXYsIFxcdTAwMjZlZWVfZGF0YSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGF4ODgxNzlfZWVlX2NvbmZpZyhkZXYsIHRydWUpO1xcbitcXHRcXHRheDg4MTc5X2V0aHRvb2xfZ2V0X2VlZShkZXYsIFxcdTAwMjZlZWVfZGF0YSk7XFxuK1xcdFxcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULCBlZWVfZGF0YS5hZHZlcnRpc2VkKTtcXG4rXFx0XFx0aWYgKGF4MTc5X2RhdGEtXFx1MDAzZWNoaXBfdmVyc2lvbiBcXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgyNzkpXFxuK1xcdFxcdFxcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULCBlZWVfZGF0YS5hZHZlcnRpc2VkKTtcXG4rXFx0XFx0YXg4ODE3OV9ldGh0b29sX3NldF9lZWUoZGV2LCBcXHUwMDI2ZWVlX2RhdGEpO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBSZXN0YXJ0IGF1dG9uZWcgKi9cXG4gXFx0bWlpX253YXlfcmVzdGFydChcXHUwMDI2ZGV2LVxcdTAwM2VtaWkpO1xcbkBAIC0xNzA3LDYgKzI4MTEsMjQgQEAgc3RhdGljIGludCBheDg4MTc5X3N0b3Aoc3RydWN0IHVzYm5ldCAqZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBheDg4MTc5YV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldilcXG4re1xcbitcXHR1MTYgcmVnMTY7XFxuK1xcdHU4IHJlZzg7XFxuK1xcbitcXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcXHUwMDI2cmVnMTYpO1xcbitcXHRyZWcxNiBcXHUwMDI2PSB+QVhfTUVESVVNX1JFQ0VJVkVfRU47XFxuK1xcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcXHUwMDI2cmVnMTYpO1xcbitcXG4rXFx0cmVnMTYgPSAwO1xcbitcXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXFx1MDAyNnJlZzE2KTtcXG4rXFxuK1xcdHJlZzggPSAwO1xcbitcXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVg4ODE3OUFfUEhZX1BPV0VSLCAwLCAwLCAxLCBcXHUwMDI2cmVnOCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTc5X2luZm8gPSB7XFxuIFxcdC5kZXNjcmlwdGlvbiA9IFxcXCJBU0lYIEFYODgxNzkgVVNCIDMuMCBHaWdhYml0IEV0aGVybmV0XFxcIixcXG4gXFx0LmJpbmQgPSBheDg4MTc5X2JpbmQsXFxuQEAgLTE3MzMsNiArMjg1NSw0NSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzhhX2luZm8gPSB7XFxuIFxcdC50eF9maXh1cCA9IGF4ODgxNzlfdHhfZml4dXAsXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzlhX2luZm8gPSB7XFxuK1xcdC5kZXNjcmlwdGlvbiA9IFxcXCJBU0lYIEFYODgxNzlBIFVTQiAzLjIgR2lnYWJpdCBFdGhlcm5ldFxcXCIsXFxuK1xcdC5iaW5kID0gYXg4ODE3OWFfYmluZCxcXG4rXFx0LnVuYmluZCA9IGF4ODgxNzlhX3VuYmluZCxcXG4rXFx0LnN0YXR1cyA9IGF4ODgxNzlfc3RhdHVzLFxcbitcXHQubGlua19yZXNldCA9IGF4ODgxNzlhX2xpbmtfcmVzZXQsXFxuK1xcdC5yZXNldCA9IGF4ODgxNzlfcmVzZXQsXFxuK1xcdC5zdG9wID0gYXg4ODE3OWFfc3RvcCxcXG4rXFx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VUIHwgRkxBR19BVk9JRF9VTkxJTktfVVJCUyxcXG4rXFx0LnJ4X2ZpeHVwID0gYXg4ODE3OWFfcnhfZml4dXAsXFxuK1xcdC50eF9maXh1cCA9IGF4ODgxNzlhX3R4X2ZpeHVwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4NzcyZF9pbmZvID0ge1xcbitcXHQuZGVzY3JpcHRpb24gPSBcXFwiQVNJWCBBWDg4NzcyRC9FIFVTQiAyLjAgRmFzdCBFdGhlcm5ldFxcXCIsXFxuK1xcdC5iaW5kID0gYXg4ODE3OWFfYmluZCxcXG4rXFx0LnVuYmluZCA9IGF4ODgxNzlhX3VuYmluZCxcXG4rXFx0LnN0YXR1cyA9IGF4ODgxNzlfc3RhdHVzLFxcbitcXHQubGlua19yZXNldCA9IGF4ODgxNzlhX2xpbmtfcmVzZXQsXFxuK1xcdC5yZXNldCA9IGF4ODgxNzlfcmVzZXQsXFxuK1xcdC5zdG9wID0gYXg4ODE3OWFfc3RvcCxcXG4rXFx0LmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCB8IEZMQUdfTVVMVElfUEFDS0VUIHwgRkxBR19BVk9JRF9VTkxJTktfVVJCUyxcXG4rXFx0LnJ4X2ZpeHVwID0gYXg4ODE3OWFfcnhfZml4dXAsXFxuK1xcdC50eF9maXh1cCA9IGF4ODgxNzlhX3R4X2ZpeHVwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4Mjc5X2luZm8gPSB7XFxuK1xcdC5kZXNjcmlwdGlvbiA9IFxcXCJBU0lYIEFYODgyNzkgVVNCIDMuMiAyLjVHaWdhYml0IEV0aGVybmV0XFxcIixcXG4rXFx0LmJpbmQgPSBheDg4MTc5YV9iaW5kLFxcbitcXHQudW5iaW5kID0gYXg4ODE3OWFfdW5iaW5kLFxcbitcXHQuc3RhdHVzID0gYXg4ODE3OV9zdGF0dXMsXFxuK1xcdC5saW5rX3Jlc2V0ID0gYXg4ODE3OWFfbGlua19yZXNldCxcXG4rXFx0LnJlc2V0ID0gYXg4ODE3OV9yZXNldCxcXG4rXFx0LnN0b3AgPSBheDg4MTc5YV9zdG9wLFxcbitcXHQuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYIHwgRkxBR19NVUxUSV9QQUNLRVQgfCBGTEFHX0FWT0lEX1VOTElOS19VUkJTLFxcbitcXHQucnhfZml4dXAgPSBheDg4MTc5YV9yeF9maXh1cCxcXG4rXFx0LnR4X2ZpeHVwID0gYXg4ODE3OWFfdHhfZml4dXAsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGN5cHJlc3NfR1gzX2luZm8gPSB7XFxuIFxcdC5kZXNjcmlwdGlvbiA9IFxcXCJDeXByZXNzIEdYMyBTdXBlclNwZWVkIHRvIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlclxcXCIsXFxuIFxcdC5iaW5kID0gYXg4ODE3OV9iaW5kLFxcbkBAIC0xODc4LDYgKzMwMzksMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBhdF91bWMyMDAwc3BfaW5mbyA9IHtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwcm9kdWN0c1tdID0ge1xcbiB7XFxuK1xcdC8qIEFTSVggQVg4ODE3OUEvQiBVU0IgMy4yIEdpZ2FiaXQgRXRoZXJuZXQgKi9cXG4rXFx0VVNCX0RFVklDRV9WRVIoMHgwYjk1LCAweDE3OTAsIDB4MDIwMCwgMHgwMjAwKSxcXG4rXFx0LmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmF4ODgxNzlhX2luZm8sXFxuK30sIHtcXG4rXFx0LyogQVNJWCBBWDg4NzcyRCBVU0IgMi4wIDEwME1iaXQgRXRoZXJuZXQgKi9cXG4rXFx0VVNCX0RFVklDRV9WRVIoMHgwYjk1LCAweDE3OTAsIDB4MDMwMCwgMHgwMzAwKSxcXG4rXFx0LmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmF4ODg3NzJkX2luZm8sXFxuK30sIHtcXG4rXFx0LyogQVNJWCBBWDg4Mjc5IFVTQiAzLjIgMi41R0JpdCBFdGhlcm5ldCAqL1xcbitcXHRVU0JfREVWSUNFX1ZFUigweDBiOTUsIDB4MTc5MCwgMHgwNDAwLCAweDA0MDApLFxcbitcXHQuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZylcXHUwMDI2YXg4ODI3OV9pbmZvLFxcbit9LCB7XFxuIFxcdC8qIEFTSVggQVg4ODE3OSAxMC8xMDAvMTAwMCAqL1xcbiBcXHRVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDBiOTUsIDB4MTc5MCwgMHhmZiwgMHhmZiwgMCksXFxuIFxcdC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKVxcdTAwMjZheDg4MTc5X2luZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjAxOjI2LjUyODI1MTY0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA2ODk2MTYzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9BWDg4MTc5XzE3OEFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJheDg4MTc5YV9iaW5kXCIsXG4gICAgXCJheDg4MTc5YV91bmJpbmRcIixcbiAgICBcImF4ODgxNzlhX2xpbmtfcmVzZXRcIixcbiAgICBcImF4ODgxNzlhX3J4X2ZpeHVwXCIsXG4gICAgXCJheDg4MTc5YV90eF9maXh1cFwiLFxuICAgIFwiYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZFwiLFxuICAgIFwiYXgxNzlhX3ZsYW5fcnhfa2lsbF92aWRcIixcbiAgICBcImF4ODgxNzlhX2dldF9wYXVzZXBhcmFtXCIsXG4gICAgXCJheDg4MTc5YV9zZXRfcGF1c2VwYXJhbVwiLFxuICAgIFwiYXg4ODE3OWFfcnhfY2hlY2tzdW1cIixcbiAgICBcImF4ODgxNzlhX2J1bGtpbl9jb25maWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIG5ldyBBU0lYIFVTQiBFdGhlcm5ldCBjaGlwcyAoQVg4ODE3OUEsIEFYODg3NzJELCBBWDg4Mjc5KSB0byB0aGUgYXg4ODE3OV8xNzhhIGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24sIGxpbmsgcmVzZXQsIGFuZCBwYWNrZXQgcGFyc2luZyAocngvdHggZml4dXApIGxvZ2ljIHNwZWNpZmljIHRvIHRoZXNlIGNoaXBzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IFVTQiBkZXZpY2UgYmluZGluZyBhbmQgcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWMzNzc5NWJhYWI1ZGU2OGZlZWJlMzJiNGUyY2Y4YjM3ZjVhZjVhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTE6MDE6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMgYi9kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmNcbmluZGV4IDk4Zjg5OWVhMmU5NDYyLi4xMmZjMjBlNWY3NmU2OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jXG5AQCAtMTMsOSArMTMsMTIgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvdXNibmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuIFxuICNkZWZpbmUgQVg4ODE3OV9QSFlfSURcdFx0XHRcdDB4MDNcbiAjZGVmaW5lIEFYX0VFUFJPTV9MRU5cdFx0XHRcdDB4MTAwXG4rI2RlZmluZSBBWDg4Mjc5X0VFUFJPTV9MRU5cdFx0XHQweDQwMDBcbisjZGVmaW5lIEFYODgxNzlBX0VFUFJPTV9MRU5cdFx0XHQoMzIgKiAyMClcbiAjZGVmaW5lIEFYODgxNzlfRUVQUk9NX01BR0lDXHRcdFx0MHgxNzkwMGI5NVxuICNkZWZpbmUgQVhfTUNBU1RfRkxUU0laRVx0XHRcdDhcbiAjZGVmaW5lIEFYX01BWF9NQ0FTVFx0XHRcdFx0NjRcbkBAIC0zMiwxNyArMzUsMzMgQEBcbiAjZGVmaW5lIEFYX0FDQ0VTU19FRVBST01cdFx0XHQweDA0XG4gI2RlZmluZSBBWF9BQ0NFU1NfRUZVU1x0XHRcdFx0MHgwNVxuICNkZWZpbmUgQVhfUkVMT0FEX0VFUFJPTV9FRlVTRVx0XHRcdDB4MDZcbi0jZGVmaW5lIEFYX1BBVVNFX1dBVEVSTFZMX0hJR0hcdFx0XHQweDU0XG4tI2RlZmluZSBBWF9QQVVTRV9XQVRFUkxWTF9MT1dcdFx0XHQweDU1XG4tXG4rI2RlZmluZSBBWDg4MTc5QV9XQUtFVVBfU0VUVElOR1x0XHRcdDB4MDdcbisjZGVmaW5lIEFYX0ZXX01PREVcdFx0XHRcdDB4MDhcbisjZGVmaW5lIEFYX0dQSFlfQ1RMXHRcdFx0XHQweDBGXG4rI2RlZmluZSBBWDg4MTc5QV9GTEFTSF9SRUFEXHRcdFx0MHgyMVxuKyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfV0VOXHRcdFx0MHgyMlxuKyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfV0RJU1x0XHRcdDB4MjNcbisjZGVmaW5lIEFYODgxNzlBX0ZMQVNIX1dSSVRFXHRcdFx0MHgyNFxuKyNkZWZpbmUgQVg4ODE3OUFfUEhZX0NMQVVTRTQ1XHRcdFx0MHgyN1xuKyNkZWZpbmUgQVg4ODE3OUFfRkxBU0hfRVJBU0VfU0VDVElPTlx0XHQweDI4XG4rI2RlZmluZSBBWDg4MTc5QV9BQ0NFU1NfQkxcdFx0XHQweDJBXG4rI2RlZmluZSBBWDg4MTc5QV9QSFlfUE9XRVJcdFx0XHQweDMxXG4rI2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNIXHRcdFx0MHhDMFxuKyNkZWZpbmUgQVhfUEFVU0VfV0FURVJMVkxfTE9XXHRcdFx0MHg1NFxuKyNkZWZpbmUgQVhfUEFVU0VfV0FURVJMVkxfSElHSFx0XHRcdDB4NTVcbitcbisjZGVmaW5lIEFYX0ZXX01PREVfMTc5QVx0XHRcdFx0MHgwMVxuICNkZWZpbmUgUEhZU0lDQUxfTElOS19TVEFUVVNcdFx0XHQweDAyXG4gXHQjZGVmaW5lXHRBWF9VU0JfU1NcdFx0MHgwNFxuIFx0I2RlZmluZVx0QVhfVVNCX0hTXHRcdDB4MDJcbitcdCNkZWZpbmUgQVhfVVNCX0ZTXHRcdDB4MDFcbiBcbiAjZGVmaW5lIEdFTkVSQUxfU1RBVFVTXHRcdFx0XHQweDAzXG4gLyogQ2hlY2sgQVg4ODE3OSB2ZXJzaW9uLiBVQTE6Qml0MiA9IDAsICBVQTI6Qml0MiA9IDEgKi9cbiBcdCNkZWZpbmVcdEFYX1NFQ0xEXHRcdDB4MDRcbiBcbisjZGVmaW5lIEFYX0NISVBfU1RBVFVTXHRcdFx0XHQweDA1XG4rXG4gI2RlZmluZSBBWF9TUk9NX0FERFJcdFx0XHRcdDB4MDdcbiAjZGVmaW5lIEFYX1NST01fQ01EXHRcdFx0XHQweDBhXG4gXHQjZGVmaW5lIEVFUF9SRFx0XHRcdDB4MDRcbkBAIC02Miw2ICs4MSwxNSBAQFxuIFx0I2RlZmluZSBBWF9SWF9DVExfUFJPXHRcdDB4MDAwMVxuIFx0I2RlZmluZSBBWF9SWF9DVExfU1RPUFx0XHQweDAwMDBcbiBcbisjZGVmaW5lIEFYODgxNzlBX0VUSF9UWF9HQVBcdFx0XHQweDBEXG4rXG4rI2RlZmluZSBBWDg4MTc5QV9CRk1fREFUQVx0XHRcdDB4MEVcbitcdCNkZWZpbmUgQVhfVFhfUVVFVUVfQ0ZHXHRcdDB4MDJcbitcdCNkZWZpbmUgQVhfVFhfUVVFVUVfU0VUXHRcdDB4MDhcbitcdCNkZWZpbmUgQVhfVFhfUTFfQUhCX0ZDX0VOXHQweDEwXG4rXHQjZGVmaW5lIEFYX1RYX1EyX0FIQl9GQ19FTlx0MHgyMFxuK1x0I2RlZmluZSBBWF9YR01JSV9FTlx0XHQweDgwXG4rXG4gI2RlZmluZSBBWF9OT0RFX0lEXHRcdFx0XHQweDEwXG4gI2RlZmluZSBBWF9NVUxGTFRBUllcdFx0XHRcdDB4MTZcbiBcbkBAIC05MSw3ICsxMTksMjEgQEBcbiBcdCNkZWZpbmUgQVhfUEhZUFdSX1JTVENUTF9JUFJMXHQweDAwMjBcbiBcdCNkZWZpbmUgQVhfUEhZUFdSX1JTVENUTF9BVFx0MHgxMDAwXG4gXG4rI2RlZmluZSBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1NcdFx0MHgyQVxuK1xuKyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MXHRcdDB4MkJcbitcdCNkZWZpbmUgQVhfVkxBTl9DT05UUk9MX1dFXHQweDAwMDFcbitcdCNkZWZpbmUgQVhfVkxBTl9DT05UUk9MX1JEXHQweDAwMDJcbitcdCNkZWZpbmUgQVhfVkxBTl9DT05UUk9MX1ZTT1x0MHgwMDEwXG4rXHQjZGVmaW5lIEFYX1ZMQU5fQ09OVFJPTF9WRkVcdDB4MDAyMFxuK1xuKyNkZWZpbmUgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMFx0XHRcdDB4MkNcbisjZGVmaW5lIEFYODgxNzlBX1ZMQU5fSURfREFUQTFcdFx0XHQweDJEXG4rXG4gI2RlZmluZSBBWF9SWF9CVUxLSU5fUUNUUkxcdFx0XHQweDJlXG4rXG4rI2RlZmluZSBBWF9HUEhZX0VFRV9DVFJMXHRcdFx0MHgwMVxuK1xuICNkZWZpbmUgQVhfQ0xLX1NFTEVDVFx0XHRcdFx0MHgzM1xuIFx0I2RlZmluZSBBWF9DTEtfU0VMRUNUX0JDU1x0MHgwMVxuIFx0I2RlZmluZSBBWF9DTEtfU0VMRUNUX0FDU1x0MHgwMlxuQEAgLTExMSw3ICsxNTMsNTEgQEBcbiBcdCNkZWZpbmUgQVhfVFhDT0VfVENQVjZcdFx0MHgyMFxuIFx0I2RlZmluZSBBWF9UWENPRV9VRFBWNlx0XHQweDQwXG4gXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfQk1fSU5UX01BU0tcdFx0MHg0MVxuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX0JNX1JYX0RNQV9DVExcdFx0MHg0M1xuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX0JNX1RYX0RNQV9DVExcdFx0MHg0NlxuK1xuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DRENcdFx0MHg2RFxuK1x0I2RlZmluZSBBWF9MU09GQ19XQ05UXzdfQUNDRVNTXHQweDAzXG4rXHQjZGVmaW5lIEFYX0dNSUlfQ1JDX0FQUEVORFx0MHgxMFxuK1xuICNkZWZpbmUgQVhfTEVEQ1RSTFx0XHRcdFx0MHg3M1xuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX0FSQ19DVFJMXHRcdFx0MHg5RVxuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX1NXUF9DVFJMXHRcdFx0MHhCMVxuK1xuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX1RYX1BBVVNFXHRcdFx0MHhCMlxuK1xuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX0NEQ19ERUxBWV9UWFx0XHQweEI1XG4rXG4rI2RlZmluZSBBWDg4MTc5QV9NQUNfUEFUSFx0XHRcdDB4QjdcbitcdCNkZWZpbmUgQVhfTUFDX1JYX1BBVEhfUkVBRFlcdDB4MDFcbitcdCNkZWZpbmUgQVhfTUFDX1RYX1BBVEhfUkVBRFlcdDB4MDJcbitcbisjZGVmaW5lIEFYODgxNzlBX05FV19QQVVTRV9DVFJMXHRcdFx0MHhCOFxuK1x0I2RlZmluZSBBWF9ORVdfUEFVU0VfRU5cdFx0MHgwMVxuK1xuKyNkZWZpbmUgQVg4ODE3OUFfTUFDX0JVTEtfT1VUX0NUUkxcdFx0MHhCOVxuK1x0I2RlZmluZSBBWF9NQUNfRUZGX0VOXHRcdDB4MDJcbitcbisjZGVmaW5lIEFYODgxNzlBX01BQ19SWF9EQVRBX0NEQ19DTlRcdFx0MHhDMFxuK1x0I2RlZmluZSBBWF9NQUNfTFNPX0VSUl9FTlx0MHgwNFxuK1x0I2RlZmluZSBBWF9NQUNfTUlRRkZDVFJMX0ZPUk1BVFx0MHgxMFxuK1x0I2RlZmluZSBBWF9NQUNfTUlRRkZDVFJMX0RST1BfQ1JDIDB4MjBcbitcbisjZGVmaW5lIEFYODgxNzlBX0FVVE9ERVRBQ0hfREVMQVlcdCg1VUwgXHUwMDNjXHUwMDNjIDgpXG4rI2RlZmluZSBBWDg4MTc5QV9BVVRPREVUQUNIX0VOXHRcdDFcbitcbisjZGVmaW5lIEFYODgxNzlBX01BQ19MU09fRU5IQU5DRV9DVFJMXHRcdDB4QzNcbitcdCNkZWZpbmUgQVhfTFNPX0VOSEFOQ0VfRU5cdDB4MDFcbitcbisjZGVmaW5lIEFYODgxNzlBX01BQ19UWF9IRFJfQ0tTVU1cdFx0MHhDQ1xuKyNkZWZpbmUgQVg4ODE3OUFfRVA1X0VIUlx0XHRcdDB4RjlcbitcbisjZGVmaW5lIEFYX1BIWV9QT1dFUlx0XHRcdFx0MHgwMlxuK1xuKyNkZWZpbmUgRVBIWV9MT1dfUE9XRVJfRU5cdFx0XHQweDAxXG4rI2RlZmluZSBTNV9XT0xfRU5cdFx0XHRcdDB4MDRcbisjZGVmaW5lIFM1X1dPTF9MT1dfUE9XRVJcdFx0XHQweDIwXG4gXG4gI2RlZmluZSBHTUlJX1BIWV9QSFlTUlx0XHRcdFx0MHgxMVxuIFx0I2RlZmluZSBHTUlJX1BIWV9QSFlTUl9TTUFTS1x0MHhjMDAwXG5AQCAtMTY0LDggKzI1MCw1NiBAQFxuIFx0I2RlZmluZSBHTUlJX1BIWV9QR1NFTF9QQUdFM1x0MHgwMDAzXG4gXHQjZGVmaW5lIEdNSUlfUEhZX1BHU0VMX1BBR0U1XHQweDAwMDVcbiBcbisvKiBUWCBEZXNjcmlwdG9yICovXG4rI2RlZmluZSBBWDE3OUFfVFhfREVTQ19MRU5fTUFTS1x0XHQweDFGRkZGRlxuKyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfRFJPUF9QQUREXHRCSVQoMjgpXG4rI2RlZmluZSBBWDE3OUFfVFhfREVTQ19WTEFOXHRcdEJJVCgyOSlcbisjZGVmaW5lIEFYMTc5QV9UWF9ERVNDX01TU19NQVNLXHRcdDB4N0ZGRlxuKyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfTVNTX1NISUZUXHQweDIwXG4rI2RlZmluZSBBWDE3OUFfVFhfREVTQ19WTEFOX01BU0tcdDB4RkZGRlxuKyNkZWZpbmUgQVgxNzlBX1RYX0RFU0NfVkxBTl9TSElGVFx0MHgzMFxuK1xuKy8qIFJYIFBhY2tldCBEZXNjcmlwdG9yICovXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTDRfRVJSXHRcdEJJVCgwKVxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0VSUlx0XHRCSVQoMSlcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9UWVBFX01BU0tcdDB4MUNcbisjZGVmaW5lIEFYMTc5QV9SWF9QRF9MNF9VRFBcdFx0MHgwNFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0w0X1RDUFx0XHQweDEwXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTDNfVFlQRV9NQVNLXHQweDYwXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTDNfSVBcdFx0MHgyMFxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0wzX0lQNlx0XHQweDQwXG4rXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfVkxBTlx0XHRCSVQoMTApXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfUlhfT0tcdFx0QklUKDExKVxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0RST1BcdFx0QklUKDMxKVxuKyNkZWZpbmUgQVgxNzlBX1JYX1BEX0xFTl9NQVNLXHQweDdGRkYwMDAwXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfTEVOX1NISUZUXHQweDEwXG4rI2RlZmluZSBBWDE3OUFfUlhfUERfVkxBTl9TSElGVFx0MHgyMFxuK1xuKy8qIFJYIERlc2NyaXB0b3IgaGVhZGVyICovXG4rI2RlZmluZSBBWDE3OUFfUlhfREhfUEtUX0NOVF9NQVNLXHRcdDB4MUZGRlxuKyNkZWZpbmUgQVgxNzlBX1JYX0RIX0RFU0NfT0ZGU0VUX01BU0tcdDB4RkZGRkUwMDBcbisjZGVmaW5lIEFYMTc5QV9SWF9ESF9ERVNDX09GRlNFVF9TSElGVFx0MHgwRFxuK1xuKyNkZWZpbmUgQVgxNzlBX1JYX0hXX1BBRFx0XHRcdDB4MDJcbitcbiBzdGF0aWMgaW50IGF4ODgxNzlfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KTtcbiBcbitlbnVtIGF4X2V0aGVyX2xpbmtfc3BlZWQge1xuK1x0RVRIRVJfTElOS19OT05FID0gMCxcbitcdEVUSEVSX0xJTktfMTAgICA9IDEsXG4rXHRFVEhFUl9MSU5LXzEwMCAgPSAyLFxuK1x0RVRIRVJfTElOS18xMDAwID0gMyxcbitcdEVUSEVSX0xJTktfMjUwMCA9IDQsXG4rfTtcbitcbitlbnVtIGF4X2NoaXBfdmVyc2lvbiB7XG4rXHRBWF9WRVJTSU9OX0lOVkFMSURcdFx0PSAweDAsXG4rXHRBWF9WRVJTSU9OX0FYODgxNzlcdFx0PSAweDQsXG4rXHRBWF9WRVJTSU9OX0FYODgxNzlBXHRcdD0gMHg2LFx0LyogQWxzbyBBWDg4NzcyRCAqL1xuK1x0QVhfVkVSU0lPTl9BWDg4Mjc5XHRcdD0gMHg3LFxuK307XG4rXG4gc3RydWN0IGF4ODgxNzlfZGF0YSB7XG4gXHR1OCAgZWVlX2VuYWJsZWQ7XG4gXHR1OCAgZWVlX2FjdGl2ZTtcbkBAIC0xNzQsNiArMzA4LDE2IEBAIHN0cnVjdCBheDg4MTc5X2RhdGEge1xuIFx0dTMyIHdvbF9zdXBwb3J0ZWQ7XG4gXHR1MzIgd29sb3B0cztcbiBcdHU4IGRpc2Nvbm5lY3Rpbmc7XG4rXHR1OCBjaGlwX3ZlcnNpb247XG4rXHR1OCBmd192ZXJzaW9uWzRdO1xuK1x0dTggaXNfYXg4ODc3MmQ7XG4rXHR1OCBpcF9hbGlnbjtcbitcdHU4IGxpbms7XG4rXHR1OCBzcGVlZDtcbitcdHU4IGZ1bGxfZHVwbGV4O1xuK1x0dTggcnhfY2hlY2tzdW07XG4rXHR1OCBlZXByb21fcmVhZF9jbWQ7XG4rXHR1MTYgZWVwcm9tX2Jsb2NrO1xuIH07XG4gXG4gc3RydWN0IGF4ODgxNzlfaW50X2RhdGEge1xuQEAgLTE4MSwxNSArMzI1LDQ4IEBAIHN0cnVjdCBheDg4MTc5X2ludF9kYXRhIHtcbiBcdF9fbGUzMiBpbnRkYXRhMjtcbiB9O1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuK3N0cnVjdCBheF9idWxraW5fc2V0dGluZ3Mge1xuIFx0dW5zaWduZWQgY2hhciBjdHJsLCB0aW1lcl9sLCB0aW1lcl9oLCBzaXplLCBpZmc7XG4tfSBBWDg4MTc5X0JVTEtJTl9TSVpFW10gPVx0e1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODE3OV9CVUxLSU5fU0laRVtdID1cdHtcbiBcdHs3LCAweDRmLCAwLFx0MHgxMiwgMHhmZn0sXG4gXHR7NywgMHgyMCwgMyxcdDB4MTYsIDB4ZmZ9LFxuIFx0ezcsIDB4YWUsIDcsXHQweDE4LCAweGZmfSxcbiBcdHs3LCAweGNjLCAweDRjLCAweDE4LCA4fSxcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhfYnVsa2luX3NldHRpbmdzIEFYODgxNzlBX0JVTEtJTl9TSVpFW10gPSB7XG4rXHR7NSwgMHg3QiwgMHgwMCxcdDB4MTcsIDB4MEZ9LFx0LyogMUcsIFNTICovXG4rXHR7NSwgMHhDMCwgMHgwMixcdDB4MDYsIDB4MEZ9LFx0LyogMUcsIEhTICovXG4rXHR7NywgMHhGMCwgMHgwMCxcdDB4MEMsIDB4MEZ9LFx0LyogMTAwTSwgRnVsbCwgU1MgKi9cbitcdHs2LCAweDAwLCAweDAwLFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBIYWxmLCBTUyAqL1xuK1x0ezUsIDB4QzAsIDB4MDQsXHQweDA2LCAweDBGfSxcdC8qIDEwME0sIEZ1bGwsIEhTICovXG4rXHR7NywgMHhDMCwgMHgwNCxcdDB4MDYsIDB4MEZ9LFx0LyogMTAwTSwgSGFsZiwgSFMgKi9cbitcdHs3LCAweDAwLCAweDAwLFx0MHgwMywgMHgzRn0sXHQvKiBGUyAqL1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBheF9idWxraW5fc2V0dGluZ3MgQVg4ODc3MkRfQlVMS0lOX1NJWkVbXSA9IHtcbitcdHswLCAweDAwLCAweDAwLFx0MHgwMCwgMHgwMH0sXHQvKiAxRywgU1MgKHVudXNlZCkgKi9cbitcdHswLCAweDAwLCAweDAwLFx0MHgwMCwgMHgwMH0sXHQvKiAxRywgSFMgKHVudXNlZCkgKi9cbitcdHswLCAweDAwLCAweDAwLFx0MHgwMCwgMHgwMH0sXHQvKiAxMDBNLCBGdWxsLCBTUyAodW51c2VkKSAqL1xuK1x0ezAsIDB4MDAsIDB4MDAsXHQweDAwLCAweDAwfSxcdC8qIDEwME0sIEhhbGYsIFNTICh1bnVzZWQpICovXG4rXHR7NSwgMHhDMCwgMHgwNCxcdDB4MDYsIDB4MEZ9LFx0LyogMTAwTSwgRnVsbCwgSFMgKi9cbitcdHs3LCAweEMwLCAweDA0LFx0MHgwNiwgMHgwRn0sXHQvKiAxMDBNLCBIYWxmLCBIUyAqL1xuK1x0ezcsIDB4MDAsIDB4MDAsXHQweDAzLCAweDNGfSxcdC8qIEZTICovXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGF4X2J1bGtpbl9zZXR0aW5ncyBBWDg4Mjc5X0JVTEtJTl9TSVpFW10gPSB7XG4rXHR7NSwgMHgxMCwgMHgwMSxcdDB4MTEsIDB4MEZ9LFx0LyogMi41RyAqL1xuK1x0ezcsIDB4QjMsIDB4MDEsXHQweDExLCAweDBGfSxcdC8qIDFHLCBTUyAqL1xuK1x0ezcsIDB4QzAsIDB4MDIsXHQweDA2LCAweDBGfSxcdC8qIDFHLCBIUyAqL1xuK1x0ezcsIDB4ODAsIDB4MDEsXHQweDAzLCAweDBGfSxcdC8qIDEwME0sIEZ1bGwsIFNTICovXG4rXHR7NywgMHg4MCwgMHgwMSxcdDB4MDMsIDB4MEZ9LFx0LyogMTAwTSwgSGFsZiwgU1MgKi9cbitcdHs3LCAweDgwLCAweDAxLFx0MHgwMywgMHgwRn0sXHQvKiAxMDBNLCBGdWxsLCBIUyAqL1xuK1x0ezcsIDB4ODAsIDB4MDEsXHQweDAzLCAweDBGfSxcdC8qIDEwME0sIEhhbGYsIEhTICovXG4rXHR7NywgMHgwMCwgMHgwMCxcdDB4MDMsIDB4M0Z9LFx0LyogRlMgKi9cbit9O1xuK1xuIHN0YXRpYyB2b2lkIGF4ODgxNzlfc2V0X3BtX21vZGUoc3RydWN0IHVzYm5ldCAqZGV2LCBib29sIHBtX21vZGUpXG4ge1xuIFx0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbkBAIC0zMTMsNiArNDkwLDcgQEAgc3RhdGljIGludCBheDg4MTc5X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXG4gXG4gc3RhdGljIHZvaWQgYXg4ODE3OV9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpXG4ge1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiBcdHN0cnVjdCBheDg4MTc5X2ludF9kYXRhICpldmVudDtcbiBcdHUzMiBsaW5rO1xuIFxuQEAgLTMyMyw2ICs1MDEsOSBAQCBzdGF0aWMgdm9pZCBheDg4MTc5X3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcbiBcdGxlMzJfdG9fY3B1cygodm9pZCAqKVx1MDAyNmV2ZW50LVx1MDAzZWludGRhdGExKTtcbiBcbiBcdGxpbmsgPSAoKChfX2ZvcmNlIHUzMilldmVudC1cdTAwM2VpbnRkYXRhMSkgXHUwMDI2IEFYX0lOVF9QUExTX0xJTkspIFx1MDAzZVx1MDAzZSAxNjtcbitcdGRhdGEtXHUwMDNlc3BlZWQgPSAoKChfX2ZvcmNlIHUzMilldmVudC1cdTAwM2VpbnRkYXRhMSkgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweDc7XG4rXHRkYXRhLVx1MDAzZWZ1bGxfZHVwbGV4ID0gKCgoX19mb3JjZSB1MzIpZXZlbnQtXHUwMDNlaW50ZGF0YTEpIFx1MDAzZVx1MDAzZSAxMikgXHUwMDI2IDB4MTtcbitcdGRhdGEtXHUwMDNlbGluayA9IGxpbms7XG4gXG4gXHRpZiAobmV0aWZfY2Fycmllcl9vayhkZXYtXHUwMDNlbmV0KSAhPSBsaW5rKSB7XG4gXHRcdHVzYm5ldF9saW5rX2NoYW5nZShkZXYsIGxpbmssIDEpO1xuQEAgLTQwMyw2ICs1ODQsMzIgQEAgYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHBydGFkLCB1MTYgZGV2YWQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBheF9yZWFkX21tZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBkZXZfYWRkciwgdTE2IHJlZylcbit7XG4rXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1x0dTE2IHJlcztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XG4rXHRcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfQ0xBVVNFNDUsIGRldl9hZGRyLCByZWcsIDIsIFx1MDAyNnJlcyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsIHJlZywgZGV2X2FkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGF4X3dyaXRlX21tZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBkZXZfYWRkciwgdTE2IHJlZywgdTE2IGRhdGEpXG4re1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbitcbitcdGlmIChwcml2LVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4rXHRcdHJldHVybiBheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1BIWV9DTEFVU0U0NSwgZGV2X2FkZHIsIHJlZywgMiwgXHUwMDI2ZGF0YSk7XG4rXG4rXHRyZXR1cm4gYXg4ODE3OV9waHlfd3JpdGVfbW1kX2luZGlyZWN0KGRldiwgcmVnLCBkZXZfYWRkciwgZGF0YSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYXg4ODE3OV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbiB7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuQEAgLTQxNCw3ICs2MjEsNiBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXG4gXG4gXHR1c2JuZXRfc3VzcGVuZChpbnRmLCBtZXNzYWdlKTtcbiBcbi1cdC8qIEVuYWJsZSBXb0wgKi9cbiBcdGlmIChwcml2LVx1MDAzZXdvbG9wdHMpIHtcbiBcdFx0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELFxuIFx0XHRcdFx0IDEsIDEsIFx1MDAyNnRtcDgpO1xuQEAgLTQyNSw2ICs2MzEsMjYgQEAgc3RhdGljIGludCBheDg4MTc5X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKVxuIFxuIFx0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01PTklUT1JfTU9ELFxuIFx0XHRcdFx0ICAxLCAxLCBcdTAwMjZ0bXA4KTtcbitcbitcdFx0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuK1x0XHRcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIFx1MDAyNnRtcDE2KTtcbitcdFx0XHR0bXAxNiB8PSBBWF9NRURJVU1fUkVDRUlWRV9FTjtcbitcdFx0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwgMiwgMiwgXHUwMDI2dG1wMTYpO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChwcml2LVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpXG4rXHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9XQUtFVVBfU0VUVElORywgOCxcbitcdFx0XHRcdFx0ICBFUEhZX0xPV19QT1dFUl9FTiB8IFM1X1dPTF9FTlxuK1x0XHRcdFx0XHQgIHwgUzVfV09MX0xPV19QT1dFUiB8IDB4ODAwMCwgMCwgTlVMTCk7XG4rXG4rXHR9IGVsc2UgaWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1dBS0VVUF9TRVRUSU5HLCA4LCAweDgwMDAsIDAsIE5VTEwpO1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1dBS0VVUF9TRVRUSU5HLCAwLCBFUEhZX0xPV19QT1dFUl9FTiwgMCwgTlVMTCk7XG4rXHRcdGF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCBmYWxzZSk7XG4rXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0LyogRGlzYWJsZSBSWCBwYXRoICovXG5AQCAtNDM2LDExICs2NjIsMTEgQEAgc3RhdGljIGludCBheDg4MTc5X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKVxuIFxuIFx0LyogRm9yY2UgYnVsay1pbiB6ZXJvIGxlbmd0aCAqL1xuIFx0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsXG4tXHRcdFx0IDIsIDIsIFx1MDAyNnRtcDE2KTtcbitcdFx0XHQyLCAyLCBcdTAwMjZ0bXAxNik7XG4gXG4gXHR0bXAxNiB8PSBBWF9QSFlQV1JfUlNUQ1RMX0JaIHwgQVhfUEhZUFdSX1JTVENUTF9JUFJMO1xuIFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLFxuLVx0XHRcdCAgMiwgMiwgXHUwMDI2dG1wMTYpO1xuK1x0XHRcdDIsIDIsIFx1MDAyNnRtcDE2KTtcbiBcbiBcdC8qIGNoYW5nZSBjbG9jayAqL1xuIFx0dG1wOCA9IDA7XG5AQCAtNDU2LDEyICs2ODIsMTkgQEAgc3RhdGljIGludCBheDg4MTc5X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKVxuIH1cbiBcbiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBhdXRvZGV0YWNoIGZ1bmN0aW9uLiAqL1xuLS8qIFRoaXMgZnVuY3Rpb24gaXMgZGV0ZXJtaW5lZCBieSBvZmZzZXQgMHg0MyBvZiBFRVBST00gKi9cbisvKiBUaGlzIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYnkgb2Zmc2V0IDB4NDMgb2YgRUVQUk9NIGZvciB0aGUgQVg4ODE3OSAqL1xuIHN0YXRpYyBpbnQgYXg4ODE3OV9hdXRvX2RldGFjaChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4ge1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiBcdHUxNiB0bXAxNjtcbiBcdHU4IHRtcDg7XG4gXG4rXHRpZiAocHJpdi1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XG4rXHRcdHRtcDE2ID0gQVg4ODE3OUFfQVVUT0RFVEFDSF9ERUxBWTtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9BVVRPREVUQUNILCB0bXAxNiwgMCwgMCwgTlVMTCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0aWYgKGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfRUVQUk9NLCAweDQzLCAxLCAyLCBcdTAwMjZ0bXAxNikgXHUwMDNjIDApXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTQ4NCwxMSArNzE3LDMxIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9hdXRvX2RldGFjaChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gc3RhdGljIGludCBheDg4MTc5X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiB7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTtcbitcdHU4IHJlZzg7XG4gXG4rXHRheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFx0YXg4ODE3OV9zZXRfcG1fbW9kZShkZXYsIHRydWUpO1xuIFxuIFx0dXNibmV0X2xpbmtfY2hhbmdlKGRldiwgMCwgMCk7XG4gXG4rXHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNlPSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XG4rXHRcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnJlZzgpO1xuK1x0XHRpZiAoIShyZWc4IFx1MDAyNiBBWF9QSFlfUE9XRVIpKSB7XG4rXHRcdFx0cmVnOCA9IEFYX1BIWV9QT1dFUjtcbitcdFx0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgXHUwMDI2cmVnOCk7XG4rXHRcdFx0bXNsZWVwKDI1MCk7XG4rXHRcdH1cbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9GV19NT0RFLCBBWF9GV19NT0RFXzE3OUEsIDAsIDAsIE5VTEwpO1xuK1xuK1x0XHQvKiBOb3csIHRoYXQgQVhfRldfTU9ERV8xNzlBIGlzIGVuYWJsZWQsIHRoZSBQSFkgbmVlZHMgYSBwb3dlci1jeWNsZS5cbitcdFx0ICogUEhZLXBvd2VyIGlzIHJlLWVuYWJsZWQgaW4gYXg4ODE3OV9yZXNldCgpXG4rXHRcdCAqL1xuK1x0XHRyZWc4ID0gMDtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnJlZzgpO1xuK1x0XHRtc2xlZXAoMjUwKTtcbitcdH1cbitcbiBcdGF4ODgxNzlfcmVzZXQoZGV2KTtcbiBcbiBcdGF4ODgxNzlfc2V0X3BtX21vZGUoZGV2LCBmYWxzZSk7XG5AQCAtNTEwLDYgKzc2MywyMSBAQCBzdGF0aWMgdm9pZCBheDg4MTc5X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHR1c2JuZXRfZGlzY29ubmVjdChpbnRmKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYXg4ODE3OV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4rXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1xuK1x0LyogSW5oZXJpdCBzdGFuZGFyZCBkZXZpY2UgaW5mbyAqL1xuK1x0dXNibmV0X2dldF9kcnZpbmZvKG5ldCwgaW5mbyk7XG4rXHRpZiAocHJpdi1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4rXHRcdHJldHVybjtcbitcbitcdHNucHJpbnRmKGluZm8tXHUwMDNlZndfdmVyc2lvbiwgc2l6ZW9mKGluZm8tXHUwMDNlZndfdmVyc2lvbiksIFwiJWQuJWQuJWQuJWRcIixcbitcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvblswXSwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uWzFdLFxuK1x0XHQgcHJpdi1cdTAwM2Vmd192ZXJzaW9uWzJdLCBwcml2LVx1MDAzZWZ3X3ZlcnNpb25bM10pO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIGF4ODgxNzlfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKVxuIHtcbkBAIC01MzYsNDEgKzgwNCw3NCBAQCBheDg4MTc5X3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29saW5mbylcbiBcbiBzdGF0aWMgaW50IGF4ODgxNzlfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiB7XG4tXHRyZXR1cm4gQVhfRUVQUk9NX0xFTjtcbitcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4rXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhO1xuK1xuK1x0YXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbitcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSlcbitcdFx0cmV0dXJuIEFYX0VFUFJPTV9MRU47XG4rXHRlbHNlIGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSlcbitcdFx0cmV0dXJuIEFYODgyNzlfRUVQUk9NX0xFTjtcbitcdGVsc2VcbitcdFx0cmV0dXJuIEFYODgxNzlBX0VFUFJPTV9MRU47XG4gfVxuIFxuLXN0YXRpYyBpbnRcbi1heDg4MTc5X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXG4tXHRcdCAgIHU4ICpkYXRhKVxuK3N0YXRpYyB2b2lkXG4rYXg4ODE3OV9lZXByb21fYWNjZXNzX3BhcmFtcyhzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhLCBpbnQgaSwgdTE2ICp2YWx1ZSwgdTE2ICppZHgpXG4re1xuK1x0LyogQVg4ODE3OSBoYXMgYSB3b3JkLWFkZHJlc3NhYmxlIEVFUFJPTVxuK1x0ICogQVg4ODE3OUEgdXNlcyBFRlVTRVMgd2l0aCAyMCBieXRlcyBsZW5ndGhcbitcdCAqIEFYODgyNzkgaGFzIGFuIEVFUFJPTSBhZGRyZXNzYWJsZSBpbiAyNTYgYnl0ZSBibG9ja3NcbitcdCAqL1xuK1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XG4rXHRcdCp2YWx1ZSA9IGk7XG4rXHRcdCppZHggPSAxO1xuK1x0fSBlbHNlIGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHQqdmFsdWUgPSAoaSAqIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrKSBcdTAwM2VcdTAwM2UgMTY7XG4rXHRcdCppZHggPSAoaSAqIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrKSBcdTAwMjYgMHhmZmZmO1xuK1x0fSBlbHNlIHtcbitcdFx0KnZhbHVlID0gaSBcdTAwM2NcdTAwM2MgNDtcbitcdFx0KmlkeCA9IDA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgYXg4ODE3OV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuLVx0dTE2ICplZXByb21fYnVmZjtcbi1cdGludCBmaXJzdF93b3JkLCBsYXN0X3dvcmQ7XG4tXHRpbnQgaSwgcmV0O1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTtcbitcdGludCBmaXJzdCwgbGFzdCwgaSwgcmV0O1xuK1x0dTggKmVlcHJvbV9idWZmO1xuK1xuK1x0YXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiBcbiBcdGlmIChlZXByb20tXHUwMDNlbGVuID09IDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZWVwcm9tLVx1MDAzZW1hZ2ljID0gQVg4ODE3OV9FRVBST01fTUFHSUM7XG4gXG4tXHRmaXJzdF93b3JkID0gZWVwcm9tLVx1MDAzZW9mZnNldCBcdTAwM2VcdTAwM2UgMTtcbi1cdGxhc3Rfd29yZCA9IChlZXByb20tXHUwMDNlb2Zmc2V0ICsgZWVwcm9tLVx1MDAzZWxlbiAtIDEpIFx1MDAzZVx1MDAzZSAxO1xuLVx0ZWVwcm9tX2J1ZmYgPSBrbWFsbG9jX2FycmF5KGxhc3Rfd29yZCAtIGZpcnN0X3dvcmQgKyAxLCBzaXplb2YodTE2KSxcbi1cdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbitcdGZpcnN0ID0gZWVwcm9tLVx1MDAzZW9mZnNldCAvIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrO1xuK1x0bGFzdCA9IChlZXByb20tXHUwMDNlb2Zmc2V0ICsgZWVwcm9tLVx1MDAzZWxlbiAtIDEpIC8gYXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2s7XG4rXG4rXHRlZXByb21fYnVmZiA9IGt6YWxsb2MoKGxhc3QgLSBmaXJzdCArIDEpICogYXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2ssIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFlZXByb21fYnVmZilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHQvKiBheDg4MTc5LzE3OEEgcmV0dXJucyAyIGJ5dGVzIGZyb20gZWVwcm9tIG9uIHJlYWQgKi9cbi1cdGZvciAoaSA9IGZpcnN0X3dvcmQ7IGkgXHUwMDNjPSBsYXN0X3dvcmQ7IGkrKykge1xuLVx0XHRyZXQgPSBfX2F4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfRUVQUk9NLCBpLCAxLCAyLFxuLVx0XHRcdFx0XHQgXHUwMDI2ZWVwcm9tX2J1ZmZbaSAtIGZpcnN0X3dvcmRdKTtcbitcdGZvciAoaSA9IGZpcnN0OyBpIFx1MDAzYz0gbGFzdDsgaSsrKSB7XG4rXHRcdHUxNiB2YWx1ZSwgaWR4O1xuK1xuK1x0XHRheDg4MTc5X2VlcHJvbV9hY2Nlc3NfcGFyYW1zKGF4MTc5X2RhdGEsIGksIFx1MDAyNnZhbHVlLCBcdTAwMjZpZHgpO1xuK1x0XHRyZXQgPSBfX2F4ODgxNzlfcmVhZF9jbWQoZGV2LCBheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9yZWFkX2NtZCxcbitcdFx0XHRcdFx0IHZhbHVlLCBpZHgsIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrLFxuK1x0XHRcdFx0XHQgZWVwcm9tX2J1ZmYgKyAoaSAtIGZpcnN0KSAqIGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrKTtcbitcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRcdGtmcmVlKGVlcHJvbV9idWZmKTtcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0fVxuIFx0fVxuIFxuLVx0bWVtY3B5KGRhdGEsICh1OCAqKWVlcHJvbV9idWZmICsgKGVlcHJvbS1cdTAwM2VvZmZzZXQgXHUwMDI2IDEpLCBlZXByb20tXHUwMDNlbGVuKTtcbitcdG1lbWNweShkYXRhLCBlZXByb21fYnVmZiArIGVlcHJvbS1cdTAwM2VvZmZzZXQgJSBheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9ibG9jaywgZWVwcm9tLVx1MDAzZWxlbik7XG4gXHRrZnJlZShlZXByb21fYnVmZik7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTgwLDEyICs4ODEsMTcgQEAgYXg4ODE3OV9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLFxuIFx0XHQgICB1OCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YTtcbiBcdHUxNiAqZWVwcm9tX2J1ZmY7XG4gXHRpbnQgZmlyc3Rfd29yZDtcbiBcdGludCBsYXN0X3dvcmQ7XG4gXHRpbnQgcmV0O1xuIFx0aW50IGk7XG4gXG4rXHRheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzZT0gQVhfVkVSU0lPTl9BWDg4MTc5QSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuIFx0bmV0ZGV2X2RiZyhuZXQsIFwid3JpdGUgRUVQUk9NIGxlbiAlZCwgb2Zmc2V0ICVkLCBtYWdpYyAweCV4XFxuXCIsXG4gXHRcdCAgIGVlcHJvbS1cdTAwM2VsZW4sIGVlcHJvbS1cdTAwM2VvZmZzZXQsIGVlcHJvbS1cdTAwM2VtYWdpYyk7XG4gXG5AQCAtNjUxLDEyICs5NTcsMzkgQEAgYXg4ODE3OV9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLFxuIH1cbiBcbiBzdGF0aWMgaW50IGF4ODgxNzlfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4ge1xuIFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XG4rXHRpbnQgdjtcbitcbitcdGRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXG4gXHRtaWlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MoXHUwMDI2ZGV2LVx1MDAzZW1paSwgY21kKTtcbiBcbitcdGlmIChkYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHRcdCBjbWQtXHUwMDNlbGlua19tb2Rlcy5zdXBwb3J0ZWQpO1xuK1xuK1x0XHR2ID0gYXg4ODE3OV9tZGlvX3JlYWQoZGV2LVx1MDAzZW5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xuK1x0XHRpZiAodiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHYgXHUwMDI2IEFEVkVSVElTRV9SRVNWKVxuK1x0XHRcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxuK1x0XHRcdFx0XHQgY21kLVx1MDAzZWxpbmtfbW9kZXMuYWR2ZXJ0aXNpbmcpO1xuK1xuK1x0XHR2ID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9TVEFUKTtcbitcdFx0aWYgKGRhdGEtXHUwMDNlc3BlZWQgPT0gRVRIRVJfTElOS18yNTAwKSB7XG4rXHRcdFx0Y21kLVx1MDAzZWJhc2Uuc3BlZWQgPSBTUEVFRF8yNTAwO1xuK1x0XHRcdC8qIE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUcgaXMgYnJva2VuLCBidXQgd2UgY2FuIGRlZHVjZSB0aGF0XG4rXHRcdFx0ICogdGhlIGxpbmstcGFydG5lciBhZHZlcnRpc2VkIDI1MDBNIGlmIHJlbW90ZWx5IEFOIHN1Y2NjZWRlZFxuK1x0XHRcdCAqIGZvciBsaW5rIHNwZWVkIFx1MDAzZSAxMDAwTSBhbmQgd2UgbG9jYWxseSBoYXZlIGEgbGluayBzcGVlZCBvZlxuK1x0XHRcdCAqIDI1MDBNXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHYgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiB2IFx1MDAyNiBNRElPX0FOXzEwR0JUX1NUQVRfUkVNT0spXG4rXHRcdFx0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHRcdFx0XHQgY21kLVx1MDAzZWxpbmtfbW9kZXMubHBfYWR2ZXJ0aXNpbmcpO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjY0LDM0ICs5OTcsMTI4IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4ge1xuIFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XG4rXHRpbnQgdjtcbitcbitcdGRhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4rXG4rXHQvKiBtaWlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MgaGFuZGxlcyB1bmtub3duIGJpdHMgaW4gTUlJX0FEVkVSVElTRVxuK1x0ICogdHJhbnNwYXJlbnRseSwgc28gZm9yIHRoZSAyLjVHQml0IGxpbmsgc3BlZWQgb2YgdGhlIEFYX1ZFUlNJT05fQVg4ODI3OVxuK1x0ICogd2UganVzdCBzZXQgdXAgQURWRVJUSVNFX1JFU1YgYmVmb3JlIGNhbGxpbmcgbWlpX2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzXG4rXHQgKiBhdCBsZWFzdCBmb3Igc3BlZWRzIFx1MDAzYyAyNTAwXG4rXHQgKi9cbitcdGlmIChkYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpIHtcbitcdFx0diA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xuK1x0XHRpZiAodiBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gdjtcbitcbitcdFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHRcdCAgICAgIGNtZC1cdTAwM2VsaW5rX21vZGVzLmFkdmVydGlzaW5nKSlcbitcdFx0XHR2IHw9IEFEVkVSVElTRV9SRVNWO1xuK1x0XHRlbHNlXG4rXHRcdFx0diBcdTAwMjY9IH5BRFZFUlRJU0VfUkVTVjtcbitcdFx0YXg4ODE3OV9tZGlvX3dyaXRlKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsIHYpO1xuK1x0XHRpZiAoY21kLVx1MDAzZWJhc2Uuc3BlZWQgPT0gU1BFRURfMjUwMClcbitcdFx0XHRyZXR1cm4gbWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbitcdH1cbitcbiBcdHJldHVybiBtaWlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MoXHUwMDI2ZGV2LVx1MDAzZW1paSwgY21kKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYXg4ODE3OWFfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpXG4re1xuK1x0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XG4rXHR1MTYgYm1jciwgbGNsYWR2LCBybXRhZHY7XG4rXHR1OCBjYXA7XG4rXG4rXHRkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1xuK1x0aWYgKGRhdGEtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzYyBBWF9WRVJTSU9OX0FYODgxNzlBKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRibWNyID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0JNQ1IpO1xuK1x0bGNsYWR2ID0gYXg4ODE3OV9tZGlvX3JlYWQobmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7XG4rXHRybXRhZHYgPSBheDg4MTc5X21kaW9fcmVhZChuZXQsIGRldi1cdTAwM2VtaWkucGh5X2lkLCBNSUlfTFBBKTtcbitcbitcdGlmICghKGJtY3IgXHUwMDI2IEJNQ1JfQU5FTkFCTEUpKSB7XG4rXHRcdHBhdXNlLVx1MDAzZWF1dG9uZWcgPSAwO1xuK1x0XHRwYXVzZS1cdTAwM2VyeF9wYXVzZSA9IDA7XG4rXHRcdHBhdXNlLVx1MDAzZXR4X3BhdXNlID0gMDtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cGF1c2UtXHUwMDNlYXV0b25lZyA9IDE7XG4rXG4rXHRjYXAgPSBtaWlfcmVzb2x2ZV9mbG93Y3RybF9mZHgobGNsYWR2LCBybXRhZHYpO1xuK1xuK1x0aWYgKGNhcCBcdTAwMjYgRkxPV19DVFJMX1JYKVxuK1x0XHRwYXVzZS1cdTAwM2VyeF9wYXVzZSA9IDE7XG4rXG4rXHRpZiAoY2FwIFx1MDAyNiBGTE9XX0NUUkxfVFgpXG4rXHRcdHBhdXNlLVx1MDAzZXR4X3BhdXNlID0gMTtcbit9XG4rXG4rc3RhdGljIGludCBheDg4MTc5YV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSlcbit7XG4rXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpO1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqZGF0YTtcbitcdHUxNiBvbGQsIG5ldzEsIGJtY3I7XG4rXHR1OCBjYXAgPSAwO1xuK1xuK1x0ZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbitcbitcdGlmIChkYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0Ym1jciA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9CTUNSKTtcbitcdGlmIChwYXVzZS1cdTAwM2VhdXRvbmVnIFx1MDAyNlx1MDAyNiAhKGJtY3IgXHUwMDI2IEJNQ1JfQU5FTkFCTEUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChwYXVzZS1cdTAwM2VyeF9wYXVzZSlcbitcdFx0Y2FwIHw9IEZMT1dfQ1RSTF9SWDtcbitcbitcdGlmIChwYXVzZS1cdTAwM2V0eF9wYXVzZSlcbitcdFx0Y2FwIHw9IEZMT1dfQ1RSTF9UWDtcbitcbitcdG9sZCA9IGF4ODgxNzlfbWRpb19yZWFkKG5ldCwgZGV2LVx1MDAzZW1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpO1xuK1x0bmV3MSA9IChvbGQgXHUwMDI2IH4oQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNKSkgfFxuK1x0XHRtaWlfYWR2ZXJ0aXNlX2Zsb3djdHJsKGNhcCk7XG4rXHRpZiAob2xkICE9IG5ldzEpXG4rXHRcdGF4ODgxNzlfbWRpb193cml0ZShuZXQsIGRldi1cdTAwM2VtaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLCBuZXcxKTtcbitcbitcdHJldHVybiBtaWlfbndheV9yZXN0YXJ0KFx1MDAyNmRldi1cdTAwM2VtaWkpO1xuK31cbitcbiBzdGF0aWMgaW50XG4gYXg4ODE3OV9ldGh0b29sX2dldF9lZWUoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIHtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXHRpbnQgdmFsO1xuIFxuIFx0LyogR2V0IFN1cHBvcnRlZCBFRUUgKi9cbi1cdHZhbCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgTURJT19QQ1NfRUVFX0FCTEUsXG4tXHRcdFx0XHRcdCAgICBNRElPX01NRF9QQ1MpO1xuK1x0dmFsID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9QQ1MsIE1ESU9fUENTX0VFRV9BQkxFKTtcbiBcdGlmICh2YWwgXHUwMDNjIDApXG4gXHRcdHJldHVybiB2YWw7XG4gXHRtaWlfZWVlX2NhcDFfbW9kX2xpbmttb2RlX3QoZGF0YS1cdTAwM2VzdXBwb3J0ZWQsIHZhbCk7XG4gXG4gXHQvKiBHZXQgYWR2ZXJ0aXNlbWVudCBFRUUgKi9cbi1cdHZhbCA9IGF4ODgxNzlfcGh5X3JlYWRfbW1kX2luZGlyZWN0KGRldiwgTURJT19BTl9FRUVfQURWLFxuLVx0XHRcdFx0XHQgICAgTURJT19NTURfQU4pO1xuK1x0dmFsID0gYXhfcmVhZF9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWKTtcbiBcdGlmICh2YWwgXHUwMDNjIDApXG4gXHRcdHJldHVybiB2YWw7XG4gXHRtaWlfZWVlX2NhcDFfbW9kX2xpbmttb2RlX3QoZGF0YS1cdTAwM2VhZHZlcnRpc2VkLCB2YWwpO1xuIFxuIFx0LyogR2V0IExQIGFkdmVydGlzZW1lbnQgRUVFICovXG4tXHR2YWwgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsIE1ESU9fQU5fRUVFX0xQQUJMRSxcbi1cdFx0XHRcdFx0ICAgIE1ESU9fTU1EX0FOKTtcbitcdHZhbCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0xQQUJMRSk7XG4gXHRpZiAodmFsIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdmFsO1xuIFx0bWlpX2VlZV9jYXAxX21vZF9saW5rbW9kZV90KGRhdGEtXHUwMDNlbHBfYWR2ZXJ0aXNlZCwgdmFsKTtcbitcdGlmIChwcml2LVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHR2YWwgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9MUEFCTEUyKTtcbitcdFx0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gdmFsO1xuK1x0XHRtaWlfZWVlX2NhcDJfbW9kX2xpbmttb2RlX2Fkdl90KGRhdGEtXHUwMDNlbHBfYWR2ZXJ0aXNlZCwgdmFsKTtcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03MDEsOCArMTEyOCw3IEBAIGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcbiB7XG4gXHR1MTYgdG1wMTYgPSBsaW5rbW9kZV90b19taWlfZWVlX2NhcDFfdChkYXRhLVx1MDAzZWFkdmVydGlzZWQpO1xuIFxuLVx0cmV0dXJuIGF4ODgxNzlfcGh5X3dyaXRlX21tZF9pbmRpcmVjdChkZXYsIE1ESU9fQU5fRUVFX0FEVixcbi1cdFx0XHRcdFx0ICAgICAgTURJT19NTURfQU4sIHRtcDE2KTtcbitcdHJldHVybiBheF93cml0ZV9tbWQoZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWLCB0bXAxNik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGtfZWVlKHN0cnVjdCB1c2JuZXQgKmRldilcbkBAIC03MTIsNDAgKzExMzgsMjcgQEAgc3RhdGljIGludCBheDg4MTc5X2Noa19lZWUoc3RydWN0IHVzYm5ldCAqZGV2KVxuIFxuIFx0bWlpX2V0aHRvb2xfZ3NldChcdTAwMjZkZXYtXHUwMDNlbWlpLCBcdTAwMjZlY21kKTtcbiBcbi1cdGlmIChlY21kLmR1cGxleCBcdTAwMjYgRFVQTEVYX0ZVTEwpIHtcbitcdHByaXYtXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XG4rXHRpZiAoKHByaXYtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzYyBBWF9WRVJTSU9OX0FYODgyNzkgXHUwMDI2XHUwMDI2IChlY21kLmR1cGxleCBcdTAwMjYgRFVQTEVYX0ZVTEwpKSB8fFxuK1x0ICAgIChlY21kLnNwZWVkID09IFNQRUVEXzEwMDAgXHUwMDI2XHUwMDI2IChlY21kLmR1cGxleCBcdTAwMjYgRFVQTEVYX0ZVTEwpKSkge1xuIFx0XHRpbnQgZWVlX2xwLCBlZWVfY2FwLCBlZWVfYWR2O1xuIFx0XHR1MzIgbHAsIGNhcCwgYWR2LCBzdXBwb3J0ZWQgPSAwO1xuIFxuLVx0XHRlZWVfY2FwID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LFxuLVx0XHRcdFx0XHRcdFx0TURJT19QQ1NfRUVFX0FCTEUsXG4tXHRcdFx0XHRcdFx0XHRNRElPX01NRF9QQ1MpO1xuLVx0XHRpZiAoZWVlX2NhcCBcdTAwM2MgMCkge1xuLVx0XHRcdHByaXYtXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XG4rXHRcdGVlZV9jYXAgPSBheF9yZWFkX21tZChkZXYsIE1ESU9fTU1EX1BDUywgTURJT19QQ1NfRUVFX0FCTEUpO1xuK1x0XHRpZiAoZWVlX2NhcCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcbiBcdFx0Y2FwID0gbW1kX2VlZV9jYXBfdG9fZXRodG9vbF9zdXBfdChlZWVfY2FwKTtcbi1cdFx0aWYgKCFjYXApIHtcbi1cdFx0XHRwcml2LVx1MDAzZWVlZV9hY3RpdmUgPSAwO1xuK1x0XHRpZiAoIWNhcClcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbi1cbi1cdFx0ZWVlX2xwID0gYXg4ODE3OV9waHlfcmVhZF9tbWRfaW5kaXJlY3QoZGV2LFxuLVx0XHRcdFx0XHRcdCAgICAgICBNRElPX0FOX0VFRV9MUEFCTEUsXG4tXHRcdFx0XHRcdFx0ICAgICAgIE1ESU9fTU1EX0FOKTtcbi1cdFx0aWYgKGVlZV9scCBcdTAwM2MgMCkge1xuLVx0XHRcdHByaXYtXHUwMDNlZWVlX2FjdGl2ZSA9IDA7XG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4gXG4tXHRcdGVlZV9hZHYgPSBheDg4MTc5X3BoeV9yZWFkX21tZF9pbmRpcmVjdChkZXYsXG4tXHRcdFx0XHRcdFx0XHRNRElPX0FOX0VFRV9BRFYsXG4tXHRcdFx0XHRcdFx0XHRNRElPX01NRF9BTik7XG4rXHRcdGVlZV9scCA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0xQQUJMRSk7XG4rXHRcdGlmIChlZWVfbHAgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRcdGlmIChlZWVfYWR2IFx1MDAzYyAwKSB7XG4tXHRcdFx0cHJpdi1cdTAwM2VlZWVfYWN0aXZlID0gMDtcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbitcdFx0ZWVlX2FkdiA9IGF4X3JlYWRfbW1kKGRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0FEVik7XG4rXHRcdGlmIChlZWVfYWR2IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0XHRhZHYgPSBtbWRfZWVlX2Fkdl90b19ldGh0b29sX2Fkdl90KGVlZV9hZHYpO1xuIFx0XHRscCA9IG1tZF9lZWVfYWR2X3RvX2V0aHRvb2xfYWR2X3QoZWVlX2xwKTtcbkBAIC03NTMsNjUgKzExNjYsNTMgQEAgc3RhdGljIGludCBheDg4MTc5X2Noa19lZWUoc3RydWN0IHVzYm5ldCAqZGV2KVxuIFx0XHRcdCAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIDpcbiBcdFx0XHQgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsO1xuIFxuLVx0XHRpZiAoIShscCBcdTAwMjYgYWR2IFx1MDAyNiBzdXBwb3J0ZWQpKSB7XG4tXHRcdFx0cHJpdi1cdTAwM2VlZWVfYWN0aXZlID0gMDtcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbitcdFx0aWYgKCEobHAgXHUwMDI2IGFkdiBcdTAwMjYgc3VwcG9ydGVkKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdFx0cHJpdi1cdTAwM2VlZWVfYWN0aXZlID0gMTtcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRwcml2LVx1MDAzZWVlZV9hY3RpdmUgPSAwO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBheDg4MTc5X2Rpc2FibGVfZWVlKHN0cnVjdCB1c2JuZXQgKmRldilcbi17XG4tXHR1MTYgdG1wMTY7XG4tXG4tXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UzO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbi1cdFx0XHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcdTAwMjZ0bXAxNik7XG4tXG4tXHR0bXAxNiA9IDB4MzI0Njtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBNSUlfUEhZQUREUiwgMiwgXHUwMDI2dG1wMTYpO1xuLVxuLVx0dG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFMDtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBheDg4MTc5X2VuYWJsZV9lZWUoc3RydWN0IHVzYm5ldCAqZGV2KVxuK3N0YXRpYyB2b2lkIGF4ODgxNzlfZWVlX2NvbmZpZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIGJvb2wgZW5hYmxlKVxuIHtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gXHR1MTYgdG1wMTY7XG4gXG4tXHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UzO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbi1cdFx0XHQgIEdNSUlfUEhZX1BBR0VfU0VMRUNULCAyLCBcdTAwMjZ0bXAxNik7XG4tXG4tXHR0bXAxNiA9IDB4MzI0Nztcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBNSUlfUEhZQUREUiwgMiwgXHUwMDI2dG1wMTYpO1xuLVxuLVx0dG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFNTtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuLVxuLVx0dG1wMTYgPSAweDA2ODA7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuLVx0XHRcdCAgTUlJX0JNU1IsIDIsIFx1MDAyNnRtcDE2KTtcbitcdGlmIChwcml2LVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuK1x0XHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UzO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuK1x0XHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuK1xuK1x0XHR0bXAxNiA9IGVuYWJsZSA/IDB4MzI0NyA6IDB4MzI0NjtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbitcdFx0XHRcdCAgTUlJX1BIWUFERFIsIDIsIFx1MDAyNnRtcDE2KTtcbitcdFx0aWYgKGVuYWJsZSkge1xuK1x0XHRcdHRtcDE2ID0gR01JSV9QSFlfUEdTRUxfUEFHRTU7XG4rXHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfUEhZLCBBWDg4MTc5X1BIWV9JRCxcbitcdFx0XHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuK1xuK1x0XHRcdHRtcDE2ID0gMHgwNjgwO1xuK1x0XHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4rXHRcdFx0XHRcdCAgTUlJX0JNU1IsIDIsIFx1MDAyNnRtcDE2KTtcbitcdFx0fVxuIFxuLVx0dG1wMTYgPSBHTUlJX1BIWV9QR1NFTF9QQUdFMDtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX1BIWSwgQVg4ODE3OV9QSFlfSUQsXG4tXHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuK1x0XHR0bXAxNiA9IEdNSUlfUEhZX1BHU0VMX1BBR0UwO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19QSFksIEFYODgxNzlfUEhZX0lELFxuK1x0XHRcdFx0ICBHTUlJX1BIWV9QQUdFX1NFTEVDVCwgMiwgXHUwMDI2dG1wMTYpO1xuK1x0fSBlbHNlIHtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9HUEhZX0NUTCwgQVhfR1BIWV9FRUVfQ1RSTCwgZW5hYmxlLCAwLCBOVUxMKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCBheDg4MTc5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZWRhdGEpXG4ge1xuIFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbi1cdHN0cnVjdCBheDg4MTc5X2RhdGEgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4rXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2O1xuK1xuK1x0cHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiBcbiBcdGVkYXRhLVx1MDAzZWVlZV9lbmFibGVkID0gcHJpdi1cdTAwM2VlZWVfZW5hYmxlZDtcbiBcdGVkYXRhLVx1MDAzZWVlZV9hY3RpdmUgPSBwcml2LVx1MDAzZWVlZV9hY3RpdmU7XG5AQCAtODIyLDE4ICsxMjIzLDIwIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxuIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4tXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqcHJpdjtcbiBcdGludCByZXQ7XG4gXG4rXHRwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1xuIFx0cHJpdi1cdTAwM2VlZWVfZW5hYmxlZCA9IGVkYXRhLVx1MDAzZWVlZV9lbmFibGVkO1xuIFx0aWYgKCFwcml2LVx1MDAzZWVlZV9lbmFibGVkKSB7XG4tXHRcdGF4ODgxNzlfZGlzYWJsZV9lZWUoZGV2KTtcbitcdFx0YXg4ODE3OV9lZWVfY29uZmlnKGRldiwgZmFsc2UpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cHJpdi1cdTAwM2VlZWVfZW5hYmxlZCA9IGF4ODgxNzlfY2hrX2VlZShkZXYpO1xuIFx0XHRpZiAoIXByaXYtXHUwMDNlZWVlX2VuYWJsZWQpXG4gXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0XHRheDg4MTc5X2VuYWJsZV9lZWUoZGV2KTtcbitcdFx0YXg4ODE3OV9lZWVfY29uZmlnKGRldiwgdHJ1ZSk7XG4gXHR9XG4gXG4gXHRyZXQgPSBheDg4MTc5X2V0aHRvb2xfc2V0X2VlZShkZXYsIGVkYXRhKTtcbkBAIC04NDgsNiArMTI1MSw3IEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVkYXRhKVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzlfZXRodG9vbF9vcHMgPSB7XG4rXHQuZ2V0X2RydmluZm9cdFx0PSBheDg4MTc5X2dldF9kcnZpbmZvLFxuIFx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbiBcdC5nZXRfbXNnbGV2ZWxcdFx0PSB1c2JuZXRfZ2V0X21zZ2xldmVsLFxuIFx0LnNldF9tc2dsZXZlbFx0XHQ9IHVzYm5ldF9zZXRfbXNnbGV2ZWwsXG5AQCAtODYxLDE2ICsxMjY1LDc4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3OV9ldGh0b29sX29wcyA9IHtcbiBcdC5ud2F5X3Jlc2V0XHRcdD0gdXNibmV0X253YXlfcmVzZXQsXG4gXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IGF4ODgxNzlfZ2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LnNldF9saW5rX2tzZXR0aW5nc1x0PSBheDg4MTc5X3NldF9saW5rX2tzZXR0aW5ncyxcbitcdC5nZXRfcGF1c2VwYXJhbVx0XHQ9IGF4ODgxNzlhX2dldF9wYXVzZXBhcmFtLFxuK1x0LnNldF9wYXVzZXBhcmFtXHRcdD0gYXg4ODE3OWFfc2V0X3BhdXNlcGFyYW0sXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuIH07XG4gXG4rc3RhdGljIGludCBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXG4re1xuK1x0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbitcdHU4IHZsYW5fY3RybDtcbitcdHUxNiByZWcxNjtcbitcdHU4IHJlZzg7XG4rXG4rXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZyZWc4KTtcbitcdHZsYW5fY3RybCA9IHJlZzg7XG4rXG4rXHQvKiBBZGRyZXNzICovXG4rXHRyZWc4ID0gKHZpZCAvIDE2KTtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9BRERSRVNTLCAxLCAxLCBcdTAwMjZyZWc4KTtcbitcbitcdC8qIERhdGEgKi9cbitcdHJlZzggPSB2bGFuX2N0cmwgfCBBWF9WTEFOX0NPTlRST0xfUkQ7XG4rXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2cmVnOCk7XG4rXG4rXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMCwgMiwgMiwgXHUwMDI2cmVnMTYpO1xuK1x0cmVnMTYgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjICh2aWQgJSAxNikpO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCBcdTAwMjZyZWcxNik7XG4rXG4rXHRyZWc4ID0gdmxhbl9jdHJsIHwgQVhfVkxBTl9DT05UUk9MX1dFO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFx1MDAyNnJlZzgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpXG4re1xuK1x0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTtcbitcdHU4IHZsYW5fY3RybDtcbitcdHUxNiByZWcxNjtcbitcdHU4IHJlZzg7XG4rXG4rXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZyZWc4KTtcbitcdHZsYW5fY3RybCA9IHJlZzg7XG4rXG4rXHQvKiBBZGRyZXNzICovXG4rXHRyZWc4ID0gKHZpZCAvIDE2KTtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9BRERSRVNTLCAxLCAxLCBcdTAwMjZyZWc4KTtcbitcbitcdC8qIERhdGEgKi9cbitcdHJlZzggPSB2bGFuX2N0cmwgfCBBWF9WTEFOX0NPTlRST0xfUkQ7XG4rXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2cmVnOCk7XG4rXG4rXHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9EQVRBMCwgMiwgMiwgXHUwMDI2cmVnMTYpO1xuK1x0cmVnMTYgfD0gKDEgXHUwMDNjXHUwMDNjICh2aWQgJSAxNikpO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLCAyLCAyLCBcdTAwMjZyZWcxNik7XG4rXG4rXHRyZWc4ID0gdmxhbl9jdHJsIHwgQVhfVkxBTl9DT05UUk9MX1dFO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFx1MDAyNnJlZzgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGF4ODgxNzlfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KVxuIHtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4tXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFx0dTggKm1fZmlsdGVyID0gKCh1OCAqKWRldi1cdTAwM2VkYXRhKTtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmRhdGE7XG4rXG4rXHRkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFxuLVx0ZGF0YS1cdTAwM2VyeGN0bCA9IChBWF9SWF9DVExfU1RBUlQgfCBBWF9SWF9DVExfQUIgfCBBWF9SWF9DVExfSVBFKTtcbitcdGRhdGEtXHUwMDNlcnhjdGwgPSAoQVhfUlhfQ1RMX1NUQVJUIHwgQVhfUlhfQ1RMX0FCIHwgQVhfUlhfQ1RMX0RST1BDUkNFUlIpO1xuK1x0aWYgKGRhdGEtXHUwMDNlaXBfYWxpZ24pXG4rXHRcdGRhdGEtXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX0lQRTtcbiBcbiBcdGlmIChuZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSB7XG4gXHRcdGRhdGEtXHUwMDNlcnhjdGwgfD0gQVhfUlhfQ1RMX1BSTztcbkBAIC05MDksNiArMTM3NSw3IEBAIGF4ODgxNzlfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIHtcbiBcdHU4IHRtcDtcbiBcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7XG4rXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpkYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFx0bmV0ZGV2X2ZlYXR1cmVzX3QgY2hhbmdlZCA9IG5ldC1cdTAwM2VmZWF0dXJlcyBeIGZlYXR1cmVzO1xuIFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfSVBfQ1NVTSkge1xuQEAgLTkyOCw2ICsxMzk1LDM0IEBAIGF4ODgxNzlfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0XHR0bXAgXj0gQVhfUlhDT0VfSVAgfCBBWF9SWENPRV9UQ1AgfCBBWF9SWENPRV9VRFAgfFxuIFx0XHQgICAgICAgQVhfUlhDT0VfVENQVjYgfCBBWF9SWENPRV9VRFBWNjtcbiBcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWENPRV9DVEwsIDEsIDEsIFx1MDAyNnRtcCk7XG4rXHRcdGRhdGEtXHUwMDNlcnhfY2hlY2tzdW0gPSAhIShmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9SWENTVU0pO1xuK1x0fVxuK1xuK1x0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikge1xuK1x0XHRheDg4MTc5X3JlYWRfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfVkxBTl9JRF9DT05UUk9MLCAxLCAxLCBcdTAwMjZ0bXApO1xuK1x0XHR0bXAgXj0gQVhfVkxBTl9DT05UUk9MX1ZGRTtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFx1MDAyNnRtcCk7XG4rXHRcdGlmIChmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XG4rXHRcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIDI1NjsgaSsrKSB7XG4rXHRcdFx0XHR1MTYgdG1wMTY7XG4rXHRcdFx0XHQvKiBBZGRyZXNzICovXG4rXHRcdFx0XHR0bXAgPSBpO1xuK1x0XHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0FERFJFU1MsXG4rXHRcdFx0XHRcdFx0ICAxLCAxLCBcdTAwMjZ0bXApO1xuK1x0XHRcdFx0LyogRGF0YSAqL1xuK1x0XHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0RBVEEwLFxuK1x0XHRcdFx0XHRcdCAgMiwgMiwgXHUwMDI2dG1wMTYpO1xuK1x0XHRcdFx0dG1wID0gQVhfVkxBTl9DT05UUk9MX1dFO1xuK1x0XHRcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsXG4rXHRcdFx0XHRcdFx0ICAxLCAxLCBcdTAwMjZ0bXApO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYKSB7XG4rXHRcdGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9WTEFOX0lEX0NPTlRST0wsIDEsIDEsIFx1MDAyNnRtcCk7XG4rXHRcdHRtcCBePSBBWF9WTEFOX0NPTlRST0xfVlNPO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgXHUwMDI2dG1wKTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTk5NSw2ICsxNDkwLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBheDg4MTc5X25ldGRldl9vcHMgPSB7XG4gXHQubmRvX2V0aF9pb2N0bFx0XHQ9IHVzYm5ldF9taWlfaW9jdGwsXG4gXHQubmRvX3NldF9yeF9tb2RlXHQ9IGF4ODgxNzlfc2V0X211bHRpY2FzdCxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzXHQ9IGF4ODgxNzlfc2V0X2ZlYXR1cmVzLFxuK1x0Lm5kb192bGFuX3J4X2FkZF92aWRcdD0gYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZCxcbitcdC5uZG9fdmxhbl9yeF9raWxsX3ZpZFx0PSBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYXg4ODE3OV9jaGVja19lZXByb20oc3RydWN0IHVzYm5ldCAqZGV2KVxuQEAgLTEyOTMsNiArMTc5MCwxNyBAQCBzdGF0aWMgaW50IGF4ODgxNzlfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFxuIFx0ZGV2LVx1MDAzZWRyaXZlcl9wcml2ID0gYXgxNzlfZGF0YTtcbiBcbitcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DSElQX1NUQVRVUyxcbitcdFx0XHQgICAgICAgMSwgMSwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfbm9kZXY7XG4rXG4rXHRheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9IChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwMjYgMHhmMCkgXHUwMDNlXHUwMDNlIDQ7XG4rXHRheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkID0gMDtcbitcdGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPSAxO1xuK1x0YXgxNzlfZGF0YS1cdTAwM2VlZXByb21fcmVhZF9jbWQgPSBBWF9BQ0NFU1NfRUVQUk9NO1xuK1x0YXgxNzlfZGF0YS1cdTAwM2VlZXByb21fYmxvY2sgPSAyO1xuK1xuIFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2YXg4ODE3OV9uZXRkZXZfb3BzO1xuIFx0ZGV2LVx1MDAzZW5ldC1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNmF4ODgxNzlfZXRodG9vbF9vcHM7XG4gXHRkZXYtXHUwMDNlbmV0LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDg7XG5AQCAtMTMxNyw2ICsxODI1LDEyMCBAQCBzdGF0aWMgaW50IGF4ODgxNzlfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0YXg4ODE3OV9yZXNldChkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX25vZGV2OlxuK1x0a2ZyZWUoYXgxNzlfZGF0YSk7XG4rXHRheDE3OV9kYXRhID0gTlVMTDtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYXg4ODE3OWFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuK3tcbitcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogQ2hlY2sgaWYgdmVuZG9yIGNvbmZpZ3VyYXRpb24gKi9cbitcdGlmICh1ZGV2LVx1MDAzZWFjdGNvbmZpZy1cdTAwM2VkZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcIlN3aXRjaGluZyB0byB2ZW5kb3IgbW9kZVxcblwiKTtcbitcdFx0dXNiX2RyaXZlcl9zZXRfY29uZmlndXJhdGlvbih1ZGV2LCAxKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGF4MTc5X2RhdGEgPSBremFsbG9jX29iaigqYXgxNzlfZGF0YSk7XG4rXHRpZiAoIWF4MTc5X2RhdGEpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0ZGV2LVx1MDAzZWRyaXZlcl9wcml2ID0gYXgxNzlfZGF0YTtcbitcbitcdHJldCA9IGF4ODgxNzlfcmVhZF9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DSElQX1NUQVRVUyxcbitcdFx0XHQgICAgICAgMSwgMSwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfbm9kZXY7XG4rXG4rXHRheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9IChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwMjYgMHhmMCkgXHUwMDNlXHUwMDNlIDQ7XG4rXHRheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkID0gMDtcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgxNzlBKSB7XG4rXHRcdGlmICh1ZGV2LVx1MDAzZWRlc2NyaXB0b3IuYmNkRGV2aWNlID09IDB4MzAwKVxuK1x0XHRcdGF4MTc5X2RhdGEtXHUwMDNlaXNfYXg4ODc3MmQgPSAxO1xuK1x0fVxuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIDM7IGkrKykge1xuK1x0XHRyZXQgPSBheDg4MTc5X3JlYWRfY21kKGRldiwgQVg4ODE3OUFfQUNDRVNTX0JMLCAoMHhGRCArIGkpLFxuK1x0XHRcdFx0ICAgICAgIDEsIDEsIFx1MDAyNmF4MTc5X2RhdGEtXHUwMDNlZndfdmVyc2lvbltpXSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0YXgxNzlfZGF0YS1cdTAwM2Vmd192ZXJzaW9uW2ldID0gMHhmZjtcbitcdH1cbitcdG5ldGRldl9pbmZvKGRldi1cdTAwM2VuZXQsIFwiQVg4ODE3OUEvMjc5Lzc3MkQgQ2hpcCBWZXJzaW9uOiAleCwgRlc6ICVkLiVkLiVkLiVkXFxuXCIsXG4rXHRcdCAgICBheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbixcbitcdFx0ICAgIGF4MTc5X2RhdGEtXHUwMDNlZndfdmVyc2lvblswXSwgYXgxNzlfZGF0YS1cdTAwM2Vmd192ZXJzaW9uWzFdLFxuK1x0XHQgICAgYXgxNzlfZGF0YS1cdTAwM2Vmd192ZXJzaW9uWzJdLCBheDE3OV9kYXRhLVx1MDAzZWZ3X3ZlcnNpb25bM10pO1xuK1xuK1x0LyogVGhlIEFYODgyNzkgcmVxdWlyZXMgYm90aCB0aGUgQVhfUlhfQ1RMX0lQRSBhbmQgQVhfUlhfQ1RMX0RST1BDUkNFUlJcbitcdCAqIGJpdHMgc2V0IGluIEFYX1JYX0NUTCBmb3IgY3JlYXRpbmcgY29ycmVjdCBSWC1VUkJzLiBBWF9SWF9DVExfRFJPUENSQ0VSUlxuK1x0ICogaXMgYW55d2F5IHNldCBmb3IgYWxsIGNoaXBzLCBtYWtlIHN1cmUgQVhfUlhfQ1RMX0lQRSBpcyBzZXQgdmlhIGlwX2FsaWduLlxuK1x0ICogQWxzbyBjb25maWd1cmUgZWVwcm9tIGFjY2VzcyBwYXJhbWV0ZXJzLlxuK1x0ICovXG4rXHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4rXHRcdGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPSAxO1xuK1x0XHRheDE3OV9kYXRhLVx1MDAzZWVlcHJvbV9yZWFkX2NtZCA9IEFYODgxNzlBX0ZMQVNIX1JFQUQ7XG4rXHRcdGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrID0gMjU2O1xuK1x0fSBlbHNlIHtcbitcdFx0YXgxNzlfZGF0YS1cdTAwM2VpcF9hbGlnbiA9IDA7XG4rXHRcdGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX3JlYWRfY21kID0gQVhfQUNDRVNTX0VGVVM7XG4rXHRcdGF4MTc5X2RhdGEtXHUwMDNlZWVwcm9tX2Jsb2NrID0gMjA7XG4rXHR9XG4rXG4rXHRkZXYtXHUwMDNlbmV0LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZheDg4MTc5X25ldGRldl9vcHM7XG4rXHRkZXYtXHUwMDNlbmV0LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2YXg4ODE3OV9ldGh0b29sX29wcztcbitcdGRldi1cdTAwM2VuZXQtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gODtcbitcdGRldi1cdTAwM2VuZXQtXHUwMDNlbmVlZGVkX3RhaWxyb29tID0gODtcbitcdGRldi1cdTAwM2VuZXQtXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xuK1x0ZGV2LVx1MDAzZWhhcmRfbXR1ID0gOSAqIDEwMjQ7XG4rXHRkZXYtXHUwMDNlbmV0LVx1MDAzZW1heF9tdHUgPSBkZXYtXHUwMDNlaGFyZF9tdHUgLSBkZXYtXHUwMDNlbmV0LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcbitcdC8qIEluaXRpYWxpemUgTUlJIHN0cnVjdHVyZSAqL1xuK1x0ZGV2LVx1MDAzZW1paS5kZXYgPSBkZXYtXHUwMDNlbmV0O1xuK1x0ZGV2LVx1MDAzZW1paS5tZGlvX3JlYWQgPSBheDg4MTc5X21kaW9fcmVhZDtcbitcdGRldi1cdTAwM2VtaWkubWRpb193cml0ZSA9IGF4ODgxNzlfbWRpb193cml0ZTtcbitcdGRldi1cdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweGZmO1xuK1x0ZGV2LVx1MDAzZW1paS5yZWdfbnVtX21hc2sgPSAweGZmO1xuK1x0ZGV2LVx1MDAzZW1paS5waHlfaWQgPSAweDAzO1xuK1x0aWYgKCFheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkKVxuK1x0XHRkZXYtXHUwMDNlbWlpLnN1cHBvcnRzX2dtaWkgPSAxO1xuK1xuK1x0ZGV2LVx1MDAzZW5ldC1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcbitcdFx0XHQgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU08gfFxuK1x0XHRcdCAgICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfFxuK1x0XHRcdCAgICAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcbitcbitcdGRldi1cdTAwM2VuZXQtXHUwMDNlaHdfZmVhdHVyZXMgfD0gZGV2LVx1MDAzZW5ldC1cdTAwM2VmZWF0dXJlcztcbitcbitcdGRldi1cdTAwM2VuZXQtXHUwMDNldmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxuK1x0XHRcdFx0ICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU087XG4rXG4rXHRuZXRpZl9zZXRfdHNvX21heF9zaXplKGRldi1cdTAwM2VuZXQsIDE2Mzg0KTtcbitcbitcdC8qIEVuYWJsZSBUcmFuc21pc3Npb24gb2YgTGluayBTcGVlZCBieXRlIGluIGludGVycnVwdCBVUkIgKi9cbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfRldfTU9ERSwgQVhfRldfTU9ERV8xNzlBLCAwLCAwLCBOVUxMKTtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfUkVMT0FEX0VFUFJPTV9FRlVTRSwgMCwgMCwgMCwgTlVMTCk7XG4rXG4rXHQvKiBSZWFkIE1BQyBhZGRyZXNzIGZyb20gRFRCIG9yIEFTSVggY2hpcCAqL1xuK1x0YXg4ODE3OV9nZXRfbWFjX2FkZHIoZGV2KTtcbitcdG1lbWNweShkZXYtXHUwMDNlbmV0LVx1MDAzZXBlcm1fYWRkciwgZGV2LVx1MDAzZW5ldC1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX25vZGV2OlxuK1x0a2ZyZWUoYXgxNzlfZGF0YSk7XG4rXHRheDE3OV9kYXRhID0gTlVMTDtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGF4ODgxNzlfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG5AQCAtMTMzOCw2ICsxOTYwLDIyIEBAIHN0YXRpYyB2b2lkIGF4ODgxNzlfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRrZnJlZShheDE3OV9kYXRhKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYXg4ODE3OWFfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4re1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbitcdHUxNiB0bXAxNjtcbitcdHU4IHRtcDg7XG4rXG4rXHQvKiBDb25maWd1cmUgUlggY29udHJvbCByZWdpc3RlciA9XHUwMDNlIHN0b3Agb3BlcmF0aW9uICovXG4rXHR0bXAxNiA9IEFYX1JYX0NUTF9TVE9QO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsIFx1MDAyNnRtcDE2KTtcbitcbitcdHRtcDggPSAwO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIFx1MDAyNnRtcDgpO1xuK1xuK1x0a2ZyZWUoYXgxNzlfZGF0YSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gYXg4ODE3OV9yeF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKnBrdF9oZHIpXG4ge1xuQEAgLTEzNTQsNiArMTk5MiwyMSBAQCBheDg4MTc5X3J4X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqcGt0X2hkcilcbiBcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBheDg4MTc5YV9yeF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgcGt0X2Rlc2MpXG4re1xuK1x0dTMyIHBrdF90eXBlO1xuK1xuK1x0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XG4rXHQvKiBjaGVja3N1bSBlcnJvciBiaXQgaXMgc2V0ICovXG4rXHRpZiAocGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MNF9FUlIgfHwgcGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MM19FUlIpXG4rXHRcdHJldHVybjtcbitcbitcdHBrdF90eXBlID0gcGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9MNF9UWVBFX01BU0s7XG4rXHQvKiBJdCBtdXN0IGJlIGEgVENQIG9yIFVEUCBwYWNrZXQgd2l0aCBhIHZhbGlkIGNoZWNrc3VtICovXG4rXHRpZiAocGt0X3R5cGUgPT0gQVgxNzlBX1JYX1BEX0w0X1RDUCB8fCBwa3RfdHlwZSA9PSBBWDE3OUFfUlhfUERfTDRfVURQKVxuK1x0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYXg4ODE3OV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKmF4X3NrYjtcbkBAIC0xNDcyLDYgKzIxMjUsMTIxIEBAIHN0YXRpYyBpbnQgYXg4ODE3OV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBheDg4MTc5YV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGF4ODgxNzlfZGF0YSAqYXgxNzlfZGF0YSA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbitcdHN0cnVjdCBza19idWZmICpheF9za2I7XG4rXHR1MzIgaGRyX29mZiwgcGt0X2VuZDtcbitcdHU2NCAqcGt0X2Rlc2NfcHRyO1xuK1x0dTE2IHZsYW5fdGFnO1xuK1x0dTE2IHBrdF9jbnQ7XG4rXHR1NjQgcnhfaGRyO1xuK1xuK1x0LyogU0tCIGNvbnRlbnRzIGZvciBBWDE3OUEtYmFzZWQgY2hpcHM6XG4rXHQgKiAgIFx1MDAzY3BhY2tldCAxXHUwMDNlXG4rXHQgKiAgIC4uLlxuK1x0ICogICBcdTAwM2NwYWNrZXQgTlx1MDAzZVxuK1x0ICogICBcdTAwM2NwZXItcGFja2V0IG1ldGFkYXRhIGVudHJ5IDFcdTAwM2VcbitcdCAqICAgLi4uXG4rXHQgKiAgIFx1MDAzY3Blci1wYWNrZXQgbWV0YWRhdGEgZW50cnkgTlx1MDAzZVxuK1x0ICogICBcdTAwM2NyeF9oZHJcdTAwM2VcbitcdCAqXG4rXHQgKiB3aGVyZTpcbitcdCAqICAgXHUwMDNjcGFja2V0IE5cdTAwM2UgY29udGFpbnMgcGt0X2xlbiBkYXRhIGJ5dGVzIGFuZCBwYWRkaW5nOlxuK1x0ICpcdFx0MiBieXRlcyBvZiBJUCBhbGlnbm1lbnQgKG9wdGlvbmFsLCBkZXBlbmRzIG9uIEFYX1JYX0NUTF9JUEUgZmxhZylcbitcdCAqXHRcdHBhY2tldCBkYXRhIHJlY2VpdmVkXG4rXHQgKlx0XHRvcHRpb25hbCBwYWRkaW5nIHRvIDgtYnl0ZXMgYm91bmRhcnlcbitcdCAqICAgXHUwMDNjcGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSBOXHUwMDNlIGNvbnRhaW5zIDggYnl0ZXM6XG4rXHQgKlx0XHRwa3RfbGVuIGFuZCBmaWVsZHMgQVhfUlhIRFJfKlxuK1x0ICogICBcdTAwM2NyeC1oZHJcdTAwM2VcdGNvbnRhaW5zIDggYnl0ZXM6XG4rXHQgKlx0XHRwa3RfY250IGFuZCBoZHJfb2ZmIChvZmZzZXQgb2YgXHUwMDNjcGVyLXBhY2tldCBtZXRhZGF0YSBlbnRyeSAxXHUwMDNlKVxuK1x0ICpcbitcdCAqIHBrdF9jbnQgaXMgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHBlci1wYWNrZXQgbWV0YWRhdGEgYXJyYXkuXG4rXHQgKi9cbitcbitcdGlmICghc2tiIHx8IHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihyeF9oZHIpKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdC8qIFJYIERlc2NyaXB0b3IgSGVhZGVyICovXG4rXHRza2JfdHJpbShza2IsIHNrYi1cdTAwM2VsZW4gLSBzaXplb2YocnhfaGRyKSk7XG4rXHRyeF9oZHIgPSBsZTY0X3RvX2NwdXAoKHU2NCAqKXNrYl90YWlsX3BvaW50ZXIoc2tiKSk7XG4rXG4rXHQvKiBDaGVjayB0aGVzZSBwYWNrZXRzICovXG4rXHRoZHJfb2ZmID0gKHJ4X2hkciBcdTAwMjYgQVgxNzlBX1JYX0RIX0RFU0NfT0ZGU0VUX01BU0spIFx1MDAzZVx1MDAzZSBBWDE3OUFfUlhfREhfREVTQ19PRkZTRVRfU0hJRlQ7XG4rXHRwa3RfY250ID0gcnhfaGRyIFx1MDAyNiBBWDE3OUFfUlhfREhfUEtUX0NOVF9NQVNLO1xuK1xuK1x0LyogQ29uc2lzdGVuY3kgY2hlY2sgaGVhZGVyIHBvc2l0aW9uICovXG4rXHRpZiAoaGRyX29mZiAhPSBza2ItXHUwMDNlbGVuIC0gKHBrdF9jbnQgKiBzaXplb2YocnhfaGRyKSkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0LyogTWFrZSBzdXJlIHRoYXQgdGhlIGJvdW5kcyBvZiB0aGUgbWV0YWRhdGEgYXJyYXkgYXJlIGluc2lkZSB0aGUgU0tCXG4rXHQgKiAoYW5kIGluIGZyb250IG9mIHRoZSBjb3VudGVyIGF0IHRoZSBlbmQpLlxuK1x0ICovXG4rXHRpZiAocGt0X2NudCAqIDggKyBoZHJfb2ZmIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdC8qIFBhY2tldHMgbXVzdCBub3Qgb3ZlcmxhcCB0aGUgbWV0YWRhdGEgYXJyYXkgKi9cbitcdHNrYl90cmltKHNrYiwgaGRyX29mZik7XG4rXG4rXHRpZiAoIXBrdF9jbnQpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0LyogR2V0IHRoZSBmaXJzdCBSWCBwYWNrZXQgZGVzY3JpcHRvciAqL1xuK1x0cGt0X2Rlc2NfcHRyID0gKHU2NCAqKShza2ItXHUwMDNlZGF0YSArIGhkcl9vZmYpO1xuK1xuK1x0cGt0X2VuZCA9IDA7XG4rXHR3aGlsZSAocGt0X2NudC0tKSB7XG4rXHRcdHU2NCBwa3RfZGVzYyA9IGxlNjRfdG9fY3B1cChwa3RfZGVzY19wdHIpO1xuK1x0XHR1MzIgcGt0X2xlbl9wbHVzX3BhZGQ7XG4rXHRcdHUzMiBwa3RfbGVuO1xuK1xuK1x0XHRwa3RfbGVuID0gKHUzMikoKHBrdF9kZXNjIFx1MDAyNiBBWDE3OUFfUlhfUERfTEVOX01BU0spIFx1MDAzZVx1MDAzZSBBWDE3OUFfUlhfUERfTEVOX1NISUZUKVxuK1x0XHRcdCAgLSAoYXgxNzlfZGF0YS1cdTAwM2VpcF9hbGlnbiA/IDIgOiAwKTtcbitcdFx0cGt0X2xlbl9wbHVzX3BhZGQgPSAoKHBrdF9sZW4gKyA3ICsgKGF4MTc5X2RhdGEtXHUwMDNlaXBfYWxpZ24gPyAyIDogMCkpIFx1MDAyNiAweDdGRkY4KTtcbitcbitcdFx0cGt0X2VuZCArPSBwa3RfbGVuX3BsdXNfcGFkZDtcbitcdFx0aWYgKHBrdF9lbmQgXHUwMDNlIGhkcl9vZmYgfHwgKHBrdF9jbnQgPT0gMCBcdTAwMjZcdTAwMjYgcGt0X2VuZCAhPSBoZHJfb2ZmKSlcbitcdFx0XHRnb3RvIGVycjtcbitcbitcdFx0aWYgKHBrdF9kZXNjIFx1MDAyNiBBWDE3OUFfUlhfUERfRFJPUCB8fCAhKHBrdF9kZXNjIFx1MDAyNiBBWDE3OUFfUlhfUERfUlhfT0spIHx8XG4rXHRcdCAgICBwa3RfbGVuIFx1MDAzZSAoZGV2LVx1MDAzZWhhcmRfbXR1ICsgQVgxNzlBX1JYX0hXX1BBRCkpIHtcbitcdFx0XHRza2JfcHVsbChza2IsIHBrdF9sZW5fcGx1c19wYWRkKTtcbitcbitcdFx0XHQvKiBOZXh0IFJYIFBhY2tldCBEZXNjcmlwdG9yICovXG4rXHRcdFx0cGt0X2Rlc2NfcHRyKys7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0YXhfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihkZXYtXHUwMDNlbmV0LCBwa3RfbGVuKTtcbitcdFx0aWYgKCFheF9za2IpXG4rXHRcdFx0Z290byBlcnI7XG4rXG4rXHRcdHNrYl9wdXQoYXhfc2tiLCBwa3RfbGVuKTtcbitcdFx0bWVtY3B5KGF4X3NrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlZGF0YSArIChheDE3OV9kYXRhLVx1MDAzZWlwX2FsaWduID8gQVgxNzlBX1JYX0hXX1BBRCA6IDApLFxuK1x0XHQgICAgICAgcGt0X2xlbik7XG4rXG4rXHRcdGlmIChheDE3OV9kYXRhLVx1MDAzZXJ4X2NoZWNrc3VtKVxuK1x0XHRcdGF4ODgxNzlhX3J4X2NoZWNrc3VtKGF4X3NrYiwgcGt0X2Rlc2MpO1xuK1xuK1x0XHRpZiAocGt0X2Rlc2MgXHUwMDI2IEFYMTc5QV9SWF9QRF9WTEFOKSB7XG4rXHRcdFx0dmxhbl90YWcgPSBwa3RfZGVzYyBcdTAwM2VcdTAwM2UgQVgxNzlBX1JYX1BEX1ZMQU5fU0hJRlQ7XG4rXHRcdFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhheF9za2IsIGh0b25zKEVUSF9QXzgwMjFRKSxcbitcdFx0XHRcdFx0ICAgICAgIHZsYW5fdGFnIFx1MDAyNiBWTEFOX1ZJRF9NQVNLKTtcbitcdFx0fVxuK1xuK1x0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIGF4X3NrYik7XG4rXHRcdHNrYl9wdWxsKHNrYiwgcGt0X2xlbl9wbHVzX3BhZGQpO1xuK1xuK1x0XHQvKiBOZXh0IFJYIFBhY2tldCBIZWFkZXIgKi9cbitcdFx0cGt0X2Rlc2NfcHRyKys7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMTtcbitcbitlcnI6XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBza19idWZmICpcbiBheDg4MTc5X3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpXG4ge1xuQEAgLTE1MDUsNiArMjI3Myw1OSBAQCBheDg4MTc5X3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpXG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuK2F4ODgxNzlhX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpXG4re1xuK1x0dTY0IHR4X2Rlc2MgPSBza2ItXHUwMDNlbGVuIFx1MDAyNiBBWDE3OUFfVFhfREVTQ19MRU5fTUFTSztcbitcdGludCBmcmFtZV9zaXplID0gZGV2LVx1MDAzZW1heHBhY2tldDtcbitcdHN0cnVjdCBza19idWZmICpheF9za2I7XG4rXHR1NjQgKnR4X2Rlc2NfcHRyO1xuK1x0aW50IHBhZGRpbmdfc2l6ZTtcbitcdGludCBoZWFkcm9vbTtcbitcdGludCB0YWlscm9vbTtcbitcdHUxNiB0Y2kgPSAwO1xuK1xuK1x0LyogVFNPIE1TUyAqL1xuK1x0dHhfZGVzYyB8PSAoKHU2NCkoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb19zaXplIFx1MDAyNiBBWDE3OUFfVFhfREVTQ19NU1NfTUFTSykpIFx1MDAzY1x1MDAzY1xuK1x0XHQgICBBWDE3OUFfVFhfREVTQ19NU1NfU0hJRlQ7XG4rXG4rXHRoZWFkcm9vbSA9IChza2ItXHUwMDNlbGVuICsgc2l6ZW9mKHR4X2Rlc2MpKSAlIDg7XG4rXHRwYWRkaW5nX3NpemUgPSBoZWFkcm9vbSA/IDggLSBoZWFkcm9vbSA6IDA7XG4rXG4rXHRpZiAoKChza2ItXHUwMDNlbGVuICsgc2l6ZW9mKHR4X2Rlc2MpICsgcGFkZGluZ19zaXplKSAlIGZyYW1lX3NpemUpID09IDApIHtcbitcdFx0cGFkZGluZ19zaXplICs9IDg7XG4rXHRcdHR4X2Rlc2MgfD0gQVgxNzlBX1RYX0RFU0NfRFJPUF9QQUREO1xuK1x0fVxuK1xuK1x0aWYgKChkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCkgXHUwMDI2XHUwMDI2ICh2bGFuX2dldF90YWcoc2tiLCBcdTAwMjZ0Y2kpIFx1MDAzZT0gMCkpIHtcbitcdFx0dHhfZGVzYyB8PSBBWDE3OUFfVFhfREVTQ19WTEFOO1xuK1x0XHR0eF9kZXNjIHw9ICgodTY0KXRjaSBcdTAwMjYgQVgxNzlBX1RYX0RFU0NfVkxBTl9NQVNLKSBcdTAwM2NcdTAwM2MgQVgxNzlBX1RYX0RFU0NfVkxBTl9TSElGVDtcbitcdH1cbitcbitcdGlmICghZGV2LVx1MDAzZWNhbl9kbWFfc2cgXHUwMDI2XHUwMDI2IChkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1NHKSBcdTAwMjZcdTAwMjYgc2tiX2xpbmVhcml6ZShza2IpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7XG4rXHR0YWlscm9vbSA9IHNrYl90YWlscm9vbShza2IpO1xuK1xuK1x0aWYgKCEoaGVhZHJvb20gXHUwMDNlPSBzaXplb2YodHhfZGVzYykgXHUwMDI2XHUwMDI2IHRhaWxyb29tIFx1MDAzZT0gcGFkZGluZ19zaXplKSkge1xuK1x0XHRheF9za2IgPSBza2JfY29weV9leHBhbmQoc2tiLCBzaXplb2YodHhfZGVzYyksIHBhZGRpbmdfc2l6ZSwgZmxhZ3MpO1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0XHRza2IgPSBheF9za2I7XG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1x0aWYgKHBhZGRpbmdfc2l6ZSAhPSAwKVxuK1x0XHRza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nX3NpemUpO1xuK1x0LyogQ29weSBUWCBoZWFkZXIgKi9cbitcdHR4X2Rlc2NfcHRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YodHhfZGVzYykpO1xuK1x0KnR4X2Rlc2NfcHRyID0gY3B1X3RvX2xlNjQodHhfZGVzYyk7XG4rXG4rXHR1c2JuZXRfc2V0X3NrYl90eF9zdGF0cyhza2IsIDEsIDApO1xuK1xuK1x0cmV0dXJuIHNrYjtcbit9XG4rXG4gc3RhdGljIGludCBheDg4MTc5X2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuIHtcbiBcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG5AQCAtMTU4MCw3MyArMjQwMSwzNDMgQEAgc3RhdGljIGludCBheDg4MTc5X2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGF4ODgxNzlhX2J1bGtpbl9jb25maWcoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBsaW5rX3N0cylcbit7XG4rXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuK1x0Y29uc3Qgc3RydWN0IGF4X2J1bGtpbl9zZXR0aW5ncyAqYnVsa2luX2RhdGE7XG4rXHRpbnQgaW5kZXggPSAwO1xuK1xuK1x0c3dpdGNoIChheDE3OV9kYXRhLVx1MDAzZXNwZWVkKSB7XG4rXHRjYXNlIEVUSEVSX0xJTktfMjUwMDpcdC8qIEFYODgyNzkgb25seSAqL1xuK1x0XHRpbmRleCA9IDA7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBFVEhFUl9MSU5LXzEwMDA6XHQvKiBBWDg4Mjc5IFx1MDAyNiBBWDg4MTc4QSAqL1xuK1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gPT0gQVhfVkVSU0lPTl9BWDg4Mjc5KSB7XG4rXHRcdFx0aWYgKGxpbmtfc3RzIFx1MDAyNiBBWF9VU0JfU1MpXG4rXHRcdFx0XHRpbmRleCA9IDE7XG4rXHRcdFx0ZWxzZSBpZiAobGlua19zdHMgXHUwMDI2IEFYX1VTQl9IUylcbitcdFx0XHRcdGluZGV4ID0gMjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRpZiAobGlua19zdHMgXHUwMDI2IEFYX1VTQl9TUylcbitcdFx0XHRcdGluZGV4ID0gMDtcbitcdFx0XHRlbHNlIGlmIChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX0hTKVxuK1x0XHRcdFx0aW5kZXggPSAxO1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBFVEhFUl9MSU5LXzEwMDpcbitcdFx0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHRcdGlmIChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX1NTKVxuK1x0XHRcdFx0aW5kZXggPSAzO1xuK1x0XHRcdGVsc2UgaWYgKGxpbmtfc3RzIFx1MDAyNiBBWF9VU0JfSFMpXG4rXHRcdFx0XHRpbmRleCA9IDU7XG4rXHRcdFx0aWYgKCFheDE3OV9kYXRhLVx1MDAzZWZ1bGxfZHVwbGV4KVxuK1x0XHRcdFx0aW5kZXgrKztcbitcdFx0fSBlbHNlIHtcbitcdFx0XHQvKiBBWDg4Mjc5QSBcdTAwMjYgQVg4ODI3N0QgKi9cbitcdFx0XHRpZiAobGlua19zdHMgXHUwMDI2IEFYX1VTQl9TUylcbitcdFx0XHRcdGluZGV4ID0gMjtcbitcdFx0XHRlbHNlIGlmIChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX0hTKVxuK1x0XHRcdFx0aW5kZXggPSA0O1xuK1x0XHRcdGlmICghYXgxNzlfZGF0YS1cdTAwM2VmdWxsX2R1cGxleClcbitcdFx0XHRcdGluZGV4Kys7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEVUSEVSX0xJTktfMTA6XG4rXHRcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkpXG4rXHRcdFx0aW5kZXggPSA3O1xuK1x0XHRlbHNlXG4rXHRcdFx0aW5kZXggPSA2O1xuK1x0XHRicmVhaztcbitcbitcdGRlZmF1bHQ6XHQvKiBObyBsaW5rICovXG4rXHRcdGluZGV4ID0gMDtcbitcdH1cbitcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiA9PSBBWF9WRVJTSU9OX0FYODgyNzkgXHUwMDI2XHUwMDI2IChsaW5rX3N0cyBcdTAwMjYgQVhfVVNCX0ZTKSlcbitcdFx0aW5kZXggPSA3O1xuK1xuK1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHRidWxraW5fZGF0YSA9IEFYODgyNzlfQlVMS0lOX1NJWkU7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoYXgxNzlfZGF0YS1cdTAwM2Vpc19heDg4NzcyZClcbitcdFx0XHRidWxraW5fZGF0YSA9IEFYODg3NzJEX0JVTEtJTl9TSVpFO1xuK1x0XHRlbHNlXG4rXHRcdFx0YnVsa2luX2RhdGEgPSBBWDg4MTc5QV9CVUxLSU5fU0laRTtcbitcdH1cbitcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQlVMS0lOX1FDVFJMLCA1LCA1LCBcdTAwMjZidWxraW5fZGF0YVtpbmRleF0pO1xuK31cbitcbitzdGF0aWMgaW50IGF4ODgxNzlhX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuK3tcbitcdHN0cnVjdCBheDg4MTc5X2RhdGEgKmF4MTc5X2RhdGEgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4rXHR1OCB0bXA4LCBsaW5rX3N0cywgcmVnOFszXTtcbitcdHUxNiB0bXAxNiwgbW9kZSwgc3BlZWQ7XG4rXG4rXHRpZiAoIWF4MTc5X2RhdGEtXHUwMDNlbGluaykge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcImF4ODgxNzlhIC0gTGluayBzdGF0dXMgaXM6IDBcXG5cIik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogU3RvcCBSWC9UWCBmb3IgbGluayBjb25maWd1cmF0aW9uICovXG4rXHR0bXAxNiA9IEFYX1JYX0NUTF9TVE9QO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsIFx1MDAyNnRtcDE2KTtcbitcdHRtcDggPSAwO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUEFUSCwgMSwgMSwgXHUwMDI2dG1wOCk7XG4rXG4rXHR0bXA4ID0gMHhhNTtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0NEQ19ERUxBWV9UWCwgMSwgMSwgXHUwMDI2dG1wOCk7XG4rXG4rXHR0bXAxNiA9IDB4MDQxMDtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfTE9XLCAyLCAyLCBcdTAwMjZ0bXAxNik7XG4rXG4rXHR0bXA4ID0gMDtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfRVRIX1RYX0dBUCwgMSwgMSwgXHUwMDI2dG1wOCk7XG4rXG4rXHR0bXA4ID0gMHgwNztcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfRVA1X0VIUiwgMSwgMSwgXHUwMDI2dG1wOCk7XG4rXG4rXHR0bXA4ID0gMHgyOCB8IEFYX05FV19QQVVTRV9FTjtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTkVXX1BBVVNFX0NUUkwsIDEsIDEsIFx1MDAyNnRtcDgpO1xuK1xuK1x0bW9kZSA9IEFYX01FRElVTV9SRUNFSVZFX0VOIHwgQVhfTUVESVVNX1RYRkxPV19DVFJMRU4gfCBBWF9NRURJVU1fUlhGTE9XX0NUUkxFTjtcbitcbitcdC8qIExpbmsgaXMgdXAsIGJ1dCBzb21lIG9sZGVyIEFYODgxNzlBIEZXIHZlcnNpb25zIGRvIG5vdCBzZW5kIGxpbmsgc3BlZWRcbitcdCAqIGFuZCBkdXBsZXggc3RhdHVzIGluIGludGVycnVwdCBVUkIsIHNvIHJlYWQgaXQgdmlhIE1JSVxuK1x0ICovXG4rXHRpZiAoIWF4MTc5X2RhdGEtXHUwMDNlc3BlZWQpIHtcbitcdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuK1xuK1x0XHRtaWlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MoXHUwMDI2ZGV2LVx1MDAzZW1paSwgXHUwMDI2Y21kKTtcbitcdFx0YXgxNzlfZGF0YS1cdTAwM2VmdWxsX2R1cGxleCA9IGNtZC5iYXNlLmR1cGxleDtcbitcdFx0c3dpdGNoIChjbWQuYmFzZS5zcGVlZCkge1xuK1x0XHRjYXNlIFNQRUVEXzEwMDA6XG4rXHRcdFx0YXgxNzlfZGF0YS1cdTAwM2VzcGVlZCA9IEVUSEVSX0xJTktfMTAwMDtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBTUEVFRF8xMDA6XG4rXHRcdFx0YXgxNzlfZGF0YS1cdTAwM2VzcGVlZCA9IEVUSEVSX0xJTktfMTAwO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFNQRUVEXzEwOlxuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGF4MTc5X2RhdGEtXHUwMDNlc3BlZWQgPSBFVEhFUl9MSU5LXzEwO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9O1xuK1x0fVxuK1xuK1x0c3BlZWQgPSAwO1xuK1x0c3dpdGNoIChheDE3OV9kYXRhLVx1MDAzZXNwZWVkKSB7XG4rXHRjYXNlIEVUSEVSX0xJTktfMjUwMDpcbitcdFx0cmVnOFswXSA9IDB4MDA7XG4rXHRcdHJlZzhbMV0gPSAweEY4O1xuK1x0XHRyZWc4WzJdID0gMHgwNztcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfVFhfUEFVU0UsIDMsIDMsIHJlZzgpO1xuK1xuK1x0XHRyZWc4WzBdID0gMHg3ODtcbitcdFx0cmVnOFsxXSA9IChBWF9MU09GQ19XQ05UXzdfQUNDRVNTIFx1MDAzY1x1MDAzYyA1KTtcbitcdFx0cmVnOFsyXSA9IDA7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DREMsIDMsIDMsIHJlZzgpO1xuK1xuK1x0XHRyZWc4WzBdID0gMHg0MDtcbitcdFx0cmVnOFsxXSA9IEFYX01BQ19NSVFGRkNUUkxfRk9STUFUIHwgQVhfTUFDX01JUUZGQ1RSTF9EUk9QX0NSQyB8IEFYX01BQ19MU09fRVJSX0VOO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19SWF9EQVRBX0NEQ19DTlQsIDIsIDIsIHJlZzgpO1xuK1xuK1x0XHR0bXA4ID0gQVhfWEdNSUlfRU47XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfQkZNX0RBVEEsIDEsIDEsIFx1MDAyNnRtcDgpO1xuK1xuK1x0XHR0bXA4ID0gMHgxQyB8IEFYX0xTT19FTkhBTkNFX0VOO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19MU09fRU5IQU5DRV9DVFJMLCAxLCAxLCBcdTAwMjZ0bXA4KTtcbitcbitcdFx0bW9kZSB8PSBBWF9NRURJVU1fR0lHQU1PREUgfCBBWF9NRURJVU1fRlVMTF9EVVBMRVg7XG4rXG4rXHRcdHNwZWVkID0gMjUwMDtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEVUSEVSX0xJTktfMTAwMDpcbitcdFx0bW9kZSB8PSBBWF9NRURJVU1fR0lHQU1PREU7XG4rXHRcdHNwZWVkID0gMTAwMDtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXG4rXHRjYXNlIEVUSEVSX0xJTktfMTAwOlxuK1x0XHRyZWc4WzBdID0gMHg3ODtcbitcdFx0cmVnOFsxXSA9IChBWF9MU09GQ19XQ05UXzdfQUNDRVNTIFx1MDAzY1x1MDAzYyA1KSB8IEFYX0dNSUlfQ1JDX0FQUEVORDtcbitcdFx0cmVnOFsyXSA9IDA7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX1NUQVRVU19DREMsIDMsIDMsIHJlZzgpO1xuK1xuK1x0XHR0bXA4ID0gMHg0MDtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUlhfREFUQV9DRENfQ05ULCAxLCAxLCBcdTAwMjZ0bXA4KTtcbitcbitcdFx0c3BlZWQgPSBzcGVlZCA/IHNwZWVkIDogMTAwO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgRVRIRVJfTElOS18xMDpcbitcdFx0cmVnOFswXSA9IDB4RkE7XG4rXHRcdHJlZzhbMV0gPSAoQVhfTFNPRkNfV0NOVF83X0FDQ0VTUyBcdTAwM2NcdTAwM2MgNSkgfCBBWF9HTUlJX0NSQ19BUFBFTkQ7XG4rXHRcdHJlZzhbMl0gPSAweEZGO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19SWF9TVEFUVVNfQ0RDLCAzLCAzLCByZWc4KTtcbitcbitcdFx0dG1wOCA9IDB4RkE7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1JYX0RBVEFfQ0RDX0NOVCwgMSwgMSwgXHUwMDI2dG1wOCk7XG4rXG4rXHRcdHNwZWVkID0gMTA7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIFBIWVNJQ0FMX0xJTktfU1RBVFVTLCAxLCAxLCBcdTAwMjZsaW5rX3N0cyk7XG4rXHRheDg4MTc5YV9idWxraW5fY29uZmlnKGRldiwgbGlua19zdHMpO1xuK1xuK1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uIFx1MDAzYyBBWF9WRVJTSU9OX0FYODgyNzkpIHtcbitcdFx0dG1wOCA9IDA7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfQkZNX0RBVEEsIDEsIDEsIFx1MDAyNnRtcDgpO1xuK1x0fVxuK1xuK1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlZnVsbF9kdXBsZXgpXG4rXHRcdG1vZGUgfD0gQVhfTUVESVVNX0ZVTExfRFVQTEVYO1xuK1xuK1x0aWYgKGRldi1cdTAwM2VuZXQtXHUwMDNlbXR1IFx1MDAzZSAxNTAwKVxuK1x0XHRtb2RlIHw9IEFYX01FRElVTV9KVU1CT19FTjtcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfTUVESVVNX1NUQVRVU19NT0RFLCAyLCAyLCBcdTAwMjZtb2RlKTtcbitcbitcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCBcdTAwMjZheDE3OV9kYXRhLVx1MDAzZXJ4Y3RsKTtcbitcbitcdHRtcDggPSBBWF9NQUNfUlhfUEFUSF9SRUFEWSB8IEFYX01BQ19UWF9QQVRIX1JFQURZO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfUEFUSCwgMSwgMSwgXHUwMDI2dG1wOCk7XG4rXG4rXHRheDE3OV9kYXRhLVx1MDAzZWVlZV9lbmFibGVkID0gYXg4ODE3OV9jaGtfZWVlKGRldik7XG4rXG4rXHRuZXRpZl9jYXJyaWVyX29uKGRldi1cdTAwM2VuZXQpO1xuK1xuK1x0bmV0ZGV2X2luZm8oZGV2LVx1MDAzZW5ldCwgXCJheDg4MTc5YSAtIExpbmsgc3RhdHVzIGlzOiAxLCBMaW5rIHNwZWVkOiAlZCwgRHVwbGV4OiAlZFxcblwiLFxuK1x0XHQgICAgc3BlZWQsIGF4MTc5X2RhdGEtXHUwMDNlZnVsbF9kdXBsZXgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYXg4ODE3OV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4ge1xuLVx0dTggYnVmWzVdO1xuLVx0dTE2ICp0bXAxNjtcbi1cdHU4ICp0bXA7XG4gXHRzdHJ1Y3QgYXg4ODE3OV9kYXRhICpheDE3OV9kYXRhID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuIFx0c3RydWN0IGV0aHRvb2xfa2VlZSBlZWVfZGF0YTtcbitcdHUxNiAqdG1wMTY7XG4rXHR1OCBidWZbNV07XG4rXHR1OCAqdG1wO1xuIFxuIFx0dG1wMTYgPSAodTE2ICopYnVmO1xuIFx0dG1wID0gKHU4ICopYnVmO1xuIFxuIFx0LyogUG93ZXIgdXAgZXRoZXJuZXQgUEhZICovXG4tXHQqdG1wMTYgPSAwO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLCAyLCAyLCB0bXAxNik7XG4rXHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbitcdFx0KnRtcDE2ID0gMDtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QSFlQV1JfUlNUQ1RMLCAyLCAyLCB0bXAxNik7XG4gXG4tXHQqdG1wMTYgPSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BIWVBXUl9SU1RDVEwsIDIsIDIsIHRtcDE2KTtcbi1cdG1zbGVlcCg1MDApO1xuK1x0XHQqdG1wMTYgPSBBWF9QSFlQV1JfUlNUQ1RMX0lQUkw7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEhZUFdSX1JTVENUTCwgMiwgMiwgdG1wMTYpO1xuK1x0XHRtc2xlZXAoNTAwKTtcbiBcbi1cdCp0bXAgPSBBWF9DTEtfU0VMRUNUX0FDUyB8IEFYX0NMS19TRUxFQ1RfQkNTO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9DTEtfU0VMRUNULCAxLCAxLCB0bXApO1xuLVx0bXNsZWVwKDIwMCk7XG4rXHRcdCp0bXAgPSBBWF9DTEtfU0VMRUNUX0FDUyB8IEFYX0NMS19TRUxFQ1RfQkNTO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX0NMS19TRUxFQ1QsIDEsIDEsIHRtcCk7XG4rXHRcdG1zbGVlcCgyMDApO1xuK1x0fSBlbHNlIHtcbitcdFx0KnRtcCA9IEFYX1BIWV9QT1dFUjtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWDg4MTc5QV9QSFlfUE9XRVIsIDAsIDAsIDEsIHRtcCk7XG4rXHRcdG1zbGVlcCgyNTApO1xuK1x0fVxuK1xuK1x0aWYgKGF4MTc5X2RhdGEtXHUwMDNlY2hpcF92ZXJzaW9uID09IEFYX1ZFUlNJT05fQVg4ODI3OSkge1xuK1x0XHQqdG1wMTYgPSBheDg4MTc5X21kaW9fcmVhZChkZXYtXHUwMDNlbmV0LCBkZXYtXHUwMDNlbWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7XG4rXHRcdCp0bXAxNiBcdTAwMjY9IH4oQURWRVJUSVNFXzEwRlVMTCB8IEFEVkVSVElTRV8xMEhBTEYpO1xuK1x0XHQqdG1wMTYgfD0gQURWRVJUSVNFX1JFU1Y7IC8qIEFkdmVydGlzZSAyLjVHQml0IGxpbmsgKi9cbitcdFx0YXg4ODE3OV9tZGlvX3dyaXRlKGRldi1cdTAwM2VuZXQsIGRldi1cdTAwM2VtaWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLCAqdG1wMTYpO1xuK1x0fVxuIFxuIFx0LyogRXRoZXJuZXQgUEhZIEF1dG8gRGV0YWNoKi9cbiBcdGF4ODgxNzlfYXV0b19kZXRhY2goZGV2KTtcbiBcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODE3OUEpIHtcbitcdFx0KnRtcCA9IEFYX01BQ19FRkZfRU47XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0JVTEtfT1VUX0NUUkwsIDEsIDEsIHRtcCk7XG4rXG4rXHRcdCp0bXAxNiA9IDA7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCB0bXAxNik7XG4rXG4rXHRcdCp0bXAgPSAweDA0O1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMSwgMSwgdG1wKTtcbitcdFx0KnRtcCA9IDB4MTA7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfSElHSCwgMSwgMSwgdG1wKTtcbitcbitcdFx0KnRtcCA9IDA7XG4rXHRcdGlmIChkZXYtXHUwMDNlbmV0LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpXG4rXHRcdFx0KnRtcCB8PSBBWF9WTEFOX0NPTlRST0xfVkZFO1xuK1x0XHRpZiAoZGV2LVx1MDAzZW5ldC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlgpXG4rXHRcdFx0KnRtcCB8PSBBWF9WTEFOX0NPTlRST0xfVlNPO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX1ZMQU5fSURfQ09OVFJPTCwgMSwgMSwgdG1wKTtcbitcbitcdFx0KnRtcCA9IDB4ZmY7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX0JNX0lOVF9NQVNLLCAxLCAxLCB0bXApO1xuK1xuK1x0XHQqdG1wID0gMDtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fUlhfRE1BX0NUTCwgMSwgMSwgdG1wKTtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQk1fVFhfRE1BX0NUTCwgMSwgMSwgdG1wKTtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWDg4MTc5QV9NQUNfQVJDX0NUUkwsIDEsIDEsIHRtcCk7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVg4ODE3OUFfTUFDX1NXUF9DVFJMLCAxLCAxLCB0bXApO1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYODgxNzlBX01BQ19UWF9IRFJfQ0tTVU0sIDEsIDEsIHRtcCk7XG4rXHR9XG4rXG4gXHQvKiBSZWFkIE1BQyBhZGRyZXNzIGZyb20gRFRCIG9yIGFzaXggY2hpcCAqL1xuIFx0YXg4ODE3OV9nZXRfbWFjX2FkZHIoZGV2KTtcbiBcdG1lbWNweShkZXYtXHUwMDNlbmV0LVx1MDAzZXBlcm1fYWRkciwgZGV2LVx1MDAzZW5ldC1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuIFx0LyogUlggYnVsayBjb25maWd1cmF0aW9uICovXG4tXHRtZW1jcHkodG1wLCBcdTAwMjZBWDg4MTc5X0JVTEtJTl9TSVpFWzBdLCA1KTtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQlVMS0lOX1FDVFJMLCA1LCA1LCB0bXApO1xuLVxuLVx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMTAyNCAqIDIwO1xuLVxuLVx0KnRtcCA9IDB4MzQ7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMSwgMSwgdG1wKTtcbi1cbi1cdCp0bXAgPSAweDUyO1xuLVx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9QQVVTRV9XQVRFUkxWTF9ISUdILFxuLVx0XHRcdCAgMSwgMSwgdG1wKTtcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuK1x0XHRtZW1jcHkodG1wLCBcdTAwMjZBWDg4MTc5X0JVTEtJTl9TSVpFWzBdLCA1KTtcbitcdFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9CVUxLSU5fUUNUUkwsIDUsIDUsIHRtcCk7XG4rXHRcdCp0bXAgPSAweDM0O1xuK1x0XHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1BBVVNFX1dBVEVSTFZMX0xPVywgMSwgMSwgdG1wKTtcbitcbitcdFx0KnRtcCA9IDB4NTI7XG4rXHRcdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUEFVU0VfV0FURVJMVkxfSElHSCxcbitcdFx0XHRcdCAgMSwgMSwgdG1wKTtcbitcdFx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMTAyNCAqIDIwO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogVGhlIEJ1bGstUmVnaXN0ZXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIEFYODgxNzlBIGlzIGRvbmUgaW5cbitcdFx0ICogYXg4ODE3OWFfbGlua19yZXNldCgpLCBvbmNlIHRoZSBsaW5rIGlzIHVwIGZvciBhIGdpdmVuIGxpbmsgYW5kIFVTQi1zcGVlZC5cbitcdFx0ICovXG4rXHRcdGlmIChheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkKVxuK1x0XHRcdGRldi1cdTAwM2VyeF91cmJfc2l6ZSA9IDEwMjQgKiAyNDtcbitcdFx0ZWxzZVxuK1x0XHRcdGRldi1cdTAwM2VyeF91cmJfc2l6ZSA9IDEwMjQgKiA0ODtcbitcdH1cbiBcbiBcdC8qIEVuYWJsZSBjaGVja3N1bSBvZmZsb2FkICovXG4gXHQqdG1wID0gQVhfUlhDT0VfSVAgfCBBWF9SWENPRV9UQ1AgfCBBWF9SWENPRV9VRFAgfFxuIFx0ICAgICAgIEFYX1JYQ09FX1RDUFY2IHwgQVhfUlhDT0VfVURQVjY7XG4gXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYQ09FX0NUTCwgMSwgMSwgdG1wKTtcbitcdGF4MTc5X2RhdGEtXHUwMDNlcnhfY2hlY2tzdW0gPSAxO1xuIFxuIFx0KnRtcCA9IEFYX1RYQ09FX0lQIHwgQVhfVFhDT0VfVENQIHwgQVhfVFhDT0VfVURQIHxcbiBcdCAgICAgICBBWF9UWENPRV9UQ1BWNiB8IEFYX1RYQ09FX1VEUFY2O1xuIFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9UWENPRV9DVEwsIDEsIDEsIHRtcCk7XG4gXG4gXHQvKiBDb25maWd1cmUgUlggY29udHJvbCByZWdpc3RlciA9XHUwMDNlIHN0YXJ0IG9wZXJhdGlvbiAqL1xuLVx0KnRtcDE2ID0gQVhfUlhfQ1RMX0RST1BDUkNFUlIgfCBBWF9SWF9DVExfSVBFIHwgQVhfUlhfQ1RMX1NUQVJUIHxcbi1cdFx0IEFYX1JYX0NUTF9BUCB8IEFYX1JYX0NUTF9BTUFMTCB8IEFYX1JYX0NUTF9BQjtcbi1cdGF4ODgxNzlfd3JpdGVfY21kKGRldiwgQVhfQUNDRVNTX01BQywgQVhfUlhfQ1RMLCAyLCAyLCB0bXAxNik7XG4tXG4tXHQqdG1wID0gQVhfTU9OSVRPUl9NT0RFX1BNRVRZUEUgfCBBWF9NT05JVE9SX01PREVfUE1FUE9MIHxcbi1cdCAgICAgICBBWF9NT05JVE9SX01PREVfUldNUDtcbitcdGF4MTc5X2RhdGEtXHUwMDNlcnhjdGwgPSBBWF9SWF9DVExfRFJPUENSQ0VSUiB8IEFYX1JYX0NUTF9TVEFSVCB8XG4rXHRcdFx0ICAgIEFYX1JYX0NUTF9BUCB8IEFYX1JYX0NUTF9BTUFMTCB8IEFYX1JYX0NUTF9BQjtcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWlwX2FsaWduKVxuK1x0XHRheDE3OV9kYXRhLVx1MDAzZXJ4Y3RsIHw9IEFYX1JYX0NUTF9JUEU7XG4rXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX1JYX0NUTCwgMiwgMiwgXHUwMDI2YXgxNzlfZGF0YS1cdTAwM2VyeGN0bCk7XG4rXG4rXHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4rXHRcdCp0bXAgPSBBWF9NT05JVE9SX01PREVfUE1FVFlQRSB8IEFYX01PTklUT1JfTU9ERV9QTUVQT0wgfCBBWF9NT05JVE9SX01PREVfUldNUDtcbitcdGVsc2VcbitcdFx0KnRtcCA9IEFYX01PTklUT1JfTU9ERV9SV01QO1xuIFx0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NT05JVE9SX01PRCwgMSwgMSwgdG1wKTtcbiBcbiBcdC8qIENvbmZpZ3VyZSBkZWZhdWx0IG1lZGl1bSB0eXBlID1cdTAwM2UgZ2lnYSAqL1xuIFx0KnRtcDE2ID0gQVhfTUVESVVNX1JFQ0VJVkVfRU4gfCBBWF9NRURJVU1fVFhGTE9XX0NUUkxFTiB8XG4tXHRcdCBBWF9NRURJVU1fUlhGTE9XX0NUUkxFTiB8IEFYX01FRElVTV9GVUxMX0RVUExFWCB8XG4tXHRcdCBBWF9NRURJVU1fR0lHQU1PREU7XG4tXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSxcbi1cdFx0XHQgIDIsIDIsIHRtcDE2KTtcbitcdFx0IEFYX01FRElVTV9SWEZMT1dfQ1RSTEVOIHwgQVhfTUVESVVNX0ZVTExfRFVQTEVYO1xuK1x0aWYgKCFheDE3OV9kYXRhLVx1MDAzZWlzX2F4ODg3NzJkKVxuK1x0XHQqdG1wMTYgfD0gQVhfTUVESVVNX0dJR0FNT0RFO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9NRURJVU1fU1RBVFVTX01PREUsIDIsIDIsIHRtcDE2KTtcbiBcbiBcdC8qIENoZWNrIGlmIFdvTCBpcyBzdXBwb3J0ZWQgKi9cbiBcdGF4MTc5X2RhdGEtXHUwMDNld29sX3N1cHBvcnRlZCA9IDA7XG5AQCAtMTY1NCwxNiArMjc0NSwyOSBAQCBzdGF0aWMgaW50IGF4ODgxNzlfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuIFx0XHRcdCAgICAgMSwgMSwgXHUwMDI2dG1wKSBcdTAwM2UgMClcbiBcdFx0YXgxNzlfZGF0YS1cdTAwM2V3b2xfc3VwcG9ydGVkID0gV0FLRV9NQUdJQyB8IFdBS0VfUEhZO1xuIFxuLVx0YXg4ODE3OV9sZWRfc2V0dGluZyhkZXYpO1xuK1x0LyogRm9yIGNoaXBzIHN0YXJ0aW5nIHdpdGggQVg4ODE3OUEsIExFRFMgYXJlIGNvbmZpZ3VyZWQgYnkgdGhlIGFkYXB0ZXJcbitcdCAqIGZpcm13YXJlIGRpcmVjdGx5IGZyb20gRUVQUk9NL0VGVVNFIHZhbHVlc1xuK1x0ICovXG4rXHRpZiAoYXgxNzlfZGF0YS1cdTAwM2VjaGlwX3ZlcnNpb24gXHUwMDNjIEFYX1ZFUlNJT05fQVg4ODE3OUEpXG4rXHRcdGF4ODgxNzlfbGVkX3NldHRpbmcoZGV2KTtcbiBcbiBcdGF4MTc5X2RhdGEtXHUwMDNlZWVlX2VuYWJsZWQgPSAwO1xuIFx0YXgxNzlfZGF0YS1cdTAwM2VlZWVfYWN0aXZlID0gMDtcbiBcbi1cdGF4ODgxNzlfZGlzYWJsZV9lZWUoZGV2KTtcbitcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2MgQVhfVkVSU0lPTl9BWDg4MTc5QSkge1xuK1x0XHRheDg4MTc5X2VlZV9jb25maWcoZGV2LCBmYWxzZSk7XG4gXG4tXHRheDg4MTc5X2V0aHRvb2xfZ2V0X2VlZShkZXYsIFx1MDAyNmVlZV9kYXRhKTtcbi1cdGxpbmttb2RlX3plcm8oZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7XG4tXHRheDg4MTc5X2V0aHRvb2xfc2V0X2VlZShkZXYsIFx1MDAyNmVlZV9kYXRhKTtcbitcdFx0YXg4ODE3OV9ldGh0b29sX2dldF9lZWUoZGV2LCBcdTAwMjZlZWVfZGF0YSk7XG4rXHRcdGxpbmttb2RlX3plcm8oZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7XG4rXHRcdGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgXHUwMDI2ZWVlX2RhdGEpO1xuK1x0fSBlbHNlIHtcbitcdFx0YXg4ODE3OV9lZWVfY29uZmlnKGRldiwgdHJ1ZSk7XG4rXHRcdGF4ODgxNzlfZXRodG9vbF9nZXRfZWVlKGRldiwgXHUwMDI2ZWVlX2RhdGEpO1xuK1x0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCwgZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7XG4rXHRcdGlmIChheDE3OV9kYXRhLVx1MDAzZWNoaXBfdmVyc2lvbiBcdTAwM2U9IEFYX1ZFUlNJT05fQVg4ODI3OSlcbitcdFx0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlVF9GdWxsX0JJVCwgZWVlX2RhdGEuYWR2ZXJ0aXNlZCk7XG4rXHRcdGF4ODgxNzlfZXRodG9vbF9zZXRfZWVlKGRldiwgXHUwMDI2ZWVlX2RhdGEpO1xuK1x0fVxuIFxuIFx0LyogUmVzdGFydCBhdXRvbmVnICovXG4gXHRtaWlfbndheV9yZXN0YXJ0KFx1MDAyNmRldi1cdTAwM2VtaWkpO1xuQEAgLTE3MDcsNiArMjgxMSwyNCBAQCBzdGF0aWMgaW50IGF4ODgxNzlfc3RvcChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBheDg4MTc5YV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldilcbit7XG4rXHR1MTYgcmVnMTY7XG4rXHR1OCByZWc4O1xuK1xuK1x0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwgMiwgMiwgXHUwMDI2cmVnMTYpO1xuK1x0cmVnMTYgXHUwMDI2PSB+QVhfTUVESVVNX1JFQ0VJVkVfRU47XG4rXHRheDg4MTc5X3dyaXRlX2NtZChkZXYsIEFYX0FDQ0VTU19NQUMsIEFYX01FRElVTV9TVEFUVVNfTU9ERSwgMiwgMiwgXHUwMDI2cmVnMTYpO1xuK1xuK1x0cmVnMTYgPSAwO1xuK1x0YXg4ODE3OV93cml0ZV9jbWQoZGV2LCBBWF9BQ0NFU1NfTUFDLCBBWF9SWF9DVEwsIDIsIDIsIFx1MDAyNnJlZzE2KTtcbitcbitcdHJlZzggPSAwO1xuK1x0YXg4ODE3OV9yZWFkX2NtZChkZXYsIEFYODgxNzlBX1BIWV9QT1dFUiwgMCwgMCwgMSwgXHUwMDI2cmVnOCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTc5X2luZm8gPSB7XG4gXHQuZGVzY3JpcHRpb24gPSBcIkFTSVggQVg4ODE3OSBVU0IgMy4wIEdpZ2FiaXQgRXRoZXJuZXRcIixcbiBcdC5iaW5kID0gYXg4ODE3OV9iaW5kLFxuQEAgLTE3MzMsNiArMjg1NSw0NSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxNzhhX2luZm8gPSB7XG4gXHQudHhfZml4dXAgPSBheDg4MTc5X3R4X2ZpeHVwLFxuIH07XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTc5YV9pbmZvID0ge1xuK1x0LmRlc2NyaXB0aW9uID0gXCJBU0lYIEFYODgxNzlBIFVTQiAzLjIgR2lnYWJpdCBFdGhlcm5ldFwiLFxuK1x0LmJpbmQgPSBheDg4MTc5YV9iaW5kLFxuK1x0LnVuYmluZCA9IGF4ODgxNzlhX3VuYmluZCxcbitcdC5zdGF0dXMgPSBheDg4MTc5X3N0YXR1cyxcbitcdC5saW5rX3Jlc2V0ID0gYXg4ODE3OWFfbGlua19yZXNldCxcbitcdC5yZXNldCA9IGF4ODgxNzlfcmVzZXQsXG4rXHQuc3RvcCA9IGF4ODgxNzlhX3N0b3AsXG4rXHQuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYIHwgRkxBR19NVUxUSV9QQUNLRVQgfCBGTEFHX0FWT0lEX1VOTElOS19VUkJTLFxuK1x0LnJ4X2ZpeHVwID0gYXg4ODE3OWFfcnhfZml4dXAsXG4rXHQudHhfZml4dXAgPSBheDg4MTc5YV90eF9maXh1cCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODc3MmRfaW5mbyA9IHtcbitcdC5kZXNjcmlwdGlvbiA9IFwiQVNJWCBBWDg4NzcyRC9FIFVTQiAyLjAgRmFzdCBFdGhlcm5ldFwiLFxuK1x0LmJpbmQgPSBheDg4MTc5YV9iaW5kLFxuK1x0LnVuYmluZCA9IGF4ODgxNzlhX3VuYmluZCxcbitcdC5zdGF0dXMgPSBheDg4MTc5X3N0YXR1cyxcbitcdC5saW5rX3Jlc2V0ID0gYXg4ODE3OWFfbGlua19yZXNldCxcbitcdC5yZXNldCA9IGF4ODgxNzlfcmVzZXQsXG4rXHQuc3RvcCA9IGF4ODgxNzlhX3N0b3AsXG4rXHQuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYIHwgRkxBR19NVUxUSV9QQUNLRVQgfCBGTEFHX0FWT0lEX1VOTElOS19VUkJTLFxuK1x0LnJ4X2ZpeHVwID0gYXg4ODE3OWFfcnhfZml4dXAsXG4rXHQudHhfZml4dXAgPSBheDg4MTc5YV90eF9maXh1cCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXg4ODI3OV9pbmZvID0ge1xuK1x0LmRlc2NyaXB0aW9uID0gXCJBU0lYIEFYODgyNzkgVVNCIDMuMiAyLjVHaWdhYml0IEV0aGVybmV0XCIsXG4rXHQuYmluZCA9IGF4ODgxNzlhX2JpbmQsXG4rXHQudW5iaW5kID0gYXg4ODE3OWFfdW5iaW5kLFxuK1x0LnN0YXR1cyA9IGF4ODgxNzlfc3RhdHVzLFxuK1x0LmxpbmtfcmVzZXQgPSBheDg4MTc5YV9saW5rX3Jlc2V0LFxuK1x0LnJlc2V0ID0gYXg4ODE3OV9yZXNldCxcbitcdC5zdG9wID0gYXg4ODE3OWFfc3RvcCxcbitcdC5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVggfCBGTEFHX01VTFRJX1BBQ0tFVCB8IEZMQUdfQVZPSURfVU5MSU5LX1VSQlMsXG4rXHQucnhfZml4dXAgPSBheDg4MTc5YV9yeF9maXh1cCxcbitcdC50eF9maXh1cCA9IGF4ODgxNzlhX3R4X2ZpeHVwLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjeXByZXNzX0dYM19pbmZvID0ge1xuIFx0LmRlc2NyaXB0aW9uID0gXCJDeXByZXNzIEdYMyBTdXBlclNwZWVkIHRvIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlclwiLFxuIFx0LmJpbmQgPSBheDg4MTc5X2JpbmQsXG5AQCAtMTg3OCw2ICszMDM5LDE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gYXRfdW1jMjAwMHNwX2luZm8gPSB7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHByb2R1Y3RzW10gPSB7XG4ge1xuK1x0LyogQVNJWCBBWDg4MTc5QS9CIFVTQiAzLjIgR2lnYWJpdCBFdGhlcm5ldCAqL1xuK1x0VVNCX0RFVklDRV9WRVIoMHgwYjk1LCAweDE3OTAsIDB4MDIwMCwgMHgwMjAwKSxcbitcdC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKVx1MDAyNmF4ODgxNzlhX2luZm8sXG4rfSwge1xuK1x0LyogQVNJWCBBWDg4NzcyRCBVU0IgMi4wIDEwME1iaXQgRXRoZXJuZXQgKi9cbitcdFVTQl9ERVZJQ0VfVkVSKDB4MGI5NSwgMHgxNzkwLCAweDAzMDAsIDB4MDMwMCksXG4rXHQuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZylcdTAwMjZheDg4NzcyZF9pbmZvLFxuK30sIHtcbitcdC8qIEFTSVggQVg4ODI3OSBVU0IgMy4yIDIuNUdCaXQgRXRoZXJuZXQgKi9cbitcdFVTQl9ERVZJQ0VfVkVSKDB4MGI5NSwgMHgxNzkwLCAweDA0MDAsIDB4MDQwMCksXG4rXHQuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZylcdTAwMjZheDg4Mjc5X2luZm8sXG4rfSwge1xuIFx0LyogQVNJWCBBWDg4MTc5IDEwLzEwMC8xMDAwICovXG4gXHRVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDBiOTUsIDB4MTc5MCwgMHhmZiwgMHhmZiwgMCksXG4gXHQuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZylcdTAwMjZheDg4MTc5X2luZm8sXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowMToyNi41MjgyNTU0ODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjAxMTE4MDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFYODgxNzkgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgYGRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuY2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGxldCdzIGJyZWFrIGl0IGRvd24gZnJvbSBhIGZ1bmN0aW9uYWwgdGVzdGluZyBwZXJzcGVjdGl2ZS4gSXQncyBhZGRpbmcgc3VwcG9ydCBmb3IgYSBoYW5kZnVsIG9mIG5ldyBjaGlwczogdGhlIEFYODgxNzlBLCBBWDg4NzcyRCwgYW5kIEFYODgyNzkuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgYXJjaGl0ZWN0dXJhbCBkaWZmZXJlbmNlcyB0aGF0IHJlcXVpcmUgbmV3IGRldmljZSBpbmZvIHN0cnVjdHVyZXM6IGBheDg4MTc5YV9pbmZvYCwgYGF4ODg3NzJkX2luZm9gLCBgYXg4ODI3OV9pbmZvYC4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGVzZSBuZXcgc3RydWN0dXJlcyBoaW50cyBhdCBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciBtYXBwaW5ncyBvciBjb250cm9sIHNlcXVlbmNlcywgd2hpY2ggaXMgYWx3YXlzIGEganVpY3kgdGFyZ2V0IGZvciBmaW5kaW5nIHN1YnRsZSBpc3N1ZXMuXG5cbldlIGFsc28gaGF2ZSBuZXcgZnVuY3Rpb25zOiBgYXg4ODE3OWFfYmluZGAsIGBheDg4MTc5YV91bmJpbmRgLCBgYXg4ODE3OWFfcnhfZml4dXBgLCBgYXg4ODE3OWFfdHhfZml4dXBgLCBgYXg4ODE3OWFfbGlua19yZXNldGAsIGBheDg4MTc5YV9zdG9wYC4gVGhlc2UgcHJvYmFibHkgaW1wbGVtZW50IHRoZSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBsaW5rIGhhbmRsaW5nIGZvciBlYWNoIG9mIHRoZXNlIG5ldyBjaGlwc2V0cy4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYGF4ODgxNzlfcmVzZXRgIGFuZCBgYXg4ODE3OV9zdGF0dXNgIGltcGxpZXMgZWl0aGVyIHNoYXJlZCBmdW5jdGlvbmFsaXR5IGFjcm9zcyBjaGlwc2V0cyBvciBtb2RpZmljYXRpb25zIHRvIGhhbmRsZSB0aGUgbmV3IGRldmljZXMgZ3JhY2VmdWxseS5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIGEgVVNCIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBpcyBhbHJlYWR5IGEgZmFpcmx5IGNvbXBsZXggYXJlYS4gTmV0d29yayBkcml2ZXJzLCBpbiBnZW5lcmFsLCBhcmUgYWx3YXlzIGhpZ2gtdmFsdWUgdGFyZ2V0cyBiZWNhdXNlIG9mIHRoZSBoaWdoIGxpa2VsaWhvb2Qgb2YgZXhwbG9pdGFibGUgZmxhd3MuIFRoaXMgcGF0Y2gsIHdpdGggaXRzIGFkZGl0aW9ucyBvZiBzdXBwb3J0IGZvciBzZXZlcmFsIG5ldyBjaGlwcywgaGFzIGRlZmluaXRlbHkgcGlxdWVkIG15IGludGVyZXN0LiBUaGUgY29tcGxleGl0eSwgdGhlIGludGVyYWN0aW9uIHdpdGggVVNCLCBhbmQgdGhlIHBvdGVudGlhbCBmb3Igb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gdGhlc2UgZml4dXAgZnVuY3Rpb25zIG1ha2UgdGhpcyBwYXRjaCBhbiBvYnZpb3VzIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuQmVmb3JlIEkgZGl2ZSB0b28gZGVlcGx5LCBsZXQncyBnZXQgYSBoYW5kbGUgb24gd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgdG8gYnVpbGQgdGhpcy4gSSBuZWVkIHRvIGtub3cgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIGludm9sdmVkLiBMZXQncyBzdGFydCBieSBncmVwcGluZyB0aGUgYGRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZWAgZm9yIHRoZSBmaWxlbmFtZSBpdHNlbGY6IGBkcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4MDUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowMTozMi43MjkzNzc1NzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzczMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF4ODgxNzlfMTc4YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTE0PWFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3OV8xNzhBKSAgICAgICs9IGF4ODgxNzlfMTc4YS5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19VU0JfTkVUX0NEQ0VUSEVSKVxcdCs9IGNkY19ldGhlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjAxOjMyLjgzMDc1OTY0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTE1NjcwODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVVNCIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gSSdtIHdvcmtpbmcgd2l0aCBpcyBgVVNCX05FVF9BWDg4MTc5XzE3OEFgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLlxuXG5Gcm9tIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIGl0IHNlZW1zIFZMQU4gc3VwcG9ydCBpcyBiZWluZyBhZGRlZCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZGAgYW5kIGBheDE3OWFfdmxhbl9yeF9hZGRfdmlkYC4gSXQgYWxzbyB1dGlsaXplcyBgdmxhbl9nZXRfdGFnYCBhbmQgYF9fdmxhbl9od2FjY2VsX3B1dF90YWdgLiBUaGVzZSBWTEFOIGZ1bmN0aW9ucyBhcmUgY29tbW9ubHkgbGlua2VkIHRvIGBWTEFOXzgwMjFRYCwgc28gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHRoYXQgdGhhdCdzIGVuYWJsZWQgYXMgd2VsbC5cblxuVG8gY29uZmlybSBhbnkgZGVwZW5kZW5jaWVzLCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUgYW5kIHNlYXJjaCBmb3IgdGhlIGBVU0JfTkVUX0FYODgxNzlfMTc4QWAgY29uZmlndXJhdGlvbiBzcGVjaWZpY2FsbHkuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBkZWZpbml0aXZlIGFuc3dlciBvbiBhbnkgbWFuZGF0b3J5IG9yIHBvdGVudGlhbGx5IGhlbHBmdWwgcmVsYXRlZCBjb25maWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjc1NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowMjowNS45NDY0MzM4OTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNzM2NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlVTQl9ORVRfQVg4ODE3OV8xNzhBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTE2Nj1jb25maWcgVVNCX05FVF9BWDg4MTdYXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xOTctXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTk4OmNvbmZpZyBVU0JfTkVUX0FYODgxNzlfMTc4QVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE5OS1cXHR0cmlzdGF0ZSBcXFwiQVNJWCBBWDg4MTc5LzE3OEEgVVNCIDMuMC8yLjAgdG8gR2lnYWJpdCBFdGhlcm5ldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDI6MDYuMTA4MTg5MDY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY4MDU1MjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBVU0IgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhpcyBVU0IgbmV0d29yayBkcml2ZXIgc2l0dWF0aW9uLCBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIEdpdmVuIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBtb3N0IHJlbGV2YW50IHNlY3Rpb24gd2lsbCBiZSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC91c2JgIGRpcmVjdG9yeS4gQW5kIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgcHJpbWFyeSBtZWFucyBvZiBkZWZpbmluZyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU28sIGxldCdzIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTguIFRoYXQncyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQg4oCTIGhvcGVmdWxseSwgaXQgY29udGFpbnMgdGhlIGNvcmUgb3B0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbiB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBiZWluZyBjb25maWd1cmVkLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUga2V5IHNldHRpbmdzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzI5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjAyOjA4Ljc4ODc0NjUxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0XFx0ICBUaGlzIGRyaXZlciBjcmVhdGVzIGFuIGludGVyZmFjZSBuYW1lZCBcXFwiZXRoWFxcXCIsIHdoZXJlIFggZGVwZW5kcyBvblxcbiAxOTY6XFx0XFx0ICB3aGF0IG90aGVyIG5ldHdvcmtpbmcgZGV2aWNlcyB5b3UgaGF2ZSBpbiB1c2UuXFxuIDE5NzpcXHRcXG4gMTk4OlxcdGNvbmZpZyBVU0JfTkVUX0FYODgxNzlfMTc4QVxcbiAxOTk6XFx0XFx0dHJpc3RhdGUgXFxcIkFTSVggQVg4ODE3OS8xNzhBIFVTQiAzLjAvMi4wIHRvIEdpZ2FiaXQgRXRoZXJuZXRcXFwiXFxuIDIwMDpcXHRcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG4gMjAxOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAyMDI6XFx0XFx0c2VsZWN0IFBIWUxJQlxcbiAyMDM6XFx0XFx0ZGVmYXVsdCB5XFxuIDIwNDpcXHRcXHRoZWxwXFxuIDIwNTpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgQVNJWCBBWDg4MTc5IGJhc2VkIFVTQiAzLjAvMi4wXFxuIDIwNjpcXHRcXHQgIHRvIEdpZ2FiaXQgRXRoZXJuZXQgYWRhcHRlcnMuXFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdCAgVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGRldmljZXM6XFxuIDIwOTpcXHRcXHQgICAgKiBBU0lYIEFYODgxNzlcXG4gMjEwOlxcdFxcdCAgICAqIEFTSVggQVg4ODE3OEFcXG4gMjExOlxcdFxcdCAgICAqIFNpdGNvbW0gTE4tMDMyXFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdCAgVGhpcyBkcml2ZXIgY3JlYXRlcyBhbiBpbnRlcmZhY2UgbmFtZWQgXFxcImV0aFhcXFwiLCB3aGVyZSBYIGRlcGVuZHMgb25cXG4gMjE0OlxcdFxcdCAgd2hhdCBvdGhlciBuZXR3b3JraW5nIGRldmljZXMgeW91IGhhdmUgaW4gdXNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowMjowOC43ODg5MTUyNzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTgzNTI5OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIHRoZSBGdXp6aW5nIFRhcmdldDogQVg4ODE3OUEgVVNCIE5ldHdvcmsgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBzZWVtcyB0byBiZSBgVVNCX05FVF9BWDg4MTc5XzE3OEFgLiBUaGF0J3Mgd2hlcmUgd2UgbmVlZCB0byBzdGFydC4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzIHNwZWNpZmljIFVTQiBuZXR3b3JrIGRyaXZlci5cblxuTGV0J3Mgc2VlIHdoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zLiBSaWdodCwgaGVyZSBhcmUgdGhlIG5ldyBzeW1ib2xzOiBgYXg4ODE3OWFfYmluZGAsIGBheDg4MTc5YV91bmJpbmRgLCBgYXg4ODE3OWFfcnhfZml4dXBgLCBgYXg4ODE3OWFfdHhfZml4dXBgLCBgYXg4ODE3OWFfbGlua19yZXNldGAsIGBheDg4MTc5YV9zdG9wYCwgYGF4MTc5YV92bGFuX3J4X2tpbGxfdmlkYCwgYGF4MTc5YV92bGFuX3J4X2FkZF92aWRgLCBgYXg4ODE3OWFfZ2V0X3BhdXNlcGFyYW1gLCBgYXg4ODE3OWFfc2V0X3BhdXNlcGFyYW1gLCBgYXg4ODE3OWFfcnhfY2hlY2tzdW1gLCBhbmQgYGF4ODgxNzlhX2J1bGtpbl9jb25maWdgLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQuIGBheDg4MTc5YV9yeF9maXh1cGAgYW5kIGBheDg4MTc5YV90eF9maXh1cGAuLi4gdGhvc2UgYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucy4gTm9ybWFsbHksIEknZCBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMgYXMgdGhleSBjYW4gYmUgbGVzcyBlZmZpY2llbnQgdG8gZnV6ei4gSG93ZXZlciwgY29uc2lkZXJpbmcgdGhpcyBpcyBhICpVU0IgbmV0d29yayBkcml2ZXIqLCB0aGUgYHJ4X2ZpeHVwYCBhbmQgYHR4X2ZpeHVwYCBmdW5jdGlvbnMgYXJlIHdoZXJlIGFsbCB0aGUgcGFja2V0IHBhcnNpbmcgbWFnaWMgaGFwcGVucyBhbmQgYXJlIGRldmljZS1zcGVjaWZpYy4gVGhleSdyZSBleGFjdGx5IHdoYXQgd2Ugd2FudCB0byB0YXJnZXQgd2l0aCBVU0IgZnV6emluZywgYXMgdGhleSdsbCBsaWtlbHkgYmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgbWFsZm9ybWVkIGRhdGEgZnJvbSB0aGUgZGV2aWNlLlxuXG5XYWl0LCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwcm9tcHQuIEkgcmVtZW1iZXIgaXQgc2F5aW5nIHRvIFwiYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zXCIuIEJ1dCBpbiB0aGlzIGNvbnRleHQsIGV4Y2x1ZGluZyB0aGVtIHdvdWxkIGJlIGEgbWlzdGFrZS4gVGhlc2UgYXJlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgdGhlIFVTQiBkYXRhISBJZiBJIHNraXAgdGhlbSwgSSBtaXNzIHRoZSBtb3N0IGltcG9ydGFudCBsb2dpYyBmb3IgZnV6emluZy5cblxuQWxyaWdodCwgc28gSSdtIGdvaW5nIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgYXg4ODE3OWFfYmluZGAsIGBheDg4MTc5YV9saW5rX3Jlc2V0YCwgYGF4ODgxNzlhX3J4X2ZpeHVwYCwgYGF4ODgxNzlhX3R4X2ZpeHVwYCwgYGF4MTc5YV92bGFuX3J4X2FkZF92aWRgLCBhbmQgYGF4MTc5YV92bGFuX3J4X2tpbGxfdmlkYC5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBheDg4MTc5YV9yeF9maXh1cGAsIGxldCdzIGRvdWJsZS1jaGVjay4gWWVzLCBpdCdzIGNhbGxlZCBmb3IgZXZlcnkgVVJCIHJlY2VpdmVkLCBzbyBpdCByZWFsbHkgKmlzKiBjb3JlIHRvIHRoZSBwYWNrZXQgcGFyc2luZy4gRGVmaW5pdGVseSBpbmNsdWRpbmcgdGhhdC5cblxuRmluYWxseSwgYSBxdWljayByZXZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb246IGBVU0JfTkVUX0FYODgxNzlfMTc4QWAuXG5cbkFuZCwgYSBmaW5hbCB0aG91Z2h0LCBjb3VsZCBgVkxBTl84MDIxUWAgYmUgbmVlZGVkIHRvIGFsbG93IFZMQU4gZnVuY3Rpb25zIHRvIGJlIGNvbXBpbGVkIG9yIHJlYWNoYWJsZT8gVGhlIGNvZGUgdXNlcyBgdmxhbl9nZXRfdGFnYCBhbmQgYF9fdmxhbl9od2FjY2VsX3B1dF90YWdgIOKAkyB0aG9zZSBhcmUgZGVmaW5lZCBpbiBgbGludXgvaWZfdmxhbi5oYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODU1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDI6MTguNzcyNDQ5NDMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4Njc1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmxhbl9nZXRfdGFnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTU0ND1zdGF0aWMgaW5saW5lIHZvaWQgX192bGFuX2h3YWNjZWxfcHV0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTUxLS8qKlxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjU1MjogKiBfX3ZsYW5fZ2V0X3RhZyAtIGdldCB0aGUgVkxBTiBJRCB0aGF0IGlzIHBhcnQgb2YgdGhlIHBheWxvYWRcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01NTMtICogQHNrYjogc2tidWZmIHRvIHF1ZXJ5XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01NTctICovXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NTU4OnN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9nZXRfdGFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqdmxhbl90Y2kpXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtNTU5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTU3Nj1zdGF0aWMgaW5saW5lIGludCBfX3ZsYW5faHdhY2NlbF9nZXRfdGFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01ODgtLyoqXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NTg5OiAqIHZsYW5fZ2V0X3RhZyAtIGdldCB0aGUgVkxBTiBJRCBmcm9tIHRoZSBza2JcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01OTAtICogQHNrYjogc2tidWZmIHRvIHF1ZXJ5XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01OTQtICovXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg6NTk1OnN0YXRpYyBpbmxpbmUgaW50IHZsYW5fZ2V0X3RhZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZsYW5fdGNpKVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTU5Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC01OTktXFx0fSBlbHNlIHtcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDo2MDA6XFx0XFx0cmV0dXJuIF9fdmxhbl9nZXRfdGFnKHNrYiwgdmxhbl90Y2kpO1xcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTYwMS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjAyOjE4LjkwNjMzM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTQ5OTQxNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBBWDg4MTc5QSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHRoZSBkZXZlbG9wZXJzIGFyZSBhZGRpbmcgc3VwcG9ydCBmb3Igc29tZSBuZXcgQVNJWCBVU0IgRXRoZXJuZXQgY2hpcHMg4oCTIHRoZSBBWDg4MTc5QSwgQVg4ODc3MkQsIGFuZCBBWDg4Mjc5IOKAkyB0byB0aGUgZXhpc3RpbmcgYGF4ODgxNzlfMTc4YWAgZHJpdmVyLiBJbnRlcmVzdGluZy4gSSBub3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBpbmxpbmUsIGFuZCBjb21waWxhdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGhpbmdlIG9uIGBDT05GSUdfVkxBTl84MDIxUWAuIEhvd2V2ZXIsIHdoaWxlIG5vdCBlc3NlbnRpYWwsIGBWTEFOXzgwMjFRYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGZvciB0ZXN0aW5nIHRoZSBWTEFOIGZ1bmN0aW9uYWxpdHkg4oCTIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQgZm9yIGZ1bGwgY292ZXJhZ2UuIFRoZSBjb3JlIGZvY3VzLCBob3dldmVyLCBpcyBvbiBgVVNCX05FVF9BWDg4MTc5XzE3OEFgLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBzY3J1dGluaXplIGFyZTogYGF4ODgxNzlhX2JpbmRgLCBgYXg4ODE3OWFfdW5iaW5kYCwgYGF4ODgxNzlhX2xpbmtfcmVzZXRgLCBgYXg4ODE3OWFfcnhfZml4dXBgLCBgYXg4ODE3OWFfdHhfZml4dXBgLCBgYXgxNzlhX3ZsYW5fcnhfYWRkX3ZpZGAsIGBheDE3OWFfdmxhbl9yeF9raWxsX3ZpZGAsIGBheDg4MTc5YV9nZXRfcGF1c2VwYXJhbWAsIGBheDg4MTc5YV9zZXRfcGF1c2VwYXJhbWAsIGBheDg4MTc5YV9yeF9jaGVja3N1bWAsIGFuZCBgYXg4ODE3OWFfYnVsa2luX2NvbmZpZ2AuIFRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IHRoZSBjb3JlIGRyaXZlciBmdW5jdGlvbmFsaXR5LCBkZWFsaW5nIHdpdGggZGV2aWNlIGJpbmRpbmcsIHVuYmluZGluZywgbGluayBtYW5hZ2VtZW50LCBSWC9UWCBwYWNrZXQgaGFuZGxpbmcsIFZMQU4gbWFuaXB1bGF0aW9uLCBwYXVzZSBwYXJhbWV0ZXIgaGFuZGxpbmcsIGNoZWNrc3VtIG9mZmxvYWRpbmcgYW5kIGJ1bGsgZGF0YSB0cmFuc2ZlciBjb25maWd1cmF0aW9uLlxuXG5Gcm9tIG15IHBlcnNwZWN0aXZlLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGxpbmsgcmVzZXQgbG9naWMsIGFuZCBwYWNrZXQgcHJvY2Vzc2luZyBzdGVwcyAoUlgvVFggZml4dXApLCBhbGwgc3BlY2lmaWMgdG8gdGhlc2UgbmV3IGNoaXBzLiBTbywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIEknZCB3YW50IHRvIGhlYXZpbHkgZm9jdXMgb24gdGhlIG5ldyBVU0IgZGV2aWNlIGJpbmRpbmcgYW5kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocywgcGFydGljdWxhcmx5IHRoZSBSWCBhbmQgVFggZml4dXAgcm91dGluZXMuIFRoZXNlIGFyZSB0aGUgYXJlYXMgd2hlcmUgbmV3IGxvZ2ljIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFyZSBtb3N0IGxpa2VseSB0byBlbWVyZ2UuXG5cbkknbGwgbG9nIGBVU0JfTkVUX0FYODgxNzlfMTc4QWAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZywgYW5kIHRoZW4gSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NzM5LCJPdXRwdXRUb2tlbnMiOjI5OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowMjoyNy4wNTYyNzgzNDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE1Nzc1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfQVg4ODE3OV8xNzhBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXg4ODE3OWFfYmluZFwiLFxuICAgIFwiYXg4ODE3OWFfdW5iaW5kXCIsXG4gICAgXCJheDg4MTc5YV9saW5rX3Jlc2V0XCIsXG4gICAgXCJheDg4MTc5YV9yeF9maXh1cFwiLFxuICAgIFwiYXg4ODE3OWFfdHhfZml4dXBcIixcbiAgICBcImF4MTc5YV92bGFuX3J4X2FkZF92aWRcIixcbiAgICBcImF4MTc5YV92bGFuX3J4X2tpbGxfdmlkXCIsXG4gICAgXCJheDg4MTc5YV9nZXRfcGF1c2VwYXJhbVwiLFxuICAgIFwiYXg4ODE3OWFfc2V0X3BhdXNlcGFyYW1cIixcbiAgICBcImF4ODgxNzlhX3J4X2NoZWNrc3VtXCIsXG4gICAgXCJheDg4MTc5YV9idWxraW5fY29uZmlnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBuZXcgQVNJWCBVU0IgRXRoZXJuZXQgY2hpcHMgKEFYODgxNzlBLCBBWDg4NzcyRCwgQVg4ODI3OSkgdG8gdGhlIGF4ODgxNzlfMTc4YSBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGluaXRpYWxpemF0aW9uLCBsaW5rIHJlc2V0LCBhbmQgcGFja2V0IHBhcnNpbmcgKHJ4L3R4IGZpeHVwKSBsb2dpYyBzcGVjaWZpYyB0byB0aGVzZSBjaGlwcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBVU0IgZGV2aWNlIGJpbmRpbmcgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfQVg4ODE3OV8xNzhBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXg4ODE3OWFfYmluZFwiLFxuICAgIFwiYXg4ODE3OWFfdW5iaW5kXCIsXG4gICAgXCJheDg4MTc5YV9saW5rX3Jlc2V0XCIsXG4gICAgXCJheDg4MTc5YV9yeF9maXh1cFwiLFxuICAgIFwiYXg4ODE3OWFfdHhfZml4dXBcIixcbiAgICBcImF4MTc5YV92bGFuX3J4X2FkZF92aWRcIixcbiAgICBcImF4MTc5YV92bGFuX3J4X2tpbGxfdmlkXCIsXG4gICAgXCJheDg4MTc5YV9nZXRfcGF1c2VwYXJhbVwiLFxuICAgIFwiYXg4ODE3OWFfc2V0X3BhdXNlcGFyYW1cIixcbiAgICBcImF4ODgxNzlhX3J4X2NoZWNrc3VtXCIsXG4gICAgXCJheDg4MTc5YV9idWxraW5fY29uZmlnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBuZXcgQVNJWCBVU0IgRXRoZXJuZXQgY2hpcHMgKEFYODgxNzlBLCBBWDg4NzcyRCwgQVg4ODI3OSkgdG8gdGhlIGF4ODgxNzlfMTc4YSBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGluaXRpYWxpemF0aW9uLCBsaW5rIHJlc2V0LCBhbmQgcGFja2V0IHBhcnNpbmcgKHJ4L3R4IGZpeHVwKSBsb2dpYyBzcGVjaWZpYyB0byB0aGVzZSBjaGlwcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBVU0IgZGV2aWNlIGJpbmRpbmcgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowppcpw[1] Phase: Succeeded StartedAt: 2026-07-01 11:02:53 +0000 UTC FinishedAt: 2026-07-01 11:02:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 11:02:53 +0000 UTC FinishedAt: 2026-07-01 11:02:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2] Phase: Succeeded StartedAt: 2026-07-01 11:02:53 +0000 UTC FinishedAt: 2026-07-01 13:11:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-01 11:02:53 +0000 UTC FinishedAt: 2026-07-01 13:11:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-01 11:02:53 +0000 UTC FinishedAt: 2026-07-01 11:03:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-01 11:02:53 +0000 UTC FinishedAt: 2026-07-01 11:03:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowppcpw/series-workflowppcpw-convert-artifact-3710095764/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-01 11:03:14 +0000 UTC FinishedAt: 2026-07-01 11:41:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-01 11:03:14 +0000 UTC FinishedAt: 2026-07-01 11:41:20 +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:*2df23006-96ab-4f7b-aa33-11b45295c0f8,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-workflowppcpw/series-workflowppcpw-convert-artifact-3710095764/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": "b183025a-fe52-4483-be77-e6519db69a29", "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-workflowppcpw/series-workflowppcpw-build-action-1283923474/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-01 11:03:14 +0000 UTC FinishedAt: 2026-07-01 11:41:07 +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:*2df23006-96ab-4f7b-aa33-11b45295c0f8,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-workflowppcpw/series-workflowppcpw-convert-artifact-3710095764/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": "b183025a-fe52-4483-be77-e6519db69a29", "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-workflowppcpw/series-workflowppcpw-build-action-1283923474/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-01 11:41:20 +0000 UTC FinishedAt: 2026-07-01 11:41:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-01 11:41:20 +0000 UTC FinishedAt: 2026-07-01 11:41:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-01 11:41:20 +0000 UTC FinishedAt: 2026-07-01 11:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-01 11:41:20 +0000 UTC FinishedAt: 2026-07-01 11:42:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowppcpw/series-workflowppcpw-convert-artifact-3501061203/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-01 11:42:29 +0000 UTC FinishedAt: 2026-07-01 11:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-01 11:42:29 +0000 UTC FinishedAt: 2026-07-01 11:44:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b183025a-fe52-4483-be77-e6519db69a29,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-workflowppcpw/series-workflowppcpw-build-action-1283923474/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-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-01 11:44:41 +0000 UTC FinishedAt: 2026-07-01 11:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-01 11:44:41 +0000 UTC FinishedAt: 2026-07-01 11:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-01 11:44:41 +0000 UTC FinishedAt: 2026-07-01 12:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-01 11:44:41 +0000 UTC FinishedAt: 2026-07-01 12:11: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:*2df23006-96ab-4f7b-aa33-11b45295c0f8,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-workflowppcpw/series-workflowppcpw-convert-artifact-3501061203/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": "f2982ee7-5c46-4216-8d4c-ec0960c6a47c", "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-workflowppcpw/series-workflowppcpw-build-action-94644615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-01 11:44:41 +0000 UTC FinishedAt: 2026-07-01 12:11:49 +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:*2df23006-96ab-4f7b-aa33-11b45295c0f8,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-workflowppcpw/series-workflowppcpw-convert-artifact-3501061203/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": "f2982ee7-5c46-4216-8d4c-ec0960c6a47c", "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-workflowppcpw/series-workflowppcpw-build-action-94644615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-01 12:11:59 +0000 UTC FinishedAt: 2026-07-01 12:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-01 12:11:59 +0000 UTC FinishedAt: 2026-07-01 12:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-01 12:11:59 +0000 UTC FinishedAt: 2026-07-01 12:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-01 12:11:59 +0000 UTC FinishedAt: 2026-07-01 12:14:03 +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:*f2982ee7-5c46-4216-8d4c-ec0960c6a47c,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-workflowppcpw/series-workflowppcpw-build-action-94644615/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-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-01 12:14:14 +0000 UTC FinishedAt: 2026-07-01 13:11:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-01 12:14:14 +0000 UTC FinishedAt: 2026-07-01 13:11:00 +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":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"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:*b183025a-fe52-4483-be77-e6519db69a29,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f2982ee7-5c46-4216-8d4c-ec0960c6a47c,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-workflowppcpw/series-workflowppcpw-build-action-1283923474/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-workflowppcpw/series-workflowppcpw-build-action-94644615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-01 12:14:14 +0000 UTC FinishedAt: 2026-07-01 12:14:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-01 12:14:14 +0000 UTC FinishedAt: 2026-07-01 12:14:38 +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":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"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-workflowppcpw/series-workflowppcpw-convert-artifact-2620352204/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-01 12:14:14 +0000 UTC FinishedAt: 2026-07-01 12:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-01 12:14:14 +0000 UTC FinishedAt: 2026-07-01 12:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-01 12:14:14 +0000 UTC FinishedAt: 2026-07-01 12:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-01 12:14:53 +0000 UTC FinishedAt: 2026-07-01 13:11:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppcpw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ax88179a_bind","ax88179a_unbind","ax88179a_link_reset","ax88179a_rx_fixup","ax88179a_tx_fixup","ax179a_vlan_rx_add_vid","ax179a_vlan_rx_kill_vid","ax88179a_get_pauseparam","ax88179a_set_pauseparam","ax88179a_rx_checksum","ax88179a_bulkin_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_AX88179_178A"],"series_id":"0f346afd-defd-4187-a30d-88711bdcd8b4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-01 12:14:53 +0000 UTC FinishedAt: 2026-07-01 13:10:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b183025a-fe52-4483-be77-e6519db69a29,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f2982ee7-5c46-4216-8d4c-ec0960c6a47c,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-workflowppcpw/series-workflowppcpw-build-action-1283923474/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-workflowppcpw/series-workflowppcpw-build-action-94644615/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-workflowppcpw/series-workflowppcpw-convert-artifact-2620352204/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,}