Name: series-workflowlvhdf Phase: Succeeded StartedAt: 2026-07-04 09:28:43 +0000 UTC FinishedAt: 2026-07-04 14:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[0] Phase: Succeeded StartedAt: 2026-07-04 09:28:43 +0000 UTC FinishedAt: 2026-07-04 09:40:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[0].run-triage Phase: Succeeded StartedAt: 2026-07-04 09:28:43 +0000 UTC FinishedAt: 2026-07-04 09:40:30 +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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q" ], "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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q" ], "series_id": "0e6c9019-4eef-48d1-9dde-ecfa405713e1" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_xdp_fib_lookup", "bpf_skb_fib_lookup", "bpf_ipv4_fib_lookup", "bpf_ipv6_fib_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA3LzA0IDA5OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfeGRwX2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrYl9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY0X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX2lwdjZfZmliX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFZMQU5zIGluIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXIgKGBicGZfZmliX2xvb2t1cGApLiBJdCBpbnRyb2R1Y2VzIHR3byBuZXcgZmxhZ3M6IGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgLiBUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIGNvcmUgQlBGIEZJQiBsb29rdXAgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgRklCIGxvb2t1cCBlbnRyeSBwb2ludHMgYW5kIHRoZSBJUHY0L0lQdjYgc3BlY2lmaWMgbG9va3VwIGZ1bmN0aW9ucy4gYENPTkZJR19WTEFOXzgwMjFRYCBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBWTEFOIHNwZWNpZmljIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA5OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzAyMzExNjVjNGViZmFiZWM5OWJjNTc5NDZhMmU4YzY1ZmRjZTJjYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDQgMDk6Mzk6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uZDQyMTg5NTRjNTBmNTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTM1MzIsNiAmIzQzOzM1MzIsNDUgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXG4gICpcdFx0XHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXG4gICpcdFx0XHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXG4mIzQzOyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXG4mIzQzOyAqXHRcdFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxuJiM0MzsgKlx0XHRcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxuJiM0MzsgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBmcm9tXG4mIzQzOyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggd2l0aCB0aGVcbiYjNDM7ICpcdFx0XHRwYXJlbnQmIzM5O3MgaWZpbmRleC4gKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcbiYjNDM7ICpcdFx0XHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXG4mIzQzOyAqXHRcdFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXHUwMDNlc21hYyBpc1xuJiM0MzsgKlx0XHRcdHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxuJiM0MzsgKlx0XHRcdHBhcmVudCYjMzk7cy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcbiYjNDM7ICpcdFx0XHRpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsXG4mIzQzOyAqXHRcdFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXG4mIzQzOyAqXHRcdFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotXHUwMDNlaWZpbmRleFxuJiM0MzsgKlx0XHRcdGxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0XG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd25cbiYjNDM7ICpcdFx0XHRpZmluZGV4LiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXG4mIzQzOyAqXHRcdFx0YXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXBcbiYjNDM7ICpcdFx0XHR0aGUgaGVscGVyJiMzOTtzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHRcbiYjNDM7ICpcdFx0XHRzdGlsbCByZXBvcnRzIHRoZSByb3V0ZSBtdHUgaW4gKnBhcmFtcyotXHUwMDNlbXR1X3Jlc3VsdC5cbiYjNDM7ICpcdFx0XHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xuJiM0MzsgKlx0XHRcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxuJiM0MzsgKlx0XHRcdGRldmljZSBkaXJlY3RseS5cbiYjNDM7ICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKipcbiYjNDM7ICpcdFx0XHRUcmVhdCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0lcbiYjNDM7ICpcdFx0XHRhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzc1xuJiM0MzsgKlx0XHRcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcbiYjNDM7ICpcdFx0XHRvbiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4LiBUaGUgVklEIGlzIHRoZSBsb3cgMTIgYml0cyBvZlxuJiM0MzsgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0k7ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBtdXN0IGJlXG4mIzQzOyAqXHRcdFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxuJiM0MzsgKlx0XHRcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IGlzIGl0c2VsZiBhIFZMQU5cbiYjNDM7ICpcdFx0XHRkZXZpY2UsIGl0cyBpbm5lciAoUWluUSkgc3ViaW50ZXJmYWNlIGlzIG1hdGNoZWQ7IGZvciBhXG4mIzQzOyAqXHRcdFx0Ym9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXImIzM5O3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXG4mIzQzOyAqXHRcdFx0dGFnLCBhIGRvd24gZGV2aWNlLCBvciBvbmUgaW4gYW5vdGhlciBuYW1lc3BhY2UgcmV0dXJuc1xuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cbiYjNDM7ICpcdFx0XHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xuJiM0MzsgKlx0XHRcdGZsYWcgZm9yIHByaW9yaXR5LXRhZ2dlZCBmcmFtZXMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxuJiM0MzsgKlx0XHRcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cbiAgKlxuICAqXHRcdCpjdHgqIGlzIGVpdGhlciAqKnN0cnVjdCB4ZHBfbWQqKiBmb3IgWERQIHByb2dyYW1zIG9yXG4gICpcdFx0KipzdHJ1Y3Qgc2tfYnVmZioqIHRjIGNsc19hY3QgcHJvZ3JhbXMuXG5AQCAtNzMyNyw2ICYjNDM7NzM2Niw4IEBAIGVudW0ge1xuIFx0QlBGX0ZJQl9MT09LVVBfVEJJRCAgICA9ICgxVSBcdTAwM2NcdTAwM2MgMyksXG4gXHRCUEZfRklCX0xPT0tVUF9TUkMgICAgID0gKDFVIFx1MDAzY1x1MDAzYyA0KSxcbiBcdEJQRl9GSUJfTE9PS1VQX01BUksgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDUpLFxuJiM0MztcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXHUwMDNjXHUwMDNjIDYpLFxuJiM0MztcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXHUwMDNjXHUwMDNjIDcpLFxuIH07XG4gXG4gZW51bSB7XG5AQCAtNzM0MCw2ICYjNDM7NzM4MSw3IEBAIGVudW0ge1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCwgIC8qIGZyYWdtZW50YXRpb24gcmVxdWlyZWQgdG8gZndkICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX1NSQ19BRERSLCAgLyogZmFpbGVkIHRvIGRlcml2ZSBJUCBzcmMgYWRkciAqL1xuJiM0MztcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xuIH07XG4gXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbkBAIC03MzkzLDcgJiM0Mzs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0Lyogb3V0cHV0ICovXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxuJiM0MztcdFx0XHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxuJiM0MztcdFx0XHQgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGhcbiYjNDM7XHRcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXG4mIzQzO1x0XHRcdCAqIHRoZSBsb29rdXAgYnkuXG4mIzQzO1x0XHRcdCAqL1xuIFx0XHRcdF9fYmUxNlx0aF92bGFuX3Byb3RvO1xuIFx0XHRcdF9fYmUxNlx0aF92bGFuX1RDSTtcbiBcdFx0fTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCAyZTk2YjRiODQ3Y2UxMi4uMGVhMzYyZmE0Mjg3ZTMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC02MjAxLDIxICYjNDM7NjIwMSw2MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XG4gI2VuZGlmXG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4tc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLCB1MzIgbXR1KVxuJiM0MztzdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuJiM0MztcdFx0XHRcdCAgdTMyIGZsYWdzLCB1MzIgbXR1LCB1MzIgaW5faWZpbmRleClcbiB7XG4gXHRwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSA9IDA7XG4gXHRwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gMDtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKVxuJiM0MztcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIFx1MDAyNlx1MDAyNiBpc192bGFuX2RldihkZXYpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9wcml2KGRldiktXHUwMDNlcmVhbF9kZXY7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFpc192bGFuX2RldihyZWFsX2RldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbmV0X2VxKGRldl9uZXQocmVhbF9kZXYpLCBkZXZfbmV0KGRldikpKSB7XG4mIzQzO1x0XHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSB2bGFuX2Rldl92bGFuX3Byb3RvKGRldik7XG4mIzQzO1x0XHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModmxhbl9kZXZfdmxhbl9pZChkZXYpKTtcbiYjNDM7XHRcdFx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSByZWFsX2Rldi1cdTAwM2VpZmluZGV4O1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSBpbl9pZmluZGV4O1xuJiM0MztcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRpZiAobXR1KVxuIFx0XHRwYXJhbXMtXHUwMDNlbXR1X3Jlc3VsdCA9IG10dTsgLyogdW5pb24gd2l0aCB0b3RfbGVuICovXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zKVxuJiM0Mzt7XG4mIzQzO1x0X19iZTE2IHByb3RvID0gcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90bztcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7XG4mIzQzO1x0dTE2IHZpZDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSBcdTAwMjZcdTAwMjYgcHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMUFEKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcbiYjNDM7XHR2aWQgPSBudG9ocyhwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSkgXHUwMDI2IFZMQU5fVklEX01BU0s7XG4mIzQzO1x0dmxhbl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBwcm90bywgdmlkKTtcbiYjNDM7XHRpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgfHxcbiYjNDM7XHQgICAgIW5ldF9lcShkZXZfbmV0KHZsYW5fZGV2KSwgZGV2X25ldChkZXYpKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmxhbl9kZXY7XG4mIzQzO31cbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbiBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdFx0XHQgICAgICAgdTMyIGZsYWdzLCBib29sIGNoZWNrX210dSlcbiB7XG4mIzQzO1x0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDtcbiBcdHN0cnVjdCBmaWJfbmhfY29tbW9uICpuaGM7XG4gXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7XG5AQCAtNjIyOSw2ICYjNDM7NjI2OCwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdGlmICh1bmxpa2VseSghZGV2KSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4mIzQzO1x0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoZGV2KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcbiYjNDM7XHRcdGlmICghZGV2KVxuJiM0MztcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIHZlcmlmeSBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb24gdGhpcyBpbnRlcmZhY2UgKi9cbiBcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbiBcdGlmICh1bmxpa2VseSghaW5fZGV2IHx8ICFJTl9ERVZfRk9SV0FSRChpbl9kZXYpKSlcbkBAIC02MjM4LDcgJiM0Mzs2Mjg1LDExIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0XHRmbDQuZmxvd2k0X2lpZiA9IDE7XG4gXHRcdGZsNC5mbG93aTRfb2lmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHR9IGVsc2Uge1xuLVx0XHRmbDQuZmxvd2k0X2lpZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIGRldi1cdTAwM2VpZmluZGV4LCBub3QgcGFyYW1zLVx1MDAzZWlmaW5kZXg6IFZMQU5fSU5QVVQgbWF5IGhhdmVcbiYjNDM7XHRcdCAqIHJlc29sdmVkIGRldiB0byBhIHN1YmludGVyZmFjZSBhYm92ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Zmw0LmZsb3dpNF9paWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbiBcdFx0Zmw0LmZsb3dpNF9vaWYgPSAwO1xuIFx0fVxuIFx0Zmw0LmZsb3dpNF9kc2NwID0gaW5ldF9kc2ZpZWxkX3RvX2RzY3AocGFyYW1zLVx1MDAzZXRvcyk7XG5AQCAtNjM0Nyw3ICYjNDM7NjM5OCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0bWVtY3B5KHBhcmFtcy1cdTAwM2VzbWFjLCBkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbiBzZXRfZndkX3BhcmFtczpcbi1cdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKHBhcmFtcywgbXR1KTtcbiYjNDM7XHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTYzNTcsNiAmIzQzOzY0MDgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiB7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgKnNyYyA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVx1MDAzZWlwdjZfc3JjO1xuIFx0c3RydWN0IGluNl9hZGRyICpkc3QgPSAoc3RydWN0IGluNl9hZGRyICopIHBhcmFtcy1cdTAwM2VpcHY2X2RzdDtcbiYjNDM7XHR1MzIgaW5faWZpbmRleCA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0c3RydWN0IGZpYjZfcmVzdWx0IHJlcyA9IHt9O1xuIFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuQEAgLTYzNzQsNiAmIzQzOzY0MjYsMTQgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRpZiAodW5saWtlbHkoIWRldikpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xuJiM0MztcdFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGRldikpXG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKGRldik7XG4mIzQzO1x0XHRpZiAoIWRldilcbiYjNDM7XHRcdFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZGV2ID0gX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2KTtcbiBcdGlmICh1bmxpa2VseSghaWRldiB8fCAhUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLmZvcndhcmRpbmcpKSlcbiBcdFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVEO1xuQEAgLTYzODIsNyAmIzQzOzY0NDIsMTIgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRcdGZsNi5mbG93aTZfaWlmID0gMTtcbiBcdFx0b2lmID0gZmw2LmZsb3dpNl9vaWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdH0gZWxzZSB7XG4tXHRcdG9pZiA9IGZsNi5mbG93aTZfaWlmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZGV2LVx1MDAzZWlmaW5kZXgsIG5vdCBwYXJhbXMtXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxuJiM0MztcdFx0ICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRvaWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbiYjNDM7XHRcdGZsNi5mbG93aTZfaWlmID0gb2lmO1xuIFx0XHRmbDYuZmxvd2k2X29pZiA9IDA7XG4gXHRcdHN0cmljdCA9IFJUNl9MT09LVVBfRl9IQVNfU0FERFI7XG4gXHR9XG5AQCAtNjQ4NiwxMyAmIzQzOzY1NTEsMjYgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRtZW1jcHkocGFyYW1zLVx1MDAzZXNtYWMsIGRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuIHNldF9md2RfcGFyYW1zOlxuLVx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xuJiM0MztcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbiB9XG4gI2VuZGlmXG4gXG4gI2RlZmluZSBCUEZfRklCX0xPT0tVUF9NQVNLIChCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBcXFxuIFx0XHRcdCAgICAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBcXFxuLVx0XHRcdCAgICAgQlBGX0ZJQl9MT09LVVBfU1JDIHwgQlBGX0ZJQl9MT09LVVBfTUFSSylcbiYjNDM7XHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLIHwgXFxcbiYjNDM7XHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVClcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGJwZl9maWJfbG9va3VwX2ZsYWdzX29rKHUzMiBmbGFncylcbiYjNDM7e1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoZmxhZ3MgXHUwMDI2IChCUEZfRklCX0xPT0tVUF9UQklEIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVUKSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4gXG4gQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4gXHQgICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKiwgcGFyYW1zLCBpbnQsIHBsZW4sIHUzMiwgZmxhZ3MpXG5AQCAtNjUwMCw3ICYjNDM7NjU3OCw3IEBAIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxuIFx0aWYgKHBsZW4gXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxuJiM0MztcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHN3aXRjaCAocGFyYW1zLVx1MDAzZWZhbWlseSkge1xuQEAgLTY1MzgsNyAmIzQzOzY2MTYsMTAgQEAgQlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcdGlmIChwbGVuIFx1MDAzYyBzaXplb2YoKnBhcmFtcykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcbiYjNDM7XHRpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKHBhcmFtcy1cdTAwM2V0b3RfbGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0zNTMyLDYgJiM0MzszNTMyLDQ1IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHRcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVx1MDAzZW1hcmsgZm9yIHRoZSBmaWIgbG9va3VwLlxuICAqXHRcdFx0VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULFxuICAqXHRcdFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxuJiM0MzsgKlx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKlxuJiM0MzsgKlx0XHRcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcbiYjNDM7ICpcdFx0XHRwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXRcbiYjNDM7ICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0kgZnJvbVxuJiM0MzsgKlx0XHRcdHRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IHdpdGggdGhlXG4mIzQzOyAqXHRcdFx0cGFyZW50JiMzOTtzIGlmaW5kZXguICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklEXG4mIzQzOyAqXHRcdFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xuJiM0MzsgKlx0XHRcdHNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLVx1MDAzZXNtYWMgaXNcbiYjNDM7ICpcdFx0XHR0aGUgVkxBTiBkZXZpY2UmIzM5O3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcbiYjNDM7ICpcdFx0XHRwYXJlbnQmIzM5O3MuIE9ubHkgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaXMgcmVzb2x2ZWQ7IGlmIGl0XG4mIzQzOyAqXHRcdFx0aXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLFxuJiM0MzsgKlx0XHRcdHRoZSBlZ3Jlc3MgY2Fubm90IGJlIHJlZHVjZWQgdG8gYSBwaHlzaWNhbCBkZXZpY2UgcGx1c1xuJiM0MzsgKlx0XHRcdG9uZSB0YWcgYW5kIHRoZSBsb29rdXAgcmV0dXJuc1xuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLVx1MDAzZWlmaW5kZXhcbiYjNDM7ICpcdFx0XHRsZWZ0IGF0IHRoZSBpbnB1dC4gUmUtaXNzdWUgd2l0aG91dFxuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqIHRvIG9idGFpbiB0aGUgVkxBTiBkZXZpY2UmIzM5O3Mgb3duXG4mIzQzOyAqXHRcdFx0aWZpbmRleC4gVGhlIHN3YXAgYW5kIHRoZSB2bGFuIGZpZWxkc1xuJiM0MzsgKlx0XHRcdGFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwXG4mIzQzOyAqXHRcdFx0dGhlIGhlbHBlciYjMzk7cyBleGlzdGluZyBiZWhhdmlvdXIsIHNvIGEgZnJhZy1uZWVkZWQgcmVzdWx0XG4mIzQzOyAqXHRcdFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVx1MDAzZW10dV9yZXN1bHQuXG4mIzQzOyAqXHRcdFx0VGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXNcbiYjNDM7ICpcdFx0XHRyZWNlaXZlIC1FSU5WQUwgc2luY2UgdGhleSBjYW4gcmVkaXJlY3QgdG8gdGhlIFZMQU5cbiYjNDM7ICpcdFx0XHRkZXZpY2UgZGlyZWN0bHkuXG4mIzQzOyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXG4mIzQzOyAqXHRcdFx0VHJlYXQgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJXG4mIzQzOyAqXHRcdFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcbiYjNDM7ICpcdFx0XHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXG4mIzQzOyAqXHRcdFx0b24gKnBhcmFtcyotXHUwMDNlaWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2ZcbiYjNDM7ICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJOyAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxuJiM0MzsgKlx0XHRcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcbiYjNDM7ICpcdFx0XHQqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotXHUwMDNlaWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOXG4mIzQzOyAqXHRcdFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxuJiM0MzsgKlx0XHRcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJiMzOTtzIGlmaW5kZXguIEFuIHVubWF0Y2hlZFxuJiM0MzsgKlx0XHRcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXG4mIzQzOyAqXHRcdFx0QSBWSUQgb2YgMCBpcyBsb29rZWQgdXAgbGl0ZXJhbGx5LCBzbyBkbyBub3Qgc2V0IHRoaXNcbiYjNDM7ICpcdFx0XHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcbiYjNDM7ICpcdFx0XHQocmV0dXJucyAqKi1FSU5WQUwqKikuXG4gICpcbiAgKlx0XHQqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvclxuICAqXHRcdCoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLlxuQEAgLTczMjcsNiAmIzQzOzczNjYsOCBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDMpLFxuIFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNCksXG4gXHRCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVIFx1MDAzY1x1MDAzYyA1KSxcbiYjNDM7XHRCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVIFx1MDAzY1x1MDAzYyA2KSxcbiYjNDM7XHRCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUID0gKDFVIFx1MDAzY1x1MDAzYyA3KSxcbiB9O1xuIFxuIGVudW0ge1xuQEAgLTczNDAsNiAmIzQzOzczODEsNyBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cbiYjNDM7XHRCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi9cbiB9O1xuIFxuIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG5AQCAtNzM5Myw3ICYjNDM7NzQzNSwxMyBAQCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xuIFxuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdC8qIG91dHB1dCAqL1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcbiYjNDM7XHRcdFx0ICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWRcbiYjNDM7XHRcdFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXG4mIzQzO1x0XHRcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxuJiM0MztcdFx0XHQgKiB0aGUgbG9va3VwIGJ5LlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9wcm90bztcbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9UQ0k7XG4gXHRcdH07XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXG5pbmRleCBiZDc2NTg5NTgwMDQxZi4uMThiNmZkZWNhMzgyYTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIC8qIENvcHlyaWdodCAoYykgMjAyMyBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWYuaFx1MDAzZVxuIFxuQEAgLTIzLDYgJiM0MzsyNCw3IEBAXG4gI2RlZmluZSBJUFY0X1RCSURfQUREUlx0XHRcJiMzNDsxNzIuMC4wLjI1NFwmIzM0O1xuICNkZWZpbmUgSVBWNF9UQklEX05FVFx0XHRcJiMzNDsxNzIuMC4wLjBcJiMzNDtcbiAjZGVmaW5lIElQVjRfVEJJRF9EU1RcdFx0XCYjMzQ7MTcyLjAuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9UQklEX05PTkVJR0hfRFNUXHRcJiMzNDsxNzIuMC4wLjVcJiMzNDtcbiAjZGVmaW5lIElQVjZfVEJJRF9BRERSXHRcdFwmIzM0O2ZkMDA6OkZGRkZcJiMzNDtcbiAjZGVmaW5lIElQVjZfVEJJRF9ORVRcdFx0XCYjMzQ7ZmQwMDo6XCYjMzQ7XG4gI2RlZmluZSBJUFY2X1RCSURfRFNUXHRcdFwmIzM0O2ZkMDA6OjJcJiMzNDtcbkBAIC0zNyw2ICYjNDM7MzksNDEgQEBcbiAjZGVmaW5lIElQVjZfTE9DQUxcdFx0XCYjMzQ7ZmQwMTo6M1wmIzM0O1xuICNkZWZpbmUgSVBWNl9HVzFcdFx0XCYjMzQ7ZmQwMTo6MVwmIzM0O1xuICNkZWZpbmUgSVBWNl9HVzJcdFx0XCYjMzQ7ZmQwMTo6MlwmIzM0O1xuJiM0MzsjZGVmaW5lIFZMQU5fSURcdFx0XHQxMDBcbiYjNDM7I2RlZmluZSBWTEFOX0lGQUNFXHRcdFwmIzM0O3ZldGgxLjEwMFwmIzM0O1xuJiM0MzsjZGVmaW5lIFZMQU5fSURfRE9XTlx0XHQxMDJcbiYjNDM7I2RlZmluZSBWTEFOX0lGQUNFX0RPV05cdFx0XCYjMzQ7dmV0aDEuMTAyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUUlOUV9PVVRFUl9JRkFDRVx0XCYjMzQ7dmV0aDEuMjAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUUlOUV9JTk5FUl9JRkFDRVx0XCYjMzQ7dmV0aDEuMjAwLjMwMFwmIzM0O1xuJiM0MzsjZGVmaW5lIFZMQU5fVEFCTEVcdFx0XCYjMzQ7MzAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFJcdFwmIzM0OzEwLjUuMC4yNTRcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fRUdSRVNTX0RTVFx0XCYjMzQ7MTAuNS4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1FJTlFfRFNUXHRcdFwmIzM0OzEwLjcuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0RTVFx0XHRcJiMzNDsxMC42LjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9HV1x0XHRcJiMzNDsxMC41LjAuMVwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSXHRcJiMzNDtmZDAyOjoyNTRcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVFx0XCYjMzQ7ZmQwMjo6MlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9EU1RcdFx0XCYjMzQ7ZmQwMzo6MlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9HV1x0XHRcJiMzNDtmZDAyOjoxXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVkxBTl9WSURfVU5VU0VEXHRcdDk5OVxuJiM0MzsjZGVmaW5lIFZSRl9JRkFDRVx0XHRcJiMzNDt2cmYtYmx1ZVwmIzM0O1xuJiM0MzsjZGVmaW5lIFZSRl9UQUJMRVx0XHRcJiMzNDsxMDAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVlJGX1ZMQU5fSURcdFx0MTAxXG4mIzQzOyNkZWZpbmUgVlJGX1ZMQU5fSUZBQ0VcdFx0XCYjMzQ7dmV0aDEuMTAxXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUlx0XCYjMzQ7MTAuOC4wLjI1NFwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVlJGX0dXXHRcdFwmIzM0OzEwLjguMC4xXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WUkZfRFNUXHRcdFwmIzM0OzEwLjkuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVEJJRF9WTEFOX0lEXHRcdDUwXG4mIzQzOyNkZWZpbmUgVEJJRF9WTEFOX0lGQUNFXHRcdFwmIzM0O3ZldGgyLjUwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9UQklEX1ZMQU5fRFNUXHRcJiMzNDsxNzIuMi4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X0JPTkRfVkxBTl9EU1RcdFwmIzM0OzEwLjExLjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9NVFVfRFNUXHRcJiMzNDsxMC41LjkuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIFFJTlFfQURfVkxBTl9JRFx0XHQyMDBcbiYjNDM7I2RlZmluZSBRSU5RX0lOTkVSX1ZMQU5fSURcdDMwMFxuJiM0MzsjZGVmaW5lIEJPTkRfSUZBQ0VcdFx0XCYjMzQ7Ym9uZDk5XCYjMzQ7XG4mIzQzOyNkZWZpbmUgQk9ORF9QT1JUXHRcdFwmIzM0O3ZldGgzXCYjMzQ7XG4mIzQzOyNkZWZpbmUgQk9ORF9QT1JUX1BFRVJcdFx0XCYjMzQ7dmV0aDRcJiMzNDtcbiYjNDM7I2RlZmluZSBCT05EX1ZMQU5fSURcdFx0NTAwXG4gI2RlZmluZSBETUFDXHRcdFx0XCYjMzQ7MTE6MTE6MTE6MTE6MTE6MTFcJiMzNDtcbiAjZGVmaW5lIERNQUNfSU5JVCB7IDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIH1cbiAjZGVmaW5lIERNQUMyXHRcdFx0XCYjMzQ7MDE6MDE6MDE6MDE6MDE6MDFcJiMzNDtcbkBAIC01Miw2ICYjNDM7ODksMTcgQEAgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB7XG4gXHRfX3UzMiB0YmlkO1xuIFx0X191OCBkbWFjWzZdO1xuIFx0X191MzIgbWFyaztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGlucHV0IHRhZyB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ7IGV4cGVjdGVkIG91dHB1dCB0YWdcbiYjNDM7XHQgKiB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU4gKGNoZWNrZWQgd2hlbiBjaGVja192bGFuIGlzIHNldClcbiYjNDM7XHQgKi9cbiYjNDM7XHRfX3UxNiB2bGFuX3Byb3RvO1xuJiM0MztcdF9fdTE2IHZsYW5faWQ7XG4mIzQzO1x0Ym9vbCBjaGVja192bGFuO1xuJiM0MztcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX2RldjsgLyogZXhwZWN0ZWQgcGFyYW1zLVx1MDAzZWlmaW5kZXggYWZ0ZXIgbG9va3VwICovXG4mIzQzO1x0Y29uc3QgY2hhciAqaWlmO1x0ICAvKiBvdmVycmlkZSB0aGUgZGVmYXVsdCB2ZXRoMSBpbnB1dCBkZXZpY2UgKi9cbiYjNDM7XHRfX3UxNiB0b3RfbGVuO1x0XHQgIC8qIHRyaWdnZXJzIHRoZSBpbi1sb29rdXAgbXR1IGNoZWNrIHdoZW4gc2V0ICovXG4mIzQzO1x0X191MTYgZXhwZWN0ZWRfbXR1O1x0ICAvKiBleHBlY3RlZCBtdHVfcmVzdWx0ICh1bmlvbiB3aXRoIHRvdF9sZW4pICovXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuQEAgLTc5LDYgJiM0MzsxMjcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHtcbiBcdCAgLmRhZGRyID0gSVBWNF9UQklEX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsIC50YmlkID0gMTAwLFxuIFx0ICAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbiBlcnJvciB0aGF0IHJldHVybnMgYWZ0ZXIgdGhlIGVncmVzcyBkZXZpY2UgaXMgcmVzb2x2ZWQgbXVzdFxuJiM0MztcdCAqIHJlcG9ydCB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXQuIFRoaXMgcm91dGVzIGZyb20gaW5wdXRcbiYjNDM7XHQgKiB2ZXRoMSB2aWEgdmV0aDIgKHRhYmxlIDEwMCkgdG8gYSBkc3Qgd2l0aCBubyBuZWlnaGJvdXIsIHNvXG4mIzQzO1x0ICogaW5wdXQgIT0gZWdyZXNzLCBwaW5uaW5nIE5PX05FSUdIIHRvIHRoZSBlZ3Jlc3MgZGV2aWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IE5PX05FSUdIIHJlcG9ydHMgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0XCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9UQklEX05PTkVJR0hfRFNULFxuJiM0MztcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDJcJiMzNDssIH0sXG4gXHR7IC5kZXNjID0gXCYjMzQ7SVB2NiBUQklEIGxvb2t1cCBmYWlsdXJlXCYjMzQ7LFxuIFx0ICAuZGFkZHIgPSBJUFY2X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuQEAgLTE0Miw2ICYjNDM7MjAxLDIxOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuIFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNl9HVzEsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuIFx0ICAubWFyayA9IE1BUkssIH0sXG4mIzQzO1x0LyogdmxhbiBlZ3Jlc3MgcmVzb2x1dGlvbiAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW52YXJpYW50IHRoZSBWTEFOLWVncmVzcyBhcm1zIGpvaW50bHkgZW5mb3JjZTogYVxuJiM0MztcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gU1VDQ0VTUyBhbHdheXMgY2FycmllcyBhIHBoeXNpY2FsLFxuJiM0MztcdCAqIHhtaXQtY2FwYWJsZSBpZmluZGV4OyBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlXG4mIzQzO1x0ICogaWZpbmRleC4gUmVkdWNpYmxlIGFybXMgcGluIGlmaW5kZXggPT0gdGhlIHBoeXNpY2FsIHBhcmVudDsgdGhlXG4mIzQzO1x0ICogUWluUSBhbmQgZm9yZWlnbi1uZXRucyBhcm1zIHBpbiBWTEFOX0ZBSUxVUkUgd2l0aCBwYXJhbXMtXHUwMDNlaWZpbmRleFxuJiM0MztcdCAqIGxlZnQgYXQgdGhlIGlucHV0LCBzbyBhIHJlZ3Jlc3Npb24gdG8gYmVzdC1lZmZvcnQgKFNVQ0NFU1MgJiM0MzsgdGhlXG4mIzQzO1x0ICogVkxBTiBpZmluZGV4KSBmYWlscyBvbmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc2luZ2xlIFZMQU5cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogc2tiIHBhdGggd2l0aG91dCB0b3RfbGVuOiBtdHVfcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSYjMzk7cyBtdHVcbiYjNDM7XHQgKiAoMTQwMCksIG5vdCB0aGUgcGFyZW50JiMzOTtzICgxNTAwKVxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBza2ItcGF0aCBtdHUgaXMgdGhlIFZMQU4gZGV2aWNlJiMzOTtzIHdpdGhvdXQgdGhlIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTlwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBRaW5RIGVncmVzcyB3aXRob3V0IHRoZSBmbGFnIChlc2NhcGUgaGF0Y2gpXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9RSU5RX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgbmVpZ2hib3VyIG9uIHRoZSBWTEFOIGRldmljZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4sXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MgaW4gT1VUUFVUIG1vZGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5paWYgPSBWTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuJiM0MztcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcyBvdmVyIGEgYm9uZFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfQk9ORF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBCT05EX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVEJJRF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklEIHxcbiYjNDM7XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC50YmlkID0gMTAwLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgyXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFRCSURfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc3VjY2VzcyB3cml0ZXMgbXR1X3Jlc3VsdCB3aXRoIHRoZSBzd2FwXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAudG90X2xlbiA9IDUwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELFxuJiM0MztcdCAgLnRvdF9sZW4gPSAxNDAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuJiM0MztcdC8qIHZsYW4gdGFnIGFzIGxvb2t1cCBpbnB1dCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIG5vIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNl9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0IGFuZCBlZ3Jlc3MgY29tYmluZWRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LFxuJiM0MztcdCAgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHxcbiYjNDM7XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIG5laWdoYm91ciByZXNvbHZlZCBvbiB0aGUgcm91dGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQyLCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIHN1YmludGVyZmFjZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NSQyB8XG4mIzQzO1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFZSRjogdGhlIHJlc29sdmVkIHN1YmludGVyZmFjZSBpcyBlbnNsYXZlZCwgc28gdGhlIGwzbWRldiBydWxlXG4mIzQzO1x0ICogKGZ1bGwgbG9va3VwKSBhbmQgbDNtZGV2X2ZpYl90YWJsZV9yY3UoKSAoRElSRUNUKSBtdXN0IHNlbGVjdFxuJiM0MztcdCAqIHRoZSBWUkYgdGFibGUgZnJvbSB0aGUgcmVzb2x2ZWQgaW5ncmVzc1xuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIFZSRiBzdWJpbnRlcmZhY2UsIG5vIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9HVzEsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBWUkYgdGFibGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgRElSRUNUIHVzZXMgVlJGIHRhYmxlIGZyb20gcmVzb2x2ZWQgaW5ncmVzc1wmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVlJGX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfFxuJiM0MztcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZSRl9WTEFOX0lELCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbFxuJiM0MztcdCAqIG5hbWVzIHRoZSBwaHlzaWNhbCBkZXZpY2UgYW5kIHRoZSBpbnB1dCB0YWcgYnl0ZXMgc3Vydml2ZVxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBzdWJpbnRlcmZhY2UgZG93blwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lEX0RPV04sIH0sXG4mIzQzO1x0LypcbiYjNDM7XHQgKiB0aGUgcmVzb2x2ZXIgcnVucyBiZWZvcmUgdGhlIGZvcndhcmRpbmcgY2hlY2ssIHNvIG9uIGRldmljZXNcbiYjNDM7XHQgKiB3aXRoIGZvcndhcmRpbmcgb2ZmIEZXRF9ESVNBQkxFRCAobm90IE5PVF9GV0RFRCkgcHJvdmVzIHRoZSB0YWdcbiYjNDM7XHQgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3NcbiYjNDM7XHQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCA4MDIuMWFkIHRhZ1wmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMUFELCAudmxhbl9pZCA9IFFJTlFfQURfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW5uZXIgUWluUSBkZXZpY2UgZnJvbSBWTEFOIGlmaW5kZXhcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXG4mIzQzO1x0ICAuaWlmID0gUUlOUV9PVVRFUl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogYm9uZGluZzogdGhlIFZMQU5zIGxpdmUgb24gdGhlIG1hc3RlciwgYXMgb24gcmVjZWl2ZSwgd2hlcmUgdGhlXG4mIzQzO1x0ICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydFxuJiM0MztcdCAqIGlmaW5kZXggZG9lcyBub3QgbWF0Y2ggKHBvcnRzIGNhcnJ5IHZpZCBzdGF0ZSBidXQgbm8gVkxBTiBkZXZzKVxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBvbiBib25kIG1hc3RlciByZXNvbHZlc1wmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbiYjNDM7XHQgIC5paWYgPSBCT05EX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgcG9ydCBkb2VzIG5vdCBtYXRjaFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDAsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjYgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O3Vua25vd24gZmxhZyBiaXQgcmVqZWN0ZWRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSAoMSBcdTAwM2NcdTAwM2MgMTQpIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggVEJJRFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBPVVRQVVRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVULFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuIH07XG4gXG4gc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxuQEAgLTIwNCw2ICYjNDM7NDc1LDEwNSBAQCBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXG4gXHRTWVMoZmFpbCwgXCYjMzQ7aXAgcnVsZSBhZGQgcHJpbyAyIGZ3bWFyayAlZCBsb29rdXAgJXNcJiMzNDssIE1BUkssIE1BUktfVEFCTEUpO1xuIFx0U1lTKGZhaWwsIFwmIzM0O2lwIC02IHJ1bGUgYWRkIHByaW8gMiBmd21hcmsgJWQgbG9va3VwICVzXCYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHVwIGZvciB2bGFuIHRlc3RzOiBhIHN1YmludGVyZmFjZSBmb3IgZWdyZXNzIHJlc29sdXRpb24gYW5kXG4mIzQzO1x0ICogdGFnLWFzLWlucHV0LCBhIFFpblEgc3RhY2ssIGFuZCBhbiBpaWYgcnVsZSBzbyB0aGUgaW5wdXQgdGVzdHNcbiYjNDM7XHQgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9JRkFDRSwgVkxBTl9JRCk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgVkxBTl9JRkFDRSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBsb3dlciB0aGFuIHRoZSB2ZXRoMSBwYXJlbnQgKDE1MDApOiB0aGUgc2tiLXBhdGggbXR1IGNoZWNrIHVzZXMgdGhlXG4mIzQzO1x0ICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUgd2l0aCBvclxuJiM0MztcdCAqIHdpdGhvdXQgdGhlIGVncmVzcyBzd2FwLCB3aGljaCB0d28gYXJtcyBiZWxvdyBwaW5cbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIG10dSAxNDAwXCYjMzQ7LCBWTEFOX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCYjMzQ7LCBJUFY0X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZFwmIzM0OywgSVBWNl9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWxcbiYjNDM7XHQgKiBpbmdyZXNzIHRyZWF0cyBhIGZyYW1lIGFycml2aW5nIG9uIGEgZG93biBWTEFOIGRldmljZSAoZHJvcClcbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9JRkFDRV9ET1dOLCBWTEFOX0lEX0RPV04pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB3cml0ZV9zeXNjdGwoXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvXCYjMzQ7IFZMQU5fSUZBQ0UgXCYjMzQ7L2ZvcndhcmRpbmdcJiMzNDssIFwmIzM0OzFcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXCYjMzQ7IFZMQU5fSUZBQ0UgXCYjMzQ7LmZvcndhcmRpbmcpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL1wmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy9mb3J3YXJkaW5nXCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChuZXQuaXB2Ni5jb25mLlwmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy5mb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIHByb3RvIDgwMi4xYWQgaWQgMjAwXCYjMzQ7LFxuJiM0MztcdCAgICBRSU5RX09VVEVSX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzIHR5cGUgdmxhbiBpZCAzMDBcJiMzNDssXG4mIzQzO1x0ICAgIFFJTlFfT1VURVJfSUZBQ0UsIFFJTlFfSU5ORVJfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFFJTlFfT1VURVJfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFFJTlFfSU5ORVJfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzXCYjMzQ7LCBJUFY0X1FJTlFfRFNULCBRSU5RX0lOTkVSX0lGQUNFKTtcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcJiMzNDssIElQVjRfVkxBTl9EU1QsIElQVjRfR1cxKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1wmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9UQUJMRSwgSVBWNF9WTEFOX0RTVCwgSVBWNF9WTEFOX0dXKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcJiMzNDssIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCAtNiByb3V0ZSBhZGQgJXMvMTI4IHZpYSAlc1wmIzM0OywgSVBWNl9WTEFOX0RTVCwgSVBWNl9HVzEpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlc1wmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgLTYgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcJiMzNDssIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xuJiM0MztcbiYjNDM7XHQvKiBhIGJvbmQgd2l0aCBvbmUgcG9ydCBhbmQgYSBWTEFOIG9uIHRoZSBib25kICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgYm9uZFwmIzM0OywgQk9ORF9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgdmV0aCBwZWVyIG5hbWUgJXNcJiMzNDssIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcJiMzNDssIEJPTkRfUE9SVCwgQk9ORF9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgQk9ORF9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgQk9ORF9QT1JUKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzLiVkIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgQk9ORF9JRkFDRSwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lELCBCT05EX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXBcJiMzNDssIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMuJWRcJiMzNDssXG4mIzQzO1x0ICAgIElQVjRfQk9ORF9WTEFOX0RTVCwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBhIFZSRiB3aXRoIGl0cyBvd24gZGVkaWNhdGVkIHN1YmludGVyZmFjZSAodGhlIGlpZiBydWxlcyBhYm92ZVxuJiM0MztcdCAqIG11c3Qgbm90IHNlZSBpdCksIGZvciB0aGUgdGFibGUtc2VsZWN0aW9uLWJ5LWluZ3Jlc3MgY2FzZXNcbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgJXMgdHlwZSB2cmYgdGFibGUgJXNcJiMzNDssIFZSRl9JRkFDRSwgVlJGX1RBQkxFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwXCYjMzQ7LCBWUkZfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXCYjMzQ7LFxuJiM0MztcdCAgICBWUkZfVkxBTl9JRkFDRSwgVlJGX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcJiMzNDssIFZSRl9WTEFOX0lGQUNFLCBWUkZfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFZSRl9WTEFOX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCYjMzQ7LCBJUFY0X1ZSRl9JRkFDRV9BRERSLCBWUkZfVkxBTl9JRkFDRSk7XG4mIzQzO1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1wmIzM0OyBWUkZfVkxBTl9JRkFDRSBcJiMzNDsvZm9yd2FyZGluZ1wmIzM0OywgXCYjMzQ7MVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi5cJiMzNDsgVlJGX1ZMQU5fSUZBQ0UgXCYjMzQ7LmZvcndhcmRpbmcpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIHZpYSAlc1wmIzM0OywgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXNcJiMzNDssXG4mIzQzO1x0ICAgIFZSRl9UQUJMRSwgSVBWNF9WUkZfRFNULCBJUFY0X1ZSRl9HVyk7XG4mIzQzO1xuJiM0MztcdC8qIG5laWdoYm91cnMgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGZvciB0aGUgbm9uLVNLSVBfTkVJR0ggY2FzZXMgKi9cbiYjNDM7XHRlcnIgPSB3cml0ZV9zeXNjdGwoXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L25laWdoL1wmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy9nY19zdGFsZV90aW1lXCYjMzQ7LCBcJiMzNDs5MDBcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0Lm5laWdoLlwmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy5nY19zdGFsZV90aW1lKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVwmIzM0OyxcbiYjNDM7XHQgICAgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFZMQU5fSUZBQ0UsIERNQUMpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGVcJiMzNDssXG4mIzQzO1x0ICAgIElQVjRfVkxBTl9HVywgVkxBTl9JRkFDRSwgRE1BQzIpO1xuJiM0MztcbiYjNDM7XHQvKiBhIFZMQU4gb24gdmV0aDIgd2l0aCBhIHJvdXRlIGluIHRoZSB0YmlkIHRlc3QgdGFibGUgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMiBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVEJJRF9WTEFOX0lGQUNFLCBUQklEX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFRCSURfVkxBTl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAxMDAgJXMvMzIgZGV2ICVzXCYjMzQ7LFxuJiM0MztcdCAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7XG4mIzQzO1xuJiM0MztcdC8qIGEgbG9ja2VkLW10dSByb3V0ZSB2aWEgdGhlIHN1YmludGVyZmFjZSBmb3IgdGhlIEZSQUdfTkVFREVEIGNhc2UgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwXCYjMzQ7LFxuJiM0MztcdCAgICBJUFY0X1ZMQU5fTVRVX0RTVCwgVkxBTl9JRkFDRSk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gZmFpbDpcbiBcdHJldHVybiAtMTtcbkBAIC0yMTgsOSAmIzQzOzU4OCwxNiBAQCBzdGF0aWMgaW50IHNldF9sb29rdXBfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0bWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTtcbiBcbiBcdHBhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuLVx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSBpZmluZGV4O1xuJiM0MztcdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gdGVzdC1cdTAwM2VpaWYgPyBpZl9uYW1ldG9pbmRleCh0ZXN0LVx1MDAzZWlpZikgOiBpZmluZGV4O1xuIFx0cGFyYW1zLVx1MDAzZXRiaWQgPSB0ZXN0LVx1MDAzZXRiaWQ7XG4gXHRwYXJhbXMtXHUwMDNlbWFyayA9IHRlc3QtXHUwMDNlbWFyaztcbiYjNDM7XHRwYXJhbXMtXHUwMDNldG90X2xlbiA9IHRlc3QtXHUwMDNldG90X2xlbjtcbiYjNDM7XG4mIzQzO1x0LyogaF92bGFuX3Byb3RvL2hfdmxhbl9UQ0kgdW5pb24gd2l0aCB0YmlkICovXG4mIzQzO1x0aWYgKHRlc3QtXHUwMDNlbG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4mIzQzO1x0XHRwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnModGVzdC1cdTAwM2V2bGFuX3Byb3RvKTtcbiYjNDM7XHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModGVzdC1cdTAwM2V2bGFuX2lkKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCB0ZXN0LVx1MDAzZWRhZGRyLCBwYXJhbXMtXHUwMDNlaXB2Nl9kc3QpID09IDEpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuQEAgLTI5OCw3ICYjNDM7Njc1LDcgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbiBcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuIFx0c3RydWN0IGZpYl9sb29rdXAgKnNrZWw7XG4tXHRpbnQgcHJvZ19mZCwgZXJyLCByZXQsIGk7XG4mIzQzO1x0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCByZXQsIGk7XG4gXG4gXHQvKiBUaGUgdGVzdCBkb2VzIG5vdCB1c2UgdGhlIHNrYi1cdTAwM2VkYXRhLCBzb1xuIFx0ICogdXNlIHBrdF92NiBmb3IgYm90aCB2NiBhbmQgdjQgdGVzdC5cbkBAIC0zMDksMTEgJiM0Mzs2ODYsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0ICAgIC5jdHhfaW4gPSBcdTAwMjZza2IsXG4gXHRcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcbiBcdCk7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxuJiM0MztcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuJiM0MztcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbiYjNDM7XHQpO1xuIFxuIFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcbiBcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsIG9wZW5fYW5kX2xvYWRcJiMzNDspKVxuIFx0XHRyZXR1cm47XG4gXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cCk7XG4mIzQzO1x0eGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF94ZHApO1xuIFxuIFx0U1lTKGZhaWwsIFwmIzM0O2lwIG5ldG5zIGFkZCAlc1wmIzM0OywgTlNfVEVTVCk7XG4gXG5AQCAtMzQzLDYgJiM0Mzs3MjUsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfcHJvZ190ZXN0X3J1bl9vcHRzXCYjMzQ7KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIGlzIFhEUC1vbmx5OyB0aGUgdGMgaGVscGVyIHJlamVjdHMgaXQuXG4mIzQzO1x0XHQgKiBUaGVzZSBjYXNlcyBhcmUgZXhlcmNpc2VkIG9uIHRoZSBYRFAgcGF0aCBiZWxvdy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikge1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt0YyByZWplY3RzIEJQRl9GSUJfTE9PS1VQX1ZMQU5cJiMzNDspO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxuIFx0XHRcdCAgXCYjMzQ7ZmliX2xvb2t1cF9yZXRcJiMzNDspO1xuIFxuQEAgLTM1Miw2ICYjNDM7NzQ0LDIxIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpXG4gXHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuIFxuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbiYjNDM7XHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksIFwmIzM0O2lmaW5kZXhcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUpXG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcbiYjNDM7XHRcdFx0XHQgIFwmIzM0O210dV9yZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcJiMzNDtoX3ZsYW5fcHJvdG9cJiMzNDspO1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLFxuJiM0MztcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFwmIzM0O2hfdmxhbl9UQ0lcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiBcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtkbWFjIG5vdCBtYXRjaFwmIzM0OykpIHtcbiBcdFx0XHRjaGFyIGV4cGVjdGVkWzE4XSwgYWN0dWFsWzE4XTtcbkBAIC0zNjEsMTUgJiM0Mzs3NjgsMzEyIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdFx0cHJpbnRmKFwmIzM0O2RtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzIFwmIzM0OywgZXhwZWN0ZWQsIGFjdHVhbCk7XG4gXHRcdH1cbiBcbi1cdFx0Ly8gZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC5cbi1cdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aFxuJiM0MztcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiB0aGUgdW5pb24gaG9sZHMgdGhlIHBhY2tlZCB2bGFuXG4mIzQzO1x0XHQgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikpIHtcbiBcdFx0XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zLnRiaWQsIDAsXG4gXHRcdFx0XHRcdFwmIzM0O2V4cGVjdGVkIGZpYl9wYXJhbXMudGJpZCB0byBiZSB6ZXJvXCYjMzQ7KSlcbiBcdFx0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmUtcnVuIHRoZSBjYXNlcyB0aHJvdWdoIGJwZl94ZHBfZmliX2xvb2t1cCgpLiB0ZXN0X3J1biB1c2VzIHRoZVxuJiM0MztcdCAqIGN1cnJlbnQgbmV0bnMmIzM5OyBsb29wYmFjayBmb3IgY3R4LVx1MDAzZXJ4cS1cdTAwM2VkZXYsIHNvIGRldl9uZXQoKSBpcyBOU19URVNUXG4mIzQzO1x0ICogYW5kIHRoZSBsb29rdXAgcnVucyBhZ2FpbnN0IGl0cyBGSUIuIFRoZSBwYXRoLWluZGVwZW5kZW50IHJlc3VsdHNcbiYjNDM7XHQgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYlxuJiM0MztcdCAqIHBhdGg7IHRoZSBuby10b3RfbGVuIG10dV9yZXN1bHQgaXMgc2tiLXNwZWNpZmljIGFuZCBub3QgcmVjaGVja2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHNldF9sb29rdXBfcGFyYW1zKGZpYl9wYXJhbXMsIFx1MDAyNnRlc3RzW2ldLCBza2IuaWZpbmRleCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XG4mIzQzO1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFx1MDAyNnhkcF9vcHRzKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7eGRwIHRlc3RfcnVuXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3hkcCBmaWJfbG9va3VwX3JldFwmIzM0OykpXG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDsoeGRwKSAlc1xcblwmIzM0OywgdGVzdHNbaV0uZGVzYyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbiYjNDM7XHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt4ZHAgaWZpbmRleFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcbiYjNDM7XHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcJiMzNDt4ZHAgaF92bGFuX3Byb3RvXCYjMzQ7KTtcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5faWQpLCBcJiMzNDt4ZHAgaF92bGFuX1RDSVwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShyZXQsIDAsIFwmIzM0O3hkcCBkbWFjXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogbXR1X3Jlc3VsdCBmcm9tIGEgdG90X2xlbiBsb29rdXAgaXMgdGhlIHJvdXRlIG10dSBhbmQgaXNcbiYjNDM7XHRcdCAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtXHUwMDNlbXR1IGFuZCBpc1xuJiM0MztcdFx0ICogc2tiLW9ubHksIHNvIGdhdGUgb24gdG90X2xlblxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1IFx1MDAyNlx1MDAyNiB0ZXN0c1tpXS50b3RfbGVuKVxuJiM0MztcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VtdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt4ZHAgbXR1X3Jlc3VsdFwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZmFpbDpcbiYjNDM7XHRpZiAobnN0b2tlbilcbiYjNDM7XHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuJiM0MztcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsIFwmIzM0OyBOU19URVNUKTtcbiYjNDM7XHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5TX1ZMQU5fQVx0XCYjMzQ7ZmliX2xvb2t1cF92bGFuX25zX2FcJiMzNDtcbiYjNDM7I2RlZmluZSBOU19WTEFOX0JcdFwmIzM0O2ZpYl9sb29rdXBfdmxhbl9uc19iXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIFZMQU4gZGV2aWNlIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIG5ldG5zIHdoaWxlIHN0YXlpbmcgcmVnaXN0ZXJlZFxuJiM0MzsgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZVxuJiM0MzsgKiBlZ3Jlc3MgZmxhZyBtdXN0IG5vdCBwdWJsaXNoIHRoZSBmb3JlaWduIHBhcmVudCYjMzk7cyBpZmluZGV4LCBhbmQgdGhlXG4mIzQzOyAqIGlucHV0IGZsYWcgbXVzdCBmYWlsIGNsb3NlZCByYXRoZXIgdGhhbiB1c2UgYSBmb3JlaWduIGluZ3Jlc3MuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX25ldG5zKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4mIzQzO1x0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuJiM0MztcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHBhcmVudF9pZHgsIHZsYW5faWR4O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgcnVuX29wdHMsXG4mIzQzO1x0XHQgICAgLmRhdGFfaW4gPSBcdTAwMjZwa3RfdjYsXG4mIzQzO1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuJiM0MztcdFx0ICAgIC5jdHhfaW4gPSBcdTAwMjZza2IsXG4mIzQzO1x0XHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXG4mIzQzO1x0KTtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgeGRwX29wdHMsXG4mIzQzO1x0XHQgICAgLmRhdGFfaW4gPSBcdTAwMjZwa3RfdjYsXG4mIzQzO1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xuJiM0MztcdHhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcbiYjNDM7XHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIG5ldG5zIGFkZCAlc1wmIzM0OywgTlNfVkxBTl9BKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBOU19WTEFOX0IpO1xuJiM0MztcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0EpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcJiMzNDtvcGVuX25ldG5zKGEpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIHZldGg3IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDhcJiMzNDspO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgdmV0aDcgdXBcJiMzNDspO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGg3IG5hbWUgdmV0aDcuNjYgdHlwZSB2bGFuIGlkIDY2XCYjMzQ7KTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgdmV0aDcuNjYgbmV0bnMgJXNcJiMzNDssIE5TX1ZMQU5fQik7XG4mIzQzO1xuJiM0MztcdHBhcmVudF9pZHggPSBpZl9uYW1ldG9pbmRleChcJiMzNDt2ZXRoN1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfTkVRKHBhcmVudF9pZHgsIDAsIFwmIzM0O2lmX25hbWV0b2luZGV4KHZldGg3KVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogaW5wdXQ6IHRoZSBtb3ZlZCBkZXZpY2UgaXMgc3RpbGwgaW4gdmV0aDcmIzM5O3MgVkxBTiBncm91cCwgYnV0IGl0XG4mIzQzO1x0ICogbGl2ZXMgaW4gYW5vdGhlciBuZXRucywgc28gdGhlIGxvb2t1cCBtdXN0IGZhaWwgY2xvc2VkXG4mIzQzO1x0ICovXG4mIzQzO1x0c2tiLmlmaW5kZXggPSBwYXJlbnRfaWR4O1xuJiM0MztcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHBhcmVudF9pZHg7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnMoNjYpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBcJiMzNDsxMC42Ni4wLjJcJiMzNDssIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihkc3QpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHxcbiYjNDM7XHRcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcdTAwMjZydW5fb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bihpbnB1dClcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4mIzQzO1x0XHQgIFwmIzM0O2lucHV0IGFjcm9zcyBuZXRucyBmYWlscyBjbG9zZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsIHBhcmVudF9pZHgsIFwmIzM0O2lmaW5kZXggdW50b3VjaGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLCBodG9ucyg2NiksIFwmIzM0O3RhZyB1bnRvdWNoZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcJiMzNDtvcGVuX25ldG5zKGIpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBlZ3Jlc3M6IHRoZSBmaWIgcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSBoZXJlLCBidXQgaXRzIHBhcmVudFxuJiM0MztcdCAqIGlzIGluIHRoZSBvdGhlciBuZXRucywgc28gdGhlIHN3YXAgbXVzdCBub3QgaGFwcGVuXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiB2ZXRoNy42NiB1cFwmIzM0Oyk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkIDEwLjY2LjAuMS8yNCBkZXYgdmV0aDcuNjZcJiMzNDspO1xuJiM0MztcdGVyciA9IHdyaXRlX3N5c2N0bChcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNy42Ni9mb3J3YXJkaW5nXCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChmb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHZsYW5faWR4ID0gaWZfbmFtZXRvaW5kZXgoXCYjMzQ7dmV0aDcuNjZcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX05FUSh2bGFuX2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gdmxhbl9pZHg7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwmIzM0OzEwLjY2LjAuMlwmIzM0OywgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4mIzQzO1x0XHQgICAgICAgMSwgXCYjMzQ7aW5ldF9wdG9uKGRzdClcJiMzNDspIHx8XG4mIzQzO1x0ICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwmIzM0OzEwLjY2LjAuMVwmIzM0OywgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X3NyYyksXG4mIzQzO1x0XHQgICAgICAgMSwgXCYjMzQ7aW5ldF9wdG9uKHNyYylcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuJiM0MztcdFx0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgXHUwMDI2eGRwX29wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9ydW4oZWdyZXNzKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0LCBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSxcbiYjNDM7XHRcdCAgXCYjMzQ7ZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4LCB2bGFuX2lkeCxcbiYjNDM7XHRcdCAgXCYjMzQ7Zm9yZWlnbiBwYXJlbnQgbm90IHB1Ymxpc2hlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSwgMCwgXCYjMzQ7dmxhbiBmaWVsZHMgemVyb1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdGlmIChuc3Rva2VuKVxuJiM0MztcdFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgXCYjMzQ7IE5TX1ZMQU5fQSk7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgXCYjMzQ7IE5TX1ZMQU5fQik7XG4mIzQzO1x0ZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBSRURJUkVDVF9OUEtUUyAxMDAwXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgZWdyZXNzIGZsYWcgZXhpc3RzIHNvIGFuIFhEUCBwcm9ncmFtIGNhbiByZWRpcmVjdCB0byB0aGUgcGh5c2ljYWxcbiYjNDM7ICogcGFyZW50LiBBIHJlZGlyZWN0IHRoYXQgbGFuZHMgb24gYSBWTEFOIGRldmljZSBpcyBkcm9wcGVkIGF0XG4mIzQzOyAqIHhkcF9kb19mbHVzaCgpLCBiZWNhdXNlIGEgVkxBTiBkZXZpY2UgaGFzIG5vIG5kb194ZHBfeG1pdC4gRHJpdmUgcmVhbFxuJiM0MzsgKiBmcmFtZXMgd2l0aCBCUEZfRl9URVNUX1hEUF9MSVZFX0ZSQU1FUywgd2hpY2ggcnVucyB0aGUgbmF0aXZlXG4mIzQzOyAqIHhkcF9kb19yZWRpcmVjdCgpICYjNDM7IHhkcF9kb19mbHVzaCgpIHBhdGg6IGEgcmVkdWNpYmxlIFZMQU4gZWdyZXNzXG4mIzQzOyAqIHJlc29sdmVzIHRvIHZldGgxIGFuZCBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIsIHdoaWxlIGEgUWluUVxuJiM0MzsgKiBlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kIGlzIHBhc3NlZCB0byB0aGUgc3RhY2sgaW5zdGVhZCBvZlxuJiM0MzsgKiByZWRpcmVjdGVkIHRvIGEgZGV2aWNlIHRoYXQgd291bGQgc2lsZW50bHkgZHJvcCBpdC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fcmVkaXJlY3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCByZWRpcmVjdF9mZCwgZXJyLCB2ZXRoMV9pZHgsIHZldGgyX2lkeCA9IC0xO1xuJiM0MztcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcbiYjNDM7XHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMO1xuJiM0MztcdGJvb2wgeGRwX2F0dGFjaGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBsZl9vcHRzLFxuJiM0MztcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y0LFxuJiM0MztcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcbiYjNDM7XHRcdCAgICAuZmxhZ3MgPSBCUEZfRl9URVNUX1hEUF9MSVZFX0ZSQU1FUyxcbiYjNDM7XHRcdCAgICAucmVwZWF0ID0gUkVESVJFQ1RfTlBLVFMsXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRyZWRpcmVjdF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfcmVkaXJlY3QpO1xuJiM0MztcdGZpYl9wYXJhbXMgPSBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zO1xuJiM0MztcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBOU19URVNUKTtcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19URVNUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCYjMzQ7b3Blbl9uZXRuc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0aWYgKHNldHVwX25ldG5zKCkpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KFwmIzM0O3ZldGgxXCYjMzQ7KTtcbiYjNDM7XHR2ZXRoMl9pZHggPSBpZl9uYW1ldG9pbmRleChcJiMzNDt2ZXRoMlwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDEpXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsIFwmIzM0O2lmX25hbWV0b2luZGV4KHZldGgyKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSByZWRpcmVjdCB0byB2ZXRoMSBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIuIHZldGhfeGRwX3htaXQoKVxuJiM0MztcdCAqIG9ubHkgYWNjZXB0cyB0aGUgZnJhbWUgaWYgdmV0aDImIzM5O3MgTkFQSSBpcyB1cCwgd2hpY2ggb24gdmV0aCBtZWFuc1xuJiM0MztcdCAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBicGZfeGRwX2F0dGFjaCh2ZXRoMl9pZHgsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9jb3VudCksXG4mIzQzO1x0XHRcdCAgICAgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2F0dGFjaCB4ZHBfY291bnQgb24gdmV0aDJcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdHhkcF9hdHRhY2hlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIHJlZHVjaWJsZSBWTEFOIGVncmVzczogcmVzb2x2ZXMgdG8gdGhlIHBoeXNpY2FsIHBhcmVudCB2ZXRoMSAqL1xuJiM0MztcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24oc3JjKVwmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihyZWR1Y2libGUgZHN0KVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHJlZGlyZWN0X2ZkLCBcdTAwMjZsZl9vcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfcnVuKHJlZHVjaWJsZSBlZ3Jlc3MpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCwgUkVESVJFQ1RfTlBLVFMsIFwmIzM0O3JlZHVjaWJsZSBlZ3Jlc3MgcmVkaXJlY3RlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBhc3NlZCwgMCwgXCYjMzQ7cmVkdWNpYmxlIGVncmVzcyBub3QgcGFzc2VkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZGVsaXZlcmVkLCAwLCBcJiMzNDtyZWR1Y2libGUgZWdyZXNzIGRlbGl2ZXJlZCB0byB2ZXRoMlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kXG4mIzQzO1x0ICogdGhlIHByb2dyYW0gcGFzc2VzIHRoZSBmcmFtZSBpbnN0ZWFkIG9mIHJlZGlyZWN0aW5nIHRvIHRoZSBpbm5lclxuJiM0MztcdCAqIFZMQU4gZGV2aWNlLiByZWRpcmVjdGVkID09IDAgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IHRoZVxuJiM0MztcdCAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0XG4mIzQzO1x0ICogeGRwX2RvX2ZsdXNoKCkuIHZldGgyJiMzOTtzIGRlbGl2ZXJlZCBjb3VudCBpcyBub3QgY2hlY2tlZCBoZXJlLCBzaW5jZVxuJiM0MztcdCAqIGEgcGFzc2VkIGZyYW1lIGNhbiBzdGlsbCByZWFjaCB2ZXRoMiB0aHJvdWdoIHRoZSBzdGFjayYjMzk7cyBmb3J3YXJkaW5nXG4mIzQzO1x0ICogcGF0aCwgd2hpY2ggaXMgdW5yZWxhdGVkIHRvIHRoZSByZWRpcmVjdCB1bmRlciB0ZXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24oc3JjKVwmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4mIzQzO1x0XHQgICAgICAgMSwgXCYjMzQ7aW5ldF9wdG9uKHFpbnEgZHN0KVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkID0gMDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXHUwMDI2bGZfb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bihxaW5xIGVncmVzcylcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQsIFJFRElSRUNUX05QS1RTLCBcJiMzNDtxaW5xIGVncmVzcyBwYXNzZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkLCAwLCBcJiMzNDtxaW5xIGVncmVzcyBub3QgcmVkaXJlY3RlZFwmIzM0Oyk7XG4mIzQzO1xuIGZhaWw6XG4mIzQzO1x0aWYgKHhkcF9hdHRhY2hlZClcbiYjNDM7XHRcdGJwZl94ZHBfZGV0YWNoKHZldGgyX2lkeCwgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTtcbiBcdGlmIChuc3Rva2VuKVxuIFx0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiBcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsIFwmIzM0OyBOU19URVNUKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjg2MmExZTk0NTdiNGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuQEAgLTE5LDQgJiM0MzsxOSw0MCBAQCBpbnQgZmliX2xvb2t1cChzdHJ1Y3QgX19za19idWZmICpza2IpXG4gXHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuJiM0MztpbnQgZmliX2xvb2t1cF94ZHAoc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0ZmliX2xvb2t1cF9yZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFx1MDAyNmZpYl9wYXJhbXMsIHNpemVvZihmaWJfcGFyYW1zKSxcbiYjNDM7XHRcdFx0XHRcdGxvb2t1cF9mbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBYRFBfRFJPUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHJlZGlyZWN0ZWQgPSAwO1xuJiM0MztpbnQgcGFzc2VkID0gMDtcbiYjNDM7aW50IGRlbGl2ZXJlZCA9IDA7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuJiM0MztpbnQgZmliX2xvb2t1cF9yZWRpcmVjdChzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgcGFyYW1zID0gZmliX3BhcmFtcztcbiYjNDM7XHRsb25nIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX2ZpYl9sb29rdXAoY3R4LCBcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBsb29rdXBfZmxhZ3MpO1xuJiM0MztcdGlmIChyZXQgPT0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTKSB7XG4mIzQzO1x0XHRyZWRpcmVjdGVkJiM0MzsmIzQzOztcbiYjNDM7XHRcdHJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFzc2VkJiM0MzsmIzQzOztcbiYjNDM7XHRyZXR1cm4gWERQX1BBU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt4ZHBcJiMzNDspXG4mIzQzO2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0ZGVsaXZlcmVkJiM0MzsmIzQzOztcbiYjNDM7XHRyZXR1cm4gWERQX0RST1A7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwOTozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3hkcF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfaXB2NF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY2X2ZpYl9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyIChgYnBmX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGZsYWdzOiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYC4gVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBjb3JlIEJQRiBGSUIgbG9va3VwIGxvZ2ljIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIEZJQiBsb29rdXAgZW50cnkgcG9pbnRzIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIGxvb2t1cCBmdW5jdGlvbnMuIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgVkxBTiBzcGVjaWZpYyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzAyMzExNjVjNGViZmFiZWM5OWJjNTc5NDZhMmU4YzY1ZmRjZTJjYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDQgMDk6Mzk6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC0zNTMyLDYgJiM0MzszNTMyLDQ1IEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqCQkJVXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotJmd0O21hcmsgZm9yIHRoZSBmaWIgbG9va3VwLgogICoJCQlUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsCiAgKgkJCWFzIGl0IG9ubHkgaGFzIG1lYW5pbmcgZm9yIGZ1bGwgbG9va3Vwcy4KJiM0MzsgKgkJKipCUEZfRklCX0xPT0tVUF9WTEFOKioKJiM0MzsgKgkJCUlmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2UKJiM0MzsgKgkJCXBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldAomIzQzOyAqCQkJKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kgZnJvbQomIzQzOyAqCQkJdGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLSZndDtpZmluZGV4IHdpdGggdGhlCiYjNDM7ICoJCQlwYXJlbnQmIzM5O3MgaWZpbmRleC4gKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklECiYjNDM7ICoJCQlvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvCiYjNDM7ICoJCQlzZXQgZWdyZXNzIHByaW9yaXR5IHdyaXRlcyBQQ1AgaXRzZWxmLiAqcGFyYW1zKi0mZ3Q7c21hYyBpcwomIzQzOyAqCQkJdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93biBhZGRyZXNzLCB3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlCiYjNDM7ICoJCQlwYXJlbnQmIzM5O3MuIE9ubHkgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaXMgcmVzb2x2ZWQ7IGlmIGl0CiYjNDM7ICoJCQlpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsCiYjNDM7ICoJCQl0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXMKJiM0MzsgKgkJCW9uZSB0YWcgYW5kIHRoZSBsb29rdXAgcmV0dXJucwomIzQzOyAqCQkJKipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotJmd0O2lmaW5kZXgKJiM0MzsgKgkJCWxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0CiYjNDM7ICoJCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiB0byBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93bgomIzQzOyAqCQkJaWZpbmRleC4gVGhlIHN3YXAgYW5kIHRoZSB2bGFuIGZpZWxkcwomIzQzOyAqCQkJYXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXAKJiM0MzsgKgkJCXRoZSBoZWxwZXImIzM5O3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdAomIzQzOyAqCQkJc3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLSZndDttdHVfcmVzdWx0LgomIzQzOyAqCQkJVGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXMKJiM0MzsgKgkJCXJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTgomIzQzOyAqCQkJZGV2aWNlIGRpcmVjdGx5LgomIzQzOyAqCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKgomIzQzOyAqCQkJVHJlYXQgKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kKJiM0MzsgKgkJCWFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzCiYjNDM7ICoJCQloYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnCiYjNDM7ICoJCQlvbiAqcGFyYW1zKi0mZ3Q7aWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2YKJiM0MzsgKgkJCSpwYXJhbXMqLSZndDtoX3ZsYW5fVENJOyAqcGFyYW1zKi0mZ3Q7aF92bGFuX3Byb3RvIG11c3QgYmUKJiM0MzsgKgkJCUVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2UKJiM0MzsgKgkJCSoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi0mZ3Q7aWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOCiYjNDM7ICoJCQlkZXZpY2UsIGl0cyBpbm5lciAoUWluUSkgc3ViaW50ZXJmYWNlIGlzIG1hdGNoZWQ7IGZvciBhCiYjNDM7ICoJCQlib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlciYjMzk7cyBpZmluZGV4LiBBbiB1bm1hdGNoZWQKJiM0MzsgKgkJCXRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnMKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy4KJiM0MzsgKgkJCUEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzCiYjNDM7ICoJCQlmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aAomIzQzOyAqCQkJKipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKgomIzQzOyAqCQkJKHJldHVybnMgKiotRUlOVkFMKiopLgogICoKICAqCQkqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvcgogICoJCSoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLgpAQCAtNzMyNyw2ICYjNDM7NzM2Niw4IEBAIGVudW0gewogCUJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgJmx0OyZsdDsgMyksCiAJQlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSAmbHQ7Jmx0OyA0KSwKIAlCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVICZsdDsmbHQ7IDUpLAomIzQzOwlCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVICZsdDsmbHQ7IDYpLAomIzQzOwlCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUID0gKDFVICZsdDsmbHQ7IDcpLAogfTsKIAogZW51bSB7CkBAIC03MzQwLDYgJiM0Mzs3MzgxLDcgQEAgZW51bSB7CiAJQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqLwogCUJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqLwogCUJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovCiYjNDM7CUJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqLwogfTsKIAogc3RydWN0IGJwZl9maWJfbG9va3VwIHsKQEAgLTczOTMsNyAmIzQzOzc0MzUsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHsKIAogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCS8qIG91dHB1dCAqLwomIzQzOwkJCS8qCiYjNDM7CQkJICogb3V0cHV0IHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTjogc2V0IGZyb20gdGhlCiYjNDM7CQkJICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWQKJiM0MzsJCQkgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGgKJiM0MzsJCQkgKiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOiB0aGUgVkxBTiB0YWcgdG8gc2NvcGUKJiM0MzsJCQkgKiB0aGUgbG9va3VwIGJ5LgomIzQzOwkJCSAqLwogCQkJX19iZTE2CWhfdmxhbl9wcm90bzsKIAkJCV9fYmUxNgloX3ZsYW5fVENJOwogCQl9OwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAyZTk2YjRiODQ3Y2UxMi4uMGVhMzYyZmE0Mjg3ZTMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC02MjAxLDIxICYjNDM7NjIwMSw2MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7CiAjZW5kaWYKIAogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCi1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsIHUzMiBtdHUpCiYjNDM7c3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiYjNDM7CQkJCSAgdTMyIGZsYWdzLCB1MzIgbXR1LCB1MzIgaW5faWZpbmRleCkKIHsKIAlwYXJhbXMtJmd0O2hfdmxhbl9UQ0kgPSAwOwogCXBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvID0gMDsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSkKJiM0MzsJaWYgKChmbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOKSAmYW1wOyZhbXA7IGlzX3ZsYW5fZGV2KGRldikpIHsKJiM0MzsJCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X3ByaXYoZGV2KS0mZ3Q7cmVhbF9kZXY7CiYjNDM7CiYjNDM7CQlpZiAoIWlzX3ZsYW5fZGV2KHJlYWxfZGV2KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmV0X2VxKGRldl9uZXQocmVhbF9kZXYpLCBkZXZfbmV0KGRldikpKSB7CiYjNDM7CQkJcGFyYW1zLSZndDtoX3ZsYW5fcHJvdG8gPSB2bGFuX2Rldl92bGFuX3Byb3RvKGRldik7CiYjNDM7CQkJcGFyYW1zLSZndDtoX3ZsYW5fVENJID0gaHRvbnModmxhbl9kZXZfdmxhbl9pZChkZXYpKTsKJiM0MzsJCQlwYXJhbXMtJmd0O2lmaW5kZXggPSByZWFsX2Rldi0mZ3Q7aWZpbmRleDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGFyYW1zLSZndDtpZmluZGV4ID0gaW5faWZpbmRleDsKJiM0MzsJCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsjZW5kaWYKJiM0MzsKIAlpZiAobXR1KQogCQlwYXJhbXMtJmd0O210dV9yZXN1bHQgPSBtdHU7IC8qIHVuaW9uIHdpdGggdG90X2xlbiAqLwogCiAJcmV0dXJuIDA7CiB9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCQkJIGNvbnN0IHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zKQomIzQzO3sKJiM0MzsJX19iZTE2IHByb3RvID0gcGFyYW1zLSZndDtoX3ZsYW5fcHJvdG87CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldjsKJiM0MzsJdTE2IHZpZDsKJiM0MzsKJiM0MzsJaWYgKHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSAmYW1wOyZhbXA7IHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFBRCkpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJdmlkID0gbnRvaHMocGFyYW1zLSZndDtoX3ZsYW5fVENJKSAmYW1wOyBWTEFOX1ZJRF9NQVNLOwomIzQzOwl2bGFuX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIHByb3RvLCB2aWQpOwomIzQzOwlpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkgfHwKJiM0MzsJICAgICFuZXRfZXEoZGV2X25ldCh2bGFuX2RldiksIGRldl9uZXQoZGV2KSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZsYW5fZGV2OwomIzQzO30KICNlbmRpZgogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkKIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCQkJICAgICAgIHUzMiBmbGFncywgYm9vbCBjaGVja19tdHUpCiB7CiYjNDM7CXUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLSZndDtpZmluZGV4OwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDsKIAlzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjOwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKQEAgLTYyMjksNiAmIzQzOzYyNjgsMTQgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJaWYgKHVubGlrZWx5KCFkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgewomIzQzOwkJZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7CiYjNDM7CQlpZiAoSVNfRVJSKGRldikpCiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIoZGV2KTsKJiM0MzsJCWlmICghZGV2KQomIzQzOwkJCXJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDsKJiM0MzsJfQomIzQzOwogCS8qIHZlcmlmeSBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb24gdGhpcyBpbnRlcmZhY2UgKi8KIAlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CiAJaWYgKHVubGlrZWx5KCFpbl9kZXYgfHwgIUlOX0RFVl9GT1JXQVJEKGluX2RldikpKQpAQCAtNjIzOCw3ICYjNDM7NjI4NSwxMSBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIAkJZmw0LmZsb3dpNF9paWYgPSAxOwogCQlmbDQuZmxvd2k0X29pZiA9IHBhcmFtcy0mZ3Q7aWZpbmRleDsKIAl9IGVsc2UgewotCQlmbDQuZmxvd2k0X2lpZiA9IHBhcmFtcy0mZ3Q7aWZpbmRleDsKJiM0MzsJCS8qCiYjNDM7CQkgKiBkZXYtJmd0O2lmaW5kZXgsIG5vdCBwYXJhbXMtJmd0O2lmaW5kZXg6IFZMQU5fSU5QVVQgbWF5IGhhdmUKJiM0MzsJCSAqIHJlc29sdmVkIGRldiB0byBhIHN1YmludGVyZmFjZSBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJZmw0LmZsb3dpNF9paWYgPSBkZXYtJmd0O2lmaW5kZXg7CiAJCWZsNC5mbG93aTRfb2lmID0gMDsKIAl9CiAJZmw0LmZsb3dpNF9kc2NwID0gaW5ldF9kc2ZpZWxkX3RvX2RzY3AocGFyYW1zLSZndDt0b3MpOwpAQCAtNjM0Nyw3ICYjNDM7NjM5OCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCW1lbWNweShwYXJhbXMtJmd0O3NtYWMsIGRldi0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAogc2V0X2Z3ZF9wYXJhbXM6Ci0JcmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpOwomIzQzOwlyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7CiB9CiAjZW5kaWYKIApAQCAtNjM1Nyw2ICYjNDM7NjQwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogewogCXN0cnVjdCBpbjZfYWRkciAqc3JjID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtJmd0O2lwdjZfc3JjOwogCXN0cnVjdCBpbjZfYWRkciAqZHN0ID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtJmd0O2lwdjZfZHN0OwomIzQzOwl1MzIgaW5faWZpbmRleCA9IHBhcmFtcy0mZ3Q7aWZpbmRleDsKIAlzdHJ1Y3QgZmliNl9yZXN1bHQgcmVzID0ge307CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTYzNzQsNiAmIzQzOzY0MjYsMTQgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJaWYgKHVubGlrZWx5KCFkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgewomIzQzOwkJZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7CiYjNDM7CQlpZiAoSVNfRVJSKGRldikpCiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIoZGV2KTsKJiM0MzsJCWlmICghZGV2KQomIzQzOwkJCXJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDsKJiM0MzsJfQomIzQzOwogCWlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpOwogCWlmICh1bmxpa2VseSghaWRldiB8fCAhUkVBRF9PTkNFKGlkZXYtJmd0O2NuZi5mb3J3YXJkaW5nKSkpCiAJCXJldHVybiBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRDsKQEAgLTYzODIsNyAmIzQzOzY0NDIsMTIgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJCWZsNi5mbG93aTZfaWlmID0gMTsKIAkJb2lmID0gZmw2LmZsb3dpNl9vaWYgPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiAJfSBlbHNlIHsKLQkJb2lmID0gZmw2LmZsb3dpNl9paWYgPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiYjNDM7CQkvKgomIzQzOwkJICogZGV2LSZndDtpZmluZGV4LCBub3QgcGFyYW1zLSZndDtpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlCiYjNDM7CQkgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuCiYjNDM7CQkgKi8KJiM0MzsJCW9pZiA9IGRldi0mZ3Q7aWZpbmRleDsKJiM0MzsJCWZsNi5mbG93aTZfaWlmID0gb2lmOwogCQlmbDYuZmxvd2k2X29pZiA9IDA7CiAJCXN0cmljdCA9IFJUNl9MT09LVVBfRl9IQVNfU0FERFI7CiAJfQpAQCAtNjQ4NiwxMyAmIzQzOzY1NTEsMjYgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJbWVtY3B5KHBhcmFtcy0mZ3Q7c21hYywgZGV2LSZndDtkZXZfYWRkciwgRVRIX0FMRU4pOwogCiBzZXRfZndkX3BhcmFtczoKLQlyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7CiYjNDM7CXJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTsKIH0KICNlbmRpZgogCiAjZGVmaW5lIEJQRl9GSUJfTE9PS1VQX01BU0sgKEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IFwKIAkJCSAgICAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBcCi0JCQkgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUkspCiYjNDM7CQkJICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLIHwgXAomIzQzOwkJCSAgICAgQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpCiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2sodTMyIGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKGZsYWdzICZhbXA7IH5CUEZfRklCX0xPT0tVUF9NQVNLKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoKGZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpICZhbXA7JmFtcDsKJiM0MzsJICAgIChmbGFncyAmYW1wOyAoQlBGX0ZJQl9MT09LVVBfVEJJRCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiAKIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LAogCSAgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqLCBwYXJhbXMsIGludCwgcGxlbiwgdTMyLCBmbGFncykKQEAgLTY1MDAsNyAmIzQzOzY1NzgsNyBAQCBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCwKIAlpZiAocGxlbiAmbHQ7IHNpemVvZigqcGFyYW1zKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZmxhZ3MgJmFtcDsgfkJQRl9GSUJfTE9PS1VQX01BU0spCiYjNDM7CWlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN3aXRjaCAocGFyYW1zLSZndDtmYW1pbHkpIHsKQEAgLTY1MzgsNyAmIzQzOzY2MTYsMTAgQEAgQlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYiwKIAlpZiAocGxlbiAmbHQ7IHNpemVvZigqcGFyYW1zKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZmxhZ3MgJmFtcDsgfkJQRl9GSUJfTE9PS1VQX01BU0spCiYjNDM7CWlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChwYXJhbXMtJmd0O3RvdF9sZW4pCmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC0zNTMyLDYgJiM0MzszNTMyLDQ1IEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqCQkJVXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotJmd0O21hcmsgZm9yIHRoZSBmaWIgbG9va3VwLgogICoJCQlUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsCiAgKgkJCWFzIGl0IG9ubHkgaGFzIG1lYW5pbmcgZm9yIGZ1bGwgbG9va3Vwcy4KJiM0MzsgKgkJKipCUEZfRklCX0xPT0tVUF9WTEFOKioKJiM0MzsgKgkJCUlmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2UKJiM0MzsgKgkJCXBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldAomIzQzOyAqCQkJKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kgZnJvbQomIzQzOyAqCQkJdGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLSZndDtpZmluZGV4IHdpdGggdGhlCiYjNDM7ICoJCQlwYXJlbnQmIzM5O3MgaWZpbmRleC4gKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklECiYjNDM7ICoJCQlvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvCiYjNDM7ICoJCQlzZXQgZWdyZXNzIHByaW9yaXR5IHdyaXRlcyBQQ1AgaXRzZWxmLiAqcGFyYW1zKi0mZ3Q7c21hYyBpcwomIzQzOyAqCQkJdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93biBhZGRyZXNzLCB3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlCiYjNDM7ICoJCQlwYXJlbnQmIzM5O3MuIE9ubHkgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaXMgcmVzb2x2ZWQ7IGlmIGl0CiYjNDM7ICoJCQlpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsCiYjNDM7ICoJCQl0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXMKJiM0MzsgKgkJCW9uZSB0YWcgYW5kIHRoZSBsb29rdXAgcmV0dXJucwomIzQzOyAqCQkJKipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotJmd0O2lmaW5kZXgKJiM0MzsgKgkJCWxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0CiYjNDM7ICoJCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiB0byBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93bgomIzQzOyAqCQkJaWZpbmRleC4gVGhlIHN3YXAgYW5kIHRoZSB2bGFuIGZpZWxkcwomIzQzOyAqCQkJYXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXAKJiM0MzsgKgkJCXRoZSBoZWxwZXImIzM5O3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdAomIzQzOyAqCQkJc3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLSZndDttdHVfcmVzdWx0LgomIzQzOyAqCQkJVGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXMKJiM0MzsgKgkJCXJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTgomIzQzOyAqCQkJZGV2aWNlIGRpcmVjdGx5LgomIzQzOyAqCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKgomIzQzOyAqCQkJVHJlYXQgKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kKJiM0MzsgKgkJCWFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzCiYjNDM7ICoJCQloYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnCiYjNDM7ICoJCQlvbiAqcGFyYW1zKi0mZ3Q7aWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2YKJiM0MzsgKgkJCSpwYXJhbXMqLSZndDtoX3ZsYW5fVENJOyAqcGFyYW1zKi0mZ3Q7aF92bGFuX3Byb3RvIG11c3QgYmUKJiM0MzsgKgkJCUVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2UKJiM0MzsgKgkJCSoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi0mZ3Q7aWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOCiYjNDM7ICoJCQlkZXZpY2UsIGl0cyBpbm5lciAoUWluUSkgc3ViaW50ZXJmYWNlIGlzIG1hdGNoZWQ7IGZvciBhCiYjNDM7ICoJCQlib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlciYjMzk7cyBpZmluZGV4LiBBbiB1bm1hdGNoZWQKJiM0MzsgKgkJCXRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnMKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy4KJiM0MzsgKgkJCUEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzCiYjNDM7ICoJCQlmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aAomIzQzOyAqCQkJKipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKgomIzQzOyAqCQkJKHJldHVybnMgKiotRUlOVkFMKiopLgogICoKICAqCQkqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvcgogICoJCSoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLgpAQCAtNzMyNyw2ICYjNDM7NzM2Niw4IEBAIGVudW0gewogCUJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgJmx0OyZsdDsgMyksCiAJQlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSAmbHQ7Jmx0OyA0KSwKIAlCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVICZsdDsmbHQ7IDUpLAomIzQzOwlCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVICZsdDsmbHQ7IDYpLAomIzQzOwlCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUID0gKDFVICZsdDsmbHQ7IDcpLAogfTsKIAogZW51bSB7CkBAIC03MzQwLDYgJiM0Mzs3MzgxLDcgQEAgZW51bSB7CiAJQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqLwogCUJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqLwogCUJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovCiYjNDM7CUJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqLwogfTsKIAogc3RydWN0IGJwZl9maWJfbG9va3VwIHsKQEAgLTczOTMsNyAmIzQzOzc0MzUsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHsKIAogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCS8qIG91dHB1dCAqLwomIzQzOwkJCS8qCiYjNDM7CQkJICogb3V0cHV0IHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTjogc2V0IGZyb20gdGhlCiYjNDM7CQkJICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWQKJiM0MzsJCQkgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGgKJiM0MzsJCQkgKiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOiB0aGUgVkxBTiB0YWcgdG8gc2NvcGUKJiM0MzsJCQkgKiB0aGUgbG9va3VwIGJ5LgomIzQzOwkJCSAqLwogCQkJX19iZTE2CWhfdmxhbl9wcm90bzsKIAkJCV9fYmUxNgloX3ZsYW5fVENJOwogCQl9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jCmluZGV4IGJkNzY1ODk1ODAwNDFmLi4xOGI2ZmRlY2EzODJhOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYwpAQCAtMiw2ICYjNDM7Miw3IEBACiAvKiBDb3B5cmlnaHQgKGMpIDIwMjMgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaWYuaCZndDsKIApAQCAtMjMsNiAmIzQzOzI0LDcgQEAKICNkZWZpbmUgSVBWNF9UQklEX0FERFIJCSYjMzQ7MTcyLjAuMC4yNTQmIzM0OwogI2RlZmluZSBJUFY0X1RCSURfTkVUCQkmIzM0OzE3Mi4wLjAuMCYjMzQ7CiAjZGVmaW5lIElQVjRfVEJJRF9EU1QJCSYjMzQ7MTcyLjAuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVEJJRF9OT05FSUdIX0RTVAkmIzM0OzE3Mi4wLjAuNSYjMzQ7CiAjZGVmaW5lIElQVjZfVEJJRF9BRERSCQkmIzM0O2ZkMDA6OkZGRkYmIzM0OwogI2RlZmluZSBJUFY2X1RCSURfTkVUCQkmIzM0O2ZkMDA6OiYjMzQ7CiAjZGVmaW5lIElQVjZfVEJJRF9EU1QJCSYjMzQ7ZmQwMDo6MiYjMzQ7CkBAIC0zNyw2ICYjNDM7MzksNDEgQEAKICNkZWZpbmUgSVBWNl9MT0NBTAkJJiMzNDtmZDAxOjozJiMzNDsKICNkZWZpbmUgSVBWNl9HVzEJCSYjMzQ7ZmQwMTo6MSYjMzQ7CiAjZGVmaW5lIElQVjZfR1cyCQkmIzM0O2ZkMDE6OjImIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9JRAkJCTEwMAomIzQzOyNkZWZpbmUgVkxBTl9JRkFDRQkJJiMzNDt2ZXRoMS4xMDAmIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9JRF9ET1dOCQkxMDIKJiM0MzsjZGVmaW5lIFZMQU5fSUZBQ0VfRE9XTgkJJiMzNDt2ZXRoMS4xMDImIzM0OwomIzQzOyNkZWZpbmUgUUlOUV9PVVRFUl9JRkFDRQkmIzM0O3ZldGgxLjIwMCYjMzQ7CiYjNDM7I2RlZmluZSBRSU5RX0lOTkVSX0lGQUNFCSYjMzQ7dmV0aDEuMjAwLjMwMCYjMzQ7CiYjNDM7I2RlZmluZSBWTEFOX1RBQkxFCQkmIzM0OzMwMCYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fSUZBQ0VfQUREUgkmIzM0OzEwLjUuMC4yNTQmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0VHUkVTU19EU1QJJiMzNDsxMC41LjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1FJTlFfRFNUCQkmIzM0OzEwLjcuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9EU1QJCSYjMzQ7MTAuNi4wLjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0dXCQkmIzM0OzEwLjUuMC4xJiMzNDsKJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSCSYjMzQ7ZmQwMjo6MjU0JiMzNDsKJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9FR1JFU1NfRFNUCSYjMzQ7ZmQwMjo6MiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY2X1ZMQU5fRFNUCQkmIzM0O2ZkMDM6OjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNl9WTEFOX0dXCQkmIzM0O2ZkMDI6OjEmIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9WSURfVU5VU0VECQk5OTkKJiM0MzsjZGVmaW5lIFZSRl9JRkFDRQkJJiMzNDt2cmYtYmx1ZSYjMzQ7CiYjNDM7I2RlZmluZSBWUkZfVEFCTEUJCSYjMzQ7MTAwMCYjMzQ7CiYjNDM7I2RlZmluZSBWUkZfVkxBTl9JRAkJMTAxCiYjNDM7I2RlZmluZSBWUkZfVkxBTl9JRkFDRQkJJiMzNDt2ZXRoMS4xMDEmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUgkmIzM0OzEwLjguMC4yNTQmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WUkZfR1cJCSYjMzQ7MTAuOC4wLjEmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WUkZfRFNUCQkmIzM0OzEwLjkuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIFRCSURfVkxBTl9JRAkJNTAKJiM0MzsjZGVmaW5lIFRCSURfVkxBTl9JRkFDRQkJJiMzNDt2ZXRoMi41MCYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1RCSURfVkxBTl9EU1QJJiMzNDsxNzIuMi4wLjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9CT05EX1ZMQU5fRFNUCSYjMzQ7MTAuMTEuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9NVFVfRFNUCSYjMzQ7MTAuNS45LjImIzM0OwomIzQzOyNkZWZpbmUgUUlOUV9BRF9WTEFOX0lECQkyMDAKJiM0MzsjZGVmaW5lIFFJTlFfSU5ORVJfVkxBTl9JRAkzMDAKJiM0MzsjZGVmaW5lIEJPTkRfSUZBQ0UJCSYjMzQ7Ym9uZDk5JiMzNDsKJiM0MzsjZGVmaW5lIEJPTkRfUE9SVAkJJiMzNDt2ZXRoMyYjMzQ7CiYjNDM7I2RlZmluZSBCT05EX1BPUlRfUEVFUgkJJiMzNDt2ZXRoNCYjMzQ7CiYjNDM7I2RlZmluZSBCT05EX1ZMQU5fSUQJCTUwMAogI2RlZmluZSBETUFDCQkJJiMzNDsxMToxMToxMToxMToxMToxMSYjMzQ7CiAjZGVmaW5lIERNQUNfSU5JVCB7IDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIH0KICNkZWZpbmUgRE1BQzIJCQkmIzM0OzAxOjAxOjAxOjAxOjAxOjAxJiMzNDsKQEAgLTUyLDYgJiM0Mzs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHsKIAlfX3UzMiB0YmlkOwogCV9fdTggZG1hY1s2XTsKIAlfX3UzMiBtYXJrOwomIzQzOwkvKgomIzQzOwkgKiBpbnB1dCB0YWcgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOyBleHBlY3RlZCBvdXRwdXQgdGFnCiYjNDM7CSAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KQomIzQzOwkgKi8KJiM0MzsJX191MTYgdmxhbl9wcm90bzsKJiM0MzsJX191MTYgdmxhbl9pZDsKJiM0MzsJYm9vbCBjaGVja192bGFuOwomIzQzOwljb25zdCBjaGFyICpleHBlY3RlZF9kZXY7IC8qIGV4cGVjdGVkIHBhcmFtcy0mZ3Q7aWZpbmRleCBhZnRlciBsb29rdXAgKi8KJiM0MzsJY29uc3QgY2hhciAqaWlmOwkgIC8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZldGgxIGlucHV0IGRldmljZSAqLwomIzQzOwlfX3UxNiB0b3RfbGVuOwkJICAvKiB0cmlnZ2VycyB0aGUgaW4tbG9va3VwIG10dSBjaGVjayB3aGVuIHNldCAqLwomIzQzOwlfX3UxNiBleHBlY3RlZF9tdHU7CSAgLyogZXhwZWN0ZWQgbXR1X3Jlc3VsdCAodW5pb24gd2l0aCB0b3RfbGVuKSAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHsKQEAgLTc5LDYgJiM0MzsxMjcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHsKIAkgIC5kYWRkciA9IElQVjRfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiAJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsCiAJICAuZG1hYyA9IERNQUNfSU5JVDIsIH0sCiYjNDM7CS8qCiYjNDM7CSAqIEFuIGVycm9yIHRoYXQgcmV0dXJucyBhZnRlciB0aGUgZWdyZXNzIGRldmljZSBpcyByZXNvbHZlZCBtdXN0CiYjNDM7CSAqIHJlcG9ydCB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXQuIFRoaXMgcm91dGVzIGZyb20gaW5wdXQKJiM0MzsJICogdmV0aDEgdmlhIHZldGgyICh0YWJsZSAxMDApIHRvIGEgZHN0IHdpdGggbm8gbmVpZ2hib3VyLCBzbwomIzQzOwkgKiBpbnB1dCAhPSBlZ3Jlc3MsIHBpbm5pbmcgTk9fTkVJR0ggdG8gdGhlIGVncmVzcyBkZXZpY2UuCiYjNDM7CSAqLwomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IE5PX05FSUdIIHJlcG9ydHMgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0JiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9UQklEX05PTkVJR0hfRFNULAomIzQzOwkgIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMiYjMzQ7LCB9LAogCXsgLmRlc2MgPSAmIzM0O0lQdjYgVEJJRCBsb29rdXAgZmFpbHVyZSYjMzQ7LAogCSAgLmRhZGRyID0gSVBWNl9UQklEX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAogCSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsCkBAIC0xNDIsNiAmIzQzOzIwMSwyMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHsKIAkgIC5leHBlY3RlZF9kc3QgPSBJUFY2X0dXMSwKIAkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAogCSAgLm1hcmsgPSBNQVJLLCB9LAomIzQzOwkvKiB2bGFuIGVncmVzcyByZXNvbHV0aW9uICovCiYjNDM7CS8qCiYjNDM7CSAqIEludmFyaWFudCB0aGUgVkxBTi1lZ3Jlc3MgYXJtcyBqb2ludGx5IGVuZm9yY2U6IGEKJiM0MzsJICogQlBGX0ZJQl9MT09LVVBfVkxBTiBTVUNDRVNTIGFsd2F5cyBjYXJyaWVzIGEgcGh5c2ljYWwsCiYjNDM7CSAqIHhtaXQtY2FwYWJsZSBpZmluZGV4OyBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlCiYjNDM7CSAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZQomIzQzOwkgKiBRaW5RIGFuZCBmb3JlaWduLW5ldG5zIGFybXMgcGluIFZMQU5fRkFJTFVSRSB3aXRoIHBhcmFtcy0mZ3Q7aWZpbmRleAomIzQzOwkgKiBsZWZ0IGF0IHRoZSBpbnB1dCwgc28gYSByZWdyZXNzaW9uIHRvIGJlc3QtZWZmb3J0IChTVUNDRVNTICYjNDM7IHRoZQomIzQzOwkgKiBWTEFOIGlmaW5kZXgpIGZhaWxzIG9uZS4KJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTiYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LAomIzQzOwkvKgomIzQzOwkgKiBza2IgcGF0aCB3aXRob3V0IHRvdF9sZW46IG10dV9yZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG10dQomIzQzOwkgKiAoMTQwMCksIG5vdCB0aGUgcGFyZW50JiMzOTtzICgxNTAwKQomIzQzOwkgKi8KJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc2tiLXBhdGggbXR1IGlzIHRoZSBWTEFOIGRldmljZSYjMzk7cyB3aXRob3V0IHRoZSBmbGFnJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTiYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsCiYjNDM7CSAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2UmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyBpbiBPVVRQVVQgbW9kZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5paWYgPSBWTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHwKJiM0MzsJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyBvdmVyIGEgYm9uZCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfQk9ORF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IEJPTkRfSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVEJJRF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8CiYjNDM7CQkJICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudGJpZCA9IDEwMCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMiYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBUQklEX1ZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC50b3RfbGVuID0gNTAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELAomIzQzOwkgIC50b3RfbGVuID0gMTQwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwgfSwKJiM0MzsJLyogdmxhbiB0YWcgYXMgbG9va3VwIGlucHV0ICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgbm8gZmxhZyYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGUmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5leHBlY3RlZF9kc3QgPSBJUFY2X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCBhbmQgZWdyZXNzIGNvbWJpbmVkJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LAomIzQzOwkgIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfAomIzQzOwkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgbmVpZ2hib3VyIHJlc29sdmVkIG9uIHRoZSByb3V0ZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgc3ViaW50ZXJmYWNlJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TUkMgfAomIzQzOwkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CS8qCiYjNDM7CSAqIFZSRjogdGhlIHJlc29sdmVkIHN1YmludGVyZmFjZSBpcyBlbnNsYXZlZCwgc28gdGhlIGwzbWRldiBydWxlCiYjNDM7CSAqIChmdWxsIGxvb2t1cCkgYW5kIGwzbWRldl9maWJfdGFibGVfcmN1KCkgKERJUkVDVCkgbXVzdCBzZWxlY3QKJiM0MzsJICogdGhlIFZSRiB0YWJsZSBmcm9tIHRoZSByZXNvbHZlZCBpbmdyZXNzCiYjNDM7CSAqLwomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIFZSRiBzdWJpbnRlcmZhY2UsIG5vIGZsYWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIFZSRiB0YWJsZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVlJGX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBESVJFQ1QgdXNlcyBWUkYgdGFibGUgZnJvbSByZXNvbHZlZCBpbmdyZXNzJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwKJiM0MzsJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSwKJiM0MzsJLyoKJiM0MzsJICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbAomIzQzOwkgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmUKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90byYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd24mIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSURfRE9XTiwgfSwKJiM0MzsJLyoKJiM0MzsJICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzCiYjNDM7CSAqIHdpdGggZm9yd2FyZGluZyBvZmYgRldEX0RJU0FCTEVEIChub3QgTk9UX0ZXREVEKSBwcm92ZXMgdGhlIHRhZwomIzQzOwkgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3MKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgODAyLjFhZCB0YWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMUFELCAudmxhbl9pZCA9IFFJTlFfQURfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW5uZXIgUWluUSBkZXZpY2UgZnJvbSBWTEFOIGlmaW5kZXgmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsCiYjNDM7CSAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LAomIzQzOwkvKgomIzQzOwkgKiBib25kaW5nOiB0aGUgVkxBTnMgbGl2ZSBvbiB0aGUgbWFzdGVyLCBhcyBvbiByZWNlaXZlLCB3aGVyZSB0aGUKJiM0MzsJICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydAomIzQzOwkgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cykKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgbWFzdGVyIHJlc29sdmVzJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELAomIzQzOwkgIC5paWYgPSBCT05EX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBwb3J0IGRvZXMgbm90IG1hdGNoJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjYgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90byYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY2IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSUQmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7dW5rbm93biBmbGFnIGJpdCByZWplY3RlZCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSAoMSAmbHQ7Jmx0OyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBUQklEJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LAogfTsKIAogc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKQpAQCAtMjA0LDYgJiM0Mzs0NzUsMTA1IEBAIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZCkKIAlTWVMoZmFpbCwgJiMzNDtpcCBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlcyYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTsKIAlTWVMoZmFpbCwgJiMzNDtpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlcyYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTsKIAomIzQzOwkvKgomIzQzOwkgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZAomIzQzOwkgKiB0YWctYXMtaW5wdXQsIGEgUWluUSBzdGFjaywgYW5kIGFuIGlpZiBydWxlIHNvIHRoZSBpbnB1dCB0ZXN0cwomIzQzOwkgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy4KJiM0MzsJICovCiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWQmIzM0OywKJiM0MzsJICAgIFZMQU5fSUZBQ0UsIFZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgVkxBTl9JRkFDRSk7CiYjNDM7CS8qCiYjNDM7CSAqIGxvd2VyIHRoYW4gdGhlIHZldGgxIHBhcmVudCAoMTUwMCk6IHRoZSBza2ItcGF0aCBtdHUgY2hlY2sgdXNlcyB0aGUKJiM0MzsJICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUgd2l0aCBvcgomIzQzOwkgKiB3aXRob3V0IHRoZSBlZ3Jlc3Mgc3dhcCwgd2hpY2ggdHdvIGFybXMgYmVsb3cgcGluCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgbXR1IDE0MDAmIzM0OywgVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBJUFY0X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZCYjMzQ7LCBJUFY2X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWwKJiM0MzsJICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkJiMzNDssCiYjNDM7CSAgICBWTEFOX0lGQUNFX0RPV04sIFZMQU5fSURfRE9XTik7CiYjNDM7CiYjNDM7CWVyciA9IHdyaXRlX3N5c2N0bCgmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyYjMzQ7IFZMQU5fSUZBQ0UgJiMzNDsvZm9yd2FyZGluZyYjMzQ7LCAmIzM0OzEmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi4mIzM0OyBWTEFOX0lGQUNFICYjMzQ7LmZvcndhcmRpbmcpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllcnIgPSB3cml0ZV9zeXNjdGwoJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi8mIzM0OyBWTEFOX0lGQUNFICYjMzQ7L2ZvcndhcmRpbmcmIzM0OywgJiMzNDsxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY2LmNvbmYuJiMzNDsgVkxBTl9JRkFDRSAmIzM0Oy5mb3J3YXJkaW5nKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBwcm90byA4MDIuMWFkIGlkIDIwMCYjMzQ7LAomIzQzOwkgICAgUUlOUV9PVVRFUl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcyB0eXBlIHZsYW4gaWQgMzAwJiMzNDssCiYjNDM7CSAgICBRSU5RX09VVEVSX0lGQUNFLCBRSU5RX0lOTkVSX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFFJTlFfT1VURVJfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgUUlOUV9JTk5FUl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMmIzM0OywgSVBWNF9RSU5RX0RTVCwgUUlOUV9JTk5FUl9JRkFDRSk7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXMmIzM0OywgSVBWNF9WTEFOX0RTVCwgSVBWNF9HVzEpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzJiMzNDssCiYjNDM7CSAgICBWTEFOX1RBQkxFLCBJUFY0X1ZMQU5fRFNULCBJUFY0X1ZMQU5fR1cpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlcyYjMzQ7LCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLTYgcm91dGUgYWRkICVzLzEyOCB2aWEgJXMmIzM0OywgSVBWNl9WTEFOX0RTVCwgSVBWNl9HVzEpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlcyYjMzQ7LAomIzQzOwkgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLTYgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXMmIzM0OywgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7CiYjNDM7CiYjNDM7CS8qIGEgYm9uZCB3aXRoIG9uZSBwb3J0IGFuZCBhIFZMQU4gb24gdGhlIGJvbmQgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgJXMgdHlwZSBib25kJiMzNDssIEJPTkRfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZldGggcGVlciBuYW1lICVzJiMzNDssIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXMmIzM0OywgQk9ORF9QT1JULCBCT05EX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIEJPTkRfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgQk9ORF9QT1JUKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzLiVkIHR5cGUgdmxhbiBpZCAlZCYjMzQ7LAomIzQzOwkgICAgQk9ORF9JRkFDRSwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lELCBCT05EX1ZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXAmIzM0OywgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlcy4lZCYjMzQ7LAomIzQzOwkgICAgSVBWNF9CT05EX1ZMQU5fRFNULCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBhIFZSRiB3aXRoIGl0cyBvd24gZGVkaWNhdGVkIHN1YmludGVyZmFjZSAodGhlIGlpZiBydWxlcyBhYm92ZQomIzQzOwkgKiBtdXN0IG5vdCBzZWUgaXQpLCBmb3IgdGhlIHRhYmxlLXNlbGVjdGlvbi1ieS1pbmdyZXNzIGNhc2VzCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZyZiB0YWJsZSAlcyYjMzQ7LCBWUkZfSUZBQ0UsIFZSRl9UQUJMRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cCYjMzQ7LCBWUkZfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkJiMzNDssCiYjNDM7CSAgICBWUkZfVkxBTl9JRkFDRSwgVlJGX1ZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXMmIzM0OywgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cCYjMzQ7LCBWUkZfVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBJUFY0X1ZSRl9JRkFDRV9BRERSLCBWUkZfVkxBTl9JRkFDRSk7CiYjNDM7CWVyciA9IHdyaXRlX3N5c2N0bCgmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyYjMzQ7IFZSRl9WTEFOX0lGQUNFICYjMzQ7L2ZvcndhcmRpbmcmIzM0OywgJiMzNDsxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuJiMzNDsgVlJGX1ZMQU5fSUZBQ0UgJiMzNDsuZm9yd2FyZGluZykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXMmIzM0OywgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXMmIzM0OywKJiM0MzsJICAgIFZSRl9UQUJMRSwgSVBWNF9WUkZfRFNULCBJUFY0X1ZSRl9HVyk7CiYjNDM7CiYjNDM7CS8qIG5laWdoYm91cnMgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGZvciB0aGUgbm9uLVNLSVBfTkVJR0ggY2FzZXMgKi8KJiM0MzsJZXJyID0gd3JpdGVfc3lzY3RsKCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L25laWdoLyYjMzQ7IFZMQU5fSUZBQ0UgJiMzNDsvZ2Nfc3RhbGVfdGltZSYjMzQ7LCAmIzM0OzkwMCYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3dyaXRlX3N5c2N0bChuZXQuaXB2NC5uZWlnaC4mIzM0OyBWTEFOX0lGQUNFICYjMzQ7LmdjX3N0YWxlX3RpbWUpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGUmIzM0OywKJiM0MzsJICAgIElQVjRfVkxBTl9FR1JFU1NfRFNULCBWTEFOX0lGQUNFLCBETUFDKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlJiMzNDssCiYjNDM7CSAgICBJUFY0X1ZMQU5fR1csIFZMQU5fSUZBQ0UsIERNQUMyKTsKJiM0MzsKJiM0MzsJLyogYSBWTEFOIG9uIHZldGgyIHdpdGggYSByb3V0ZSBpbiB0aGUgdGJpZCB0ZXN0IHRhYmxlICovCiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDIgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWQmIzM0OywKJiM0MzsJICAgIFRCSURfVkxBTl9JRkFDRSwgVEJJRF9WTEFOX0lEKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFRCSURfVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAxMDAgJXMvMzIgZGV2ICVzJiMzNDssCiYjNDM7CSAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7CiYjNDM7CiYjNDM7CS8qIGEgbG9ja2VkLW10dSByb3V0ZSB2aWEgdGhlIHN1YmludGVyZmFjZSBmb3IgdGhlIEZSQUdfTkVFREVEIGNhc2UgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwJiMzNDssCiYjNDM7CSAgICBJUFY0X1ZMQU5fTVRVX0RTVCwgVkxBTl9JRkFDRSk7CiYjNDM7CiAJcmV0dXJuIDA7CiBmYWlsOgogCXJldHVybiAtMTsKQEAgLTIxOCw5ICYjNDM7NTg4LDE2IEBAIHN0YXRpYyBpbnQgc2V0X2xvb2t1cF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJbWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTsKIAogCXBhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKLQlwYXJhbXMtJmd0O2lmaW5kZXggPSBpZmluZGV4OwomIzQzOwlwYXJhbXMtJmd0O2lmaW5kZXggPSB0ZXN0LSZndDtpaWYgPyBpZl9uYW1ldG9pbmRleCh0ZXN0LSZndDtpaWYpIDogaWZpbmRleDsKIAlwYXJhbXMtJmd0O3RiaWQgPSB0ZXN0LSZndDt0YmlkOwogCXBhcmFtcy0mZ3Q7bWFyayA9IHRlc3QtJmd0O21hcms7CiYjNDM7CXBhcmFtcy0mZ3Q7dG90X2xlbiA9IHRlc3QtJmd0O3RvdF9sZW47CiYjNDM7CiYjNDM7CS8qIGhfdmxhbl9wcm90by9oX3ZsYW5fVENJIHVuaW9uIHdpdGggdGJpZCAqLwomIzQzOwlpZiAodGVzdC0mZ3Q7bG9va3VwX2ZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHsKJiM0MzsJCXBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvID0gaHRvbnModGVzdC0mZ3Q7dmxhbl9wcm90byk7CiYjNDM7CQlwYXJhbXMtJmd0O2hfdmxhbl9UQ0kgPSBodG9ucyh0ZXN0LSZndDt2bGFuX2lkKTsKJiM0MzsJfQogCiAJaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgdGVzdC0mZ3Q7ZGFkZHIsIHBhcmFtcy0mZ3Q7aXB2Nl9kc3QpID09IDEpIHsKIAkJcGFyYW1zLSZndDtmYW1pbHkgPSBBRl9JTkVUNjsKQEAgLTI5OCw3ICYjNDM7Njc1LDcgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAlzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7CiAJc3RydWN0IF9fc2tfYnVmZiBza2IgPSB7IH07CiAJc3RydWN0IGZpYl9sb29rdXAgKnNrZWw7Ci0JaW50IHByb2dfZmQsIGVyciwgcmV0LCBpOwomIzQzOwlpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHJldCwgaTsKIAogCS8qIFRoZSB0ZXN0IGRvZXMgbm90IHVzZSB0aGUgc2tiLSZndDtkYXRhLCBzbwogCSAqIHVzZSBwa3RfdjYgZm9yIGJvdGggdjYgYW5kIHY0IHRlc3QuCkBAIC0zMDksMTEgJiM0Mzs2ODYsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJICAgIC5jdHhfaW4gPSAmYW1wO3NrYiwKIAkJICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLAogCSk7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cywKJiM0MzsJCSAgICAuZGF0YV9pbiA9ICZhbXA7cGt0X3Y2LAomIzQzOwkJICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSwKJiM0MzsJKTsKIAogCXNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7CiAJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkJiMzNDspKQogCQlyZXR1cm47CiAJcHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5maWJfbG9va3VwKTsKJiM0MzsJeGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmZpYl9sb29rdXBfeGRwKTsKIAogCVNZUyhmYWlsLCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBOU19URVNUKTsKIApAQCAtMzQzLDYgJiM0Mzs3MjUsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX29wdHMmIzM0OykpCiAJCQljb250aW51ZTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gaXMgWERQLW9ubHk7IHRoZSB0YyBoZWxwZXIgcmVqZWN0cyBpdC4KJiM0MzsJCSAqIFRoZXNlIGNhc2VzIGFyZSBleGVyY2lzZWQgb24gdGhlIFhEUCBwYXRoIGJlbG93LgomIzQzOwkJICovCiYjNDM7CQlpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIHsKJiM0MzsJCQlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCwgLUVJTlZBTCwKJiM0MzsJCQkJICAmIzM0O3RjIHJlamVjdHMgQlBGX0ZJQl9MT09LVVBfVkxBTiYjMzQ7KTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCwKIAkJCSAgJiMzNDtmaWJfbG9va3VwX3JldCYjMzQ7KTsKIApAQCAtMzUyLDYgJiM0Mzs3NDQsMjEgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdCkKIAkJCWFzc2VydF9kc3RfaXAoZmliX3BhcmFtcywgdGVzdHNbaV0uZXhwZWN0ZWRfZHN0KTsKIAomIzQzOwkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldikKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCwKJiM0MzsJCQkJICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLCAmIzM0O2lmaW5kZXgmIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1KQomIzQzOwkJCUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDttdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsCiYjNDM7CQkJCSAgJiMzNDttdHVfcmVzdWx0JiMzNDspOwomIzQzOwomIzQzOwkJaWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHsKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvLAomIzQzOwkJCQkgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCAmIzM0O2hfdmxhbl9wcm90byYjMzQ7KTsKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSwKJiM0MzsJCQkJICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgJiMzNDtoX3ZsYW5fVENJJiMzNDspOwomIzQzOwkJfQomIzQzOwogCQlyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy0mZ3Q7ZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTsKIAkJaWYgKCFBU1NFUlRfRVEocmV0LCAwLCAmIzM0O2RtYWMgbm90IG1hdGNoJiMzNDspKSB7CiAJCQljaGFyIGV4cGVjdGVkWzE4XSwgYWN0dWFsWzE4XTsKQEAgLTM2MSwxNSAmIzQzOzc2OCwzMTIgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJCXByaW50ZigmIzM0O2RtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzICYjMzQ7LCBleHBlY3RlZCwgYWN0dWFsKTsKIAkJfQogCi0JCS8vIGVuc3VyZSB0YmlkIGlzIHplcm8mIzM5O2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuCi0JCWlmICh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7CiYjNDM7CQkvKgomIzQzOwkJICogZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aAomIzQzOwkJICogQlBGX0ZJQl9MT09LVVBfVkxBTiB0aGUgdW5pb24gaG9sZHMgdGhlIHBhY2tlZCB2bGFuCiYjNDM7CQkgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoKHRlc3RzW2ldLmxvb2t1cF9mbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOKSkgewogCQkJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfcGFyYW1zLnRiaWQsIDAsCiAJCQkJCSYjMzQ7ZXhwZWN0ZWQgZmliX3BhcmFtcy50YmlkIHRvIGJlIHplcm8mIzM0OykpCiAJCQkJZ290byBmYWlsOwogCQl9CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFJlLXJ1biB0aGUgY2FzZXMgdGhyb3VnaCBicGZfeGRwX2ZpYl9sb29rdXAoKS4gdGVzdF9ydW4gdXNlcyB0aGUKJiM0MzsJICogY3VycmVudCBuZXRucyYjMzk7IGxvb3BiYWNrIGZvciBjdHgtJmd0O3J4cS0mZ3Q7ZGV2LCBzbyBkZXZfbmV0KCkgaXMgTlNfVEVTVAomIzQzOwkgKiBhbmQgdGhlIGxvb2t1cCBydW5zIGFnYWluc3QgaXRzIEZJQi4gVGhlIHBhdGgtaW5kZXBlbmRlbnQgcmVzdWx0cwomIzQzOwkgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYgomIzQzOwkgKiBwYXRoOyB0aGUgbm8tdG90X2xlbiBtdHVfcmVzdWx0IGlzIHNrYi1zcGVjaWZpYyBhbmQgbm90IHJlY2hlY2tlZC4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3RzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzZXRfbG9va3VwX3BhcmFtcyhmaWJfcGFyYW1zLCAmYW1wO3Rlc3RzW2ldLCBza2IuaWZpbmRleCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0ID0gLTE7CiYjNDM7CQlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IHRlc3RzW2ldLmxvb2t1cF9mbGFnczsKJiM0MzsKJiM0MzsJCWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCAmYW1wO3hkcF9vcHRzKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt4ZHAgdGVzdF9ydW4mIzM0OykpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0LCB0ZXN0c1tpXS5leHBlY3RlZF9yZXQsCiYjNDM7CQkJICAgICAgICYjMzQ7eGRwIGZpYl9sb29rdXBfcmV0JiMzNDspKQomIzQzOwkJCXByaW50ZigmIzM0Oyh4ZHApICVzXG4mIzM0OywgdGVzdHNbaV0uZGVzYyk7CiYjNDM7CiYjNDM7CQlpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KQomIzQzOwkJCUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtpZmluZGV4LAomIzQzOwkJCQkgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksCiYjNDM7CQkJCSAgJiMzNDt4ZHAgaWZpbmRleCYjMzQ7KTsKJiM0MzsKJiM0MzsJCWlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpCiYjNDM7CQkJYXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpOwomIzQzOwomIzQzOwkJaWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHsKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvLAomIzQzOwkJCQkgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCAmIzM0O3hkcCBoX3ZsYW5fcHJvdG8mIzM0Oyk7CiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2hfdmxhbl9UQ0ksCiYjNDM7CQkJCSAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksICYjMzQ7eGRwIGhfdmxhbl9UQ0kmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy0mZ3Q7ZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTsKJiM0MzsJCUFTU0VSVF9FUShyZXQsIDAsICYjMzQ7eGRwIGRtYWMmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogbXR1X3Jlc3VsdCBmcm9tIGEgdG90X2xlbiBsb29rdXAgaXMgdGhlIHJvdXRlIG10dSBhbmQgaXMKJiM0MzsJCSAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtJmd0O210dSBhbmQgaXMKJiM0MzsJCSAqIHNrYi1vbmx5LCBzbyBnYXRlIG9uIHRvdF9sZW4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSAmYW1wOyZhbXA7IHRlc3RzW2ldLnRvdF9sZW4pCiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O210dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSwKJiM0MzsJCQkJICAmIzM0O3hkcCBtdHVfcmVzdWx0JiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7ZmFpbDoKJiM0MzsJaWYgKG5zdG9rZW4pCiYjNDM7CQljbG9zZV9uZXRucyhuc3Rva2VuKTsKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAmIzM0OyBOU19URVNUKTsKJiM0MzsJZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBOU19WTEFOX0EJJiMzNDtmaWJfbG9va3VwX3ZsYW5fbnNfYSYjMzQ7CiYjNDM7I2RlZmluZSBOU19WTEFOX0IJJiMzNDtmaWJfbG9va3VwX3ZsYW5fbnNfYiYjMzQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIFZMQU4gZGV2aWNlIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIG5ldG5zIHdoaWxlIHN0YXlpbmcgcmVnaXN0ZXJlZAomIzQzOyAqIG9uIGl0cyBwYXJlbnQuIE5laXRoZXIgZGlyZWN0aW9uIG1heSB0aGVuIGNyb3NzIHRoZSBib3VuZGFyeTogdGhlCiYjNDM7ICogZWdyZXNzIGZsYWcgbXVzdCBub3QgcHVibGlzaCB0aGUgZm9yZWlnbiBwYXJlbnQmIzM5O3MgaWZpbmRleCwgYW5kIHRoZQomIzQzOyAqIGlucHV0IGZsYWcgbXVzdCBmYWlsIGNsb3NlZCByYXRoZXIgdGhhbiB1c2UgYSBmb3JlaWduIGluZ3Jlc3MuCiYjNDM7ICovCiYjNDM7dm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9uZXRucyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9maWJfbG9va3VwICpmaWJfcGFyYW1zOwomIzQzOwlzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9OwomIzQzOwlzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7CiYjNDM7CWludCBwcm9nX2ZkLCB4ZHBfZmQsIGVyciwgcGFyZW50X2lkeCwgdmxhbl9pZHg7CiYjNDM7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBydW5fb3B0cywKJiM0MzsJCSAgICAuZGF0YV9pbiA9ICZhbXA7cGt0X3Y2LAomIzQzOwkJICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSwKJiM0MzsJCSAgICAuY3R4X2luID0gJmFtcDtza2IsCiYjNDM7CQkgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksCiYjNDM7CSk7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cywKJiM0MzsJCSAgICAuZGF0YV9pbiA9ICZhbXA7cGt0X3Y2LAomIzQzOwkJICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmZpYl9sb29rdXApOwomIzQzOwl4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuZmliX2xvb2t1cF94ZHApOwomIzQzOwlmaWJfcGFyYW1zID0gJmFtcDtza2VsLSZndDtic3MtJmd0O2ZpYl9wYXJhbXM7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBOU19WTEFOX0EpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZXRucyBhZGQgJXMmIzM0OywgTlNfVkxBTl9CKTsKJiM0MzsKJiM0MzsJbnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVkxBTl9BKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3Blbl9uZXRucyhhKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgdmV0aDcgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoOCYjMzQ7KTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2IHZldGg3IHVwJiMzNDspOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGg3IG5hbWUgdmV0aDcuNjYgdHlwZSB2bGFuIGlkIDY2JiMzNDspOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCB2ZXRoNy42NiBuZXRucyAlcyYjMzQ7LCBOU19WTEFOX0IpOwomIzQzOwomIzQzOwlwYXJlbnRfaWR4ID0gaWZfbmFtZXRvaW5kZXgoJiMzNDt2ZXRoNyYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfTkVRKHBhcmVudF9pZHgsIDAsICYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDcpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBpbnB1dDogdGhlIG1vdmVkIGRldmljZSBpcyBzdGlsbCBpbiB2ZXRoNyYjMzk7cyBWTEFOIGdyb3VwLCBidXQgaXQKJiM0MzsJICogbGl2ZXMgaW4gYW5vdGhlciBuZXRucywgc28gdGhlIGxvb2t1cCBtdXN0IGZhaWwgY2xvc2VkCiYjNDM7CSAqLwomIzQzOwlza2IuaWZpbmRleCA9IHBhcmVudF9pZHg7CiYjNDM7CW1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCA9IHBhcmVudF9pZHg7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2hfdmxhbl9wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSA9IGh0b25zKDY2KTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsICYjMzQ7MTAuNjYuMC4yJiMzNDssICZhbXA7ZmliX3BhcmFtcy0mZ3Q7aXB2NF9kc3QpLAomIzQzOwkJICAgICAgIDEsICYjMzQ7aW5ldF9wdG9uKGRzdCkmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQgPSAtMTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwKJiM0MzsJCQkJICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsICZhbXA7cnVuX29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9ydW4oaW5wdXQpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CQkgICYjMzQ7aW5wdXQgYWNyb3NzIG5ldG5zIGZhaWxzIGNsb3NlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2lmaW5kZXgsIHBhcmVudF9pZHgsICYjMzQ7aWZpbmRleCB1bnRvdWNoZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtoX3ZsYW5fVENJLCBodG9ucyg2NiksICYjMzQ7dGFnIHVudG91Y2hlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJY2xvc2VfbmV0bnMobnN0b2tlbik7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQik7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCAmIzM0O29wZW5fbmV0bnMoYikmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIGVncmVzczogdGhlIGZpYiByZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlIGhlcmUsIGJ1dCBpdHMgcGFyZW50CiYjNDM7CSAqIGlzIGluIHRoZSBvdGhlciBuZXRucywgc28gdGhlIHN3YXAgbXVzdCBub3QgaGFwcGVuCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgdmV0aDcuNjYgdXAmIzM0Oyk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkIDEwLjY2LjAuMS8yNCBkZXYgdmV0aDcuNjYmIzM0Oyk7CiYjNDM7CWVyciA9IHdyaXRlX3N5c2N0bCgmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL3ZldGg3LjY2L2ZvcndhcmRpbmcmIzM0OywgJiMzNDsxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKGZvcndhcmRpbmcpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwl2bGFuX2lkeCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7dmV0aDcuNjYmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUSh2bGFuX2lkeCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCh2ZXRoNy42NikmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CW1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCA9IHZsYW5faWR4OwomIzQzOwlpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgJiMzNDsxMC42Ni4wLjImIzM0OywgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X2RzdCksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24oZHN0KSYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgJiMzNDsxMC42Ni4wLjEmIzM0OywgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X3NyYyksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24oc3JjKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCA9IC0xOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfAomIzQzOwkJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCAmYW1wO3hkcF9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKGVncmVzcykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0LCBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwKJiM0MzsJCSAgJiMzNDtlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkUmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtpZmluZGV4LCB2bGFuX2lkeCwKJiM0MzsJCSAgJiMzNDtmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSwgMCwgJiMzNDt2bGFuIGZpZWxkcyB6ZXJvJiMzNDspOwomIzQzOwomIzQzO2ZhaWw6CiYjNDM7CWlmIChuc3Rva2VuKQomIzQzOwkJY2xvc2VfbmV0bnMobnN0b2tlbik7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJiMzNDsgTlNfVkxBTl9BKTsKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAmIzM0OyBOU19WTEFOX0IpOwomIzQzOwlmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDAKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbAomIzQzOyAqIHBhcmVudC4gQSByZWRpcmVjdCB0aGF0IGxhbmRzIG9uIGEgVkxBTiBkZXZpY2UgaXMgZHJvcHBlZCBhdAomIzQzOyAqIHhkcF9kb19mbHVzaCgpLCBiZWNhdXNlIGEgVkxBTiBkZXZpY2UgaGFzIG5vIG5kb194ZHBfeG1pdC4gRHJpdmUgcmVhbAomIzQzOyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmUKJiM0MzsgKiB4ZHBfZG9fcmVkaXJlY3QoKSAmIzQzOyB4ZHBfZG9fZmx1c2goKSBwYXRoOiBhIHJlZHVjaWJsZSBWTEFOIGVncmVzcwomIzQzOyAqIHJlc29sdmVzIHRvIHZldGgxIGFuZCBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIsIHdoaWxlIGEgUWluUQomIzQzOyAqIGVncmVzcyByZXR1cm5zIFZMQU5fRkFJTFVSRSBhbmQgaXMgcGFzc2VkIHRvIHRoZSBzdGFjayBpbnN0ZWFkIG9mCiYjNDM7ICogcmVkaXJlY3RlZCB0byBhIGRldmljZSB0aGF0IHdvdWxkIHNpbGVudGx5IGRyb3AgaXQuCiYjNDM7ICovCiYjNDM7dm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9yZWRpcmVjdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7CiYjNDM7CXN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtczsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMOwomIzQzOwlzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7CiYjNDM7CWJvb2wgeGRwX2F0dGFjaGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBsZl9vcHRzLAomIzQzOwkJICAgIC5kYXRhX2luID0gJmFtcDtwa3RfdjQsCiYjNDM7CQkgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjQpLAomIzQzOwkJICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLAomIzQzOwkJICAgIC5yZXBlYXQgPSBSRURJUkVDVF9OUEtUUywKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlyZWRpcmVjdF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5maWJfbG9va3VwX3JlZGlyZWN0KTsKJiM0MzsJZmliX3BhcmFtcyA9ICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmaWJfcGFyYW1zOwomIzQzOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZXRucyBhZGQgJXMmIzM0OywgTlNfVEVTVCk7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgJiMzNDtvcGVuX25ldG5zJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlpZiAoc2V0dXBfbmV0bnMoKSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJdmV0aDFfaWR4ID0gaWZfbmFtZXRvaW5kZXgoJiMzNDt2ZXRoMSYjMzQ7KTsKJiM0MzsJdmV0aDJfaWR4ID0gaWZfbmFtZXRvaW5kZXgoJiMzNDt2ZXRoMiYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCh2ZXRoMSkmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfTkVRKHZldGgyX2lkeCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCh2ZXRoMikmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgcmVkaXJlY3QgdG8gdmV0aDEgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLiB2ZXRoX3hkcF94bWl0KCkKJiM0MzsJICogb25seSBhY2NlcHRzIHRoZSBmcmFtZSBpZiB2ZXRoMiYjMzk7cyBOQVBJIGlzIHVwLCB3aGljaCBvbiB2ZXRoIG1lYW5zCiYjNDM7CSAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy4KJiM0MzsJICovCiYjNDM7CWVyciA9IGJwZl94ZHBfYXR0YWNoKHZldGgyX2lkeCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnhkcF9jb3VudCksCiYjNDM7CQkJICAgICBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YXR0YWNoIHhkcF9jb3VudCBvbiB2ZXRoMiYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJeGRwX2F0dGFjaGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovCiYjNDM7CW1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCA9IHZldGgxX2lkeDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X3NyYyksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24oc3JjKSYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9WTEFOX0VHUkVTU19EU1QsICZhbXA7ZmliX3BhcmFtcy0mZ3Q7aXB2NF9kc3QpLAomIzQzOwkJICAgICAgIDEsICYjMzQ7aW5ldF9wdG9uKHJlZHVjaWJsZSBkc3QpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3JlZGlyZWN0ZWQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Bhc3NlZCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZGVsaXZlcmVkID0gMDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgJmFtcDtsZl9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKHJlZHVjaWJsZSBlZ3Jlc3MpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgJiMzNDtyZWR1Y2libGUgZWdyZXNzIHJlZGlyZWN0ZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3Bhc3NlZCwgMCwgJiMzNDtyZWR1Y2libGUgZWdyZXNzIG5vdCBwYXNzZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O2RlbGl2ZXJlZCwgMCwgJiMzNDtyZWR1Y2libGUgZWdyZXNzIGRlbGl2ZXJlZCB0byB2ZXRoMiYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kCiYjNDM7CSAqIHRoZSBwcm9ncmFtIHBhc3NlcyB0aGUgZnJhbWUgaW5zdGVhZCBvZiByZWRpcmVjdGluZyB0byB0aGUgaW5uZXIKJiM0MzsJICogVkxBTiBkZXZpY2UuIHJlZGlyZWN0ZWQgPT0gMCBpcyB0aGUgYXNzZXJ0aW9uIHRoYXQgbWF0dGVyczogdGhlCiYjNDM7CSAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0CiYjNDM7CSAqIHhkcF9kb19mbHVzaCgpLiB2ZXRoMiYjMzk7cyBkZWxpdmVyZWQgY291bnQgaXMgbm90IGNoZWNrZWQgaGVyZSwgc2luY2UKJiM0MzsJICogYSBwYXNzZWQgZnJhbWUgY2FuIHN0aWxsIHJlYWNoIHZldGgyIHRocm91Z2ggdGhlIHN0YWNrJiMzOTtzIGZvcndhcmRpbmcKJiM0MzsJICogcGF0aCwgd2hpY2ggaXMgdW5yZWxhdGVkIHRvIHRoZSByZWRpcmVjdCB1bmRlciB0ZXN0LgomIzQzOwkgKi8KJiM0MzsJbWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpOwomIzQzOwlmaWJfcGFyYW1zLSZndDtmYW1pbHkgPSBBRl9JTkVUOwomIzQzOwlmaWJfcGFyYW1zLSZndDtsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQOwomIzQzOwlmaWJfcGFyYW1zLSZndDtpZmluZGV4ID0gdmV0aDFfaWR4OwomIzQzOwlpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfc3JjKSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihzcmMpJiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1FJTlFfRFNULCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfZHN0KSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihxaW5xIGRzdCkmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7bG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cmVkaXJlY3RlZCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cGFzc2VkID0gMDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgJmFtcDtsZl9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKHFpbnEgZWdyZXNzKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cGFzc2VkLCBSRURJUkVDVF9OUEtUUywgJiMzNDtxaW5xIGVncmVzcyBwYXNzZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3JlZGlyZWN0ZWQsIDAsICYjMzQ7cWlucSBlZ3Jlc3Mgbm90IHJlZGlyZWN0ZWQmIzM0Oyk7CiYjNDM7CiBmYWlsOgomIzQzOwlpZiAoeGRwX2F0dGFjaGVkKQomIzQzOwkJYnBmX3hkcF9kZXRhY2godmV0aDJfaWR4LCBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpOwogCWlmIChuc3Rva2VuKQogCQljbG9zZV9uZXRucyhuc3Rva2VuKTsKIAlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICYjMzQ7IE5TX1RFU1QpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMKaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjg2MmExZTk0NTdiNGUwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMKQEAgLTE5LDQgJiM0MzsxOSw0MCBAQCBpbnQgZmliX2xvb2t1cChzdHJ1Y3QgX19za19idWZmICpza2IpCiAJcmV0dXJuIFRDX0FDVF9TSE9UOwogfQogCiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspCiYjNDM7aW50IGZpYl9sb29rdXBfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWZpYl9sb29rdXBfcmV0ID0gYnBmX2ZpYl9sb29rdXAoY3R4LCAmYW1wO2ZpYl9wYXJhbXMsIHNpemVvZihmaWJfcGFyYW1zKSwKJiM0MzsJCQkJCWxvb2t1cF9mbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiBYRFBfRFJPUDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHJlZGlyZWN0ZWQgPSAwOwomIzQzO2ludCBwYXNzZWQgPSAwOwomIzQzO2ludCBkZWxpdmVyZWQgPSAwOwomIzQzOwomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCBmaWJfbG9va3VwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfbWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zOwomIzQzOwlsb25nIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX2ZpYl9sb29rdXAoY3R4LCAmYW1wO3BhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7CiYjNDM7CWlmIChyZXQgPT0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTKSB7CiYjNDM7CQlyZWRpcmVjdGVkJiM0MzsmIzQzOzsKJiM0MzsJCXJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBhc3NlZCYjNDM7JiM0Mzs7CiYjNDM7CXJldHVybiBYRFBfUEFTUzsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspCiYjNDM7aW50IHhkcF9jb3VudChzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7ewomIzQzOwlkZWxpdmVyZWQmIzQzOyYjNDM7OwomIzQzOwlyZXR1cm4gWERQX0RST1A7CiYjNDM7fQomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEzNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVkxBTiBCUEYgRklCIExvb2t1cCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgVkxBTiBzdXBwb3J0IHRvIHRoZSBgYnBmX2ZpYl9sb29rdXBgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGludHJvZHVjaW5nIHNvbWUgbmV3IGZsYWdzOiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgZXh0ZW5kaW5nIHRoZSBleGlzdGluZyBCUEYgRklCIGxvb2t1cCB0byBjb25zaWRlciBWTEFOIGluZm9ybWF0aW9uLCB3aGljaCBpcyBhIHByZXR0eSBjcnVjaWFsIGFkZGl0aW9uIGZvciBjb21wbGV4IG5ldHdvcmsgc2V0dXBzLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwmIzM5O3MgQlBGIEZJQiBsb29rdXAgbG9naWMsIHNvIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgcmVhY2hlZCBieSBCUEYgcHJvZ3JhbXMgY2FsbGluZyBgYnBmX2ZpYl9sb29rdXBgLiBMZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuCgpSaWdodCwgc28gdGhlIG9idmlvdXMgc3VzcGVjdHMgYXJlOiBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AsIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBgYnBmX2lwdjZfZmliX2xvb2t1cGAsIGBicGZfeGRwX2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAuIEJ1dCBoYW5nIG9uIGEgc2Vjb25kLCB0aG9zZSBmaXJzdCB0d28sIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBhbmQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgLCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgcHJvYmFibHkgaW5saW5lZCwgd2hpY2ggY29tcGxpY2F0ZXMgdGhpbmdzIHNsaWdodGx5LCBidXQgaXQmIzM5O3Mgc3RpbGwgZ29vZCB0byBpbmNsdWRlIHRoZW0gb24gdGhlIGxpc3QuIGBicGZfeGRwX2ZpYl9sb29rdXBgIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYCBzZWVtIGxpa2UgdGhlIHJlYWwgZW50cnkgcG9pbnRzLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoaXMgdG8gd29yay4gV2hlcmUmIzM5O3MgdGhpcyBjb2RlIGxvY2F0ZWQ/IEFoLCBpdCYjMzk7cyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBPa2F5LCBoZXJlJiMzOTtzIGFuIGludGVyZXN0aW5nIGJpdC4gVGhlIG5ldyBsb2dpYyBpbiBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AgaXMgZ3VhcmRlZCBieSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpYC4gR29vZCB0byBrbm93LiBCdXQgd2FpdCwgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIHVzZXMgYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAuIElzIHRoYXQgYXZhaWxhYmxlIG9ubHkgaWYgYENPTkZJR19WTEFOXzgwMjFRYCBpcyBlbmFibGVkPyBUaW1lIHRvIGRvdWJsZS1jaGVjayBgX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1YC4gR290dGEgdmVyaWZ5IHRoaXMgZGVwZW5kZW5jeSBiZWZvcmUgSSBwcm9jZWVkIHdpdGggdGhlIGZ1enppbmcgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz00MDY4PXN0YXRpYyBib29sIGJueHRfcmVfY2hlY2tfaWZfdmxhbl92YWxpZChzdHJ1Y3QgYm54dF9yZV9kZXYgKnJkZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy00MDc0LVx0ICovXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjQwNzU6XHRpZiAoIV9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShyZGV2LVx1MDAzZW5ldGRldixcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtNDA3Ni1cdFx0XHRcdCAgICAgIGh0b25zKEVUSF9QXzgwMjFRKSwgdmxhbl9pZCkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmM9MTc2PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X2lmZl9mcm9tX21hYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL2N4Z2IzX29mZmxvYWQuYy0xODctXHRcdFx0aWYgKHZsYW4gXHUwMDI2XHUwMDI2IHZsYW4gIT0gVkxBTl9WSURfTUFTSykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmM6MTg4Olx0XHRcdFx0ZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB2bGFuKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvY3hnYjNfb2ZmbG9hZC5jLTE4OS1cdFx0XHR9IGVsc2UgaWYgKG5ldGlmX2lzX2JvbmRfc2xhdmUoZGV2KSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY2xpcF90YmwuYz0yMTg9aW50IGN4Z2I0X3VwZGF0ZV9yb290X2Rldl9jbGlwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIzNi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFZMQU5fTl9WSUQ7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmM6MjM3Olx0XHRyb290X2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmMtMjM4LVx0XHRpZiAoIXJvb3RfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jPTg3NDM9c3RhdGljIHZvaWQgbWx4c3dfc3BfcmlmX2Rlc3Ryb3lfdmxhbl91cHBlcihzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTg3NTAtXHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzo4NzUxOlx0dXBwZXJfZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGJyX2RldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB2aWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODc1Mi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jPTg3NzA9aW50IG1seHN3X3NwX3JvdXRlcl9icmlkZ2Vfdmxhbl9hZGQoc3RydWN0IG1seHN3X3NwICptbHhzd19zcCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04ODMxLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzo4ODMyOlx0XHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnJfZGV2LCBodG9ucyhFVEhfUF84MDIxUSksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04ODMzLVx0XHRcdFx0XHRcdCAgICAgb2xkX3B2aWQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYz00MDgyPXZvaWQgcWxjbmljX3Jlc3RvcmVfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDkxLVx0Zm9yX2VhY2hfc2V0X2JpdCh2aWQsIGFkYXB0ZXItXHUwMDNldmxhbnMsIFZMQU5fTl9WSUQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYzo0MDkyOlx0XHRkZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UobmV0ZGV2LCBodG9ucyhFVEhfUF84MDIxUSksIHZpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMtNDA5My1cdFx0aWYgKCFkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmM9MzA5PXN0YXRpYyB2b2lkIGRvX25laWdoX3NvbGljaXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCAqYnVmLCB1MTYgdGNpKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jLTMyNi1cdGlmICh0Y2kpIHtcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jOjMyNzpcdFx0bmV0ZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldi1cdTAwM2VuZXQsIGh0b25zKEVUSF9QXzgwMjFRKSxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jLTMyOC1cdFx0XHRcdFx0XHQgIHRjaSk7XG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MTIzPXN0cnVjdCB2bGFuX3BjcHVfc3RhdHMge1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjEzNjpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0xMzctXHRcdFx0XHRcdCAgICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpO1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTI1Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjI1MzpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMjU0LVx0XHQgICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZClcbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTA9Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy03NS0vKiBNdXN0IGJlIGludm9rZWQgd2l0aCByY3VfcmVhZF9sb2NrLiAqL1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjc2OnN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC84MDIxcS92bGFuX2NvcmUuYy03Ny1cdFx0XHRcdFx0X19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy05My1cdFx0aWYgKHVwcGVyX2Rldilcbm5ldC84MDIxcS92bGFuX2NvcmUuYzo5NDpcdFx0XHRyZXR1cm4gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHVwcGVyX2Rldixcbm5ldC84MDIxcS92bGFuX2NvcmUuYy05NS1cdFx0XHRcdFx0XHQgICAgdmxhbl9wcm90bywgdmxhbl9pZCk7XG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTk5LX1cbm5ldC84MDIxcS92bGFuX2NvcmUuYzoxMDA6RVhQT1JUX1NZTUJPTChfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UpO1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTEwMS1cbi0tXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTEyND12b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0xNzktXHRpZiAodmlkICE9IDApIHtcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6MTgwOlx0XHR2bGFuZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGJyLVx1MDAzZWRldiwgc2tiLVx1MDAzZXZsYW5fcHJvdG8sXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE4MS1cdFx0XHRcdFx0XHQgICB2aWQpO1xuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9NDE0PXZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNDU1LVx0XHQvKiBidWlsZCBuZWlnaCB0YWJsZSBsb29rdXAgb24gdGhlIHZsYW4gZGV2aWNlICovXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjQ1NjpcdFx0dmxhbmRldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShici1cdTAwM2VkZXYsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00NTctXHRcdFx0XHRcdFx0ICAgdmlkKTtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTQzNT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJybmZfZ2V0X2xvZ2ljYWxfZGV2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00NDYtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQ0NzpcdHZsYW4gPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00NDgtXHRcdFx0XHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpIFx1MDAyNiBWTEFOX1ZJRF9NQVNLKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MjMzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYyNDMtXHR2aWQgPSBudG9ocyhwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSkgXHUwMDI2IFZMQU5fVklEX01BU0s7XG5uZXQvY29yZS9maWx0ZXIuYzo2MjQ0Olx0dmxhbl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBwcm90bywgdmlkKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNDUtXHRpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgfHxcbi0tXG5uZXQvZHNhL3RhZy5oPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgZHNhX3NvZnR3YXJlX3VudGFnX3ZsYW5fdW5hd2FyZV9icmlkZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvZHNhL3RhZy5oLTEzMS1cdCAqL1xubmV0L2RzYS90YWcuaDoxMzI6XHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIGh0b25zKHByb3RvKSwgdmlkKTtcbm5ldC9kc2EvdGFnLmgtMTMzLVx0aWYgKCF1cHBlcl9kZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3MzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byBWTEFOIERldmljZSBEaXNjb3ZlcnkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLiBUaGUgY29kZSBzYXlzIGl0JiMzOTtzIGRlZmluZWQgaW4gYG5ldC84MDIxcS92bGFuX2NvcmUuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIEl0JiMzOTtzIG9ubHkgYXZhaWxhYmxlIGlmIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgZW5hYmxlZC4gV2FpdCBhIHNlY29uZCwgZG9lcyB0aGF0IG1lYW4gYHZsYW5fY29yZS5jYCBpcyBhY3R1YWxseSAqY29tcGlsZWQqIG9ubHkgd2hlbiB0aGF0IGNvbmZpZyBvcHRpb24gaXMgc2V0PyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhhdC4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byB0aGUgYG5ldC84MDIxcS9NYWtlZmlsZWAgYW5kIGNvbmZpcm0gaG93IHRoYXQgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLiBHb3R0YSBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9jb3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LzgwMjFxL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9NYWtlZmlsZS00LSNcbm5ldC84MDIxcS9NYWtlZmlsZTo1Om9iai0kKHN1YnN0IG0seSwkKENPTkZJR19WTEFOXzgwMjFRKSlcdCYjNDM7PSB2bGFuX2NvcmUub1xubmV0LzgwMjFxL01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpXHRcdCYjNDM7PSA4MDIxcS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMzYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gS2VybmVsIE1vZHVsZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgaXQgc2VlbXMgbGlrZSBgdmxhbl9jb3JlLm9gIGlzIGRlZmluaXRlbHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGVuYWJsZWQuIEFuZCwgSSBzZWUgdGhhdCBgc3Vic3QgbSx5YCB3aGljaCBtZWFucyBpdCYjMzk7cyBidWlsdC1pbiBpZiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdGFuZGFyZC4KCk5vdywgaG9sZCBvbi4uLnRoaXMgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIGZ1bmN0aW9uIGlzIGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCYjMzk7cyBhIGRpZmZlcmVudCBjb25jZXJuLCBidXQgYWxyaWdodCwgSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgpCdXQsIGEgbW9yZSBpbXBvcnRhbnQgcXVlc3Rpb24gYXJpc2VzLiBJIG5lZWQgdG8ga25vdyBpZiBhIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLCBpcyBzdGlsbCBhY2Nlc3NpYmxlIGV2ZW4gd2hlbiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGRpc2FibGVkLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludCB0byB1bmRlcnN0YW5kIGluIHRoaXMgc2NlbmFyaW8uCgpJIHRoaW5rIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgd2lsbCBiZSBpbiBgaW5jbHVkZS9saW51eC9pZl92bGFuLmhgLCBsZXQgbWUgZ28gYW5kIGNoZWNrIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmg9MTIzPXN0cnVjdCB2bGFuX3BjcHVfc3RhdHMge1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjEzNjpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0xMzctXHRcdFx0XHRcdCAgICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpO1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTI1Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjI1MzpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMjU0LVx0XHQgICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzgzNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQgZm9yIFZMQU4gRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgZmlndXJpbmcgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoZXJlJiMzOTtzIGEgc3RhdGljIGlubGluZSBmYWxsYmFjayBpZiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGRpc2FibGVkLCB3aGljaCBpcyBnb29kIGZvciBzb21lIHVzZSBjYXNlcywgYnV0IHRvIGFjdHVhbGx5ICp0ZXN0KiB0aGUgVkxBTiBmdW5jdGlvbmFsaXR5LCBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIFRoZSBjb2RlIHVzZXMgYGlzX3ZsYW5fZGV2YCwgYHZsYW5fZGV2X3ByaXZgLCBgdmxhbl9kZXZfdmxhbl9wcm90b2AsIGFuZCBgdmxhbl9kZXZfdmxhbl9pZGAgd2l0aGluIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYW5kIHRob3NlIGFyZSBhbGwgZ2F0ZWQgYnkgYW4gYCNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKWAgY29uZGl0aW9uLiBTbywgbm8gcXVlc3Rpb24sIGBWTEFOXzgwMjFRYCBnb2VzIG9uIHRoZSAmIzM0O1JlcXVpcmVkJiMzNDsgbGlzdC4KCk5vdywgaXQmIzM5O3MgcHJldHR5IG9idmlvdXMgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGEgcmVxdWlyZW1lbnQsIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGLiBBbmQgc2luY2UgdGhlIGNvZGUgaXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgdGhlbiBvYnZpb3VzbHkgYE5FVGAgaXMgbmVjZXNzYXJ5IGFzIHdlbGwuCgpUaGUgZnVuY3Rpb25zIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaGVyZSBhcHBlYXIgdG8gYmU6IGBicGZfeGRwX2ZpYl9sb29rdXBgLCBgYnBmX3NrYl9maWJfbG9va3VwYCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLgoKV2FpdCwgdGhvc2UgZmlyc3QgdHdvLCBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAsIGFyZSBCUEYgaGVscGVycy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciByZXF1aXJlZCBjb25maWdzLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBhbmQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgLCBzbyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGFib3V0IGFkZGluZyBgVkxBTl84MDIxUWAgdG8gYEVuYWJsZUNvbmZpZ3NgIG5vdy4KCkxldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiB0aGF0IGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBmdW5jdGlvbiBpcyBpbmxpbmVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byB0aGUgZmxvdyBvZiB0aGUgcHJvZ3JhbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZpYl9zZXRfZndkX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTYxOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDMtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYzo2MjA0OnN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNS1cdFx0XHRcdCAgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjI1ND1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NDAwLXNldF9md2RfcGFyYW1zOlxubmV0L2NvcmUvZmlsdGVyLmM6NjQwMTpcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbm5ldC9jb3JlL2ZpbHRlci5jLTY0MDItfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY0MDY9c3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjU1My1zZXRfZndkX3BhcmFtczpcbm5ldC9jb3JlL2ZpbHRlci5jOjY1NTQ6XHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XG5uZXQvY29yZS9maWx0ZXIuYy02NTU1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxMjMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgRklCIExvb2t1cCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byB0aGUgQlBGIEZJQiBsb29rdXAgZnVuY3Rpb25hbGl0eS4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gbm90aWNpbmcgaXMgdGhlIHByZXNlbmNlIG9mIHN0YXRpYyBmdW5jdGlvbnMuIFNpbmNlIHRoZXkmIzM5O3JlIHN0YXRpYywgdGhleSYjMzk7cmUgcHJvYmFibHkgaW5saW5lZCwgc28gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRob3NlLiBNeSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgYGJwZl94ZHBfZmliX2xvb2t1cGAsIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIEFuZCwgeWVzLCBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAgaXMgYWxzbyBzdGF0aWMuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBrZXJuZWwgY29uZmlncyBhcmUgaW52b2x2ZWQuIEl0IHNlZW1zIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIHJlbGV2YW50IGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGFkZCBgVkxBTl84MDIxUWAgdG8gYEVuYWJsZUNvbmZpZ3NgIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVkxBTiBpbnB1dCwgYW5kIGp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bGwgYWxzbyBhZGQgYElQVjZgLCBldmVuIHRob3VnaCBpdCYjMzk7cyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdC4gYEJQRl9TWVNDQUxMYCBhbHNvIGxvb2tzIGltcG9ydGFudCwgc28gdGhhdCBnb2VzIGluIGBFbmFibGVDb25maWdzYCB0b28uCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSBwYXRjaCBhZ2FpbiB0byBtYWtlIHN1cmUgSSYjMzk7bSBjYXB0dXJpbmcgZXZlcnl0aGluZy4gUmlnaHQsIGl0IGFkZHMgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MgdG8gYGJwZl9maWJfbG9va3VwYC4gSXQgbW9kaWZpZXMgdGhlIGxvb2t1cCBmdW5jdGlvbnM6IGBicGZfeGRwX2ZpYl9sb29rdXBgLCBgYnBmX3NrYl9maWJfbG9va3VwYCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLiBJdCBhbHNvIGFmZmVjdHMgYGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNgLCBhZGRzIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YCBhbmQgbW9kaWZpZXMgYGJwZl9maWJfbG9va3VwX2ZsYWdzX29rYC4KClNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgYSBjbG9zZXIgbG9vayBhcmU6Ci0gYGJwZl94ZHBfZmliX2xvb2t1cGAKLSBgYnBmX3NrYl9maWJfbG9va3VwYAotIGBicGZfaXB2NF9maWJfbG9va3VwYAotIGBicGZfaXB2Nl9maWJfbG9va3VwYAoKQWxyaWdodCwgSSB0aGluayB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIGl0LiBBcmUgdGhlcmUgYW55IG90aGVyIGhlbHBlciBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgaGVyZT8gTm8sIHRob3NlIGFyZSB0aGUgcHJpbWFyeSBvbmVzLgoKSSBzaG91bGQgdmVyaWZ5IGlmIGBicGZfZmliX2xvb2t1cF9mbGFnc19va2AgaXMgYWxzbyBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9maWJfbG9va3VwX2ZsYWdzX29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NTYyLVxubmV0L2NvcmUvZmlsdGVyLmM6NjU2MzpzdGF0aWMgYm9vbCBicGZfZmliX2xvb2t1cF9mbGFnc19vayh1MzIgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy02NTY0LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02NTc1PUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY1ODAtXG5uZXQvY29yZS9maWx0ZXIuYzo2NTgxOlx0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXG5uZXQvY29yZS9maWx0ZXIuYy02NTgyLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02NjA5PUJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjYxOC1cbm5ldC9jb3JlL2ZpbHRlci5jOjY2MTk6XHRpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTY2MjAtXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQyNAoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEZJQiBMb29rdXAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBpcyBhYm91dCB0aGUgQlBGIEZJQiBsb29rdXAgZnVuY3Rpb25hbGl0eSwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgc3RhdGljIGluIG5hdHVyZSDigJMgbm90aGluZyBkeW5hbWljIGhlcmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUga2V5IEJQRiBzeW1ib2xzIGludm9sdmVkOiBgYnBmX3hkcF9maWJfbG9va3VwYCwgYGJwZl9za2JfZmliX2xvb2t1cGAsIGBicGZfaXB2NF9maWJfbG9va3VwYCwgYW5kIGBicGZfaXB2Nl9maWJfbG9va3VwYC4gVGhlc2UgYXJlIG15IGVudHJ5IHBvaW50cy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgYWRkaW5nIFZMQU4gc3VwcG9ydCB0byBgYnBmX2ZpYl9sb29rdXBgLCBhbmQgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCBmbGFncy4gVGhpcyBtZWFucyB0aGUgY29yZSBCUEYgRklCIGxvb2t1cCBsb2dpYywgY3JpdGljYWwgZm9yIElQdjQgYW5kIElQdjYgdHJhZmZpYywgaXMgYmVpbmcgbW9kaWZpZWQuIFNpbmNlIHRoaXMgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zLCBJIG5lZWQgdG8gY2VudGVyIG15IGZ1enppbmcgZWZmb3J0cyBhcm91bmQgdGhlc2UgZW50cnkgcG9pbnRzLCBhbG9uZyB3aXRoIHRoZSBJUHY0L0lQdjYtc3BlY2lmaWMgbG9va3VwIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19WTEFOXzgwMjFRYCBpcyBlbmFibGVkIGZvciBhbnkgdGVzdGluZyBvZiB0aGUgVkxBTi1zcGVjaWZpYyBsb2dpYy4KCkkgdGhpbmsgdGhlIG5leHQgc3RlcCBpcyB0byBsYWJlbCB0aGVzZSBuZXcgZmxhZ3MgYW5kIHRoZSBwYXRjaCBpdHNlbGYgYXMgJiMzNDtzZXQtcmVzdWx0cyYjMzQ7LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl94ZHBfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfc2tiX2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX2lwdjRfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfaXB2Nl9maWJfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgVkxBTnMgaW4gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlciAoYGJwZl9maWJfbG9va3VwYCkuIEl0IGludHJvZHVjZXMgdHdvIG5ldyBmbGFnczogYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAuIFRoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgY29yZSBCUEYgRklCIGxvb2t1cCBsb2dpYyBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LCB3aGljaCBpcyByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiBGSUIgbG9va3VwIGVudHJ5IHBvaW50cyBhbmQgdGhlIElQdjQvSVB2NiBzcGVjaWZpYyBsb29rdXAgZnVuY3Rpb25zLiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIHJlcXVpcmVkIHRvIHRlc3QgdGhlIFZMQU4gc3BlY2lmaWMgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfeGRwX2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrYl9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY0X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX2lwdjZfZmliX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFZMQU5zIGluIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXIgKGBicGZfZmliX2xvb2t1cGApLiBJdCBpbnRyb2R1Y2VzIHR3byBuZXcgZmxhZ3M6IGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgLiBUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIGNvcmUgQlBGIEZJQiBsb29rdXAgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgRklCIGxvb2t1cCBlbnRyeSBwb2ludHMgYW5kIHRoZSBJUHY0L0lQdjYgc3BlY2lmaWMgbG9va3VwIGZ1bmN0aW9ucy4gYENPTkZJR19WTEFOXzgwMjFRYCBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBWTEFOIHNwZWNpZmljIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6Mzk6NDEuMDM1MDQ2ODYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc1NzgwNDI1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2NF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2Nl9maWJfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyIChgYnBmX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGZsYWdzOiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYC4gVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBjb3JlIEJQRiBGSUIgbG9va3VwIGxvZ2ljIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIEZJQiBsb29rdXAgZW50cnkgcG9pbnRzIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIGxvb2t1cCBmdW5jdGlvbnMuIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgVkxBTiBzcGVjaWZpYyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6Mzk6NDEuMDM1MDUyODAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc1NDAzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMDIzMTE2NWM0ZWJmYWJlYzk5YmM1Nzk0NmEyZThjNjVmZGNlMmNiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDQgMDk6Mzk6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbkBAIC0zNTMyLDYgKzM1MzIsNDUgQEAgdW5pb24gYnBmX2F0dHIge1xcbiAgKlxcdFxcdFxcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVxcdTAwM2VtYXJrIGZvciB0aGUgZmliIGxvb2t1cC5cXG4gICpcXHRcXHRcXHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXFxuICAqXFx0XFx0XFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxcbisgKlxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXFxuKyAqXFx0XFx0XFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxcbisgKlxcdFxcdFxcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxcbisgKlxcdFxcdFxcdCpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJIGZyb21cXG4rICpcXHRcXHRcXHR0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotXFx1MDAzZWlmaW5kZXggd2l0aCB0aGVcXG4rICpcXHRcXHRcXHRwYXJlbnQncyBpZmluZGV4LiAqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcXG4rICpcXHRcXHRcXHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXFxuKyAqXFx0XFx0XFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXFx1MDAzZXNtYWMgaXNcXG4rICpcXHRcXHRcXHR0aGUgVkxBTiBkZXZpY2UncyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxcbisgKlxcdFxcdFxcdHBhcmVudCdzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxcbisgKlxcdFxcdFxcdGlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSxcXG4rICpcXHRcXHRcXHR0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXNcXG4rICpcXHRcXHRcXHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcXG4rICpcXHRcXHRcXHQqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleFxcbisgKlxcdFxcdFxcdGxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0XFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSdzIG93blxcbisgKlxcdFxcdFxcdGlmaW5kZXguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcXG4rICpcXHRcXHRcXHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxcbisgKlxcdFxcdFxcdHRoZSBoZWxwZXIncyBleGlzdGluZyBiZWhhdmlvdXIsIHNvIGEgZnJhZy1uZWVkZWQgcmVzdWx0XFxuKyAqXFx0XFx0XFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVxcdTAwM2VtdHVfcmVzdWx0LlxcbisgKlxcdFxcdFxcdFRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zXFxuKyAqXFx0XFx0XFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXFxuKyAqXFx0XFx0XFx0ZGV2aWNlIGRpcmVjdGx5LlxcbisgKlxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXFxuKyAqXFx0XFx0XFx0VHJlYXQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0lcXG4rICpcXHRcXHRcXHRhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzc1xcbisgKlxcdFxcdFxcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcXG4rICpcXHRcXHRcXHRvbiAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2ZcXG4rICpcXHRcXHRcXHQqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBtdXN0IGJlXFxuKyAqXFx0XFx0XFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxcbisgKlxcdFxcdFxcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOXFxuKyAqXFx0XFx0XFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxcbisgKlxcdFxcdFxcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJ3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXFxuKyAqXFx0XFx0XFx0dGFnLCBhIGRvd24gZGV2aWNlLCBvciBvbmUgaW4gYW5vdGhlciBuYW1lc3BhY2UgcmV0dXJuc1xcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cXG4rICpcXHRcXHRcXHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xcbisgKlxcdFxcdFxcdGZsYWcgZm9yIHByaW9yaXR5LXRhZ2dlZCBmcmFtZXMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxcbisgKlxcdFxcdFxcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cXG4gICpcXG4gICpcXHRcXHQqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvclxcbiAgKlxcdFxcdCoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLlxcbkBAIC03MzI3LDYgKzczNjYsOCBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZJQl9MT09LVVBfVEJJRCAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyAzKSxcXG4gXFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA0KSxcXG4gXFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA1KSxcXG4rXFx0QlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA2KSxcXG4rXFx0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcXHUwMDNjXFx1MDAzYyA3KSxcXG4gfTtcXG4gXFxuIGVudW0ge1xcbkBAIC03MzQwLDYgKzczODEsNyBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqL1xcbiBcXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cXG4rXFx0QlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsIC8qIFZMQU4gZWdyZXNzLCBwYXJlbnQgdW5yZXNvbHZhYmxlICovXFxuIH07XFxuIFxcbiBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xcbkBAIC03MzkzLDcgKzc0MzUsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcXG4gXFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHtcXG4tXFx0XFx0XFx0Lyogb3V0cHV0ICovXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxcbitcXHRcXHRcXHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxcbitcXHRcXHRcXHQgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGhcXG4rXFx0XFx0XFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXFxuK1xcdFxcdFxcdCAqIHRoZSBsb29rdXAgYnkuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRfX2JlMTZcXHRoX3ZsYW5fcHJvdG87XFxuIFxcdFxcdFxcdF9fYmUxNlxcdGhfdmxhbl9UQ0k7XFxuIFxcdFxcdH07XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5pbmRleCAyZTk2YjRiODQ3Y2UxMi4uMGVhMzYyZmE0Mjg3ZTMgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC02MjAxLDIxICs2MjAxLDYwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcXG4gI2VuZGlmXFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4tc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLCB1MzIgbXR1KVxcbitzdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4rXFx0XFx0XFx0XFx0ICB1MzIgZmxhZ3MsIHUzMiBtdHUsIHUzMiBpbl9pZmluZGV4KVxcbiB7XFxuIFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSA9IDA7XFxuIFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvID0gMDtcXG4rXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKVxcbitcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXFx1MDAyNlxcdTAwMjYgaXNfdmxhbl9kZXYoZGV2KSkge1xcbitcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9wcml2KGRldiktXFx1MDAzZXJlYWxfZGV2O1xcbitcXG4rXFx0XFx0aWYgKCFpc192bGFuX2RldihyZWFsX2RldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG5ldF9lcShkZXZfbmV0KHJlYWxfZGV2KSwgZGV2X25ldChkZXYpKSkge1xcbitcXHRcXHRcXHRwYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90byA9IHZsYW5fZGV2X3ZsYW5fcHJvdG8oZGV2KTtcXG4rXFx0XFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModmxhbl9kZXZfdmxhbl9pZChkZXYpKTtcXG4rXFx0XFx0XFx0cGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gcmVhbF9kZXYtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhcmFtcy1cXHUwMDNlaWZpbmRleCA9IGluX2lmaW5kZXg7XFxuK1xcdFxcdFxcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuKyNlbmRpZlxcbitcXG4gXFx0aWYgKG10dSlcXG4gXFx0XFx0cGFyYW1zLVxcdTAwM2VtdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi9cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK1xcbitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zKVxcbit7XFxuK1xcdF9fYmUxNiBwcm90byA9IHBhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7XFxuK1xcdHUxNiB2aWQ7XFxuK1xcbitcXHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpIFxcdTAwMjZcXHUwMDI2IHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFBRCkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0dmlkID0gbnRvaHMocGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJKSBcXHUwMDI2IFZMQU5fVklEX01BU0s7XFxuK1xcdHZsYW5fZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgcHJvdG8sIHZpZCk7XFxuK1xcdGlmICghdmxhbl9kZXYgfHwgISh2bGFuX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApIHx8XFxuK1xcdCAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiB2bGFuX2RldjtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbiBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0XFx0XFx0ICAgICAgIHUzMiBmbGFncywgYm9vbCBjaGVja19tdHUpXFxuIHtcXG4rXFx0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDtcXG4gXFx0c3RydWN0IGZpYl9uaF9jb21tb24gKm5oYztcXG4gXFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xcbkBAIC02MjI5LDYgKzYyNjgsMTQgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdGlmICh1bmxpa2VseSghZGV2KSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XFxuK1xcdFxcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGRldikpXFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKGRldik7XFxuK1xcdFxcdGlmICghZGV2KVxcbitcXHRcXHRcXHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIHZlcmlmeSBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb24gdGhpcyBpbnRlcmZhY2UgKi9cXG4gXFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbiBcXHRpZiAodW5saWtlbHkoIWluX2RldiB8fCAhSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkpXFxuQEAgLTYyMzgsNyArNjI4NSwxMSBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0XFx0Zmw0LmZsb3dpNF9paWYgPSAxO1xcbiBcXHRcXHRmbDQuZmxvd2k0X29pZiA9IHBhcmFtcy1cXHUwMDNlaWZpbmRleDtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0Zmw0LmZsb3dpNF9paWYgPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGRldi1cXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxcbitcXHRcXHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRmbDQuZmxvd2k0X2lpZiA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4gXFx0XFx0Zmw0LmZsb3dpNF9vaWYgPSAwO1xcbiBcXHR9XFxuIFxcdGZsNC5mbG93aTRfZHNjcCA9IGluZXRfZHNmaWVsZF90b19kc2NwKHBhcmFtcy1cXHUwMDNldG9zKTtcXG5AQCAtNjM0Nyw3ICs2Mzk4LDcgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdG1lbWNweShwYXJhbXMtXFx1MDAzZXNtYWMsIGRldi1cXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcXG4gXFxuIHNldF9md2RfcGFyYW1zOlxcbi1cXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7XFxuK1xcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTYzNTcsNiArNjQwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiB7XFxuIFxcdHN0cnVjdCBpbjZfYWRkciAqc3JjID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtXFx1MDAzZWlwdjZfc3JjO1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVxcdTAwM2VpcHY2X2RzdDtcXG4rXFx0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdHN0cnVjdCBmaWI2X3Jlc3VsdCByZXMgPSB7fTtcXG4gXFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuQEAgLTYzNzQsNiArNjQyNiwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0aWYgKHVubGlrZWx5KCFkZXYpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcXG4rXFx0XFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XFxuK1xcdFxcdGlmIChJU19FUlIoZGV2KSlcXG4rXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcXG4rXFx0XFx0aWYgKCFkZXYpXFxuK1xcdFxcdFxcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDtcXG4rXFx0fVxcbitcXG4gXFx0aWRldiA9IF9faW42X2Rldl9nZXRfc2FmZWx5KGRldik7XFxuIFxcdGlmICh1bmxpa2VseSghaWRldiB8fCAhUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5mb3J3YXJkaW5nKSkpXFxuIFxcdFxcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRDtcXG5AQCAtNjM4Miw3ICs2NDQyLDEyIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiBcXHRcXHRmbDYuZmxvd2k2X2lpZiA9IDE7XFxuIFxcdFxcdG9pZiA9IGZsNi5mbG93aTZfb2lmID0gcGFyYW1zLVxcdTAwM2VpZmluZGV4O1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRvaWYgPSBmbDYuZmxvd2k2X2lpZiA9IHBhcmFtcy1cXHUwMDNlaWZpbmRleDtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZGV2LVxcdTAwM2VpZmluZGV4LCBub3QgcGFyYW1zLVxcdTAwM2VpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlXFxuK1xcdFxcdCAqIHJlc29sdmVkIGRldiB0byBhIHN1YmludGVyZmFjZSBhYm92ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG9pZiA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFx0XFx0Zmw2LmZsb3dpNl9paWYgPSBvaWY7XFxuIFxcdFxcdGZsNi5mbG93aTZfb2lmID0gMDtcXG4gXFx0XFx0c3RyaWN0ID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjtcXG4gXFx0fVxcbkBAIC02NDg2LDEzICs2NTUxLDI2IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiBcXHRtZW1jcHkocGFyYW1zLVxcdTAwM2VzbWFjLCBkZXYtXFx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XFxuIFxcbiBzZXRfZndkX3BhcmFtczpcXG4tXFx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xcbitcXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XFxuIH1cXG4gI2VuZGlmXFxuIFxcbiAjZGVmaW5lIEJQRl9GSUJfTE9PS1VQX01BU0sgKEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IFxcXFxcXG4gXFx0XFx0XFx0ICAgICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8IFxcXFxcXG4tXFx0XFx0XFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKVxcbitcXHRcXHRcXHQgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUksgfCBcXFxcXFxuK1xcdFxcdFxcdCAgICAgQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpXFxuK1xcbitzdGF0aWMgYm9vbCBicGZfZmliX2xvb2t1cF9mbGFnc19vayh1MzIgZmxhZ3MpXFxuK3tcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICgoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGZsYWdzIFxcdTAwMjYgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4gXFxuIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbiBcXHQgICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKiwgcGFyYW1zLCBpbnQsIHBsZW4sIHUzMiwgZmxhZ3MpXFxuQEAgLTY1MDAsNyArNjU3OCw3IEBAIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbiBcXHRpZiAocGxlbiBcXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcXG4rXFx0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0c3dpdGNoIChwYXJhbXMtXFx1MDAzZWZhbWlseSkge1xcbkBAIC02NTM4LDcgKzY2MTYsMTAgQEAgQlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4gXFx0aWYgKHBsZW4gXFx1MDAzYyBzaXplb2YoKnBhcmFtcykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXFxuK1xcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKHBhcmFtcy1cXHUwMDNldG90X2xlbilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbkBAIC0zNTMyLDYgKzM1MzIsNDUgQEAgdW5pb24gYnBmX2F0dHIge1xcbiAgKlxcdFxcdFxcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVxcdTAwM2VtYXJrIGZvciB0aGUgZmliIGxvb2t1cC5cXG4gICpcXHRcXHRcXHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXFxuICAqXFx0XFx0XFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxcbisgKlxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXFxuKyAqXFx0XFx0XFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxcbisgKlxcdFxcdFxcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxcbisgKlxcdFxcdFxcdCpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJIGZyb21cXG4rICpcXHRcXHRcXHR0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotXFx1MDAzZWlmaW5kZXggd2l0aCB0aGVcXG4rICpcXHRcXHRcXHRwYXJlbnQncyBpZmluZGV4LiAqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcXG4rICpcXHRcXHRcXHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXFxuKyAqXFx0XFx0XFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXFx1MDAzZXNtYWMgaXNcXG4rICpcXHRcXHRcXHR0aGUgVkxBTiBkZXZpY2UncyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxcbisgKlxcdFxcdFxcdHBhcmVudCdzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxcbisgKlxcdFxcdFxcdGlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSxcXG4rICpcXHRcXHRcXHR0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXNcXG4rICpcXHRcXHRcXHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcXG4rICpcXHRcXHRcXHQqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleFxcbisgKlxcdFxcdFxcdGxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0XFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSdzIG93blxcbisgKlxcdFxcdFxcdGlmaW5kZXguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcXG4rICpcXHRcXHRcXHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxcbisgKlxcdFxcdFxcdHRoZSBoZWxwZXIncyBleGlzdGluZyBiZWhhdmlvdXIsIHNvIGEgZnJhZy1uZWVkZWQgcmVzdWx0XFxuKyAqXFx0XFx0XFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVxcdTAwM2VtdHVfcmVzdWx0LlxcbisgKlxcdFxcdFxcdFRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zXFxuKyAqXFx0XFx0XFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXFxuKyAqXFx0XFx0XFx0ZGV2aWNlIGRpcmVjdGx5LlxcbisgKlxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXFxuKyAqXFx0XFx0XFx0VHJlYXQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0lcXG4rICpcXHRcXHRcXHRhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzc1xcbisgKlxcdFxcdFxcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcXG4rICpcXHRcXHRcXHRvbiAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2ZcXG4rICpcXHRcXHRcXHQqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBtdXN0IGJlXFxuKyAqXFx0XFx0XFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxcbisgKlxcdFxcdFxcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOXFxuKyAqXFx0XFx0XFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxcbisgKlxcdFxcdFxcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJ3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXFxuKyAqXFx0XFx0XFx0dGFnLCBhIGRvd24gZGV2aWNlLCBvciBvbmUgaW4gYW5vdGhlciBuYW1lc3BhY2UgcmV0dXJuc1xcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cXG4rICpcXHRcXHRcXHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xcbisgKlxcdFxcdFxcdGZsYWcgZm9yIHByaW9yaXR5LXRhZ2dlZCBmcmFtZXMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxcbisgKlxcdFxcdFxcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cXG4gICpcXG4gICpcXHRcXHQqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvclxcbiAgKlxcdFxcdCoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLlxcbkBAIC03MzI3LDYgKzczNjYsOCBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZJQl9MT09LVVBfVEJJRCAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyAzKSxcXG4gXFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA0KSxcXG4gXFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA1KSxcXG4rXFx0QlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA2KSxcXG4rXFx0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcXHUwMDNjXFx1MDAzYyA3KSxcXG4gfTtcXG4gXFxuIGVudW0ge1xcbkBAIC03MzQwLDYgKzczODEsNyBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqL1xcbiBcXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cXG4rXFx0QlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsIC8qIFZMQU4gZWdyZXNzLCBwYXJlbnQgdW5yZXNvbHZhYmxlICovXFxuIH07XFxuIFxcbiBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xcbkBAIC03MzkzLDcgKzc0MzUsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcXG4gXFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHtcXG4tXFx0XFx0XFx0Lyogb3V0cHV0ICovXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxcbitcXHRcXHRcXHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxcbitcXHRcXHRcXHQgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGhcXG4rXFx0XFx0XFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXFxuK1xcdFxcdFxcdCAqIHRoZSBsb29rdXAgYnkuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRfX2JlMTZcXHRoX3ZsYW5fcHJvdG87XFxuIFxcdFxcdFxcdF9fYmUxNlxcdGhfdmxhbl9UQ0k7XFxuIFxcdFxcdH07XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xcbmluZGV4IGJkNzY1ODk1ODAwNDFmLi4xOGI2ZmRlY2EzODJhOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcXG5AQCAtMiw2ICsyLDcgQEBcXG4gLyogQ29weXJpZ2h0IChjKSAyMDIzIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfZXRoZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lmLmhcXHUwMDNlXFxuIFxcbkBAIC0yMyw2ICsyNCw3IEBAXFxuICNkZWZpbmUgSVBWNF9UQklEX0FERFJcXHRcXHRcXFwiMTcyLjAuMC4yNTRcXFwiXFxuICNkZWZpbmUgSVBWNF9UQklEX05FVFxcdFxcdFxcXCIxNzIuMC4wLjBcXFwiXFxuICNkZWZpbmUgSVBWNF9UQklEX0RTVFxcdFxcdFxcXCIxNzIuMC4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9UQklEX05PTkVJR0hfRFNUXFx0XFxcIjE3Mi4wLjAuNVxcXCJcXG4gI2RlZmluZSBJUFY2X1RCSURfQUREUlxcdFxcdFxcXCJmZDAwOjpGRkZGXFxcIlxcbiAjZGVmaW5lIElQVjZfVEJJRF9ORVRcXHRcXHRcXFwiZmQwMDo6XFxcIlxcbiAjZGVmaW5lIElQVjZfVEJJRF9EU1RcXHRcXHRcXFwiZmQwMDo6MlxcXCJcXG5AQCAtMzcsNiArMzksNDEgQEBcXG4gI2RlZmluZSBJUFY2X0xPQ0FMXFx0XFx0XFxcImZkMDE6OjNcXFwiXFxuICNkZWZpbmUgSVBWNl9HVzFcXHRcXHRcXFwiZmQwMTo6MVxcXCJcXG4gI2RlZmluZSBJUFY2X0dXMlxcdFxcdFxcXCJmZDAxOjoyXFxcIlxcbisjZGVmaW5lIFZMQU5fSURcXHRcXHRcXHQxMDBcXG4rI2RlZmluZSBWTEFOX0lGQUNFXFx0XFx0XFxcInZldGgxLjEwMFxcXCJcXG4rI2RlZmluZSBWTEFOX0lEX0RPV05cXHRcXHQxMDJcXG4rI2RlZmluZSBWTEFOX0lGQUNFX0RPV05cXHRcXHRcXFwidmV0aDEuMTAyXFxcIlxcbisjZGVmaW5lIFFJTlFfT1VURVJfSUZBQ0VcXHRcXFwidmV0aDEuMjAwXFxcIlxcbisjZGVmaW5lIFFJTlFfSU5ORVJfSUZBQ0VcXHRcXFwidmV0aDEuMjAwLjMwMFxcXCJcXG4rI2RlZmluZSBWTEFOX1RBQkxFXFx0XFx0XFxcIjMwMFxcXCJcXG4rI2RlZmluZSBJUFY0X1ZMQU5fSUZBQ0VfQUREUlxcdFxcXCIxMC41LjAuMjU0XFxcIlxcbisjZGVmaW5lIElQVjRfVkxBTl9FR1JFU1NfRFNUXFx0XFxcIjEwLjUuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfUUlOUV9EU1RcXHRcXHRcXFwiMTAuNy4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX0RTVFxcdFxcdFxcXCIxMC42LjAuMlxcXCJcXG4rI2RlZmluZSBJUFY0X1ZMQU5fR1dcXHRcXHRcXFwiMTAuNS4wLjFcXFwiXFxuKyNkZWZpbmUgSVBWNl9WTEFOX0lGQUNFX0FERFJcXHRcXFwiZmQwMjo6MjU0XFxcIlxcbisjZGVmaW5lIElQVjZfVkxBTl9FR1JFU1NfRFNUXFx0XFxcImZkMDI6OjJcXFwiXFxuKyNkZWZpbmUgSVBWNl9WTEFOX0RTVFxcdFxcdFxcXCJmZDAzOjoyXFxcIlxcbisjZGVmaW5lIElQVjZfVkxBTl9HV1xcdFxcdFxcXCJmZDAyOjoxXFxcIlxcbisjZGVmaW5lIFZMQU5fVklEX1VOVVNFRFxcdFxcdDk5OVxcbisjZGVmaW5lIFZSRl9JRkFDRVxcdFxcdFxcXCJ2cmYtYmx1ZVxcXCJcXG4rI2RlZmluZSBWUkZfVEFCTEVcXHRcXHRcXFwiMTAwMFxcXCJcXG4rI2RlZmluZSBWUkZfVkxBTl9JRFxcdFxcdDEwMVxcbisjZGVmaW5lIFZSRl9WTEFOX0lGQUNFXFx0XFx0XFxcInZldGgxLjEwMVxcXCJcXG4rI2RlZmluZSBJUFY0X1ZSRl9JRkFDRV9BRERSXFx0XFxcIjEwLjguMC4yNTRcXFwiXFxuKyNkZWZpbmUgSVBWNF9WUkZfR1dcXHRcXHRcXFwiMTAuOC4wLjFcXFwiXFxuKyNkZWZpbmUgSVBWNF9WUkZfRFNUXFx0XFx0XFxcIjEwLjkuMC4yXFxcIlxcbisjZGVmaW5lIFRCSURfVkxBTl9JRFxcdFxcdDUwXFxuKyNkZWZpbmUgVEJJRF9WTEFOX0lGQUNFXFx0XFx0XFxcInZldGgyLjUwXFxcIlxcbisjZGVmaW5lIElQVjRfVEJJRF9WTEFOX0RTVFxcdFxcXCIxNzIuMi4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9CT05EX1ZMQU5fRFNUXFx0XFxcIjEwLjExLjAuMlxcXCJcXG4rI2RlZmluZSBJUFY0X1ZMQU5fTVRVX0RTVFxcdFxcXCIxMC41LjkuMlxcXCJcXG4rI2RlZmluZSBRSU5RX0FEX1ZMQU5fSURcXHRcXHQyMDBcXG4rI2RlZmluZSBRSU5RX0lOTkVSX1ZMQU5fSURcXHQzMDBcXG4rI2RlZmluZSBCT05EX0lGQUNFXFx0XFx0XFxcImJvbmQ5OVxcXCJcXG4rI2RlZmluZSBCT05EX1BPUlRcXHRcXHRcXFwidmV0aDNcXFwiXFxuKyNkZWZpbmUgQk9ORF9QT1JUX1BFRVJcXHRcXHRcXFwidmV0aDRcXFwiXFxuKyNkZWZpbmUgQk9ORF9WTEFOX0lEXFx0XFx0NTAwXFxuICNkZWZpbmUgRE1BQ1xcdFxcdFxcdFxcXCIxMToxMToxMToxMToxMToxMVxcXCJcXG4gI2RlZmluZSBETUFDX0lOSVQgeyAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCB9XFxuICNkZWZpbmUgRE1BQzJcXHRcXHRcXHRcXFwiMDE6MDE6MDE6MDE6MDE6MDFcXFwiXFxuQEAgLTUyLDYgKzg5LDE3IEBAIHN0cnVjdCBmaWJfbG9va3VwX3Rlc3Qge1xcbiBcXHRfX3UzMiB0YmlkO1xcbiBcXHRfX3U4IGRtYWNbNl07XFxuIFxcdF9fdTMyIG1hcms7XFxuK1xcdC8qXFxuK1xcdCAqIGlucHV0IHRhZyB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ7IGV4cGVjdGVkIG91dHB1dCB0YWdcXG4rXFx0ICogd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOIChjaGVja2VkIHdoZW4gY2hlY2tfdmxhbiBpcyBzZXQpXFxuK1xcdCAqL1xcbitcXHRfX3UxNiB2bGFuX3Byb3RvO1xcbitcXHRfX3UxNiB2bGFuX2lkO1xcbitcXHRib29sIGNoZWNrX3ZsYW47XFxuK1xcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX2RldjsgLyogZXhwZWN0ZWQgcGFyYW1zLVxcdTAwM2VpZmluZGV4IGFmdGVyIGxvb2t1cCAqL1xcbitcXHRjb25zdCBjaGFyICppaWY7XFx0ICAvKiBvdmVycmlkZSB0aGUgZGVmYXVsdCB2ZXRoMSBpbnB1dCBkZXZpY2UgKi9cXG4rXFx0X191MTYgdG90X2xlbjtcXHRcXHQgIC8qIHRyaWdnZXJzIHRoZSBpbi1sb29rdXAgbXR1IGNoZWNrIHdoZW4gc2V0ICovXFxuK1xcdF9fdTE2IGV4cGVjdGVkX210dTtcXHQgIC8qIGV4cGVjdGVkIG10dV9yZXN1bHQgKHVuaW9uIHdpdGggdG90X2xlbikgKi9cXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XFxuQEAgLTc5LDYgKzEyNywxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xcbiBcXHQgIC5kYWRkciA9IElQVjRfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuIFxcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsIC50YmlkID0gMTAwLFxcbiBcXHQgIC5kbWFjID0gRE1BQ19JTklUMiwgfSxcXG4rXFx0LypcXG4rXFx0ICogQW4gZXJyb3IgdGhhdCByZXR1cm5zIGFmdGVyIHRoZSBlZ3Jlc3MgZGV2aWNlIGlzIHJlc29sdmVkIG11c3RcXG4rXFx0ICogcmVwb3J0IHRoZSBlZ3Jlc3MgaWZpbmRleCwgbm90IHRoZSBpbnB1dC4gVGhpcyByb3V0ZXMgZnJvbSBpbnB1dFxcbitcXHQgKiB2ZXRoMSB2aWEgdmV0aDIgKHRhYmxlIDEwMCkgdG8gYSBkc3Qgd2l0aCBubyBuZWlnaGJvdXIsIHNvXFxuK1xcdCAqIGlucHV0ICE9IGVncmVzcywgcGlubmluZyBOT19ORUlHSCB0byB0aGUgZWdyZXNzIGRldmljZS5cXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBOT19ORUlHSCByZXBvcnRzIHRoZSBlZ3Jlc3MgaWZpbmRleCwgbm90IHRoZSBpbnB1dFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9UQklEX05PTkVJR0hfRFNULFxcbitcXHQgIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgyXFxcIiwgfSxcXG4gXFx0eyAuZGVzYyA9IFxcXCJJUHY2IFRCSUQgbG9va3VwIGZhaWx1cmVcXFwiLFxcbiBcXHQgIC5kYWRkciA9IElQVjZfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcXG4gXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCxcXG5AQCAtMTQyLDYgKzIwMSwyMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHtcXG4gXFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNl9HVzEsXFxuIFxcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuIFxcdCAgLm1hcmsgPSBNQVJLLCB9LFxcbitcXHQvKiB2bGFuIGVncmVzcyByZXNvbHV0aW9uICovXFxuK1xcdC8qXFxuK1xcdCAqIEludmFyaWFudCB0aGUgVkxBTi1lZ3Jlc3MgYXJtcyBqb2ludGx5IGVuZm9yY2U6IGFcXG4rXFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiBTVUNDRVNTIGFsd2F5cyBjYXJyaWVzIGEgcGh5c2ljYWwsXFxuK1xcdCAqIHhtaXQtY2FwYWJsZSBpZmluZGV4OyBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlXFxuK1xcdCAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZVxcbitcXHQgKiBRaW5RIGFuZCBmb3JlaWduLW5ldG5zIGFybXMgcGluIFZMQU5fRkFJTFVSRSB3aXRoIHBhcmFtcy1cXHUwMDNlaWZpbmRleFxcbitcXHQgKiBsZWZ0IGF0IHRoZSBpbnB1dCwgc28gYSByZWdyZXNzaW9uIHRvIGJlc3QtZWZmb3J0IChTVUNDRVNTICsgdGhlXFxuK1xcdCAqIFZMQU4gaWZpbmRleCkgZmFpbHMgb25lLlxcbitcXHQgKi9cXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBubyBmbGFnXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdC8qXFxuK1xcdCAqIHNrYiBwYXRoIHdpdGhvdXQgdG90X2xlbjogbXR1X3Jlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UncyBtdHVcXG4rXFx0ICogKDE0MDApLCBub3QgdGhlIHBhcmVudCdzICgxNTAwKVxcbitcXHQgKi9cXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBza2ItcGF0aCBtdHUgaXMgdGhlIFZMQU4gZGV2aWNlJ3Mgd2l0aG91dCB0aGUgZmxhZ1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcywgZmxhZyBzZXQgYnV0IGVncmVzcyBpcyBub3QgYSBWTEFOXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X05VRF9GQUlMRURfQUREUiwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBRaW5RIG5vdCByZWR1Y2libGUgKFZMQU5fRkFJTFVSRSlcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsXFxuK1xcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9RSU5RX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gUUlOUV9JTk5FUl9JRkFDRSwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY2IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTlxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2VcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOLFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzIGluIE9VVFBVVCBtb2RlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAuaWlmID0gVkxBTl9JRkFDRSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfT1VUUFVUIHwgQlBGX0ZJQl9MT09LVVBfVkxBTiB8XFxuK1xcdFxcdFxcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzIG92ZXIgYSBib25kXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X0JPTkRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBCT05EX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9UQklEX1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklEIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudGJpZCA9IDEwMCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgyXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVEJJRF9WTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLnRvdF9sZW4gPSA1MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBGUkFHX05FRURFRCByZXBvcnRzIG10dSwgc3dhcCB1bndyaXR0ZW5cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCxcXG4rXFx0ICAudG90X2xlbiA9IDE0MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxcbitcXHQvKiB2bGFuIHRhZyBhcyBsb29rdXAgaW5wdXQgKi9cXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIG5vIGZsYWdcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQgYW5kIGVncmVzcyBjb21iaW5lZFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIixcXG4rXFx0ICAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIG5laWdoYm91ciByZXNvbHZlZCBvbiB0aGUgcm91dGVcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBzdWJpbnRlcmZhY2VcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX3NyYyA9IElQVjRfVkxBTl9JRkFDRV9BRERSLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU1JDIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0LypcXG4rXFx0ICogVlJGOiB0aGUgcmVzb2x2ZWQgc3ViaW50ZXJmYWNlIGlzIGVuc2xhdmVkLCBzbyB0aGUgbDNtZGV2IHJ1bGVcXG4rXFx0ICogKGZ1bGwgbG9va3VwKSBhbmQgbDNtZGV2X2ZpYl90YWJsZV9yY3UoKSAoRElSRUNUKSBtdXN0IHNlbGVjdFxcbitcXHQgKiB0aGUgVlJGIHRhYmxlIGZyb20gdGhlIHJlc29sdmVkIGluZ3Jlc3NcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBWUkYgc3ViaW50ZXJmYWNlLCBubyBmbGFnXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgVlJGIHRhYmxlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVlJGX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVlJGX1ZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBESVJFQ1QgdXNlcyBWUkYgdGFibGUgZnJvbSByZXNvbHZlZCBpbmdyZXNzXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVlJGX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVlJGX1ZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfFxcbitcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSxcXG4rXFx0LypcXG4rXFx0ICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbFxcbitcXHQgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmVcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IDB4MTIzNCwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd25cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSURfRE9XTiwgfSxcXG4rXFx0LypcXG4rXFx0ICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzXFxuK1xcdCAqIHdpdGggZm9yd2FyZGluZyBvZmYgRldEX0RJU0FCTEVEIChub3QgTk9UX0ZXREVEKSBwcm92ZXMgdGhlIHRhZ1xcbitcXHQgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3NcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCA4MDIuMWFkIHRhZ1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFBRCwgLnZsYW5faWQgPSBRSU5RX0FEX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gMHhlMDAwIHwgVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIGlubmVyIFFpblEgZGV2aWNlIGZyb20gVkxBTiBpZmluZGV4XFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXFxuK1xcdCAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LFxcbitcXHQvKlxcbitcXHQgKiBib25kaW5nOiB0aGUgVkxBTnMgbGl2ZSBvbiB0aGUgbWFzdGVyLCBhcyBvbiByZWNlaXZlLCB3aGVyZSB0aGVcXG4rXFx0ICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydFxcbitcXHQgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cylcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBtYXN0ZXIgcmVzb2x2ZXNcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcXG4rXFx0ICAuaWlmID0gQk9ORF9JRkFDRSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBwb3J0IGRvZXMgbm90IG1hdGNoXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuK1xcdCAgLmlpZiA9IEJPTkRfUE9SVCwgLmV4cGVjdGVkX2RldiA9IEJPTkRfUE9SVCwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY2IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjYgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcInVua25vd24gZmxhZyBiaXQgcmVqZWN0ZWRcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSAoMSBcXHUwMDNjXFx1MDAzYyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCByZWplY3RlZCB3aXRoIFRCSURcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXFxuQEAgLTIwNCw2ICs0NzUsMTA1IEBAIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZClcXG4gXFx0U1lTKGZhaWwsIFxcXCJpcCBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlc1xcXCIsIE1BUkssIE1BUktfVEFCTEUpO1xcbiBcXHRTWVMoZmFpbCwgXFxcImlwIC02IHJ1bGUgYWRkIHByaW8gMiBmd21hcmsgJWQgbG9va3VwICVzXFxcIiwgTUFSSywgTUFSS19UQUJMRSk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZFxcbitcXHQgKiB0YWctYXMtaW5wdXQsIGEgUWluUSBzdGFjaywgYW5kIGFuIGlpZiBydWxlIHNvIHRoZSBpbnB1dCB0ZXN0c1xcbitcXHQgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy5cXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFxcXCIsXFxuK1xcdCAgICBWTEFOX0lGQUNFLCBWTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBWTEFOX0lGQUNFKTtcXG4rXFx0LypcXG4rXFx0ICogbG93ZXIgdGhhbiB0aGUgdmV0aDEgcGFyZW50ICgxNTAwKTogdGhlIHNrYi1wYXRoIG10dSBjaGVjayB1c2VzIHRoZVxcbitcXHQgKiBGSUIgcmVzdWx0IChWTEFOKSBkZXZpY2UsIHNvIG10dV9yZXN1bHQgaXMgdGhpcyB2YWx1ZSB3aXRoIG9yXFxuK1xcdCAqIHdpdGhvdXQgdGhlIGVncmVzcyBzd2FwLCB3aGljaCB0d28gYXJtcyBiZWxvdyBwaW5cXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIG10dSAxNDAwXFxcIiwgVkxBTl9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXFxcIiwgSVBWNF9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZFxcXCIsIElQVjZfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWxcXG4rXFx0ICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApXFxuK1xcdCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcXFwiLFxcbitcXHQgICAgVkxBTl9JRkFDRV9ET1dOLCBWTEFOX0lEX0RPV04pO1xcbitcXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9cXFwiIFZMQU5fSUZBQ0UgXFxcIi9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXFxcIiBWTEFOX0lGQUNFIFxcXCIuZm9yd2FyZGluZylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9cXFwiIFZMQU5fSUZBQ0UgXFxcIi9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY2LmNvbmYuXFxcIiBWTEFOX0lGQUNFIFxcXCIuZm9yd2FyZGluZylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIHByb3RvIDgwMi4xYWQgaWQgMjAwXFxcIixcXG4rXFx0ICAgIFFJTlFfT1VURVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcyB0eXBlIHZsYW4gaWQgMzAwXFxcIixcXG4rXFx0ICAgIFFJTlFfT1VURVJfSUZBQ0UsIFFJTlFfSU5ORVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIFFJTlFfT1VURVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIFFJTlFfSU5ORVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXNcXFwiLCBJUFY0X1FJTlFfRFNULCBRSU5RX0lOTkVSX0lGQUNFKTtcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkICVzLzMyIHZpYSAlc1xcXCIsIElQVjRfVkxBTl9EU1QsIElQVjRfR1cxKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzXFxcIixcXG4rXFx0ICAgIFZMQU5fVEFCTEUsIElQVjRfVkxBTl9EU1QsIElQVjRfVkxBTl9HVyk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcXFwiLCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCAtNiByb3V0ZSBhZGQgJXMvMTI4IHZpYSAlc1xcXCIsIElQVjZfVkxBTl9EU1QsIElQVjZfR1cxKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlc1xcXCIsXFxuK1xcdCAgICBWTEFOX1RBQkxFLCBJUFY2X1ZMQU5fRFNULCBJUFY2X1ZMQU5fR1cpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIC02IHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXFxcIiwgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7XFxuK1xcbitcXHQvKiBhIGJvbmQgd2l0aCBvbmUgcG9ydCBhbmQgYSBWTEFOIG9uIHRoZSBib25kICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgJXMgdHlwZSBib25kXFxcIiwgQk9ORF9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgJXMgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlc1xcXCIsIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0ICVzIG1hc3RlciAlc1xcXCIsIEJPTkRfUE9SVCwgQk9ORF9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgQk9ORF9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgQk9ORF9QT1JUKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMuJWQgdHlwZSB2bGFuIGlkICVkXFxcIixcXG4rXFx0ICAgIEJPTkRfSUZBQ0UsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCwgQk9ORF9WTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXBcXFwiLCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMuJWRcXFwiLFxcbitcXHQgICAgSVBWNF9CT05EX1ZMQU5fRFNULCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogYSBWUkYgd2l0aCBpdHMgb3duIGRlZGljYXRlZCBzdWJpbnRlcmZhY2UgKHRoZSBpaWYgcnVsZXMgYWJvdmVcXG4rXFx0ICogbXVzdCBub3Qgc2VlIGl0KSwgZm9yIHRoZSB0YWJsZS1zZWxlY3Rpb24tYnktaW5ncmVzcyBjYXNlc1xcbitcXHQgKi9cXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCAlcyB0eXBlIHZyZiB0YWJsZSAlc1xcXCIsIFZSRl9JRkFDRSwgVlJGX1RBQkxFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBWUkZfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcXFwiLFxcbitcXHQgICAgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9WTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcXFwiLCBWUkZfVkxBTl9JRkFDRSwgVlJGX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBWUkZfVkxBTl9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXFxcIiwgSVBWNF9WUkZfSUZBQ0VfQUREUiwgVlJGX1ZMQU5fSUZBQ0UpO1xcbitcXHRlcnIgPSB3cml0ZV9zeXNjdGwoXFxcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1xcXCIgVlJGX1ZMQU5fSUZBQ0UgXFxcIi9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXFxcIiBWUkZfVkxBTl9JRkFDRSBcXFwiLmZvcndhcmRpbmcpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgJXMvMzIgdmlhICVzXFxcIiwgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1xcXCIsXFxuK1xcdCAgICBWUkZfVEFCTEUsIElQVjRfVlJGX0RTVCwgSVBWNF9WUkZfR1cpO1xcbitcXG4rXFx0LyogbmVpZ2hib3VycyBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgZm9yIHRoZSBub24tU0tJUF9ORUlHSCBjYXNlcyAqL1xcbitcXHRlcnIgPSB3cml0ZV9zeXNjdGwoXFxcIi9wcm9jL3N5cy9uZXQvaXB2NC9uZWlnaC9cXFwiIFZMQU5fSUZBQ0UgXFxcIi9nY19zdGFsZV90aW1lXFxcIiwgXFxcIjkwMFxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ3cml0ZV9zeXNjdGwobmV0LmlwdjQubmVpZ2guXFxcIiBWTEFOX0lGQUNFIFxcXCIuZ2Nfc3RhbGVfdGltZSlcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVxcXCIsXFxuK1xcdCAgICBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgVkxBTl9JRkFDRSwgRE1BQyk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlXFxcIixcXG4rXFx0ICAgIElQVjRfVkxBTl9HVywgVkxBTl9JRkFDRSwgRE1BQzIpO1xcbitcXG4rXFx0LyogYSBWTEFOIG9uIHZldGgyIHdpdGggYSByb3V0ZSBpbiB0aGUgdGJpZCB0ZXN0IHRhYmxlICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgbGluayB2ZXRoMiBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFxcXCIsXFxuK1xcdCAgICBUQklEX1ZMQU5fSUZBQ0UsIFRCSURfVkxBTl9JRCk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgVEJJRF9WTEFOX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgdGFibGUgMTAwICVzLzMyIGRldiAlc1xcXCIsXFxuK1xcdCAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7XFxuK1xcbitcXHQvKiBhIGxvY2tlZC1tdHUgcm91dGUgdmlhIHRoZSBzdWJpbnRlcmZhY2UgZm9yIHRoZSBGUkFHX05FRURFRCBjYXNlICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwXFxcIixcXG4rXFx0ICAgIElQVjRfVkxBTl9NVFVfRFNULCBWTEFOX0lGQUNFKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiBmYWlsOlxcbiBcXHRyZXR1cm4gLTE7XFxuQEAgLTIxOCw5ICs1ODgsMTYgQEAgc3RhdGljIGludCBzZXRfbG9va3VwX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0bWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTtcXG4gXFxuIFxcdHBhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4tXFx0cGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gaWZpbmRleDtcXG4rXFx0cGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gdGVzdC1cXHUwMDNlaWlmID8gaWZfbmFtZXRvaW5kZXgodGVzdC1cXHUwMDNlaWlmKSA6IGlmaW5kZXg7XFxuIFxcdHBhcmFtcy1cXHUwMDNldGJpZCA9IHRlc3QtXFx1MDAzZXRiaWQ7XFxuIFxcdHBhcmFtcy1cXHUwMDNlbWFyayA9IHRlc3QtXFx1MDAzZW1hcms7XFxuK1xcdHBhcmFtcy1cXHUwMDNldG90X2xlbiA9IHRlc3QtXFx1MDAzZXRvdF9sZW47XFxuK1xcbitcXHQvKiBoX3ZsYW5fcHJvdG8vaF92bGFuX1RDSSB1bmlvbiB3aXRoIHRiaWQgKi9cXG4rXFx0aWYgKHRlc3QtXFx1MDAzZWxvb2t1cF9mbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcXG4rXFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyh0ZXN0LVxcdTAwM2V2bGFuX3Byb3RvKTtcXG4rXFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModGVzdC1cXHUwMDNldmxhbl9pZCk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHRlc3QtXFx1MDAzZWRhZGRyLCBwYXJhbXMtXFx1MDAzZWlwdjZfZHN0KSA9PSAxKSB7XFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDY7XFxuQEAgLTI5OCw3ICs2NzUsNyBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XFxuIFxcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xcbiBcXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbDtcXG4tXFx0aW50IHByb2dfZmQsIGVyciwgcmV0LCBpO1xcbitcXHRpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHJldCwgaTtcXG4gXFxuIFxcdC8qIFRoZSB0ZXN0IGRvZXMgbm90IHVzZSB0aGUgc2tiLVxcdTAwM2VkYXRhLCBzb1xcbiBcXHQgKiB1c2UgcGt0X3Y2IGZvciBib3RoIHY2IGFuZCB2NCB0ZXN0LlxcbkBAIC0zMDksMTEgKzY4NiwxNiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRcXHQgICAgLmN0eF9pbiA9IFxcdTAwMjZza2IsXFxuIFxcdFxcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcXG4gXFx0KTtcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxcbitcXHRcXHQgICAgLmRhdGFfaW4gPSBcXHUwMDI2cGt0X3Y2LFxcbitcXHRcXHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxcbitcXHQpO1xcbiBcXG4gXFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcXG4gXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xcbitcXHR4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF94ZHApO1xcbiBcXG4gXFx0U1lTKGZhaWwsIFxcXCJpcCBuZXRucyBhZGQgJXNcXFwiLCBOU19URVNUKTtcXG4gXFxuQEAgLTM0Myw2ICs3MjUsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcXG4gXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfdGVzdF9ydW5fb3B0c1xcXCIpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gaXMgWERQLW9ubHk7IHRoZSB0YyBoZWxwZXIgcmVqZWN0cyBpdC5cXG4rXFx0XFx0ICogVGhlc2UgY2FzZXMgYXJlIGV4ZXJjaXNlZCBvbiB0aGUgWERQIHBhdGggYmVsb3cuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikge1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICBcXFwidGMgcmVqZWN0cyBCUEZfRklCX0xPT0tVUF9WTEFOXFxcIik7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxcbiBcXHRcXHRcXHQgIFxcXCJmaWJfbG9va3VwX3JldFxcXCIpO1xcbiBcXG5AQCAtMzUyLDYgKzc0NCwyMSBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KVxcbiBcXHRcXHRcXHRhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7XFxuIFxcbitcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KVxcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCxcXG4rXFx0XFx0XFx0XFx0ICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLCBcXFwiaWZpbmRleFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSlcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcXG4rXFx0XFx0XFx0XFx0ICBcXFwibXR1X3Jlc3VsdFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHtcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90byxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgXFxcImhfdmxhbl9wcm90b1xcXCIpO1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgXFxcImhfdmxhbl9UQ0lcXFwiKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXFx1MDAzZWRtYWMsIHNpemVvZih0ZXN0c1tpXS5kbWFjKSk7XFxuIFxcdFxcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXFxcImRtYWMgbm90IG1hdGNoXFxcIikpIHtcXG4gXFx0XFx0XFx0Y2hhciBleHBlY3RlZFsxOF0sIGFjdHVhbFsxOF07XFxuQEAgLTM2MSwxNSArNzY4LDMxMiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRcXHRcXHRwcmludGYoXFxcImRtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzIFxcXCIsIGV4cGVjdGVkLCBhY3R1YWwpO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHQvLyBlbnN1cmUgdGJpZCBpcyB6ZXJvJ2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuXFxuLVxcdFxcdGlmICh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZW5zdXJlIHRiaWQgaXMgemVybydkIG91dCBhZnRlciBmaWIgbG9va3VwLiBXaXRoXFxuK1xcdFxcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gdGhlIHVuaW9uIGhvbGRzIHRoZSBwYWNrZWQgdmxhblxcbitcXHRcXHQgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pKSB7XFxuIFxcdFxcdFxcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX3BhcmFtcy50YmlkLCAwLFxcbiBcXHRcXHRcXHRcXHRcXHRcXFwiZXhwZWN0ZWQgZmliX3BhcmFtcy50YmlkIHRvIGJlIHplcm9cXFwiKSlcXG4gXFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJlLXJ1biB0aGUgY2FzZXMgdGhyb3VnaCBicGZfeGRwX2ZpYl9sb29rdXAoKS4gdGVzdF9ydW4gdXNlcyB0aGVcXG4rXFx0ICogY3VycmVudCBuZXRucycgbG9vcGJhY2sgZm9yIGN0eC1cXHUwMDNlcnhxLVxcdTAwM2VkZXYsIHNvIGRldl9uZXQoKSBpcyBOU19URVNUXFxuK1xcdCAqIGFuZCB0aGUgbG9va3VwIHJ1bnMgYWdhaW5zdCBpdHMgRklCLiBUaGUgcGF0aC1pbmRlcGVuZGVudCByZXN1bHRzXFxuK1xcdCAqIChyZXR1cm4gY29kZSwgc3dhcHBlZCBpZmluZGV4LCB2bGFuIHRhZywgZ2F0ZXdheSkgbXVzdCBtYXRjaCB0aGUgc2tiXFxuK1xcdCAqIHBhdGg7IHRoZSBuby10b3RfbGVuIG10dV9yZXN1bHQgaXMgc2tiLXNwZWNpZmljIGFuZCBub3QgcmVjaGVja2VkLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpKyspIHtcXG4rXFx0XFx0aWYgKHNldF9sb29rdXBfcGFyYW1zKGZpYl9wYXJhbXMsIFxcdTAwMjZ0ZXN0c1tpXSwgc2tiLmlmaW5kZXgpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcXG4rXFx0XFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7XFxuK1xcbitcXHRcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgXFx1MDAyNnhkcF9vcHRzKTtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwieGRwIHRlc3RfcnVuXFxcIikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxcbitcXHRcXHRcXHQgICAgICAgXFxcInhkcCBmaWJfbG9va3VwX3JldFxcXCIpKVxcbitcXHRcXHRcXHRwcmludGYoXFxcIih4ZHApICVzXFxcXG5cXFwiLCB0ZXN0c1tpXS5kZXNjKTtcXG4rXFxuK1xcdFxcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpXFxuK1xcdFxcdFxcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4LFxcbitcXHRcXHRcXHRcXHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksXFxuK1xcdFxcdFxcdFxcdCAgXFxcInhkcCBpZmluZGV4XFxcIik7XFxuK1xcbitcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KVxcbitcXHRcXHRcXHRhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7XFxuK1xcbitcXHRcXHRpZiAodGVzdHNbaV0uY2hlY2tfdmxhbikge1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvLFxcbitcXHRcXHRcXHRcXHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcXFwieGRwIGhfdmxhbl9wcm90b1xcXCIpO1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgXFxcInhkcCBoX3ZsYW5fVENJXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCA9IG1lbWNtcCh0ZXN0c1tpXS5kbWFjLCBmaWJfcGFyYW1zLVxcdTAwM2VkbWFjLCBzaXplb2YodGVzdHNbaV0uZG1hYykpO1xcbitcXHRcXHRBU1NFUlRfRVEocmV0LCAwLCBcXFwieGRwIGRtYWNcXFwiKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIG10dV9yZXN1bHQgZnJvbSBhIHRvdF9sZW4gbG9va3VwIGlzIHRoZSByb3V0ZSBtdHUgYW5kIGlzXFxuK1xcdFxcdCAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtXFx1MDAzZW10dSBhbmQgaXNcXG4rXFx0XFx0ICogc2tiLW9ubHksIHNvIGdhdGUgb24gdG90X2xlblxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSBcXHUwMDI2XFx1MDAyNiB0ZXN0c1tpXS50b3RfbGVuKVxcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlbXR1X3Jlc3VsdCwgdGVzdHNbaV0uZXhwZWN0ZWRfbXR1LFxcbitcXHRcXHRcXHRcXHQgIFxcXCJ4ZHAgbXR1X3Jlc3VsdFxcXCIpO1xcbitcXHR9XFxuK1xcbitmYWlsOlxcbitcXHRpZiAobnN0b2tlbilcXG4rXFx0XFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuK1xcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCBcXFwiIE5TX1RFU1QpO1xcbitcXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisjZGVmaW5lIE5TX1ZMQU5fQVxcdFxcXCJmaWJfbG9va3VwX3ZsYW5fbnNfYVxcXCJcXG4rI2RlZmluZSBOU19WTEFOX0JcXHRcXFwiZmliX2xvb2t1cF92bGFuX25zX2JcXFwiXFxuK1xcbisvKlxcbisgKiBBIFZMQU4gZGV2aWNlIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIG5ldG5zIHdoaWxlIHN0YXlpbmcgcmVnaXN0ZXJlZFxcbisgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZVxcbisgKiBlZ3Jlc3MgZmxhZyBtdXN0IG5vdCBwdWJsaXNoIHRoZSBmb3JlaWduIHBhcmVudCdzIGlmaW5kZXgsIGFuZCB0aGVcXG4rICogaW5wdXQgZmxhZyBtdXN0IGZhaWwgY2xvc2VkIHJhdGhlciB0aGFuIHVzZSBhIGZvcmVpZ24gaW5ncmVzcy5cXG4rICovXFxuK3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fbmV0bnModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XFxuK1xcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcXG4rXFx0c3RydWN0IF9fc2tfYnVmZiBza2IgPSB7IH07XFxuK1xcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCBwYXJlbnRfaWR4LCB2bGFuX2lkeDtcXG4rXFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBydW5fb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NixcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcXG4rXFx0XFx0ICAgIC5jdHhfaW4gPSBcXHUwMDI2c2tiLFxcbitcXHRcXHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXFxuK1xcdCk7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NixcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcXG4rXFx0KTtcXG4rXFxuK1xcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbCBvcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcXG4rXFx0eGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcXG4rXFx0ZmliX3BhcmFtcyA9IFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9wYXJhbXM7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5ldG5zIGFkZCAlc1xcXCIsIE5TX1ZMQU5fQSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgTlNfVkxBTl9CKTtcXG4rXFxuK1xcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQSk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcXFwib3Blbl9uZXRucyhhKVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIHZldGg3IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDhcXFwiKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgdmV0aDcgdXBcXFwiKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rIHZldGg3IG5hbWUgdmV0aDcuNjYgdHlwZSB2bGFuIGlkIDY2XFxcIik7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgdmV0aDcuNjYgbmV0bnMgJXNcXFwiLCBOU19WTEFOX0IpO1xcbitcXG4rXFx0cGFyZW50X2lkeCA9IGlmX25hbWV0b2luZGV4KFxcXCJ2ZXRoN1xcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9ORVEocGFyZW50X2lkeCwgMCwgXFxcImlmX25hbWV0b2luZGV4KHZldGg3KVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBpbnB1dDogdGhlIG1vdmVkIGRldmljZSBpcyBzdGlsbCBpbiB2ZXRoNydzIFZMQU4gZ3JvdXAsIGJ1dCBpdFxcbitcXHQgKiBsaXZlcyBpbiBhbm90aGVyIG5ldG5zLCBzbyB0aGUgbG9va3VwIG11c3QgZmFpbCBjbG9zZWRcXG4rXFx0ICovXFxuK1xcdHNrYi5pZmluZGV4ID0gcGFyZW50X2lkeDtcXG4rXFx0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gcGFyZW50X2lkeDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJID0gaHRvbnMoNjYpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXFxcIjEwLjY2LjAuMlxcXCIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X2RzdCksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKGRzdClcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfFxcbitcXHRcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXFx1MDAyNnJ1bl9vcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9ydW4oaW5wdXQpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHRcXHQgIFxcXCJpbnB1dCBhY3Jvc3MgbmV0bnMgZmFpbHMgY2xvc2VkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4LCBwYXJlbnRfaWR4LCBcXFwiaWZpbmRleCB1bnRvdWNoZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0ksIGh0b25zKDY2KSwgXFxcInRhZyB1bnRvdWNoZWRcXFwiKTtcXG4rXFxuK1xcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xcbitcXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXFxcIm9wZW5fbmV0bnMoYilcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogZWdyZXNzOiB0aGUgZmliIHJlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UgaGVyZSwgYnV0IGl0cyBwYXJlbnRcXG4rXFx0ICogaXMgaW4gdGhlIG90aGVyIG5ldG5zLCBzbyB0aGUgc3dhcCBtdXN0IG5vdCBoYXBwZW5cXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2IHZldGg3LjY2IHVwXFxcIik7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgYWRkciBhZGQgMTAuNjYuMC4xLzI0IGRldiB2ZXRoNy42NlxcXCIpO1xcbitcXHRlcnIgPSB3cml0ZV9zeXNjdGwoXFxcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL3ZldGg3LjY2L2ZvcndhcmRpbmdcXFwiLCBcXFwiMVxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ3cml0ZV9zeXNjdGwoZm9yd2FyZGluZylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0dmxhbl9pZHggPSBpZl9uYW1ldG9pbmRleChcXFwidmV0aDcuNjZcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKHZsYW5faWR4LCAwLCBcXFwiaWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHZsYW5faWR4O1xcbitcXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXFxcIjEwLjY2LjAuMlxcXCIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X2RzdCksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKGRzdClcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXFxcIjEwLjY2LjAuMVxcXCIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X3NyYyksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKHNyYylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxcbitcXHRcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCBcXHUwMDI2eGRwX29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bihlZ3Jlc3MpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxcbitcXHRcXHQgIFxcXCJlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXgsIHZsYW5faWR4LFxcbitcXHRcXHQgIFxcXCJmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJLCAwLCBcXFwidmxhbiBmaWVsZHMgemVyb1xcXCIpO1xcbitcXG4rZmFpbDpcXG4rXFx0aWYgKG5zdG9rZW4pXFxuK1xcdFxcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19WTEFOX0EpO1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19WTEFOX0IpO1xcbitcXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDBcXG4rXFxuKy8qXFxuKyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxcbisgKiBwYXJlbnQuIEEgcmVkaXJlY3QgdGhhdCBsYW5kcyBvbiBhIFZMQU4gZGV2aWNlIGlzIGRyb3BwZWQgYXRcXG4rICogeGRwX2RvX2ZsdXNoKCksIGJlY2F1c2UgYSBWTEFOIGRldmljZSBoYXMgbm8gbmRvX3hkcF94bWl0LiBEcml2ZSByZWFsXFxuKyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcXG4rICogeGRwX2RvX3JlZGlyZWN0KCkgKyB4ZHBfZG9fZmx1c2goKSBwYXRoOiBhIHJlZHVjaWJsZSBWTEFOIGVncmVzc1xcbisgKiByZXNvbHZlcyB0byB2ZXRoMSBhbmQgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLCB3aGlsZSBhIFFpblFcXG4rICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcXG4rICogcmVkaXJlY3RlZCB0byBhIGRldmljZSB0aGF0IHdvdWxkIHNpbGVudGx5IGRyb3AgaXQuXFxuKyAqL1xcbit2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXFxuK3tcXG4rXFx0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XFxuK1xcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcXG4rXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xcbitcXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XFxuK1xcdGJvb2wgeGRwX2F0dGFjaGVkID0gZmFsc2U7XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgbGZfb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NCxcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcXG4rXFx0XFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxcbitcXHRcXHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRyZWRpcmVjdF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5maWJfbG9va3VwX3JlZGlyZWN0KTtcXG4rXFx0ZmliX3BhcmFtcyA9IFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9wYXJhbXM7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5ldG5zIGFkZCAlc1xcXCIsIE5TX1RFU1QpO1xcbitcXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19URVNUKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuX25ldG5zXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0aWYgKHNldHVwX25ldG5zKCkpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KFxcXCJ2ZXRoMVxcXCIpO1xcbitcXHR2ZXRoMl9pZHggPSBpZl9uYW1ldG9pbmRleChcXFwidmV0aDJcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgXFxcImlmX25hbWV0b2luZGV4KHZldGgxKVxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsIFxcXCJpZl9uYW1ldG9pbmRleCh2ZXRoMilcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSByZWRpcmVjdCB0byB2ZXRoMSBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIuIHZldGhfeGRwX3htaXQoKVxcbitcXHQgKiBvbmx5IGFjY2VwdHMgdGhlIGZyYW1lIGlmIHZldGgyJ3MgTkFQSSBpcyB1cCwgd2hpY2ggb24gdmV0aCBtZWFuc1xcbitcXHQgKiB2ZXRoMiBjYXJyaWVzIGFuIFhEUCBwcm9ncmFtOyB4ZHBfY291bnQgdGFsbGllcyB3aGF0IGFycml2ZXMuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBicGZfeGRwX2F0dGFjaCh2ZXRoMl9pZHgsIGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy54ZHBfY291bnQpLFxcbitcXHRcXHRcXHQgICAgIFhEUF9GTEFHU19EUlZfTU9ERSwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImF0dGFjaCB4ZHBfY291bnQgb24gdmV0aDJcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHR4ZHBfYXR0YWNoZWQgPSB0cnVlO1xcbitcXG4rXFx0LyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovXFxuK1xcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfc3JjKSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24oc3JjKVxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfZHN0KSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24ocmVkdWNpYmxlIGRzdClcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBhc3NlZCA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZGVsaXZlcmVkID0gMDtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocmVkaXJlY3RfZmQsIFxcdTAwMjZsZl9vcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9ydW4ocmVkdWNpYmxlIGVncmVzcylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgXFxcInJlZHVjaWJsZSBlZ3Jlc3MgcmVkaXJlY3RlZFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwYXNzZWQsIDAsIFxcXCJyZWR1Y2libGUgZWdyZXNzIG5vdCBwYXNzZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0dUKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZGVsaXZlcmVkLCAwLCBcXFwicmVkdWNpYmxlIGVncmVzcyBkZWxpdmVyZWQgdG8gdmV0aDJcXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFFpblEgZWdyZXNzOiBub3QgcmVkdWNpYmxlLCBzbyB0aGUgbG9va3VwIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZFxcbitcXHQgKiB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gdGhlIGlubmVyXFxuK1xcdCAqIFZMQU4gZGV2aWNlLiByZWRpcmVjdGVkID09IDAgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IHRoZVxcbitcXHQgKiBwcm9ncmFtIGRpZCBub3QgcmVkaXJlY3QgdG8gYSBkZXZpY2UgdGhhdCB3b3VsZCBkcm9wIHRoZSBmcmFtZSBhdFxcbitcXHQgKiB4ZHBfZG9fZmx1c2goKS4gdmV0aDIncyBkZWxpdmVyZWQgY291bnQgaXMgbm90IGNoZWNrZWQgaGVyZSwgc2luY2VcXG4rXFx0ICogYSBwYXNzZWQgZnJhbWUgY2FuIHN0aWxsIHJlYWNoIHZldGgyIHRocm91Z2ggdGhlIHN0YWNrJ3MgZm9yd2FyZGluZ1xcbitcXHQgKiBwYXRoLCB3aGljaCBpcyB1bnJlbGF0ZWQgdG8gdGhlIHJlZGlyZWN0IHVuZGVyIHRlc3QuXFxuK1xcdCAqL1xcbitcXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXggPSB2ZXRoMV9pZHg7XFxuK1xcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X0lGQUNFX0FERFIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X3NyYyksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKHNyYylcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfZHN0KSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24ocWlucSBkc3QpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZWRpcmVjdGVkID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwYXNzZWQgPSAwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXFx1MDAyNmxmX29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bihxaW5xIGVncmVzcylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwYXNzZWQsIFJFRElSRUNUX05QS1RTLCBcXFwicWlucSBlZ3Jlc3MgcGFzc2VkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlZGlyZWN0ZWQsIDAsIFxcXCJxaW5xIGVncmVzcyBub3QgcmVkaXJlY3RlZFxcXCIpO1xcbitcXG4gZmFpbDpcXG4rXFx0aWYgKHhkcF9hdHRhY2hlZClcXG4rXFx0XFx0YnBmX3hkcF9kZXRhY2godmV0aDJfaWR4LCBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xcbiBcXHRpZiAobnN0b2tlbilcXG4gXFx0XFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuIFxcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCBcXFwiIE5TX1RFU1QpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xcbmluZGV4IDdiNWRkMjIxNGZmNDZhLi44NjJhMWU5NDU3YjRlMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xcbkBAIC0xOSw0ICsxOSw0MCBAQCBpbnQgZmliX2xvb2t1cChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJ4ZHBcXFwiKVxcbitpbnQgZmliX2xvb2t1cF94ZHAoc3RydWN0IHhkcF9tZCAqY3R4KVxcbit7XFxuK1xcdGZpYl9sb29rdXBfcmV0ID0gYnBmX2ZpYl9sb29rdXAoY3R4LCBcXHUwMDI2ZmliX3BhcmFtcywgc2l6ZW9mKGZpYl9wYXJhbXMpLFxcbitcXHRcXHRcXHRcXHRcXHRsb29rdXBfZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIFhEUF9EUk9QO1xcbit9XFxuK1xcbitpbnQgcmVkaXJlY3RlZCA9IDA7XFxuK2ludCBwYXNzZWQgPSAwO1xcbitpbnQgZGVsaXZlcmVkID0gMDtcXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IGZpYl9sb29rdXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9tZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zO1xcbitcXHRsb25nIHJldDtcXG4rXFxuK1xcdHJldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7XFxuK1xcdGlmIChyZXQgPT0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTKSB7XFxuK1xcdFxcdHJlZGlyZWN0ZWQrKztcXG4rXFx0XFx0cmV0dXJuIGJwZl9yZWRpcmVjdChwYXJhbXMuaWZpbmRleCwgMCk7XFxuK1xcdH1cXG4rXFxuK1xcdHBhc3NlZCsrO1xcbitcXHRyZXR1cm4gWERQX1BBU1M7XFxuK31cXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IHhkcF9jb3VudChzdHJ1Y3QgeGRwX21kICpjdHgpXFxuK3tcXG4rXFx0ZGVsaXZlcmVkKys7XFxuK1xcdHJldHVybiBYRFBfRFJPUDtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA5OjM5OjQxLjU0MzYwODYwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNjk0Njk3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2NF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2Nl9maWJfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyIChgYnBmX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGZsYWdzOiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYC4gVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBjb3JlIEJQRiBGSUIgbG9va3VwIGxvZ2ljIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIEZJQiBsb29rdXAgZW50cnkgcG9pbnRzIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIGxvb2t1cCBmdW5jdGlvbnMuIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgVkxBTiBzcGVjaWZpYyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMDIzMTE2NWM0ZWJmYWJlYzk5YmM1Nzk0NmEyZThjNjVmZGNlMmNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgNCAwOTozOTozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0zNTMyLDYgKzM1MzIsNDUgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXG4gICpcdFx0XHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXG4gICpcdFx0XHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXG4rICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKipcbisgKlx0XHRcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcbisgKlx0XHRcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxuKyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGZyb21cbisgKlx0XHRcdHRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IHdpdGggdGhlXG4rICpcdFx0XHRwYXJlbnQncyBpZmluZGV4LiAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRFxuKyAqXHRcdFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xuKyAqXHRcdFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXHUwMDNlc21hYyBpc1xuKyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlJ3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcbisgKlx0XHRcdHBhcmVudCdzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxuKyAqXHRcdFx0aXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLFxuKyAqXHRcdFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXG4rICpcdFx0XHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcbisgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLVx1MDAzZWlmaW5kZXhcbisgKlx0XHRcdGxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0XG4rICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiB0byBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJ3Mgb3duXG4rICpcdFx0XHRpZmluZGV4LiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXG4rICpcdFx0XHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxuKyAqXHRcdFx0dGhlIGhlbHBlcidzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHRcbisgKlx0XHRcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cdTAwM2VtdHVfcmVzdWx0LlxuKyAqXHRcdFx0VGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXNcbisgKlx0XHRcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxuKyAqXHRcdFx0ZGV2aWNlIGRpcmVjdGx5LlxuKyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXG4rICpcdFx0XHRUcmVhdCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0lcbisgKlx0XHRcdGFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzXG4rICpcdFx0XHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXG4rICpcdFx0XHRvbiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4LiBUaGUgVklEIGlzIHRoZSBsb3cgMTIgYml0cyBvZlxuKyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIG11c3QgYmVcbisgKlx0XHRcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcbisgKlx0XHRcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IGlzIGl0c2VsZiBhIFZMQU5cbisgKlx0XHRcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcbisgKlx0XHRcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJ3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXG4rICpcdFx0XHR0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zXG4rICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXG4rICpcdFx0XHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xuKyAqXHRcdFx0ZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGhcbisgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcbisgKlx0XHRcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cbiAgKlxuICAqXHRcdCpjdHgqIGlzIGVpdGhlciAqKnN0cnVjdCB4ZHBfbWQqKiBmb3IgWERQIHByb2dyYW1zIG9yXG4gICpcdFx0KipzdHJ1Y3Qgc2tfYnVmZioqIHRjIGNsc19hY3QgcHJvZ3JhbXMuXG5AQCAtNzMyNyw2ICs3MzY2LDggQEAgZW51bSB7XG4gXHRCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVIFx1MDAzY1x1MDAzYyAzKSxcbiBcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDQpLFxuIFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNSksXG4rXHRCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVIFx1MDAzY1x1MDAzYyA2KSxcbitcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXHUwMDNjXHUwMDNjIDcpLFxuIH07XG4gXG4gZW51bSB7XG5AQCAtNzM0MCw2ICs3MzgxLDcgQEAgZW51bSB7XG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILCAgICAgLyogbm8gbmVpZ2hib3IgZW50cnkgZm9yIG5oICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXG4rXHRCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi9cbiB9O1xuIFxuIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG5AQCAtNzM5Myw3ICs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0Lyogb3V0cHV0ICovXG4rXHRcdFx0LypcbitcdFx0XHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcbitcdFx0XHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxuK1x0XHRcdCAqIG9uIG90aGVyIHN1Y2Nlc3NmdWwgbG9va3Vwcy4gaW5wdXQgd2l0aFxuK1x0XHRcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxuK1x0XHRcdCAqIHRoZSBsb29rdXAgYnkuXG4rXHRcdFx0ICovXG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fcHJvdG87XG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fVENJO1xuIFx0XHR9O1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDJlOTZiNGI4NDdjZTEyLi4wZWEzNjJmYTQyODdlMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTYyMDEsMjEgKzYyMDEsNjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0ge1xuICNlbmRpZlxuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuLXN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywgdTMyIG10dSlcbitzdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4rXHRcdFx0XHQgIHUzMiBmbGFncywgdTMyIG10dSwgdTMyIGluX2lmaW5kZXgpXG4ge1xuIFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSAwO1xuIFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IDA7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG4rXHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKSBcdTAwMjZcdTAwMjYgaXNfdmxhbl9kZXYoZGV2KSkge1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9wcml2KGRldiktXHUwMDNlcmVhbF9kZXY7XG4rXG4rXHRcdGlmICghaXNfdmxhbl9kZXYocmVhbF9kZXYpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbmV0X2VxKGRldl9uZXQocmVhbF9kZXYpLCBkZXZfbmV0KGRldikpKSB7XG4rXHRcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IHZsYW5fZGV2X3ZsYW5fcHJvdG8oZGV2KTtcbitcdFx0XHRwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSA9IGh0b25zKHZsYW5fZGV2X3ZsYW5faWQoZGV2KSk7XG4rXHRcdFx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSByZWFsX2Rldi1cdTAwM2VpZmluZGV4O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gaW5faWZpbmRleDtcbitcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkU7XG4rXHRcdH1cbitcdH1cbisjZW5kaWZcbitcbiBcdGlmIChtdHUpXG4gXHRcdHBhcmFtcy1cdTAwM2VtdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi9cbiBcbiBcdHJldHVybiAwO1xuIH1cbitcbitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMpXG4re1xuK1x0X19iZTE2IHByb3RvID0gcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90bztcbitcdHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldjtcbitcdHUxNiB2aWQ7XG4rXG4rXHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpIFx1MDAyNlx1MDAyNiBwcm90byAhPSBodG9ucyhFVEhfUF84MDIxQUQpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcbitcdHZpZCA9IG50b2hzKHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJKSBcdTAwMjYgVkxBTl9WSURfTUFTSztcbitcdHZsYW5fZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgcHJvdG8sIHZpZCk7XG4rXHRpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgfHxcbitcdCAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiB2bGFuX2Rldjtcbit9XG4gI2VuZGlmXG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG4gc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRcdFx0ICAgICAgIHUzMiBmbGFncywgYm9vbCBjaGVja19tdHUpXG4ge1xuK1x0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDtcbiBcdHN0cnVjdCBmaWJfbmhfY29tbW9uICpuaGM7XG4gXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7XG5AQCAtNjIyOSw2ICs2MjY4LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0aWYgKHVubGlrZWx5KCFkZXYpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbitcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xuK1x0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbitcdFx0aWYgKElTX0VSUihkZXYpKVxuK1x0XHRcdHJldHVybiBQVFJfRVJSKGRldik7XG4rXHRcdGlmICghZGV2KVxuK1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDtcbitcdH1cbitcbiBcdC8qIHZlcmlmeSBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb24gdGhpcyBpbnRlcmZhY2UgKi9cbiBcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbiBcdGlmICh1bmxpa2VseSghaW5fZGV2IHx8ICFJTl9ERVZfRk9SV0FSRChpbl9kZXYpKSlcbkBAIC02MjM4LDcgKzYyODUsMTEgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRcdGZsNC5mbG93aTRfaWlmID0gMTtcbiBcdFx0Zmw0LmZsb3dpNF9vaWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdH0gZWxzZSB7XG4tXHRcdGZsNC5mbG93aTRfaWlmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4rXHRcdC8qXG4rXHRcdCAqIGRldi1cdTAwM2VpZmluZGV4LCBub3QgcGFyYW1zLVx1MDAzZWlmaW5kZXg6IFZMQU5fSU5QVVQgbWF5IGhhdmVcbitcdFx0ICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLlxuK1x0XHQgKi9cbitcdFx0Zmw0LmZsb3dpNF9paWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbiBcdFx0Zmw0LmZsb3dpNF9vaWYgPSAwO1xuIFx0fVxuIFx0Zmw0LmZsb3dpNF9kc2NwID0gaW5ldF9kc2ZpZWxkX3RvX2RzY3AocGFyYW1zLVx1MDAzZXRvcyk7XG5AQCAtNjM0Nyw3ICs2Mzk4LDcgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRtZW1jcHkocGFyYW1zLVx1MDAzZXNtYWMsIGRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuIHNldF9md2RfcGFyYW1zOlxuLVx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xuK1x0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC02MzU3LDYgKzY0MDgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiB7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgKnNyYyA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVx1MDAzZWlwdjZfc3JjO1xuIFx0c3RydWN0IGluNl9hZGRyICpkc3QgPSAoc3RydWN0IGluNl9hZGRyICopIHBhcmFtcy1cdTAwM2VpcHY2X2RzdDtcbitcdHUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHRzdHJ1Y3QgZmliNl9yZXN1bHQgcmVzID0ge307XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG5AQCAtNjM3NCw2ICs2NDI2LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0aWYgKHVubGlrZWx5KCFkZXYpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbitcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xuK1x0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbitcdFx0aWYgKElTX0VSUihkZXYpKVxuK1x0XHRcdHJldHVybiBQVFJfRVJSKGRldik7XG4rXHRcdGlmICghZGV2KVxuK1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDtcbitcdH1cbitcbiBcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpO1xuIFx0aWYgKHVubGlrZWx5KCFpZGV2IHx8ICFSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYuZm9yd2FyZGluZykpKVxuIFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQ7XG5AQCAtNjM4Miw3ICs2NDQyLDEyIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0XHRmbDYuZmxvd2k2X2lpZiA9IDE7XG4gXHRcdG9pZiA9IGZsNi5mbG93aTZfb2lmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHR9IGVsc2Uge1xuLVx0XHRvaWYgPSBmbDYuZmxvd2k2X2lpZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuK1x0XHQvKlxuK1x0XHQgKiBkZXYtXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cdTAwM2VpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlXG4rXHRcdCAqIHJlc29sdmVkIGRldiB0byBhIHN1YmludGVyZmFjZSBhYm92ZS5cbitcdFx0ICovXG4rXHRcdG9pZiA9IGRldi1cdTAwM2VpZmluZGV4O1xuK1x0XHRmbDYuZmxvd2k2X2lpZiA9IG9pZjtcbiBcdFx0Zmw2LmZsb3dpNl9vaWYgPSAwO1xuIFx0XHRzdHJpY3QgPSBSVDZfTE9PS1VQX0ZfSEFTX1NBRERSO1xuIFx0fVxuQEAgLTY0ODYsMTMgKzY1NTEsMjYgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRtZW1jcHkocGFyYW1zLVx1MDAzZXNtYWMsIGRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuIHNldF9md2RfcGFyYW1zOlxuLVx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xuK1x0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xuIH1cbiAjZW5kaWZcbiBcbiAjZGVmaW5lIEJQRl9GSUJfTE9PS1VQX01BU0sgKEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IFxcXG4gXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8IFxcXG4tXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKVxuK1x0XHRcdCAgICAgQlBGX0ZJQl9MT09LVVBfU1JDIHwgQlBGX0ZJQl9MT09LVVBfTUFSSyB8IFxcXG4rXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVClcbitcbitzdGF0aWMgYm9vbCBicGZfZmliX2xvb2t1cF9mbGFnc19vayh1MzIgZmxhZ3MpXG4re1xuK1x0aWYgKGZsYWdzIFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGZsYWdzIFx1MDAyNiAoQlBGX0ZJQl9MT09LVVBfVEJJRCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4gXG4gQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4gXHQgICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKiwgcGFyYW1zLCBpbnQsIHBsZW4sIHUzMiwgZmxhZ3MpXG5AQCAtNjUwMCw3ICs2NTc4LDcgQEAgQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4gXHRpZiAocGxlbiBcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXG4rXHRpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRzd2l0Y2ggKHBhcmFtcy1cdTAwM2VmYW1pbHkpIHtcbkBAIC02NTM4LDcgKzY2MTYsMTAgQEAgQlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcdGlmIChwbGVuIFx1MDAzYyBzaXplb2YoKnBhcmFtcykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcbitcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAocGFyYW1zLVx1MDAzZXRvdF9sZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uZDQyMTg5NTRjNTBmNTMgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTM1MzIsNiArMzUzMiw0NSBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICpcdFx0XHRVc2UgdGhlIG1hcmsgcHJlc2VudCBpbiAqcGFyYW1zKi1cdTAwM2VtYXJrIGZvciB0aGUgZmliIGxvb2t1cC5cbiAgKlx0XHRcdFRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIEJQRl9GSUJfTE9PS1VQX0RJUkVDVCxcbiAgKlx0XHRcdGFzIGl0IG9ubHkgaGFzIG1lYW5pbmcgZm9yIGZ1bGwgbG9va3Vwcy5cbisgKlx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKlxuKyAqXHRcdFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxuKyAqXHRcdFx0cGFyZW50IGlzIGEgcmVhbCAobm9uLVZMQU4pIGRldmljZSwgc2V0XG4rICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0kgZnJvbVxuKyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggd2l0aCB0aGVcbisgKlx0XHRcdHBhcmVudCdzIGlmaW5kZXguICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklEXG4rICpcdFx0XHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXG4rICpcdFx0XHRzZXQgZWdyZXNzIHByaW9yaXR5IHdyaXRlcyBQQ1AgaXRzZWxmLiAqcGFyYW1zKi1cdTAwM2VzbWFjIGlzXG4rICpcdFx0XHR0aGUgVkxBTiBkZXZpY2UncyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxuKyAqXHRcdFx0cGFyZW50J3MuIE9ubHkgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaXMgcmVzb2x2ZWQ7IGlmIGl0XG4rICpcdFx0XHRpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsXG4rICpcdFx0XHR0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXNcbisgKlx0XHRcdG9uZSB0YWcgYW5kIHRoZSBsb29rdXAgcmV0dXJuc1xuKyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotXHUwMDNlaWZpbmRleFxuKyAqXHRcdFx0bGVmdCBhdCB0aGUgaW5wdXQuIFJlLWlzc3VlIHdpdGhvdXRcbisgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqIHRvIG9idGFpbiB0aGUgVkxBTiBkZXZpY2UncyBvd25cbisgKlx0XHRcdGlmaW5kZXguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcbisgKlx0XHRcdGFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwXG4rICpcdFx0XHR0aGUgaGVscGVyJ3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxuKyAqXHRcdFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVx1MDAzZW10dV9yZXN1bHQuXG4rICpcdFx0XHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xuKyAqXHRcdFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXG4rICpcdFx0XHRkZXZpY2UgZGlyZWN0bHkuXG4rICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKipcbisgKlx0XHRcdFRyZWF0ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSVxuKyAqXHRcdFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcbisgKlx0XHRcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcbisgKlx0XHRcdG9uICpwYXJhbXMqLVx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXG4rICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJOyAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxuKyAqXHRcdFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxuKyAqXHRcdFx0KiotRUlOVkFMKiouIElmICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxuKyAqXHRcdFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxuKyAqXHRcdFx0Ym9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXIncyBpZmluZGV4LiBBbiB1bm1hdGNoZWRcbisgKlx0XHRcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcbisgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cbisgKlx0XHRcdEEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzXG4rICpcdFx0XHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxuKyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxuKyAqXHRcdFx0KHJldHVybnMgKiotRUlOVkFMKiopLlxuICAqXG4gICpcdFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcbiAgKlx0XHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cbkBAIC03MzI3LDYgKzczNjYsOCBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDMpLFxuIFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNCksXG4gXHRCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVIFx1MDAzY1x1MDAzYyA1KSxcbitcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXHUwMDNjXHUwMDNjIDYpLFxuK1x0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcdTAwM2NcdTAwM2MgNyksXG4gfTtcbiBcbiBlbnVtIHtcbkBAIC03MzQwLDYgKzczODEsNyBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cbitcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xuIH07XG4gXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbkBAIC03MzkzLDcgKzc0MzUsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbiBcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcbi1cdFx0XHQvKiBvdXRwdXQgKi9cbitcdFx0XHQvKlxuK1x0XHRcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxuK1x0XHRcdCAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkXG4rXHRcdFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXG4rXHRcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXG4rXHRcdFx0ICogdGhlIGxvb2t1cCBieS5cbitcdFx0XHQgKi9cbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9wcm90bztcbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9UQ0k7XG4gXHRcdH07XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXG5pbmRleCBiZDc2NTg5NTgwMDQxZi4uMThiNmZkZWNhMzgyYTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xuQEAgLTIsNiArMiw3IEBAXG4gLyogQ29weXJpZ2h0IChjKSAyMDIzIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lmLmhcdTAwM2VcbiBcbkBAIC0yMyw2ICsyNCw3IEBAXG4gI2RlZmluZSBJUFY0X1RCSURfQUREUlx0XHRcIjE3Mi4wLjAuMjU0XCJcbiAjZGVmaW5lIElQVjRfVEJJRF9ORVRcdFx0XCIxNzIuMC4wLjBcIlxuICNkZWZpbmUgSVBWNF9UQklEX0RTVFx0XHRcIjE3Mi4wLjAuMlwiXG4rI2RlZmluZSBJUFY0X1RCSURfTk9ORUlHSF9EU1RcdFwiMTcyLjAuMC41XCJcbiAjZGVmaW5lIElQVjZfVEJJRF9BRERSXHRcdFwiZmQwMDo6RkZGRlwiXG4gI2RlZmluZSBJUFY2X1RCSURfTkVUXHRcdFwiZmQwMDo6XCJcbiAjZGVmaW5lIElQVjZfVEJJRF9EU1RcdFx0XCJmZDAwOjoyXCJcbkBAIC0zNyw2ICszOSw0MSBAQFxuICNkZWZpbmUgSVBWNl9MT0NBTFx0XHRcImZkMDE6OjNcIlxuICNkZWZpbmUgSVBWNl9HVzFcdFx0XCJmZDAxOjoxXCJcbiAjZGVmaW5lIElQVjZfR1cyXHRcdFwiZmQwMTo6MlwiXG4rI2RlZmluZSBWTEFOX0lEXHRcdFx0MTAwXG4rI2RlZmluZSBWTEFOX0lGQUNFXHRcdFwidmV0aDEuMTAwXCJcbisjZGVmaW5lIFZMQU5fSURfRE9XTlx0XHQxMDJcbisjZGVmaW5lIFZMQU5fSUZBQ0VfRE9XTlx0XHRcInZldGgxLjEwMlwiXG4rI2RlZmluZSBRSU5RX09VVEVSX0lGQUNFXHRcInZldGgxLjIwMFwiXG4rI2RlZmluZSBRSU5RX0lOTkVSX0lGQUNFXHRcInZldGgxLjIwMC4zMDBcIlxuKyNkZWZpbmUgVkxBTl9UQUJMRVx0XHRcIjMwMFwiXG4rI2RlZmluZSBJUFY0X1ZMQU5fSUZBQ0VfQUREUlx0XCIxMC41LjAuMjU0XCJcbisjZGVmaW5lIElQVjRfVkxBTl9FR1JFU1NfRFNUXHRcIjEwLjUuMC4yXCJcbisjZGVmaW5lIElQVjRfUUlOUV9EU1RcdFx0XCIxMC43LjAuMlwiXG4rI2RlZmluZSBJUFY0X1ZMQU5fRFNUXHRcdFwiMTAuNi4wLjJcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX0dXXHRcdFwiMTAuNS4wLjFcIlxuKyNkZWZpbmUgSVBWNl9WTEFOX0lGQUNFX0FERFJcdFwiZmQwMjo6MjU0XCJcbisjZGVmaW5lIElQVjZfVkxBTl9FR1JFU1NfRFNUXHRcImZkMDI6OjJcIlxuKyNkZWZpbmUgSVBWNl9WTEFOX0RTVFx0XHRcImZkMDM6OjJcIlxuKyNkZWZpbmUgSVBWNl9WTEFOX0dXXHRcdFwiZmQwMjo6MVwiXG4rI2RlZmluZSBWTEFOX1ZJRF9VTlVTRURcdFx0OTk5XG4rI2RlZmluZSBWUkZfSUZBQ0VcdFx0XCJ2cmYtYmx1ZVwiXG4rI2RlZmluZSBWUkZfVEFCTEVcdFx0XCIxMDAwXCJcbisjZGVmaW5lIFZSRl9WTEFOX0lEXHRcdDEwMVxuKyNkZWZpbmUgVlJGX1ZMQU5fSUZBQ0VcdFx0XCJ2ZXRoMS4xMDFcIlxuKyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUlx0XCIxMC44LjAuMjU0XCJcbisjZGVmaW5lIElQVjRfVlJGX0dXXHRcdFwiMTAuOC4wLjFcIlxuKyNkZWZpbmUgSVBWNF9WUkZfRFNUXHRcdFwiMTAuOS4wLjJcIlxuKyNkZWZpbmUgVEJJRF9WTEFOX0lEXHRcdDUwXG4rI2RlZmluZSBUQklEX1ZMQU5fSUZBQ0VcdFx0XCJ2ZXRoMi41MFwiXG4rI2RlZmluZSBJUFY0X1RCSURfVkxBTl9EU1RcdFwiMTcyLjIuMC4yXCJcbisjZGVmaW5lIElQVjRfQk9ORF9WTEFOX0RTVFx0XCIxMC4xMS4wLjJcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX01UVV9EU1RcdFwiMTAuNS45LjJcIlxuKyNkZWZpbmUgUUlOUV9BRF9WTEFOX0lEXHRcdDIwMFxuKyNkZWZpbmUgUUlOUV9JTk5FUl9WTEFOX0lEXHQzMDBcbisjZGVmaW5lIEJPTkRfSUZBQ0VcdFx0XCJib25kOTlcIlxuKyNkZWZpbmUgQk9ORF9QT1JUXHRcdFwidmV0aDNcIlxuKyNkZWZpbmUgQk9ORF9QT1JUX1BFRVJcdFx0XCJ2ZXRoNFwiXG4rI2RlZmluZSBCT05EX1ZMQU5fSURcdFx0NTAwXG4gI2RlZmluZSBETUFDXHRcdFx0XCIxMToxMToxMToxMToxMToxMVwiXG4gI2RlZmluZSBETUFDX0lOSVQgeyAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCB9XG4gI2RlZmluZSBETUFDMlx0XHRcdFwiMDE6MDE6MDE6MDE6MDE6MDFcIlxuQEAgLTUyLDYgKzg5LDE3IEBAIHN0cnVjdCBmaWJfbG9va3VwX3Rlc3Qge1xuIFx0X191MzIgdGJpZDtcbiBcdF9fdTggZG1hY1s2XTtcbiBcdF9fdTMyIG1hcms7XG4rXHQvKlxuK1x0ICogaW5wdXQgdGFnIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDsgZXhwZWN0ZWQgb3V0cHV0IHRhZ1xuK1x0ICogd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOIChjaGVja2VkIHdoZW4gY2hlY2tfdmxhbiBpcyBzZXQpXG4rXHQgKi9cbitcdF9fdTE2IHZsYW5fcHJvdG87XG4rXHRfX3UxNiB2bGFuX2lkO1xuK1x0Ym9vbCBjaGVja192bGFuO1xuK1x0Y29uc3QgY2hhciAqZXhwZWN0ZWRfZGV2OyAvKiBleHBlY3RlZCBwYXJhbXMtXHUwMDNlaWZpbmRleCBhZnRlciBsb29rdXAgKi9cbitcdGNvbnN0IGNoYXIgKmlpZjtcdCAgLyogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmV0aDEgaW5wdXQgZGV2aWNlICovXG4rXHRfX3UxNiB0b3RfbGVuO1x0XHQgIC8qIHRyaWdnZXJzIHRoZSBpbi1sb29rdXAgbXR1IGNoZWNrIHdoZW4gc2V0ICovXG4rXHRfX3UxNiBleHBlY3RlZF9tdHU7XHQgIC8qIGV4cGVjdGVkIG10dV9yZXN1bHQgKHVuaW9uIHdpdGggdG90X2xlbikgKi9cbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XG5AQCAtNzksNiArMTI3LDE3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XG4gXHQgIC5kYWRkciA9IElQVjRfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcbiBcdCAgLmRtYWMgPSBETUFDX0lOSVQyLCB9LFxuK1x0LypcbitcdCAqIEFuIGVycm9yIHRoYXQgcmV0dXJucyBhZnRlciB0aGUgZWdyZXNzIGRldmljZSBpcyByZXNvbHZlZCBtdXN0XG4rXHQgKiByZXBvcnQgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0LiBUaGlzIHJvdXRlcyBmcm9tIGlucHV0XG4rXHQgKiB2ZXRoMSB2aWEgdmV0aDIgKHRhYmxlIDEwMCkgdG8gYSBkc3Qgd2l0aCBubyBuZWlnaGJvdXIsIHNvXG4rXHQgKiBpbnB1dCAhPSBlZ3Jlc3MsIHBpbm5pbmcgTk9fTkVJR0ggdG8gdGhlIGVncmVzcyBkZXZpY2UuXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgTk9fTkVJR0ggcmVwb3J0cyB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9UQklEX05PTkVJR0hfRFNULFxuK1x0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsIC50YmlkID0gMTAwLFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMlwiLCB9LFxuIFx0eyAuZGVzYyA9IFwiSVB2NiBUQklEIGxvb2t1cCBmYWlsdXJlXCIsXG4gXHQgIC5kYWRkciA9IElQVjZfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsXG5AQCAtMTQyLDYgKzIwMSwyMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHtcbiBcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfR1cxLFxuIFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiBcdCAgLm1hcmsgPSBNQVJLLCB9LFxuK1x0LyogdmxhbiBlZ3Jlc3MgcmVzb2x1dGlvbiAqL1xuK1x0LypcbitcdCAqIEludmFyaWFudCB0aGUgVkxBTi1lZ3Jlc3MgYXJtcyBqb2ludGx5IGVuZm9yY2U6IGFcbitcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gU1VDQ0VTUyBhbHdheXMgY2FycmllcyBhIHBoeXNpY2FsLFxuK1x0ICogeG1pdC1jYXBhYmxlIGlmaW5kZXg7IG5vIFNVQ0NFU1MgZXZlciByZXR1cm5zIGEgVkxBTi1kZXZpY2VcbitcdCAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZVxuK1x0ICogUWluUSBhbmQgZm9yZWlnbi1uZXRucyBhcm1zIHBpbiBWTEFOX0ZBSUxVUkUgd2l0aCBwYXJhbXMtXHUwMDNlaWZpbmRleFxuK1x0ICogbGVmdCBhdCB0aGUgaW5wdXQsIHNvIGEgcmVncmVzc2lvbiB0byBiZXN0LWVmZm9ydCAoU1VDQ0VTUyArIHRoZVxuK1x0ICogVkxBTiBpZmluZGV4KSBmYWlscyBvbmUuXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWdcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgc2luZ2xlIFZMQU5cIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHQvKlxuK1x0ICogc2tiIHBhdGggd2l0aG91dCB0b3RfbGVuOiBtdHVfcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSdzIG10dVxuK1x0ICogKDE0MDApLCBub3QgdGhlIHBhcmVudCdzICgxNTAwKVxuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzLCBza2ItcGF0aCBtdHUgaXMgdGhlIFZMQU4gZGV2aWNlJ3Mgd2l0aG91dCB0aGUgZmxhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsIC5leHBlY3RlZF9tdHUgPSAxNDAwLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgZmxhZyBzZXQgYnV0IGVncmVzcyBpcyBub3QgYSBWTEFOXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1FJTlFfRFNULFxuK1x0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBRaW5RIGVncmVzcyB3aXRob3V0IHRoZSBmbGFnIChlc2NhcGUgaGF0Y2gpXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gUUlOUV9JTk5FUl9JRkFDRSwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXCIsXG4rXHQgIC5kYWRkciA9IElQVjZfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgbmVpZ2hib3VyIG9uIHRoZSBWTEFOIGRldmljZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4sXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MgaW4gT1VUUFVUIG1vZGVcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5paWYgPSBWTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfT1VUUFVUIHwgQlBGX0ZJQl9MT09LVVBfVkxBTiB8XG4rXHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3Mgb3ZlciBhIGJvbmRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9CT05EX1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBCT05EX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1RCSURfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklEIHxcbitcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudGJpZCA9IDEwMCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDJcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFRCSURfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fTVRVX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLnRvdF9sZW4gPSA1MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCxcbitcdCAgLnRvdF9sZW4gPSAxNDAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4rXHQvKiB2bGFuIHRhZyBhcyBsb29rdXAgaW5wdXQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgbm8gZmxhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9HVzEsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcIixcbitcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0IGFuZCBlZ3Jlc3MgY29tYmluZWRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIixcbitcdCAgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuK1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBuZWlnaGJvdXIgcmVzb2x2ZWQgb24gdGhlIHJvdXRlXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIHN1YmludGVyZmFjZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU1JDIHxcbitcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdC8qXG4rXHQgKiBWUkY6IHRoZSByZXNvbHZlZCBzdWJpbnRlcmZhY2UgaXMgZW5zbGF2ZWQsIHNvIHRoZSBsM21kZXYgcnVsZVxuK1x0ICogKGZ1bGwgbG9va3VwKSBhbmQgbDNtZGV2X2ZpYl90YWJsZV9yY3UoKSAoRElSRUNUKSBtdXN0IHNlbGVjdFxuK1x0ICogdGhlIFZSRiB0YWJsZSBmcm9tIHRoZSByZXNvbHZlZCBpbmdyZXNzXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgVlJGIHN1YmludGVyZmFjZSwgbm8gZmxhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X0dXMSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIFZSRiB0YWJsZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIERJUkVDVCB1c2VzIFZSRiB0YWJsZSBmcm9tIHJlc29sdmVkIGluZ3Jlc3NcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfFxuK1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSxcbitcdC8qXG4rXHQgKiBmYWlsdXJlIGFybXMgYWxzbyBhc3NlcnQgcGFyYW1zIGlzIGxlZnQgdW50b3VjaGVkOiBpZmluZGV4IHN0aWxsXG4rXHQgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmVcbitcdCAqL1xuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd25cIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lEX0RPV04sIH0sXG4rXHQvKlxuK1x0ICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzXG4rXHQgKiB3aXRoIGZvcndhcmRpbmcgb2ZmIEZXRF9ESVNBQkxFRCAobm90IE5PVF9GV0RFRCkgcHJvdmVzIHRoZSB0YWdcbitcdCAqIHJlc29sdmVkIHRvIHRoYXQgZGV2aWNlIGFuZCB0aGUgbG9va3VwIHVzZWQgaXQgYXMgaW5ncmVzc1xuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIDgwMi4xYWQgdGFnXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFBRCwgLnZsYW5faWQgPSBRSU5RX0FEX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIFBDUCBhbmQgREVJIGJpdHMgaWdub3JlZCBpbiBUQ0lcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIGlubmVyIFFpblEgZGV2aWNlIGZyb20gVkxBTiBpZmluZGV4XCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbitcdCAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBRSU5RX0lOTkVSX1ZMQU5fSUQsIH0sXG4rXHQvKlxuK1x0ICogYm9uZGluZzogdGhlIFZMQU5zIGxpdmUgb24gdGhlIG1hc3RlciwgYXMgb24gcmVjZWl2ZSwgd2hlcmUgdGhlXG4rXHQgKiBmcmFtZSBpcyBzdGVlcmVkIHRvIHRoZSBtYXN0ZXIgYmVmb3JlIFZMQU4gcHJvY2Vzc2luZzsgYSBwb3J0XG4rXHQgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cylcbitcdCAqL1xuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBtYXN0ZXIgcmVzb2x2ZXNcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELFxuK1x0ICAuaWlmID0gQk9ORF9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgcG9ydCBkb2VzIG5vdCBtYXRjaFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4rXHQgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjYgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90b1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIFZJRCAwIHByaW9yaXR5IHRhZyBmYWlscyBjbG9zZWRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NiBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEXCIsXG4rXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxuK1x0eyAuZGVzYyA9IFwidW5rbm93biBmbGFnIGJpdCByZWplY3RlZFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmxvb2t1cF9mbGFncyA9ICgxIFx1MDAzY1x1MDAzYyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggVEJJRFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBPVVRQVVRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVULFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4gfTtcbiBcbiBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXG5AQCAtMjA0LDYgKzQ3NSwxMDUgQEAgc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxuIFx0U1lTKGZhaWwsIFwiaXAgcnVsZSBhZGQgcHJpbyAyIGZ3bWFyayAlZCBsb29rdXAgJXNcIiwgTUFSSywgTUFSS19UQUJMRSk7XG4gXHRTWVMoZmFpbCwgXCJpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlc1wiLCBNQVJLLCBNQVJLX1RBQkxFKTtcbiBcbitcdC8qXG4rXHQgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZFxuK1x0ICogdGFnLWFzLWlucHV0LCBhIFFpblEgc3RhY2ssIGFuZCBhbiBpaWYgcnVsZSBzbyB0aGUgaW5wdXQgdGVzdHNcbitcdCAqIG9ic2VydmUgd2hpY2ggZGV2aWNlIHRoZSBsb29rdXAgdXNlZCBhcyBpbmdyZXNzLlxuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXCIsXG4rXHQgICAgVkxBTl9JRkFDRSwgVkxBTl9JRCk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgVkxBTl9JRkFDRSk7XG4rXHQvKlxuK1x0ICogbG93ZXIgdGhhbiB0aGUgdmV0aDEgcGFyZW50ICgxNTAwKTogdGhlIHNrYi1wYXRoIG10dSBjaGVjayB1c2VzIHRoZVxuK1x0ICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUgd2l0aCBvclxuK1x0ICogd2l0aG91dCB0aGUgZWdyZXNzIHN3YXAsIHdoaWNoIHR3byBhcm1zIGJlbG93IHBpblxuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgbXR1IDE0MDBcIiwgVkxBTl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBhZGRyIGFkZCAlcy8yNCBkZXYgJXNcIiwgSVBWNF9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgYWRkciBhZGQgJXMvNjQgZGV2ICVzIG5vZGFkXCIsIElQVjZfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcbitcbitcdC8qXG4rXHQgKiBzdGF5cyBkb3duOiB0aGUgaW5wdXQgZmxhZyBtdXN0IHRyZWF0IGl0cyB0YWcgdGhlIHdheSByZWFsXG4rXHQgKiBpbmdyZXNzIHRyZWF0cyBhIGZyYW1lIGFycml2aW5nIG9uIGEgZG93biBWTEFOIGRldmljZSAoZHJvcClcbitcdCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwiLFxuK1x0ICAgIFZMQU5fSUZBQ0VfRE9XTiwgVkxBTl9JRF9ET1dOKTtcbitcbitcdGVyciA9IHdyaXRlX3N5c2N0bChcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1wiIFZMQU5fSUZBQ0UgXCIvZm9yd2FyZGluZ1wiLCBcIjFcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXCIgVkxBTl9JRkFDRSBcIi5mb3J3YXJkaW5nKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwiL3Byb2Mvc3lzL25ldC9pcHY2L2NvbmYvXCIgVkxBTl9JRkFDRSBcIi9mb3J3YXJkaW5nXCIsIFwiMVwiKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ3cml0ZV9zeXNjdGwobmV0LmlwdjYuY29uZi5cIiBWTEFOX0lGQUNFIFwiLmZvcndhcmRpbmcpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIHByb3RvIDgwMi4xYWQgaWQgMjAwXCIsXG4rXHQgICAgUUlOUV9PVVRFUl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMgdHlwZSB2bGFuIGlkIDMwMFwiLFxuK1x0ICAgIFFJTlFfT1VURVJfSUZBQ0UsIFFJTlFfSU5ORVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFFJTlFfT1VURVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFFJTlFfSU5ORVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkICVzLzMyIGRldiAlc1wiLCBJUFY0X1FJTlFfRFNULCBRSU5RX0lOTkVSX0lGQUNFKTtcbitcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcIiwgSVBWNF9WTEFOX0RTVCwgSVBWNF9HVzEpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1wiLFxuK1x0ICAgIFZMQU5fVEFCTEUsIElQVjRfVkxBTl9EU1QsIElQVjRfVkxBTl9HVyk7XG4rXHRTWVMoZmFpbCwgXCJpcCBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlc1wiLCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcbitcdFNZUyhmYWlsLCBcImlwIC02IHJvdXRlIGFkZCAlcy8xMjggdmlhICVzXCIsIElQVjZfVkxBTl9EU1QsIElQVjZfR1cxKTtcbitcdFNZUyhmYWlsLCBcImlwIC02IHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8xMjggdmlhICVzXCIsXG4rXHQgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTtcbitcdFNZUyhmYWlsLCBcImlwIC02IHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXCIsIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xuK1xuK1x0LyogYSBib25kIHdpdGggb25lIHBvcnQgYW5kIGEgVkxBTiBvbiB0aGUgYm9uZCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgJXMgdHlwZSBib25kXCIsIEJPTkRfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgJXMgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlc1wiLCBCT05EX1BPUlQsIEJPTkRfUE9SVF9QRUVSKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0ICVzIG1hc3RlciAlc1wiLCBCT05EX1BPUlQsIEJPTkRfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIEJPTkRfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIEJPTkRfUE9SVCk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMuJWQgdHlwZSB2bGFuIGlkICVkXCIsXG4rXHQgICAgQk9ORF9JRkFDRSwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lELCBCT05EX1ZMQU5fSUQpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzLiVkIHVwXCIsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCk7XG4rXHRTWVMoZmFpbCwgXCJpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzLiVkXCIsXG4rXHQgICAgSVBWNF9CT05EX1ZMQU5fRFNULCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xuK1xuK1x0LypcbitcdCAqIGEgVlJGIHdpdGggaXRzIG93biBkZWRpY2F0ZWQgc3ViaW50ZXJmYWNlICh0aGUgaWlmIHJ1bGVzIGFib3ZlXG4rXHQgKiBtdXN0IG5vdCBzZWUgaXQpLCBmb3IgdGhlIHRhYmxlLXNlbGVjdGlvbi1ieS1pbmdyZXNzIGNhc2VzXG4rXHQgKi9cbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkICVzIHR5cGUgdnJmIHRhYmxlICVzXCIsIFZSRl9JRkFDRSwgVlJGX1RBQkxFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBWUkZfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwiLFxuK1x0ICAgIFZSRl9WTEFOX0lGQUNFLCBWUkZfVkxBTl9JRCk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcIiwgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgVlJGX1ZMQU5fSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCIsIElQVjRfVlJGX0lGQUNFX0FERFIsIFZSRl9WTEFOX0lGQUNFKTtcbitcdGVyciA9IHdyaXRlX3N5c2N0bChcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1wiIFZSRl9WTEFOX0lGQUNFIFwiL2ZvcndhcmRpbmdcIiwgXCIxXCIpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcIndyaXRlX3N5c2N0bChuZXQuaXB2NC5jb25mLlwiIFZSRl9WTEFOX0lGQUNFIFwiLmZvcndhcmRpbmcpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRTWVMoZmFpbCwgXCJpcCByb3V0ZSBhZGQgJXMvMzIgdmlhICVzXCIsIElQVjRfVlJGX0RTVCwgSVBWNF9HVzEpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1wiLFxuK1x0ICAgIFZSRl9UQUJMRSwgSVBWNF9WUkZfRFNULCBJUFY0X1ZSRl9HVyk7XG4rXG4rXHQvKiBuZWlnaGJvdXJzIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBmb3IgdGhlIG5vbi1TS0lQX05FSUdIIGNhc2VzICovXG4rXHRlcnIgPSB3cml0ZV9zeXNjdGwoXCIvcHJvYy9zeXMvbmV0L2lwdjQvbmVpZ2gvXCIgVkxBTl9JRkFDRSBcIi9nY19zdGFsZV90aW1lXCIsIFwiOTAwXCIpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcIndyaXRlX3N5c2N0bChuZXQuaXB2NC5uZWlnaC5cIiBWTEFOX0lGQUNFIFwiLmdjX3N0YWxlX3RpbWUpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRTWVMoZmFpbCwgXCJpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGVcIixcbitcdCAgICBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgVkxBTl9JRkFDRSwgRE1BQyk7XG4rXHRTWVMoZmFpbCwgXCJpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGVcIixcbitcdCAgICBJUFY0X1ZMQU5fR1csIFZMQU5fSUZBQ0UsIERNQUMyKTtcbitcbitcdC8qIGEgVkxBTiBvbiB2ZXRoMiB3aXRoIGEgcm91dGUgaW4gdGhlIHRiaWQgdGVzdCB0YWJsZSAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoMiBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwiLFxuK1x0ICAgIFRCSURfVkxBTl9JRkFDRSwgVEJJRF9WTEFOX0lEKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBUQklEX1ZMQU5fSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkIHRhYmxlIDEwMCAlcy8zMiBkZXYgJXNcIixcbitcdCAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7XG4rXG4rXHQvKiBhIGxvY2tlZC1tdHUgcm91dGUgdmlhIHRoZSBzdWJpbnRlcmZhY2UgZm9yIHRoZSBGUkFHX05FRURFRCBjYXNlICovXG4rXHRTWVMoZmFpbCwgXCJpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzIG10dSBsb2NrIDEwMDBcIixcbitcdCAgICBJUFY0X1ZMQU5fTVRVX0RTVCwgVkxBTl9JRkFDRSk7XG4rXG4gXHRyZXR1cm4gMDtcbiBmYWlsOlxuIFx0cmV0dXJuIC0xO1xuQEAgLTIxOCw5ICs1ODgsMTYgQEAgc3RhdGljIGludCBzZXRfbG9va3VwX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdG1lbXNldChwYXJhbXMsIDAsIHNpemVvZigqcGFyYW1zKSk7XG4gXG4gXHRwYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbi1cdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gaWZpbmRleDtcbitcdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gdGVzdC1cdTAwM2VpaWYgPyBpZl9uYW1ldG9pbmRleCh0ZXN0LVx1MDAzZWlpZikgOiBpZmluZGV4O1xuIFx0cGFyYW1zLVx1MDAzZXRiaWQgPSB0ZXN0LVx1MDAzZXRiaWQ7XG4gXHRwYXJhbXMtXHUwMDNlbWFyayA9IHRlc3QtXHUwMDNlbWFyaztcbitcdHBhcmFtcy1cdTAwM2V0b3RfbGVuID0gdGVzdC1cdTAwM2V0b3RfbGVuO1xuK1xuK1x0LyogaF92bGFuX3Byb3RvL2hfdmxhbl9UQ0kgdW5pb24gd2l0aCB0YmlkICovXG4rXHRpZiAodGVzdC1cdTAwM2Vsb29rdXBfZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcbitcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IGh0b25zKHRlc3QtXHUwMDNldmxhbl9wcm90byk7XG4rXHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModGVzdC1cdTAwM2V2bGFuX2lkKTtcbitcdH1cbiBcbiBcdGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHRlc3QtXHUwMDNlZGFkZHIsIHBhcmFtcy1cdTAwM2VpcHY2X2RzdCkgPT0gMSkge1xuIFx0XHRwYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDY7XG5AQCAtMjk4LDcgKzY3NSw3IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4gXHRzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTtcbiBcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsO1xuLVx0aW50IHByb2dfZmQsIGVyciwgcmV0LCBpO1xuK1x0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCByZXQsIGk7XG4gXG4gXHQvKiBUaGUgdGVzdCBkb2VzIG5vdCB1c2UgdGhlIHNrYi1cdTAwM2VkYXRhLCBzb1xuIFx0ICogdXNlIHBrdF92NiBmb3IgYm90aCB2NiBhbmQgdjQgdGVzdC5cbkBAIC0zMDksMTEgKzY4NiwxNiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxuIFx0XHQgICAgLmN0eF9pbiA9IFx1MDAyNnNrYixcbiBcdFx0ICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLFxuIFx0KTtcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcbitcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuK1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuK1x0KTtcbiBcbiBcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5fYW5kX2xvYWRcIikpXG4gXHRcdHJldHVybjtcbiBcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcbitcdHhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcbiBcbiBcdFNZUyhmYWlsLCBcImlwIG5ldG5zIGFkZCAlc1wiLCBOU19URVNUKTtcbiBcbkBAIC0zNDMsNiArNzI1LDE2IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfcHJvZ190ZXN0X3J1bl9vcHRzXCIpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIGlzIFhEUC1vbmx5OyB0aGUgdGMgaGVscGVyIHJlamVjdHMgaXQuXG4rXHRcdCAqIFRoZXNlIGNhc2VzIGFyZSBleGVyY2lzZWQgb24gdGhlIFhEUCBwYXRoIGJlbG93LlxuK1x0XHQgKi9cbitcdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikge1xuK1x0XHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgLUVJTlZBTCxcbitcdFx0XHRcdCAgXCJ0YyByZWplY3RzIEJQRl9GSUJfTE9PS1VQX1ZMQU5cIik7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0LCB0ZXN0c1tpXS5leHBlY3RlZF9yZXQsXG4gXHRcdFx0ICBcImZpYl9sb29rdXBfcmV0XCIpO1xuIFxuQEAgLTM1Miw2ICs3NDQsMjEgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcbiBcdFx0XHRhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7XG4gXG4rXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpXG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbitcdFx0XHRcdCAgaWZfbmFtZXRvaW5kZXgodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KSwgXCJpZmluZGV4XCIpO1xuK1xuK1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1KVxuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcbitcdFx0XHRcdCAgXCJtdHVfcmVzdWx0XCIpO1xuK1xuK1x0XHRpZiAodGVzdHNbaV0uY2hlY2tfdmxhbikge1xuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbitcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9wcm90byksIFwiaF92bGFuX3Byb3RvXCIpO1xuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0ksXG4rXHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5faWQpLCBcImhfdmxhbl9UQ0lcIik7XG4rXHRcdH1cbitcbiBcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiBcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcImRtYWMgbm90IG1hdGNoXCIpKSB7XG4gXHRcdFx0Y2hhciBleHBlY3RlZFsxOF0sIGFjdHVhbFsxOF07XG5AQCAtMzYxLDE1ICs3NjgsMzEyIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdFx0cHJpbnRmKFwiZG1hYyBleHBlY3RlZCAlcyBhY3R1YWwgJXMgXCIsIGV4cGVjdGVkLCBhY3R1YWwpO1xuIFx0XHR9XG4gXG4tXHRcdC8vIGVuc3VyZSB0YmlkIGlzIHplcm8nZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC5cbi1cdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7XG4rXHRcdC8qXG4rXHRcdCAqIGVuc3VyZSB0YmlkIGlzIHplcm8nZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aFxuK1x0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIHRoZSB1bmlvbiBob2xkcyB0aGUgcGFja2VkIHZsYW5cbitcdFx0ICogZmllbGRzIGluc3RlYWQsIHNvIHNraXAgdGhlIGNoZWNrIGZvciB0aG9zZS5cbitcdFx0ICovXG4rXHRcdGlmICgodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgISh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pKSB7XG4gXHRcdFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcy50YmlkLCAwLFxuIFx0XHRcdFx0XHRcImV4cGVjdGVkIGZpYl9wYXJhbXMudGJpZCB0byBiZSB6ZXJvXCIpKVxuIFx0XHRcdFx0Z290byBmYWlsO1xuIFx0XHR9XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogUmUtcnVuIHRoZSBjYXNlcyB0aHJvdWdoIGJwZl94ZHBfZmliX2xvb2t1cCgpLiB0ZXN0X3J1biB1c2VzIHRoZVxuK1x0ICogY3VycmVudCBuZXRucycgbG9vcGJhY2sgZm9yIGN0eC1cdTAwM2VyeHEtXHUwMDNlZGV2LCBzbyBkZXZfbmV0KCkgaXMgTlNfVEVTVFxuK1x0ICogYW5kIHRoZSBsb29rdXAgcnVucyBhZ2FpbnN0IGl0cyBGSUIuIFRoZSBwYXRoLWluZGVwZW5kZW50IHJlc3VsdHNcbitcdCAqIChyZXR1cm4gY29kZSwgc3dhcHBlZCBpZmluZGV4LCB2bGFuIHRhZywgZ2F0ZXdheSkgbXVzdCBtYXRjaCB0aGUgc2tiXG4rXHQgKiBwYXRoOyB0aGUgbm8tdG90X2xlbiBtdHVfcmVzdWx0IGlzIHNrYi1zcGVjaWZpYyBhbmQgbm90IHJlY2hlY2tlZC5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0ZXN0cyk7IGkrKykge1xuK1x0XHRpZiAoc2V0X2xvb2t1cF9wYXJhbXMoZmliX3BhcmFtcywgXHUwMDI2dGVzdHNbaV0sIHNrYi5pZmluZGV4KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbitcdFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gdGVzdHNbaV0ubG9va3VwX2ZsYWdzO1xuK1xuK1x0XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgXHUwMDI2eGRwX29wdHMpO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwieGRwIHRlc3RfcnVuXCIpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxuK1x0XHRcdCAgICAgICBcInhkcCBmaWJfbG9va3VwX3JldFwiKSlcbitcdFx0XHRwcmludGYoXCIoeGRwKSAlc1xcblwiLCB0ZXN0c1tpXS5kZXNjKTtcbitcbitcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4LFxuK1x0XHRcdFx0ICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLFxuK1x0XHRcdFx0ICBcInhkcCBpZmluZGV4XCIpO1xuK1xuK1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KVxuK1x0XHRcdGFzc2VydF9kc3RfaXAoZmliX3BhcmFtcywgdGVzdHNbaV0uZXhwZWN0ZWRfZHN0KTtcbitcbitcdFx0aWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHtcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8sXG4rXHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcInhkcCBoX3ZsYW5fcHJvdG9cIik7XG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSxcbitcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFwieGRwIGhfdmxhbl9UQ0lcIik7XG4rXHRcdH1cbitcbitcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbitcdFx0QVNTRVJUX0VRKHJldCwgMCwgXCJ4ZHAgZG1hY1wiKTtcbitcbitcdFx0LypcbitcdFx0ICogbXR1X3Jlc3VsdCBmcm9tIGEgdG90X2xlbiBsb29rdXAgaXMgdGhlIHJvdXRlIG10dSBhbmQgaXNcbitcdFx0ICogcGF0aC1pbmRlcGVuZGVudDsgdGhlIG5vLXRvdF9sZW4gYXJtIHJlYWRzIGRldi1cdTAwM2VtdHUgYW5kIGlzXG4rXHRcdCAqIHNrYi1vbmx5LCBzbyBnYXRlIG9uIHRvdF9sZW5cbitcdFx0ICovXG4rXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUgXHUwMDI2XHUwMDI2IHRlc3RzW2ldLnRvdF9sZW4pXG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlbXR1X3Jlc3VsdCwgdGVzdHNbaV0uZXhwZWN0ZWRfbXR1LFxuK1x0XHRcdFx0ICBcInhkcCBtdHVfcmVzdWx0XCIpO1xuK1x0fVxuK1xuK2ZhaWw6XG4rXHRpZiAobnN0b2tlbilcbitcdFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIE5TX1RFU1QpO1xuK1x0ZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rI2RlZmluZSBOU19WTEFOX0FcdFwiZmliX2xvb2t1cF92bGFuX25zX2FcIlxuKyNkZWZpbmUgTlNfVkxBTl9CXHRcImZpYl9sb29rdXBfdmxhbl9uc19iXCJcbitcbisvKlxuKyAqIEEgVkxBTiBkZXZpY2UgY2FuIGJlIG1vdmVkIHRvIGFub3RoZXIgbmV0bnMgd2hpbGUgc3RheWluZyByZWdpc3RlcmVkXG4rICogb24gaXRzIHBhcmVudC4gTmVpdGhlciBkaXJlY3Rpb24gbWF5IHRoZW4gY3Jvc3MgdGhlIGJvdW5kYXJ5OiB0aGVcbisgKiBlZ3Jlc3MgZmxhZyBtdXN0IG5vdCBwdWJsaXNoIHRoZSBmb3JlaWduIHBhcmVudCdzIGlmaW5kZXgsIGFuZCB0aGVcbisgKiBpbnB1dCBmbGFnIG11c3QgZmFpbCBjbG9zZWQgcmF0aGVyIHRoYW4gdXNlIGEgZm9yZWlnbiBpbmdyZXNzLlxuKyAqL1xuK3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fbmV0bnModm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4rXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4rXHRzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTtcbitcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDtcbitcdGludCBwcm9nX2ZkLCB4ZHBfZmQsIGVyciwgcGFyZW50X2lkeCwgdmxhbl9pZHg7XG4rXG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgcnVuX29wdHMsXG4rXHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NixcbitcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbitcdFx0ICAgIC5jdHhfaW4gPSBcdTAwMjZza2IsXG4rXHRcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcbitcdCk7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgeGRwX29wdHMsXG4rXHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NixcbitcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbitcdCk7XG4rXG4rXHRza2VsID0gZmliX2xvb2t1cF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbCBvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cCk7XG4rXHR4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwX3hkcCk7XG4rXHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbitcbitcdFNZUyhmYWlsLCBcImlwIG5ldG5zIGFkZCAlc1wiLCBOU19WTEFOX0EpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbmV0bnMgYWRkICVzXCIsIE5TX1ZMQU5fQik7XG4rXG4rXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0EpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3Blbl9uZXRucyhhKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgdmV0aDcgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoOFwiKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiB2ZXRoNyB1cFwiKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDcgbmFtZSB2ZXRoNy42NiB0eXBlIHZsYW4gaWQgNjZcIik7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCB2ZXRoNy42NiBuZXRucyAlc1wiLCBOU19WTEFOX0IpO1xuK1xuK1x0cGFyZW50X2lkeCA9IGlmX25hbWV0b2luZGV4KFwidmV0aDdcIik7XG4rXHRpZiAoIUFTU0VSVF9ORVEocGFyZW50X2lkeCwgMCwgXCJpZl9uYW1ldG9pbmRleCh2ZXRoNylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qXG4rXHQgKiBpbnB1dDogdGhlIG1vdmVkIGRldmljZSBpcyBzdGlsbCBpbiB2ZXRoNydzIFZMQU4gZ3JvdXAsIGJ1dCBpdFxuK1x0ICogbGl2ZXMgaW4gYW5vdGhlciBuZXRucywgc28gdGhlIGxvb2t1cCBtdXN0IGZhaWwgY2xvc2VkXG4rXHQgKi9cbitcdHNrYi5pZmluZGV4ID0gcGFyZW50X2lkeDtcbitcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbitcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHBhcmVudF9pZHg7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTtcbitcdGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSA9IGh0b25zKDY2KTtcbitcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBcIjEwLjY2LjAuMlwiLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfZHN0KSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKGRzdClcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHxcbitcdFx0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcbitcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXHUwMDI2cnVuX29wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInRlc3RfcnVuKGlucHV0KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0LCBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbitcdFx0ICBcImlucHV0IGFjcm9zcyBuZXRucyBmYWlscyBjbG9zZWRcIik7XG4rXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4LCBwYXJlbnRfaWR4LCBcImlmaW5kZXggdW50b3VjaGVkXCIpO1xuK1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSwgaHRvbnMoNjYpLCBcInRhZyB1bnRvdWNoZWRcIik7XG4rXG4rXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQik7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCJvcGVuX25ldG5zKGIpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHQvKlxuK1x0ICogZWdyZXNzOiB0aGUgZmliIHJlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UgaGVyZSwgYnV0IGl0cyBwYXJlbnRcbitcdCAqIGlzIGluIHRoZSBvdGhlciBuZXRucywgc28gdGhlIHN3YXAgbXVzdCBub3QgaGFwcGVuXG4rXHQgKi9cbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiB2ZXRoNy42NiB1cFwiKTtcbitcdFNZUyhmYWlsLCBcImlwIGFkZHIgYWRkIDEwLjY2LjAuMS8yNCBkZXYgdmV0aDcuNjZcIik7XG4rXHRlcnIgPSB3cml0ZV9zeXNjdGwoXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNy42Ni9mb3J3YXJkaW5nXCIsIFwiMVwiKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ3cml0ZV9zeXNjdGwoZm9yd2FyZGluZylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHZsYW5faWR4ID0gaWZfbmFtZXRvaW5kZXgoXCJ2ZXRoNy42NlwiKTtcbitcdGlmICghQVNTRVJUX05FUSh2bGFuX2lkeCwgMCwgXCJpZl9uYW1ldG9pbmRleCh2ZXRoNy42NilcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbitcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZsYW5faWR4O1xuK1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwiMTAuNjYuMC4yXCIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuK1x0XHQgICAgICAgMSwgXCJpbmV0X3B0b24oZHN0KVwiKSB8fFxuK1x0ICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwiMTAuNjYuMC4xXCIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9zcmMpLFxuK1x0XHQgICAgICAgMSwgXCJpbmV0X3B0b24oc3JjKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuK1x0XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFx1MDAyNnhkcF9vcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1bihlZ3Jlc3MpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxuK1x0XHQgIFwiZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFXCIpO1xuK1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCwgdmxhbl9pZHgsXG4rXHRcdCAgXCJmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkXCIpO1xuK1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSwgMCwgXCJ2bGFuIGZpZWxkcyB6ZXJvXCIpO1xuK1xuK2ZhaWw6XG4rXHRpZiAobnN0b2tlbilcbitcdFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIE5TX1ZMQU5fQSk7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIE5TX1ZMQU5fQik7XG4rXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDBcbitcbisvKlxuKyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxuKyAqIHBhcmVudC4gQSByZWRpcmVjdCB0aGF0IGxhbmRzIG9uIGEgVkxBTiBkZXZpY2UgaXMgZHJvcHBlZCBhdFxuKyAqIHhkcF9kb19mbHVzaCgpLCBiZWNhdXNlIGEgVkxBTiBkZXZpY2UgaGFzIG5vIG5kb194ZHBfeG1pdC4gRHJpdmUgcmVhbFxuKyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcbisgKiB4ZHBfZG9fcmVkaXJlY3QoKSArIHhkcF9kb19mbHVzaCgpIHBhdGg6IGEgcmVkdWNpYmxlIFZMQU4gZWdyZXNzXG4rICogcmVzb2x2ZXMgdG8gdmV0aDEgYW5kIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMiwgd2hpbGUgYSBRaW5RXG4rICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcbisgKiByZWRpcmVjdGVkIHRvIGEgZGV2aWNlIHRoYXQgd291bGQgc2lsZW50bHkgZHJvcCBpdC5cbisgKi9cbit2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXG4re1xuK1x0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XG4rXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4rXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4rXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XG4rXHRib29sIHhkcF9hdHRhY2hlZCA9IGZhbHNlO1xuK1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIGxmX29wdHMsXG4rXHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NCxcbitcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcbitcdFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxuK1x0XHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxuK1x0KTtcbitcbitcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcdHJlZGlyZWN0X2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF9yZWRpcmVjdCk7XG4rXHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbitcbitcdFNZUyhmYWlsLCBcImlwIG5ldG5zIGFkZCAlc1wiLCBOU19URVNUKTtcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3Blbl9uZXRuc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0aWYgKHNldHVwX25ldG5zKCkpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KFwidmV0aDFcIik7XG4rXHR2ZXRoMl9pZHggPSBpZl9uYW1ldG9pbmRleChcInZldGgyXCIpO1xuK1x0aWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgXCJpZl9uYW1ldG9pbmRleCh2ZXRoMSlcIikgfHxcbitcdCAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsIFwiaWZfbmFtZXRvaW5kZXgodmV0aDIpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHQvKlxuK1x0ICogQSByZWRpcmVjdCB0byB2ZXRoMSBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIuIHZldGhfeGRwX3htaXQoKVxuK1x0ICogb25seSBhY2NlcHRzIHRoZSBmcmFtZSBpZiB2ZXRoMidzIE5BUEkgaXMgdXAsIHdoaWNoIG9uIHZldGggbWVhbnNcbitcdCAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy5cbitcdCAqL1xuK1x0ZXJyID0gYnBmX3hkcF9hdHRhY2godmV0aDJfaWR4LCBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy54ZHBfY291bnQpLFxuK1x0XHRcdCAgICAgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJhdHRhY2ggeGRwX2NvdW50IG9uIHZldGgyXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHR4ZHBfYXR0YWNoZWQgPSB0cnVlO1xuK1xuK1x0LyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovXG4rXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXggPSB2ZXRoMV9pZHg7XG4rXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKHNyYylcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihyZWR1Y2libGUgZHN0KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBhc3NlZCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQgPSAwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXHUwMDI2bGZfb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9ydW4ocmVkdWNpYmxlIGVncmVzcylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgXCJyZWR1Y2libGUgZWdyZXNzIHJlZGlyZWN0ZWRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkLCAwLCBcInJlZHVjaWJsZSBlZ3Jlc3Mgbm90IHBhc3NlZFwiKTtcbitcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQsIDAsIFwicmVkdWNpYmxlIGVncmVzcyBkZWxpdmVyZWQgdG8gdmV0aDJcIik7XG4rXG4rXHQvKlxuK1x0ICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kXG4rXHQgKiB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gdGhlIGlubmVyXG4rXHQgKiBWTEFOIGRldmljZS4gcmVkaXJlY3RlZCA9PSAwIGlzIHRoZSBhc3NlcnRpb24gdGhhdCBtYXR0ZXJzOiB0aGVcbitcdCAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0XG4rXHQgKiB4ZHBfZG9fZmx1c2goKS4gdmV0aDIncyBkZWxpdmVyZWQgY291bnQgaXMgbm90IGNoZWNrZWQgaGVyZSwgc2luY2VcbitcdCAqIGEgcGFzc2VkIGZyYW1lIGNhbiBzdGlsbCByZWFjaCB2ZXRoMiB0aHJvdWdoIHRoZSBzdGFjaydzIGZvcndhcmRpbmdcbitcdCAqIHBhdGgsIHdoaWNoIGlzIHVucmVsYXRlZCB0byB0aGUgcmVkaXJlY3QgdW5kZXIgdGVzdC5cbitcdCAqL1xuK1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gdmV0aDFfaWR4O1xuK1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X3NyYyksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihzcmMpXCIpIHx8XG4rXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihxaW5xIGRzdClcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQgPSAwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXHUwMDI2bGZfb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9ydW4ocWlucSBlZ3Jlc3MpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkLCBSRURJUkVDVF9OUEtUUywgXCJxaW5xIGVncmVzcyBwYXNzZWRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCwgMCwgXCJxaW5xIGVncmVzcyBub3QgcmVkaXJlY3RlZFwiKTtcbitcbiBmYWlsOlxuK1x0aWYgKHhkcF9hdHRhY2hlZClcbitcdFx0YnBmX3hkcF9kZXRhY2godmV0aDJfaWR4LCBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xuIFx0aWYgKG5zdG9rZW4pXG4gXHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuIFx0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCBcIiBOU19URVNUKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjg2MmExZTk0NTdiNGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuQEAgLTE5LDQgKzE5LDQwIEBAIGludCBmaWJfbG9va3VwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiB9XG4gXG4rU0VDKFwieGRwXCIpXG4raW50IGZpYl9sb29rdXBfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHRmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXHUwMDI2ZmliX3BhcmFtcywgc2l6ZW9mKGZpYl9wYXJhbXMpLFxuK1x0XHRcdFx0XHRsb29rdXBfZmxhZ3MpO1xuK1xuK1x0cmV0dXJuIFhEUF9EUk9QO1xuK31cbitcbitpbnQgcmVkaXJlY3RlZCA9IDA7XG4raW50IHBhc3NlZCA9IDA7XG4raW50IGRlbGl2ZXJlZCA9IDA7XG4rXG4rU0VDKFwieGRwXCIpXG4raW50IGZpYl9sb29rdXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zO1xuK1x0bG9uZyByZXQ7XG4rXG4rXHRyZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7XG4rXHRpZiAocmV0ID09IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUykge1xuK1x0XHRyZWRpcmVjdGVkKys7XG4rXHRcdHJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApO1xuK1x0fVxuK1xuK1x0cGFzc2VkKys7XG4rXHRyZXR1cm4gWERQX1BBU1M7XG4rfVxuK1xuK1NFQyhcInhkcFwiKVxuK2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdGRlbGl2ZXJlZCsrO1xuK1x0cmV0dXJuIFhEUF9EUk9QO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwOTozOTo0MS41NDM2MTA1ODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzQ1NTYzNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWTEFOIEJQRiBGSUIgTG9va3VwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgVkxBTiBzdXBwb3J0IHRvIHRoZSBgYnBmX2ZpYl9sb29rdXBgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0J3MgaW50cm9kdWNpbmcgc29tZSBuZXcgZmxhZ3M6IGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBleHRlbmRpbmcgdGhlIGV4aXN0aW5nIEJQRiBGSUIgbG9va3VwIHRvIGNvbnNpZGVyIFZMQU4gaW5mb3JtYXRpb24sIHdoaWNoIGlzIGEgcHJldHR5IGNydWNpYWwgYWRkaXRpb24gZm9yIGNvbXBsZXggbmV0d29yayBzZXR1cHMuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJ3MgQlBGIEZJQiBsb29rdXAgbG9naWMsIHNvIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQncyByZWFjaGVkIGJ5IEJQRiBwcm9ncmFtcyBjYWxsaW5nIGBicGZfZmliX2xvb2t1cGAuIExldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzOiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzLlxuXG5SaWdodCwgc28gdGhlIG9idmlvdXMgc3VzcGVjdHMgYXJlOiBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AsIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBgYnBmX2lwdjZfZmliX2xvb2t1cGAsIGBicGZfeGRwX2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAuIEJ1dCBoYW5nIG9uIGEgc2Vjb25kLCB0aG9zZSBmaXJzdCB0d28sIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBhbmQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgLCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gVGhleSdyZSBwcm9iYWJseSBpbmxpbmVkLCB3aGljaCBjb21wbGljYXRlcyB0aGluZ3Mgc2xpZ2h0bHksIGJ1dCBpdCdzIHN0aWxsIGdvb2QgdG8gaW5jbHVkZSB0aGVtIG9uIHRoZSBsaXN0LiBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAgc2VlbSBsaWtlIHRoZSByZWFsIGVudHJ5IHBvaW50cy5cblxuSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoaXMgdG8gd29yay4gV2hlcmUncyB0aGlzIGNvZGUgbG9jYXRlZD8gQWgsIGl0J3MgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gT2theSwgaGVyZSdzIGFuIGludGVyZXN0aW5nIGJpdC4gVGhlIG5ldyBsb2dpYyBpbiBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AgaXMgZ3VhcmRlZCBieSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpYC4gR29vZCB0byBrbm93LiBCdXQgd2FpdCwgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIHVzZXMgYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAuIElzIHRoYXQgYXZhaWxhYmxlIG9ubHkgaWYgYENPTkZJR19WTEFOXzgwMjFRYCBpcyBlbmFibGVkPyBUaW1lIHRvIGRvdWJsZS1jaGVjayBgX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1YC4gR290dGEgdmVyaWZ5IHRoaXMgZGVwZW5kZW5jeSBiZWZvcmUgSSBwcm9jZWVkIHdpdGggdGhlIGZ1enppbmcgcGxhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwOTozOTo0OC44ODkxOTUwNzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NzMyMDExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz00MDY4PXN0YXRpYyBib29sIGJueHRfcmVfY2hlY2tfaWZfdmxhbl92YWxpZChzdHJ1Y3QgYm54dF9yZV9kZXYgKnJkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQwNzQtXFx0ICovXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzo0MDc1OlxcdGlmICghX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHJkZXYtXFx1MDAzZW5ldGRldixcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQwNzYtXFx0XFx0XFx0XFx0ICAgICAgaHRvbnMoRVRIX1BfODAyMVEpLCB2bGFuX2lkKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvY3hnYjNfb2ZmbG9hZC5jPTE3Nj1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF9pZmZfZnJvbV9tYWMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL2N4Z2IzX29mZmxvYWQuYy0xODctXFx0XFx0XFx0aWYgKHZsYW4gXFx1MDAyNlxcdTAwMjYgdmxhbiAhPSBWTEFOX1ZJRF9NQVNLKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmM6MTg4OlxcdFxcdFxcdFxcdGRldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdmxhbik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmMtMTg5LVxcdFxcdFxcdH0gZWxzZSBpZiAobmV0aWZfaXNfYm9uZF9zbGF2ZShkZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmM9MjE4PWludCBjeGdiNF91cGRhdGVfcm9vdF9kZXZfY2xpcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIzNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVkxBTl9OX1ZJRDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jOjIzNzpcXHRcXHRyb290X2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIzOC1cXHRcXHRpZiAoIXJvb3RfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9ODc0Mz1zdGF0aWMgdm9pZCBtbHhzd19zcF9yaWZfZGVzdHJveV92bGFuX3VwcGVyKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04NzUwLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzo4NzUxOlxcdHVwcGVyX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShicl9kZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdmlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04NzUyLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9ODc3MD1pbnQgbWx4c3dfc3Bfcm91dGVyX2JyaWRnZV92bGFuX2FkZChzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODgzMS1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6ODgzMjpcXHRcXHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnJfZGV2LCBodG9ucyhFVEhfUF84MDIxUSksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODgzMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIG9sZF9wdmlkKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYz00MDgyPXZvaWQgcWxjbmljX3Jlc3RvcmVfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jLTQwOTEtXFx0Zm9yX2VhY2hfc2V0X2JpdCh2aWQsIGFkYXB0ZXItXFx1MDAzZXZsYW5zLCBWTEFOX05fVklEKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwOTI6XFx0XFx0ZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KG5ldGRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB2aWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDkzLVxcdFxcdGlmICghZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmM9MzA5PXN0YXRpYyB2b2lkIGRvX25laWdoX3NvbGljaXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCAqYnVmLCB1MTYgdGNpKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzI2LVxcdGlmICh0Y2kpIHtcXG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYzozMjc6XFx0XFx0bmV0ZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldi1cXHUwMDNlbmV0LCBodG9ucyhFVEhfUF84MDIxUSksXFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzI4LVxcdFxcdFxcdFxcdFxcdFxcdCAgdGNpKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTEyMz1zdHJ1Y3Qgdmxhbl9wY3B1X3N0YXRzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDoxMzY6ZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNy1cXHRcXHRcXHRcXHRcXHQgICAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTI1Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDoyNTM6X192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0yNTQtXFx0XFx0ICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTA9Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTc1LS8qIE11c3QgYmUgaW52b2tlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjc2OnN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNzctXFx0XFx0XFx0XFx0XFx0X19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTkzLVxcdFxcdGlmICh1cHBlcl9kZXYpXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjk0OlxcdFxcdFxcdHJldHVybiBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UodXBwZXJfZGV2LFxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy05NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdmxhbl9wcm90bywgdmxhbl9pZCk7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtOTktfVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYzoxMDA6RVhQT1JUX1NZTUJPTChfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UpO1xcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMDEtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTEyND12b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE3OS1cXHRpZiAodmlkICE9IDApIHtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjE4MDpcXHRcXHR2bGFuZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGJyLVxcdTAwM2VkZXYsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE4MS1cXHRcXHRcXHRcXHRcXHRcXHQgICB2aWQpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz00MTQ9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ1NS1cXHRcXHQvKiBidWlsZCBuZWlnaCB0YWJsZSBsb29rdXAgb24gdGhlIHZsYW4gZGV2aWNlICovXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo0NTY6XFx0XFx0dmxhbmRldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShici1cXHUwMDNlZGV2LCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00NTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgdmlkKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NDM1PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnJuZl9nZXRfbG9naWNhbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDQ2LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDQ3OlxcdHZsYW4gPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ0OC1cXHRcXHRcXHRcXHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpIFxcdTAwMjYgVkxBTl9WSURfTUFTSyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MjMzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI0My1cXHR2aWQgPSBudG9ocyhwYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0kpIFxcdTAwMjYgVkxBTl9WSURfTUFTSztcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjQ0OlxcdHZsYW5fZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgcHJvdG8sIHZpZCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjI0NS1cXHRpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB8fFxcbi0tXFxubmV0L2RzYS90YWcuaD0xMDQ9c3RhdGljIGlubGluZSB2b2lkIGRzYV9zb2Z0d2FyZV91bnRhZ192bGFuX3VuYXdhcmVfYnJpZGdlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvZHNhL3RhZy5oLTEzMS1cXHQgKi9cXG5uZXQvZHNhL3RhZy5oOjEzMjpcXHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIGh0b25zKHByb3RvKSwgdmlkKTtcXG5uZXQvZHNhL3RhZy5oLTEzMy1cXHRpZiAoIXVwcGVyX2RldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6Mzk6NTEuNTU2NTIzMDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA0MjIyMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIFZMQU4gRGV2aWNlIERpc2NvdmVyeSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLiBUaGUgY29kZSBzYXlzIGl0J3MgZGVmaW5lZCBpbiBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gSXQncyBvbmx5IGF2YWlsYWJsZSBpZiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGVuYWJsZWQuIFdhaXQgYSBzZWNvbmQsIGRvZXMgdGhhdCBtZWFuIGB2bGFuX2NvcmUuY2AgaXMgYWN0dWFsbHkgKmNvbXBpbGVkKiBvbmx5IHdoZW4gdGhhdCBjb25maWcgb3B0aW9uIGlzIHNldD8gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHRoYXQuIExldCdzIGhlYWQgb3ZlciB0byB0aGUgYG5ldC84MDIxcS9NYWtlZmlsZWAgYW5kIGNvbmZpcm0gaG93IHRoYXQgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLiBHb3R0YSBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzM2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6Mzk6NTUuMDYwNzQ3Mzk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTA5ODgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bGFuX2NvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0LzgwMjFxL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC84MDIxcS9NYWtlZmlsZS00LSNcXG5uZXQvODAyMXEvTWFrZWZpbGU6NTpvYmotJChzdWJzdCBtLHksJChDT05GSUdfVkxBTl84MDIxUSkpXFx0Kz0gdmxhbl9jb3JlLm9cXG5uZXQvODAyMXEvTWFrZWZpbGUtNi1vYmotJChDT05GSUdfVkxBTl84MDIxUSlcXHRcXHQrPSA4MDIxcS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA5OjM5OjU1LjE5OTg1MTkxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTI3MjQ1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZMQU4gS2VybmVsIE1vZHVsZSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGl0IHNlZW1zIGxpa2UgYHZsYW5fY29yZS5vYCBpcyBkZWZpbml0ZWx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19WTEFOXzgwMjFRYCBpcyBlbmFibGVkLiBBbmQsIEkgc2VlIHRoYXQgYHN1YnN0IG0seWAgd2hpY2ggbWVhbnMgaXQncyBidWlsdC1pbiBpZiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdGFuZGFyZC5cblxuTm93LCBob2xkIG9uLi4udGhpcyBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAgZnVuY3Rpb24gaXMgZ3VhcmRlZCBieSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0J3MgYSBkaWZmZXJlbnQgY29uY2VybiwgYnV0IGFscmlnaHQsIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cbkJ1dCwgYSBtb3JlIGltcG9ydGFudCBxdWVzdGlvbiBhcmlzZXMuIEkgbmVlZCB0byBrbm93IGlmIGEgcGFydGljdWxhciBmdW5jdGlvbiwgYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAsIGlzIHN0aWxsIGFjY2Vzc2libGUgZXZlbiB3aGVuIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgZGlzYWJsZWQuIFRoYXQncyBhIGNydWNpYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCBpbiB0aGlzIHNjZW5hcmlvLlxuXG5JIHRoaW5rIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgd2lsbCBiZSBpbiBgaW5jbHVkZS9saW51eC9pZl92bGFuLmhgLCBsZXQgbWUgZ28gYW5kIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTM2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA5OjQwOjAwLjA1MjYxMDk2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTM4MzY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9pZl92bGFuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MTIzPXN0cnVjdCB2bGFuX3BjcHVfc3RhdHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMTM1LVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjEzNjpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMTM3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MjUyPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKlxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjI1MzpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTI1NC1cXHRcXHQgICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6NDA6MDAuMTUyMDAwNDk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA0ODU0MDE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQgZm9yIFZMQU4gRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIHNlZSB0aGVyZSdzIGEgc3RhdGljIGlubGluZSBmYWxsYmFjayBpZiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGRpc2FibGVkLCB3aGljaCBpcyBnb29kIGZvciBzb21lIHVzZSBjYXNlcywgYnV0IHRvIGFjdHVhbGx5ICp0ZXN0KiB0aGUgVkxBTiBmdW5jdGlvbmFsaXR5LCBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIFRoZSBjb2RlIHVzZXMgYGlzX3ZsYW5fZGV2YCwgYHZsYW5fZGV2X3ByaXZgLCBgdmxhbl9kZXZfdmxhbl9wcm90b2AsIGFuZCBgdmxhbl9kZXZfdmxhbl9pZGAgd2l0aGluIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYW5kIHRob3NlIGFyZSBhbGwgZ2F0ZWQgYnkgYW4gYCNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKWAgY29uZGl0aW9uLiBTbywgbm8gcXVlc3Rpb24sIGBWTEFOXzgwMjFRYCBnb2VzIG9uIHRoZSBcIlJlcXVpcmVkXCIgbGlzdC5cblxuTm93LCBpdCdzIHByZXR0eSBvYnZpb3VzIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBhIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggQlBGLiBBbmQgc2luY2UgdGhlIGNvZGUgaXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgdGhlbiBvYnZpb3VzbHkgYE5FVGAgaXMgbmVjZXNzYXJ5IGFzIHdlbGwuXG5cblRoZSBmdW5jdGlvbnMgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBoZXJlIGFwcGVhciB0byBiZTogYGJwZl94ZHBfZmliX2xvb2t1cGAsIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuXG5cbldhaXQsIHRob3NlIGZpcnN0IHR3bywgYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBhcmUgQlBGIGhlbHBlcnMuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlcXVpcmVkIGNvbmZpZ3MuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNgIGFuZCBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAsIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgYWJvdXQgYWRkaW5nIGBWTEFOXzgwMjFRYCB0byBgRW5hYmxlQ29uZmlnc2Agbm93LlxuXG5MZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiB0aGF0IGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBmdW5jdGlvbiBpcyBpbmxpbmVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byB0aGUgZmxvdyBvZiB0aGUgcHJvZ3JhbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4MzcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6NDA6MDYuMjAwNTQzNThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNjg1MDg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZmliX3NldF9md2RfcGFyYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTYxOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwMy0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjA0OnN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyNTQ9c3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02NDAwLXNldF9md2RfcGFyYW1zOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjY0MDE6XFx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTY0MDItfVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1NTMtc2V0X2Z3ZF9wYXJhbXM6XFxubmV0L2NvcmUvZmlsdGVyLmM6NjU1NDpcXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjU1NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA5OjQwOjA2LjUyNzQwMzgxOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDY0ODYxODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEZJQiBMb29rdXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEJQRiBGSUIgbG9va3VwIGZ1bmN0aW9uYWxpdHkuIFRoZSBmaXJzdCB0aGluZyBJJ20gbm90aWNpbmcgaXMgdGhlIHByZXNlbmNlIG9mIHN0YXRpYyBmdW5jdGlvbnMuIFNpbmNlIHRoZXkncmUgc3RhdGljLCB0aGV5J3JlIHByb2JhYmx5IGlubGluZWQsIHNvIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aG9zZS4gTXkgaW5pdGlhbCBsaXN0IGluY2x1ZGVzIGBicGZfeGRwX2ZpYl9sb29rdXBgLCBgYnBmX3NrYl9maWJfbG9va3VwYCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLiBBbmQsIHllcywgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIGlzIGFsc28gc3RhdGljLlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0IGtlcm5lbCBjb25maWdzIGFyZSBpbnZvbHZlZC4gSXQgc2VlbXMgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBhcmUgcmVsZXZhbnQgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgYWRkIGBWTEFOXzgwMjFRYCB0byBgRW5hYmxlQ29uZmlnc2Agc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIFZMQU4gaW5wdXQsIGFuZCBqdXN0IHRvIGJlIHNhZmUsIEknbGwgYWxzbyBhZGQgYElQVjZgLCBldmVuIHRob3VnaCBpdCdzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LiBgQlBGX1NZU0NBTExgIGFsc28gbG9va3MgaW1wb3J0YW50LCBzbyB0aGF0IGdvZXMgaW4gYEVuYWJsZUNvbmZpZ3NgIHRvby5cblxuTGV0J3MgcmV2aWV3IHRoZSBwYXRjaCBhZ2FpbiB0byBtYWtlIHN1cmUgSSdtIGNhcHR1cmluZyBldmVyeXRoaW5nLiBSaWdodCwgaXQgYWRkcyBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCBmbGFncyB0byBgYnBmX2ZpYl9sb29rdXBgLiBJdCBtb2RpZmllcyB0aGUgbG9va3VwIGZ1bmN0aW9uczogYGJwZl94ZHBfZmliX2xvb2t1cGAsIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIEl0IGFsc28gYWZmZWN0cyBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AsIGFkZHMgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIGFuZCBtb2RpZmllcyBgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tgLlxuXG5TbywgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGEgY2xvc2VyIGxvb2sgYXJlOlxuLSBgYnBmX3hkcF9maWJfbG9va3VwYFxuLSBgYnBmX3NrYl9maWJfbG9va3VwYFxuLSBgYnBmX2lwdjRfZmliX2xvb2t1cGBcbi0gYGJwZl9pcHY2X2ZpYl9sb29rdXBgXG5cbkFscmlnaHQsIEkgdGhpbmsgdGhhdCdzIHRoZSBjb3JlIG9mIGl0LiBBcmUgdGhlcmUgYW55IG90aGVyIGhlbHBlciBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgaGVyZT8gTm8sIHRob3NlIGFyZSB0aGUgcHJpbWFyeSBvbmVzLlxuXG5JIHNob3VsZCB2ZXJpZnkgaWYgYGJwZl9maWJfbG9va3VwX2ZsYWdzX29rYCBpcyBhbHNvIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxMjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6NDA6MTIuOTkyMjcwMTc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyNjI5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1NjItXFxubmV0L2NvcmUvZmlsdGVyLmM6NjU2MzpzdGF0aWMgYm9vbCBicGZfZmliX2xvb2t1cF9mbGFnc19vayh1MzIgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjU2NC17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NTc1PUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjU4MC1cXG5uZXQvY29yZS9maWx0ZXIuYzo2NTgxOlxcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1ODItXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NjA5PUJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02NjE4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY2MTk6XFx0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjYyMC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6NDA6MTMuMTA0NTM3NDQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTM1NDg3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEZJQiBMb29rdXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGFib3V0IHRoZSBCUEYgRklCIGxvb2t1cCBmdW5jdGlvbmFsaXR5LCBhbmQgaXQncyBkZWZpbml0ZWx5IHN0YXRpYyBpbiBuYXR1cmUg4oCTIG5vdGhpbmcgZHluYW1pYyBoZXJlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGtleSBCUEYgc3ltYm9scyBpbnZvbHZlZDogYGJwZl94ZHBfZmliX2xvb2t1cGAsIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIFRoZXNlIGFyZSBteSBlbnRyeSBwb2ludHMuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgYWRkaW5nIFZMQU4gc3VwcG9ydCB0byBgYnBmX2ZpYl9sb29rdXBgLCBhbmQgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCBmbGFncy4gVGhpcyBtZWFucyB0aGUgY29yZSBCUEYgRklCIGxvb2t1cCBsb2dpYywgY3JpdGljYWwgZm9yIElQdjQgYW5kIElQdjYgdHJhZmZpYywgaXMgYmVpbmcgbW9kaWZpZWQuIFNpbmNlIHRoaXMgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zLCBJIG5lZWQgdG8gY2VudGVyIG15IGZ1enppbmcgZWZmb3J0cyBhcm91bmQgdGhlc2UgZW50cnkgcG9pbnRzLCBhbG9uZyB3aXRoIHRoZSBJUHY0L0lQdjYtc3BlY2lmaWMgbG9va3VwIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGVuYWJsZWQgZm9yIGFueSB0ZXN0aW5nIG9mIHRoZSBWTEFOLXNwZWNpZmljIGxvZ2ljLlxuXG5JIHRoaW5rIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbGFiZWwgdGhlc2UgbmV3IGZsYWdzIGFuZCB0aGUgcGF0Y2ggaXRzZWxmIGFzIFwic2V0LXJlc3VsdHNcIi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0MjQsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA5OjQwOjE4LjQ1ODA4OTAwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDk4Mzg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2NF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2Nl9maWJfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyIChgYnBmX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGZsYWdzOiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYC4gVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBjb3JlIEJQRiBGSUIgbG9va3VwIGxvZ2ljIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIEZJQiBsb29rdXAgZW50cnkgcG9pbnRzIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIGxvb2t1cCBmdW5jdGlvbnMuIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgVkxBTiBzcGVjaWZpYyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3hkcF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfc2tiX2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9pcHY0X2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9pcHY2X2ZpYl9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFZMQU5zIGluIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXIgKGBicGZfZmliX2xvb2t1cGApLiBJdCBpbnRyb2R1Y2VzIHR3byBuZXcgZmxhZ3M6IGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgLiBUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIGNvcmUgQlBGIEZJQiBsb29rdXAgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgRklCIGxvb2t1cCBlbnRyeSBwb2ludHMgYW5kIHRoZSBJUHY0L0lQdjYgc3BlY2lmaWMgbG9va3VwIGZ1bmN0aW9ucy4gYENPTkZJR19WTEFOXzgwMjFRYCBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBWTEFOIHNwZWNpZmljIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowlvhdf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-04 09:28:43 +0000 UTC FinishedAt: 2026-07-04 09:40:20 +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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q" ], "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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q" ], "series_id": "0e6c9019-4eef-48d1-9dde-ecfa405713e1" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_xdp_fib_lookup", "bpf_skb_fib_lookup", "bpf_ipv4_fib_lookup", "bpf_ipv6_fib_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA3LzA0IDA5OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfeGRwX2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrYl9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY0X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX2lwdjZfZmliX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFZMQU5zIGluIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXIgKGBicGZfZmliX2xvb2t1cGApLiBJdCBpbnRyb2R1Y2VzIHR3byBuZXcgZmxhZ3M6IGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgLiBUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIGNvcmUgQlBGIEZJQiBsb29rdXAgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgRklCIGxvb2t1cCBlbnRyeSBwb2ludHMgYW5kIHRoZSBJUHY0L0lQdjYgc3BlY2lmaWMgbG9va3VwIGZ1bmN0aW9ucy4gYENPTkZJR19WTEFOXzgwMjFRYCBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBWTEFOIHNwZWNpZmljIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA5OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzAyMzExNjVjNGViZmFiZWM5OWJjNTc5NDZhMmU4YzY1ZmRjZTJjYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDQgMDk6Mzk6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uZDQyMTg5NTRjNTBmNTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTM1MzIsNiAmIzQzOzM1MzIsNDUgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXG4gICpcdFx0XHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXG4gICpcdFx0XHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXG4mIzQzOyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXG4mIzQzOyAqXHRcdFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxuJiM0MzsgKlx0XHRcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxuJiM0MzsgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBmcm9tXG4mIzQzOyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggd2l0aCB0aGVcbiYjNDM7ICpcdFx0XHRwYXJlbnQmIzM5O3MgaWZpbmRleC4gKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcbiYjNDM7ICpcdFx0XHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXG4mIzQzOyAqXHRcdFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXHUwMDNlc21hYyBpc1xuJiM0MzsgKlx0XHRcdHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxuJiM0MzsgKlx0XHRcdHBhcmVudCYjMzk7cy4gT25seSB0aGUgaW1tZWRpYXRlIHBhcmVudCBpcyByZXNvbHZlZDsgaWYgaXRcbiYjNDM7ICpcdFx0XHRpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsXG4mIzQzOyAqXHRcdFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXG4mIzQzOyAqXHRcdFx0b25lIHRhZyBhbmQgdGhlIGxvb2t1cCByZXR1cm5zXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotXHUwMDNlaWZpbmRleFxuJiM0MzsgKlx0XHRcdGxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0XG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSYjMzk7cyBvd25cbiYjNDM7ICpcdFx0XHRpZmluZGV4LiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXG4mIzQzOyAqXHRcdFx0YXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXBcbiYjNDM7ICpcdFx0XHR0aGUgaGVscGVyJiMzOTtzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHRcbiYjNDM7ICpcdFx0XHRzdGlsbCByZXBvcnRzIHRoZSByb3V0ZSBtdHUgaW4gKnBhcmFtcyotXHUwMDNlbXR1X3Jlc3VsdC5cbiYjNDM7ICpcdFx0XHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xuJiM0MzsgKlx0XHRcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxuJiM0MzsgKlx0XHRcdGRldmljZSBkaXJlY3RseS5cbiYjNDM7ICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKipcbiYjNDM7ICpcdFx0XHRUcmVhdCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0lcbiYjNDM7ICpcdFx0XHRhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzc1xuJiM0MzsgKlx0XHRcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcbiYjNDM7ICpcdFx0XHRvbiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4LiBUaGUgVklEIGlzIHRoZSBsb3cgMTIgYml0cyBvZlxuJiM0MzsgKlx0XHRcdCpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0k7ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBtdXN0IGJlXG4mIzQzOyAqXHRcdFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxuJiM0MzsgKlx0XHRcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IGlzIGl0c2VsZiBhIFZMQU5cbiYjNDM7ICpcdFx0XHRkZXZpY2UsIGl0cyBpbm5lciAoUWluUSkgc3ViaW50ZXJmYWNlIGlzIG1hdGNoZWQ7IGZvciBhXG4mIzQzOyAqXHRcdFx0Ym9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXImIzM5O3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXG4mIzQzOyAqXHRcdFx0dGFnLCBhIGRvd24gZGV2aWNlLCBvciBvbmUgaW4gYW5vdGhlciBuYW1lc3BhY2UgcmV0dXJuc1xuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cbiYjNDM7ICpcdFx0XHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xuJiM0MzsgKlx0XHRcdGZsYWcgZm9yIHByaW9yaXR5LXRhZ2dlZCBmcmFtZXMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXG4mIzQzOyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxuJiM0MzsgKlx0XHRcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cbiAgKlxuICAqXHRcdCpjdHgqIGlzIGVpdGhlciAqKnN0cnVjdCB4ZHBfbWQqKiBmb3IgWERQIHByb2dyYW1zIG9yXG4gICpcdFx0KipzdHJ1Y3Qgc2tfYnVmZioqIHRjIGNsc19hY3QgcHJvZ3JhbXMuXG5AQCAtNzMyNyw2ICYjNDM7NzM2Niw4IEBAIGVudW0ge1xuIFx0QlBGX0ZJQl9MT09LVVBfVEJJRCAgICA9ICgxVSBcdTAwM2NcdTAwM2MgMyksXG4gXHRCUEZfRklCX0xPT0tVUF9TUkMgICAgID0gKDFVIFx1MDAzY1x1MDAzYyA0KSxcbiBcdEJQRl9GSUJfTE9PS1VQX01BUksgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDUpLFxuJiM0MztcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXHUwMDNjXHUwMDNjIDYpLFxuJiM0MztcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXHUwMDNjXHUwMDNjIDcpLFxuIH07XG4gXG4gZW51bSB7XG5AQCAtNzM0MCw2ICYjNDM7NzM4MSw3IEBAIGVudW0ge1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCwgIC8qIGZyYWdtZW50YXRpb24gcmVxdWlyZWQgdG8gZndkICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX1NSQ19BRERSLCAgLyogZmFpbGVkIHRvIGRlcml2ZSBJUCBzcmMgYWRkciAqL1xuJiM0MztcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xuIH07XG4gXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbkBAIC03MzkzLDcgJiM0Mzs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0Lyogb3V0cHV0ICovXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxuJiM0MztcdFx0XHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxuJiM0MztcdFx0XHQgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGhcbiYjNDM7XHRcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXG4mIzQzO1x0XHRcdCAqIHRoZSBsb29rdXAgYnkuXG4mIzQzO1x0XHRcdCAqL1xuIFx0XHRcdF9fYmUxNlx0aF92bGFuX3Byb3RvO1xuIFx0XHRcdF9fYmUxNlx0aF92bGFuX1RDSTtcbiBcdFx0fTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCAyZTk2YjRiODQ3Y2UxMi4uMGVhMzYyZmE0Mjg3ZTMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC02MjAxLDIxICYjNDM7NjIwMSw2MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7XG4gI2VuZGlmXG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4tc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLCB1MzIgbXR1KVxuJiM0MztzdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuJiM0MztcdFx0XHRcdCAgdTMyIGZsYWdzLCB1MzIgbXR1LCB1MzIgaW5faWZpbmRleClcbiB7XG4gXHRwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSA9IDA7XG4gXHRwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gMDtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKVxuJiM0MztcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIFx1MDAyNlx1MDAyNiBpc192bGFuX2RldihkZXYpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9wcml2KGRldiktXHUwMDNlcmVhbF9kZXY7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFpc192bGFuX2RldihyZWFsX2RldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbmV0X2VxKGRldl9uZXQocmVhbF9kZXYpLCBkZXZfbmV0KGRldikpKSB7XG4mIzQzO1x0XHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSB2bGFuX2Rldl92bGFuX3Byb3RvKGRldik7XG4mIzQzO1x0XHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModmxhbl9kZXZfdmxhbl9pZChkZXYpKTtcbiYjNDM7XHRcdFx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSByZWFsX2Rldi1cdTAwM2VpZmluZGV4O1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSBpbl9pZmluZGV4O1xuJiM0MztcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRpZiAobXR1KVxuIFx0XHRwYXJhbXMtXHUwMDNlbXR1X3Jlc3VsdCA9IG10dTsgLyogdW5pb24gd2l0aCB0b3RfbGVuICovXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zKVxuJiM0Mzt7XG4mIzQzO1x0X19iZTE2IHByb3RvID0gcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90bztcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7XG4mIzQzO1x0dTE2IHZpZDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSBcdTAwMjZcdTAwMjYgcHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMUFEKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcbiYjNDM7XHR2aWQgPSBudG9ocyhwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSkgXHUwMDI2IFZMQU5fVklEX01BU0s7XG4mIzQzO1x0dmxhbl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBwcm90bywgdmlkKTtcbiYjNDM7XHRpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgfHxcbiYjNDM7XHQgICAgIW5ldF9lcShkZXZfbmV0KHZsYW5fZGV2KSwgZGV2X25ldChkZXYpKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmxhbl9kZXY7XG4mIzQzO31cbiAjZW5kaWZcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbiBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdFx0XHQgICAgICAgdTMyIGZsYWdzLCBib29sIGNoZWNrX210dSlcbiB7XG4mIzQzO1x0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDtcbiBcdHN0cnVjdCBmaWJfbmhfY29tbW9uICpuaGM7XG4gXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7XG5AQCAtNjIyOSw2ICYjNDM7NjI2OCwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdGlmICh1bmxpa2VseSghZGV2KSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4mIzQzO1x0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoZGV2KSlcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcbiYjNDM7XHRcdGlmICghZGV2KVxuJiM0MztcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIHZlcmlmeSBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb24gdGhpcyBpbnRlcmZhY2UgKi9cbiBcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbiBcdGlmICh1bmxpa2VseSghaW5fZGV2IHx8ICFJTl9ERVZfRk9SV0FSRChpbl9kZXYpKSlcbkBAIC02MjM4LDcgJiM0Mzs2Mjg1LDExIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0XHRmbDQuZmxvd2k0X2lpZiA9IDE7XG4gXHRcdGZsNC5mbG93aTRfb2lmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHR9IGVsc2Uge1xuLVx0XHRmbDQuZmxvd2k0X2lpZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIGRldi1cdTAwM2VpZmluZGV4LCBub3QgcGFyYW1zLVx1MDAzZWlmaW5kZXg6IFZMQU5fSU5QVVQgbWF5IGhhdmVcbiYjNDM7XHRcdCAqIHJlc29sdmVkIGRldiB0byBhIHN1YmludGVyZmFjZSBhYm92ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Zmw0LmZsb3dpNF9paWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbiBcdFx0Zmw0LmZsb3dpNF9vaWYgPSAwO1xuIFx0fVxuIFx0Zmw0LmZsb3dpNF9kc2NwID0gaW5ldF9kc2ZpZWxkX3RvX2RzY3AocGFyYW1zLVx1MDAzZXRvcyk7XG5AQCAtNjM0Nyw3ICYjNDM7NjM5OCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0bWVtY3B5KHBhcmFtcy1cdTAwM2VzbWFjLCBkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbiBzZXRfZndkX3BhcmFtczpcbi1cdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKHBhcmFtcywgbXR1KTtcbiYjNDM7XHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTYzNTcsNiAmIzQzOzY0MDgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiB7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgKnNyYyA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVx1MDAzZWlwdjZfc3JjO1xuIFx0c3RydWN0IGluNl9hZGRyICpkc3QgPSAoc3RydWN0IGluNl9hZGRyICopIHBhcmFtcy1cdTAwM2VpcHY2X2RzdDtcbiYjNDM7XHR1MzIgaW5faWZpbmRleCA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuIFx0c3RydWN0IGZpYjZfcmVzdWx0IHJlcyA9IHt9O1xuIFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuQEAgLTYzNzQsNiAmIzQzOzY0MjYsMTQgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRpZiAodW5saWtlbHkoIWRldikpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xuJiM0MztcdFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGRldikpXG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKGRldik7XG4mIzQzO1x0XHRpZiAoIWRldilcbiYjNDM7XHRcdFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZGV2ID0gX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2KTtcbiBcdGlmICh1bmxpa2VseSghaWRldiB8fCAhUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLmZvcndhcmRpbmcpKSlcbiBcdFx0cmV0dXJuIEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVEO1xuQEAgLTYzODIsNyAmIzQzOzY0NDIsMTIgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRcdGZsNi5mbG93aTZfaWlmID0gMTtcbiBcdFx0b2lmID0gZmw2LmZsb3dpNl9vaWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdH0gZWxzZSB7XG4tXHRcdG9pZiA9IGZsNi5mbG93aTZfaWlmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZGV2LVx1MDAzZWlmaW5kZXgsIG5vdCBwYXJhbXMtXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxuJiM0MztcdFx0ICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRvaWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbiYjNDM7XHRcdGZsNi5mbG93aTZfaWlmID0gb2lmO1xuIFx0XHRmbDYuZmxvd2k2X29pZiA9IDA7XG4gXHRcdHN0cmljdCA9IFJUNl9MT09LVVBfRl9IQVNfU0FERFI7XG4gXHR9XG5AQCAtNjQ4NiwxMyAmIzQzOzY1NTEsMjYgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRtZW1jcHkocGFyYW1zLVx1MDAzZXNtYWMsIGRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuIHNldF9md2RfcGFyYW1zOlxuLVx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xuJiM0MztcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbiB9XG4gI2VuZGlmXG4gXG4gI2RlZmluZSBCUEZfRklCX0xPT0tVUF9NQVNLIChCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBcXFxuIFx0XHRcdCAgICAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBcXFxuLVx0XHRcdCAgICAgQlBGX0ZJQl9MT09LVVBfU1JDIHwgQlBGX0ZJQl9MT09LVVBfTUFSSylcbiYjNDM7XHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLIHwgXFxcbiYjNDM7XHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVClcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGJwZl9maWJfbG9va3VwX2ZsYWdzX29rKHUzMiBmbGFncylcbiYjNDM7e1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoZmxhZ3MgXHUwMDI2IChCUEZfRklCX0xPT0tVUF9UQklEIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVUKSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4gXG4gQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4gXHQgICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKiwgcGFyYW1zLCBpbnQsIHBsZW4sIHUzMiwgZmxhZ3MpXG5AQCAtNjUwMCw3ICYjNDM7NjU3OCw3IEBAIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxuIFx0aWYgKHBsZW4gXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRklCX0xPT0tVUF9NQVNLKVxuJiM0MztcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHN3aXRjaCAocGFyYW1zLVx1MDAzZWZhbWlseSkge1xuQEAgLTY1MzgsNyAmIzQzOzY2MTYsMTAgQEAgQlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcdGlmIChwbGVuIFx1MDAzYyBzaXplb2YoKnBhcmFtcykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcbiYjNDM7XHRpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKHBhcmFtcy1cdTAwM2V0b3RfbGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0zNTMyLDYgJiM0MzszNTMyLDQ1IEBAIHVuaW9uIGJwZl9hdHRyIHtcbiAgKlx0XHRcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVx1MDAzZW1hcmsgZm9yIHRoZSBmaWIgbG9va3VwLlxuICAqXHRcdFx0VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggQlBGX0ZJQl9MT09LVVBfRElSRUNULFxuICAqXHRcdFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxuJiM0MzsgKlx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKlxuJiM0MzsgKlx0XHRcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcbiYjNDM7ICpcdFx0XHRwYXJlbnQgaXMgYSByZWFsIChub24tVkxBTikgZGV2aWNlLCBzZXRcbiYjNDM7ICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0kgZnJvbVxuJiM0MzsgKlx0XHRcdHRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IHdpdGggdGhlXG4mIzQzOyAqXHRcdFx0cGFyZW50JiMzOTtzIGlmaW5kZXguICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklEXG4mIzQzOyAqXHRcdFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xuJiM0MzsgKlx0XHRcdHNldCBlZ3Jlc3MgcHJpb3JpdHkgd3JpdGVzIFBDUCBpdHNlbGYuICpwYXJhbXMqLVx1MDAzZXNtYWMgaXNcbiYjNDM7ICpcdFx0XHR0aGUgVkxBTiBkZXZpY2UmIzM5O3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcbiYjNDM7ICpcdFx0XHRwYXJlbnQmIzM5O3MuIE9ubHkgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaXMgcmVzb2x2ZWQ7IGlmIGl0XG4mIzQzOyAqXHRcdFx0aXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLFxuJiM0MzsgKlx0XHRcdHRoZSBlZ3Jlc3MgY2Fubm90IGJlIHJlZHVjZWQgdG8gYSBwaHlzaWNhbCBkZXZpY2UgcGx1c1xuJiM0MzsgKlx0XHRcdG9uZSB0YWcgYW5kIHRoZSBsb29rdXAgcmV0dXJuc1xuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLVx1MDAzZWlmaW5kZXhcbiYjNDM7ICpcdFx0XHRsZWZ0IGF0IHRoZSBpbnB1dC4gUmUtaXNzdWUgd2l0aG91dFxuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqIHRvIG9idGFpbiB0aGUgVkxBTiBkZXZpY2UmIzM5O3Mgb3duXG4mIzQzOyAqXHRcdFx0aWZpbmRleC4gVGhlIHN3YXAgYW5kIHRoZSB2bGFuIGZpZWxkc1xuJiM0MzsgKlx0XHRcdGFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwXG4mIzQzOyAqXHRcdFx0dGhlIGhlbHBlciYjMzk7cyBleGlzdGluZyBiZWhhdmlvdXIsIHNvIGEgZnJhZy1uZWVkZWQgcmVzdWx0XG4mIzQzOyAqXHRcdFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVx1MDAzZW10dV9yZXN1bHQuXG4mIzQzOyAqXHRcdFx0VGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXNcbiYjNDM7ICpcdFx0XHRyZWNlaXZlIC1FSU5WQUwgc2luY2UgdGhleSBjYW4gcmVkaXJlY3QgdG8gdGhlIFZMQU5cbiYjNDM7ICpcdFx0XHRkZXZpY2UgZGlyZWN0bHkuXG4mIzQzOyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXG4mIzQzOyAqXHRcdFx0VHJlYXQgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJXG4mIzQzOyAqXHRcdFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcbiYjNDM7ICpcdFx0XHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXG4mIzQzOyAqXHRcdFx0b24gKnBhcmFtcyotXHUwMDNlaWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2ZcbiYjNDM7ICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJOyAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxuJiM0MzsgKlx0XHRcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcbiYjNDM7ICpcdFx0XHQqKi1FSU5WQUwqKi4gSWYgKnBhcmFtcyotXHUwMDNlaWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOXG4mIzQzOyAqXHRcdFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxuJiM0MzsgKlx0XHRcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJiMzOTtzIGlmaW5kZXguIEFuIHVubWF0Y2hlZFxuJiM0MzsgKlx0XHRcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcbiYjNDM7ICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXG4mIzQzOyAqXHRcdFx0QSBWSUQgb2YgMCBpcyBsb29rZWQgdXAgbGl0ZXJhbGx5LCBzbyBkbyBub3Qgc2V0IHRoaXNcbiYjNDM7ICpcdFx0XHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxuJiM0MzsgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcbiYjNDM7ICpcdFx0XHQocmV0dXJucyAqKi1FSU5WQUwqKikuXG4gICpcbiAgKlx0XHQqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvclxuICAqXHRcdCoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLlxuQEAgLTczMjcsNiAmIzQzOzczNjYsOCBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDMpLFxuIFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNCksXG4gXHRCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVIFx1MDAzY1x1MDAzYyA1KSxcbiYjNDM7XHRCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVIFx1MDAzY1x1MDAzYyA2KSxcbiYjNDM7XHRCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUID0gKDFVIFx1MDAzY1x1MDAzYyA3KSxcbiB9O1xuIFxuIGVudW0ge1xuQEAgLTczNDAsNiAmIzQzOzczODEsNyBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cbiYjNDM7XHRCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi9cbiB9O1xuIFxuIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG5AQCAtNzM5Myw3ICYjNDM7NzQzNSwxMyBAQCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xuIFxuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdC8qIG91dHB1dCAqL1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcbiYjNDM7XHRcdFx0ICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWRcbiYjNDM7XHRcdFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXG4mIzQzO1x0XHRcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxuJiM0MztcdFx0XHQgKiB0aGUgbG9va3VwIGJ5LlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9wcm90bztcbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9UQ0k7XG4gXHRcdH07XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXG5pbmRleCBiZDc2NTg5NTgwMDQxZi4uMThiNmZkZWNhMzgyYTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIC8qIENvcHlyaWdodCAoYykgMjAyMyBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWYuaFx1MDAzZVxuIFxuQEAgLTIzLDYgJiM0MzsyNCw3IEBAXG4gI2RlZmluZSBJUFY0X1RCSURfQUREUlx0XHRcJiMzNDsxNzIuMC4wLjI1NFwmIzM0O1xuICNkZWZpbmUgSVBWNF9UQklEX05FVFx0XHRcJiMzNDsxNzIuMC4wLjBcJiMzNDtcbiAjZGVmaW5lIElQVjRfVEJJRF9EU1RcdFx0XCYjMzQ7MTcyLjAuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9UQklEX05PTkVJR0hfRFNUXHRcJiMzNDsxNzIuMC4wLjVcJiMzNDtcbiAjZGVmaW5lIElQVjZfVEJJRF9BRERSXHRcdFwmIzM0O2ZkMDA6OkZGRkZcJiMzNDtcbiAjZGVmaW5lIElQVjZfVEJJRF9ORVRcdFx0XCYjMzQ7ZmQwMDo6XCYjMzQ7XG4gI2RlZmluZSBJUFY2X1RCSURfRFNUXHRcdFwmIzM0O2ZkMDA6OjJcJiMzNDtcbkBAIC0zNyw2ICYjNDM7MzksNDEgQEBcbiAjZGVmaW5lIElQVjZfTE9DQUxcdFx0XCYjMzQ7ZmQwMTo6M1wmIzM0O1xuICNkZWZpbmUgSVBWNl9HVzFcdFx0XCYjMzQ7ZmQwMTo6MVwmIzM0O1xuICNkZWZpbmUgSVBWNl9HVzJcdFx0XCYjMzQ7ZmQwMTo6MlwmIzM0O1xuJiM0MzsjZGVmaW5lIFZMQU5fSURcdFx0XHQxMDBcbiYjNDM7I2RlZmluZSBWTEFOX0lGQUNFXHRcdFwmIzM0O3ZldGgxLjEwMFwmIzM0O1xuJiM0MzsjZGVmaW5lIFZMQU5fSURfRE9XTlx0XHQxMDJcbiYjNDM7I2RlZmluZSBWTEFOX0lGQUNFX0RPV05cdFx0XCYjMzQ7dmV0aDEuMTAyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUUlOUV9PVVRFUl9JRkFDRVx0XCYjMzQ7dmV0aDEuMjAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUUlOUV9JTk5FUl9JRkFDRVx0XCYjMzQ7dmV0aDEuMjAwLjMwMFwmIzM0O1xuJiM0MzsjZGVmaW5lIFZMQU5fVEFCTEVcdFx0XCYjMzQ7MzAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0lGQUNFX0FERFJcdFwmIzM0OzEwLjUuMC4yNTRcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fRUdSRVNTX0RTVFx0XCYjMzQ7MTAuNS4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X1FJTlFfRFNUXHRcdFwmIzM0OzEwLjcuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0RTVFx0XHRcJiMzNDsxMC42LjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9HV1x0XHRcJiMzNDsxMC41LjAuMVwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSXHRcJiMzNDtmZDAyOjoyNTRcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY2X1ZMQU5fRUdSRVNTX0RTVFx0XCYjMzQ7ZmQwMjo6MlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9EU1RcdFx0XCYjMzQ7ZmQwMzo6MlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9HV1x0XHRcJiMzNDtmZDAyOjoxXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVkxBTl9WSURfVU5VU0VEXHRcdDk5OVxuJiM0MzsjZGVmaW5lIFZSRl9JRkFDRVx0XHRcJiMzNDt2cmYtYmx1ZVwmIzM0O1xuJiM0MzsjZGVmaW5lIFZSRl9UQUJMRVx0XHRcJiMzNDsxMDAwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVlJGX1ZMQU5fSURcdFx0MTAxXG4mIzQzOyNkZWZpbmUgVlJGX1ZMQU5fSUZBQ0VcdFx0XCYjMzQ7dmV0aDEuMTAxXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUlx0XCYjMzQ7MTAuOC4wLjI1NFwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVlJGX0dXXHRcdFwmIzM0OzEwLjguMC4xXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9WUkZfRFNUXHRcdFwmIzM0OzEwLjkuMC4yXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVEJJRF9WTEFOX0lEXHRcdDUwXG4mIzQzOyNkZWZpbmUgVEJJRF9WTEFOX0lGQUNFXHRcdFwmIzM0O3ZldGgyLjUwXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBWNF9UQklEX1ZMQU5fRFNUXHRcJiMzNDsxNzIuMi4wLjJcJiMzNDtcbiYjNDM7I2RlZmluZSBJUFY0X0JPTkRfVkxBTl9EU1RcdFwmIzM0OzEwLjExLjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9NVFVfRFNUXHRcJiMzNDsxMC41LjkuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIFFJTlFfQURfVkxBTl9JRFx0XHQyMDBcbiYjNDM7I2RlZmluZSBRSU5RX0lOTkVSX1ZMQU5fSURcdDMwMFxuJiM0MzsjZGVmaW5lIEJPTkRfSUZBQ0VcdFx0XCYjMzQ7Ym9uZDk5XCYjMzQ7XG4mIzQzOyNkZWZpbmUgQk9ORF9QT1JUXHRcdFwmIzM0O3ZldGgzXCYjMzQ7XG4mIzQzOyNkZWZpbmUgQk9ORF9QT1JUX1BFRVJcdFx0XCYjMzQ7dmV0aDRcJiMzNDtcbiYjNDM7I2RlZmluZSBCT05EX1ZMQU5fSURcdFx0NTAwXG4gI2RlZmluZSBETUFDXHRcdFx0XCYjMzQ7MTE6MTE6MTE6MTE6MTE6MTFcJiMzNDtcbiAjZGVmaW5lIERNQUNfSU5JVCB7IDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIH1cbiAjZGVmaW5lIERNQUMyXHRcdFx0XCYjMzQ7MDE6MDE6MDE6MDE6MDE6MDFcJiMzNDtcbkBAIC01Miw2ICYjNDM7ODksMTcgQEAgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB7XG4gXHRfX3UzMiB0YmlkO1xuIFx0X191OCBkbWFjWzZdO1xuIFx0X191MzIgbWFyaztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGlucHV0IHRhZyB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ7IGV4cGVjdGVkIG91dHB1dCB0YWdcbiYjNDM7XHQgKiB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU4gKGNoZWNrZWQgd2hlbiBjaGVja192bGFuIGlzIHNldClcbiYjNDM7XHQgKi9cbiYjNDM7XHRfX3UxNiB2bGFuX3Byb3RvO1xuJiM0MztcdF9fdTE2IHZsYW5faWQ7XG4mIzQzO1x0Ym9vbCBjaGVja192bGFuO1xuJiM0MztcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX2RldjsgLyogZXhwZWN0ZWQgcGFyYW1zLVx1MDAzZWlmaW5kZXggYWZ0ZXIgbG9va3VwICovXG4mIzQzO1x0Y29uc3QgY2hhciAqaWlmO1x0ICAvKiBvdmVycmlkZSB0aGUgZGVmYXVsdCB2ZXRoMSBpbnB1dCBkZXZpY2UgKi9cbiYjNDM7XHRfX3UxNiB0b3RfbGVuO1x0XHQgIC8qIHRyaWdnZXJzIHRoZSBpbi1sb29rdXAgbXR1IGNoZWNrIHdoZW4gc2V0ICovXG4mIzQzO1x0X191MTYgZXhwZWN0ZWRfbXR1O1x0ICAvKiBleHBlY3RlZCBtdHVfcmVzdWx0ICh1bmlvbiB3aXRoIHRvdF9sZW4pICovXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuQEAgLTc5LDYgJiM0MzsxMjcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHtcbiBcdCAgLmRhZGRyID0gSVBWNF9UQklEX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsIC50YmlkID0gMTAwLFxuIFx0ICAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbiBlcnJvciB0aGF0IHJldHVybnMgYWZ0ZXIgdGhlIGVncmVzcyBkZXZpY2UgaXMgcmVzb2x2ZWQgbXVzdFxuJiM0MztcdCAqIHJlcG9ydCB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXQuIFRoaXMgcm91dGVzIGZyb20gaW5wdXRcbiYjNDM7XHQgKiB2ZXRoMSB2aWEgdmV0aDIgKHRhYmxlIDEwMCkgdG8gYSBkc3Qgd2l0aCBubyBuZWlnaGJvdXIsIHNvXG4mIzQzO1x0ICogaW5wdXQgIT0gZWdyZXNzLCBwaW5uaW5nIE5PX05FSUdIIHRvIHRoZSBlZ3Jlc3MgZGV2aWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IE5PX05FSUdIIHJlcG9ydHMgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0XCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9UQklEX05PTkVJR0hfRFNULFxuJiM0MztcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDJcJiMzNDssIH0sXG4gXHR7IC5kZXNjID0gXCYjMzQ7SVB2NiBUQklEIGxvb2t1cCBmYWlsdXJlXCYjMzQ7LFxuIFx0ICAuZGFkZHIgPSBJUFY2X1RCSURfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuQEAgLTE0Miw2ICYjNDM7MjAxLDIxOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xuIFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNl9HVzEsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuIFx0ICAubWFyayA9IE1BUkssIH0sXG4mIzQzO1x0LyogdmxhbiBlZ3Jlc3MgcmVzb2x1dGlvbiAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW52YXJpYW50IHRoZSBWTEFOLWVncmVzcyBhcm1zIGpvaW50bHkgZW5mb3JjZTogYVxuJiM0MztcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gU1VDQ0VTUyBhbHdheXMgY2FycmllcyBhIHBoeXNpY2FsLFxuJiM0MztcdCAqIHhtaXQtY2FwYWJsZSBpZmluZGV4OyBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlXG4mIzQzO1x0ICogaWZpbmRleC4gUmVkdWNpYmxlIGFybXMgcGluIGlmaW5kZXggPT0gdGhlIHBoeXNpY2FsIHBhcmVudDsgdGhlXG4mIzQzO1x0ICogUWluUSBhbmQgZm9yZWlnbi1uZXRucyBhcm1zIHBpbiBWTEFOX0ZBSUxVUkUgd2l0aCBwYXJhbXMtXHUwMDNlaWZpbmRleFxuJiM0MztcdCAqIGxlZnQgYXQgdGhlIGlucHV0LCBzbyBhIHJlZ3Jlc3Npb24gdG8gYmVzdC1lZmZvcnQgKFNVQ0NFU1MgJiM0MzsgdGhlXG4mIzQzO1x0ICogVkxBTiBpZmluZGV4KSBmYWlscyBvbmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc2luZ2xlIFZMQU5cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogc2tiIHBhdGggd2l0aG91dCB0b3RfbGVuOiBtdHVfcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSYjMzk7cyBtdHVcbiYjNDM7XHQgKiAoMTQwMCksIG5vdCB0aGUgcGFyZW50JiMzOTtzICgxNTAwKVxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBza2ItcGF0aCBtdHUgaXMgdGhlIFZMQU4gZGV2aWNlJiMzOTtzIHdpdGhvdXQgdGhlIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTlwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBRaW5RIGVncmVzcyB3aXRob3V0IHRoZSBmbGFnIChlc2NhcGUgaGF0Y2gpXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9RSU5RX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgbmVpZ2hib3VyIG9uIHRoZSBWTEFOIGRldmljZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4sXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MgaW4gT1VUUFVUIG1vZGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5paWYgPSBWTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuJiM0MztcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcyBvdmVyIGEgYm9uZFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfQk9ORF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBCT05EX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVEJJRF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklEIHxcbiYjNDM7XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC50YmlkID0gMTAwLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgyXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFRCSURfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc3VjY2VzcyB3cml0ZXMgbXR1X3Jlc3VsdCB3aXRoIHRoZSBzd2FwXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAudG90X2xlbiA9IDUwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCYjMzQ7dmV0aDFcJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELFxuJiM0MztcdCAgLnRvdF9sZW4gPSAxNDAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuJiM0MztcdC8qIHZsYW4gdGFnIGFzIGxvb2t1cCBpbnB1dCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIG5vIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNl9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0IGFuZCBlZ3Jlc3MgY29tYmluZWRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LFxuJiM0MztcdCAgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHxcbiYjNDM7XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIG5laWdoYm91ciByZXNvbHZlZCBvbiB0aGUgcm91dGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuJiM0MztcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgLmRtYWMgPSBETUFDX0lOSVQyLCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIHN1YmludGVyZmFjZVwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NSQyB8XG4mIzQzO1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFZSRjogdGhlIHJlc29sdmVkIHN1YmludGVyZmFjZSBpcyBlbnNsYXZlZCwgc28gdGhlIGwzbWRldiBydWxlXG4mIzQzO1x0ICogKGZ1bGwgbG9va3VwKSBhbmQgbDNtZGV2X2ZpYl90YWJsZV9yY3UoKSAoRElSRUNUKSBtdXN0IHNlbGVjdFxuJiM0MztcdCAqIHRoZSBWUkYgdGFibGUgZnJvbSB0aGUgcmVzb2x2ZWQgaW5ncmVzc1xuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIFZSRiBzdWJpbnRlcmZhY2UsIG5vIGZsYWdcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9HVzEsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBWUkYgdGFibGVcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4mIzQzO1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgRElSRUNUIHVzZXMgVlJGIHRhYmxlIGZyb20gcmVzb2x2ZWQgaW5ncmVzc1wmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVlJGX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfFxuJiM0MztcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZSRl9WTEFOX0lELCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbFxuJiM0MztcdCAqIG5hbWVzIHRoZSBwaHlzaWNhbCBkZXZpY2UgYW5kIHRoZSBpbnB1dCB0YWcgYnl0ZXMgc3Vydml2ZVxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBzdWJpbnRlcmZhY2UgZG93blwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lEX0RPV04sIH0sXG4mIzQzO1x0LypcbiYjNDM7XHQgKiB0aGUgcmVzb2x2ZXIgcnVucyBiZWZvcmUgdGhlIGZvcndhcmRpbmcgY2hlY2ssIHNvIG9uIGRldmljZXNcbiYjNDM7XHQgKiB3aXRoIGZvcndhcmRpbmcgb2ZmIEZXRF9ESVNBQkxFRCAobm90IE5PVF9GV0RFRCkgcHJvdmVzIHRoZSB0YWdcbiYjNDM7XHQgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3NcbiYjNDM7XHQgKi9cbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCA4MDIuMWFkIHRhZ1wmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMUFELCAudmxhbl9pZCA9IFFJTlFfQURfVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbiYjNDM7XHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW5uZXIgUWluUSBkZXZpY2UgZnJvbSBWTEFOIGlmaW5kZXhcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXG4mIzQzO1x0ICAuaWlmID0gUUlOUV9PVVRFUl9JRkFDRSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LFxuJiM0MztcdC8qXG4mIzQzO1x0ICogYm9uZGluZzogdGhlIFZMQU5zIGxpdmUgb24gdGhlIG1hc3RlciwgYXMgb24gcmVjZWl2ZSwgd2hlcmUgdGhlXG4mIzQzO1x0ICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydFxuJiM0MztcdCAqIGlmaW5kZXggZG9lcyBub3QgbWF0Y2ggKHBvcnRzIGNhcnJ5IHZpZCBzdGF0ZSBidXQgbm8gVkxBTiBkZXZzKVxuJiM0MztcdCAqL1xuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBvbiBib25kIG1hc3RlciByZXNvbHZlc1wmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbiYjNDM7XHQgIC5paWYgPSBCT05EX0lGQUNFLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgcG9ydCBkb2VzIG5vdCBtYXRjaFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiYjNDM7XHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY2IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkXCYjMzQ7LFxuJiM0MztcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuJiM0MztcdCAgLmV4cGVjdGVkX2RldiA9IFwmIzM0O3ZldGgxXCYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsXG4mIzQzO1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4mIzQzO1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDAsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O0lQdjYgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiYjNDM7XHQgIC5leHBlY3RlZF9kZXYgPSBcJiMzNDt2ZXRoMVwmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sXG4mIzQzO1x0eyAuZGVzYyA9IFwmIzM0O3Vua25vd24gZmxhZyBiaXQgcmVqZWN0ZWRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSAoMSBcdTAwM2NcdTAwM2MgMTQpIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwgfSxcbiYjNDM7XHR7IC5kZXNjID0gXCYjMzQ7SVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggVEJJRFwmIzM0OyxcbiYjNDM7XHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxuJiM0MztcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuJiM0MztcdHsgLmRlc2MgPSBcJiMzNDtJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBPVVRQVVRcJiMzNDssXG4mIzQzO1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbiYjNDM7XHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVULFxuJiM0MztcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuIH07XG4gXG4gc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxuQEAgLTIwNCw2ICYjNDM7NDc1LDEwNSBAQCBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXG4gXHRTWVMoZmFpbCwgXCYjMzQ7aXAgcnVsZSBhZGQgcHJpbyAyIGZ3bWFyayAlZCBsb29rdXAgJXNcJiMzNDssIE1BUkssIE1BUktfVEFCTEUpO1xuIFx0U1lTKGZhaWwsIFwmIzM0O2lwIC02IHJ1bGUgYWRkIHByaW8gMiBmd21hcmsgJWQgbG9va3VwICVzXCYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHVwIGZvciB2bGFuIHRlc3RzOiBhIHN1YmludGVyZmFjZSBmb3IgZWdyZXNzIHJlc29sdXRpb24gYW5kXG4mIzQzO1x0ICogdGFnLWFzLWlucHV0LCBhIFFpblEgc3RhY2ssIGFuZCBhbiBpaWYgcnVsZSBzbyB0aGUgaW5wdXQgdGVzdHNcbiYjNDM7XHQgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9JRkFDRSwgVkxBTl9JRCk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgVkxBTl9JRkFDRSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBsb3dlciB0aGFuIHRoZSB2ZXRoMSBwYXJlbnQgKDE1MDApOiB0aGUgc2tiLXBhdGggbXR1IGNoZWNrIHVzZXMgdGhlXG4mIzQzO1x0ICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUgd2l0aCBvclxuJiM0MztcdCAqIHdpdGhvdXQgdGhlIGVncmVzcyBzd2FwLCB3aGljaCB0d28gYXJtcyBiZWxvdyBwaW5cbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIG10dSAxNDAwXCYjMzQ7LCBWTEFOX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCYjMzQ7LCBJUFY0X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZFwmIzM0OywgSVBWNl9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWxcbiYjNDM7XHQgKiBpbmdyZXNzIHRyZWF0cyBhIGZyYW1lIGFycml2aW5nIG9uIGEgZG93biBWTEFOIGRldmljZSAoZHJvcClcbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9JRkFDRV9ET1dOLCBWTEFOX0lEX0RPV04pO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB3cml0ZV9zeXNjdGwoXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvXCYjMzQ7IFZMQU5fSUZBQ0UgXCYjMzQ7L2ZvcndhcmRpbmdcJiMzNDssIFwmIzM0OzFcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXCYjMzQ7IFZMQU5fSUZBQ0UgXCYjMzQ7LmZvcndhcmRpbmcpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL1wmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy9mb3J3YXJkaW5nXCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChuZXQuaXB2Ni5jb25mLlwmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy5mb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIHByb3RvIDgwMi4xYWQgaWQgMjAwXCYjMzQ7LFxuJiM0MztcdCAgICBRSU5RX09VVEVSX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzIHR5cGUgdmxhbiBpZCAzMDBcJiMzNDssXG4mIzQzO1x0ICAgIFFJTlFfT1VURVJfSUZBQ0UsIFFJTlFfSU5ORVJfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFFJTlFfT1VURVJfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFFJTlFfSU5ORVJfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzXCYjMzQ7LCBJUFY0X1FJTlFfRFNULCBRSU5RX0lOTkVSX0lGQUNFKTtcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcJiMzNDssIElQVjRfVkxBTl9EU1QsIElQVjRfR1cxKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1wmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9UQUJMRSwgSVBWNF9WTEFOX0RTVCwgSVBWNF9WTEFOX0dXKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcJiMzNDssIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCAtNiByb3V0ZSBhZGQgJXMvMTI4IHZpYSAlc1wmIzM0OywgSVBWNl9WTEFOX0RTVCwgSVBWNl9HVzEpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlc1wmIzM0OyxcbiYjNDM7XHQgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgLTYgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcJiMzNDssIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xuJiM0MztcbiYjNDM7XHQvKiBhIGJvbmQgd2l0aCBvbmUgcG9ydCBhbmQgYSBWTEFOIG9uIHRoZSBib25kICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgYm9uZFwmIzM0OywgQk9ORF9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkICVzIHR5cGUgdmV0aCBwZWVyIG5hbWUgJXNcJiMzNDssIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcJiMzNDssIEJPTkRfUE9SVCwgQk9ORF9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgQk9ORF9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cFwmIzM0OywgQk9ORF9QT1JUKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzLiVkIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgQk9ORF9JRkFDRSwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lELCBCT05EX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXBcJiMzNDssIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMuJWRcJiMzNDssXG4mIzQzO1x0ICAgIElQVjRfQk9ORF9WTEFOX0RTVCwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBhIFZSRiB3aXRoIGl0cyBvd24gZGVkaWNhdGVkIHN1YmludGVyZmFjZSAodGhlIGlpZiBydWxlcyBhYm92ZVxuJiM0MztcdCAqIG11c3Qgbm90IHNlZSBpdCksIGZvciB0aGUgdGFibGUtc2VsZWN0aW9uLWJ5LWluZ3Jlc3MgY2FzZXNcbiYjNDM7XHQgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgJXMgdHlwZSB2cmYgdGFibGUgJXNcJiMzNDssIFZSRl9JRkFDRSwgVlJGX1RBQkxFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwXCYjMzQ7LCBWUkZfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXCYjMzQ7LFxuJiM0MztcdCAgICBWUkZfVkxBTl9JRkFDRSwgVlJGX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcJiMzNDssIFZSRl9WTEFOX0lGQUNFLCBWUkZfSUZBQ0UpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFZSRl9WTEFOX0lGQUNFKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCYjMzQ7LCBJUFY0X1ZSRl9JRkFDRV9BRERSLCBWUkZfVkxBTl9JRkFDRSk7XG4mIzQzO1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1wmIzM0OyBWUkZfVkxBTl9JRkFDRSBcJiMzNDsvZm9yd2FyZGluZ1wmIzM0OywgXCYjMzQ7MVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi5cJiMzNDsgVlJGX1ZMQU5fSUZBQ0UgXCYjMzQ7LmZvcndhcmRpbmcpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIHZpYSAlc1wmIzM0OywgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXNcJiMzNDssXG4mIzQzO1x0ICAgIFZSRl9UQUJMRSwgSVBWNF9WUkZfRFNULCBJUFY0X1ZSRl9HVyk7XG4mIzQzO1xuJiM0MztcdC8qIG5laWdoYm91cnMgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGZvciB0aGUgbm9uLVNLSVBfTkVJR0ggY2FzZXMgKi9cbiYjNDM7XHRlcnIgPSB3cml0ZV9zeXNjdGwoXCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L25laWdoL1wmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy9nY19zdGFsZV90aW1lXCYjMzQ7LCBcJiMzNDs5MDBcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0Lm5laWdoLlwmIzM0OyBWTEFOX0lGQUNFIFwmIzM0Oy5nY19zdGFsZV90aW1lKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVwmIzM0OyxcbiYjNDM7XHQgICAgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFZMQU5fSUZBQ0UsIERNQUMpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGVcJiMzNDssXG4mIzQzO1x0ICAgIElQVjRfVkxBTl9HVywgVkxBTl9JRkFDRSwgRE1BQzIpO1xuJiM0MztcbiYjNDM7XHQvKiBhIFZMQU4gb24gdmV0aDIgd2l0aCBhIHJvdXRlIGluIHRoZSB0YmlkIHRlc3QgdGFibGUgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMiBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwmIzM0OyxcbiYjNDM7XHQgICAgVEJJRF9WTEFOX0lGQUNFLCBUQklEX1ZMQU5fSUQpO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXBcJiMzNDssIFRCSURfVkxBTl9JRkFDRSk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAxMDAgJXMvMzIgZGV2ICVzXCYjMzQ7LFxuJiM0MztcdCAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7XG4mIzQzO1xuJiM0MztcdC8qIGEgbG9ja2VkLW10dSByb3V0ZSB2aWEgdGhlIHN1YmludGVyZmFjZSBmb3IgdGhlIEZSQUdfTkVFREVEIGNhc2UgKi9cbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwXCYjMzQ7LFxuJiM0MztcdCAgICBJUFY0X1ZMQU5fTVRVX0RTVCwgVkxBTl9JRkFDRSk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gZmFpbDpcbiBcdHJldHVybiAtMTtcbkBAIC0yMTgsOSAmIzQzOzU4OCwxNiBAQCBzdGF0aWMgaW50IHNldF9sb29rdXBfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0bWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTtcbiBcbiBcdHBhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuLVx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSBpZmluZGV4O1xuJiM0MztcdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gdGVzdC1cdTAwM2VpaWYgPyBpZl9uYW1ldG9pbmRleCh0ZXN0LVx1MDAzZWlpZikgOiBpZmluZGV4O1xuIFx0cGFyYW1zLVx1MDAzZXRiaWQgPSB0ZXN0LVx1MDAzZXRiaWQ7XG4gXHRwYXJhbXMtXHUwMDNlbWFyayA9IHRlc3QtXHUwMDNlbWFyaztcbiYjNDM7XHRwYXJhbXMtXHUwMDNldG90X2xlbiA9IHRlc3QtXHUwMDNldG90X2xlbjtcbiYjNDM7XG4mIzQzO1x0LyogaF92bGFuX3Byb3RvL2hfdmxhbl9UQ0kgdW5pb24gd2l0aCB0YmlkICovXG4mIzQzO1x0aWYgKHRlc3QtXHUwMDNlbG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XG4mIzQzO1x0XHRwYXJhbXMtXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnModGVzdC1cdTAwM2V2bGFuX3Byb3RvKTtcbiYjNDM7XHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModGVzdC1cdTAwM2V2bGFuX2lkKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCB0ZXN0LVx1MDAzZWRhZGRyLCBwYXJhbXMtXHUwMDNlaXB2Nl9kc3QpID09IDEpIHtcbiBcdFx0cGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuQEAgLTI5OCw3ICYjNDM7Njc1LDcgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbiBcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuIFx0c3RydWN0IGZpYl9sb29rdXAgKnNrZWw7XG4tXHRpbnQgcHJvZ19mZCwgZXJyLCByZXQsIGk7XG4mIzQzO1x0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCByZXQsIGk7XG4gXG4gXHQvKiBUaGUgdGVzdCBkb2VzIG5vdCB1c2UgdGhlIHNrYi1cdTAwM2VkYXRhLCBzb1xuIFx0ICogdXNlIHBrdF92NiBmb3IgYm90aCB2NiBhbmQgdjQgdGVzdC5cbkBAIC0zMDksMTEgJiM0Mzs2ODYsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0ICAgIC5jdHhfaW4gPSBcdTAwMjZza2IsXG4gXHRcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcbiBcdCk7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxuJiM0MztcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuJiM0MztcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbiYjNDM7XHQpO1xuIFxuIFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcbiBcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsIG9wZW5fYW5kX2xvYWRcJiMzNDspKVxuIFx0XHRyZXR1cm47XG4gXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cCk7XG4mIzQzO1x0eGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF94ZHApO1xuIFxuIFx0U1lTKGZhaWwsIFwmIzM0O2lwIG5ldG5zIGFkZCAlc1wmIzM0OywgTlNfVEVTVCk7XG4gXG5AQCAtMzQzLDYgJiM0Mzs3MjUsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfcHJvZ190ZXN0X3J1bl9vcHRzXCYjMzQ7KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIGlzIFhEUC1vbmx5OyB0aGUgdGMgaGVscGVyIHJlamVjdHMgaXQuXG4mIzQzO1x0XHQgKiBUaGVzZSBjYXNlcyBhcmUgZXhlcmNpc2VkIG9uIHRoZSBYRFAgcGF0aCBiZWxvdy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikge1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt0YyByZWplY3RzIEJQRl9GSUJfTE9PS1VQX1ZMQU5cJiMzNDspO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxuIFx0XHRcdCAgXCYjMzQ7ZmliX2xvb2t1cF9yZXRcJiMzNDspO1xuIFxuQEAgLTM1Miw2ICYjNDM7NzQ0LDIxIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpXG4gXHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuIFxuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbiYjNDM7XHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksIFwmIzM0O2lmaW5kZXhcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUpXG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcbiYjNDM7XHRcdFx0XHQgIFwmIzM0O210dV9yZXN1bHRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcJiMzNDtoX3ZsYW5fcHJvdG9cJiMzNDspO1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLFxuJiM0MztcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFwmIzM0O2hfdmxhbl9UQ0lcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiBcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtkbWFjIG5vdCBtYXRjaFwmIzM0OykpIHtcbiBcdFx0XHRjaGFyIGV4cGVjdGVkWzE4XSwgYWN0dWFsWzE4XTtcbkBAIC0zNjEsMTUgJiM0Mzs3NjgsMzEyIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdFx0cHJpbnRmKFwmIzM0O2RtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzIFwmIzM0OywgZXhwZWN0ZWQsIGFjdHVhbCk7XG4gXHRcdH1cbiBcbi1cdFx0Ly8gZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC5cbi1cdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aFxuJiM0MztcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiB0aGUgdW5pb24gaG9sZHMgdGhlIHBhY2tlZCB2bGFuXG4mIzQzO1x0XHQgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikpIHtcbiBcdFx0XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zLnRiaWQsIDAsXG4gXHRcdFx0XHRcdFwmIzM0O2V4cGVjdGVkIGZpYl9wYXJhbXMudGJpZCB0byBiZSB6ZXJvXCYjMzQ7KSlcbiBcdFx0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmUtcnVuIHRoZSBjYXNlcyB0aHJvdWdoIGJwZl94ZHBfZmliX2xvb2t1cCgpLiB0ZXN0X3J1biB1c2VzIHRoZVxuJiM0MztcdCAqIGN1cnJlbnQgbmV0bnMmIzM5OyBsb29wYmFjayBmb3IgY3R4LVx1MDAzZXJ4cS1cdTAwM2VkZXYsIHNvIGRldl9uZXQoKSBpcyBOU19URVNUXG4mIzQzO1x0ICogYW5kIHRoZSBsb29rdXAgcnVucyBhZ2FpbnN0IGl0cyBGSUIuIFRoZSBwYXRoLWluZGVwZW5kZW50IHJlc3VsdHNcbiYjNDM7XHQgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYlxuJiM0MztcdCAqIHBhdGg7IHRoZSBuby10b3RfbGVuIG10dV9yZXN1bHQgaXMgc2tiLXNwZWNpZmljIGFuZCBub3QgcmVjaGVja2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHNldF9sb29rdXBfcGFyYW1zKGZpYl9wYXJhbXMsIFx1MDAyNnRlc3RzW2ldLCBza2IuaWZpbmRleCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XG4mIzQzO1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFx1MDAyNnhkcF9vcHRzKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7eGRwIHRlc3RfcnVuXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3hkcCBmaWJfbG9va3VwX3JldFwmIzM0OykpXG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDsoeGRwKSAlc1xcblwmIzM0OywgdGVzdHNbaV0uZGVzYyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbiYjNDM7XHRcdFx0XHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt4ZHAgaWZpbmRleFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcbiYjNDM7XHRcdFx0YXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0c1tpXS5jaGVja192bGFuKSB7XG4mIzQzO1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcJiMzNDt4ZHAgaF92bGFuX3Byb3RvXCYjMzQ7KTtcbiYjNDM7XHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSxcbiYjNDM7XHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5faWQpLCBcJiMzNDt4ZHAgaF92bGFuX1RDSVwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShyZXQsIDAsIFwmIzM0O3hkcCBkbWFjXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogbXR1X3Jlc3VsdCBmcm9tIGEgdG90X2xlbiBsb29rdXAgaXMgdGhlIHJvdXRlIG10dSBhbmQgaXNcbiYjNDM7XHRcdCAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtXHUwMDNlbXR1IGFuZCBpc1xuJiM0MztcdFx0ICogc2tiLW9ubHksIHNvIGdhdGUgb24gdG90X2xlblxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1IFx1MDAyNlx1MDAyNiB0ZXN0c1tpXS50b3RfbGVuKVxuJiM0MztcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VtdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDt4ZHAgbXR1X3Jlc3VsdFwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZmFpbDpcbiYjNDM7XHRpZiAobnN0b2tlbilcbiYjNDM7XHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuJiM0MztcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsIFwmIzM0OyBOU19URVNUKTtcbiYjNDM7XHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5TX1ZMQU5fQVx0XCYjMzQ7ZmliX2xvb2t1cF92bGFuX25zX2FcJiMzNDtcbiYjNDM7I2RlZmluZSBOU19WTEFOX0JcdFwmIzM0O2ZpYl9sb29rdXBfdmxhbl9uc19iXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBIFZMQU4gZGV2aWNlIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIG5ldG5zIHdoaWxlIHN0YXlpbmcgcmVnaXN0ZXJlZFxuJiM0MzsgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZVxuJiM0MzsgKiBlZ3Jlc3MgZmxhZyBtdXN0IG5vdCBwdWJsaXNoIHRoZSBmb3JlaWduIHBhcmVudCYjMzk7cyBpZmluZGV4LCBhbmQgdGhlXG4mIzQzOyAqIGlucHV0IGZsYWcgbXVzdCBmYWlsIGNsb3NlZCByYXRoZXIgdGhhbiB1c2UgYSBmb3JlaWduIGluZ3Jlc3MuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX25ldG5zKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4mIzQzO1x0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xuJiM0MztcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHBhcmVudF9pZHgsIHZsYW5faWR4O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgcnVuX29wdHMsXG4mIzQzO1x0XHQgICAgLmRhdGFfaW4gPSBcdTAwMjZwa3RfdjYsXG4mIzQzO1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuJiM0MztcdFx0ICAgIC5jdHhfaW4gPSBcdTAwMjZza2IsXG4mIzQzO1x0XHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXG4mIzQzO1x0KTtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgeGRwX29wdHMsXG4mIzQzO1x0XHQgICAgLmRhdGFfaW4gPSBcdTAwMjZwa3RfdjYsXG4mIzQzO1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xuJiM0MztcdHhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcbiYjNDM7XHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIG5ldG5zIGFkZCAlc1wmIzM0OywgTlNfVkxBTl9BKTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBOU19WTEFOX0IpO1xuJiM0MztcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0EpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcJiMzNDtvcGVuX25ldG5zKGEpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgYWRkIHZldGg3IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDhcJiMzNDspO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIHNldCBkZXYgdmV0aDcgdXBcJiMzNDspO1xuJiM0MztcdFNZUyhmYWlsLCBcJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGg3IG5hbWUgdmV0aDcuNjYgdHlwZSB2bGFuIGlkIDY2XCYjMzQ7KTtcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbGluayBzZXQgdmV0aDcuNjYgbmV0bnMgJXNcJiMzNDssIE5TX1ZMQU5fQik7XG4mIzQzO1xuJiM0MztcdHBhcmVudF9pZHggPSBpZl9uYW1ldG9pbmRleChcJiMzNDt2ZXRoN1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfTkVRKHBhcmVudF9pZHgsIDAsIFwmIzM0O2lmX25hbWV0b2luZGV4KHZldGg3KVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogaW5wdXQ6IHRoZSBtb3ZlZCBkZXZpY2UgaXMgc3RpbGwgaW4gdmV0aDcmIzM5O3MgVkxBTiBncm91cCwgYnV0IGl0XG4mIzQzO1x0ICogbGl2ZXMgaW4gYW5vdGhlciBuZXRucywgc28gdGhlIGxvb2t1cCBtdXN0IGZhaWwgY2xvc2VkXG4mIzQzO1x0ICovXG4mIzQzO1x0c2tiLmlmaW5kZXggPSBwYXJlbnRfaWR4O1xuJiM0MztcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHBhcmVudF9pZHg7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnMoNjYpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBcJiMzNDsxMC42Ni4wLjJcJiMzNDssIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihkc3QpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHxcbiYjNDM7XHRcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhwcm9nX2ZkLCBcdTAwMjZydW5fb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bihpbnB1dClcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4mIzQzO1x0XHQgIFwmIzM0O2lucHV0IGFjcm9zcyBuZXRucyBmYWlscyBjbG9zZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXgsIHBhcmVudF9pZHgsIFwmIzM0O2lmaW5kZXggdW50b3VjaGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fVENJLCBodG9ucyg2NiksIFwmIzM0O3RhZyB1bnRvdWNoZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcJiMzNDtvcGVuX25ldG5zKGIpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBlZ3Jlc3M6IHRoZSBmaWIgcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSBoZXJlLCBidXQgaXRzIHBhcmVudFxuJiM0MztcdCAqIGlzIGluIHRoZSBvdGhlciBuZXRucywgc28gdGhlIHN3YXAgbXVzdCBub3QgaGFwcGVuXG4mIzQzO1x0ICovXG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGxpbmsgc2V0IGRldiB2ZXRoNy42NiB1cFwmIzM0Oyk7XG4mIzQzO1x0U1lTKGZhaWwsIFwmIzM0O2lwIGFkZHIgYWRkIDEwLjY2LjAuMS8yNCBkZXYgdmV0aDcuNjZcJiMzNDspO1xuJiM0MztcdGVyciA9IHdyaXRlX3N5c2N0bChcJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNy42Ni9mb3J3YXJkaW5nXCYjMzQ7LCBcJiMzNDsxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3dyaXRlX3N5c2N0bChmb3J3YXJkaW5nKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHZsYW5faWR4ID0gaWZfbmFtZXRvaW5kZXgoXCYjMzQ7dmV0aDcuNjZcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX05FUSh2bGFuX2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gdmxhbl9pZHg7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwmIzM0OzEwLjY2LjAuMlwmIzM0OywgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4mIzQzO1x0XHQgICAgICAgMSwgXCYjMzQ7aW5ldF9wdG9uKGRzdClcJiMzNDspIHx8XG4mIzQzO1x0ICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwmIzM0OzEwLjY2LjAuMVwmIzM0OywgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X3NyYyksXG4mIzQzO1x0XHQgICAgICAgMSwgXCYjMzQ7aW5ldF9wdG9uKHNyYylcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuJiM0MztcdFx0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgXHUwMDI2eGRwX29wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9ydW4oZWdyZXNzKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0LCBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSxcbiYjNDM7XHRcdCAgXCYjMzQ7ZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4LCB2bGFuX2lkeCxcbiYjNDM7XHRcdCAgXCYjMzQ7Zm9yZWlnbiBwYXJlbnQgbm90IHB1Ymxpc2hlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSwgMCwgXCYjMzQ7dmxhbiBmaWVsZHMgemVyb1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdGlmIChuc3Rva2VuKVxuJiM0MztcdFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgXCYjMzQ7IE5TX1ZMQU5fQSk7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgXCYjMzQ7IE5TX1ZMQU5fQik7XG4mIzQzO1x0ZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBSRURJUkVDVF9OUEtUUyAxMDAwXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgZWdyZXNzIGZsYWcgZXhpc3RzIHNvIGFuIFhEUCBwcm9ncmFtIGNhbiByZWRpcmVjdCB0byB0aGUgcGh5c2ljYWxcbiYjNDM7ICogcGFyZW50LiBBIHJlZGlyZWN0IHRoYXQgbGFuZHMgb24gYSBWTEFOIGRldmljZSBpcyBkcm9wcGVkIGF0XG4mIzQzOyAqIHhkcF9kb19mbHVzaCgpLCBiZWNhdXNlIGEgVkxBTiBkZXZpY2UgaGFzIG5vIG5kb194ZHBfeG1pdC4gRHJpdmUgcmVhbFxuJiM0MzsgKiBmcmFtZXMgd2l0aCBCUEZfRl9URVNUX1hEUF9MSVZFX0ZSQU1FUywgd2hpY2ggcnVucyB0aGUgbmF0aXZlXG4mIzQzOyAqIHhkcF9kb19yZWRpcmVjdCgpICYjNDM7IHhkcF9kb19mbHVzaCgpIHBhdGg6IGEgcmVkdWNpYmxlIFZMQU4gZWdyZXNzXG4mIzQzOyAqIHJlc29sdmVzIHRvIHZldGgxIGFuZCBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIsIHdoaWxlIGEgUWluUVxuJiM0MzsgKiBlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kIGlzIHBhc3NlZCB0byB0aGUgc3RhY2sgaW5zdGVhZCBvZlxuJiM0MzsgKiByZWRpcmVjdGVkIHRvIGEgZGV2aWNlIHRoYXQgd291bGQgc2lsZW50bHkgZHJvcCBpdC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fcmVkaXJlY3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCByZWRpcmVjdF9mZCwgZXJyLCB2ZXRoMV9pZHgsIHZldGgyX2lkeCA9IC0xO1xuJiM0MztcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcbiYjNDM7XHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGZpYl9sb29rdXAgKnNrZWwgPSBOVUxMO1xuJiM0MztcdGJvb2wgeGRwX2F0dGFjaGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBsZl9vcHRzLFxuJiM0MztcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y0LFxuJiM0MztcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcbiYjNDM7XHRcdCAgICAuZmxhZ3MgPSBCUEZfRl9URVNUX1hEUF9MSVZFX0ZSQU1FUyxcbiYjNDM7XHRcdCAgICAucmVwZWF0ID0gUkVESVJFQ1RfTlBLVFMsXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRyZWRpcmVjdF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfcmVkaXJlY3QpO1xuJiM0MztcdGZpYl9wYXJhbXMgPSBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfcGFyYW1zO1xuJiM0MztcbiYjNDM7XHRTWVMoZmFpbCwgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBOU19URVNUKTtcbiYjNDM7XHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19URVNUKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCYjMzQ7b3Blbl9uZXRuc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0aWYgKHNldHVwX25ldG5zKCkpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdHZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KFwmIzM0O3ZldGgxXCYjMzQ7KTtcbiYjNDM7XHR2ZXRoMl9pZHggPSBpZl9uYW1ldG9pbmRleChcJiMzNDt2ZXRoMlwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDEpXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsIFwmIzM0O2lmX25hbWV0b2luZGV4KHZldGgyKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSByZWRpcmVjdCB0byB2ZXRoMSBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIuIHZldGhfeGRwX3htaXQoKVxuJiM0MztcdCAqIG9ubHkgYWNjZXB0cyB0aGUgZnJhbWUgaWYgdmV0aDImIzM5O3MgTkFQSSBpcyB1cCwgd2hpY2ggb24gdmV0aCBtZWFuc1xuJiM0MztcdCAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBicGZfeGRwX2F0dGFjaCh2ZXRoMl9pZHgsIGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9jb3VudCksXG4mIzQzO1x0XHRcdCAgICAgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2F0dGFjaCB4ZHBfY291bnQgb24gdmV0aDJcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdHhkcF9hdHRhY2hlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIHJlZHVjaWJsZSBWTEFOIGVncmVzczogcmVzb2x2ZXMgdG8gdGhlIHBoeXNpY2FsIHBhcmVudCB2ZXRoMSAqL1xuJiM0MztcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24oc3JjKVwmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9WTEFOX0VHUkVTU19EU1QsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuJiM0MztcdFx0ICAgICAgIDEsIFwmIzM0O2luZXRfcHRvbihyZWR1Y2libGUgZHN0KVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHJlZGlyZWN0X2ZkLCBcdTAwMjZsZl9vcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfcnVuKHJlZHVjaWJsZSBlZ3Jlc3MpXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCwgUkVESVJFQ1RfTlBLVFMsIFwmIzM0O3JlZHVjaWJsZSBlZ3Jlc3MgcmVkaXJlY3RlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBhc3NlZCwgMCwgXCYjMzQ7cmVkdWNpYmxlIGVncmVzcyBub3QgcGFzc2VkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfR1Qoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZGVsaXZlcmVkLCAwLCBcJiMzNDtyZWR1Y2libGUgZWdyZXNzIGRlbGl2ZXJlZCB0byB2ZXRoMlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kXG4mIzQzO1x0ICogdGhlIHByb2dyYW0gcGFzc2VzIHRoZSBmcmFtZSBpbnN0ZWFkIG9mIHJlZGlyZWN0aW5nIHRvIHRoZSBpbm5lclxuJiM0MztcdCAqIFZMQU4gZGV2aWNlLiByZWRpcmVjdGVkID09IDAgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IHRoZVxuJiM0MztcdCAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0XG4mIzQzO1x0ICogeGRwX2RvX2ZsdXNoKCkuIHZldGgyJiMzOTtzIGRlbGl2ZXJlZCBjb3VudCBpcyBub3QgY2hlY2tlZCBoZXJlLCBzaW5jZVxuJiM0MztcdCAqIGEgcGFzc2VkIGZyYW1lIGNhbiBzdGlsbCByZWFjaCB2ZXRoMiB0aHJvdWdoIHRoZSBzdGFjayYjMzk7cyBmb3J3YXJkaW5nXG4mIzQzO1x0ICogcGF0aCwgd2hpY2ggaXMgdW5yZWxhdGVkIHRvIHRoZSByZWRpcmVjdCB1bmRlciB0ZXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbiYjNDM7XHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuJiM0MztcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbiYjNDM7XHRcdCAgICAgICAxLCBcJiMzNDtpbmV0X3B0b24oc3JjKVwmIzM0OykgfHxcbiYjNDM7XHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4mIzQzO1x0XHQgICAgICAgMSwgXCYjMzQ7aW5ldF9wdG9uKHFpbnEgZHN0KVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkID0gMDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXHUwMDI2bGZfb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X3J1bihxaW5xIGVncmVzcylcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQsIFJFRElSRUNUX05QS1RTLCBcJiMzNDtxaW5xIGVncmVzcyBwYXNzZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkLCAwLCBcJiMzNDtxaW5xIGVncmVzcyBub3QgcmVkaXJlY3RlZFwmIzM0Oyk7XG4mIzQzO1xuIGZhaWw6XG4mIzQzO1x0aWYgKHhkcF9hdHRhY2hlZClcbiYjNDM7XHRcdGJwZl94ZHBfZGV0YWNoKHZldGgyX2lkeCwgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTtcbiBcdGlmIChuc3Rva2VuKVxuIFx0XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiBcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsIFwmIzM0OyBOU19URVNUKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjg2MmExZTk0NTdiNGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuQEAgLTE5LDQgJiM0MzsxOSw0MCBAQCBpbnQgZmliX2xvb2t1cChzdHJ1Y3QgX19za19idWZmICpza2IpXG4gXHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuJiM0MztpbnQgZmliX2xvb2t1cF94ZHAoc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0ZmliX2xvb2t1cF9yZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFx1MDAyNmZpYl9wYXJhbXMsIHNpemVvZihmaWJfcGFyYW1zKSxcbiYjNDM7XHRcdFx0XHRcdGxvb2t1cF9mbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBYRFBfRFJPUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHJlZGlyZWN0ZWQgPSAwO1xuJiM0MztpbnQgcGFzc2VkID0gMDtcbiYjNDM7aW50IGRlbGl2ZXJlZCA9IDA7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KVxuJiM0MztpbnQgZmliX2xvb2t1cF9yZWRpcmVjdChzdHJ1Y3QgeGRwX21kICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgcGFyYW1zID0gZmliX3BhcmFtcztcbiYjNDM7XHRsb25nIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnBmX2ZpYl9sb29rdXAoY3R4LCBcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBsb29rdXBfZmxhZ3MpO1xuJiM0MztcdGlmIChyZXQgPT0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTKSB7XG4mIzQzO1x0XHRyZWRpcmVjdGVkJiM0MzsmIzQzOztcbiYjNDM7XHRcdHJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFzc2VkJiM0MzsmIzQzOztcbiYjNDM7XHRyZXR1cm4gWERQX1BBU1M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt4ZHBcJiMzNDspXG4mIzQzO2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0ZGVsaXZlcmVkJiM0MzsmIzQzOztcbiYjNDM7XHRyZXR1cm4gWERQX0RST1A7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwOTozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3hkcF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfaXB2NF9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY2X2ZpYl9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyIChgYnBmX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGZsYWdzOiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYC4gVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBjb3JlIEJQRiBGSUIgbG9va3VwIGxvZ2ljIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIEZJQiBsb29rdXAgZW50cnkgcG9pbnRzIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIGxvb2t1cCBmdW5jdGlvbnMuIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgVkxBTiBzcGVjaWZpYyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzAyMzExNjVjNGViZmFiZWM5OWJjNTc5NDZhMmU4YzY1ZmRjZTJjYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDQgMDk6Mzk6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC0zNTMyLDYgJiM0MzszNTMyLDQ1IEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqCQkJVXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotJmd0O21hcmsgZm9yIHRoZSBmaWIgbG9va3VwLgogICoJCQlUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsCiAgKgkJCWFzIGl0IG9ubHkgaGFzIG1lYW5pbmcgZm9yIGZ1bGwgbG9va3Vwcy4KJiM0MzsgKgkJKipCUEZfRklCX0xPT0tVUF9WTEFOKioKJiM0MzsgKgkJCUlmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2UKJiM0MzsgKgkJCXBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldAomIzQzOyAqCQkJKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kgZnJvbQomIzQzOyAqCQkJdGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLSZndDtpZmluZGV4IHdpdGggdGhlCiYjNDM7ICoJCQlwYXJlbnQmIzM5O3MgaWZpbmRleC4gKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklECiYjNDM7ICoJCQlvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvCiYjNDM7ICoJCQlzZXQgZWdyZXNzIHByaW9yaXR5IHdyaXRlcyBQQ1AgaXRzZWxmLiAqcGFyYW1zKi0mZ3Q7c21hYyBpcwomIzQzOyAqCQkJdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93biBhZGRyZXNzLCB3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlCiYjNDM7ICoJCQlwYXJlbnQmIzM5O3MuIE9ubHkgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaXMgcmVzb2x2ZWQ7IGlmIGl0CiYjNDM7ICoJCQlpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsCiYjNDM7ICoJCQl0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXMKJiM0MzsgKgkJCW9uZSB0YWcgYW5kIHRoZSBsb29rdXAgcmV0dXJucwomIzQzOyAqCQkJKipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotJmd0O2lmaW5kZXgKJiM0MzsgKgkJCWxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0CiYjNDM7ICoJCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiB0byBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93bgomIzQzOyAqCQkJaWZpbmRleC4gVGhlIHN3YXAgYW5kIHRoZSB2bGFuIGZpZWxkcwomIzQzOyAqCQkJYXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXAKJiM0MzsgKgkJCXRoZSBoZWxwZXImIzM5O3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdAomIzQzOyAqCQkJc3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLSZndDttdHVfcmVzdWx0LgomIzQzOyAqCQkJVGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXMKJiM0MzsgKgkJCXJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTgomIzQzOyAqCQkJZGV2aWNlIGRpcmVjdGx5LgomIzQzOyAqCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKgomIzQzOyAqCQkJVHJlYXQgKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kKJiM0MzsgKgkJCWFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzCiYjNDM7ICoJCQloYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnCiYjNDM7ICoJCQlvbiAqcGFyYW1zKi0mZ3Q7aWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2YKJiM0MzsgKgkJCSpwYXJhbXMqLSZndDtoX3ZsYW5fVENJOyAqcGFyYW1zKi0mZ3Q7aF92bGFuX3Byb3RvIG11c3QgYmUKJiM0MzsgKgkJCUVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2UKJiM0MzsgKgkJCSoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi0mZ3Q7aWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOCiYjNDM7ICoJCQlkZXZpY2UsIGl0cyBpbm5lciAoUWluUSkgc3ViaW50ZXJmYWNlIGlzIG1hdGNoZWQ7IGZvciBhCiYjNDM7ICoJCQlib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlciYjMzk7cyBpZmluZGV4LiBBbiB1bm1hdGNoZWQKJiM0MzsgKgkJCXRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnMKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy4KJiM0MzsgKgkJCUEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzCiYjNDM7ICoJCQlmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aAomIzQzOyAqCQkJKipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKgomIzQzOyAqCQkJKHJldHVybnMgKiotRUlOVkFMKiopLgogICoKICAqCQkqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvcgogICoJCSoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLgpAQCAtNzMyNyw2ICYjNDM7NzM2Niw4IEBAIGVudW0gewogCUJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgJmx0OyZsdDsgMyksCiAJQlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSAmbHQ7Jmx0OyA0KSwKIAlCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVICZsdDsmbHQ7IDUpLAomIzQzOwlCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVICZsdDsmbHQ7IDYpLAomIzQzOwlCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUID0gKDFVICZsdDsmbHQ7IDcpLAogfTsKIAogZW51bSB7CkBAIC03MzQwLDYgJiM0Mzs3MzgxLDcgQEAgZW51bSB7CiAJQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqLwogCUJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqLwogCUJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovCiYjNDM7CUJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqLwogfTsKIAogc3RydWN0IGJwZl9maWJfbG9va3VwIHsKQEAgLTczOTMsNyAmIzQzOzc0MzUsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHsKIAogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCS8qIG91dHB1dCAqLwomIzQzOwkJCS8qCiYjNDM7CQkJICogb3V0cHV0IHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTjogc2V0IGZyb20gdGhlCiYjNDM7CQkJICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWQKJiM0MzsJCQkgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGgKJiM0MzsJCQkgKiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOiB0aGUgVkxBTiB0YWcgdG8gc2NvcGUKJiM0MzsJCQkgKiB0aGUgbG9va3VwIGJ5LgomIzQzOwkJCSAqLwogCQkJX19iZTE2CWhfdmxhbl9wcm90bzsKIAkJCV9fYmUxNgloX3ZsYW5fVENJOwogCQl9OwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAyZTk2YjRiODQ3Y2UxMi4uMGVhMzYyZmE0Mjg3ZTMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC02MjAxLDIxICYjNDM7NjIwMSw2MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfZ2V0X3hmcm1fc3RhdGVfcHJvdG8gPSB7CiAjZW5kaWYKIAogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCi1zdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsIHUzMiBtdHUpCiYjNDM7c3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiYjNDM7CQkJCSAgdTMyIGZsYWdzLCB1MzIgbXR1LCB1MzIgaW5faWZpbmRleCkKIHsKIAlwYXJhbXMtJmd0O2hfdmxhbl9UQ0kgPSAwOwogCXBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvID0gMDsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfVkxBTl84MDIxUSkKJiM0MzsJaWYgKChmbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOKSAmYW1wOyZhbXA7IGlzX3ZsYW5fZGV2KGRldikpIHsKJiM0MzsJCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X3ByaXYoZGV2KS0mZ3Q7cmVhbF9kZXY7CiYjNDM7CiYjNDM7CQlpZiAoIWlzX3ZsYW5fZGV2KHJlYWxfZGV2KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmV0X2VxKGRldl9uZXQocmVhbF9kZXYpLCBkZXZfbmV0KGRldikpKSB7CiYjNDM7CQkJcGFyYW1zLSZndDtoX3ZsYW5fcHJvdG8gPSB2bGFuX2Rldl92bGFuX3Byb3RvKGRldik7CiYjNDM7CQkJcGFyYW1zLSZndDtoX3ZsYW5fVENJID0gaHRvbnModmxhbl9kZXZfdmxhbl9pZChkZXYpKTsKJiM0MzsJCQlwYXJhbXMtJmd0O2lmaW5kZXggPSByZWFsX2Rldi0mZ3Q7aWZpbmRleDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGFyYW1zLSZndDtpZmluZGV4ID0gaW5faWZpbmRleDsKJiM0MzsJCQlyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsjZW5kaWYKJiM0MzsKIAlpZiAobXR1KQogCQlwYXJhbXMtJmd0O210dV9yZXN1bHQgPSBtdHU7IC8qIHVuaW9uIHdpdGggdG90X2xlbiAqLwogCiAJcmV0dXJuIDA7CiB9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCQkJIGNvbnN0IHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zKQomIzQzO3sKJiM0MzsJX19iZTE2IHByb3RvID0gcGFyYW1zLSZndDtoX3ZsYW5fcHJvdG87CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldjsKJiM0MzsJdTE2IHZpZDsKJiM0MzsKJiM0MzsJaWYgKHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSAmYW1wOyZhbXA7IHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFBRCkpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJdmlkID0gbnRvaHMocGFyYW1zLSZndDtoX3ZsYW5fVENJKSAmYW1wOyBWTEFOX1ZJRF9NQVNLOwomIzQzOwl2bGFuX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIHByb3RvLCB2aWQpOwomIzQzOwlpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkgfHwKJiM0MzsJICAgICFuZXRfZXEoZGV2X25ldCh2bGFuX2RldiksIGRldl9uZXQoZGV2KSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZsYW5fZGV2OwomIzQzO30KICNlbmRpZgogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkKIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCQkJICAgICAgIHUzMiBmbGFncywgYm9vbCBjaGVja19tdHUpCiB7CiYjNDM7CXUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLSZndDtpZmluZGV4OwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDsKIAlzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjOwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKQEAgLTYyMjksNiAmIzQzOzYyNjgsMTQgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJaWYgKHVubGlrZWx5KCFkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgewomIzQzOwkJZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7CiYjNDM7CQlpZiAoSVNfRVJSKGRldikpCiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIoZGV2KTsKJiM0MzsJCWlmICghZGV2KQomIzQzOwkJCXJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDsKJiM0MzsJfQomIzQzOwogCS8qIHZlcmlmeSBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb24gdGhpcyBpbnRlcmZhY2UgKi8KIAlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CiAJaWYgKHVubGlrZWx5KCFpbl9kZXYgfHwgIUlOX0RFVl9GT1JXQVJEKGluX2RldikpKQpAQCAtNjIzOCw3ICYjNDM7NjI4NSwxMSBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywKIAkJZmw0LmZsb3dpNF9paWYgPSAxOwogCQlmbDQuZmxvd2k0X29pZiA9IHBhcmFtcy0mZ3Q7aWZpbmRleDsKIAl9IGVsc2UgewotCQlmbDQuZmxvd2k0X2lpZiA9IHBhcmFtcy0mZ3Q7aWZpbmRleDsKJiM0MzsJCS8qCiYjNDM7CQkgKiBkZXYtJmd0O2lmaW5kZXgsIG5vdCBwYXJhbXMtJmd0O2lmaW5kZXg6IFZMQU5fSU5QVVQgbWF5IGhhdmUKJiM0MzsJCSAqIHJlc29sdmVkIGRldiB0byBhIHN1YmludGVyZmFjZSBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJZmw0LmZsb3dpNF9paWYgPSBkZXYtJmd0O2lmaW5kZXg7CiAJCWZsNC5mbG93aTRfb2lmID0gMDsKIAl9CiAJZmw0LmZsb3dpNF9kc2NwID0gaW5ldF9kc2ZpZWxkX3RvX2RzY3AocGFyYW1zLSZndDt0b3MpOwpAQCAtNjM0Nyw3ICYjNDM7NjM5OCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogCW1lbWNweShwYXJhbXMtJmd0O3NtYWMsIGRldi0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAogc2V0X2Z3ZF9wYXJhbXM6Ci0JcmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpOwomIzQzOwlyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7CiB9CiAjZW5kaWYKIApAQCAtNjM1Nyw2ICYjNDM7NjQwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLAogewogCXN0cnVjdCBpbjZfYWRkciAqc3JjID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtJmd0O2lwdjZfc3JjOwogCXN0cnVjdCBpbjZfYWRkciAqZHN0ID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtJmd0O2lwdjZfZHN0OwomIzQzOwl1MzIgaW5faWZpbmRleCA9IHBhcmFtcy0mZ3Q7aWZpbmRleDsKIAlzdHJ1Y3QgZmliNl9yZXN1bHQgcmVzID0ge307CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTYzNzQsNiAmIzQzOzY0MjYsMTQgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJaWYgKHVubGlrZWx5KCFkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgewomIzQzOwkJZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7CiYjNDM7CQlpZiAoSVNfRVJSKGRldikpCiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIoZGV2KTsKJiM0MzsJCWlmICghZGV2KQomIzQzOwkJCXJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDsKJiM0MzsJfQomIzQzOwogCWlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpOwogCWlmICh1bmxpa2VseSghaWRldiB8fCAhUkVBRF9PTkNFKGlkZXYtJmd0O2NuZi5mb3J3YXJkaW5nKSkpCiAJCXJldHVybiBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRDsKQEAgLTYzODIsNyAmIzQzOzY0NDIsMTIgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJCWZsNi5mbG93aTZfaWlmID0gMTsKIAkJb2lmID0gZmw2LmZsb3dpNl9vaWYgPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiAJfSBlbHNlIHsKLQkJb2lmID0gZmw2LmZsb3dpNl9paWYgPSBwYXJhbXMtJmd0O2lmaW5kZXg7CiYjNDM7CQkvKgomIzQzOwkJICogZGV2LSZndDtpZmluZGV4LCBub3QgcGFyYW1zLSZndDtpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlCiYjNDM7CQkgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuCiYjNDM7CQkgKi8KJiM0MzsJCW9pZiA9IGRldi0mZ3Q7aWZpbmRleDsKJiM0MzsJCWZsNi5mbG93aTZfaWlmID0gb2lmOwogCQlmbDYuZmxvd2k2X29pZiA9IDA7CiAJCXN0cmljdCA9IFJUNl9MT09LVVBfRl9IQVNfU0FERFI7CiAJfQpAQCAtNjQ4NiwxMyAmIzQzOzY1NTEsMjYgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJbWVtY3B5KHBhcmFtcy0mZ3Q7c21hYywgZGV2LSZndDtkZXZfYWRkciwgRVRIX0FMRU4pOwogCiBzZXRfZndkX3BhcmFtczoKLQlyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7CiYjNDM7CXJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTsKIH0KICNlbmRpZgogCiAjZGVmaW5lIEJQRl9GSUJfTE9PS1VQX01BU0sgKEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IFwKIAkJCSAgICAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBcCi0JCQkgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUkspCiYjNDM7CQkJICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLIHwgXAomIzQzOwkJCSAgICAgQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpCiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2sodTMyIGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKGZsYWdzICZhbXA7IH5CUEZfRklCX0xPT0tVUF9NQVNLKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoKGZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpICZhbXA7JmFtcDsKJiM0MzsJICAgIChmbGFncyAmYW1wOyAoQlBGX0ZJQl9MT09LVVBfVEJJRCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiAKIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LAogCSAgIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqLCBwYXJhbXMsIGludCwgcGxlbiwgdTMyLCBmbGFncykKQEAgLTY1MDAsNyAmIzQzOzY1NzgsNyBAQCBCUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCwKIAlpZiAocGxlbiAmbHQ7IHNpemVvZigqcGFyYW1zKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZmxhZ3MgJmFtcDsgfkJQRl9GSUJfTE9PS1VQX01BU0spCiYjNDM7CWlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN3aXRjaCAocGFyYW1zLSZndDtmYW1pbHkpIHsKQEAgLTY1MzgsNyAmIzQzOzY2MTYsMTAgQEAgQlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYiwKIAlpZiAocGxlbiAmbHQ7IHNpemVvZigqcGFyYW1zKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZmxhZ3MgJmFtcDsgfkJQRl9GSUJfTE9PS1VQX01BU0spCiYjNDM7CWlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChwYXJhbXMtJmd0O3RvdF9sZW4pCmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC0zNTMyLDYgJiM0MzszNTMyLDQ1IEBAIHVuaW9uIGJwZl9hdHRyIHsKICAqCQkJVXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotJmd0O21hcmsgZm9yIHRoZSBmaWIgbG9va3VwLgogICoJCQlUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsCiAgKgkJCWFzIGl0IG9ubHkgaGFzIG1lYW5pbmcgZm9yIGZ1bGwgbG9va3Vwcy4KJiM0MzsgKgkJKipCUEZfRklCX0xPT0tVUF9WTEFOKioKJiM0MzsgKgkJCUlmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2UKJiM0MzsgKgkJCXBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldAomIzQzOyAqCQkJKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kgZnJvbQomIzQzOyAqCQkJdGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLSZndDtpZmluZGV4IHdpdGggdGhlCiYjNDM7ICoJCQlwYXJlbnQmIzM5O3MgaWZpbmRleC4gKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklECiYjNDM7ICoJCQlvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvCiYjNDM7ICoJCQlzZXQgZWdyZXNzIHByaW9yaXR5IHdyaXRlcyBQQ1AgaXRzZWxmLiAqcGFyYW1zKi0mZ3Q7c21hYyBpcwomIzQzOyAqCQkJdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93biBhZGRyZXNzLCB3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlCiYjNDM7ICoJCQlwYXJlbnQmIzM5O3MuIE9ubHkgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaXMgcmVzb2x2ZWQ7IGlmIGl0CiYjNDM7ICoJCQlpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsCiYjNDM7ICoJCQl0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXMKJiM0MzsgKgkJCW9uZSB0YWcgYW5kIHRoZSBsb29rdXAgcmV0dXJucwomIzQzOyAqCQkJKipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotJmd0O2lmaW5kZXgKJiM0MzsgKgkJCWxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0CiYjNDM7ICoJCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiB0byBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG93bgomIzQzOyAqCQkJaWZpbmRleC4gVGhlIHN3YXAgYW5kIHRoZSB2bGFuIGZpZWxkcwomIzQzOyAqCQkJYXJlIHdyaXR0ZW4gb25seSBvbiBzdWNjZXNzOyBvdGhlciBvdXRwdXQgZmllbGRzIGtlZXAKJiM0MzsgKgkJCXRoZSBoZWxwZXImIzM5O3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdAomIzQzOyAqCQkJc3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLSZndDttdHVfcmVzdWx0LgomIzQzOyAqCQkJVGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXMKJiM0MzsgKgkJCXJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTgomIzQzOyAqCQkJZGV2aWNlIGRpcmVjdGx5LgomIzQzOyAqCQkqKkJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQqKgomIzQzOyAqCQkJVHJlYXQgKnBhcmFtcyotJmd0O2hfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotJmd0O2hfdmxhbl9UQ0kKJiM0MzsgKgkJCWFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzCiYjNDM7ICoJCQloYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnCiYjNDM7ICoJCQlvbiAqcGFyYW1zKi0mZ3Q7aWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2YKJiM0MzsgKgkJCSpwYXJhbXMqLSZndDtoX3ZsYW5fVENJOyAqcGFyYW1zKi0mZ3Q7aF92bGFuX3Byb3RvIG11c3QgYmUKJiM0MzsgKgkJCUVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2UKJiM0MzsgKgkJCSoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi0mZ3Q7aWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOCiYjNDM7ICoJCQlkZXZpY2UsIGl0cyBpbm5lciAoUWluUSkgc3ViaW50ZXJmYWNlIGlzIG1hdGNoZWQ7IGZvciBhCiYjNDM7ICoJCQlib25kIG9yIHRlYW0sIHBhc3MgdGhlIG1hc3RlciYjMzk7cyBpZmluZGV4LiBBbiB1bm1hdGNoZWQKJiM0MzsgKgkJCXRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnMKJiM0MzsgKgkJCSoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy4KJiM0MzsgKgkJCUEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzCiYjNDM7ICoJCQlmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aAomIzQzOyAqCQkJKipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKgomIzQzOyAqCQkJKHJldHVybnMgKiotRUlOVkFMKiopLgogICoKICAqCQkqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvcgogICoJCSoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLgpAQCAtNzMyNyw2ICYjNDM7NzM2Niw4IEBAIGVudW0gewogCUJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgJmx0OyZsdDsgMyksCiAJQlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSAmbHQ7Jmx0OyA0KSwKIAlCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVICZsdDsmbHQ7IDUpLAomIzQzOwlCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVICZsdDsmbHQ7IDYpLAomIzQzOwlCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUID0gKDFVICZsdDsmbHQ7IDcpLAogfTsKIAogZW51bSB7CkBAIC03MzQwLDYgJiM0Mzs3MzgxLDcgQEAgZW51bSB7CiAJQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqLwogCUJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqLwogCUJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovCiYjNDM7CUJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqLwogfTsKIAogc3RydWN0IGJwZl9maWJfbG9va3VwIHsKQEAgLTczOTMsNyAmIzQzOzc0MzUsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHsKIAogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCS8qIG91dHB1dCAqLwomIzQzOwkJCS8qCiYjNDM7CQkJICogb3V0cHV0IHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTjogc2V0IGZyb20gdGhlCiYjNDM7CQkJICogcmVzb2x2ZWQgZWdyZXNzIFZMQU4gZGV2aWNlIChzZWUgdGhlIGZsYWcpOyB6ZXJvZWQKJiM0MzsJCQkgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGgKJiM0MzsJCQkgKiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOiB0aGUgVkxBTiB0YWcgdG8gc2NvcGUKJiM0MzsJCQkgKiB0aGUgbG9va3VwIGJ5LgomIzQzOwkJCSAqLwogCQkJX19iZTE2CWhfdmxhbl9wcm90bzsKIAkJCV9fYmUxNgloX3ZsYW5fVENJOwogCQl9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jCmluZGV4IGJkNzY1ODk1ODAwNDFmLi4xOGI2ZmRlY2EzODJhOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYwpAQCAtMiw2ICYjNDM7Miw3IEBACiAvKiBDb3B5cmlnaHQgKGMpIDIwMjMgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaWYuaCZndDsKIApAQCAtMjMsNiAmIzQzOzI0LDcgQEAKICNkZWZpbmUgSVBWNF9UQklEX0FERFIJCSYjMzQ7MTcyLjAuMC4yNTQmIzM0OwogI2RlZmluZSBJUFY0X1RCSURfTkVUCQkmIzM0OzE3Mi4wLjAuMCYjMzQ7CiAjZGVmaW5lIElQVjRfVEJJRF9EU1QJCSYjMzQ7MTcyLjAuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVEJJRF9OT05FSUdIX0RTVAkmIzM0OzE3Mi4wLjAuNSYjMzQ7CiAjZGVmaW5lIElQVjZfVEJJRF9BRERSCQkmIzM0O2ZkMDA6OkZGRkYmIzM0OwogI2RlZmluZSBJUFY2X1RCSURfTkVUCQkmIzM0O2ZkMDA6OiYjMzQ7CiAjZGVmaW5lIElQVjZfVEJJRF9EU1QJCSYjMzQ7ZmQwMDo6MiYjMzQ7CkBAIC0zNyw2ICYjNDM7MzksNDEgQEAKICNkZWZpbmUgSVBWNl9MT0NBTAkJJiMzNDtmZDAxOjozJiMzNDsKICNkZWZpbmUgSVBWNl9HVzEJCSYjMzQ7ZmQwMTo6MSYjMzQ7CiAjZGVmaW5lIElQVjZfR1cyCQkmIzM0O2ZkMDE6OjImIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9JRAkJCTEwMAomIzQzOyNkZWZpbmUgVkxBTl9JRkFDRQkJJiMzNDt2ZXRoMS4xMDAmIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9JRF9ET1dOCQkxMDIKJiM0MzsjZGVmaW5lIFZMQU5fSUZBQ0VfRE9XTgkJJiMzNDt2ZXRoMS4xMDImIzM0OwomIzQzOyNkZWZpbmUgUUlOUV9PVVRFUl9JRkFDRQkmIzM0O3ZldGgxLjIwMCYjMzQ7CiYjNDM7I2RlZmluZSBRSU5RX0lOTkVSX0lGQUNFCSYjMzQ7dmV0aDEuMjAwLjMwMCYjMzQ7CiYjNDM7I2RlZmluZSBWTEFOX1RBQkxFCQkmIzM0OzMwMCYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1ZMQU5fSUZBQ0VfQUREUgkmIzM0OzEwLjUuMC4yNTQmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0VHUkVTU19EU1QJJiMzNDsxMC41LjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1FJTlFfRFNUCQkmIzM0OzEwLjcuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9EU1QJCSYjMzQ7MTAuNi4wLjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WTEFOX0dXCQkmIzM0OzEwLjUuMC4xJiMzNDsKJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9JRkFDRV9BRERSCSYjMzQ7ZmQwMjo6MjU0JiMzNDsKJiM0MzsjZGVmaW5lIElQVjZfVkxBTl9FR1JFU1NfRFNUCSYjMzQ7ZmQwMjo6MiYjMzQ7CiYjNDM7I2RlZmluZSBJUFY2X1ZMQU5fRFNUCQkmIzM0O2ZkMDM6OjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNl9WTEFOX0dXCQkmIzM0O2ZkMDI6OjEmIzM0OwomIzQzOyNkZWZpbmUgVkxBTl9WSURfVU5VU0VECQk5OTkKJiM0MzsjZGVmaW5lIFZSRl9JRkFDRQkJJiMzNDt2cmYtYmx1ZSYjMzQ7CiYjNDM7I2RlZmluZSBWUkZfVEFCTEUJCSYjMzQ7MTAwMCYjMzQ7CiYjNDM7I2RlZmluZSBWUkZfVkxBTl9JRAkJMTAxCiYjNDM7I2RlZmluZSBWUkZfVkxBTl9JRkFDRQkJJiMzNDt2ZXRoMS4xMDEmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUgkmIzM0OzEwLjguMC4yNTQmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WUkZfR1cJCSYjMzQ7MTAuOC4wLjEmIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9WUkZfRFNUCQkmIzM0OzEwLjkuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIFRCSURfVkxBTl9JRAkJNTAKJiM0MzsjZGVmaW5lIFRCSURfVkxBTl9JRkFDRQkJJiMzNDt2ZXRoMi41MCYjMzQ7CiYjNDM7I2RlZmluZSBJUFY0X1RCSURfVkxBTl9EU1QJJiMzNDsxNzIuMi4wLjImIzM0OwomIzQzOyNkZWZpbmUgSVBWNF9CT05EX1ZMQU5fRFNUCSYjMzQ7MTAuMTEuMC4yJiMzNDsKJiM0MzsjZGVmaW5lIElQVjRfVkxBTl9NVFVfRFNUCSYjMzQ7MTAuNS45LjImIzM0OwomIzQzOyNkZWZpbmUgUUlOUV9BRF9WTEFOX0lECQkyMDAKJiM0MzsjZGVmaW5lIFFJTlFfSU5ORVJfVkxBTl9JRAkzMDAKJiM0MzsjZGVmaW5lIEJPTkRfSUZBQ0UJCSYjMzQ7Ym9uZDk5JiMzNDsKJiM0MzsjZGVmaW5lIEJPTkRfUE9SVAkJJiMzNDt2ZXRoMyYjMzQ7CiYjNDM7I2RlZmluZSBCT05EX1BPUlRfUEVFUgkJJiMzNDt2ZXRoNCYjMzQ7CiYjNDM7I2RlZmluZSBCT05EX1ZMQU5fSUQJCTUwMAogI2RlZmluZSBETUFDCQkJJiMzNDsxMToxMToxMToxMToxMToxMSYjMzQ7CiAjZGVmaW5lIERNQUNfSU5JVCB7IDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsIH0KICNkZWZpbmUgRE1BQzIJCQkmIzM0OzAxOjAxOjAxOjAxOjAxOjAxJiMzNDsKQEAgLTUyLDYgJiM0Mzs4OSwxNyBAQCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHsKIAlfX3UzMiB0YmlkOwogCV9fdTggZG1hY1s2XTsKIAlfX3UzMiBtYXJrOwomIzQzOwkvKgomIzQzOwkgKiBpbnB1dCB0YWcgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUOyBleHBlY3RlZCBvdXRwdXQgdGFnCiYjNDM7CSAqIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTiAoY2hlY2tlZCB3aGVuIGNoZWNrX3ZsYW4gaXMgc2V0KQomIzQzOwkgKi8KJiM0MzsJX191MTYgdmxhbl9wcm90bzsKJiM0MzsJX191MTYgdmxhbl9pZDsKJiM0MzsJYm9vbCBjaGVja192bGFuOwomIzQzOwljb25zdCBjaGFyICpleHBlY3RlZF9kZXY7IC8qIGV4cGVjdGVkIHBhcmFtcy0mZ3Q7aWZpbmRleCBhZnRlciBsb29rdXAgKi8KJiM0MzsJY29uc3QgY2hhciAqaWlmOwkgIC8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZldGgxIGlucHV0IGRldmljZSAqLwomIzQzOwlfX3UxNiB0b3RfbGVuOwkJICAvKiB0cmlnZ2VycyB0aGUgaW4tbG9va3VwIG10dSBjaGVjayB3aGVuIHNldCAqLwomIzQzOwlfX3UxNiBleHBlY3RlZF9tdHU7CSAgLyogZXhwZWN0ZWQgbXR1X3Jlc3VsdCAodW5pb24gd2l0aCB0b3RfbGVuKSAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHsKQEAgLTc5LDYgJiM0MzsxMjcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHsKIAkgIC5kYWRkciA9IElQVjRfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiAJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCwgLnRiaWQgPSAxMDAsCiAJICAuZG1hYyA9IERNQUNfSU5JVDIsIH0sCiYjNDM7CS8qCiYjNDM7CSAqIEFuIGVycm9yIHRoYXQgcmV0dXJucyBhZnRlciB0aGUgZWdyZXNzIGRldmljZSBpcyByZXNvbHZlZCBtdXN0CiYjNDM7CSAqIHJlcG9ydCB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXQuIFRoaXMgcm91dGVzIGZyb20gaW5wdXQKJiM0MzsJICogdmV0aDEgdmlhIHZldGgyICh0YWJsZSAxMDApIHRvIGEgZHN0IHdpdGggbm8gbmVpZ2hib3VyLCBzbwomIzQzOwkgKiBpbnB1dCAhPSBlZ3Jlc3MsIHBpbm5pbmcgTk9fTkVJR0ggdG8gdGhlIGVncmVzcyBkZXZpY2UuCiYjNDM7CSAqLwomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IE5PX05FSUdIIHJlcG9ydHMgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0JiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9UQklEX05PTkVJR0hfRFNULAomIzQzOwkgIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMiYjMzQ7LCB9LAogCXsgLmRlc2MgPSAmIzM0O0lQdjYgVEJJRCBsb29rdXAgZmFpbHVyZSYjMzQ7LAogCSAgLmRhZGRyID0gSVBWNl9UQklEX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAogCSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsCkBAIC0xNDIsNiAmIzQzOzIwMSwyMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHsKIAkgIC5leHBlY3RlZF9kc3QgPSBJUFY2X0dXMSwKIAkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAogCSAgLm1hcmsgPSBNQVJLLCB9LAomIzQzOwkvKiB2bGFuIGVncmVzcyByZXNvbHV0aW9uICovCiYjNDM7CS8qCiYjNDM7CSAqIEludmFyaWFudCB0aGUgVkxBTi1lZ3Jlc3MgYXJtcyBqb2ludGx5IGVuZm9yY2U6IGEKJiM0MzsJICogQlBGX0ZJQl9MT09LVVBfVkxBTiBTVUNDRVNTIGFsd2F5cyBjYXJyaWVzIGEgcGh5c2ljYWwsCiYjNDM7CSAqIHhtaXQtY2FwYWJsZSBpZmluZGV4OyBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlCiYjNDM7CSAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZQomIzQzOwkgKiBRaW5RIGFuZCBmb3JlaWduLW5ldG5zIGFybXMgcGluIFZMQU5fRkFJTFVSRSB3aXRoIHBhcmFtcy0mZ3Q7aWZpbmRleAomIzQzOwkgKiBsZWZ0IGF0IHRoZSBpbnB1dCwgc28gYSByZWdyZXNzaW9uIHRvIGJlc3QtZWZmb3J0IChTVUNDRVNTICYjNDM7IHRoZQomIzQzOwkgKiBWTEFOIGlmaW5kZXgpIGZhaWxzIG9uZS4KJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTiYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LAomIzQzOwkvKgomIzQzOwkgKiBza2IgcGF0aCB3aXRob3V0IHRvdF9sZW46IG10dV9yZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlJiMzOTtzIG10dQomIzQzOwkgKiAoMTQwMCksIG5vdCB0aGUgcGFyZW50JiMzOTtzICgxNTAwKQomIzQzOwkgKi8KJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcywgc2tiLXBhdGggbXR1IGlzIHRoZSBWTEFOIGRldmljZSYjMzk7cyB3aXRob3V0IHRoZSBmbGFnJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIGZsYWcgc2V0IGJ1dCBlZ3Jlc3MgaXMgbm90IGEgVkxBTiYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsCiYjNDM7CSAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IFFJTlFfSU5ORVJfSUZBQ0UsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2UmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyBpbiBPVVRQVVQgbW9kZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5paWYgPSBWTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9PVVRQVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHwKJiM0MzsJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyBvdmVyIGEgYm9uZCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfQk9ORF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9IEJPTkRfSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVEJJRF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8CiYjNDM7CQkJICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudGJpZCA9IDEwMCwKJiM0MzsJICAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMiYjMzQ7LCAuY2hlY2tfdmxhbiA9IHRydWUsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBUQklEX1ZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC50b3RfbGVuID0gNTAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELAomIzQzOwkgIC50b3RfbGVuID0gMTQwMCwgLmV4cGVjdGVkX210dSA9IDEwMDAsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwgfSwKJiM0MzsJLyogdmxhbiB0YWcgYXMgbG9va3VwIGlucHV0ICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgbm8gZmxhZyYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIHN1YmludGVyZmFjZSByb3V0ZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGUmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5leHBlY3RlZF9kc3QgPSBJUFY2X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCBhbmQgZWdyZXNzIGNvbWJpbmVkJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gJiMzNDt2ZXRoMSYjMzQ7LAomIzQzOwkgIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfAomIzQzOwkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgbmVpZ2hib3VyIHJlc29sdmVkIG9uIHRoZSByb3V0ZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgc3ViaW50ZXJmYWNlJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TUkMgfAomIzQzOwkJCSAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sCiYjNDM7CS8qCiYjNDM7CSAqIFZSRjogdGhlIHJlc29sdmVkIHN1YmludGVyZmFjZSBpcyBlbnNsYXZlZCwgc28gdGhlIGwzbWRldiBydWxlCiYjNDM7CSAqIChmdWxsIGxvb2t1cCkgYW5kIGwzbWRldl9maWJfdGFibGVfcmN1KCkgKERJUkVDVCkgbXVzdCBzZWxlY3QKJiM0MzsJICogdGhlIFZSRiB0YWJsZSBmcm9tIHRoZSByZXNvbHZlZCBpbmdyZXNzCiYjNDM7CSAqLwomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIFZSRiBzdWJpbnRlcmZhY2UsIG5vIGZsYWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsCiYjNDM7CSAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIFZSRiB0YWJsZSYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVlJGX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBESVJFQ1QgdXNlcyBWUkYgdGFibGUgZnJvbSByZXNvbHZlZCBpbmdyZXNzJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLAomIzQzOwkgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwKJiM0MzsJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSwKJiM0MzsJLyoKJiM0MzsJICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbAomIzQzOwkgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmUKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90byYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX1ZJRF9VTlVTRUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd24mIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSURfRE9XTiwgfSwKJiM0MzsJLyoKJiM0MzsJICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzCiYjNDM7CSAqIHdpdGggZm9yd2FyZGluZyBvZmYgRldEX0RJU0FCTEVEIChub3QgTk9UX0ZXREVEKSBwcm92ZXMgdGhlIHRhZwomIzQzOwkgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3MKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgODAyLjFhZCB0YWcmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMUFELCAudmxhbl9pZCA9IFFJTlFfQURfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUywKJiM0MzsJICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgaW5uZXIgUWluUSBkZXZpY2UgZnJvbSBWTEFOIGlmaW5kZXgmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsCiYjNDM7CSAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LAomIzQzOwkvKgomIzQzOwkgKiBib25kaW5nOiB0aGUgVkxBTnMgbGl2ZSBvbiB0aGUgbWFzdGVyLCBhcyBvbiByZWNlaXZlLCB3aGVyZSB0aGUKJiM0MzsJICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydAomIzQzOwkgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cykKJiM0MzsJICovCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgbWFzdGVyIHJlc29sdmVzJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELAomIzQzOwkgIC5paWYgPSBCT05EX0lGQUNFLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBwb3J0IGRvZXMgbm90IG1hdGNoJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sCiYjNDM7CXsgLmRlc2MgPSAmIzM0O0lQdjYgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90byYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELAomIzQzOwkgIC5leHBlY3RlZF9kZXYgPSAmIzM0O3ZldGgxJiMzNDssIC5jaGVja192bGFuID0gdHJ1ZSwKJiM0MzsJICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY2IFZMQU4gaW5wdXQsIHVubWF0Y2hlZCBWSUQmIzM0OywKJiM0MzsJICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CSAgLmV4cGVjdGVkX2RldiA9ICYjMzQ7dmV0aDEmIzM0OywgLmNoZWNrX3ZsYW4gPSB0cnVlLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCwKJiM0MzsJICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7dW5rbm93biBmbGFnIGJpdCByZWplY3RlZCYjMzQ7LAomIzQzOwkgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLAomIzQzOwkgIC5sb29rdXBfZmxhZ3MgPSAoMSAmbHQ7Jmx0OyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LAomIzQzOwl7IC5kZXNjID0gJiMzNDtJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBUQklEJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELAomIzQzOwkgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSwKJiM0MzsJeyAuZGVzYyA9ICYjMzQ7SVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUJiMzNDssCiYjNDM7CSAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsCiYjNDM7CSAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQsCiYjNDM7CSAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LAogfTsKIAogc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKQpAQCAtMjA0LDYgJiM0Mzs0NzUsMTA1IEBAIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZCkKIAlTWVMoZmFpbCwgJiMzNDtpcCBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlcyYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTsKIAlTWVMoZmFpbCwgJiMzNDtpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlcyYjMzQ7LCBNQVJLLCBNQVJLX1RBQkxFKTsKIAomIzQzOwkvKgomIzQzOwkgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZAomIzQzOwkgKiB0YWctYXMtaW5wdXQsIGEgUWluUSBzdGFjaywgYW5kIGFuIGlpZiBydWxlIHNvIHRoZSBpbnB1dCB0ZXN0cwomIzQzOwkgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy4KJiM0MzsJICovCiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWQmIzM0OywKJiM0MzsJICAgIFZMQU5fSUZBQ0UsIFZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgVkxBTl9JRkFDRSk7CiYjNDM7CS8qCiYjNDM7CSAqIGxvd2VyIHRoYW4gdGhlIHZldGgxIHBhcmVudCAoMTUwMCk6IHRoZSBza2ItcGF0aCBtdHUgY2hlY2sgdXNlcyB0aGUKJiM0MzsJICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUgd2l0aCBvcgomIzQzOwkgKiB3aXRob3V0IHRoZSBlZ3Jlc3Mgc3dhcCwgd2hpY2ggdHdvIGFybXMgYmVsb3cgcGluCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgbXR1IDE0MDAmIzM0OywgVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBJUFY0X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZCYjMzQ7LCBJUFY2X1ZMQU5fSUZBQ0VfQUREUiwgVkxBTl9JRkFDRSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWwKJiM0MzsJICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkJiMzNDssCiYjNDM7CSAgICBWTEFOX0lGQUNFX0RPV04sIFZMQU5fSURfRE9XTik7CiYjNDM7CiYjNDM7CWVyciA9IHdyaXRlX3N5c2N0bCgmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyYjMzQ7IFZMQU5fSUZBQ0UgJiMzNDsvZm9yd2FyZGluZyYjMzQ7LCAmIzM0OzEmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt3cml0ZV9zeXNjdGwobmV0LmlwdjQuY29uZi4mIzM0OyBWTEFOX0lGQUNFICYjMzQ7LmZvcndhcmRpbmcpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllcnIgPSB3cml0ZV9zeXNjdGwoJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi8mIzM0OyBWTEFOX0lGQUNFICYjMzQ7L2ZvcndhcmRpbmcmIzM0OywgJiMzNDsxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY2LmNvbmYuJiMzNDsgVkxBTl9JRkFDRSAmIzM0Oy5mb3J3YXJkaW5nKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBwcm90byA4MDIuMWFkIGlkIDIwMCYjMzQ7LAomIzQzOwkgICAgUUlOUV9PVVRFUl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcyB0eXBlIHZsYW4gaWQgMzAwJiMzNDssCiYjNDM7CSAgICBRSU5RX09VVEVSX0lGQUNFLCBRSU5RX0lOTkVSX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFFJTlFfT1VURVJfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgUUlOUV9JTk5FUl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMmIzM0OywgSVBWNF9RSU5RX0RTVCwgUUlOUV9JTk5FUl9JRkFDRSk7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXMmIzM0OywgSVBWNF9WTEFOX0RTVCwgSVBWNF9HVzEpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzJiMzNDssCiYjNDM7CSAgICBWTEFOX1RBQkxFLCBJUFY0X1ZMQU5fRFNULCBJUFY0X1ZMQU5fR1cpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlcyYjMzQ7LCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLTYgcm91dGUgYWRkICVzLzEyOCB2aWEgJXMmIzM0OywgSVBWNl9WTEFOX0RTVCwgSVBWNl9HVzEpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlcyYjMzQ7LAomIzQzOwkgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgLTYgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXMmIzM0OywgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7CiYjNDM7CiYjNDM7CS8qIGEgYm9uZCB3aXRoIG9uZSBwb3J0IGFuZCBhIFZMQU4gb24gdGhlIGJvbmQgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgJXMgdHlwZSBib25kJiMzNDssIEJPTkRfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZldGggcGVlciBuYW1lICVzJiMzNDssIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXMmIzM0OywgQk9ORF9QT1JULCBCT05EX0lGQUNFKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIEJPTkRfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMgdXAmIzM0OywgQk9ORF9QT1JUKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgbGluayAlcyBuYW1lICVzLiVkIHR5cGUgdmxhbiBpZCAlZCYjMzQ7LAomIzQzOwkgICAgQk9ORF9JRkFDRSwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lELCBCT05EX1ZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXAmIzM0OywgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lEKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlcy4lZCYjMzQ7LAomIzQzOwkgICAgSVBWNF9CT05EX1ZMQU5fRFNULCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBhIFZSRiB3aXRoIGl0cyBvd24gZGVkaWNhdGVkIHN1YmludGVyZmFjZSAodGhlIGlpZiBydWxlcyBhYm92ZQomIzQzOwkgKiBtdXN0IG5vdCBzZWUgaXQpLCBmb3IgdGhlIHRhYmxlLXNlbGVjdGlvbi1ieS1pbmdyZXNzIGNhc2VzCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCAlcyB0eXBlIHZyZiB0YWJsZSAlcyYjMzQ7LCBWUkZfSUZBQ0UsIFZSRl9UQUJMRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cCYjMzQ7LCBWUkZfSUZBQ0UpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkJiMzNDssCiYjNDM7CSAgICBWUkZfVkxBTl9JRkFDRSwgVlJGX1ZMQU5fSUQpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXMmIzM0OywgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgc2V0IGRldiAlcyB1cCYjMzQ7LCBWUkZfVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkICVzLzI0IGRldiAlcyYjMzQ7LCBJUFY0X1ZSRl9JRkFDRV9BRERSLCBWUkZfVkxBTl9JRkFDRSk7CiYjNDM7CWVyciA9IHdyaXRlX3N5c2N0bCgmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyYjMzQ7IFZSRl9WTEFOX0lGQUNFICYjMzQ7L2ZvcndhcmRpbmcmIzM0OywgJiMzNDsxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuJiMzNDsgVlJGX1ZMQU5fSUZBQ0UgJiMzNDsuZm9yd2FyZGluZykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXMmIzM0OywgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8zMiB2aWEgJXMmIzM0OywKJiM0MzsJICAgIFZSRl9UQUJMRSwgSVBWNF9WUkZfRFNULCBJUFY0X1ZSRl9HVyk7CiYjNDM7CiYjNDM7CS8qIG5laWdoYm91cnMgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGZvciB0aGUgbm9uLVNLSVBfTkVJR0ggY2FzZXMgKi8KJiM0MzsJZXJyID0gd3JpdGVfc3lzY3RsKCYjMzQ7L3Byb2Mvc3lzL25ldC9pcHY0L25laWdoLyYjMzQ7IFZMQU5fSUZBQ0UgJiMzNDsvZ2Nfc3RhbGVfdGltZSYjMzQ7LCAmIzM0OzkwMCYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3dyaXRlX3N5c2N0bChuZXQuaXB2NC5uZWlnaC4mIzM0OyBWTEFOX0lGQUNFICYjMzQ7LmdjX3N0YWxlX3RpbWUpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGUmIzM0OywKJiM0MzsJICAgIElQVjRfVkxBTl9FR1JFU1NfRFNULCBWTEFOX0lGQUNFLCBETUFDKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlJiMzNDssCiYjNDM7CSAgICBJUFY0X1ZMQU5fR1csIFZMQU5fSUZBQ0UsIERNQUMyKTsKJiM0MzsKJiM0MzsJLyogYSBWTEFOIG9uIHZldGgyIHdpdGggYSByb3V0ZSBpbiB0aGUgdGJpZCB0ZXN0IHRhYmxlICovCiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGxpbmsgYWRkIGxpbmsgdmV0aDIgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWQmIzM0OywKJiM0MzsJICAgIFRCSURfVkxBTl9JRkFDRSwgVEJJRF9WTEFOX0lEKTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2ICVzIHVwJiMzNDssIFRCSURfVkxBTl9JRkFDRSk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIHJvdXRlIGFkZCB0YWJsZSAxMDAgJXMvMzIgZGV2ICVzJiMzNDssCiYjNDM7CSAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7CiYjNDM7CiYjNDM7CS8qIGEgbG9ja2VkLW10dSByb3V0ZSB2aWEgdGhlIHN1YmludGVyZmFjZSBmb3IgdGhlIEZSQUdfTkVFREVEIGNhc2UgKi8KJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwJiMzNDssCiYjNDM7CSAgICBJUFY0X1ZMQU5fTVRVX0RTVCwgVkxBTl9JRkFDRSk7CiYjNDM7CiAJcmV0dXJuIDA7CiBmYWlsOgogCXJldHVybiAtMTsKQEAgLTIxOCw5ICYjNDM7NTg4LDE2IEBAIHN0YXRpYyBpbnQgc2V0X2xvb2t1cF9wYXJhbXMoc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsCiAJbWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTsKIAogCXBhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKLQlwYXJhbXMtJmd0O2lmaW5kZXggPSBpZmluZGV4OwomIzQzOwlwYXJhbXMtJmd0O2lmaW5kZXggPSB0ZXN0LSZndDtpaWYgPyBpZl9uYW1ldG9pbmRleCh0ZXN0LSZndDtpaWYpIDogaWZpbmRleDsKIAlwYXJhbXMtJmd0O3RiaWQgPSB0ZXN0LSZndDt0YmlkOwogCXBhcmFtcy0mZ3Q7bWFyayA9IHRlc3QtJmd0O21hcms7CiYjNDM7CXBhcmFtcy0mZ3Q7dG90X2xlbiA9IHRlc3QtJmd0O3RvdF9sZW47CiYjNDM7CiYjNDM7CS8qIGhfdmxhbl9wcm90by9oX3ZsYW5fVENJIHVuaW9uIHdpdGggdGJpZCAqLwomIzQzOwlpZiAodGVzdC0mZ3Q7bG9va3VwX2ZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHsKJiM0MzsJCXBhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvID0gaHRvbnModGVzdC0mZ3Q7dmxhbl9wcm90byk7CiYjNDM7CQlwYXJhbXMtJmd0O2hfdmxhbl9UQ0kgPSBodG9ucyh0ZXN0LSZndDt2bGFuX2lkKTsKJiM0MzsJfQogCiAJaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgdGVzdC0mZ3Q7ZGFkZHIsIHBhcmFtcy0mZ3Q7aXB2Nl9kc3QpID09IDEpIHsKIAkJcGFyYW1zLSZndDtmYW1pbHkgPSBBRl9JTkVUNjsKQEAgLTI5OCw3ICYjNDM7Njc1LDcgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAlzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7CiAJc3RydWN0IF9fc2tfYnVmZiBza2IgPSB7IH07CiAJc3RydWN0IGZpYl9sb29rdXAgKnNrZWw7Ci0JaW50IHByb2dfZmQsIGVyciwgcmV0LCBpOwomIzQzOwlpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHJldCwgaTsKIAogCS8qIFRoZSB0ZXN0IGRvZXMgbm90IHVzZSB0aGUgc2tiLSZndDtkYXRhLCBzbwogCSAqIHVzZSBwa3RfdjYgZm9yIGJvdGggdjYgYW5kIHY0IHRlc3QuCkBAIC0zMDksMTEgJiM0Mzs2ODYsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJICAgIC5jdHhfaW4gPSAmYW1wO3NrYiwKIAkJICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLAogCSk7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cywKJiM0MzsJCSAgICAuZGF0YV9pbiA9ICZhbXA7cGt0X3Y2LAomIzQzOwkJICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSwKJiM0MzsJKTsKIAogCXNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7CiAJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkJiMzNDspKQogCQlyZXR1cm47CiAJcHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5maWJfbG9va3VwKTsKJiM0MzsJeGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmZpYl9sb29rdXBfeGRwKTsKIAogCVNZUyhmYWlsLCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBOU19URVNUKTsKIApAQCAtMzQzLDYgJiM0Mzs3MjUsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX29wdHMmIzM0OykpCiAJCQljb250aW51ZTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gaXMgWERQLW9ubHk7IHRoZSB0YyBoZWxwZXIgcmVqZWN0cyBpdC4KJiM0MzsJCSAqIFRoZXNlIGNhc2VzIGFyZSBleGVyY2lzZWQgb24gdGhlIFhEUCBwYXRoIGJlbG93LgomIzQzOwkJICovCiYjNDM7CQlpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzICZhbXA7IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIHsKJiM0MzsJCQlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCwgLUVJTlZBTCwKJiM0MzsJCQkJICAmIzM0O3RjIHJlamVjdHMgQlBGX0ZJQl9MT09LVVBfVkxBTiYjMzQ7KTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQsIHRlc3RzW2ldLmV4cGVjdGVkX3JldCwKIAkJCSAgJiMzNDtmaWJfbG9va3VwX3JldCYjMzQ7KTsKIApAQCAtMzUyLDYgJiM0Mzs3NDQsMjEgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdCkKIAkJCWFzc2VydF9kc3RfaXAoZmliX3BhcmFtcywgdGVzdHNbaV0uZXhwZWN0ZWRfZHN0KTsKIAomIzQzOwkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldikKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCwKJiM0MzsJCQkJICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLCAmIzM0O2lmaW5kZXgmIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1KQomIzQzOwkJCUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDttdHVfcmVzdWx0LCB0ZXN0c1tpXS5leHBlY3RlZF9tdHUsCiYjNDM7CQkJCSAgJiMzNDttdHVfcmVzdWx0JiMzNDspOwomIzQzOwomIzQzOwkJaWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHsKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvLAomIzQzOwkJCQkgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCAmIzM0O2hfdmxhbl9wcm90byYjMzQ7KTsKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSwKJiM0MzsJCQkJICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgJiMzNDtoX3ZsYW5fVENJJiMzNDspOwomIzQzOwkJfQomIzQzOwogCQlyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy0mZ3Q7ZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTsKIAkJaWYgKCFBU1NFUlRfRVEocmV0LCAwLCAmIzM0O2RtYWMgbm90IG1hdGNoJiMzNDspKSB7CiAJCQljaGFyIGV4cGVjdGVkWzE4XSwgYWN0dWFsWzE4XTsKQEAgLTM2MSwxNSAmIzQzOzc2OCwzMTIgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZCkKIAkJCXByaW50ZigmIzM0O2RtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzICYjMzQ7LCBleHBlY3RlZCwgYWN0dWFsKTsKIAkJfQogCi0JCS8vIGVuc3VyZSB0YmlkIGlzIHplcm8mIzM5O2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuCi0JCWlmICh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgJmFtcDsgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7CiYjNDM7CQkvKgomIzQzOwkJICogZW5zdXJlIHRiaWQgaXMgemVybyYjMzk7ZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aAomIzQzOwkJICogQlBGX0ZJQl9MT09LVVBfVkxBTiB0aGUgdW5pb24gaG9sZHMgdGhlIHBhY2tlZCB2bGFuCiYjNDM7CQkgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoKHRlc3RzW2ldLmxvb2t1cF9mbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyAmYW1wOyBCUEZfRklCX0xPT0tVUF9WTEFOKSkgewogCQkJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfcGFyYW1zLnRiaWQsIDAsCiAJCQkJCSYjMzQ7ZXhwZWN0ZWQgZmliX3BhcmFtcy50YmlkIHRvIGJlIHplcm8mIzM0OykpCiAJCQkJZ290byBmYWlsOwogCQl9CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFJlLXJ1biB0aGUgY2FzZXMgdGhyb3VnaCBicGZfeGRwX2ZpYl9sb29rdXAoKS4gdGVzdF9ydW4gdXNlcyB0aGUKJiM0MzsJICogY3VycmVudCBuZXRucyYjMzk7IGxvb3BiYWNrIGZvciBjdHgtJmd0O3J4cS0mZ3Q7ZGV2LCBzbyBkZXZfbmV0KCkgaXMgTlNfVEVTVAomIzQzOwkgKiBhbmQgdGhlIGxvb2t1cCBydW5zIGFnYWluc3QgaXRzIEZJQi4gVGhlIHBhdGgtaW5kZXBlbmRlbnQgcmVzdWx0cwomIzQzOwkgKiAocmV0dXJuIGNvZGUsIHN3YXBwZWQgaWZpbmRleCwgdmxhbiB0YWcsIGdhdGV3YXkpIG11c3QgbWF0Y2ggdGhlIHNrYgomIzQzOwkgKiBwYXRoOyB0aGUgbm8tdG90X2xlbiBtdHVfcmVzdWx0IGlzIHNrYi1zcGVjaWZpYyBhbmQgbm90IHJlY2hlY2tlZC4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3RzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzZXRfbG9va3VwX3BhcmFtcyhmaWJfcGFyYW1zLCAmYW1wO3Rlc3RzW2ldLCBza2IuaWZpbmRleCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0ID0gLTE7CiYjNDM7CQlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IHRlc3RzW2ldLmxvb2t1cF9mbGFnczsKJiM0MzsKJiM0MzsJCWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCAmYW1wO3hkcF9vcHRzKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt4ZHAgdGVzdF9ydW4mIzM0OykpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0LCB0ZXN0c1tpXS5leHBlY3RlZF9yZXQsCiYjNDM7CQkJICAgICAgICYjMzQ7eGRwIGZpYl9sb29rdXBfcmV0JiMzNDspKQomIzQzOwkJCXByaW50ZigmIzM0Oyh4ZHApICVzXG4mIzM0OywgdGVzdHNbaV0uZGVzYyk7CiYjNDM7CiYjNDM7CQlpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KQomIzQzOwkJCUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtpZmluZGV4LAomIzQzOwkJCQkgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksCiYjNDM7CQkJCSAgJiMzNDt4ZHAgaWZpbmRleCYjMzQ7KTsKJiM0MzsKJiM0MzsJCWlmICh0ZXN0c1tpXS5leHBlY3RlZF9kc3QpCiYjNDM7CQkJYXNzZXJ0X2RzdF9pcChmaWJfcGFyYW1zLCB0ZXN0c1tpXS5leHBlY3RlZF9kc3QpOwomIzQzOwomIzQzOwkJaWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHsKJiM0MzsJCQlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX3Byb3RvLAomIzQzOwkJCQkgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCAmIzM0O3hkcCBoX3ZsYW5fcHJvdG8mIzM0Oyk7CiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2hfdmxhbl9UQ0ksCiYjNDM7CQkJCSAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksICYjMzQ7eGRwIGhfdmxhbl9UQ0kmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgPSBtZW1jbXAodGVzdHNbaV0uZG1hYywgZmliX3BhcmFtcy0mZ3Q7ZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTsKJiM0MzsJCUFTU0VSVF9FUShyZXQsIDAsICYjMzQ7eGRwIGRtYWMmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogbXR1X3Jlc3VsdCBmcm9tIGEgdG90X2xlbiBsb29rdXAgaXMgdGhlIHJvdXRlIG10dSBhbmQgaXMKJiM0MzsJCSAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtJmd0O210dSBhbmQgaXMKJiM0MzsJCSAqIHNrYi1vbmx5LCBzbyBnYXRlIG9uIHRvdF9sZW4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSAmYW1wOyZhbXA7IHRlc3RzW2ldLnRvdF9sZW4pCiYjNDM7CQkJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O210dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSwKJiM0MzsJCQkJICAmIzM0O3hkcCBtdHVfcmVzdWx0JiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7ZmFpbDoKJiM0MzsJaWYgKG5zdG9rZW4pCiYjNDM7CQljbG9zZV9uZXRucyhuc3Rva2VuKTsKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAmIzM0OyBOU19URVNUKTsKJiM0MzsJZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBOU19WTEFOX0EJJiMzNDtmaWJfbG9va3VwX3ZsYW5fbnNfYSYjMzQ7CiYjNDM7I2RlZmluZSBOU19WTEFOX0IJJiMzNDtmaWJfbG9va3VwX3ZsYW5fbnNfYiYjMzQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIFZMQU4gZGV2aWNlIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIG5ldG5zIHdoaWxlIHN0YXlpbmcgcmVnaXN0ZXJlZAomIzQzOyAqIG9uIGl0cyBwYXJlbnQuIE5laXRoZXIgZGlyZWN0aW9uIG1heSB0aGVuIGNyb3NzIHRoZSBib3VuZGFyeTogdGhlCiYjNDM7ICogZWdyZXNzIGZsYWcgbXVzdCBub3QgcHVibGlzaCB0aGUgZm9yZWlnbiBwYXJlbnQmIzM5O3MgaWZpbmRleCwgYW5kIHRoZQomIzQzOyAqIGlucHV0IGZsYWcgbXVzdCBmYWlsIGNsb3NlZCByYXRoZXIgdGhhbiB1c2UgYSBmb3JlaWduIGluZ3Jlc3MuCiYjNDM7ICovCiYjNDM7dm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9uZXRucyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9maWJfbG9va3VwICpmaWJfcGFyYW1zOwomIzQzOwlzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9OwomIzQzOwlzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7CiYjNDM7CWludCBwcm9nX2ZkLCB4ZHBfZmQsIGVyciwgcGFyZW50X2lkeCwgdmxhbl9pZHg7CiYjNDM7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBydW5fb3B0cywKJiM0MzsJCSAgICAuZGF0YV9pbiA9ICZhbXA7cGt0X3Y2LAomIzQzOwkJICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSwKJiM0MzsJCSAgICAuY3R4X2luID0gJmFtcDtza2IsCiYjNDM7CQkgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksCiYjNDM7CSk7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cywKJiM0MzsJCSAgICAuZGF0YV9pbiA9ICZhbXA7cGt0X3Y2LAomIzQzOwkJICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmZpYl9sb29rdXApOwomIzQzOwl4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuZmliX2xvb2t1cF94ZHApOwomIzQzOwlmaWJfcGFyYW1zID0gJmFtcDtza2VsLSZndDtic3MtJmd0O2ZpYl9wYXJhbXM7CiYjNDM7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBOU19WTEFOX0EpOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZXRucyBhZGQgJXMmIzM0OywgTlNfVkxBTl9CKTsKJiM0MzsKJiM0MzsJbnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVkxBTl9BKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3Blbl9uZXRucyhhKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBhZGQgdmV0aDcgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoOCYjMzQ7KTsKJiM0MzsJU1lTKGZhaWwsICYjMzQ7aXAgbGluayBzZXQgZGV2IHZldGg3IHVwJiMzNDspOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIGFkZCBsaW5rIHZldGg3IG5hbWUgdmV0aDcuNjYgdHlwZSB2bGFuIGlkIDY2JiMzNDspOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCB2ZXRoNy42NiBuZXRucyAlcyYjMzQ7LCBOU19WTEFOX0IpOwomIzQzOwomIzQzOwlwYXJlbnRfaWR4ID0gaWZfbmFtZXRvaW5kZXgoJiMzNDt2ZXRoNyYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfTkVRKHBhcmVudF9pZHgsIDAsICYjMzQ7aWZfbmFtZXRvaW5kZXgodmV0aDcpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBpbnB1dDogdGhlIG1vdmVkIGRldmljZSBpcyBzdGlsbCBpbiB2ZXRoNyYjMzk7cyBWTEFOIGdyb3VwLCBidXQgaXQKJiM0MzsJICogbGl2ZXMgaW4gYW5vdGhlciBuZXRucywgc28gdGhlIGxvb2t1cCBtdXN0IGZhaWwgY2xvc2VkCiYjNDM7CSAqLwomIzQzOwlza2IuaWZpbmRleCA9IHBhcmVudF9pZHg7CiYjNDM7CW1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCA9IHBhcmVudF9pZHg7CiYjNDM7CWZpYl9wYXJhbXMtJmd0O2hfdmxhbl9wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSA9IGh0b25zKDY2KTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsICYjMzQ7MTAuNjYuMC4yJiMzNDssICZhbXA7ZmliX3BhcmFtcy0mZ3Q7aXB2NF9kc3QpLAomIzQzOwkJICAgICAgIDEsICYjMzQ7aW5ldF9wdG9uKGRzdCkmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZmliX2xvb2t1cF9yZXQgPSAtMTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwKJiM0MzsJCQkJICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsICZhbXA7cnVuX29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9ydW4oaW5wdXQpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCwgQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsCiYjNDM7CQkgICYjMzQ7aW5wdXQgYWNyb3NzIG5ldG5zIGZhaWxzIGNsb3NlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKGZpYl9wYXJhbXMtJmd0O2lmaW5kZXgsIHBhcmVudF9pZHgsICYjMzQ7aWZpbmRleCB1bnRvdWNoZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtoX3ZsYW5fVENJLCBodG9ucyg2NiksICYjMzQ7dGFnIHVudG91Y2hlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJY2xvc2VfbmV0bnMobnN0b2tlbik7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQik7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCAmIzM0O29wZW5fbmV0bnMoYikmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIGVncmVzczogdGhlIGZpYiByZXN1bHQgaXMgdGhlIFZMQU4gZGV2aWNlIGhlcmUsIGJ1dCBpdHMgcGFyZW50CiYjNDM7CSAqIGlzIGluIHRoZSBvdGhlciBuZXRucywgc28gdGhlIHN3YXAgbXVzdCBub3QgaGFwcGVuCiYjNDM7CSAqLwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBsaW5rIHNldCBkZXYgdmV0aDcuNjYgdXAmIzM0Oyk7CiYjNDM7CVNZUyhmYWlsLCAmIzM0O2lwIGFkZHIgYWRkIDEwLjY2LjAuMS8yNCBkZXYgdmV0aDcuNjYmIzM0Oyk7CiYjNDM7CWVyciA9IHdyaXRlX3N5c2N0bCgmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL3ZldGg3LjY2L2ZvcndhcmRpbmcmIzM0OywgJiMzNDsxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7d3JpdGVfc3lzY3RsKGZvcndhcmRpbmcpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwl2bGFuX2lkeCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7dmV0aDcuNjYmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUSh2bGFuX2lkeCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCh2ZXRoNy42NikmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CW1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCA9IHZsYW5faWR4OwomIzQzOwlpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgJiMzNDsxMC42Ni4wLjImIzM0OywgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X2RzdCksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24oZHN0KSYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgJiMzNDsxMC42Ni4wLjEmIzM0OywgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X3NyYyksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24oc3JjKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmaWJfbG9va3VwX3JldCA9IC0xOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfAomIzQzOwkJCQkgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCAmYW1wO3hkcF9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKGVncmVzcykmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2ZpYl9sb29rdXBfcmV0LCBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwKJiM0MzsJCSAgJiMzNDtlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkUmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShmaWJfcGFyYW1zLSZndDtpZmluZGV4LCB2bGFuX2lkeCwKJiM0MzsJCSAgJiMzNDtmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoZmliX3BhcmFtcy0mZ3Q7aF92bGFuX1RDSSwgMCwgJiMzNDt2bGFuIGZpZWxkcyB6ZXJvJiMzNDspOwomIzQzOwomIzQzO2ZhaWw6CiYjNDM7CWlmIChuc3Rva2VuKQomIzQzOwkJY2xvc2VfbmV0bnMobnN0b2tlbik7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJiMzNDsgTlNfVkxBTl9BKTsKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAmIzM0OyBOU19WTEFOX0IpOwomIzQzOwlmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDAKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbAomIzQzOyAqIHBhcmVudC4gQSByZWRpcmVjdCB0aGF0IGxhbmRzIG9uIGEgVkxBTiBkZXZpY2UgaXMgZHJvcHBlZCBhdAomIzQzOyAqIHhkcF9kb19mbHVzaCgpLCBiZWNhdXNlIGEgVkxBTiBkZXZpY2UgaGFzIG5vIG5kb194ZHBfeG1pdC4gRHJpdmUgcmVhbAomIzQzOyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmUKJiM0MzsgKiB4ZHBfZG9fcmVkaXJlY3QoKSAmIzQzOyB4ZHBfZG9fZmx1c2goKSBwYXRoOiBhIHJlZHVjaWJsZSBWTEFOIGVncmVzcwomIzQzOyAqIHJlc29sdmVzIHRvIHZldGgxIGFuZCBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIsIHdoaWxlIGEgUWluUQomIzQzOyAqIGVncmVzcyByZXR1cm5zIFZMQU5fRkFJTFVSRSBhbmQgaXMgcGFzc2VkIHRvIHRoZSBzdGFjayBpbnN0ZWFkIG9mCiYjNDM7ICogcmVkaXJlY3RlZCB0byBhIGRldmljZSB0aGF0IHdvdWxkIHNpbGVudGx5IGRyb3AgaXQuCiYjNDM7ICovCiYjNDM7dm9pZCB0ZXN0X2ZpYl9sb29rdXBfdmxhbl9yZWRpcmVjdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7CiYjNDM7CXN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtczsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMOwomIzQzOwlzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7CiYjNDM7CWJvb2wgeGRwX2F0dGFjaGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBsZl9vcHRzLAomIzQzOwkJICAgIC5kYXRhX2luID0gJmFtcDtwa3RfdjQsCiYjNDM7CQkgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjQpLAomIzQzOwkJICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLAomIzQzOwkJICAgIC5yZXBlYXQgPSBSRURJUkVDVF9OUEtUUywKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlyZWRpcmVjdF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5maWJfbG9va3VwX3JlZGlyZWN0KTsKJiM0MzsJZmliX3BhcmFtcyA9ICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmaWJfcGFyYW1zOwomIzQzOwomIzQzOwlTWVMoZmFpbCwgJiMzNDtpcCBuZXRucyBhZGQgJXMmIzM0OywgTlNfVEVTVCk7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgJiMzNDtvcGVuX25ldG5zJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlpZiAoc2V0dXBfbmV0bnMoKSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJdmV0aDFfaWR4ID0gaWZfbmFtZXRvaW5kZXgoJiMzNDt2ZXRoMSYjMzQ7KTsKJiM0MzsJdmV0aDJfaWR4ID0gaWZfbmFtZXRvaW5kZXgoJiMzNDt2ZXRoMiYjMzQ7KTsKJiM0MzsJaWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCh2ZXRoMSkmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfTkVRKHZldGgyX2lkeCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCh2ZXRoMikmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgcmVkaXJlY3QgdG8gdmV0aDEgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLiB2ZXRoX3hkcF94bWl0KCkKJiM0MzsJICogb25seSBhY2NlcHRzIHRoZSBmcmFtZSBpZiB2ZXRoMiYjMzk7cyBOQVBJIGlzIHVwLCB3aGljaCBvbiB2ZXRoIG1lYW5zCiYjNDM7CSAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy4KJiM0MzsJICovCiYjNDM7CWVyciA9IGJwZl94ZHBfYXR0YWNoKHZldGgyX2lkeCwgYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnhkcF9jb3VudCksCiYjNDM7CQkJICAgICBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YXR0YWNoIHhkcF9jb3VudCBvbiB2ZXRoMiYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJeGRwX2F0dGFjaGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovCiYjNDM7CW1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7bDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKJiM0MzsJZmliX3BhcmFtcy0mZ3Q7aWZpbmRleCA9IHZldGgxX2lkeDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgJmFtcDtmaWJfcGFyYW1zLSZndDtpcHY0X3NyYyksCiYjNDM7CQkgICAgICAgMSwgJiMzNDtpbmV0X3B0b24oc3JjKSYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9WTEFOX0VHUkVTU19EU1QsICZhbXA7ZmliX3BhcmFtcy0mZ3Q7aXB2NF9kc3QpLAomIzQzOwkJICAgICAgIDEsICYjMzQ7aW5ldF9wdG9uKHJlZHVjaWJsZSBkc3QpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2xvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3JlZGlyZWN0ZWQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3Bhc3NlZCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZGVsaXZlcmVkID0gMDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgJmFtcDtsZl9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKHJlZHVjaWJsZSBlZ3Jlc3MpJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgJiMzNDtyZWR1Y2libGUgZWdyZXNzIHJlZGlyZWN0ZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3Bhc3NlZCwgMCwgJiMzNDtyZWR1Y2libGUgZWdyZXNzIG5vdCBwYXNzZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9HVChza2VsLSZndDtic3MtJmd0O2RlbGl2ZXJlZCwgMCwgJiMzNDtyZWR1Y2libGUgZWdyZXNzIGRlbGl2ZXJlZCB0byB2ZXRoMiYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kCiYjNDM7CSAqIHRoZSBwcm9ncmFtIHBhc3NlcyB0aGUgZnJhbWUgaW5zdGVhZCBvZiByZWRpcmVjdGluZyB0byB0aGUgaW5uZXIKJiM0MzsJICogVkxBTiBkZXZpY2UuIHJlZGlyZWN0ZWQgPT0gMCBpcyB0aGUgYXNzZXJ0aW9uIHRoYXQgbWF0dGVyczogdGhlCiYjNDM7CSAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0CiYjNDM7CSAqIHhkcF9kb19mbHVzaCgpLiB2ZXRoMiYjMzk7cyBkZWxpdmVyZWQgY291bnQgaXMgbm90IGNoZWNrZWQgaGVyZSwgc2luY2UKJiM0MzsJICogYSBwYXNzZWQgZnJhbWUgY2FuIHN0aWxsIHJlYWNoIHZldGgyIHRocm91Z2ggdGhlIHN0YWNrJiMzOTtzIGZvcndhcmRpbmcKJiM0MzsJICogcGF0aCwgd2hpY2ggaXMgdW5yZWxhdGVkIHRvIHRoZSByZWRpcmVjdCB1bmRlciB0ZXN0LgomIzQzOwkgKi8KJiM0MzsJbWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpOwomIzQzOwlmaWJfcGFyYW1zLSZndDtmYW1pbHkgPSBBRl9JTkVUOwomIzQzOwlmaWJfcGFyYW1zLSZndDtsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQOwomIzQzOwlmaWJfcGFyYW1zLSZndDtpZmluZGV4ID0gdmV0aDFfaWR4OwomIzQzOwlpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfc3JjKSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihzcmMpJiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1FJTlFfRFNULCAmYW1wO2ZpYl9wYXJhbXMtJmd0O2lwdjRfZHN0KSwKJiM0MzsJCSAgICAgICAxLCAmIzM0O2luZXRfcHRvbihxaW5xIGRzdCkmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7bG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cmVkaXJlY3RlZCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cGFzc2VkID0gMDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgJmFtcDtsZl9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfcnVuKHFpbnEgZWdyZXNzKSYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cGFzc2VkLCBSRURJUkVDVF9OUEtUUywgJiMzNDtxaW5xIGVncmVzcyBwYXNzZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3JlZGlyZWN0ZWQsIDAsICYjMzQ7cWlucSBlZ3Jlc3Mgbm90IHJlZGlyZWN0ZWQmIzM0Oyk7CiYjNDM7CiBmYWlsOgomIzQzOwlpZiAoeGRwX2F0dGFjaGVkKQomIzQzOwkJYnBmX3hkcF9kZXRhY2godmV0aDJfaWR4LCBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpOwogCWlmIChuc3Rva2VuKQogCQljbG9zZV9uZXRucyhuc3Rva2VuKTsKIAlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICYjMzQ7IE5TX1RFU1QpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMKaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjg2MmExZTk0NTdiNGUwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWJfbG9va3VwLmMKQEAgLTE5LDQgJiM0MzsxOSw0MCBAQCBpbnQgZmliX2xvb2t1cChzdHJ1Y3QgX19za19idWZmICpza2IpCiAJcmV0dXJuIFRDX0FDVF9TSE9UOwogfQogCiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspCiYjNDM7aW50IGZpYl9sb29rdXBfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWZpYl9sb29rdXBfcmV0ID0gYnBmX2ZpYl9sb29rdXAoY3R4LCAmYW1wO2ZpYl9wYXJhbXMsIHNpemVvZihmaWJfcGFyYW1zKSwKJiM0MzsJCQkJCWxvb2t1cF9mbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiBYRFBfRFJPUDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHJlZGlyZWN0ZWQgPSAwOwomIzQzO2ludCBwYXNzZWQgPSAwOwomIzQzO2ludCBkZWxpdmVyZWQgPSAwOwomIzQzOwomIzQzO1NFQygmIzM0O3hkcCYjMzQ7KQomIzQzO2ludCBmaWJfbG9va3VwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfbWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zOwomIzQzOwlsb25nIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYnBmX2ZpYl9sb29rdXAoY3R4LCAmYW1wO3BhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7CiYjNDM7CWlmIChyZXQgPT0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTKSB7CiYjNDM7CQlyZWRpcmVjdGVkJiM0MzsmIzQzOzsKJiM0MzsJCXJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBhc3NlZCYjNDM7JiM0Mzs7CiYjNDM7CXJldHVybiBYRFBfUEFTUzsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspCiYjNDM7aW50IHhkcF9jb3VudChzdHJ1Y3QgeGRwX21kICpjdHgpCiYjNDM7ewomIzQzOwlkZWxpdmVyZWQmIzQzOyYjNDM7OwomIzQzOwlyZXR1cm4gWERQX0RST1A7CiYjNDM7fQomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEzNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVkxBTiBCUEYgRklCIExvb2t1cCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgVkxBTiBzdXBwb3J0IHRvIHRoZSBgYnBmX2ZpYl9sb29rdXBgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGludHJvZHVjaW5nIHNvbWUgbmV3IGZsYWdzOiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgZXh0ZW5kaW5nIHRoZSBleGlzdGluZyBCUEYgRklCIGxvb2t1cCB0byBjb25zaWRlciBWTEFOIGluZm9ybWF0aW9uLCB3aGljaCBpcyBhIHByZXR0eSBjcnVjaWFsIGFkZGl0aW9uIGZvciBjb21wbGV4IG5ldHdvcmsgc2V0dXBzLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwmIzM5O3MgQlBGIEZJQiBsb29rdXAgbG9naWMsIHNvIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgcmVhY2hlZCBieSBCUEYgcHJvZ3JhbXMgY2FsbGluZyBgYnBmX2ZpYl9sb29rdXBgLiBMZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuCgpSaWdodCwgc28gdGhlIG9idmlvdXMgc3VzcGVjdHMgYXJlOiBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AsIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBgYnBmX2lwdjZfZmliX2xvb2t1cGAsIGBicGZfeGRwX2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAuIEJ1dCBoYW5nIG9uIGEgc2Vjb25kLCB0aG9zZSBmaXJzdCB0d28sIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBhbmQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgLCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgcHJvYmFibHkgaW5saW5lZCwgd2hpY2ggY29tcGxpY2F0ZXMgdGhpbmdzIHNsaWdodGx5LCBidXQgaXQmIzM5O3Mgc3RpbGwgZ29vZCB0byBpbmNsdWRlIHRoZW0gb24gdGhlIGxpc3QuIGBicGZfeGRwX2ZpYl9sb29rdXBgIGFuZCBgYnBmX3NrYl9maWJfbG9va3VwYCBzZWVtIGxpa2UgdGhlIHJlYWwgZW50cnkgcG9pbnRzLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoaXMgdG8gd29yay4gV2hlcmUmIzM5O3MgdGhpcyBjb2RlIGxvY2F0ZWQ/IEFoLCBpdCYjMzk7cyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBPa2F5LCBoZXJlJiMzOTtzIGFuIGludGVyZXN0aW5nIGJpdC4gVGhlIG5ldyBsb2dpYyBpbiBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AgaXMgZ3VhcmRlZCBieSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpYC4gR29vZCB0byBrbm93LiBCdXQgd2FpdCwgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIHVzZXMgYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAuIElzIHRoYXQgYXZhaWxhYmxlIG9ubHkgaWYgYENPTkZJR19WTEFOXzgwMjFRYCBpcyBlbmFibGVkPyBUaW1lIHRvIGRvdWJsZS1jaGVjayBgX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1YC4gR290dGEgdmVyaWZ5IHRoaXMgZGVwZW5kZW5jeSBiZWZvcmUgSSBwcm9jZWVkIHdpdGggdGhlIGZ1enppbmcgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz00MDY4PXN0YXRpYyBib29sIGJueHRfcmVfY2hlY2tfaWZfdmxhbl92YWxpZChzdHJ1Y3QgYm54dF9yZV9kZXYgKnJkZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy00MDc0LVx0ICovXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjQwNzU6XHRpZiAoIV9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShyZGV2LVx1MDAzZW5ldGRldixcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtNDA3Ni1cdFx0XHRcdCAgICAgIGh0b25zKEVUSF9QXzgwMjFRKSwgdmxhbl9pZCkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmM9MTc2PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X2lmZl9mcm9tX21hYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL2N4Z2IzX29mZmxvYWQuYy0xODctXHRcdFx0aWYgKHZsYW4gXHUwMDI2XHUwMDI2IHZsYW4gIT0gVkxBTl9WSURfTUFTSykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmM6MTg4Olx0XHRcdFx0ZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB2bGFuKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvY3hnYjNfb2ZmbG9hZC5jLTE4OS1cdFx0XHR9IGVsc2UgaWYgKG5ldGlmX2lzX2JvbmRfc2xhdmUoZGV2KSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY2xpcF90YmwuYz0yMTg9aW50IGN4Z2I0X3VwZGF0ZV9yb290X2Rldl9jbGlwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIzNi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFZMQU5fTl9WSUQ7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmM6MjM3Olx0XHRyb290X2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmMtMjM4LVx0XHRpZiAoIXJvb3RfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jPTg3NDM9c3RhdGljIHZvaWQgbWx4c3dfc3BfcmlmX2Rlc3Ryb3lfdmxhbl91cHBlcihzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTg3NTAtXHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzo4NzUxOlx0dXBwZXJfZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGJyX2RldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB2aWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODc1Mi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jPTg3NzA9aW50IG1seHN3X3NwX3JvdXRlcl9icmlkZ2Vfdmxhbl9hZGQoc3RydWN0IG1seHN3X3NwICptbHhzd19zcCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04ODMxLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzo4ODMyOlx0XHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnJfZGV2LCBodG9ucyhFVEhfUF84MDIxUSksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04ODMzLVx0XHRcdFx0XHRcdCAgICAgb2xkX3B2aWQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYz00MDgyPXZvaWQgcWxjbmljX3Jlc3RvcmVfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDkxLVx0Zm9yX2VhY2hfc2V0X2JpdCh2aWQsIGFkYXB0ZXItXHUwMDNldmxhbnMsIFZMQU5fTl9WSUQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYzo0MDkyOlx0XHRkZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UobmV0ZGV2LCBodG9ucyhFVEhfUF84MDIxUSksIHZpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMtNDA5My1cdFx0aWYgKCFkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmM9MzA5PXN0YXRpYyB2b2lkIGRvX25laWdoX3NvbGljaXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCAqYnVmLCB1MTYgdGNpKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jLTMyNi1cdGlmICh0Y2kpIHtcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jOjMyNzpcdFx0bmV0ZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldi1cdTAwM2VuZXQsIGh0b25zKEVUSF9QXzgwMjFRKSxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jLTMyOC1cdFx0XHRcdFx0XHQgIHRjaSk7XG4tLVxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MTIzPXN0cnVjdCB2bGFuX3BjcHVfc3RhdHMge1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjEzNjpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0xMzctXHRcdFx0XHRcdCAgICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpO1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTI1Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjI1MzpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMjU0LVx0XHQgICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZClcbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTA9Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy03NS0vKiBNdXN0IGJlIGludm9rZWQgd2l0aCByY3VfcmVhZF9sb2NrLiAqL1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjc2OnN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC84MDIxcS92bGFuX2NvcmUuYy03Ny1cdFx0XHRcdFx0X19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy05My1cdFx0aWYgKHVwcGVyX2Rldilcbm5ldC84MDIxcS92bGFuX2NvcmUuYzo5NDpcdFx0XHRyZXR1cm4gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHVwcGVyX2Rldixcbm5ldC84MDIxcS92bGFuX2NvcmUuYy05NS1cdFx0XHRcdFx0XHQgICAgdmxhbl9wcm90bywgdmxhbl9pZCk7XG4tLVxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTk5LX1cbm5ldC84MDIxcS92bGFuX2NvcmUuYzoxMDA6RVhQT1JUX1NZTUJPTChfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UpO1xubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTEwMS1cbi0tXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTEyND12b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0xNzktXHRpZiAodmlkICE9IDApIHtcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6MTgwOlx0XHR2bGFuZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGJyLVx1MDAzZWRldiwgc2tiLVx1MDAzZXZsYW5fcHJvdG8sXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE4MS1cdFx0XHRcdFx0XHQgICB2aWQpO1xuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9NDE0PXZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNDU1LVx0XHQvKiBidWlsZCBuZWlnaCB0YWJsZSBsb29rdXAgb24gdGhlIHZsYW4gZGV2aWNlICovXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjQ1NjpcdFx0dmxhbmRldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShici1cdTAwM2VkZXYsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00NTctXHRcdFx0XHRcdFx0ICAgdmlkKTtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTQzNT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJybmZfZ2V0X2xvZ2ljYWxfZGV2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00NDYtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQ0NzpcdHZsYW4gPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIHNrYi1cdTAwM2V2bGFuX3Byb3RvLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00NDgtXHRcdFx0XHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpIFx1MDAyNiBWTEFOX1ZJRF9NQVNLKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MjMzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYyNDMtXHR2aWQgPSBudG9ocyhwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSkgXHUwMDI2IFZMQU5fVklEX01BU0s7XG5uZXQvY29yZS9maWx0ZXIuYzo2MjQ0Olx0dmxhbl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBwcm90bywgdmlkKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNDUtXHRpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgfHxcbi0tXG5uZXQvZHNhL3RhZy5oPTEwND1zdGF0aWMgaW5saW5lIHZvaWQgZHNhX3NvZnR3YXJlX3VudGFnX3ZsYW5fdW5hd2FyZV9icmlkZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvZHNhL3RhZy5oLTEzMS1cdCAqL1xubmV0L2RzYS90YWcuaDoxMzI6XHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIGh0b25zKHByb3RvKSwgdmlkKTtcbm5ldC9kc2EvdGFnLmgtMTMzLVx0aWYgKCF1cHBlcl9kZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3MzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byBWTEFOIERldmljZSBEaXNjb3ZlcnkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLiBUaGUgY29kZSBzYXlzIGl0JiMzOTtzIGRlZmluZWQgaW4gYG5ldC84MDIxcS92bGFuX2NvcmUuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIEl0JiMzOTtzIG9ubHkgYXZhaWxhYmxlIGlmIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgZW5hYmxlZC4gV2FpdCBhIHNlY29uZCwgZG9lcyB0aGF0IG1lYW4gYHZsYW5fY29yZS5jYCBpcyBhY3R1YWxseSAqY29tcGlsZWQqIG9ubHkgd2hlbiB0aGF0IGNvbmZpZyBvcHRpb24gaXMgc2V0PyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhhdC4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byB0aGUgYG5ldC84MDIxcS9NYWtlZmlsZWAgYW5kIGNvbmZpcm0gaG93IHRoYXQgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLiBHb3R0YSBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9jb3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LzgwMjFxL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9NYWtlZmlsZS00LSNcbm5ldC84MDIxcS9NYWtlZmlsZTo1Om9iai0kKHN1YnN0IG0seSwkKENPTkZJR19WTEFOXzgwMjFRKSlcdCYjNDM7PSB2bGFuX2NvcmUub1xubmV0LzgwMjFxL01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpXHRcdCYjNDM7PSA4MDIxcS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMzYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gS2VybmVsIE1vZHVsZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgaXQgc2VlbXMgbGlrZSBgdmxhbl9jb3JlLm9gIGlzIGRlZmluaXRlbHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGVuYWJsZWQuIEFuZCwgSSBzZWUgdGhhdCBgc3Vic3QgbSx5YCB3aGljaCBtZWFucyBpdCYjMzk7cyBidWlsdC1pbiBpZiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdGFuZGFyZC4KCk5vdywgaG9sZCBvbi4uLnRoaXMgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIGZ1bmN0aW9uIGlzIGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCYjMzk7cyBhIGRpZmZlcmVudCBjb25jZXJuLCBidXQgYWxyaWdodCwgSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgpCdXQsIGEgbW9yZSBpbXBvcnRhbnQgcXVlc3Rpb24gYXJpc2VzLiBJIG5lZWQgdG8ga25vdyBpZiBhIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLCBpcyBzdGlsbCBhY2Nlc3NpYmxlIGV2ZW4gd2hlbiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGRpc2FibGVkLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludCB0byB1bmRlcnN0YW5kIGluIHRoaXMgc2NlbmFyaW8uCgpJIHRoaW5rIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgd2lsbCBiZSBpbiBgaW5jbHVkZS9saW51eC9pZl92bGFuLmhgLCBsZXQgbWUgZ28gYW5kIGNoZWNrIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl92bGFuLmg9MTIzPXN0cnVjdCB2bGFuX3BjcHVfc3RhdHMge1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjEzNjpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0xMzctXHRcdFx0XHRcdCAgICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpO1xuLS1cbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTI1Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjI1MzpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMjU0LVx0XHQgICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzgzNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQgZm9yIFZMQU4gRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgZmlndXJpbmcgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoZXJlJiMzOTtzIGEgc3RhdGljIGlubGluZSBmYWxsYmFjayBpZiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGRpc2FibGVkLCB3aGljaCBpcyBnb29kIGZvciBzb21lIHVzZSBjYXNlcywgYnV0IHRvIGFjdHVhbGx5ICp0ZXN0KiB0aGUgVkxBTiBmdW5jdGlvbmFsaXR5LCBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIFRoZSBjb2RlIHVzZXMgYGlzX3ZsYW5fZGV2YCwgYHZsYW5fZGV2X3ByaXZgLCBgdmxhbl9kZXZfdmxhbl9wcm90b2AsIGFuZCBgdmxhbl9kZXZfdmxhbl9pZGAgd2l0aGluIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYW5kIHRob3NlIGFyZSBhbGwgZ2F0ZWQgYnkgYW4gYCNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKWAgY29uZGl0aW9uLiBTbywgbm8gcXVlc3Rpb24sIGBWTEFOXzgwMjFRYCBnb2VzIG9uIHRoZSAmIzM0O1JlcXVpcmVkJiMzNDsgbGlzdC4KCk5vdywgaXQmIzM5O3MgcHJldHR5IG9idmlvdXMgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGEgcmVxdWlyZW1lbnQsIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGLiBBbmQgc2luY2UgdGhlIGNvZGUgaXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgdGhlbiBvYnZpb3VzbHkgYE5FVGAgaXMgbmVjZXNzYXJ5IGFzIHdlbGwuCgpUaGUgZnVuY3Rpb25zIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaGVyZSBhcHBlYXIgdG8gYmU6IGBicGZfeGRwX2ZpYl9sb29rdXBgLCBgYnBmX3NrYl9maWJfbG9va3VwYCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLgoKV2FpdCwgdGhvc2UgZmlyc3QgdHdvLCBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAsIGFyZSBCUEYgaGVscGVycy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciByZXF1aXJlZCBjb25maWdzLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBhbmQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgLCBzbyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGFib3V0IGFkZGluZyBgVkxBTl84MDIxUWAgdG8gYEVuYWJsZUNvbmZpZ3NgIG5vdy4KCkxldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiB0aGF0IGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBmdW5jdGlvbiBpcyBpbmxpbmVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byB0aGUgZmxvdyBvZiB0aGUgcHJvZ3JhbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZpYl9zZXRfZndkX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTYxOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDMtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYzo2MjA0OnN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNS1cdFx0XHRcdCAgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjI1ND1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NDAwLXNldF9md2RfcGFyYW1zOlxubmV0L2NvcmUvZmlsdGVyLmM6NjQwMTpcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcbm5ldC9jb3JlL2ZpbHRlci5jLTY0MDItfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTY0MDY9c3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjU1My1zZXRfZndkX3BhcmFtczpcbm5ldC9jb3JlL2ZpbHRlci5jOjY1NTQ6XHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XG5uZXQvY29yZS9maWx0ZXIuYy02NTU1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxMjMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgRklCIExvb2t1cCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byB0aGUgQlBGIEZJQiBsb29rdXAgZnVuY3Rpb25hbGl0eS4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gbm90aWNpbmcgaXMgdGhlIHByZXNlbmNlIG9mIHN0YXRpYyBmdW5jdGlvbnMuIFNpbmNlIHRoZXkmIzM5O3JlIHN0YXRpYywgdGhleSYjMzk7cmUgcHJvYmFibHkgaW5saW5lZCwgc28gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRob3NlLiBNeSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgYGJwZl94ZHBfZmliX2xvb2t1cGAsIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIEFuZCwgeWVzLCBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAgaXMgYWxzbyBzdGF0aWMuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBrZXJuZWwgY29uZmlncyBhcmUgaW52b2x2ZWQuIEl0IHNlZW1zIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIHJlbGV2YW50IGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGFkZCBgVkxBTl84MDIxUWAgdG8gYEVuYWJsZUNvbmZpZ3NgIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVkxBTiBpbnB1dCwgYW5kIGp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bGwgYWxzbyBhZGQgYElQVjZgLCBldmVuIHRob3VnaCBpdCYjMzk7cyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdC4gYEJQRl9TWVNDQUxMYCBhbHNvIGxvb2tzIGltcG9ydGFudCwgc28gdGhhdCBnb2VzIGluIGBFbmFibGVDb25maWdzYCB0b28uCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSBwYXRjaCBhZ2FpbiB0byBtYWtlIHN1cmUgSSYjMzk7bSBjYXB0dXJpbmcgZXZlcnl0aGluZy4gUmlnaHQsIGl0IGFkZHMgYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAgZmxhZ3MgdG8gYGJwZl9maWJfbG9va3VwYC4gSXQgbW9kaWZpZXMgdGhlIGxvb2t1cCBmdW5jdGlvbnM6IGBicGZfeGRwX2ZpYl9sb29rdXBgLCBgYnBmX3NrYl9maWJfbG9va3VwYCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLiBJdCBhbHNvIGFmZmVjdHMgYGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNgLCBhZGRzIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YCBhbmQgbW9kaWZpZXMgYGJwZl9maWJfbG9va3VwX2ZsYWdzX29rYC4KClNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgYSBjbG9zZXIgbG9vayBhcmU6Ci0gYGJwZl94ZHBfZmliX2xvb2t1cGAKLSBgYnBmX3NrYl9maWJfbG9va3VwYAotIGBicGZfaXB2NF9maWJfbG9va3VwYAotIGBicGZfaXB2Nl9maWJfbG9va3VwYAoKQWxyaWdodCwgSSB0aGluayB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIGl0LiBBcmUgdGhlcmUgYW55IG90aGVyIGhlbHBlciBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgaGVyZT8gTm8sIHRob3NlIGFyZSB0aGUgcHJpbWFyeSBvbmVzLgoKSSBzaG91bGQgdmVyaWZ5IGlmIGBicGZfZmliX2xvb2t1cF9mbGFnc19va2AgaXMgYWxzbyBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9maWJfbG9va3VwX2ZsYWdzX29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NTYyLVxubmV0L2NvcmUvZmlsdGVyLmM6NjU2MzpzdGF0aWMgYm9vbCBicGZfZmliX2xvb2t1cF9mbGFnc19vayh1MzIgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy02NTY0LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02NTc1PUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY1ODAtXG5uZXQvY29yZS9maWx0ZXIuYzo2NTgxOlx0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXG5uZXQvY29yZS9maWx0ZXIuYy02NTgyLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02NjA5PUJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjYxOC1cbm5ldC9jb3JlL2ZpbHRlci5jOjY2MTk6XHRpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTY2MjAtXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQyNAoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEZJQiBMb29rdXAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBpcyBhYm91dCB0aGUgQlBGIEZJQiBsb29rdXAgZnVuY3Rpb25hbGl0eSwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgc3RhdGljIGluIG5hdHVyZSDigJMgbm90aGluZyBkeW5hbWljIGhlcmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUga2V5IEJQRiBzeW1ib2xzIGludm9sdmVkOiBgYnBmX3hkcF9maWJfbG9va3VwYCwgYGJwZl9za2JfZmliX2xvb2t1cGAsIGBicGZfaXB2NF9maWJfbG9va3VwYCwgYW5kIGBicGZfaXB2Nl9maWJfbG9va3VwYC4gVGhlc2UgYXJlIG15IGVudHJ5IHBvaW50cy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgYWRkaW5nIFZMQU4gc3VwcG9ydCB0byBgYnBmX2ZpYl9sb29rdXBgLCBhbmQgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCBmbGFncy4gVGhpcyBtZWFucyB0aGUgY29yZSBCUEYgRklCIGxvb2t1cCBsb2dpYywgY3JpdGljYWwgZm9yIElQdjQgYW5kIElQdjYgdHJhZmZpYywgaXMgYmVpbmcgbW9kaWZpZWQuIFNpbmNlIHRoaXMgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zLCBJIG5lZWQgdG8gY2VudGVyIG15IGZ1enppbmcgZWZmb3J0cyBhcm91bmQgdGhlc2UgZW50cnkgcG9pbnRzLCBhbG9uZyB3aXRoIHRoZSBJUHY0L0lQdjYtc3BlY2lmaWMgbG9va3VwIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19WTEFOXzgwMjFRYCBpcyBlbmFibGVkIGZvciBhbnkgdGVzdGluZyBvZiB0aGUgVkxBTi1zcGVjaWZpYyBsb2dpYy4KCkkgdGhpbmsgdGhlIG5leHQgc3RlcCBpcyB0byBsYWJlbCB0aGVzZSBuZXcgZmxhZ3MgYW5kIHRoZSBwYXRjaCBpdHNlbGYgYXMgJiMzNDtzZXQtcmVzdWx0cyYjMzQ7LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl94ZHBfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfc2tiX2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX2lwdjRfZmliX2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfaXB2Nl9maWJfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgVkxBTnMgaW4gdGhlIEJQRiBGSUIgbG9va3VwIGhlbHBlciAoYGJwZl9maWJfbG9va3VwYCkuIEl0IGludHJvZHVjZXMgdHdvIG5ldyBmbGFnczogYEJQRl9GSUJfTE9PS1VQX1ZMQU5gIGFuZCBgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVGAuIFRoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgY29yZSBCUEYgRklCIGxvb2t1cCBsb2dpYyBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LCB3aGljaCBpcyByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiBGSUIgbG9va3VwIGVudHJ5IHBvaW50cyBhbmQgdGhlIElQdjQvSVB2NiBzcGVjaWZpYyBsb29rdXAgZnVuY3Rpb25zLiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIHJlcXVpcmVkIHRvIHRlc3QgdGhlIFZMQU4gc3BlY2lmaWMgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfeGRwX2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX3NrYl9maWJfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9pcHY0X2ZpYl9sb29rdXAmIzM0OywKICAgICYjMzQ7YnBmX2lwdjZfZmliX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFZMQU5zIGluIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXIgKGBicGZfZmliX2xvb2t1cGApLiBJdCBpbnRyb2R1Y2VzIHR3byBuZXcgZmxhZ3M6IGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgLiBUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIGNvcmUgQlBGIEZJQiBsb29rdXAgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgRklCIGxvb2t1cCBlbnRyeSBwb2ludHMgYW5kIHRoZSBJUHY0L0lQdjYgc3BlY2lmaWMgbG9va3VwIGZ1bmN0aW9ucy4gYENPTkZJR19WTEFOXzgwMjFRYCBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBWTEFOIHNwZWNpZmljIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6Mzk6NDEuMDM1MDQ2ODYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc1NzgwNDI1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2NF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2Nl9maWJfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyIChgYnBmX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGZsYWdzOiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYC4gVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBjb3JlIEJQRiBGSUIgbG9va3VwIGxvZ2ljIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIEZJQiBsb29rdXAgZW50cnkgcG9pbnRzIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIGxvb2t1cCBmdW5jdGlvbnMuIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgVkxBTiBzcGVjaWZpYyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6Mzk6NDEuMDM1MDUyODAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc1NDAzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMDIzMTE2NWM0ZWJmYWJlYzk5YmM1Nzk0NmEyZThjNjVmZGNlMmNiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDQgMDk6Mzk6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbkBAIC0zNTMyLDYgKzM1MzIsNDUgQEAgdW5pb24gYnBmX2F0dHIge1xcbiAgKlxcdFxcdFxcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVxcdTAwM2VtYXJrIGZvciB0aGUgZmliIGxvb2t1cC5cXG4gICpcXHRcXHRcXHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXFxuICAqXFx0XFx0XFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxcbisgKlxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXFxuKyAqXFx0XFx0XFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxcbisgKlxcdFxcdFxcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxcbisgKlxcdFxcdFxcdCpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJIGZyb21cXG4rICpcXHRcXHRcXHR0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotXFx1MDAzZWlmaW5kZXggd2l0aCB0aGVcXG4rICpcXHRcXHRcXHRwYXJlbnQncyBpZmluZGV4LiAqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcXG4rICpcXHRcXHRcXHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXFxuKyAqXFx0XFx0XFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXFx1MDAzZXNtYWMgaXNcXG4rICpcXHRcXHRcXHR0aGUgVkxBTiBkZXZpY2UncyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxcbisgKlxcdFxcdFxcdHBhcmVudCdzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxcbisgKlxcdFxcdFxcdGlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSxcXG4rICpcXHRcXHRcXHR0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXNcXG4rICpcXHRcXHRcXHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcXG4rICpcXHRcXHRcXHQqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleFxcbisgKlxcdFxcdFxcdGxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0XFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSdzIG93blxcbisgKlxcdFxcdFxcdGlmaW5kZXguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcXG4rICpcXHRcXHRcXHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxcbisgKlxcdFxcdFxcdHRoZSBoZWxwZXIncyBleGlzdGluZyBiZWhhdmlvdXIsIHNvIGEgZnJhZy1uZWVkZWQgcmVzdWx0XFxuKyAqXFx0XFx0XFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVxcdTAwM2VtdHVfcmVzdWx0LlxcbisgKlxcdFxcdFxcdFRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zXFxuKyAqXFx0XFx0XFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXFxuKyAqXFx0XFx0XFx0ZGV2aWNlIGRpcmVjdGx5LlxcbisgKlxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXFxuKyAqXFx0XFx0XFx0VHJlYXQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0lcXG4rICpcXHRcXHRcXHRhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzc1xcbisgKlxcdFxcdFxcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcXG4rICpcXHRcXHRcXHRvbiAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2ZcXG4rICpcXHRcXHRcXHQqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBtdXN0IGJlXFxuKyAqXFx0XFx0XFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxcbisgKlxcdFxcdFxcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOXFxuKyAqXFx0XFx0XFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxcbisgKlxcdFxcdFxcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJ3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXFxuKyAqXFx0XFx0XFx0dGFnLCBhIGRvd24gZGV2aWNlLCBvciBvbmUgaW4gYW5vdGhlciBuYW1lc3BhY2UgcmV0dXJuc1xcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cXG4rICpcXHRcXHRcXHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xcbisgKlxcdFxcdFxcdGZsYWcgZm9yIHByaW9yaXR5LXRhZ2dlZCBmcmFtZXMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxcbisgKlxcdFxcdFxcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cXG4gICpcXG4gICpcXHRcXHQqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvclxcbiAgKlxcdFxcdCoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLlxcbkBAIC03MzI3LDYgKzczNjYsOCBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZJQl9MT09LVVBfVEJJRCAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyAzKSxcXG4gXFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA0KSxcXG4gXFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA1KSxcXG4rXFx0QlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA2KSxcXG4rXFx0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcXHUwMDNjXFx1MDAzYyA3KSxcXG4gfTtcXG4gXFxuIGVudW0ge1xcbkBAIC03MzQwLDYgKzczODEsNyBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqL1xcbiBcXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cXG4rXFx0QlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsIC8qIFZMQU4gZWdyZXNzLCBwYXJlbnQgdW5yZXNvbHZhYmxlICovXFxuIH07XFxuIFxcbiBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xcbkBAIC03MzkzLDcgKzc0MzUsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcXG4gXFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHtcXG4tXFx0XFx0XFx0Lyogb3V0cHV0ICovXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxcbitcXHRcXHRcXHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxcbitcXHRcXHRcXHQgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGhcXG4rXFx0XFx0XFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXFxuK1xcdFxcdFxcdCAqIHRoZSBsb29rdXAgYnkuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRfX2JlMTZcXHRoX3ZsYW5fcHJvdG87XFxuIFxcdFxcdFxcdF9fYmUxNlxcdGhfdmxhbl9UQ0k7XFxuIFxcdFxcdH07XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcXG5pbmRleCAyZTk2YjRiODQ3Y2UxMi4uMGVhMzYyZmE0Mjg3ZTMgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC02MjAxLDIxICs2MjAxLDYwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcXG4gI2VuZGlmXFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4tc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLCB1MzIgbXR1KVxcbitzdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4rXFx0XFx0XFx0XFx0ICB1MzIgZmxhZ3MsIHUzMiBtdHUsIHUzMiBpbl9pZmluZGV4KVxcbiB7XFxuIFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSA9IDA7XFxuIFxcdHBhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvID0gMDtcXG4rXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKVxcbitcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXFx1MDAyNlxcdTAwMjYgaXNfdmxhbl9kZXYoZGV2KSkge1xcbitcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9wcml2KGRldiktXFx1MDAzZXJlYWxfZGV2O1xcbitcXG4rXFx0XFx0aWYgKCFpc192bGFuX2RldihyZWFsX2RldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG5ldF9lcShkZXZfbmV0KHJlYWxfZGV2KSwgZGV2X25ldChkZXYpKSkge1xcbitcXHRcXHRcXHRwYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90byA9IHZsYW5fZGV2X3ZsYW5fcHJvdG8oZGV2KTtcXG4rXFx0XFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModmxhbl9kZXZfdmxhbl9pZChkZXYpKTtcXG4rXFx0XFx0XFx0cGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gcmVhbF9kZXYtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhcmFtcy1cXHUwMDNlaWZpbmRleCA9IGluX2lmaW5kZXg7XFxuK1xcdFxcdFxcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuKyNlbmRpZlxcbitcXG4gXFx0aWYgKG10dSlcXG4gXFx0XFx0cGFyYW1zLVxcdTAwM2VtdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi9cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK1xcbitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zKVxcbit7XFxuK1xcdF9fYmUxNiBwcm90byA9IHBhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7XFxuK1xcdHUxNiB2aWQ7XFxuK1xcbitcXHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpIFxcdTAwMjZcXHUwMDI2IHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFBRCkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0dmlkID0gbnRvaHMocGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJKSBcXHUwMDI2IFZMQU5fVklEX01BU0s7XFxuK1xcdHZsYW5fZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgcHJvdG8sIHZpZCk7XFxuK1xcdGlmICghdmxhbl9kZXYgfHwgISh2bGFuX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApIHx8XFxuK1xcdCAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiB2bGFuX2RldjtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbiBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0XFx0XFx0ICAgICAgIHUzMiBmbGFncywgYm9vbCBjaGVja19tdHUpXFxuIHtcXG4rXFx0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDtcXG4gXFx0c3RydWN0IGZpYl9uaF9jb21tb24gKm5oYztcXG4gXFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xcbkBAIC02MjI5LDYgKzYyNjgsMTQgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdGlmICh1bmxpa2VseSghZGV2KSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSB7XFxuK1xcdFxcdGRldiA9IGJwZl9maWJfdmxhbl9pbnB1dF9kZXYoZGV2LCBwYXJhbXMpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGRldikpXFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKGRldik7XFxuK1xcdFxcdGlmICghZGV2KVxcbitcXHRcXHRcXHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQ7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIHZlcmlmeSBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb24gdGhpcyBpbnRlcmZhY2UgKi9cXG4gXFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbiBcXHRpZiAodW5saWtlbHkoIWluX2RldiB8fCAhSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkpXFxuQEAgLTYyMzgsNyArNjI4NSwxMSBAQCBzdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0XFx0Zmw0LmZsb3dpNF9paWYgPSAxO1xcbiBcXHRcXHRmbDQuZmxvd2k0X29pZiA9IHBhcmFtcy1cXHUwMDNlaWZpbmRleDtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0Zmw0LmZsb3dpNF9paWYgPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGRldi1cXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cXHUwMDNlaWZpbmRleDogVkxBTl9JTlBVVCBtYXkgaGF2ZVxcbitcXHRcXHQgKiByZXNvbHZlZCBkZXYgdG8gYSBzdWJpbnRlcmZhY2UgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRmbDQuZmxvd2k0X2lpZiA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4gXFx0XFx0Zmw0LmZsb3dpNF9vaWYgPSAwO1xcbiBcXHR9XFxuIFxcdGZsNC5mbG93aTRfZHNjcCA9IGluZXRfZHNmaWVsZF90b19kc2NwKHBhcmFtcy1cXHUwMDNldG9zKTtcXG5AQCAtNjM0Nyw3ICs2Mzk4LDcgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuIFxcdG1lbWNweShwYXJhbXMtXFx1MDAzZXNtYWMsIGRldi1cXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcXG4gXFxuIHNldF9md2RfcGFyYW1zOlxcbi1cXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhwYXJhbXMsIG10dSk7XFxuK1xcdHJldHVybiBicGZfZmliX3NldF9md2RfcGFyYW1zKGRldiwgcGFyYW1zLCBmbGFncywgbXR1LCBpbl9pZmluZGV4KTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTYzNTcsNiArNjQwOCw3IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiB7XFxuIFxcdHN0cnVjdCBpbjZfYWRkciAqc3JjID0gKHN0cnVjdCBpbjZfYWRkciAqKSBwYXJhbXMtXFx1MDAzZWlwdjZfc3JjO1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHIgKmRzdCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVxcdTAwM2VpcHY2X2RzdDtcXG4rXFx0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXFx1MDAzZWlmaW5kZXg7XFxuIFxcdHN0cnVjdCBmaWI2X3Jlc3VsdCByZXMgPSB7fTtcXG4gXFx0c3RydWN0IG5laWdoYm91ciAqbmVpZ2g7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuQEAgLTYzNzQsNiArNjQyNiwxNCBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0aWYgKHVubGlrZWx5KCFkZXYpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcXG4rXFx0XFx0ZGV2ID0gYnBmX2ZpYl92bGFuX2lucHV0X2RldihkZXYsIHBhcmFtcyk7XFxuK1xcdFxcdGlmIChJU19FUlIoZGV2KSlcXG4rXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZGV2KTtcXG4rXFx0XFx0aWYgKCFkZXYpXFxuK1xcdFxcdFxcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDtcXG4rXFx0fVxcbitcXG4gXFx0aWRldiA9IF9faW42X2Rldl9nZXRfc2FmZWx5KGRldik7XFxuIFxcdGlmICh1bmxpa2VseSghaWRldiB8fCAhUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5mb3J3YXJkaW5nKSkpXFxuIFxcdFxcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRDtcXG5AQCAtNjM4Miw3ICs2NDQyLDEyIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiBcXHRcXHRmbDYuZmxvd2k2X2lpZiA9IDE7XFxuIFxcdFxcdG9pZiA9IGZsNi5mbG93aTZfb2lmID0gcGFyYW1zLVxcdTAwM2VpZmluZGV4O1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRvaWYgPSBmbDYuZmxvd2k2X2lpZiA9IHBhcmFtcy1cXHUwMDNlaWZpbmRleDtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZGV2LVxcdTAwM2VpZmluZGV4LCBub3QgcGFyYW1zLVxcdTAwM2VpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlXFxuK1xcdFxcdCAqIHJlc29sdmVkIGRldiB0byBhIHN1YmludGVyZmFjZSBhYm92ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG9pZiA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFx0XFx0Zmw2LmZsb3dpNl9paWYgPSBvaWY7XFxuIFxcdFxcdGZsNi5mbG93aTZfb2lmID0gMDtcXG4gXFx0XFx0c3RyaWN0ID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjtcXG4gXFx0fVxcbkBAIC02NDg2LDEzICs2NTUxLDI2IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbiBcXHRtZW1jcHkocGFyYW1zLVxcdTAwM2VzbWFjLCBkZXYtXFx1MDAzZWRldl9hZGRyLCBFVEhfQUxFTik7XFxuIFxcbiBzZXRfZndkX3BhcmFtczpcXG4tXFx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xcbitcXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XFxuIH1cXG4gI2VuZGlmXFxuIFxcbiAjZGVmaW5lIEJQRl9GSUJfTE9PS1VQX01BU0sgKEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IFxcXFxcXG4gXFx0XFx0XFx0ICAgICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8IFxcXFxcXG4tXFx0XFx0XFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKVxcbitcXHRcXHRcXHQgICAgIEJQRl9GSUJfTE9PS1VQX1NSQyB8IEJQRl9GSUJfTE9PS1VQX01BUksgfCBcXFxcXFxuK1xcdFxcdFxcdCAgICAgQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpXFxuK1xcbitzdGF0aWMgYm9vbCBicGZfZmliX2xvb2t1cF9mbGFnc19vayh1MzIgZmxhZ3MpXFxuK3tcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICgoZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGZsYWdzIFxcdTAwMjYgKEJQRl9GSUJfTE9PS1VQX1RCSUQgfCBCUEZfRklCX0xPT0tVUF9PVVRQVVQpKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4gXFxuIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbiBcXHQgICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKiwgcGFyYW1zLCBpbnQsIHBsZW4sIHUzMiwgZmxhZ3MpXFxuQEAgLTY1MDAsNyArNjU3OCw3IEBAIEJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbiBcXHRpZiAocGxlbiBcXHUwMDNjIHNpemVvZigqcGFyYW1zKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcXG4rXFx0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0c3dpdGNoIChwYXJhbXMtXFx1MDAzZWZhbWlseSkge1xcbkBAIC02NTM4LDcgKzY2MTYsMTAgQEAgQlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4gXFx0aWYgKHBsZW4gXFx1MDAzYyBzaXplb2YoKnBhcmFtcykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXFxuK1xcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKHBhcmFtcy1cXHUwMDNldG90X2xlbilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbkBAIC0zNTMyLDYgKzM1MzIsNDUgQEAgdW5pb24gYnBmX2F0dHIge1xcbiAgKlxcdFxcdFxcdFVzZSB0aGUgbWFyayBwcmVzZW50IGluICpwYXJhbXMqLVxcdTAwM2VtYXJrIGZvciB0aGUgZmliIGxvb2t1cC5cXG4gICpcXHRcXHRcXHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXFxuICAqXFx0XFx0XFx0YXMgaXQgb25seSBoYXMgbWVhbmluZyBmb3IgZnVsbCBsb29rdXBzLlxcbisgKlxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqXFxuKyAqXFx0XFx0XFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxcbisgKlxcdFxcdFxcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxcbisgKlxcdFxcdFxcdCpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVxcdTAwM2VoX3ZsYW5fVENJIGZyb21cXG4rICpcXHRcXHRcXHR0aGUgVkxBTiBkZXZpY2UgYW5kIHJlcGxhY2UgKnBhcmFtcyotXFx1MDAzZWlmaW5kZXggd2l0aCB0aGVcXG4rICpcXHRcXHRcXHRwYXJlbnQncyBpZmluZGV4LiAqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSSBjYXJyaWVzIHRoZSBWSURcXG4rICpcXHRcXHRcXHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXFxuKyAqXFx0XFx0XFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXFx1MDAzZXNtYWMgaXNcXG4rICpcXHRcXHRcXHR0aGUgVkxBTiBkZXZpY2UncyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxcbisgKlxcdFxcdFxcdHBhcmVudCdzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxcbisgKlxcdFxcdFxcdGlzIGl0c2VsZiBhIFZMQU4gZGV2aWNlIChRaW5RKSBvciBpbiBhbm90aGVyIG5hbWVzcGFjZSxcXG4rICpcXHRcXHRcXHR0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXNcXG4rICpcXHRcXHRcXHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcXG4rICpcXHRcXHRcXHQqKkJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFKiogd2l0aCAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleFxcbisgKlxcdFxcdFxcdGxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0XFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKiogdG8gb2J0YWluIHRoZSBWTEFOIGRldmljZSdzIG93blxcbisgKlxcdFxcdFxcdGlmaW5kZXguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcXG4rICpcXHRcXHRcXHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxcbisgKlxcdFxcdFxcdHRoZSBoZWxwZXIncyBleGlzdGluZyBiZWhhdmlvdXIsIHNvIGEgZnJhZy1uZWVkZWQgcmVzdWx0XFxuKyAqXFx0XFx0XFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVxcdTAwM2VtdHVfcmVzdWx0LlxcbisgKlxcdFxcdFxcdFRoaXMgZmxhZyBpcyBvbmx5IHZhbGlkIGZvciBYRFAgcHJvZ3JhbXM7IHRjIHByb2dyYW1zXFxuKyAqXFx0XFx0XFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXFxuKyAqXFx0XFx0XFx0ZGV2aWNlIGRpcmVjdGx5LlxcbisgKlxcdFxcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXFxuKyAqXFx0XFx0XFx0VHJlYXQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9UQ0lcXG4rICpcXHRcXHRcXHRhcyBhbiBpbnB1dCBWTEFOIHRhZyBhbmQgcnVuIHRoZSBsb29rdXAgYXMgaWYgaW5ncmVzc1xcbisgKlxcdFxcdFxcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcXG4rICpcXHRcXHRcXHRvbiAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleC4gVGhlIFZJRCBpcyB0aGUgbG93IDEyIGJpdHMgb2ZcXG4rICpcXHRcXHRcXHQqcGFyYW1zKi1cXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXFx1MDAzZWhfdmxhbl9wcm90byBtdXN0IGJlXFxuKyAqXFx0XFx0XFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxcbisgKlxcdFxcdFxcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cXHUwMDNlaWZpbmRleCBpcyBpdHNlbGYgYSBWTEFOXFxuKyAqXFx0XFx0XFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxcbisgKlxcdFxcdFxcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJ3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXFxuKyAqXFx0XFx0XFx0dGFnLCBhIGRvd24gZGV2aWNlLCBvciBvbmUgaW4gYW5vdGhlciBuYW1lc3BhY2UgcmV0dXJuc1xcbisgKlxcdFxcdFxcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cXG4rICpcXHRcXHRcXHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xcbisgKlxcdFxcdFxcdGZsYWcgZm9yIHByaW9yaXR5LXRhZ2dlZCBmcmFtZXMuIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoXFxuKyAqXFx0XFx0XFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxcbisgKlxcdFxcdFxcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cXG4gICpcXG4gICpcXHRcXHQqY3R4KiBpcyBlaXRoZXIgKipzdHJ1Y3QgeGRwX21kKiogZm9yIFhEUCBwcm9ncmFtcyBvclxcbiAgKlxcdFxcdCoqc3RydWN0IHNrX2J1ZmYqKiB0YyBjbHNfYWN0IHByb2dyYW1zLlxcbkBAIC03MzI3LDYgKzczNjYsOCBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZJQl9MT09LVVBfVEJJRCAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyAzKSxcXG4gXFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA0KSxcXG4gXFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA1KSxcXG4rXFx0QlBGX0ZJQl9MT09LVVBfVkxBTiAgICA9ICgxVSBcXHUwMDNjXFx1MDAzYyA2KSxcXG4rXFx0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcXHUwMDNjXFx1MDAzYyA3KSxcXG4gfTtcXG4gXFxuIGVudW0ge1xcbkBAIC03MzQwLDYgKzczODEsNyBAQCBlbnVtIHtcXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCwgICAgIC8qIG5vIG5laWdoYm9yIGVudHJ5IGZvciBuaCAqL1xcbiBcXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cXG4gXFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cXG4rXFx0QlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsIC8qIFZMQU4gZWdyZXNzLCBwYXJlbnQgdW5yZXNvbHZhYmxlICovXFxuIH07XFxuIFxcbiBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAge1xcbkBAIC03MzkzLDcgKzc0MzUsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcXG4gXFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHtcXG4tXFx0XFx0XFx0Lyogb3V0cHV0ICovXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxcbitcXHRcXHRcXHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxcbitcXHRcXHRcXHQgKiBvbiBvdGhlciBzdWNjZXNzZnVsIGxvb2t1cHMuIGlucHV0IHdpdGhcXG4rXFx0XFx0XFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXFxuK1xcdFxcdFxcdCAqIHRoZSBsb29rdXAgYnkuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRfX2JlMTZcXHRoX3ZsYW5fcHJvdG87XFxuIFxcdFxcdFxcdF9fYmUxNlxcdGhfdmxhbl9UQ0k7XFxuIFxcdFxcdH07XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xcbmluZGV4IGJkNzY1ODk1ODAwNDFmLi4xOGI2ZmRlY2EzODJhOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcXG5AQCAtMiw2ICsyLDcgQEBcXG4gLyogQ29weXJpZ2h0IChjKSAyMDIzIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfZXRoZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lmLmhcXHUwMDNlXFxuIFxcbkBAIC0yMyw2ICsyNCw3IEBAXFxuICNkZWZpbmUgSVBWNF9UQklEX0FERFJcXHRcXHRcXFwiMTcyLjAuMC4yNTRcXFwiXFxuICNkZWZpbmUgSVBWNF9UQklEX05FVFxcdFxcdFxcXCIxNzIuMC4wLjBcXFwiXFxuICNkZWZpbmUgSVBWNF9UQklEX0RTVFxcdFxcdFxcXCIxNzIuMC4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9UQklEX05PTkVJR0hfRFNUXFx0XFxcIjE3Mi4wLjAuNVxcXCJcXG4gI2RlZmluZSBJUFY2X1RCSURfQUREUlxcdFxcdFxcXCJmZDAwOjpGRkZGXFxcIlxcbiAjZGVmaW5lIElQVjZfVEJJRF9ORVRcXHRcXHRcXFwiZmQwMDo6XFxcIlxcbiAjZGVmaW5lIElQVjZfVEJJRF9EU1RcXHRcXHRcXFwiZmQwMDo6MlxcXCJcXG5AQCAtMzcsNiArMzksNDEgQEBcXG4gI2RlZmluZSBJUFY2X0xPQ0FMXFx0XFx0XFxcImZkMDE6OjNcXFwiXFxuICNkZWZpbmUgSVBWNl9HVzFcXHRcXHRcXFwiZmQwMTo6MVxcXCJcXG4gI2RlZmluZSBJUFY2X0dXMlxcdFxcdFxcXCJmZDAxOjoyXFxcIlxcbisjZGVmaW5lIFZMQU5fSURcXHRcXHRcXHQxMDBcXG4rI2RlZmluZSBWTEFOX0lGQUNFXFx0XFx0XFxcInZldGgxLjEwMFxcXCJcXG4rI2RlZmluZSBWTEFOX0lEX0RPV05cXHRcXHQxMDJcXG4rI2RlZmluZSBWTEFOX0lGQUNFX0RPV05cXHRcXHRcXFwidmV0aDEuMTAyXFxcIlxcbisjZGVmaW5lIFFJTlFfT1VURVJfSUZBQ0VcXHRcXFwidmV0aDEuMjAwXFxcIlxcbisjZGVmaW5lIFFJTlFfSU5ORVJfSUZBQ0VcXHRcXFwidmV0aDEuMjAwLjMwMFxcXCJcXG4rI2RlZmluZSBWTEFOX1RBQkxFXFx0XFx0XFxcIjMwMFxcXCJcXG4rI2RlZmluZSBJUFY0X1ZMQU5fSUZBQ0VfQUREUlxcdFxcXCIxMC41LjAuMjU0XFxcIlxcbisjZGVmaW5lIElQVjRfVkxBTl9FR1JFU1NfRFNUXFx0XFxcIjEwLjUuMC4yXFxcIlxcbisjZGVmaW5lIElQVjRfUUlOUV9EU1RcXHRcXHRcXFwiMTAuNy4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9WTEFOX0RTVFxcdFxcdFxcXCIxMC42LjAuMlxcXCJcXG4rI2RlZmluZSBJUFY0X1ZMQU5fR1dcXHRcXHRcXFwiMTAuNS4wLjFcXFwiXFxuKyNkZWZpbmUgSVBWNl9WTEFOX0lGQUNFX0FERFJcXHRcXFwiZmQwMjo6MjU0XFxcIlxcbisjZGVmaW5lIElQVjZfVkxBTl9FR1JFU1NfRFNUXFx0XFxcImZkMDI6OjJcXFwiXFxuKyNkZWZpbmUgSVBWNl9WTEFOX0RTVFxcdFxcdFxcXCJmZDAzOjoyXFxcIlxcbisjZGVmaW5lIElQVjZfVkxBTl9HV1xcdFxcdFxcXCJmZDAyOjoxXFxcIlxcbisjZGVmaW5lIFZMQU5fVklEX1VOVVNFRFxcdFxcdDk5OVxcbisjZGVmaW5lIFZSRl9JRkFDRVxcdFxcdFxcXCJ2cmYtYmx1ZVxcXCJcXG4rI2RlZmluZSBWUkZfVEFCTEVcXHRcXHRcXFwiMTAwMFxcXCJcXG4rI2RlZmluZSBWUkZfVkxBTl9JRFxcdFxcdDEwMVxcbisjZGVmaW5lIFZSRl9WTEFOX0lGQUNFXFx0XFx0XFxcInZldGgxLjEwMVxcXCJcXG4rI2RlZmluZSBJUFY0X1ZSRl9JRkFDRV9BRERSXFx0XFxcIjEwLjguMC4yNTRcXFwiXFxuKyNkZWZpbmUgSVBWNF9WUkZfR1dcXHRcXHRcXFwiMTAuOC4wLjFcXFwiXFxuKyNkZWZpbmUgSVBWNF9WUkZfRFNUXFx0XFx0XFxcIjEwLjkuMC4yXFxcIlxcbisjZGVmaW5lIFRCSURfVkxBTl9JRFxcdFxcdDUwXFxuKyNkZWZpbmUgVEJJRF9WTEFOX0lGQUNFXFx0XFx0XFxcInZldGgyLjUwXFxcIlxcbisjZGVmaW5lIElQVjRfVEJJRF9WTEFOX0RTVFxcdFxcXCIxNzIuMi4wLjJcXFwiXFxuKyNkZWZpbmUgSVBWNF9CT05EX1ZMQU5fRFNUXFx0XFxcIjEwLjExLjAuMlxcXCJcXG4rI2RlZmluZSBJUFY0X1ZMQU5fTVRVX0RTVFxcdFxcXCIxMC41LjkuMlxcXCJcXG4rI2RlZmluZSBRSU5RX0FEX1ZMQU5fSURcXHRcXHQyMDBcXG4rI2RlZmluZSBRSU5RX0lOTkVSX1ZMQU5fSURcXHQzMDBcXG4rI2RlZmluZSBCT05EX0lGQUNFXFx0XFx0XFxcImJvbmQ5OVxcXCJcXG4rI2RlZmluZSBCT05EX1BPUlRcXHRcXHRcXFwidmV0aDNcXFwiXFxuKyNkZWZpbmUgQk9ORF9QT1JUX1BFRVJcXHRcXHRcXFwidmV0aDRcXFwiXFxuKyNkZWZpbmUgQk9ORF9WTEFOX0lEXFx0XFx0NTAwXFxuICNkZWZpbmUgRE1BQ1xcdFxcdFxcdFxcXCIxMToxMToxMToxMToxMToxMVxcXCJcXG4gI2RlZmluZSBETUFDX0lOSVQgeyAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCB9XFxuICNkZWZpbmUgRE1BQzJcXHRcXHRcXHRcXFwiMDE6MDE6MDE6MDE6MDE6MDFcXFwiXFxuQEAgLTUyLDYgKzg5LDE3IEBAIHN0cnVjdCBmaWJfbG9va3VwX3Rlc3Qge1xcbiBcXHRfX3UzMiB0YmlkO1xcbiBcXHRfX3U4IGRtYWNbNl07XFxuIFxcdF9fdTMyIG1hcms7XFxuK1xcdC8qXFxuK1xcdCAqIGlucHV0IHRhZyB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ7IGV4cGVjdGVkIG91dHB1dCB0YWdcXG4rXFx0ICogd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOIChjaGVja2VkIHdoZW4gY2hlY2tfdmxhbiBpcyBzZXQpXFxuK1xcdCAqL1xcbitcXHRfX3UxNiB2bGFuX3Byb3RvO1xcbitcXHRfX3UxNiB2bGFuX2lkO1xcbitcXHRib29sIGNoZWNrX3ZsYW47XFxuK1xcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX2RldjsgLyogZXhwZWN0ZWQgcGFyYW1zLVxcdTAwM2VpZmluZGV4IGFmdGVyIGxvb2t1cCAqL1xcbitcXHRjb25zdCBjaGFyICppaWY7XFx0ICAvKiBvdmVycmlkZSB0aGUgZGVmYXVsdCB2ZXRoMSBpbnB1dCBkZXZpY2UgKi9cXG4rXFx0X191MTYgdG90X2xlbjtcXHRcXHQgIC8qIHRyaWdnZXJzIHRoZSBpbi1sb29rdXAgbXR1IGNoZWNrIHdoZW4gc2V0ICovXFxuK1xcdF9fdTE2IGV4cGVjdGVkX210dTtcXHQgIC8qIGV4cGVjdGVkIG10dV9yZXN1bHQgKHVuaW9uIHdpdGggdG90X2xlbikgKi9cXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XFxuQEAgLTc5LDYgKzEyNywxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9sb29rdXBfdGVzdCB0ZXN0c1tdID0ge1xcbiBcXHQgIC5kYWRkciA9IElQVjRfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuIFxcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsIC50YmlkID0gMTAwLFxcbiBcXHQgIC5kbWFjID0gRE1BQ19JTklUMiwgfSxcXG4rXFx0LypcXG4rXFx0ICogQW4gZXJyb3IgdGhhdCByZXR1cm5zIGFmdGVyIHRoZSBlZ3Jlc3MgZGV2aWNlIGlzIHJlc29sdmVkIG11c3RcXG4rXFx0ICogcmVwb3J0IHRoZSBlZ3Jlc3MgaWZpbmRleCwgbm90IHRoZSBpbnB1dC4gVGhpcyByb3V0ZXMgZnJvbSBpbnB1dFxcbitcXHQgKiB2ZXRoMSB2aWEgdmV0aDIgKHRhYmxlIDEwMCkgdG8gYSBkc3Qgd2l0aCBubyBuZWlnaGJvdXIsIHNvXFxuK1xcdCAqIGlucHV0ICE9IGVncmVzcywgcGlubmluZyBOT19ORUlHSCB0byB0aGUgZWdyZXNzIGRldmljZS5cXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBOT19ORUlHSCByZXBvcnRzIHRoZSBlZ3Jlc3MgaWZpbmRleCwgbm90IHRoZSBpbnB1dFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9UQklEX05PTkVJR0hfRFNULFxcbitcXHQgIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgyXFxcIiwgfSxcXG4gXFx0eyAuZGVzYyA9IFxcXCJJUHY2IFRCSUQgbG9va3VwIGZhaWx1cmVcXFwiLFxcbiBcXHQgIC5kYWRkciA9IElQVjZfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcXG4gXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfRElSRUNUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCxcXG5AQCAtMTQyLDYgKzIwMSwyMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHtcXG4gXFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNl9HVzEsXFxuIFxcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuIFxcdCAgLm1hcmsgPSBNQVJLLCB9LFxcbitcXHQvKiB2bGFuIGVncmVzcyByZXNvbHV0aW9uICovXFxuK1xcdC8qXFxuK1xcdCAqIEludmFyaWFudCB0aGUgVkxBTi1lZ3Jlc3MgYXJtcyBqb2ludGx5IGVuZm9yY2U6IGFcXG4rXFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTiBTVUNDRVNTIGFsd2F5cyBjYXJyaWVzIGEgcGh5c2ljYWwsXFxuK1xcdCAqIHhtaXQtY2FwYWJsZSBpZmluZGV4OyBubyBTVUNDRVNTIGV2ZXIgcmV0dXJucyBhIFZMQU4tZGV2aWNlXFxuK1xcdCAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZVxcbitcXHQgKiBRaW5RIGFuZCBmb3JlaWduLW5ldG5zIGFybXMgcGluIFZMQU5fRkFJTFVSRSB3aXRoIHBhcmFtcy1cXHUwMDNlaWZpbmRleFxcbitcXHQgKiBsZWZ0IGF0IHRoZSBpbnB1dCwgc28gYSByZWdyZXNzaW9uIHRvIGJlc3QtZWZmb3J0IChTVUNDRVNTICsgdGhlXFxuK1xcdCAqIFZMQU4gaWZpbmRleCkgZmFpbHMgb25lLlxcbitcXHQgKi9cXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBubyBmbGFnXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdC8qXFxuK1xcdCAqIHNrYiBwYXRoIHdpdGhvdXQgdG90X2xlbjogbXR1X3Jlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UncyBtdHVcXG4rXFx0ICogKDE0MDApLCBub3QgdGhlIHBhcmVudCdzICgxNTAwKVxcbitcXHQgKi9cXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBza2ItcGF0aCBtdHUgaXMgdGhlIFZMQU4gZGV2aWNlJ3Mgd2l0aG91dCB0aGUgZmxhZ1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsIC5jaGVja192bGFuID0gdHJ1ZSwgLmV4cGVjdGVkX210dSA9IDE0MDAsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcywgZmxhZyBzZXQgYnV0IGVncmVzcyBpcyBub3QgYSBWTEFOXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X05VRF9GQUlMRURfQUREUiwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBRaW5RIG5vdCByZWR1Y2libGUgKFZMQU5fRkFJTFVSRSlcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsXFxuK1xcdCAgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgUWluUSBlZ3Jlc3Mgd2l0aG91dCB0aGUgZmxhZyAoZXNjYXBlIGhhdGNoKVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9RSU5RX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gUUlOUV9JTk5FUl9JRkFDRSwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY2IFZMQU4gZWdyZXNzLCBzaW5nbGUgVkxBTlxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIG5laWdoYm91ciBvbiB0aGUgVkxBTiBkZXZpY2VcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOLFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzIGluIE9VVFBVVCBtb2RlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAuaWlmID0gVkxBTl9JRkFDRSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfT1VUUFVUIHwgQlBGX0ZJQl9MT09LVVBfVkxBTiB8XFxuK1xcdFxcdFxcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzIG92ZXIgYSBib25kXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X0JPTkRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBCT05EX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZVxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9UQklEX1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklEIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudGJpZCA9IDEwMCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgyXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVEJJRF9WTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX01UVV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLnRvdF9sZW4gPSA1MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gZWdyZXNzLCBGUkFHX05FRURFRCByZXBvcnRzIG10dSwgc3dhcCB1bndyaXR0ZW5cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCxcXG4rXFx0ICAudG90X2xlbiA9IDE0MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxcbitcXHQvKiB2bGFuIHRhZyBhcyBsb29rdXAgaW5wdXQgKi9cXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIG5vIGZsYWdcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgc3ViaW50ZXJmYWNlIHJvdXRlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQgYW5kIGVncmVzcyBjb21iaW5lZFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcXG4rXFx0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WTEFOX0dXLCAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIixcXG4rXFx0ICAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9WTEFOIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIG5laWdoYm91ciByZXNvbHZlZCBvbiB0aGUgcm91dGVcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBzdWJpbnRlcmZhY2VcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX3NyYyA9IElQVjRfVkxBTl9JRkFDRV9BRERSLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU1JDIHxcXG4rXFx0XFx0XFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcXG4rXFx0LypcXG4rXFx0ICogVlJGOiB0aGUgcmVzb2x2ZWQgc3ViaW50ZXJmYWNlIGlzIGVuc2xhdmVkLCBzbyB0aGUgbDNtZGV2IHJ1bGVcXG4rXFx0ICogKGZ1bGwgbG9va3VwKSBhbmQgbDNtZGV2X2ZpYl90YWJsZV9yY3UoKSAoRElSRUNUKSBtdXN0IHNlbGVjdFxcbitcXHQgKiB0aGUgVlJGIHRhYmxlIGZyb20gdGhlIHJlc29sdmVkIGluZ3Jlc3NcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBWUkYgc3ViaW50ZXJmYWNlLCBubyBmbGFnXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfR1cxLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdGFnIHNlbGVjdHMgVlJGIHRhYmxlXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVlJGX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVlJGX1ZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBESVJFQ1QgdXNlcyBWUkYgdGFibGUgZnJvbSByZXNvbHZlZCBpbmdyZXNzXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXFxuK1xcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVlJGX0dXLCAuZXhwZWN0ZWRfZGV2ID0gVlJGX1ZMQU5fSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfFxcbitcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSxcXG4rXFx0LypcXG4rXFx0ICogZmFpbHVyZSBhcm1zIGFsc28gYXNzZXJ0IHBhcmFtcyBpcyBsZWZ0IHVudG91Y2hlZDogaWZpbmRleCBzdGlsbFxcbitcXHQgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmVcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IDB4MTIzNCwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd25cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcXG4rXFx0ICAuZXhwZWN0ZWRfZGV2ID0gXFxcInZldGgxXFxcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSURfRE9XTiwgfSxcXG4rXFx0LypcXG4rXFx0ICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzXFxuK1xcdCAqIHdpdGggZm9yd2FyZGluZyBvZmYgRldEX0RJU0FCTEVEIChub3QgTk9UX0ZXREVEKSBwcm92ZXMgdGhlIHRhZ1xcbitcXHQgKiByZXNvbHZlZCB0byB0aGF0IGRldmljZSBhbmQgdGhlIGxvb2t1cCB1c2VkIGl0IGFzIGluZ3Jlc3NcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCA4MDIuMWFkIHRhZ1xcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFBRCwgLnZsYW5faWQgPSBRSU5RX0FEX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBQQ1AgYW5kIERFSSBiaXRzIGlnbm9yZWQgaW4gVENJXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxcbitcXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gMHhlMDAwIHwgVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY0IFZMQU4gaW5wdXQsIGlubmVyIFFpblEgZGV2aWNlIGZyb20gVkxBTiBpZmluZGV4XFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQsXFxuK1xcdCAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gUUlOUV9JTk5FUl9WTEFOX0lELCB9LFxcbitcXHQvKlxcbitcXHQgKiBib25kaW5nOiB0aGUgVkxBTnMgbGl2ZSBvbiB0aGUgbWFzdGVyLCBhcyBvbiByZWNlaXZlLCB3aGVyZSB0aGVcXG4rXFx0ICogZnJhbWUgaXMgc3RlZXJlZCB0byB0aGUgbWFzdGVyIGJlZm9yZSBWTEFOIHByb2Nlc3Npbmc7IGEgcG9ydFxcbitcXHQgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cylcXG4rXFx0ICovXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBtYXN0ZXIgcmVzb2x2ZXNcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcXG4rXFx0ICAuaWlmID0gQk9ORF9JRkFDRSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBCT05EX1ZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBwb3J0IGRvZXMgbm90IG1hdGNoXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuK1xcdCAgLmlpZiA9IEJPTkRfUE9SVCwgLmV4cGVjdGVkX2RldiA9IEJPTkRfUE9SVCwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcXG4rXFx0eyAuZGVzYyA9IFxcXCJJUHY2IFZMQU4gaW5wdXQsIGludmFsaWQgcHJvdG9cXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0LCBWSUQgMCBwcmlvcml0eSB0YWcgZmFpbHMgY2xvc2VkXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXFxuK1xcdCAgLmV4cGVjdGVkX2RldiA9IFxcXCJ2ZXRoMVxcXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXFxuK1xcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjYgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFxcXCIsXFxuK1xcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHQgIC5leHBlY3RlZF9kZXYgPSBcXFwidmV0aDFcXFwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXFxuK1xcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxcbitcXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxcbitcXHR7IC5kZXNjID0gXFxcInVua25vd24gZmxhZyBiaXQgcmVqZWN0ZWRcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSAoMSBcXHUwMDNjXFx1MDAzYyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxcbitcXHR7IC5kZXNjID0gXFxcIklQdjQgVkxBTiBpbnB1dCByZWplY3RlZCB3aXRoIFRCSURcXFwiLFxcbitcXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxcbitcXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuK1xcdHsgLmRlc2MgPSBcXFwiSVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggT1VUUFVUXFxcIixcXG4rXFx0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcXG4rXFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCxcXG4rXFx0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXFxuQEAgLTIwNCw2ICs0NzUsMTA1IEBAIHN0YXRpYyBpbnQgc2V0dXBfbmV0bnModm9pZClcXG4gXFx0U1lTKGZhaWwsIFxcXCJpcCBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlc1xcXCIsIE1BUkssIE1BUktfVEFCTEUpO1xcbiBcXHRTWVMoZmFpbCwgXFxcImlwIC02IHJ1bGUgYWRkIHByaW8gMiBmd21hcmsgJWQgbG9va3VwICVzXFxcIiwgTUFSSywgTUFSS19UQUJMRSk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZFxcbitcXHQgKiB0YWctYXMtaW5wdXQsIGEgUWluUSBzdGFjaywgYW5kIGFuIGlpZiBydWxlIHNvIHRoZSBpbnB1dCB0ZXN0c1xcbitcXHQgKiBvYnNlcnZlIHdoaWNoIGRldmljZSB0aGUgbG9va3VwIHVzZWQgYXMgaW5ncmVzcy5cXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFxcXCIsXFxuK1xcdCAgICBWTEFOX0lGQUNFLCBWTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBWTEFOX0lGQUNFKTtcXG4rXFx0LypcXG4rXFx0ICogbG93ZXIgdGhhbiB0aGUgdmV0aDEgcGFyZW50ICgxNTAwKTogdGhlIHNrYi1wYXRoIG10dSBjaGVjayB1c2VzIHRoZVxcbitcXHQgKiBGSUIgcmVzdWx0IChWTEFOKSBkZXZpY2UsIHNvIG10dV9yZXN1bHQgaXMgdGhpcyB2YWx1ZSB3aXRoIG9yXFxuK1xcdCAqIHdpdGhvdXQgdGhlIGVncmVzcyBzd2FwLCB3aGljaCB0d28gYXJtcyBiZWxvdyBwaW5cXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIG10dSAxNDAwXFxcIiwgVkxBTl9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXFxcIiwgSVBWNF9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGFkZHIgYWRkICVzLzY0IGRldiAlcyBub2RhZFxcXCIsIElQVjZfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHN0YXlzIGRvd246IHRoZSBpbnB1dCBmbGFnIG11c3QgdHJlYXQgaXRzIHRhZyB0aGUgd2F5IHJlYWxcXG4rXFx0ICogaW5ncmVzcyB0cmVhdHMgYSBmcmFtZSBhcnJpdmluZyBvbiBhIGRvd24gVkxBTiBkZXZpY2UgKGRyb3ApXFxuK1xcdCAqL1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcXFwiLFxcbitcXHQgICAgVkxBTl9JRkFDRV9ET1dOLCBWTEFOX0lEX0RPV04pO1xcbitcXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9cXFwiIFZMQU5fSUZBQ0UgXFxcIi9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXFxcIiBWTEFOX0lGQUNFIFxcXCIuZm9yd2FyZGluZylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0ZXJyID0gd3JpdGVfc3lzY3RsKFxcXCIvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9cXFwiIFZMQU5fSUZBQ0UgXFxcIi9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY2LmNvbmYuXFxcIiBWTEFOX0lGQUNFIFxcXCIuZm9yd2FyZGluZylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIHByb3RvIDgwMi4xYWQgaWQgMjAwXFxcIixcXG4rXFx0ICAgIFFJTlFfT1VURVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgJXMgbmFtZSAlcyB0eXBlIHZsYW4gaWQgMzAwXFxcIixcXG4rXFx0ICAgIFFJTlFfT1VURVJfSUZBQ0UsIFFJTlFfSU5ORVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIFFJTlFfT1VURVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0IGRldiAlcyB1cFxcXCIsIFFJTlFfSU5ORVJfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXNcXFwiLCBJUFY0X1FJTlFfRFNULCBRSU5RX0lOTkVSX0lGQUNFKTtcXG4rXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkICVzLzMyIHZpYSAlc1xcXCIsIElQVjRfVkxBTl9EU1QsIElQVjRfR1cxKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMzIgdmlhICVzXFxcIixcXG4rXFx0ICAgIFZMQU5fVEFCTEUsIElQVjRfVkxBTl9EU1QsIElQVjRfVkxBTl9HVyk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcnVsZSBhZGQgcHJpbyAzIGlpZiAlcyBsb29rdXAgJXNcXFwiLCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCAtNiByb3V0ZSBhZGQgJXMvMTI4IHZpYSAlc1xcXCIsIElQVjZfVkxBTl9EU1QsIElQVjZfR1cxKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCAtNiByb3V0ZSBhZGQgdGFibGUgJXMgJXMvMTI4IHZpYSAlc1xcXCIsXFxuK1xcdCAgICBWTEFOX1RBQkxFLCBJUFY2X1ZMQU5fRFNULCBJUFY2X1ZMQU5fR1cpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIC02IHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXFxcIiwgVkxBTl9JRkFDRSwgVkxBTl9UQUJMRSk7XFxuK1xcbitcXHQvKiBhIGJvbmQgd2l0aCBvbmUgcG9ydCBhbmQgYSBWTEFOIG9uIHRoZSBib25kICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgJXMgdHlwZSBib25kXFxcIiwgQk9ORF9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgJXMgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlc1xcXCIsIEJPTkRfUE9SVCwgQk9ORF9QT1JUX1BFRVIpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgc2V0ICVzIG1hc3RlciAlc1xcXCIsIEJPTkRfUE9SVCwgQk9ORF9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgQk9ORF9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgQk9ORF9QT1JUKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMuJWQgdHlwZSB2bGFuIGlkICVkXFxcIixcXG4rXFx0ICAgIEJPTkRfSUZBQ0UsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCwgQk9ORF9WTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMuJWQgdXBcXFwiLCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIHJvdXRlIGFkZCAlcy8zMiBkZXYgJXMuJWRcXFwiLFxcbitcXHQgICAgSVBWNF9CT05EX1ZMQU5fRFNULCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogYSBWUkYgd2l0aCBpdHMgb3duIGRlZGljYXRlZCBzdWJpbnRlcmZhY2UgKHRoZSBpaWYgcnVsZXMgYWJvdmVcXG4rXFx0ICogbXVzdCBub3Qgc2VlIGl0KSwgZm9yIHRoZSB0YWJsZS1zZWxlY3Rpb24tYnktaW5ncmVzcyBjYXNlc1xcbitcXHQgKi9cXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCAlcyB0eXBlIHZyZiB0YWJsZSAlc1xcXCIsIFZSRl9JRkFDRSwgVlJGX1RBQkxFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBWUkZfSUZBQ0UpO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDEgbmFtZSAlcyB0eXBlIHZsYW4gaWQgJWRcXFwiLFxcbitcXHQgICAgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9WTEFOX0lEKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcXFwiLCBWUkZfVkxBTl9JRkFDRSwgVlJGX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcXFwiLCBWUkZfVkxBTl9JRkFDRSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXFxcIiwgSVBWNF9WUkZfSUZBQ0VfQUREUiwgVlJGX1ZMQU5fSUZBQ0UpO1xcbitcXHRlcnIgPSB3cml0ZV9zeXNjdGwoXFxcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1xcXCIgVlJGX1ZMQU5fSUZBQ0UgXFxcIi9mb3J3YXJkaW5nXFxcIiwgXFxcIjFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXFxcIiBWUkZfVkxBTl9JRkFDRSBcXFwiLmZvcndhcmRpbmcpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgJXMvMzIgdmlhICVzXFxcIiwgSVBWNF9WUkZfRFNULCBJUFY0X0dXMSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1xcXCIsXFxuK1xcdCAgICBWUkZfVEFCTEUsIElQVjRfVlJGX0RTVCwgSVBWNF9WUkZfR1cpO1xcbitcXG4rXFx0LyogbmVpZ2hib3VycyBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgZm9yIHRoZSBub24tU0tJUF9ORUlHSCBjYXNlcyAqL1xcbitcXHRlcnIgPSB3cml0ZV9zeXNjdGwoXFxcIi9wcm9jL3N5cy9uZXQvaXB2NC9uZWlnaC9cXFwiIFZMQU5fSUZBQ0UgXFxcIi9nY19zdGFsZV90aW1lXFxcIiwgXFxcIjkwMFxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ3cml0ZV9zeXNjdGwobmV0LmlwdjQubmVpZ2guXFxcIiBWTEFOX0lGQUNFIFxcXCIuZ2Nfc3RhbGVfdGltZSlcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5laWdoIGFkZCAlcyBkZXYgJXMgbGxhZGRyICVzIG51ZCBzdGFsZVxcXCIsXFxuK1xcdCAgICBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgVkxBTl9JRkFDRSwgRE1BQyk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmVpZ2ggYWRkICVzIGRldiAlcyBsbGFkZHIgJXMgbnVkIHN0YWxlXFxcIixcXG4rXFx0ICAgIElQVjRfVkxBTl9HVywgVkxBTl9JRkFDRSwgRE1BQzIpO1xcbitcXG4rXFx0LyogYSBWTEFOIG9uIHZldGgyIHdpdGggYSByb3V0ZSBpbiB0aGUgdGJpZCB0ZXN0IHRhYmxlICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBhZGQgbGluayB2ZXRoMiBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFxcXCIsXFxuK1xcdCAgICBUQklEX1ZMQU5fSUZBQ0UsIFRCSURfVkxBTl9JRCk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXFxcIiwgVEJJRF9WTEFOX0lGQUNFKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCByb3V0ZSBhZGQgdGFibGUgMTAwICVzLzMyIGRldiAlc1xcXCIsXFxuK1xcdCAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7XFxuK1xcbitcXHQvKiBhIGxvY2tlZC1tdHUgcm91dGUgdmlhIHRoZSBzdWJpbnRlcmZhY2UgZm9yIHRoZSBGUkFHX05FRURFRCBjYXNlICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgcm91dGUgYWRkICVzLzMyIGRldiAlcyBtdHUgbG9jayAxMDAwXFxcIixcXG4rXFx0ICAgIElQVjRfVkxBTl9NVFVfRFNULCBWTEFOX0lGQUNFKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiBmYWlsOlxcbiBcXHRyZXR1cm4gLTE7XFxuQEAgLTIxOCw5ICs1ODgsMTYgQEAgc3RhdGljIGludCBzZXRfbG9va3VwX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4gXFx0bWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTtcXG4gXFxuIFxcdHBhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4tXFx0cGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gaWZpbmRleDtcXG4rXFx0cGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gdGVzdC1cXHUwMDNlaWlmID8gaWZfbmFtZXRvaW5kZXgodGVzdC1cXHUwMDNlaWlmKSA6IGlmaW5kZXg7XFxuIFxcdHBhcmFtcy1cXHUwMDNldGJpZCA9IHRlc3QtXFx1MDAzZXRiaWQ7XFxuIFxcdHBhcmFtcy1cXHUwMDNlbWFyayA9IHRlc3QtXFx1MDAzZW1hcms7XFxuK1xcdHBhcmFtcy1cXHUwMDNldG90X2xlbiA9IHRlc3QtXFx1MDAzZXRvdF9sZW47XFxuK1xcbitcXHQvKiBoX3ZsYW5fcHJvdG8vaF92bGFuX1RDSSB1bmlvbiB3aXRoIHRiaWQgKi9cXG4rXFx0aWYgKHRlc3QtXFx1MDAzZWxvb2t1cF9mbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcXG4rXFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fcHJvdG8gPSBodG9ucyh0ZXN0LVxcdTAwM2V2bGFuX3Byb3RvKTtcXG4rXFx0XFx0cGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModGVzdC1cXHUwMDNldmxhbl9pZCk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHRlc3QtXFx1MDAzZWRhZGRyLCBwYXJhbXMtXFx1MDAzZWlwdjZfZHN0KSA9PSAxKSB7XFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDY7XFxuQEAgLTI5OCw3ICs2NzUsNyBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XFxuIFxcdHN0cnVjdCBfX3NrX2J1ZmYgc2tiID0geyB9O1xcbiBcXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbDtcXG4tXFx0aW50IHByb2dfZmQsIGVyciwgcmV0LCBpO1xcbitcXHRpbnQgcHJvZ19mZCwgeGRwX2ZkLCBlcnIsIHJldCwgaTtcXG4gXFxuIFxcdC8qIFRoZSB0ZXN0IGRvZXMgbm90IHVzZSB0aGUgc2tiLVxcdTAwM2VkYXRhLCBzb1xcbiBcXHQgKiB1c2UgcGt0X3Y2IGZvciBib3RoIHY2IGFuZCB2NCB0ZXN0LlxcbkBAIC0zMDksMTEgKzY4NiwxNiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRcXHQgICAgLmN0eF9pbiA9IFxcdTAwMjZza2IsXFxuIFxcdFxcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcXG4gXFx0KTtcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHhkcF9vcHRzLFxcbitcXHRcXHQgICAgLmRhdGFfaW4gPSBcXHUwMDI2cGt0X3Y2LFxcbitcXHRcXHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxcbitcXHQpO1xcbiBcXG4gXFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcXG4gXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmZpYl9sb29rdXApO1xcbitcXHR4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF94ZHApO1xcbiBcXG4gXFx0U1lTKGZhaWwsIFxcXCJpcCBuZXRucyBhZGQgJXNcXFwiLCBOU19URVNUKTtcXG4gXFxuQEAgLTM0Myw2ICs3MjUsMTYgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcXG4gXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfdGVzdF9ydW5fb3B0c1xcXCIpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gaXMgWERQLW9ubHk7IHRoZSB0YyBoZWxwZXIgcmVqZWN0cyBpdC5cXG4rXFx0XFx0ICogVGhlc2UgY2FzZXMgYXJlIGV4ZXJjaXNlZCBvbiB0aGUgWERQIHBhdGggYmVsb3cuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikge1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICBcXFwidGMgcmVqZWN0cyBCUEZfRklCX0xPT0tVUF9WTEFOXFxcIik7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxcbiBcXHRcXHRcXHQgIFxcXCJmaWJfbG9va3VwX3JldFxcXCIpO1xcbiBcXG5AQCAtMzUyLDYgKzc0NCwyMSBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KVxcbiBcXHRcXHRcXHRhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7XFxuIFxcbitcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KVxcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCxcXG4rXFx0XFx0XFx0XFx0ICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLCBcXFwiaWZpbmRleFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSlcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcXG4rXFx0XFx0XFx0XFx0ICBcXFwibXR1X3Jlc3VsdFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHtcXG4rXFx0XFx0XFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9wcm90byxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX3Byb3RvKSwgXFxcImhfdmxhbl9wcm90b1xcXCIpO1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgXFxcImhfdmxhbl9UQ0lcXFwiKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXFx1MDAzZWRtYWMsIHNpemVvZih0ZXN0c1tpXS5kbWFjKSk7XFxuIFxcdFxcdGlmICghQVNTRVJUX0VRKHJldCwgMCwgXFxcImRtYWMgbm90IG1hdGNoXFxcIikpIHtcXG4gXFx0XFx0XFx0Y2hhciBleHBlY3RlZFsxOF0sIGFjdHVhbFsxOF07XFxuQEAgLTM2MSwxNSArNzY4LDMxMiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxcbiBcXHRcXHRcXHRwcmludGYoXFxcImRtYWMgZXhwZWN0ZWQgJXMgYWN0dWFsICVzIFxcXCIsIGV4cGVjdGVkLCBhY3R1YWwpO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHQvLyBlbnN1cmUgdGJpZCBpcyB6ZXJvJ2Qgb3V0IGFmdGVyIGZpYiBsb29rdXAuXFxuLVxcdFxcdGlmICh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZW5zdXJlIHRiaWQgaXMgemVybydkIG91dCBhZnRlciBmaWIgbG9va3VwLiBXaXRoXFxuK1xcdFxcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gdGhlIHVuaW9uIGhvbGRzIHRoZSBwYWNrZWQgdmxhblxcbitcXHRcXHQgKiBmaWVsZHMgaW5zdGVhZCwgc28gc2tpcCB0aGUgY2hlY2sgZm9yIHRob3NlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXFx1MDAyNiBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pKSB7XFxuIFxcdFxcdFxcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX3BhcmFtcy50YmlkLCAwLFxcbiBcXHRcXHRcXHRcXHRcXHRcXFwiZXhwZWN0ZWQgZmliX3BhcmFtcy50YmlkIHRvIGJlIHplcm9cXFwiKSlcXG4gXFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJlLXJ1biB0aGUgY2FzZXMgdGhyb3VnaCBicGZfeGRwX2ZpYl9sb29rdXAoKS4gdGVzdF9ydW4gdXNlcyB0aGVcXG4rXFx0ICogY3VycmVudCBuZXRucycgbG9vcGJhY2sgZm9yIGN0eC1cXHUwMDNlcnhxLVxcdTAwM2VkZXYsIHNvIGRldl9uZXQoKSBpcyBOU19URVNUXFxuK1xcdCAqIGFuZCB0aGUgbG9va3VwIHJ1bnMgYWdhaW5zdCBpdHMgRklCLiBUaGUgcGF0aC1pbmRlcGVuZGVudCByZXN1bHRzXFxuK1xcdCAqIChyZXR1cm4gY29kZSwgc3dhcHBlZCBpZmluZGV4LCB2bGFuIHRhZywgZ2F0ZXdheSkgbXVzdCBtYXRjaCB0aGUgc2tiXFxuK1xcdCAqIHBhdGg7IHRoZSBuby10b3RfbGVuIG10dV9yZXN1bHQgaXMgc2tiLXNwZWNpZmljIGFuZCBub3QgcmVjaGVja2VkLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpKyspIHtcXG4rXFx0XFx0aWYgKHNldF9sb29rdXBfcGFyYW1zKGZpYl9wYXJhbXMsIFxcdTAwMjZ0ZXN0c1tpXSwgc2tiLmlmaW5kZXgpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcXG4rXFx0XFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vsb29rdXBfZmxhZ3MgPSB0ZXN0c1tpXS5sb29rdXBfZmxhZ3M7XFxuK1xcbitcXHRcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgXFx1MDAyNnhkcF9vcHRzKTtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwieGRwIHRlc3RfcnVuXFxcIikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxcbitcXHRcXHRcXHQgICAgICAgXFxcInhkcCBmaWJfbG9va3VwX3JldFxcXCIpKVxcbitcXHRcXHRcXHRwcmludGYoXFxcIih4ZHApICVzXFxcXG5cXFwiLCB0ZXN0c1tpXS5kZXNjKTtcXG4rXFxuK1xcdFxcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpXFxuK1xcdFxcdFxcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4LFxcbitcXHRcXHRcXHRcXHQgIGlmX25hbWV0b2luZGV4KHRlc3RzW2ldLmV4cGVjdGVkX2RldiksXFxuK1xcdFxcdFxcdFxcdCAgXFxcInhkcCBpZmluZGV4XFxcIik7XFxuK1xcbitcXHRcXHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KVxcbitcXHRcXHRcXHRhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7XFxuK1xcbitcXHRcXHRpZiAodGVzdHNbaV0uY2hlY2tfdmxhbikge1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvLFxcbitcXHRcXHRcXHRcXHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcXFwieGRwIGhfdmxhbl9wcm90b1xcXCIpO1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX1RDSSxcXG4rXFx0XFx0XFx0XFx0ICBodG9ucyh0ZXN0c1tpXS52bGFuX2lkKSwgXFxcInhkcCBoX3ZsYW5fVENJXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCA9IG1lbWNtcCh0ZXN0c1tpXS5kbWFjLCBmaWJfcGFyYW1zLVxcdTAwM2VkbWFjLCBzaXplb2YodGVzdHNbaV0uZG1hYykpO1xcbitcXHRcXHRBU1NFUlRfRVEocmV0LCAwLCBcXFwieGRwIGRtYWNcXFwiKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIG10dV9yZXN1bHQgZnJvbSBhIHRvdF9sZW4gbG9va3VwIGlzIHRoZSByb3V0ZSBtdHUgYW5kIGlzXFxuK1xcdFxcdCAqIHBhdGgtaW5kZXBlbmRlbnQ7IHRoZSBuby10b3RfbGVuIGFybSByZWFkcyBkZXYtXFx1MDAzZW10dSBhbmQgaXNcXG4rXFx0XFx0ICogc2tiLW9ubHksIHNvIGdhdGUgb24gdG90X2xlblxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX210dSBcXHUwMDI2XFx1MDAyNiB0ZXN0c1tpXS50b3RfbGVuKVxcbitcXHRcXHRcXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cXHUwMDNlbXR1X3Jlc3VsdCwgdGVzdHNbaV0uZXhwZWN0ZWRfbXR1LFxcbitcXHRcXHRcXHRcXHQgIFxcXCJ4ZHAgbXR1X3Jlc3VsdFxcXCIpO1xcbitcXHR9XFxuK1xcbitmYWlsOlxcbitcXHRpZiAobnN0b2tlbilcXG4rXFx0XFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuK1xcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCBcXFwiIE5TX1RFU1QpO1xcbitcXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisjZGVmaW5lIE5TX1ZMQU5fQVxcdFxcXCJmaWJfbG9va3VwX3ZsYW5fbnNfYVxcXCJcXG4rI2RlZmluZSBOU19WTEFOX0JcXHRcXFwiZmliX2xvb2t1cF92bGFuX25zX2JcXFwiXFxuK1xcbisvKlxcbisgKiBBIFZMQU4gZGV2aWNlIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIG5ldG5zIHdoaWxlIHN0YXlpbmcgcmVnaXN0ZXJlZFxcbisgKiBvbiBpdHMgcGFyZW50LiBOZWl0aGVyIGRpcmVjdGlvbiBtYXkgdGhlbiBjcm9zcyB0aGUgYm91bmRhcnk6IHRoZVxcbisgKiBlZ3Jlc3MgZmxhZyBtdXN0IG5vdCBwdWJsaXNoIHRoZSBmb3JlaWduIHBhcmVudCdzIGlmaW5kZXgsIGFuZCB0aGVcXG4rICogaW5wdXQgZmxhZyBtdXN0IGZhaWwgY2xvc2VkIHJhdGhlciB0aGFuIHVzZSBhIGZvcmVpZ24gaW5ncmVzcy5cXG4rICovXFxuK3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fbmV0bnModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XFxuK1xcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcXG4rXFx0c3RydWN0IF9fc2tfYnVmZiBza2IgPSB7IH07XFxuK1xcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCBwYXJlbnRfaWR4LCB2bGFuX2lkeDtcXG4rXFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBydW5fb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NixcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcXG4rXFx0XFx0ICAgIC5jdHhfaW4gPSBcXHUwMDI2c2tiLFxcbitcXHRcXHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKHNrYiksXFxuK1xcdCk7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NixcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcXG4rXFx0KTtcXG4rXFxuK1xcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbCBvcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcXG4rXFx0eGRwX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcXG4rXFx0ZmliX3BhcmFtcyA9IFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9wYXJhbXM7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5ldG5zIGFkZCAlc1xcXCIsIE5TX1ZMQU5fQSk7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbmV0bnMgYWRkICVzXFxcIiwgTlNfVkxBTl9CKTtcXG4rXFxuK1xcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQSk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcXFwib3Blbl9uZXRucyhhKVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIGxpbmsgYWRkIHZldGg3IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDhcXFwiKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIHNldCBkZXYgdmV0aDcgdXBcXFwiKTtcXG4rXFx0U1lTKGZhaWwsIFxcXCJpcCBsaW5rIGFkZCBsaW5rIHZldGg3IG5hbWUgdmV0aDcuNjYgdHlwZSB2bGFuIGlkIDY2XFxcIik7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgdmV0aDcuNjYgbmV0bnMgJXNcXFwiLCBOU19WTEFOX0IpO1xcbitcXG4rXFx0cGFyZW50X2lkeCA9IGlmX25hbWV0b2luZGV4KFxcXCJ2ZXRoN1xcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9ORVEocGFyZW50X2lkeCwgMCwgXFxcImlmX25hbWV0b2luZGV4KHZldGg3KVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBpbnB1dDogdGhlIG1vdmVkIGRldmljZSBpcyBzdGlsbCBpbiB2ZXRoNydzIFZMQU4gZ3JvdXAsIGJ1dCBpdFxcbitcXHQgKiBsaXZlcyBpbiBhbm90aGVyIG5ldG5zLCBzbyB0aGUgbG9va3VwIG11c3QgZmFpbCBjbG9zZWRcXG4rXFx0ICovXFxuK1xcdHNrYi5pZmluZGV4ID0gcGFyZW50X2lkeDtcXG4rXFx0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4ID0gcGFyZW50X2lkeDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpO1xcbitcXHRmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJID0gaHRvbnMoNjYpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXFxcIjEwLjY2LjAuMlxcXCIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X2RzdCksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKGRzdClcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfFxcbitcXHRcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXFx1MDAyNnJ1bl9vcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9ydW4oaW5wdXQpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxcbitcXHRcXHQgIFxcXCJpbnB1dCBhY3Jvc3MgbmV0bnMgZmFpbHMgY2xvc2VkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VpZmluZGV4LCBwYXJlbnRfaWR4LCBcXFwiaWZpbmRleCB1bnRvdWNoZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0ksIGh0b25zKDY2KSwgXFxcInRhZyB1bnRvdWNoZWRcXFwiKTtcXG4rXFxuK1xcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xcbitcXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0IpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXFxcIm9wZW5fbmV0bnMoYilcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogZWdyZXNzOiB0aGUgZmliIHJlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UgaGVyZSwgYnV0IGl0cyBwYXJlbnRcXG4rXFx0ICogaXMgaW4gdGhlIG90aGVyIG5ldG5zLCBzbyB0aGUgc3dhcCBtdXN0IG5vdCBoYXBwZW5cXG4rXFx0ICovXFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgbGluayBzZXQgZGV2IHZldGg3LjY2IHVwXFxcIik7XFxuK1xcdFNZUyhmYWlsLCBcXFwiaXAgYWRkciBhZGQgMTAuNjYuMC4xLzI0IGRldiB2ZXRoNy42NlxcXCIpO1xcbitcXHRlcnIgPSB3cml0ZV9zeXNjdGwoXFxcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL3ZldGg3LjY2L2ZvcndhcmRpbmdcXFwiLCBcXFwiMVxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ3cml0ZV9zeXNjdGwoZm9yd2FyZGluZylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0dmxhbl9pZHggPSBpZl9uYW1ldG9pbmRleChcXFwidmV0aDcuNjZcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKHZsYW5faWR4LCAwLCBcXFwiaWZfbmFtZXRvaW5kZXgodmV0aDcuNjYpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHZsYW5faWR4O1xcbitcXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXFxcIjEwLjY2LjAuMlxcXCIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X2RzdCksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKGRzdClcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgXFxcIjEwLjY2LjAuMVxcXCIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X3NyYyksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKHNyYylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmaWJfbG9va3VwX3JldCA9IC0xO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxcbitcXHRcXHRcXHRcXHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoeGRwX2ZkLCBcXHUwMDI2eGRwX29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bihlZ3Jlc3MpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxcbitcXHRcXHQgIFxcXCJlZ3Jlc3MgcmV0dXJucyBWTEFOX0ZBSUxVUkVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXgsIHZsYW5faWR4LFxcbitcXHRcXHQgIFxcXCJmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVxcdTAwM2VoX3ZsYW5fVENJLCAwLCBcXFwidmxhbiBmaWVsZHMgemVyb1xcXCIpO1xcbitcXG4rZmFpbDpcXG4rXFx0aWYgKG5zdG9rZW4pXFxuK1xcdFxcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19WTEFOX0EpO1xcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgXFxcIiBOU19WTEFOX0IpO1xcbitcXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDBcXG4rXFxuKy8qXFxuKyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxcbisgKiBwYXJlbnQuIEEgcmVkaXJlY3QgdGhhdCBsYW5kcyBvbiBhIFZMQU4gZGV2aWNlIGlzIGRyb3BwZWQgYXRcXG4rICogeGRwX2RvX2ZsdXNoKCksIGJlY2F1c2UgYSBWTEFOIGRldmljZSBoYXMgbm8gbmRvX3hkcF94bWl0LiBEcml2ZSByZWFsXFxuKyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcXG4rICogeGRwX2RvX3JlZGlyZWN0KCkgKyB4ZHBfZG9fZmx1c2goKSBwYXRoOiBhIHJlZHVjaWJsZSBWTEFOIGVncmVzc1xcbisgKiByZXNvbHZlcyB0byB2ZXRoMSBhbmQgaXMgZGVsaXZlcmVkIHRvIGl0cyBwZWVyIHZldGgyLCB3aGlsZSBhIFFpblFcXG4rICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcXG4rICogcmVkaXJlY3RlZCB0byBhIGRldmljZSB0aGF0IHdvdWxkIHNpbGVudGx5IGRyb3AgaXQuXFxuKyAqL1xcbit2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXFxuK3tcXG4rXFx0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XFxuK1xcdHN0cnVjdCBicGZfZmliX2xvb2t1cCAqZmliX3BhcmFtcztcXG4rXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xcbitcXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XFxuK1xcdGJvb2wgeGRwX2F0dGFjaGVkID0gZmFsc2U7XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgbGZfb3B0cyxcXG4rXFx0XFx0ICAgIC5kYXRhX2luID0gXFx1MDAyNnBrdF92NCxcXG4rXFx0XFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcXG4rXFx0XFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxcbitcXHRcXHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGZpYl9sb29rdXBfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRyZWRpcmVjdF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5maWJfbG9va3VwX3JlZGlyZWN0KTtcXG4rXFx0ZmliX3BhcmFtcyA9IFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZpYl9wYXJhbXM7XFxuK1xcbitcXHRTWVMoZmFpbCwgXFxcImlwIG5ldG5zIGFkZCAlc1xcXCIsIE5TX1RFU1QpO1xcbitcXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19URVNUKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuX25ldG5zXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0aWYgKHNldHVwX25ldG5zKCkpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdHZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KFxcXCJ2ZXRoMVxcXCIpO1xcbitcXHR2ZXRoMl9pZHggPSBpZl9uYW1ldG9pbmRleChcXFwidmV0aDJcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgXFxcImlmX25hbWV0b2luZGV4KHZldGgxKVxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsIFxcXCJpZl9uYW1ldG9pbmRleCh2ZXRoMilcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSByZWRpcmVjdCB0byB2ZXRoMSBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIuIHZldGhfeGRwX3htaXQoKVxcbitcXHQgKiBvbmx5IGFjY2VwdHMgdGhlIGZyYW1lIGlmIHZldGgyJ3MgTkFQSSBpcyB1cCwgd2hpY2ggb24gdmV0aCBtZWFuc1xcbitcXHQgKiB2ZXRoMiBjYXJyaWVzIGFuIFhEUCBwcm9ncmFtOyB4ZHBfY291bnQgdGFsbGllcyB3aGF0IGFycml2ZXMuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBicGZfeGRwX2F0dGFjaCh2ZXRoMl9pZHgsIGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy54ZHBfY291bnQpLFxcbitcXHRcXHRcXHQgICAgIFhEUF9GTEFHU19EUlZfTU9ERSwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImF0dGFjaCB4ZHBfY291bnQgb24gdmV0aDJcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHR4ZHBfYXR0YWNoZWQgPSB0cnVlO1xcbitcXG4rXFx0LyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovXFxuK1xcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcXG4rXFx0ZmliX3BhcmFtcy1cXHUwMDNlaWZpbmRleCA9IHZldGgxX2lkeDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfc3JjKSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24oc3JjKVxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfZHN0KSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24ocmVkdWNpYmxlIGRzdClcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBhc3NlZCA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZGVsaXZlcmVkID0gMDtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocmVkaXJlY3RfZmQsIFxcdTAwMjZsZl9vcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9ydW4ocmVkdWNpYmxlIGVncmVzcylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgXFxcInJlZHVjaWJsZSBlZ3Jlc3MgcmVkaXJlY3RlZFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwYXNzZWQsIDAsIFxcXCJyZWR1Y2libGUgZWdyZXNzIG5vdCBwYXNzZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0dUKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZGVsaXZlcmVkLCAwLCBcXFwicmVkdWNpYmxlIGVncmVzcyBkZWxpdmVyZWQgdG8gdmV0aDJcXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFFpblEgZWdyZXNzOiBub3QgcmVkdWNpYmxlLCBzbyB0aGUgbG9va3VwIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZFxcbitcXHQgKiB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gdGhlIGlubmVyXFxuK1xcdCAqIFZMQU4gZGV2aWNlLiByZWRpcmVjdGVkID09IDAgaXMgdGhlIGFzc2VydGlvbiB0aGF0IG1hdHRlcnM6IHRoZVxcbitcXHQgKiBwcm9ncmFtIGRpZCBub3QgcmVkaXJlY3QgdG8gYSBkZXZpY2UgdGhhdCB3b3VsZCBkcm9wIHRoZSBmcmFtZSBhdFxcbitcXHQgKiB4ZHBfZG9fZmx1c2goKS4gdmV0aDIncyBkZWxpdmVyZWQgY291bnQgaXMgbm90IGNoZWNrZWQgaGVyZSwgc2luY2VcXG4rXFx0ICogYSBwYXNzZWQgZnJhbWUgY2FuIHN0aWxsIHJlYWNoIHZldGgyIHRocm91Z2ggdGhlIHN0YWNrJ3MgZm9yd2FyZGluZ1xcbitcXHQgKiBwYXRoLCB3aGljaCBpcyB1bnJlbGF0ZWQgdG8gdGhlIHJlZGlyZWN0IHVuZGVyIHRlc3QuXFxuK1xcdCAqL1xcbitcXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XFxuK1xcdGZpYl9wYXJhbXMtXFx1MDAzZWlmaW5kZXggPSB2ZXRoMV9pZHg7XFxuK1xcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X0lGQUNFX0FERFIsIFxcdTAwMjZmaWJfcGFyYW1zLVxcdTAwM2VpcHY0X3NyYyksXFxuK1xcdFxcdCAgICAgICAxLCBcXFwiaW5ldF9wdG9uKHNyYylcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgXFx1MDAyNmZpYl9wYXJhbXMtXFx1MDAzZWlwdjRfZHN0KSxcXG4rXFx0XFx0ICAgICAgIDEsIFxcXCJpbmV0X3B0b24ocWlucSBkc3QpXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VyZWRpcmVjdGVkID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwYXNzZWQgPSAwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXFx1MDAyNmxmX29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJ0ZXN0X3J1bihxaW5xIGVncmVzcylcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwYXNzZWQsIFJFRElSRUNUX05QS1RTLCBcXFwicWlucSBlZ3Jlc3MgcGFzc2VkXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlZGlyZWN0ZWQsIDAsIFxcXCJxaW5xIGVncmVzcyBub3QgcmVkaXJlY3RlZFxcXCIpO1xcbitcXG4gZmFpbDpcXG4rXFx0aWYgKHhkcF9hdHRhY2hlZClcXG4rXFx0XFx0YnBmX3hkcF9kZXRhY2godmV0aDJfaWR4LCBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xcbiBcXHRpZiAobnN0b2tlbilcXG4gXFx0XFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuIFxcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCBcXFwiIE5TX1RFU1QpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xcbmluZGV4IDdiNWRkMjIxNGZmNDZhLi44NjJhMWU5NDU3YjRlMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xcbkBAIC0xOSw0ICsxOSw0MCBAQCBpbnQgZmliX2xvb2t1cChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIFxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJ4ZHBcXFwiKVxcbitpbnQgZmliX2xvb2t1cF94ZHAoc3RydWN0IHhkcF9tZCAqY3R4KVxcbit7XFxuK1xcdGZpYl9sb29rdXBfcmV0ID0gYnBmX2ZpYl9sb29rdXAoY3R4LCBcXHUwMDI2ZmliX3BhcmFtcywgc2l6ZW9mKGZpYl9wYXJhbXMpLFxcbitcXHRcXHRcXHRcXHRcXHRsb29rdXBfZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIFhEUF9EUk9QO1xcbit9XFxuK1xcbitpbnQgcmVkaXJlY3RlZCA9IDA7XFxuK2ludCBwYXNzZWQgPSAwO1xcbitpbnQgZGVsaXZlcmVkID0gMDtcXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IGZpYl9sb29rdXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9tZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zO1xcbitcXHRsb25nIHJldDtcXG4rXFxuK1xcdHJldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7XFxuK1xcdGlmIChyZXQgPT0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTKSB7XFxuK1xcdFxcdHJlZGlyZWN0ZWQrKztcXG4rXFx0XFx0cmV0dXJuIGJwZl9yZWRpcmVjdChwYXJhbXMuaWZpbmRleCwgMCk7XFxuK1xcdH1cXG4rXFxuK1xcdHBhc3NlZCsrO1xcbitcXHRyZXR1cm4gWERQX1BBU1M7XFxuK31cXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IHhkcF9jb3VudChzdHJ1Y3QgeGRwX21kICpjdHgpXFxuK3tcXG4rXFx0ZGVsaXZlcmVkKys7XFxuK1xcdHJldHVybiBYRFBfRFJPUDtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA5OjM5OjQxLjU0MzYwODYwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNjk0Njk3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2NF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2Nl9maWJfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyIChgYnBmX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGZsYWdzOiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYC4gVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBjb3JlIEJQRiBGSUIgbG9va3VwIGxvZ2ljIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIEZJQiBsb29rdXAgZW50cnkgcG9pbnRzIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIGxvb2t1cCBmdW5jdGlvbnMuIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgVkxBTiBzcGVjaWZpYyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMDIzMTE2NWM0ZWJmYWJlYzk5YmM1Nzk0NmEyZThjNjVmZGNlMmNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgNCAwOTozOTozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggODliMzZkZTVmZGJiNmQuLmQ0MjE4OTU0YzUwZjUzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC0zNTMyLDYgKzM1MzIsNDUgQEAgdW5pb24gYnBmX2F0dHIge1xuICAqXHRcdFx0VXNlIHRoZSBtYXJrIHByZXNlbnQgaW4gKnBhcmFtcyotXHUwMDNlbWFyayBmb3IgdGhlIGZpYiBsb29rdXAuXG4gICpcdFx0XHRUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QsXG4gICpcdFx0XHRhcyBpdCBvbmx5IGhhcyBtZWFuaW5nIGZvciBmdWxsIGxvb2t1cHMuXG4rICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOKipcbisgKlx0XHRcdElmIHRoZSBmaWIgbG9va3VwIHJlc29sdmVzIHRvIGEgVkxBTiBkZXZpY2Ugd2hvc2VcbisgKlx0XHRcdHBhcmVudCBpcyBhIHJlYWwgKG5vbi1WTEFOKSBkZXZpY2UsIHNldFxuKyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIGFuZCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGZyb21cbisgKlx0XHRcdHRoZSBWTEFOIGRldmljZSBhbmQgcmVwbGFjZSAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IHdpdGggdGhlXG4rICpcdFx0XHRwYXJlbnQncyBpZmluZGV4LiAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJIGNhcnJpZXMgdGhlIFZJRFxuKyAqXHRcdFx0b25seSwgd2l0aCBQQ1AgYW5kIERFSSBiaXRzIHplcm87IGEgY29uc3VtZXIgd2FudGluZyB0b1xuKyAqXHRcdFx0c2V0IGVncmVzcyBwcmlvcml0eSB3cml0ZXMgUENQIGl0c2VsZi4gKnBhcmFtcyotXHUwMDNlc21hYyBpc1xuKyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlJ3Mgb3duIGFkZHJlc3MsIHdoaWNoIGNhbiBkaWZmZXIgZnJvbSB0aGVcbisgKlx0XHRcdHBhcmVudCdzLiBPbmx5IHRoZSBpbW1lZGlhdGUgcGFyZW50IGlzIHJlc29sdmVkOyBpZiBpdFxuKyAqXHRcdFx0aXMgaXRzZWxmIGEgVkxBTiBkZXZpY2UgKFFpblEpIG9yIGluIGFub3RoZXIgbmFtZXNwYWNlLFxuKyAqXHRcdFx0dGhlIGVncmVzcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBhIHBoeXNpY2FsIGRldmljZSBwbHVzXG4rICpcdFx0XHRvbmUgdGFnIGFuZCB0aGUgbG9va3VwIHJldHVybnNcbisgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUqKiB3aXRoICpwYXJhbXMqLVx1MDAzZWlmaW5kZXhcbisgKlx0XHRcdGxlZnQgYXQgdGhlIGlucHV0LiBSZS1pc3N1ZSB3aXRob3V0XG4rICpcdFx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKiB0byBvYnRhaW4gdGhlIFZMQU4gZGV2aWNlJ3Mgb3duXG4rICpcdFx0XHRpZmluZGV4LiBUaGUgc3dhcCBhbmQgdGhlIHZsYW4gZmllbGRzXG4rICpcdFx0XHRhcmUgd3JpdHRlbiBvbmx5IG9uIHN1Y2Nlc3M7IG90aGVyIG91dHB1dCBmaWVsZHMga2VlcFxuKyAqXHRcdFx0dGhlIGhlbHBlcidzIGV4aXN0aW5nIGJlaGF2aW91ciwgc28gYSBmcmFnLW5lZWRlZCByZXN1bHRcbisgKlx0XHRcdHN0aWxsIHJlcG9ydHMgdGhlIHJvdXRlIG10dSBpbiAqcGFyYW1zKi1cdTAwM2VtdHVfcmVzdWx0LlxuKyAqXHRcdFx0VGhpcyBmbGFnIGlzIG9ubHkgdmFsaWQgZm9yIFhEUCBwcm9ncmFtczsgdGMgcHJvZ3JhbXNcbisgKlx0XHRcdHJlY2VpdmUgLUVJTlZBTCBzaW5jZSB0aGV5IGNhbiByZWRpcmVjdCB0byB0aGUgVkxBTlxuKyAqXHRcdFx0ZGV2aWNlIGRpcmVjdGx5LlxuKyAqXHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCoqXG4rICpcdFx0XHRUcmVhdCAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0lcbisgKlx0XHRcdGFzIGFuIGlucHV0IFZMQU4gdGFnIGFuZCBydW4gdGhlIGxvb2t1cCBhcyBpZiBpbmdyZXNzXG4rICpcdFx0XHRoYWQgaGFwcGVuZWQgb24gdGhlIFZMQU4gc3ViaW50ZXJmYWNlIGNhcnJ5aW5nIHRoYXQgdGFnXG4rICpcdFx0XHRvbiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4LiBUaGUgVklEIGlzIHRoZSBsb3cgMTIgYml0cyBvZlxuKyAqXHRcdFx0KnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSTsgKnBhcmFtcyotXHUwMDNlaF92bGFuX3Byb3RvIG11c3QgYmVcbisgKlx0XHRcdEVUSF9QXzgwMjFRIG9yIEVUSF9QXzgwMjFBRCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIGVsc2VcbisgKlx0XHRcdCoqLUVJTlZBTCoqLiBJZiAqcGFyYW1zKi1cdTAwM2VpZmluZGV4IGlzIGl0c2VsZiBhIFZMQU5cbisgKlx0XHRcdGRldmljZSwgaXRzIGlubmVyIChRaW5RKSBzdWJpbnRlcmZhY2UgaXMgbWF0Y2hlZDsgZm9yIGFcbisgKlx0XHRcdGJvbmQgb3IgdGVhbSwgcGFzcyB0aGUgbWFzdGVyJ3MgaWZpbmRleC4gQW4gdW5tYXRjaGVkXG4rICpcdFx0XHR0YWcsIGEgZG93biBkZXZpY2UsIG9yIG9uZSBpbiBhbm90aGVyIG5hbWVzcGFjZSByZXR1cm5zXG4rICpcdFx0XHQqKkJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVEKiosIG1pcnJvcmluZyByZWFsIGluZ3Jlc3MuXG4rICpcdFx0XHRBIFZJRCBvZiAwIGlzIGxvb2tlZCB1cCBsaXRlcmFsbHksIHNvIGRvIG5vdCBzZXQgdGhpc1xuKyAqXHRcdFx0ZmxhZyBmb3IgcHJpb3JpdHktdGFnZ2VkIGZyYW1lcy4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGhcbisgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVEJJRCoqIG9yICoqQlBGX0ZJQl9MT09LVVBfT1VUUFVUKipcbisgKlx0XHRcdChyZXR1cm5zICoqLUVJTlZBTCoqKS5cbiAgKlxuICAqXHRcdCpjdHgqIGlzIGVpdGhlciAqKnN0cnVjdCB4ZHBfbWQqKiBmb3IgWERQIHByb2dyYW1zIG9yXG4gICpcdFx0KipzdHJ1Y3Qgc2tfYnVmZioqIHRjIGNsc19hY3QgcHJvZ3JhbXMuXG5AQCAtNzMyNyw2ICs3MzY2LDggQEAgZW51bSB7XG4gXHRCUEZfRklCX0xPT0tVUF9UQklEICAgID0gKDFVIFx1MDAzY1x1MDAzYyAzKSxcbiBcdEJQRl9GSUJfTE9PS1VQX1NSQyAgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDQpLFxuIFx0QlBGX0ZJQl9MT09LVVBfTUFSSyAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNSksXG4rXHRCUEZfRklCX0xPT0tVUF9WTEFOICAgID0gKDFVIFx1MDAzY1x1MDAzYyA2KSxcbitcdEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgPSAoMVUgXHUwMDNjXHUwMDNjIDcpLFxuIH07XG4gXG4gZW51bSB7XG5AQCAtNzM0MCw2ICs3MzgxLDcgQEAgZW51bSB7XG4gXHRCUEZfRklCX0xLVVBfUkVUX05PX05FSUdILCAgICAgLyogbm8gbmVpZ2hib3IgZW50cnkgZm9yIG5oICovXG4gXHRCUEZfRklCX0xLVVBfUkVUX0ZSQUdfTkVFREVELCAgLyogZnJhZ21lbnRhdGlvbiByZXF1aXJlZCB0byBmd2QgKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fU1JDX0FERFIsICAvKiBmYWlsZWQgdG8gZGVyaXZlIElQIHNyYyBhZGRyICovXG4rXHRCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSwgLyogVkxBTiBlZ3Jlc3MsIHBhcmVudCB1bnJlc29sdmFibGUgKi9cbiB9O1xuIFxuIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG5AQCAtNzM5Myw3ICs3NDM1LDEzIEBAIHN0cnVjdCBicGZfZmliX2xvb2t1cCB7XG4gXG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCB7XG4tXHRcdFx0Lyogb3V0cHV0ICovXG4rXHRcdFx0LypcbitcdFx0XHQgKiBvdXRwdXQgd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOOiBzZXQgZnJvbSB0aGVcbitcdFx0XHQgKiByZXNvbHZlZCBlZ3Jlc3MgVkxBTiBkZXZpY2UgKHNlZSB0aGUgZmxhZyk7IHplcm9lZFxuK1x0XHRcdCAqIG9uIG90aGVyIHN1Y2Nlc3NmdWwgbG9va3Vwcy4gaW5wdXQgd2l0aFxuK1x0XHRcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQ6IHRoZSBWTEFOIHRhZyB0byBzY29wZVxuK1x0XHRcdCAqIHRoZSBsb29rdXAgYnkuXG4rXHRcdFx0ICovXG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fcHJvdG87XG4gXHRcdFx0X19iZTE2XHRoX3ZsYW5fVENJO1xuIFx0XHR9O1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDJlOTZiNGI4NDdjZTEyLi4wZWEzNjJmYTQyODdlMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTYyMDEsMjEgKzYyMDEsNjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0ge1xuICNlbmRpZlxuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuLXN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcywgdTMyIG10dSlcbitzdGF0aWMgaW50IGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4rXHRcdFx0XHQgIHUzMiBmbGFncywgdTMyIG10dSwgdTMyIGluX2lmaW5kZXgpXG4ge1xuIFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0kgPSAwO1xuIFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IDA7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG4rXHRpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9WTEFOKSBcdTAwMjZcdTAwMjYgaXNfdmxhbl9kZXYoZGV2KSkge1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9wcml2KGRldiktXHUwMDNlcmVhbF9kZXY7XG4rXG4rXHRcdGlmICghaXNfdmxhbl9kZXYocmVhbF9kZXYpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbmV0X2VxKGRldl9uZXQocmVhbF9kZXYpLCBkZXZfbmV0KGRldikpKSB7XG4rXHRcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IHZsYW5fZGV2X3ZsYW5fcHJvdG8oZGV2KTtcbitcdFx0XHRwYXJhbXMtXHUwMDNlaF92bGFuX1RDSSA9IGh0b25zKHZsYW5fZGV2X3ZsYW5faWQoZGV2KSk7XG4rXHRcdFx0cGFyYW1zLVx1MDAzZWlmaW5kZXggPSByZWFsX2Rldi1cdTAwM2VpZmluZGV4O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gaW5faWZpbmRleDtcbitcdFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkU7XG4rXHRcdH1cbitcdH1cbisjZW5kaWZcbitcbiBcdGlmIChtdHUpXG4gXHRcdHBhcmFtcy1cdTAwM2VtdHVfcmVzdWx0ID0gbXR1OyAvKiB1bmlvbiB3aXRoIHRvdF9sZW4gKi9cbiBcbiBcdHJldHVybiAwO1xuIH1cbitcbitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMpXG4re1xuK1x0X19iZTE2IHByb3RvID0gcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90bztcbitcdHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldjtcbitcdHUxNiB2aWQ7XG4rXG4rXHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpIFx1MDAyNlx1MDAyNiBwcm90byAhPSBodG9ucyhFVEhfUF84MDIxQUQpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcbitcdHZpZCA9IG50b2hzKHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJKSBcdTAwMjYgVkxBTl9WSURfTUFTSztcbitcdHZsYW5fZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgcHJvdG8sIHZpZCk7XG4rXHRpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgfHxcbitcdCAgICAhbmV0X2VxKGRldl9uZXQodmxhbl9kZXYpLCBkZXZfbmV0KGRldikpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiB2bGFuX2Rldjtcbit9XG4gI2VuZGlmXG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG4gc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRcdFx0ICAgICAgIHUzMiBmbGFncywgYm9vbCBjaGVja19tdHUpXG4ge1xuK1x0dTMyIGluX2lmaW5kZXggPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDtcbiBcdHN0cnVjdCBmaWJfbmhfY29tbW9uICpuaGM7XG4gXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7XG5AQCAtNjIyOSw2ICs2MjY4LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0aWYgKHVubGlrZWx5KCFkZXYpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbitcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xuK1x0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbitcdFx0aWYgKElTX0VSUihkZXYpKVxuK1x0XHRcdHJldHVybiBQVFJfRVJSKGRldik7XG4rXHRcdGlmICghZGV2KVxuK1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDtcbitcdH1cbitcbiBcdC8qIHZlcmlmeSBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb24gdGhpcyBpbnRlcmZhY2UgKi9cbiBcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbiBcdGlmICh1bmxpa2VseSghaW5fZGV2IHx8ICFJTl9ERVZfRk9SV0FSRChpbl9kZXYpKSlcbkBAIC02MjM4LDcgKzYyODUsMTEgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRcdGZsNC5mbG93aTRfaWlmID0gMTtcbiBcdFx0Zmw0LmZsb3dpNF9vaWYgPSBwYXJhbXMtXHUwMDNlaWZpbmRleDtcbiBcdH0gZWxzZSB7XG4tXHRcdGZsNC5mbG93aTRfaWlmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4rXHRcdC8qXG4rXHRcdCAqIGRldi1cdTAwM2VpZmluZGV4LCBub3QgcGFyYW1zLVx1MDAzZWlmaW5kZXg6IFZMQU5fSU5QVVQgbWF5IGhhdmVcbitcdFx0ICogcmVzb2x2ZWQgZGV2IHRvIGEgc3ViaW50ZXJmYWNlIGFib3ZlLlxuK1x0XHQgKi9cbitcdFx0Zmw0LmZsb3dpNF9paWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbiBcdFx0Zmw0LmZsb3dpNF9vaWYgPSAwO1xuIFx0fVxuIFx0Zmw0LmZsb3dpNF9kc2NwID0gaW5ldF9kc2ZpZWxkX3RvX2RzY3AocGFyYW1zLVx1MDAzZXRvcyk7XG5AQCAtNjM0Nyw3ICs2Mzk4LDcgQEAgc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRtZW1jcHkocGFyYW1zLVx1MDAzZXNtYWMsIGRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuIHNldF9md2RfcGFyYW1zOlxuLVx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xuK1x0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC02MzU3LDYgKzY0MDgsNyBAQCBzdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiB7XG4gXHRzdHJ1Y3QgaW42X2FkZHIgKnNyYyA9IChzdHJ1Y3QgaW42X2FkZHIgKikgcGFyYW1zLVx1MDAzZWlwdjZfc3JjO1xuIFx0c3RydWN0IGluNl9hZGRyICpkc3QgPSAoc3RydWN0IGluNl9hZGRyICopIHBhcmFtcy1cdTAwM2VpcHY2X2RzdDtcbitcdHUzMiBpbl9pZmluZGV4ID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHRzdHJ1Y3QgZmliNl9yZXN1bHQgcmVzID0ge307XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG5AQCAtNjM3NCw2ICs2NDI2LDE0IEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0aWYgKHVubGlrZWx5KCFkZXYpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbitcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkge1xuK1x0XHRkZXYgPSBicGZfZmliX3ZsYW5faW5wdXRfZGV2KGRldiwgcGFyYW1zKTtcbitcdFx0aWYgKElTX0VSUihkZXYpKVxuK1x0XHRcdHJldHVybiBQVFJfRVJSKGRldik7XG4rXHRcdGlmICghZGV2KVxuK1x0XHRcdHJldHVybiBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRDtcbitcdH1cbitcbiBcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpO1xuIFx0aWYgKHVubGlrZWx5KCFpZGV2IHx8ICFSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYuZm9yd2FyZGluZykpKVxuIFx0XHRyZXR1cm4gQlBGX0ZJQl9MS1VQX1JFVF9GV0RfRElTQUJMRUQ7XG5AQCAtNjM4Miw3ICs2NDQyLDEyIEBAIHN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuIFx0XHRmbDYuZmxvd2k2X2lpZiA9IDE7XG4gXHRcdG9pZiA9IGZsNi5mbG93aTZfb2lmID0gcGFyYW1zLVx1MDAzZWlmaW5kZXg7XG4gXHR9IGVsc2Uge1xuLVx0XHRvaWYgPSBmbDYuZmxvd2k2X2lpZiA9IHBhcmFtcy1cdTAwM2VpZmluZGV4O1xuK1x0XHQvKlxuK1x0XHQgKiBkZXYtXHUwMDNlaWZpbmRleCwgbm90IHBhcmFtcy1cdTAwM2VpZmluZGV4OiBWTEFOX0lOUFVUIG1heSBoYXZlXG4rXHRcdCAqIHJlc29sdmVkIGRldiB0byBhIHN1YmludGVyZmFjZSBhYm92ZS5cbitcdFx0ICovXG4rXHRcdG9pZiA9IGRldi1cdTAwM2VpZmluZGV4O1xuK1x0XHRmbDYuZmxvd2k2X2lpZiA9IG9pZjtcbiBcdFx0Zmw2LmZsb3dpNl9vaWYgPSAwO1xuIFx0XHRzdHJpY3QgPSBSVDZfTE9PS1VQX0ZfSEFTX1NBRERSO1xuIFx0fVxuQEAgLTY0ODYsMTMgKzY1NTEsMjYgQEAgc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4gXHRtZW1jcHkocGFyYW1zLVx1MDAzZXNtYWMsIGRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuIHNldF9md2RfcGFyYW1zOlxuLVx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMocGFyYW1zLCBtdHUpO1xuK1x0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xuIH1cbiAjZW5kaWZcbiBcbiAjZGVmaW5lIEJQRl9GSUJfTE9PS1VQX01BU0sgKEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCB8IFxcXG4gXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIIHwgQlBGX0ZJQl9MT09LVVBfVEJJRCB8IFxcXG4tXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9TUkMgfCBCUEZfRklCX0xPT0tVUF9NQVJLKVxuK1x0XHRcdCAgICAgQlBGX0ZJQl9MT09LVVBfU1JDIHwgQlBGX0ZJQl9MT09LVVBfTUFSSyB8IFxcXG4rXHRcdFx0ICAgICBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVClcbitcbitzdGF0aWMgYm9vbCBicGZfZmliX2xvb2t1cF9mbGFnc19vayh1MzIgZmxhZ3MpXG4re1xuK1x0aWYgKGZsYWdzIFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGZsYWdzIFx1MDAyNiAoQlBGX0ZJQl9MT09LVVBfVEJJRCB8IEJQRl9GSUJfTE9PS1VQX09VVFBVVCkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4gXG4gQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4gXHQgICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKiwgcGFyYW1zLCBpbnQsIHBsZW4sIHUzMiwgZmxhZ3MpXG5AQCAtNjUwMCw3ICs2NTc4LDcgQEAgQlBGX0NBTExfNChicGZfeGRwX2ZpYl9sb29rdXAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG4gXHRpZiAocGxlbiBcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GSUJfTE9PS1VQX01BU0spXG4rXHRpZiAoIWJwZl9maWJfbG9va3VwX2ZsYWdzX29rKGZsYWdzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRzd2l0Y2ggKHBhcmFtcy1cdTAwM2VmYW1pbHkpIHtcbkBAIC02NTM4LDcgKzY2MTYsMTAgQEAgQlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcbiBcdGlmIChwbGVuIFx1MDAzYyBzaXplb2YoKnBhcmFtcykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGZsYWdzIFx1MDAyNiB+QlBGX0ZJQl9MT09LVVBfTUFTSylcbitcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAocGFyYW1zLVx1MDAzZXRvdF9sZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uZDQyMTg5NTRjNTBmNTMgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTM1MzIsNiArMzUzMiw0NSBAQCB1bmlvbiBicGZfYXR0ciB7XG4gICpcdFx0XHRVc2UgdGhlIG1hcmsgcHJlc2VudCBpbiAqcGFyYW1zKi1cdTAwM2VtYXJrIGZvciB0aGUgZmliIGxvb2t1cC5cbiAgKlx0XHRcdFRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIEJQRl9GSUJfTE9PS1VQX0RJUkVDVCxcbiAgKlx0XHRcdGFzIGl0IG9ubHkgaGFzIG1lYW5pbmcgZm9yIGZ1bGwgbG9va3Vwcy5cbisgKlx0XHQqKkJQRl9GSUJfTE9PS1VQX1ZMQU4qKlxuKyAqXHRcdFx0SWYgdGhlIGZpYiBsb29rdXAgcmVzb2x2ZXMgdG8gYSBWTEFOIGRldmljZSB3aG9zZVxuKyAqXHRcdFx0cGFyZW50IGlzIGEgcmVhbCAobm9uLVZMQU4pIGRldmljZSwgc2V0XG4rICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gYW5kICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0kgZnJvbVxuKyAqXHRcdFx0dGhlIFZMQU4gZGV2aWNlIGFuZCByZXBsYWNlICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggd2l0aCB0aGVcbisgKlx0XHRcdHBhcmVudCdzIGlmaW5kZXguICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9UQ0kgY2FycmllcyB0aGUgVklEXG4rICpcdFx0XHRvbmx5LCB3aXRoIFBDUCBhbmQgREVJIGJpdHMgemVybzsgYSBjb25zdW1lciB3YW50aW5nIHRvXG4rICpcdFx0XHRzZXQgZWdyZXNzIHByaW9yaXR5IHdyaXRlcyBQQ1AgaXRzZWxmLiAqcGFyYW1zKi1cdTAwM2VzbWFjIGlzXG4rICpcdFx0XHR0aGUgVkxBTiBkZXZpY2UncyBvd24gYWRkcmVzcywgd2hpY2ggY2FuIGRpZmZlciBmcm9tIHRoZVxuKyAqXHRcdFx0cGFyZW50J3MuIE9ubHkgdGhlIGltbWVkaWF0ZSBwYXJlbnQgaXMgcmVzb2x2ZWQ7IGlmIGl0XG4rICpcdFx0XHRpcyBpdHNlbGYgYSBWTEFOIGRldmljZSAoUWluUSkgb3IgaW4gYW5vdGhlciBuYW1lc3BhY2UsXG4rICpcdFx0XHR0aGUgZWdyZXNzIGNhbm5vdCBiZSByZWR1Y2VkIHRvIGEgcGh5c2ljYWwgZGV2aWNlIHBsdXNcbisgKlx0XHRcdG9uZSB0YWcgYW5kIHRoZSBsb29rdXAgcmV0dXJuc1xuKyAqXHRcdFx0KipCUEZfRklCX0xLVVBfUkVUX1ZMQU5fRkFJTFVSRSoqIHdpdGggKnBhcmFtcyotXHUwMDNlaWZpbmRleFxuKyAqXHRcdFx0bGVmdCBhdCB0aGUgaW5wdXQuIFJlLWlzc3VlIHdpdGhvdXRcbisgKlx0XHRcdCoqQlBGX0ZJQl9MT09LVVBfVkxBTioqIHRvIG9idGFpbiB0aGUgVkxBTiBkZXZpY2UncyBvd25cbisgKlx0XHRcdGlmaW5kZXguIFRoZSBzd2FwIGFuZCB0aGUgdmxhbiBmaWVsZHNcbisgKlx0XHRcdGFyZSB3cml0dGVuIG9ubHkgb24gc3VjY2Vzczsgb3RoZXIgb3V0cHV0IGZpZWxkcyBrZWVwXG4rICpcdFx0XHR0aGUgaGVscGVyJ3MgZXhpc3RpbmcgYmVoYXZpb3VyLCBzbyBhIGZyYWctbmVlZGVkIHJlc3VsdFxuKyAqXHRcdFx0c3RpbGwgcmVwb3J0cyB0aGUgcm91dGUgbXR1IGluICpwYXJhbXMqLVx1MDAzZW10dV9yZXN1bHQuXG4rICpcdFx0XHRUaGlzIGZsYWcgaXMgb25seSB2YWxpZCBmb3IgWERQIHByb2dyYW1zOyB0YyBwcm9ncmFtc1xuKyAqXHRcdFx0cmVjZWl2ZSAtRUlOVkFMIHNpbmNlIHRoZXkgY2FuIHJlZGlyZWN0IHRvIHRoZSBWTEFOXG4rICpcdFx0XHRkZXZpY2UgZGlyZWN0bHkuXG4rICpcdFx0KipCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUKipcbisgKlx0XHRcdFRyZWF0ICpwYXJhbXMqLVx1MDAzZWhfdmxhbl9wcm90byBhbmQgKnBhcmFtcyotXHUwMDNlaF92bGFuX1RDSVxuKyAqXHRcdFx0YXMgYW4gaW5wdXQgVkxBTiB0YWcgYW5kIHJ1biB0aGUgbG9va3VwIGFzIGlmIGluZ3Jlc3NcbisgKlx0XHRcdGhhZCBoYXBwZW5lZCBvbiB0aGUgVkxBTiBzdWJpbnRlcmZhY2UgY2FycnlpbmcgdGhhdCB0YWdcbisgKlx0XHRcdG9uICpwYXJhbXMqLVx1MDAzZWlmaW5kZXguIFRoZSBWSUQgaXMgdGhlIGxvdyAxMiBiaXRzIG9mXG4rICpcdFx0XHQqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fVENJOyAqcGFyYW1zKi1cdTAwM2VoX3ZsYW5fcHJvdG8gbXVzdCBiZVxuKyAqXHRcdFx0RVRIX1BfODAyMVEgb3IgRVRIX1BfODAyMUFEIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgZWxzZVxuKyAqXHRcdFx0KiotRUlOVkFMKiouIElmICpwYXJhbXMqLVx1MDAzZWlmaW5kZXggaXMgaXRzZWxmIGEgVkxBTlxuKyAqXHRcdFx0ZGV2aWNlLCBpdHMgaW5uZXIgKFFpblEpIHN1YmludGVyZmFjZSBpcyBtYXRjaGVkOyBmb3IgYVxuKyAqXHRcdFx0Ym9uZCBvciB0ZWFtLCBwYXNzIHRoZSBtYXN0ZXIncyBpZmluZGV4LiBBbiB1bm1hdGNoZWRcbisgKlx0XHRcdHRhZywgYSBkb3duIGRldmljZSwgb3Igb25lIGluIGFub3RoZXIgbmFtZXNwYWNlIHJldHVybnNcbisgKlx0XHRcdCoqQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQqKiwgbWlycm9yaW5nIHJlYWwgaW5ncmVzcy5cbisgKlx0XHRcdEEgVklEIG9mIDAgaXMgbG9va2VkIHVwIGxpdGVyYWxseSwgc28gZG8gbm90IHNldCB0aGlzXG4rICpcdFx0XHRmbGFnIGZvciBwcmlvcml0eS10YWdnZWQgZnJhbWVzLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aFxuKyAqXHRcdFx0KipCUEZfRklCX0xPT0tVUF9UQklEKiogb3IgKipCUEZfRklCX0xPT0tVUF9PVVRQVVQqKlxuKyAqXHRcdFx0KHJldHVybnMgKiotRUlOVkFMKiopLlxuICAqXG4gICpcdFx0KmN0eCogaXMgZWl0aGVyICoqc3RydWN0IHhkcF9tZCoqIGZvciBYRFAgcHJvZ3JhbXMgb3JcbiAgKlx0XHQqKnN0cnVjdCBza19idWZmKiogdGMgY2xzX2FjdCBwcm9ncmFtcy5cbkBAIC03MzI3LDYgKzczNjYsOCBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTE9PS1VQX1RCSUQgICAgPSAoMVUgXHUwMDNjXHUwMDNjIDMpLFxuIFx0QlBGX0ZJQl9MT09LVVBfU1JDICAgICA9ICgxVSBcdTAwM2NcdTAwM2MgNCksXG4gXHRCUEZfRklCX0xPT0tVUF9NQVJLICAgID0gKDFVIFx1MDAzY1x1MDAzYyA1KSxcbitcdEJQRl9GSUJfTE9PS1VQX1ZMQU4gICAgPSAoMVUgXHUwMDNjXHUwMDNjIDYpLFxuK1x0QlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCA9ICgxVSBcdTAwM2NcdTAwM2MgNyksXG4gfTtcbiBcbiBlbnVtIHtcbkBAIC03MzQwLDYgKzczODEsNyBAQCBlbnVtIHtcbiBcdEJQRl9GSUJfTEtVUF9SRVRfTk9fTkVJR0gsICAgICAvKiBubyBuZWlnaGJvciBlbnRyeSBmb3IgbmggKi9cbiBcdEJQRl9GSUJfTEtVUF9SRVRfRlJBR19ORUVERUQsICAvKiBmcmFnbWVudGF0aW9uIHJlcXVpcmVkIHRvIGZ3ZCAqL1xuIFx0QlBGX0ZJQl9MS1VQX1JFVF9OT19TUkNfQUREUiwgIC8qIGZhaWxlZCB0byBkZXJpdmUgSVAgc3JjIGFkZHIgKi9cbitcdEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLCAvKiBWTEFOIGVncmVzcywgcGFyZW50IHVucmVzb2x2YWJsZSAqL1xuIH07XG4gXG4gc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbkBAIC03MzkzLDcgKzc0MzUsMTMgQEAgc3RydWN0IGJwZl9maWJfbG9va3VwIHtcbiBcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IHtcbi1cdFx0XHQvKiBvdXRwdXQgKi9cbitcdFx0XHQvKlxuK1x0XHRcdCAqIG91dHB1dCB3aXRoIEJQRl9GSUJfTE9PS1VQX1ZMQU46IHNldCBmcm9tIHRoZVxuK1x0XHRcdCAqIHJlc29sdmVkIGVncmVzcyBWTEFOIGRldmljZSAoc2VlIHRoZSBmbGFnKTsgemVyb2VkXG4rXHRcdFx0ICogb24gb3RoZXIgc3VjY2Vzc2Z1bCBsb29rdXBzLiBpbnB1dCB3aXRoXG4rXHRcdFx0ICogQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDogdGhlIFZMQU4gdGFnIHRvIHNjb3BlXG4rXHRcdFx0ICogdGhlIGxvb2t1cCBieS5cbitcdFx0XHQgKi9cbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9wcm90bztcbiBcdFx0XHRfX2JlMTZcdGhfdmxhbl9UQ0k7XG4gXHRcdH07XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmliX2xvb2t1cC5jXG5pbmRleCBiZDc2NTg5NTgwMDQxZi4uMThiNmZkZWNhMzgyYTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWJfbG9va3VwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpYl9sb29rdXAuY1xuQEAgLTIsNiArMiw3IEBAXG4gLyogQ29weXJpZ2h0IChjKSAyMDIzIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lmLmhcdTAwM2VcbiBcbkBAIC0yMyw2ICsyNCw3IEBAXG4gI2RlZmluZSBJUFY0X1RCSURfQUREUlx0XHRcIjE3Mi4wLjAuMjU0XCJcbiAjZGVmaW5lIElQVjRfVEJJRF9ORVRcdFx0XCIxNzIuMC4wLjBcIlxuICNkZWZpbmUgSVBWNF9UQklEX0RTVFx0XHRcIjE3Mi4wLjAuMlwiXG4rI2RlZmluZSBJUFY0X1RCSURfTk9ORUlHSF9EU1RcdFwiMTcyLjAuMC41XCJcbiAjZGVmaW5lIElQVjZfVEJJRF9BRERSXHRcdFwiZmQwMDo6RkZGRlwiXG4gI2RlZmluZSBJUFY2X1RCSURfTkVUXHRcdFwiZmQwMDo6XCJcbiAjZGVmaW5lIElQVjZfVEJJRF9EU1RcdFx0XCJmZDAwOjoyXCJcbkBAIC0zNyw2ICszOSw0MSBAQFxuICNkZWZpbmUgSVBWNl9MT0NBTFx0XHRcImZkMDE6OjNcIlxuICNkZWZpbmUgSVBWNl9HVzFcdFx0XCJmZDAxOjoxXCJcbiAjZGVmaW5lIElQVjZfR1cyXHRcdFwiZmQwMTo6MlwiXG4rI2RlZmluZSBWTEFOX0lEXHRcdFx0MTAwXG4rI2RlZmluZSBWTEFOX0lGQUNFXHRcdFwidmV0aDEuMTAwXCJcbisjZGVmaW5lIFZMQU5fSURfRE9XTlx0XHQxMDJcbisjZGVmaW5lIFZMQU5fSUZBQ0VfRE9XTlx0XHRcInZldGgxLjEwMlwiXG4rI2RlZmluZSBRSU5RX09VVEVSX0lGQUNFXHRcInZldGgxLjIwMFwiXG4rI2RlZmluZSBRSU5RX0lOTkVSX0lGQUNFXHRcInZldGgxLjIwMC4zMDBcIlxuKyNkZWZpbmUgVkxBTl9UQUJMRVx0XHRcIjMwMFwiXG4rI2RlZmluZSBJUFY0X1ZMQU5fSUZBQ0VfQUREUlx0XCIxMC41LjAuMjU0XCJcbisjZGVmaW5lIElQVjRfVkxBTl9FR1JFU1NfRFNUXHRcIjEwLjUuMC4yXCJcbisjZGVmaW5lIElQVjRfUUlOUV9EU1RcdFx0XCIxMC43LjAuMlwiXG4rI2RlZmluZSBJUFY0X1ZMQU5fRFNUXHRcdFwiMTAuNi4wLjJcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX0dXXHRcdFwiMTAuNS4wLjFcIlxuKyNkZWZpbmUgSVBWNl9WTEFOX0lGQUNFX0FERFJcdFwiZmQwMjo6MjU0XCJcbisjZGVmaW5lIElQVjZfVkxBTl9FR1JFU1NfRFNUXHRcImZkMDI6OjJcIlxuKyNkZWZpbmUgSVBWNl9WTEFOX0RTVFx0XHRcImZkMDM6OjJcIlxuKyNkZWZpbmUgSVBWNl9WTEFOX0dXXHRcdFwiZmQwMjo6MVwiXG4rI2RlZmluZSBWTEFOX1ZJRF9VTlVTRURcdFx0OTk5XG4rI2RlZmluZSBWUkZfSUZBQ0VcdFx0XCJ2cmYtYmx1ZVwiXG4rI2RlZmluZSBWUkZfVEFCTEVcdFx0XCIxMDAwXCJcbisjZGVmaW5lIFZSRl9WTEFOX0lEXHRcdDEwMVxuKyNkZWZpbmUgVlJGX1ZMQU5fSUZBQ0VcdFx0XCJ2ZXRoMS4xMDFcIlxuKyNkZWZpbmUgSVBWNF9WUkZfSUZBQ0VfQUREUlx0XCIxMC44LjAuMjU0XCJcbisjZGVmaW5lIElQVjRfVlJGX0dXXHRcdFwiMTAuOC4wLjFcIlxuKyNkZWZpbmUgSVBWNF9WUkZfRFNUXHRcdFwiMTAuOS4wLjJcIlxuKyNkZWZpbmUgVEJJRF9WTEFOX0lEXHRcdDUwXG4rI2RlZmluZSBUQklEX1ZMQU5fSUZBQ0VcdFx0XCJ2ZXRoMi41MFwiXG4rI2RlZmluZSBJUFY0X1RCSURfVkxBTl9EU1RcdFwiMTcyLjIuMC4yXCJcbisjZGVmaW5lIElQVjRfQk9ORF9WTEFOX0RTVFx0XCIxMC4xMS4wLjJcIlxuKyNkZWZpbmUgSVBWNF9WTEFOX01UVV9EU1RcdFwiMTAuNS45LjJcIlxuKyNkZWZpbmUgUUlOUV9BRF9WTEFOX0lEXHRcdDIwMFxuKyNkZWZpbmUgUUlOUV9JTk5FUl9WTEFOX0lEXHQzMDBcbisjZGVmaW5lIEJPTkRfSUZBQ0VcdFx0XCJib25kOTlcIlxuKyNkZWZpbmUgQk9ORF9QT1JUXHRcdFwidmV0aDNcIlxuKyNkZWZpbmUgQk9ORF9QT1JUX1BFRVJcdFx0XCJ2ZXRoNFwiXG4rI2RlZmluZSBCT05EX1ZMQU5fSURcdFx0NTAwXG4gI2RlZmluZSBETUFDXHRcdFx0XCIxMToxMToxMToxMToxMToxMVwiXG4gI2RlZmluZSBETUFDX0lOSVQgeyAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCAweDExLCB9XG4gI2RlZmluZSBETUFDMlx0XHRcdFwiMDE6MDE6MDE6MDE6MDE6MDFcIlxuQEAgLTUyLDYgKzg5LDE3IEBAIHN0cnVjdCBmaWJfbG9va3VwX3Rlc3Qge1xuIFx0X191MzIgdGJpZDtcbiBcdF9fdTggZG1hY1s2XTtcbiBcdF9fdTMyIG1hcms7XG4rXHQvKlxuK1x0ICogaW5wdXQgdGFnIHdpdGggQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVDsgZXhwZWN0ZWQgb3V0cHV0IHRhZ1xuK1x0ICogd2l0aCBCUEZfRklCX0xPT0tVUF9WTEFOIChjaGVja2VkIHdoZW4gY2hlY2tfdmxhbiBpcyBzZXQpXG4rXHQgKi9cbitcdF9fdTE2IHZsYW5fcHJvdG87XG4rXHRfX3UxNiB2bGFuX2lkO1xuK1x0Ym9vbCBjaGVja192bGFuO1xuK1x0Y29uc3QgY2hhciAqZXhwZWN0ZWRfZGV2OyAvKiBleHBlY3RlZCBwYXJhbXMtXHUwMDNlaWZpbmRleCBhZnRlciBsb29rdXAgKi9cbitcdGNvbnN0IGNoYXIgKmlpZjtcdCAgLyogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmV0aDEgaW5wdXQgZGV2aWNlICovXG4rXHRfX3UxNiB0b3RfbGVuO1x0XHQgIC8qIHRyaWdnZXJzIHRoZSBpbi1sb29rdXAgbXR1IGNoZWNrIHdoZW4gc2V0ICovXG4rXHRfX3UxNiBleHBlY3RlZF9tdHU7XHQgIC8qIGV4cGVjdGVkIG10dV9yZXN1bHQgKHVuaW9uIHdpdGggdG90X2xlbikgKi9cbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XG5AQCAtNzksNiArMTI3LDE3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX2xvb2t1cF90ZXN0IHRlc3RzW10gPSB7XG4gXHQgIC5kYWRkciA9IElQVjRfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4gXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklELCAudGJpZCA9IDEwMCxcbiBcdCAgLmRtYWMgPSBETUFDX0lOSVQyLCB9LFxuK1x0LypcbitcdCAqIEFuIGVycm9yIHRoYXQgcmV0dXJucyBhZnRlciB0aGUgZWdyZXNzIGRldmljZSBpcyByZXNvbHZlZCBtdXN0XG4rXHQgKiByZXBvcnQgdGhlIGVncmVzcyBpZmluZGV4LCBub3QgdGhlIGlucHV0LiBUaGlzIHJvdXRlcyBmcm9tIGlucHV0XG4rXHQgKiB2ZXRoMSB2aWEgdmV0aDIgKHRhYmxlIDEwMCkgdG8gYSBkc3Qgd2l0aCBubyBuZWlnaGJvdXIsIHNvXG4rXHQgKiBpbnB1dCAhPSBlZ3Jlc3MsIHBpbm5pbmcgTk9fTkVJR0ggdG8gdGhlIGVncmVzcyBkZXZpY2UuXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgTk9fTkVJR0ggcmVwb3J0cyB0aGUgZWdyZXNzIGlmaW5kZXgsIG5vdCB0aGUgaW5wdXRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9UQklEX05PTkVJR0hfRFNULFxuK1x0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT19ORUlHSCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsIC50YmlkID0gMTAwLFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMlwiLCB9LFxuIFx0eyAuZGVzYyA9IFwiSVB2NiBUQklEIGxvb2t1cCBmYWlsdXJlXCIsXG4gXHQgIC5kYWRkciA9IElQVjZfVEJJRF9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbiBcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX0RJUkVDVCB8IEJQRl9GSUJfTE9PS1VQX1RCSUQsXG5AQCAtMTQyLDYgKzIwMSwyMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWJfbG9va3VwX3Rlc3QgdGVzdHNbXSA9IHtcbiBcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfR1cxLFxuIFx0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbiBcdCAgLm1hcmsgPSBNQVJLLCB9LFxuK1x0LyogdmxhbiBlZ3Jlc3MgcmVzb2x1dGlvbiAqL1xuK1x0LypcbitcdCAqIEludmFyaWFudCB0aGUgVkxBTi1lZ3Jlc3MgYXJtcyBqb2ludGx5IGVuZm9yY2U6IGFcbitcdCAqIEJQRl9GSUJfTE9PS1VQX1ZMQU4gU1VDQ0VTUyBhbHdheXMgY2FycmllcyBhIHBoeXNpY2FsLFxuK1x0ICogeG1pdC1jYXBhYmxlIGlmaW5kZXg7IG5vIFNVQ0NFU1MgZXZlciByZXR1cm5zIGEgVkxBTi1kZXZpY2VcbitcdCAqIGlmaW5kZXguIFJlZHVjaWJsZSBhcm1zIHBpbiBpZmluZGV4ID09IHRoZSBwaHlzaWNhbCBwYXJlbnQ7IHRoZVxuK1x0ICogUWluUSBhbmQgZm9yZWlnbi1uZXRucyBhcm1zIHBpbiBWTEFOX0ZBSUxVUkUgd2l0aCBwYXJhbXMtXHUwMDNlaWZpbmRleFxuK1x0ICogbGVmdCBhdCB0aGUgaW5wdXQsIHNvIGEgcmVncmVzc2lvbiB0byBiZXN0LWVmZm9ydCAoU1VDQ0VTUyArIHRoZVxuK1x0ICogVkxBTiBpZmluZGV4KSBmYWlscyBvbmUuXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIG5vIGZsYWdcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gVkxBTl9JRkFDRSwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgc2luZ2xlIFZMQU5cIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHQvKlxuK1x0ICogc2tiIHBhdGggd2l0aG91dCB0b3RfbGVuOiBtdHVfcmVzdWx0IGlzIHRoZSBWTEFOIGRldmljZSdzIG10dVxuK1x0ICogKDE0MDApLCBub3QgdGhlIHBhcmVudCdzICgxNTAwKVxuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gZWdyZXNzLCBza2ItcGF0aCBtdHUgaXMgdGhlIFZMQU4gZGV2aWNlJ3Mgd2l0aG91dCB0aGUgZmxhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsIC5leHBlY3RlZF9tdHUgPSAxNDAwLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgZmxhZyBzZXQgYnV0IGVncmVzcyBpcyBub3QgYSBWTEFOXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfTlVEX0ZBSUxFRF9BRERSLCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIFFpblEgbm90IHJlZHVjaWJsZSAoVkxBTl9GQUlMVVJFKVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1FJTlFfRFNULFxuK1x0ICAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9WTEFOX0ZBSUxVUkUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBRaW5RIGVncmVzcyB3aXRob3V0IHRoZSBmbGFnIChlc2NhcGUgaGF0Y2gpXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfUUlOUV9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gUUlOUV9JTk5FUl9JRkFDRSwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjYgVkxBTiBlZ3Jlc3MsIHNpbmdsZSBWTEFOXCIsXG4rXHQgIC5kYWRkciA9IElQVjZfVkxBTl9FR1JFU1NfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgbmVpZ2hib3VyIG9uIHRoZSBWTEFOIGRldmljZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4sXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MgaW4gT1VUUFVUIG1vZGVcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0VHUkVTU19EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5paWYgPSBWTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfT1VUUFVUIHwgQlBGX0ZJQl9MT09LVVBfVkxBTiB8XG4rXHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3Mgb3ZlciBhIGJvbmRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9CT05EX1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBCT05EX0lGQUNFLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gQk9ORF9WTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcyB2aWEgVEJJRCB0YWJsZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1RCSURfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfCBCUEZfRklCX0xPT0tVUF9UQklEIHxcbitcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudGJpZCA9IDEwMCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDJcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFRCSURfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBlZ3Jlc3MsIHN1Y2Nlc3Mgd3JpdGVzIG10dV9yZXN1bHQgd2l0aCB0aGUgc3dhcFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fTVRVX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLnRvdF9sZW4gPSA1MDAsIC5leHBlY3RlZF9tdHUgPSAxMDAwLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGVncmVzcywgRlJBR19ORUVERUQgcmVwb3J0cyBtdHUsIHN3YXAgdW53cml0dGVuXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9NVFVfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9GUkFHX05FRURFRCxcbitcdCAgLnRvdF9sZW4gPSAxNDAwLCAuZXhwZWN0ZWRfbXR1ID0gMTAwMCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsIH0sXG4rXHQvKiB2bGFuIHRhZyBhcyBsb29rdXAgaW5wdXQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgbm8gZmxhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9HVzEsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NiBWTEFOIGlucHV0LCB0YWcgc2VsZWN0cyBzdWJpbnRlcmZhY2Ugcm91dGVcIixcbitcdCAgLmRhZGRyID0gSVBWNl9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjZfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFZMQU5fSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0IGFuZCBlZ3Jlc3MgY29tYmluZWRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVywgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIixcbitcdCAgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuK1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBuZWlnaGJvdXIgcmVzb2x2ZWQgb24gdGhlIHJvdXRlXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZMQU5fR1csIC5leHBlY3RlZF9kZXYgPSBWTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lELCAuZG1hYyA9IERNQUNfSU5JVDIsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIHN1YmludGVyZmFjZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfc3JjID0gSVBWNF9WTEFOX0lGQUNFX0FERFIsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU1JDIHxcbitcdFx0XHQgIEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdC8qXG4rXHQgKiBWUkY6IHRoZSByZXNvbHZlZCBzdWJpbnRlcmZhY2UgaXMgZW5zbGF2ZWQsIHNvIHRoZSBsM21kZXYgcnVsZVxuK1x0ICogKGZ1bGwgbG9va3VwKSBhbmQgbDNtZGV2X2ZpYl90YWJsZV9yY3UoKSAoRElSRUNUKSBtdXN0IHNlbGVjdFxuK1x0ICogdGhlIFZSRiB0YWJsZSBmcm9tIHRoZSByZXNvbHZlZCBpbmdyZXNzXG4rXHQgKi9cbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgVlJGIHN1YmludGVyZmFjZSwgbm8gZmxhZ1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X0dXMSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIHRhZyBzZWxlY3RzIFZSRiB0YWJsZVwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZSRl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX1NVQ0NFU1MsXG4rXHQgIC5leHBlY3RlZF9kc3QgPSBJUFY0X1ZSRl9HVywgLmV4cGVjdGVkX2RldiA9IFZSRl9WTEFOX0lGQUNFLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVlJGX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIERJUkVDVCB1c2VzIFZSRiB0YWJsZSBmcm9tIHJlc29sdmVkIGluZ3Jlc3NcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WUkZfRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9TVUNDRVNTLFxuK1x0ICAuZXhwZWN0ZWRfZHN0ID0gSVBWNF9WUkZfR1csIC5leHBlY3RlZF9kZXYgPSBWUkZfVkxBTl9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9ESVJFQ1QgfFxuK1x0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWUkZfVkxBTl9JRCwgfSxcbitcdC8qXG4rXHQgKiBmYWlsdXJlIGFybXMgYWxzbyBhc3NlcnQgcGFyYW1zIGlzIGxlZnQgdW50b3VjaGVkOiBpZmluZGV4IHN0aWxsXG4rXHQgKiBuYW1lcyB0aGUgcGh5c2ljYWwgZGV2aWNlIGFuZCB0aGUgaW5wdXQgdGFnIGJ5dGVzIHN1cnZpdmVcbitcdCAqL1xuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCBpbnZhbGlkIHByb3RvXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSAtRUlOVkFMLFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSAweDEyMzQsIC52bGFuX2lkID0gVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgdW5tYXRjaGVkIFZJRFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4rXHQgIC5leHBlY3RlZF9kZXYgPSBcInZldGgxXCIsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fVklEX1VOVVNFRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgc3ViaW50ZXJmYWNlIGRvd25cIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBWTEFOX0lEX0RPV04sIH0sXG4rXHQvKlxuK1x0ICogdGhlIHJlc29sdmVyIHJ1bnMgYmVmb3JlIHRoZSBmb3J3YXJkaW5nIGNoZWNrLCBzbyBvbiBkZXZpY2VzXG4rXHQgKiB3aXRoIGZvcndhcmRpbmcgb2ZmIEZXRF9ESVNBQkxFRCAobm90IE5PVF9GV0RFRCkgcHJvdmVzIHRoZSB0YWdcbitcdCAqIHJlc29sdmVkIHRvIHRoYXQgZGV2aWNlIGFuZCB0aGUgbG9va3VwIHVzZWQgaXQgYXMgaW5ncmVzc1xuK1x0ICovXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIDgwMi4xYWQgdGFnXCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFBRCwgLnZsYW5faWQgPSBRSU5RX0FEX1ZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIFBDUCBhbmQgREVJIGJpdHMgaWdub3JlZCBpbiBUQ0lcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUyxcbitcdCAgLmV4cGVjdGVkX2RzdCA9IElQVjRfVkxBTl9HVyxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IDB4ZTAwMCB8IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIGlubmVyIFFpblEgZGV2aWNlIGZyb20gVkxBTiBpZmluZGV4XCIsXG4rXHQgIC5kYWRkciA9IElQVjRfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX0ZXRF9ESVNBQkxFRCxcbitcdCAgLmlpZiA9IFFJTlFfT1VURVJfSUZBQ0UsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSBRSU5RX0lOTkVSX1ZMQU5fSUQsIH0sXG4rXHQvKlxuK1x0ICogYm9uZGluZzogdGhlIFZMQU5zIGxpdmUgb24gdGhlIG1hc3RlciwgYXMgb24gcmVjZWl2ZSwgd2hlcmUgdGhlXG4rXHQgKiBmcmFtZSBpcyBzdGVlcmVkIHRvIHRoZSBtYXN0ZXIgYmVmb3JlIFZMQU4gcHJvY2Vzc2luZzsgYSBwb3J0XG4rXHQgKiBpZmluZGV4IGRvZXMgbm90IG1hdGNoIChwb3J0cyBjYXJyeSB2aWQgc3RhdGUgYnV0IG5vIFZMQU4gZGV2cylcbitcdCAqL1xuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0LCB0YWcgb24gYm9uZCBtYXN0ZXIgcmVzb2x2ZXNcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfRldEX0RJU0FCTEVELFxuK1x0ICAuaWlmID0gQk9ORF9JRkFDRSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjQgVkxBTiBpbnB1dCwgdGFnIG9uIGJvbmQgcG9ydCBkb2VzIG5vdCBtYXRjaFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gQlBGX0ZJQl9MS1VQX1JFVF9OT1RfRldERUQsXG4rXHQgIC5paWYgPSBCT05EX1BPUlQsIC5leHBlY3RlZF9kZXYgPSBCT05EX1BPUlQsIC5jaGVja192bGFuID0gdHJ1ZSxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IEJPTkRfVkxBTl9JRCwgfSxcbitcdHsgLmRlc2MgPSBcIklQdjYgVkxBTiBpbnB1dCwgaW52YWxpZCBwcm90b1wiLFxuK1x0ICAuZGFkZHIgPSBJUFY2X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gMHgxMjM0LCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQsIFZJRCAwIHByaW9yaXR5IHRhZyBmYWlscyBjbG9zZWRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IEJQRl9GSUJfTEtVUF9SRVRfTk9UX0ZXREVELFxuK1x0ICAuZXhwZWN0ZWRfZGV2ID0gXCJ2ZXRoMVwiLCAuY2hlY2tfdmxhbiA9IHRydWUsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSCxcbitcdCAgLnZsYW5fcHJvdG8gPSBFVEhfUF84MDIxUSwgLnZsYW5faWQgPSAwLCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NiBWTEFOIGlucHV0LCB1bm1hdGNoZWQgVklEXCIsXG4rXHQgIC5kYWRkciA9IElQVjZfVkxBTl9EU1QsIC5leHBlY3RlZF9yZXQgPSBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbitcdCAgLmV4cGVjdGVkX2RldiA9IFwidmV0aDFcIiwgLmNoZWNrX3ZsYW4gPSB0cnVlLFxuK1x0ICAubG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTl9JTlBVVCB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0gsXG4rXHQgIC52bGFuX3Byb3RvID0gRVRIX1BfODAyMVEsIC52bGFuX2lkID0gVkxBTl9WSURfVU5VU0VELCB9LFxuK1x0eyAuZGVzYyA9IFwidW5rbm93biBmbGFnIGJpdCByZWplY3RlZFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmxvb2t1cF9mbGFncyA9ICgxIFx1MDAzY1x1MDAzYyAxNCkgfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdILCB9LFxuK1x0eyAuZGVzYyA9IFwiSVB2NCBWTEFOIGlucHV0IHJlamVjdGVkIHdpdGggVEJJRFwiLFxuK1x0ICAuZGFkZHIgPSBJUFY0X1ZMQU5fRFNULCAuZXhwZWN0ZWRfcmV0ID0gLUVJTlZBTCxcbitcdCAgLmxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQgfCBCUEZfRklCX0xPT0tVUF9UQklELFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4rXHR7IC5kZXNjID0gXCJJUHY0IFZMQU4gaW5wdXQgcmVqZWN0ZWQgd2l0aCBPVVRQVVRcIixcbitcdCAgLmRhZGRyID0gSVBWNF9WTEFOX0RTVCwgLmV4cGVjdGVkX3JldCA9IC1FSU5WQUwsXG4rXHQgIC5sb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHwgQlBGX0ZJQl9MT09LVVBfT1VUUFVULFxuK1x0ICAudmxhbl9wcm90byA9IEVUSF9QXzgwMjFRLCAudmxhbl9pZCA9IFZMQU5fSUQsIH0sXG4gfTtcbiBcbiBzdGF0aWMgaW50IHNldHVwX25ldG5zKHZvaWQpXG5AQCAtMjA0LDYgKzQ3NSwxMDUgQEAgc3RhdGljIGludCBzZXR1cF9uZXRucyh2b2lkKVxuIFx0U1lTKGZhaWwsIFwiaXAgcnVsZSBhZGQgcHJpbyAyIGZ3bWFyayAlZCBsb29rdXAgJXNcIiwgTUFSSywgTUFSS19UQUJMRSk7XG4gXHRTWVMoZmFpbCwgXCJpcCAtNiBydWxlIGFkZCBwcmlvIDIgZndtYXJrICVkIGxvb2t1cCAlc1wiLCBNQVJLLCBNQVJLX1RBQkxFKTtcbiBcbitcdC8qXG4rXHQgKiBTZXR1cCBmb3IgdmxhbiB0ZXN0czogYSBzdWJpbnRlcmZhY2UgZm9yIGVncmVzcyByZXNvbHV0aW9uIGFuZFxuK1x0ICogdGFnLWFzLWlucHV0LCBhIFFpblEgc3RhY2ssIGFuZCBhbiBpaWYgcnVsZSBzbyB0aGUgaW5wdXQgdGVzdHNcbitcdCAqIG9ic2VydmUgd2hpY2ggZGV2aWNlIHRoZSBsb29rdXAgdXNlZCBhcyBpbmdyZXNzLlxuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIGlkICVkXCIsXG4rXHQgICAgVkxBTl9JRkFDRSwgVkxBTl9JRCk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgVkxBTl9JRkFDRSk7XG4rXHQvKlxuK1x0ICogbG93ZXIgdGhhbiB0aGUgdmV0aDEgcGFyZW50ICgxNTAwKTogdGhlIHNrYi1wYXRoIG10dSBjaGVjayB1c2VzIHRoZVxuK1x0ICogRklCIHJlc3VsdCAoVkxBTikgZGV2aWNlLCBzbyBtdHVfcmVzdWx0IGlzIHRoaXMgdmFsdWUgd2l0aCBvclxuK1x0ICogd2l0aG91dCB0aGUgZWdyZXNzIHN3YXAsIHdoaWNoIHR3byBhcm1zIGJlbG93IHBpblxuK1x0ICovXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgbXR1IDE0MDBcIiwgVkxBTl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBhZGRyIGFkZCAlcy8yNCBkZXYgJXNcIiwgSVBWNF9WTEFOX0lGQUNFX0FERFIsIFZMQU5fSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgYWRkciBhZGQgJXMvNjQgZGV2ICVzIG5vZGFkXCIsIElQVjZfVkxBTl9JRkFDRV9BRERSLCBWTEFOX0lGQUNFKTtcbitcbitcdC8qXG4rXHQgKiBzdGF5cyBkb3duOiB0aGUgaW5wdXQgZmxhZyBtdXN0IHRyZWF0IGl0cyB0YWcgdGhlIHdheSByZWFsXG4rXHQgKiBpbmdyZXNzIHRyZWF0cyBhIGZyYW1lIGFycml2aW5nIG9uIGEgZG93biBWTEFOIGRldmljZSAoZHJvcClcbitcdCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwiLFxuK1x0ICAgIFZMQU5fSUZBQ0VfRE9XTiwgVkxBTl9JRF9ET1dOKTtcbitcbitcdGVyciA9IHdyaXRlX3N5c2N0bChcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1wiIFZMQU5fSUZBQ0UgXCIvZm9yd2FyZGluZ1wiLCBcIjFcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwid3JpdGVfc3lzY3RsKG5ldC5pcHY0LmNvbmYuXCIgVkxBTl9JRkFDRSBcIi5mb3J3YXJkaW5nKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZXJyID0gd3JpdGVfc3lzY3RsKFwiL3Byb2Mvc3lzL25ldC9pcHY2L2NvbmYvXCIgVkxBTl9JRkFDRSBcIi9mb3J3YXJkaW5nXCIsIFwiMVwiKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ3cml0ZV9zeXNjdGwobmV0LmlwdjYuY29uZi5cIiBWTEFOX0lGQUNFIFwiLmZvcndhcmRpbmcpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rIHZldGgxIG5hbWUgJXMgdHlwZSB2bGFuIHByb3RvIDgwMi4xYWQgaWQgMjAwXCIsXG4rXHQgICAgUUlOUV9PVVRFUl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMgdHlwZSB2bGFuIGlkIDMwMFwiLFxuK1x0ICAgIFFJTlFfT1VURVJfSUZBQ0UsIFFJTlFfSU5ORVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFFJTlFfT1VURVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIFFJTlFfSU5ORVJfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkICVzLzMyIGRldiAlc1wiLCBJUFY0X1FJTlFfRFNULCBRSU5RX0lOTkVSX0lGQUNFKTtcbitcbitcdFNZUyhmYWlsLCBcImlwIHJvdXRlIGFkZCAlcy8zMiB2aWEgJXNcIiwgSVBWNF9WTEFOX0RTVCwgSVBWNF9HVzEpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1wiLFxuK1x0ICAgIFZMQU5fVEFCTEUsIElQVjRfVkxBTl9EU1QsIElQVjRfVkxBTl9HVyk7XG4rXHRTWVMoZmFpbCwgXCJpcCBydWxlIGFkZCBwcmlvIDMgaWlmICVzIGxvb2t1cCAlc1wiLCBWTEFOX0lGQUNFLCBWTEFOX1RBQkxFKTtcbitcdFNZUyhmYWlsLCBcImlwIC02IHJvdXRlIGFkZCAlcy8xMjggdmlhICVzXCIsIElQVjZfVkxBTl9EU1QsIElQVjZfR1cxKTtcbitcdFNZUyhmYWlsLCBcImlwIC02IHJvdXRlIGFkZCB0YWJsZSAlcyAlcy8xMjggdmlhICVzXCIsXG4rXHQgICAgVkxBTl9UQUJMRSwgSVBWNl9WTEFOX0RTVCwgSVBWNl9WTEFOX0dXKTtcbitcdFNZUyhmYWlsLCBcImlwIC02IHJ1bGUgYWRkIHByaW8gMyBpaWYgJXMgbG9va3VwICVzXCIsIFZMQU5fSUZBQ0UsIFZMQU5fVEFCTEUpO1xuK1xuK1x0LyogYSBib25kIHdpdGggb25lIHBvcnQgYW5kIGEgVkxBTiBvbiB0aGUgYm9uZCAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgJXMgdHlwZSBib25kXCIsIEJPTkRfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgJXMgdHlwZSB2ZXRoIHBlZXIgbmFtZSAlc1wiLCBCT05EX1BPUlQsIEJPTkRfUE9SVF9QRUVSKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0ICVzIG1hc3RlciAlc1wiLCBCT05EX1BPUlQsIEJPTkRfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIEJPTkRfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzIHVwXCIsIEJPTkRfUE9SVCk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIGFkZCBsaW5rICVzIG5hbWUgJXMuJWQgdHlwZSB2bGFuIGlkICVkXCIsXG4rXHQgICAgQk9ORF9JRkFDRSwgQk9ORF9JRkFDRSwgQk9ORF9WTEFOX0lELCBCT05EX1ZMQU5fSUQpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBzZXQgZGV2ICVzLiVkIHVwXCIsIEJPTkRfSUZBQ0UsIEJPTkRfVkxBTl9JRCk7XG4rXHRTWVMoZmFpbCwgXCJpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzLiVkXCIsXG4rXHQgICAgSVBWNF9CT05EX1ZMQU5fRFNULCBCT05EX0lGQUNFLCBCT05EX1ZMQU5fSUQpO1xuK1xuK1x0LypcbitcdCAqIGEgVlJGIHdpdGggaXRzIG93biBkZWRpY2F0ZWQgc3ViaW50ZXJmYWNlICh0aGUgaWlmIHJ1bGVzIGFib3ZlXG4rXHQgKiBtdXN0IG5vdCBzZWUgaXQpLCBmb3IgdGhlIHRhYmxlLXNlbGVjdGlvbi1ieS1pbmdyZXNzIGNhc2VzXG4rXHQgKi9cbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkICVzIHR5cGUgdnJmIHRhYmxlICVzXCIsIFZSRl9JRkFDRSwgVlJGX1RBQkxFKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBWUkZfSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoMSBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwiLFxuK1x0ICAgIFZSRl9WTEFOX0lGQUNFLCBWUkZfVkxBTl9JRCk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCAlcyBtYXN0ZXIgJXNcIiwgVlJGX1ZMQU5fSUZBQ0UsIFZSRl9JRkFDRSk7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCBkZXYgJXMgdXBcIiwgVlJGX1ZMQU5fSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgYWRkciBhZGQgJXMvMjQgZGV2ICVzXCIsIElQVjRfVlJGX0lGQUNFX0FERFIsIFZSRl9WTEFOX0lGQUNFKTtcbitcdGVyciA9IHdyaXRlX3N5c2N0bChcIi9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1wiIFZSRl9WTEFOX0lGQUNFIFwiL2ZvcndhcmRpbmdcIiwgXCIxXCIpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcIndyaXRlX3N5c2N0bChuZXQuaXB2NC5jb25mLlwiIFZSRl9WTEFOX0lGQUNFIFwiLmZvcndhcmRpbmcpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRTWVMoZmFpbCwgXCJpcCByb3V0ZSBhZGQgJXMvMzIgdmlhICVzXCIsIElQVjRfVlJGX0RTVCwgSVBWNF9HVzEpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkIHRhYmxlICVzICVzLzMyIHZpYSAlc1wiLFxuK1x0ICAgIFZSRl9UQUJMRSwgSVBWNF9WUkZfRFNULCBJUFY0X1ZSRl9HVyk7XG4rXG4rXHQvKiBuZWlnaGJvdXJzIG9uIHRoZSBWTEFOIHN1YmludGVyZmFjZSBmb3IgdGhlIG5vbi1TS0lQX05FSUdIIGNhc2VzICovXG4rXHRlcnIgPSB3cml0ZV9zeXNjdGwoXCIvcHJvYy9zeXMvbmV0L2lwdjQvbmVpZ2gvXCIgVkxBTl9JRkFDRSBcIi9nY19zdGFsZV90aW1lXCIsIFwiOTAwXCIpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcIndyaXRlX3N5c2N0bChuZXQuaXB2NC5uZWlnaC5cIiBWTEFOX0lGQUNFIFwiLmdjX3N0YWxlX3RpbWUpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRTWVMoZmFpbCwgXCJpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGVcIixcbitcdCAgICBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgVkxBTl9JRkFDRSwgRE1BQyk7XG4rXHRTWVMoZmFpbCwgXCJpcCBuZWlnaCBhZGQgJXMgZGV2ICVzIGxsYWRkciAlcyBudWQgc3RhbGVcIixcbitcdCAgICBJUFY0X1ZMQU5fR1csIFZMQU5fSUZBQ0UsIERNQUMyKTtcbitcbitcdC8qIGEgVkxBTiBvbiB2ZXRoMiB3aXRoIGEgcm91dGUgaW4gdGhlIHRiaWQgdGVzdCB0YWJsZSAqL1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgbGluayB2ZXRoMiBuYW1lICVzIHR5cGUgdmxhbiBpZCAlZFwiLFxuK1x0ICAgIFRCSURfVkxBTl9JRkFDRSwgVEJJRF9WTEFOX0lEKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiAlcyB1cFwiLCBUQklEX1ZMQU5fSUZBQ0UpO1xuK1x0U1lTKGZhaWwsIFwiaXAgcm91dGUgYWRkIHRhYmxlIDEwMCAlcy8zMiBkZXYgJXNcIixcbitcdCAgICBJUFY0X1RCSURfVkxBTl9EU1QsIFRCSURfVkxBTl9JRkFDRSk7XG4rXG4rXHQvKiBhIGxvY2tlZC1tdHUgcm91dGUgdmlhIHRoZSBzdWJpbnRlcmZhY2UgZm9yIHRoZSBGUkFHX05FRURFRCBjYXNlICovXG4rXHRTWVMoZmFpbCwgXCJpcCByb3V0ZSBhZGQgJXMvMzIgZGV2ICVzIG10dSBsb2NrIDEwMDBcIixcbitcdCAgICBJUFY0X1ZMQU5fTVRVX0RTVCwgVkxBTl9JRkFDRSk7XG4rXG4gXHRyZXR1cm4gMDtcbiBmYWlsOlxuIFx0cmV0dXJuIC0xO1xuQEAgLTIxOCw5ICs1ODgsMTYgQEAgc3RhdGljIGludCBzZXRfbG9va3VwX3BhcmFtcyhzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbiBcdG1lbXNldChwYXJhbXMsIDAsIHNpemVvZigqcGFyYW1zKSk7XG4gXG4gXHRwYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbi1cdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gaWZpbmRleDtcbitcdHBhcmFtcy1cdTAwM2VpZmluZGV4ID0gdGVzdC1cdTAwM2VpaWYgPyBpZl9uYW1ldG9pbmRleCh0ZXN0LVx1MDAzZWlpZikgOiBpZmluZGV4O1xuIFx0cGFyYW1zLVx1MDAzZXRiaWQgPSB0ZXN0LVx1MDAzZXRiaWQ7XG4gXHRwYXJhbXMtXHUwMDNlbWFyayA9IHRlc3QtXHUwMDNlbWFyaztcbitcdHBhcmFtcy1cdTAwM2V0b3RfbGVuID0gdGVzdC1cdTAwM2V0b3RfbGVuO1xuK1xuK1x0LyogaF92bGFuX3Byb3RvL2hfdmxhbl9UQ0kgdW5pb24gd2l0aCB0YmlkICovXG4rXHRpZiAodGVzdC1cdTAwM2Vsb29rdXBfZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVQpIHtcbitcdFx0cGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IGh0b25zKHRlc3QtXHUwMDNldmxhbl9wcm90byk7XG4rXHRcdHBhcmFtcy1cdTAwM2VoX3ZsYW5fVENJID0gaHRvbnModGVzdC1cdTAwM2V2bGFuX2lkKTtcbitcdH1cbiBcbiBcdGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHRlc3QtXHUwMDNlZGFkZHIsIHBhcmFtcy1cdTAwM2VpcHY2X2RzdCkgPT0gMSkge1xuIFx0XHRwYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDY7XG5AQCAtMjk4LDcgKzY3NSw3IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4gXHRzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTtcbiBcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsO1xuLVx0aW50IHByb2dfZmQsIGVyciwgcmV0LCBpO1xuK1x0aW50IHByb2dfZmQsIHhkcF9mZCwgZXJyLCByZXQsIGk7XG4gXG4gXHQvKiBUaGUgdGVzdCBkb2VzIG5vdCB1c2UgdGhlIHNrYi1cdTAwM2VkYXRhLCBzb1xuIFx0ICogdXNlIHBrdF92NiBmb3IgYm90aCB2NiBhbmQgdjQgdGVzdC5cbkBAIC0zMDksMTEgKzY4NiwxNiBAQCB2b2lkIHRlc3RfZmliX2xvb2t1cCh2b2lkKVxuIFx0XHQgICAgLmN0eF9pbiA9IFx1MDAyNnNrYixcbiBcdFx0ICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihza2IpLFxuIFx0KTtcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB4ZHBfb3B0cyxcbitcdFx0ICAgIC5kYXRhX2luID0gXHUwMDI2cGt0X3Y2LFxuK1x0XHQgICAgLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjYpLFxuK1x0KTtcbiBcbiBcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5fYW5kX2xvYWRcIikpXG4gXHRcdHJldHVybjtcbiBcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwKTtcbitcdHhkcF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmZpYl9sb29rdXBfeGRwKTtcbiBcbiBcdFNZUyhmYWlsLCBcImlwIG5ldG5zIGFkZCAlc1wiLCBOU19URVNUKTtcbiBcbkBAIC0zNDMsNiArNzI1LDE2IEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfcHJvZ190ZXN0X3J1bl9vcHRzXCIpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIGlzIFhEUC1vbmx5OyB0aGUgdGMgaGVscGVyIHJlamVjdHMgaXQuXG4rXHRcdCAqIFRoZXNlIGNhc2VzIGFyZSBleGVyY2lzZWQgb24gdGhlIFhEUCBwYXRoIGJlbG93LlxuK1x0XHQgKi9cbitcdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikge1xuK1x0XHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgLUVJTlZBTCxcbitcdFx0XHRcdCAgXCJ0YyByZWplY3RzIEJQRl9GSUJfTE9PS1VQX1ZMQU5cIik7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0LCB0ZXN0c1tpXS5leHBlY3RlZF9yZXQsXG4gXHRcdFx0ICBcImZpYl9sb29rdXBfcmV0XCIpO1xuIFxuQEAgLTM1Miw2ICs3NDQsMjEgQEAgdm9pZCB0ZXN0X2ZpYl9sb29rdXAodm9pZClcbiBcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RzdClcbiBcdFx0XHRhc3NlcnRfZHN0X2lwKGZpYl9wYXJhbXMsIHRlc3RzW2ldLmV4cGVjdGVkX2RzdCk7XG4gXG4rXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpXG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCxcbitcdFx0XHRcdCAgaWZfbmFtZXRvaW5kZXgodGVzdHNbaV0uZXhwZWN0ZWRfZGV2KSwgXCJpZmluZGV4XCIpO1xuK1xuK1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfbXR1KVxuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZW10dV9yZXN1bHQsIHRlc3RzW2ldLmV4cGVjdGVkX210dSxcbitcdFx0XHRcdCAgXCJtdHVfcmVzdWx0XCIpO1xuK1xuK1x0XHRpZiAodGVzdHNbaV0uY2hlY2tfdmxhbikge1xuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byxcbitcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9wcm90byksIFwiaF92bGFuX3Byb3RvXCIpO1xuK1x0XHRcdEFTU0VSVF9FUShmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9UQ0ksXG4rXHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5faWQpLCBcImhfdmxhbl9UQ0lcIik7XG4rXHRcdH1cbitcbiBcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbiBcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCAwLCBcImRtYWMgbm90IG1hdGNoXCIpKSB7XG4gXHRcdFx0Y2hhciBleHBlY3RlZFsxOF0sIGFjdHVhbFsxOF07XG5AQCAtMzYxLDE1ICs3NjgsMzEyIEBAIHZvaWQgdGVzdF9maWJfbG9va3VwKHZvaWQpXG4gXHRcdFx0cHJpbnRmKFwiZG1hYyBleHBlY3RlZCAlcyBhY3R1YWwgJXMgXCIsIGV4cGVjdGVkLCBhY3R1YWwpO1xuIFx0XHR9XG4gXG4tXHRcdC8vIGVuc3VyZSB0YmlkIGlzIHplcm8nZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC5cbi1cdFx0aWYgKHRlc3RzW2ldLmxvb2t1cF9mbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfRElSRUNUKSB7XG4rXHRcdC8qXG4rXHRcdCAqIGVuc3VyZSB0YmlkIGlzIHplcm8nZCBvdXQgYWZ0ZXIgZmliIGxvb2t1cC4gV2l0aFxuK1x0XHQgKiBCUEZfRklCX0xPT0tVUF9WTEFOIHRoZSB1bmlvbiBob2xkcyB0aGUgcGFja2VkIHZsYW5cbitcdFx0ICogZmllbGRzIGluc3RlYWQsIHNvIHNraXAgdGhlIGNoZWNrIGZvciB0aG9zZS5cbitcdFx0ICovXG4rXHRcdGlmICgodGVzdHNbaV0ubG9va3VwX2ZsYWdzIFx1MDAyNiBCUEZfRklCX0xPT0tVUF9ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgISh0ZXN0c1tpXS5sb29rdXBfZmxhZ3MgXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pKSB7XG4gXHRcdFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcy50YmlkLCAwLFxuIFx0XHRcdFx0XHRcImV4cGVjdGVkIGZpYl9wYXJhbXMudGJpZCB0byBiZSB6ZXJvXCIpKVxuIFx0XHRcdFx0Z290byBmYWlsO1xuIFx0XHR9XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogUmUtcnVuIHRoZSBjYXNlcyB0aHJvdWdoIGJwZl94ZHBfZmliX2xvb2t1cCgpLiB0ZXN0X3J1biB1c2VzIHRoZVxuK1x0ICogY3VycmVudCBuZXRucycgbG9vcGJhY2sgZm9yIGN0eC1cdTAwM2VyeHEtXHUwMDNlZGV2LCBzbyBkZXZfbmV0KCkgaXMgTlNfVEVTVFxuK1x0ICogYW5kIHRoZSBsb29rdXAgcnVucyBhZ2FpbnN0IGl0cyBGSUIuIFRoZSBwYXRoLWluZGVwZW5kZW50IHJlc3VsdHNcbitcdCAqIChyZXR1cm4gY29kZSwgc3dhcHBlZCBpZmluZGV4LCB2bGFuIHRhZywgZ2F0ZXdheSkgbXVzdCBtYXRjaCB0aGUgc2tiXG4rXHQgKiBwYXRoOyB0aGUgbm8tdG90X2xlbiBtdHVfcmVzdWx0IGlzIHNrYi1zcGVjaWZpYyBhbmQgbm90IHJlY2hlY2tlZC5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0ZXN0cyk7IGkrKykge1xuK1x0XHRpZiAoc2V0X2xvb2t1cF9wYXJhbXMoZmliX3BhcmFtcywgXHUwMDI2dGVzdHNbaV0sIHNrYi5pZmluZGV4KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbitcdFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gdGVzdHNbaV0ubG9va3VwX2ZsYWdzO1xuK1xuK1x0XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHhkcF9mZCwgXHUwMDI2eGRwX29wdHMpO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwieGRwIHRlc3RfcnVuXCIpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VmaWJfbG9va3VwX3JldCwgdGVzdHNbaV0uZXhwZWN0ZWRfcmV0LFxuK1x0XHRcdCAgICAgICBcInhkcCBmaWJfbG9va3VwX3JldFwiKSlcbitcdFx0XHRwcmludGYoXCIoeGRwKSAlc1xcblwiLCB0ZXN0c1tpXS5kZXNjKTtcbitcbitcdFx0aWYgKHRlc3RzW2ldLmV4cGVjdGVkX2RldilcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4LFxuK1x0XHRcdFx0ICBpZl9uYW1ldG9pbmRleCh0ZXN0c1tpXS5leHBlY3RlZF9kZXYpLFxuK1x0XHRcdFx0ICBcInhkcCBpZmluZGV4XCIpO1xuK1xuK1x0XHRpZiAodGVzdHNbaV0uZXhwZWN0ZWRfZHN0KVxuK1x0XHRcdGFzc2VydF9kc3RfaXAoZmliX3BhcmFtcywgdGVzdHNbaV0uZXhwZWN0ZWRfZHN0KTtcbitcbitcdFx0aWYgKHRlc3RzW2ldLmNoZWNrX3ZsYW4pIHtcbitcdFx0XHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VoX3ZsYW5fcHJvdG8sXG4rXHRcdFx0XHQgIGh0b25zKHRlc3RzW2ldLnZsYW5fcHJvdG8pLCBcInhkcCBoX3ZsYW5fcHJvdG9cIik7XG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSxcbitcdFx0XHRcdCAgaHRvbnModGVzdHNbaV0udmxhbl9pZCksIFwieGRwIGhfdmxhbl9UQ0lcIik7XG4rXHRcdH1cbitcbitcdFx0cmV0ID0gbWVtY21wKHRlc3RzW2ldLmRtYWMsIGZpYl9wYXJhbXMtXHUwMDNlZG1hYywgc2l6ZW9mKHRlc3RzW2ldLmRtYWMpKTtcbitcdFx0QVNTRVJUX0VRKHJldCwgMCwgXCJ4ZHAgZG1hY1wiKTtcbitcbitcdFx0LypcbitcdFx0ICogbXR1X3Jlc3VsdCBmcm9tIGEgdG90X2xlbiBsb29rdXAgaXMgdGhlIHJvdXRlIG10dSBhbmQgaXNcbitcdFx0ICogcGF0aC1pbmRlcGVuZGVudDsgdGhlIG5vLXRvdF9sZW4gYXJtIHJlYWRzIGRldi1cdTAwM2VtdHUgYW5kIGlzXG4rXHRcdCAqIHNrYi1vbmx5LCBzbyBnYXRlIG9uIHRvdF9sZW5cbitcdFx0ICovXG4rXHRcdGlmICh0ZXN0c1tpXS5leHBlY3RlZF9tdHUgXHUwMDI2XHUwMDI2IHRlc3RzW2ldLnRvdF9sZW4pXG4rXHRcdFx0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlbXR1X3Jlc3VsdCwgdGVzdHNbaV0uZXhwZWN0ZWRfbXR1LFxuK1x0XHRcdFx0ICBcInhkcCBtdHVfcmVzdWx0XCIpO1xuK1x0fVxuK1xuK2ZhaWw6XG4rXHRpZiAobnN0b2tlbilcbitcdFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIE5TX1RFU1QpO1xuK1x0ZmliX2xvb2t1cF9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rI2RlZmluZSBOU19WTEFOX0FcdFwiZmliX2xvb2t1cF92bGFuX25zX2FcIlxuKyNkZWZpbmUgTlNfVkxBTl9CXHRcImZpYl9sb29rdXBfdmxhbl9uc19iXCJcbitcbisvKlxuKyAqIEEgVkxBTiBkZXZpY2UgY2FuIGJlIG1vdmVkIHRvIGFub3RoZXIgbmV0bnMgd2hpbGUgc3RheWluZyByZWdpc3RlcmVkXG4rICogb24gaXRzIHBhcmVudC4gTmVpdGhlciBkaXJlY3Rpb24gbWF5IHRoZW4gY3Jvc3MgdGhlIGJvdW5kYXJ5OiB0aGVcbisgKiBlZ3Jlc3MgZmxhZyBtdXN0IG5vdCBwdWJsaXNoIHRoZSBmb3JlaWduIHBhcmVudCdzIGlmaW5kZXgsIGFuZCB0aGVcbisgKiBpbnB1dCBmbGFnIG11c3QgZmFpbCBjbG9zZWQgcmF0aGVyIHRoYW4gdXNlIGEgZm9yZWlnbiBpbmdyZXNzLlxuKyAqL1xuK3ZvaWQgdGVzdF9maWJfbG9va3VwX3ZsYW5fbmV0bnModm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4rXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4rXHRzdHJ1Y3QgX19za19idWZmIHNrYiA9IHsgfTtcbitcdHN0cnVjdCBmaWJfbG9va3VwICpza2VsID0gTlVMTDtcbitcdGludCBwcm9nX2ZkLCB4ZHBfZmQsIGVyciwgcGFyZW50X2lkeCwgdmxhbl9pZHg7XG4rXG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgcnVuX29wdHMsXG4rXHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NixcbitcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbitcdFx0ICAgIC5jdHhfaW4gPSBcdTAwMjZza2IsXG4rXHRcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2Yoc2tiKSxcbitcdCk7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgeGRwX29wdHMsXG4rXHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NixcbitcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y2KSxcbitcdCk7XG4rXG4rXHRza2VsID0gZmliX2xvb2t1cF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbCBvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cCk7XG4rXHR4ZHBfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5maWJfbG9va3VwX3hkcCk7XG4rXHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbitcbitcdFNZUyhmYWlsLCBcImlwIG5ldG5zIGFkZCAlc1wiLCBOU19WTEFOX0EpO1xuK1x0U1lTKGZhaWwsIFwiaXAgbmV0bnMgYWRkICVzXCIsIE5TX1ZMQU5fQik7XG4rXG4rXHRuc3Rva2VuID0gb3Blbl9uZXRucyhOU19WTEFOX0EpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3Blbl9uZXRucyhhKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0U1lTKGZhaWwsIFwiaXAgbGluayBhZGQgdmV0aDcgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoOFwiKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiB2ZXRoNyB1cFwiKTtcbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgYWRkIGxpbmsgdmV0aDcgbmFtZSB2ZXRoNy42NiB0eXBlIHZsYW4gaWQgNjZcIik7XG4rXHRTWVMoZmFpbCwgXCJpcCBsaW5rIHNldCB2ZXRoNy42NiBuZXRucyAlc1wiLCBOU19WTEFOX0IpO1xuK1xuK1x0cGFyZW50X2lkeCA9IGlmX25hbWV0b2luZGV4KFwidmV0aDdcIik7XG4rXHRpZiAoIUFTU0VSVF9ORVEocGFyZW50X2lkeCwgMCwgXCJpZl9uYW1ldG9pbmRleCh2ZXRoNylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qXG4rXHQgKiBpbnB1dDogdGhlIG1vdmVkIGRldmljZSBpcyBzdGlsbCBpbiB2ZXRoNydzIFZMQU4gZ3JvdXAsIGJ1dCBpdFxuK1x0ICogbGl2ZXMgaW4gYW5vdGhlciBuZXRucywgc28gdGhlIGxvb2t1cCBtdXN0IGZhaWwgY2xvc2VkXG4rXHQgKi9cbitcdHNrYi5pZmluZGV4ID0gcGFyZW50X2lkeDtcbitcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbitcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHBhcmVudF9pZHg7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWhfdmxhbl9wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTtcbitcdGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSA9IGh0b25zKDY2KTtcbitcdGlmICghQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBcIjEwLjY2LjAuMlwiLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfZHN0KSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKGRzdClcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0ID0gLTE7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vsb29rdXBfZmxhZ3MgPSBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUIHxcbitcdFx0XHRcdCAgQlBGX0ZJQl9MT09LVVBfU0tJUF9ORUlHSDtcbitcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXHUwMDI2cnVuX29wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInRlc3RfcnVuKGlucHV0KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZpYl9sb29rdXBfcmV0LCBCUEZfRklCX0xLVVBfUkVUX05PVF9GV0RFRCxcbitcdFx0ICBcImlucHV0IGFjcm9zcyBuZXRucyBmYWlscyBjbG9zZWRcIik7XG4rXHRBU1NFUlRfRVEoZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4LCBwYXJlbnRfaWR4LCBcImlmaW5kZXggdW50b3VjaGVkXCIpO1xuK1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSwgaHRvbnMoNjYpLCBcInRhZyB1bnRvdWNoZWRcIik7XG4rXG4rXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1ZMQU5fQik7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCJvcGVuX25ldG5zKGIpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHQvKlxuK1x0ICogZWdyZXNzOiB0aGUgZmliIHJlc3VsdCBpcyB0aGUgVkxBTiBkZXZpY2UgaGVyZSwgYnV0IGl0cyBwYXJlbnRcbitcdCAqIGlzIGluIHRoZSBvdGhlciBuZXRucywgc28gdGhlIHN3YXAgbXVzdCBub3QgaGFwcGVuXG4rXHQgKi9cbitcdFNZUyhmYWlsLCBcImlwIGxpbmsgc2V0IGRldiB2ZXRoNy42NiB1cFwiKTtcbitcdFNZUyhmYWlsLCBcImlwIGFkZHIgYWRkIDEwLjY2LjAuMS8yNCBkZXYgdmV0aDcuNjZcIik7XG4rXHRlcnIgPSB3cml0ZV9zeXNjdGwoXCIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNy42Ni9mb3J3YXJkaW5nXCIsIFwiMVwiKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ3cml0ZV9zeXNjdGwoZm9yd2FyZGluZylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHZsYW5faWR4ID0gaWZfbmFtZXRvaW5kZXgoXCJ2ZXRoNy42NlwiKTtcbitcdGlmICghQVNTRVJUX05FUSh2bGFuX2lkeCwgMCwgXCJpZl9uYW1ldG9pbmRleCh2ZXRoNy42NilcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdG1lbXNldChmaWJfcGFyYW1zLCAwLCBzaXplb2YoKmZpYl9wYXJhbXMpKTtcbitcdGZpYl9wYXJhbXMtXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlbDRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDtcbitcdGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCA9IHZsYW5faWR4O1xuK1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwiMTAuNjYuMC4yXCIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9kc3QpLFxuK1x0XHQgICAgICAgMSwgXCJpbmV0X3B0b24oZHN0KVwiKSB8fFxuK1x0ICAgICFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIFwiMTAuNjYuMC4xXCIsIFx1MDAyNmZpYl9wYXJhbXMtXHUwMDNlaXB2NF9zcmMpLFxuK1x0XHQgICAgICAgMSwgXCJpbmV0X3B0b24oc3JjKVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQgPSAtMTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfFxuK1x0XHRcdFx0ICBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh4ZHBfZmQsIFx1MDAyNnhkcF9vcHRzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X3J1bihlZ3Jlc3MpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX2xvb2t1cF9yZXQsIEJQRl9GSUJfTEtVUF9SRVRfVkxBTl9GQUlMVVJFLFxuK1x0XHQgIFwiZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFXCIpO1xuK1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaWZpbmRleCwgdmxhbl9pZHgsXG4rXHRcdCAgXCJmb3JlaWduIHBhcmVudCBub3QgcHVibGlzaGVkXCIpO1xuK1x0QVNTRVJUX0VRKGZpYl9wYXJhbXMtXHUwMDNlaF92bGFuX1RDSSwgMCwgXCJ2bGFuIGZpZWxkcyB6ZXJvXCIpO1xuK1xuK2ZhaWw6XG4rXHRpZiAobnN0b2tlbilcbitcdFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIE5TX1ZMQU5fQSk7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIE5TX1ZMQU5fQik7XG4rXHRmaWJfbG9va3VwX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisjZGVmaW5lIFJFRElSRUNUX05QS1RTIDEwMDBcbitcbisvKlxuKyAqIFRoZSBlZ3Jlc3MgZmxhZyBleGlzdHMgc28gYW4gWERQIHByb2dyYW0gY2FuIHJlZGlyZWN0IHRvIHRoZSBwaHlzaWNhbFxuKyAqIHBhcmVudC4gQSByZWRpcmVjdCB0aGF0IGxhbmRzIG9uIGEgVkxBTiBkZXZpY2UgaXMgZHJvcHBlZCBhdFxuKyAqIHhkcF9kb19mbHVzaCgpLCBiZWNhdXNlIGEgVkxBTiBkZXZpY2UgaGFzIG5vIG5kb194ZHBfeG1pdC4gRHJpdmUgcmVhbFxuKyAqIGZyYW1lcyB3aXRoIEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLCB3aGljaCBydW5zIHRoZSBuYXRpdmVcbisgKiB4ZHBfZG9fcmVkaXJlY3QoKSArIHhkcF9kb19mbHVzaCgpIHBhdGg6IGEgcmVkdWNpYmxlIFZMQU4gZWdyZXNzXG4rICogcmVzb2x2ZXMgdG8gdmV0aDEgYW5kIGlzIGRlbGl2ZXJlZCB0byBpdHMgcGVlciB2ZXRoMiwgd2hpbGUgYSBRaW5RXG4rICogZWdyZXNzIHJldHVybnMgVkxBTl9GQUlMVVJFIGFuZCBpcyBwYXNzZWQgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2ZcbisgKiByZWRpcmVjdGVkIHRvIGEgZGV2aWNlIHRoYXQgd291bGQgc2lsZW50bHkgZHJvcCBpdC5cbisgKi9cbit2b2lkIHRlc3RfZmliX2xvb2t1cF92bGFuX3JlZGlyZWN0KHZvaWQpXG4re1xuK1x0aW50IHJlZGlyZWN0X2ZkLCBlcnIsIHZldGgxX2lkeCwgdmV0aDJfaWR4ID0gLTE7XG4rXHRzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKmZpYl9wYXJhbXM7XG4rXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4rXHRzdHJ1Y3QgZmliX2xvb2t1cCAqc2tlbCA9IE5VTEw7XG4rXHRib29sIHhkcF9hdHRhY2hlZCA9IGZhbHNlO1xuK1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIGxmX29wdHMsXG4rXHRcdCAgICAuZGF0YV9pbiA9IFx1MDAyNnBrdF92NCxcbitcdFx0ICAgIC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcbitcdFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfWERQX0xJVkVfRlJBTUVTLFxuK1x0XHQgICAgLnJlcGVhdCA9IFJFRElSRUNUX05QS1RTLFxuK1x0KTtcbitcbitcdHNrZWwgPSBmaWJfbG9va3VwX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsIG9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcdHJlZGlyZWN0X2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZmliX2xvb2t1cF9yZWRpcmVjdCk7XG4rXHRmaWJfcGFyYW1zID0gXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmliX3BhcmFtcztcbitcbitcdFNZUyhmYWlsLCBcImlwIG5ldG5zIGFkZCAlc1wiLCBOU19URVNUKTtcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3Blbl9uZXRuc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0aWYgKHNldHVwX25ldG5zKCkpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHZldGgxX2lkeCA9IGlmX25hbWV0b2luZGV4KFwidmV0aDFcIik7XG4rXHR2ZXRoMl9pZHggPSBpZl9uYW1ldG9pbmRleChcInZldGgyXCIpO1xuK1x0aWYgKCFBU1NFUlRfTkVRKHZldGgxX2lkeCwgMCwgXCJpZl9uYW1ldG9pbmRleCh2ZXRoMSlcIikgfHxcbitcdCAgICAhQVNTRVJUX05FUSh2ZXRoMl9pZHgsIDAsIFwiaWZfbmFtZXRvaW5kZXgodmV0aDIpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4rXHQvKlxuK1x0ICogQSByZWRpcmVjdCB0byB2ZXRoMSBpcyBkZWxpdmVyZWQgdG8gaXRzIHBlZXIgdmV0aDIuIHZldGhfeGRwX3htaXQoKVxuK1x0ICogb25seSBhY2NlcHRzIHRoZSBmcmFtZSBpZiB2ZXRoMidzIE5BUEkgaXMgdXAsIHdoaWNoIG9uIHZldGggbWVhbnNcbitcdCAqIHZldGgyIGNhcnJpZXMgYW4gWERQIHByb2dyYW07IHhkcF9jb3VudCB0YWxsaWVzIHdoYXQgYXJyaXZlcy5cbitcdCAqL1xuK1x0ZXJyID0gYnBmX3hkcF9hdHRhY2godmV0aDJfaWR4LCBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy54ZHBfY291bnQpLFxuK1x0XHRcdCAgICAgWERQX0ZMQUdTX0RSVl9NT0RFLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJhdHRhY2ggeGRwX2NvdW50IG9uIHZldGgyXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHR4ZHBfYXR0YWNoZWQgPSB0cnVlO1xuK1xuK1x0LyogcmVkdWNpYmxlIFZMQU4gZWdyZXNzOiByZXNvbHZlcyB0byB0aGUgcGh5c2ljYWwgcGFyZW50IHZldGgxICovXG4rXHRtZW1zZXQoZmliX3BhcmFtcywgMCwgc2l6ZW9mKCpmaWJfcGFyYW1zKSk7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWw0X3Byb3RvY29sID0gSVBQUk9UT19UQ1A7XG4rXHRmaWJfcGFyYW1zLVx1MDAzZWlmaW5kZXggPSB2ZXRoMV9pZHg7XG4rXHRpZiAoIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9JRkFDRV9BRERSLCBcdTAwMjZmaWJfcGFyYW1zLVx1MDAzZWlwdjRfc3JjKSxcbitcdFx0ICAgICAgIDEsIFwiaW5ldF9wdG9uKHNyYylcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKGluZXRfcHRvbihBRl9JTkVULCBJUFY0X1ZMQU5fRUdSRVNTX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihyZWR1Y2libGUgZHN0KVwiKSlcbitcdFx0Z290byBmYWlsO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbG9va3VwX2ZsYWdzID0gQlBGX0ZJQl9MT09LVVBfVkxBTiB8IEJQRl9GSUJfTE9PS1VQX1NLSVBfTkVJR0g7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBhc3NlZCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQgPSAwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXHUwMDI2bGZfb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9ydW4ocmVkdWNpYmxlIGVncmVzcylcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWRpcmVjdGVkLCBSRURJUkVDVF9OUEtUUywgXCJyZWR1Y2libGUgZWdyZXNzIHJlZGlyZWN0ZWRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkLCAwLCBcInJlZHVjaWJsZSBlZ3Jlc3Mgbm90IHBhc3NlZFwiKTtcbitcdEFTU0VSVF9HVChza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxpdmVyZWQsIDAsIFwicmVkdWNpYmxlIGVncmVzcyBkZWxpdmVyZWQgdG8gdmV0aDJcIik7XG4rXG4rXHQvKlxuK1x0ICogUWluUSBlZ3Jlc3M6IG5vdCByZWR1Y2libGUsIHNvIHRoZSBsb29rdXAgcmV0dXJucyBWTEFOX0ZBSUxVUkUgYW5kXG4rXHQgKiB0aGUgcHJvZ3JhbSBwYXNzZXMgdGhlIGZyYW1lIGluc3RlYWQgb2YgcmVkaXJlY3RpbmcgdG8gdGhlIGlubmVyXG4rXHQgKiBWTEFOIGRldmljZS4gcmVkaXJlY3RlZCA9PSAwIGlzIHRoZSBhc3NlcnRpb24gdGhhdCBtYXR0ZXJzOiB0aGVcbitcdCAqIHByb2dyYW0gZGlkIG5vdCByZWRpcmVjdCB0byBhIGRldmljZSB0aGF0IHdvdWxkIGRyb3AgdGhlIGZyYW1lIGF0XG4rXHQgKiB4ZHBfZG9fZmx1c2goKS4gdmV0aDIncyBkZWxpdmVyZWQgY291bnQgaXMgbm90IGNoZWNrZWQgaGVyZSwgc2luY2VcbitcdCAqIGEgcGFzc2VkIGZyYW1lIGNhbiBzdGlsbCByZWFjaCB2ZXRoMiB0aHJvdWdoIHRoZSBzdGFjaydzIGZvcndhcmRpbmdcbitcdCAqIHBhdGgsIHdoaWNoIGlzIHVucmVsYXRlZCB0byB0aGUgcmVkaXJlY3QgdW5kZXIgdGVzdC5cbitcdCAqL1xuK1x0bWVtc2V0KGZpYl9wYXJhbXMsIDAsIHNpemVvZigqZmliX3BhcmFtcykpO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VsNF9wcm90b2NvbCA9IElQUFJPVE9fVENQO1xuK1x0ZmliX3BhcmFtcy1cdTAwM2VpZmluZGV4ID0gdmV0aDFfaWR4O1xuK1x0aWYgKCFBU1NFUlRfRVEoaW5ldF9wdG9uKEFGX0lORVQsIElQVjRfSUZBQ0VfQUREUiwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X3NyYyksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihzcmMpXCIpIHx8XG4rXHQgICAgIUFTU0VSVF9FUShpbmV0X3B0b24oQUZfSU5FVCwgSVBWNF9RSU5RX0RTVCwgXHUwMDI2ZmliX3BhcmFtcy1cdTAwM2VpcHY0X2RzdCksXG4rXHRcdCAgICAgICAxLCBcImluZXRfcHRvbihxaW5xIGRzdClcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWxvb2t1cF9mbGFncyA9IEJQRl9GSUJfTE9PS1VQX1ZMQU4gfCBCUEZfRklCX0xPT0tVUF9TS0lQX05FSUdIO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwYXNzZWQgPSAwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhyZWRpcmVjdF9mZCwgXHUwMDI2bGZfb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9ydW4ocWlucSBlZ3Jlc3MpXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGFzc2VkLCBSRURJUkVDVF9OUEtUUywgXCJxaW5xIGVncmVzcyBwYXNzZWRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVkaXJlY3RlZCwgMCwgXCJxaW5xIGVncmVzcyBub3QgcmVkaXJlY3RlZFwiKTtcbitcbiBmYWlsOlxuK1x0aWYgKHhkcF9hdHRhY2hlZClcbitcdFx0YnBmX3hkcF9kZXRhY2godmV0aDJfaWR4LCBYRFBfRkxBR1NfRFJWX01PREUsIE5VTEwpO1xuIFx0aWYgKG5zdG9rZW4pXG4gXHRcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuIFx0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCBcIiBOU19URVNUKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmliX2xvb2t1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuaW5kZXggN2I1ZGQyMjE0ZmY0NmEuLjg2MmExZTk0NTdiNGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpYl9sb29rdXAuY1xuQEAgLTE5LDQgKzE5LDQwIEBAIGludCBmaWJfbG9va3VwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiB9XG4gXG4rU0VDKFwieGRwXCIpXG4raW50IGZpYl9sb29rdXBfeGRwKHN0cnVjdCB4ZHBfbWQgKmN0eClcbit7XG4rXHRmaWJfbG9va3VwX3JldCA9IGJwZl9maWJfbG9va3VwKGN0eCwgXHUwMDI2ZmliX3BhcmFtcywgc2l6ZW9mKGZpYl9wYXJhbXMpLFxuK1x0XHRcdFx0XHRsb29rdXBfZmxhZ3MpO1xuK1xuK1x0cmV0dXJuIFhEUF9EUk9QO1xuK31cbitcbitpbnQgcmVkaXJlY3RlZCA9IDA7XG4raW50IHBhc3NlZCA9IDA7XG4raW50IGRlbGl2ZXJlZCA9IDA7XG4rXG4rU0VDKFwieGRwXCIpXG4raW50IGZpYl9sb29rdXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfZmliX2xvb2t1cCBwYXJhbXMgPSBmaWJfcGFyYW1zO1xuK1x0bG9uZyByZXQ7XG4rXG4rXHRyZXQgPSBicGZfZmliX2xvb2t1cChjdHgsIFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcyksIGxvb2t1cF9mbGFncyk7XG4rXHRpZiAocmV0ID09IEJQRl9GSUJfTEtVUF9SRVRfU1VDQ0VTUykge1xuK1x0XHRyZWRpcmVjdGVkKys7XG4rXHRcdHJldHVybiBicGZfcmVkaXJlY3QocGFyYW1zLmlmaW5kZXgsIDApO1xuK1x0fVxuK1xuK1x0cGFzc2VkKys7XG4rXHRyZXR1cm4gWERQX1BBU1M7XG4rfVxuK1xuK1NFQyhcInhkcFwiKVxuK2ludCB4ZHBfY291bnQoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdGRlbGl2ZXJlZCsrO1xuK1x0cmV0dXJuIFhEUF9EUk9QO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwOTozOTo0MS41NDM2MTA1ODVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzQ1NTYzNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWTEFOIEJQRiBGSUIgTG9va3VwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgVkxBTiBzdXBwb3J0IHRvIHRoZSBgYnBmX2ZpYl9sb29rdXBgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0J3MgaW50cm9kdWNpbmcgc29tZSBuZXcgZmxhZ3M6IGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBleHRlbmRpbmcgdGhlIGV4aXN0aW5nIEJQRiBGSUIgbG9va3VwIHRvIGNvbnNpZGVyIFZMQU4gaW5mb3JtYXRpb24sIHdoaWNoIGlzIGEgcHJldHR5IGNydWNpYWwgYWRkaXRpb24gZm9yIGNvbXBsZXggbmV0d29yayBzZXR1cHMuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJ3MgQlBGIEZJQiBsb29rdXAgbG9naWMsIHNvIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQncyByZWFjaGVkIGJ5IEJQRiBwcm9ncmFtcyBjYWxsaW5nIGBicGZfZmliX2xvb2t1cGAuIExldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzOiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzLlxuXG5SaWdodCwgc28gdGhlIG9idmlvdXMgc3VzcGVjdHMgYXJlOiBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AsIGBicGZfZmliX3ZsYW5faW5wdXRfZGV2YCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBgYnBmX2lwdjZfZmliX2xvb2t1cGAsIGBicGZfeGRwX2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAuIEJ1dCBoYW5nIG9uIGEgc2Vjb25kLCB0aG9zZSBmaXJzdCB0d28sIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBhbmQgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgLCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gVGhleSdyZSBwcm9iYWJseSBpbmxpbmVkLCB3aGljaCBjb21wbGljYXRlcyB0aGluZ3Mgc2xpZ2h0bHksIGJ1dCBpdCdzIHN0aWxsIGdvb2QgdG8gaW5jbHVkZSB0aGVtIG9uIHRoZSBsaXN0LiBgYnBmX3hkcF9maWJfbG9va3VwYCBhbmQgYGJwZl9za2JfZmliX2xvb2t1cGAgc2VlbSBsaWtlIHRoZSByZWFsIGVudHJ5IHBvaW50cy5cblxuSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoaXMgdG8gd29yay4gV2hlcmUncyB0aGlzIGNvZGUgbG9jYXRlZD8gQWgsIGl0J3MgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gT2theSwgaGVyZSdzIGFuIGludGVyZXN0aW5nIGJpdC4gVGhlIG5ldyBsb2dpYyBpbiBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AgaXMgZ3VhcmRlZCBieSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpYC4gR29vZCB0byBrbm93LiBCdXQgd2FpdCwgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIHVzZXMgYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAuIElzIHRoYXQgYXZhaWxhYmxlIG9ubHkgaWYgYENPTkZJR19WTEFOXzgwMjFRYCBpcyBlbmFibGVkPyBUaW1lIHRvIGRvdWJsZS1jaGVjayBgX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1YC4gR290dGEgdmVyaWZ5IHRoaXMgZGVwZW5kZW5jeSBiZWZvcmUgSSBwcm9jZWVkIHdpdGggdGhlIGZ1enppbmcgcGxhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQwOTozOTo0OC44ODkxOTUwNzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NzMyMDExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz00MDY4PXN0YXRpYyBib29sIGJueHRfcmVfY2hlY2tfaWZfdmxhbl92YWxpZChzdHJ1Y3QgYm54dF9yZV9kZXYgKnJkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQwNzQtXFx0ICovXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYzo0MDc1OlxcdGlmICghX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHJkZXYtXFx1MDAzZW5ldGRldixcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jLTQwNzYtXFx0XFx0XFx0XFx0ICAgICAgaHRvbnMoRVRIX1BfODAyMVEpLCB2bGFuX2lkKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvY3hnYjNfb2ZmbG9hZC5jPTE3Nj1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF9pZmZfZnJvbV9tYWMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL2N4Z2IzX29mZmxvYWQuYy0xODctXFx0XFx0XFx0aWYgKHZsYW4gXFx1MDAyNlxcdTAwMjYgdmxhbiAhPSBWTEFOX1ZJRF9NQVNLKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmM6MTg4OlxcdFxcdFxcdFxcdGRldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdmxhbik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9jeGdiM19vZmZsb2FkLmMtMTg5LVxcdFxcdFxcdH0gZWxzZSBpZiAobmV0aWZfaXNfYm9uZF9zbGF2ZShkZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmM9MjE4PWludCBjeGdiNF91cGRhdGVfcm9vdF9kZXZfY2xpcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIzNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVkxBTl9OX1ZJRDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jOjIzNzpcXHRcXHRyb290X2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShkZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIzOC1cXHRcXHRpZiAoIXJvb3RfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9ODc0Mz1zdGF0aWMgdm9pZCBtbHhzd19zcF9yaWZfZGVzdHJveV92bGFuX3VwcGVyKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04NzUwLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzo4NzUxOlxcdHVwcGVyX2RldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShicl9kZXYsIGh0b25zKEVUSF9QXzgwMjFRKSwgdmlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04NzUyLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9ODc3MD1pbnQgbWx4c3dfc3Bfcm91dGVyX2JyaWRnZV92bGFuX2FkZChzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODgzMS1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6ODgzMjpcXHRcXHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnJfZGV2LCBodG9ucyhFVEhfUF84MDIxUSksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODgzMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIG9sZF9wdmlkKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYz00MDgyPXZvaWQgcWxjbmljX3Jlc3RvcmVfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jLTQwOTEtXFx0Zm9yX2VhY2hfc2V0X2JpdCh2aWQsIGFkYXB0ZXItXFx1MDAzZXZsYW5zLCBWTEFOX05fVklEKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwOTI6XFx0XFx0ZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KG5ldGRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCB2aWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDkzLVxcdFxcdGlmICghZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmM9MzA5PXN0YXRpYyB2b2lkIGRvX25laWdoX3NvbGljaXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCAqYnVmLCB1MTYgdGNpKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzI2LVxcdGlmICh0Y2kpIHtcXG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYzozMjc6XFx0XFx0bmV0ZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldi1cXHUwMDNlbmV0LCBodG9ucyhFVEhfUF84MDIxUSksXFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzI4LVxcdFxcdFxcdFxcdFxcdFxcdCAgdGNpKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTEyMz1zdHJ1Y3Qgdmxhbl9wY3B1X3N0YXRzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNS1cXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDoxMzY6ZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTEzNy1cXHRcXHRcXHRcXHRcXHQgICAgICAgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oPTI1Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaDoyNTM6X192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldixcXG5pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaC0yNTQtXFx0XFx0ICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9MTA9Ym9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTc1LS8qIE11c3QgYmUgaW52b2tlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjc2OnN0cnVjdCBuZXRfZGV2aWNlICpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNzctXFx0XFx0XFx0XFx0XFx0X19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX2lkKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jLTkzLVxcdFxcdGlmICh1cHBlcl9kZXYpXFxubmV0LzgwMjFxL3ZsYW5fY29yZS5jOjk0OlxcdFxcdFxcdHJldHVybiBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UodXBwZXJfZGV2LFxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy05NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdmxhbl9wcm90bywgdmxhbl9pZCk7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtOTktfVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYzoxMDA6RVhQT1JUX1NZTUJPTChfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UpO1xcbm5ldC84MDIxcS92bGFuX2NvcmUuYy0xMDEtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTEyND12b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE3OS1cXHRpZiAodmlkICE9IDApIHtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjE4MDpcXHRcXHR2bGFuZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGJyLVxcdTAwM2VkZXYsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE4MS1cXHRcXHRcXHRcXHRcXHRcXHQgICB2aWQpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz00MTQ9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQ1NS1cXHRcXHQvKiBidWlsZCBuZWlnaCB0YWJsZSBsb29rdXAgb24gdGhlIHZsYW4gZGV2aWNlICovXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzo0NTY6XFx0XFx0dmxhbmRldiA9IF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShici1cXHUwMDNlZGV2LCBza2ItXFx1MDAzZXZsYW5fcHJvdG8sXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00NTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgdmlkKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NDM1PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnJuZl9nZXRfbG9naWNhbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDQ2LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDQ3OlxcdHZsYW4gPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIHNrYi1cXHUwMDNldmxhbl9wcm90byxcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ0OC1cXHRcXHRcXHRcXHQgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpIFxcdTAwMjYgVkxBTl9WSURfTUFTSyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MjMzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI0My1cXHR2aWQgPSBudG9ocyhwYXJhbXMtXFx1MDAzZWhfdmxhbl9UQ0kpIFxcdTAwMjYgVkxBTl9WSURfTUFTSztcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjQ0OlxcdHZsYW5fZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgcHJvdG8sIHZpZCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjI0NS1cXHRpZiAoIXZsYW5fZGV2IHx8ICEodmxhbl9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB8fFxcbi0tXFxubmV0L2RzYS90YWcuaD0xMDQ9c3RhdGljIGlubGluZSB2b2lkIGRzYV9zb2Z0d2FyZV91bnRhZ192bGFuX3VuYXdhcmVfYnJpZGdlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvZHNhL3RhZy5oLTEzMS1cXHQgKi9cXG5uZXQvZHNhL3RhZy5oOjEzMjpcXHR1cHBlcl9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIGh0b25zKHByb3RvKSwgdmlkKTtcXG5uZXQvZHNhL3RhZy5oLTEzMy1cXHRpZiAoIXVwcGVyX2RldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6Mzk6NTEuNTU2NTIzMDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA0MjIyMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIFZMQU4gRGV2aWNlIERpc2NvdmVyeSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VgLiBUaGUgY29kZSBzYXlzIGl0J3MgZGVmaW5lZCBpbiBgbmV0LzgwMjFxL3ZsYW5fY29yZS5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gSXQncyBvbmx5IGF2YWlsYWJsZSBpZiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGVuYWJsZWQuIFdhaXQgYSBzZWNvbmQsIGRvZXMgdGhhdCBtZWFuIGB2bGFuX2NvcmUuY2AgaXMgYWN0dWFsbHkgKmNvbXBpbGVkKiBvbmx5IHdoZW4gdGhhdCBjb25maWcgb3B0aW9uIGlzIHNldD8gSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHRoYXQuIExldCdzIGhlYWQgb3ZlciB0byB0aGUgYG5ldC84MDIxcS9NYWtlZmlsZWAgYW5kIGNvbmZpcm0gaG93IHRoYXQgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLiBHb3R0YSBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzM2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6Mzk6NTUuMDYwNzQ3Mzk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTA5ODgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bGFuX2NvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0LzgwMjFxL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC84MDIxcS9NYWtlZmlsZS00LSNcXG5uZXQvODAyMXEvTWFrZWZpbGU6NTpvYmotJChzdWJzdCBtLHksJChDT05GSUdfVkxBTl84MDIxUSkpXFx0Kz0gdmxhbl9jb3JlLm9cXG5uZXQvODAyMXEvTWFrZWZpbGUtNi1vYmotJChDT05GSUdfVkxBTl84MDIxUSlcXHRcXHQrPSA4MDIxcS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA5OjM5OjU1LjE5OTg1MTkxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTI3MjQ1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFZMQU4gS2VybmVsIE1vZHVsZSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGl0IHNlZW1zIGxpa2UgYHZsYW5fY29yZS5vYCBpcyBkZWZpbml0ZWx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19WTEFOXzgwMjFRYCBpcyBlbmFibGVkLiBBbmQsIEkgc2VlIHRoYXQgYHN1YnN0IG0seWAgd2hpY2ggbWVhbnMgaXQncyBidWlsdC1pbiBpZiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdGFuZGFyZC5cblxuTm93LCBob2xkIG9uLi4udGhpcyBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAgZnVuY3Rpb24gaXMgZ3VhcmRlZCBieSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8IElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0J3MgYSBkaWZmZXJlbnQgY29uY2VybiwgYnV0IGFscmlnaHQsIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cbkJ1dCwgYSBtb3JlIGltcG9ydGFudCBxdWVzdGlvbiBhcmlzZXMuIEkgbmVlZCB0byBrbm93IGlmIGEgcGFydGljdWxhciBmdW5jdGlvbiwgYF9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdWAsIGlzIHN0aWxsIGFjY2Vzc2libGUgZXZlbiB3aGVuIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgZGlzYWJsZWQuIFRoYXQncyBhIGNydWNpYWwgcG9pbnQgdG8gdW5kZXJzdGFuZCBpbiB0aGlzIHNjZW5hcmlvLlxuXG5JIHRoaW5rIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgd2lsbCBiZSBpbiBgaW5jbHVkZS9saW51eC9pZl92bGFuLmhgLCBsZXQgbWUgZ28gYW5kIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTM2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA5OjQwOjAwLjA1MjYxMDk2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTM4MzY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9pZl92bGFuLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MTIzPXN0cnVjdCB2bGFuX3BjcHVfc3RhdHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMTM1LVxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjEzNjpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKl9fdmxhbl9maW5kX2Rldl9kZWVwX3JjdShzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYsXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmgtMTM3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBfX2JlMTYgdmxhbl9wcm90bywgdTE2IHZsYW5faWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl92bGFuLmg9MjUyPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKlxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oOjI1MzpfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3Uoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2LFxcbmluY2x1ZGUvbGludXgvaWZfdmxhbi5oLTI1NC1cXHRcXHQgICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6NDA6MDAuMTUyMDAwNDk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA0ODU0MDE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQgZm9yIFZMQU4gRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIHNlZSB0aGVyZSdzIGEgc3RhdGljIGlubGluZSBmYWxsYmFjayBpZiBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGRpc2FibGVkLCB3aGljaCBpcyBnb29kIGZvciBzb21lIHVzZSBjYXNlcywgYnV0IHRvIGFjdHVhbGx5ICp0ZXN0KiB0aGUgVkxBTiBmdW5jdGlvbmFsaXR5LCBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIFRoZSBjb2RlIHVzZXMgYGlzX3ZsYW5fZGV2YCwgYHZsYW5fZGV2X3ByaXZgLCBgdmxhbl9kZXZfdmxhbl9wcm90b2AsIGFuZCBgdmxhbl9kZXZfdmxhbl9pZGAgd2l0aGluIGBicGZfZmliX3NldF9md2RfcGFyYW1zYCwgYW5kIHRob3NlIGFyZSBhbGwgZ2F0ZWQgYnkgYW4gYCNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKWAgY29uZGl0aW9uLiBTbywgbm8gcXVlc3Rpb24sIGBWTEFOXzgwMjFRYCBnb2VzIG9uIHRoZSBcIlJlcXVpcmVkXCIgbGlzdC5cblxuTm93LCBpdCdzIHByZXR0eSBvYnZpb3VzIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBhIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggQlBGLiBBbmQgc2luY2UgdGhlIGNvZGUgaXMgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCwgdGhlbiBvYnZpb3VzbHkgYE5FVGAgaXMgbmVjZXNzYXJ5IGFzIHdlbGwuXG5cblRoZSBmdW5jdGlvbnMgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBoZXJlIGFwcGVhciB0byBiZTogYGJwZl94ZHBfZmliX2xvb2t1cGAsIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuXG5cbldhaXQsIHRob3NlIGZpcnN0IHR3bywgYGJwZl94ZHBfZmliX2xvb2t1cGAgYW5kIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBhcmUgQlBGIGhlbHBlcnMuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlcXVpcmVkIGNvbmZpZ3MuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXNgIGFuZCBgYnBmX2ZpYl92bGFuX2lucHV0X2RldmAsIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgYWJvdXQgYWRkaW5nIGBWTEFOXzgwMjFRYCB0byBgRW5hYmxlQ29uZmlnc2Agbm93LlxuXG5MZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiB0aGF0IGBicGZfZmliX3NldF9md2RfcGFyYW1zYCBmdW5jdGlvbiBpcyBpbmxpbmVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byB0aGUgZmxvdyBvZiB0aGUgcHJvZ3JhbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4MzcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6NDA6MDYuMjAwNTQzNThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNjg1MDg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZmliX3NldF9md2RfcGFyYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTYxOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwMy0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjA0OnN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyNTQ9c3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02NDAwLXNldF9md2RfcGFyYW1zOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjY0MDE6XFx0cmV0dXJuIGJwZl9maWJfc2V0X2Z3ZF9wYXJhbXMoZGV2LCBwYXJhbXMsIGZsYWdzLCBtdHUsIGluX2lmaW5kZXgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTY0MDItfVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1NTMtc2V0X2Z3ZF9wYXJhbXM6XFxubmV0L2NvcmUvZmlsdGVyLmM6NjU1NDpcXHRyZXR1cm4gYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhkZXYsIHBhcmFtcywgZmxhZ3MsIG10dSwgaW5faWZpbmRleCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjU1NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA5OjQwOjA2LjUyNzQwMzgxOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDY0ODYxODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEZJQiBMb29rdXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEJQRiBGSUIgbG9va3VwIGZ1bmN0aW9uYWxpdHkuIFRoZSBmaXJzdCB0aGluZyBJJ20gbm90aWNpbmcgaXMgdGhlIHByZXNlbmNlIG9mIHN0YXRpYyBmdW5jdGlvbnMuIFNpbmNlIHRoZXkncmUgc3RhdGljLCB0aGV5J3JlIHByb2JhYmx5IGlubGluZWQsIHNvIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aG9zZS4gTXkgaW5pdGlhbCBsaXN0IGluY2x1ZGVzIGBicGZfeGRwX2ZpYl9sb29rdXBgLCBgYnBmX3NrYl9maWJfbG9va3VwYCwgYGJwZl9pcHY0X2ZpYl9sb29rdXBgLCBhbmQgYGJwZl9pcHY2X2ZpYl9sb29rdXBgLiBBbmQsIHllcywgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIGlzIGFsc28gc3RhdGljLlxuXG5Ob3csIGxldCdzIHNlZSB3aGF0IGtlcm5lbCBjb25maWdzIGFyZSBpbnZvbHZlZC4gSXQgc2VlbXMgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBhcmUgcmVsZXZhbnQgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgYWRkIGBWTEFOXzgwMjFRYCB0byBgRW5hYmxlQ29uZmlnc2Agc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIFZMQU4gaW5wdXQsIGFuZCBqdXN0IHRvIGJlIHNhZmUsIEknbGwgYWxzbyBhZGQgYElQVjZgLCBldmVuIHRob3VnaCBpdCdzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LiBgQlBGX1NZU0NBTExgIGFsc28gbG9va3MgaW1wb3J0YW50LCBzbyB0aGF0IGdvZXMgaW4gYEVuYWJsZUNvbmZpZ3NgIHRvby5cblxuTGV0J3MgcmV2aWV3IHRoZSBwYXRjaCBhZ2FpbiB0byBtYWtlIHN1cmUgSSdtIGNhcHR1cmluZyBldmVyeXRoaW5nLiBSaWdodCwgaXQgYWRkcyBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCBmbGFncyB0byBgYnBmX2ZpYl9sb29rdXBgLiBJdCBtb2RpZmllcyB0aGUgbG9va3VwIGZ1bmN0aW9uczogYGJwZl94ZHBfZmliX2xvb2t1cGAsIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIEl0IGFsc28gYWZmZWN0cyBgYnBmX2ZpYl9zZXRfZndkX3BhcmFtc2AsIGFkZHMgYGJwZl9maWJfdmxhbl9pbnB1dF9kZXZgIGFuZCBtb2RpZmllcyBgYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tgLlxuXG5TbywgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGEgY2xvc2VyIGxvb2sgYXJlOlxuLSBgYnBmX3hkcF9maWJfbG9va3VwYFxuLSBgYnBmX3NrYl9maWJfbG9va3VwYFxuLSBgYnBmX2lwdjRfZmliX2xvb2t1cGBcbi0gYGJwZl9pcHY2X2ZpYl9sb29rdXBgXG5cbkFscmlnaHQsIEkgdGhpbmsgdGhhdCdzIHRoZSBjb3JlIG9mIGl0LiBBcmUgdGhlcmUgYW55IG90aGVyIGhlbHBlciBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgaGVyZT8gTm8sIHRob3NlIGFyZSB0aGUgcHJpbWFyeSBvbmVzLlxuXG5JIHNob3VsZCB2ZXJpZnkgaWYgYGJwZl9maWJfbG9va3VwX2ZsYWdzX29rYCBpcyBhbHNvIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxMjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6NDA6MTIuOTkyMjcwMTc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyNjI5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NjQwNj1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1NjItXFxubmV0L2NvcmUvZmlsdGVyLmM6NjU2MzpzdGF0aWMgYm9vbCBicGZfZmliX2xvb2t1cF9mbGFnc19vayh1MzIgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjU2NC17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NTc1PUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjU4MC1cXG5uZXQvY29yZS9maWx0ZXIuYzo2NTgxOlxcdGlmICghYnBmX2ZpYl9sb29rdXBfZmxhZ3Nfb2soZmxhZ3MpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1ODItXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NjA5PUJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02NjE4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY2MTk6XFx0aWYgKCFicGZfZmliX2xvb2t1cF9mbGFnc19vayhmbGFncykpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjYyMC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMDk6NDA6MTMuMTA0NTM3NDQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTM1NDg3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEZJQiBMb29rdXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGFib3V0IHRoZSBCUEYgRklCIGxvb2t1cCBmdW5jdGlvbmFsaXR5LCBhbmQgaXQncyBkZWZpbml0ZWx5IHN0YXRpYyBpbiBuYXR1cmUg4oCTIG5vdGhpbmcgZHluYW1pYyBoZXJlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGtleSBCUEYgc3ltYm9scyBpbnZvbHZlZDogYGJwZl94ZHBfZmliX2xvb2t1cGAsIGBicGZfc2tiX2ZpYl9sb29rdXBgLCBgYnBmX2lwdjRfZmliX2xvb2t1cGAsIGFuZCBgYnBmX2lwdjZfZmliX2xvb2t1cGAuIFRoZXNlIGFyZSBteSBlbnRyeSBwb2ludHMuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgYWRkaW5nIFZMQU4gc3VwcG9ydCB0byBgYnBmX2ZpYl9sb29rdXBgLCBhbmQgSSBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYCBmbGFncy4gVGhpcyBtZWFucyB0aGUgY29yZSBCUEYgRklCIGxvb2t1cCBsb2dpYywgY3JpdGljYWwgZm9yIElQdjQgYW5kIElQdjYgdHJhZmZpYywgaXMgYmVpbmcgbW9kaWZpZWQuIFNpbmNlIHRoaXMgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zLCBJIG5lZWQgdG8gY2VudGVyIG15IGZ1enppbmcgZWZmb3J0cyBhcm91bmQgdGhlc2UgZW50cnkgcG9pbnRzLCBhbG9uZyB3aXRoIHRoZSBJUHY0L0lQdjYtc3BlY2lmaWMgbG9va3VwIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1ZMQU5fODAyMVFgIGlzIGVuYWJsZWQgZm9yIGFueSB0ZXN0aW5nIG9mIHRoZSBWTEFOLXNwZWNpZmljIGxvZ2ljLlxuXG5JIHRoaW5rIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbGFiZWwgdGhlc2UgbmV3IGZsYWdzIGFuZCB0aGUgcGF0Y2ggaXRzZWxmIGFzIFwic2V0LXJlc3VsdHNcIi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0MjQsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDA5OjQwOjE4LjQ1ODA4OTAwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDk4Mzg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl94ZHBfZmliX2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2NF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfaXB2Nl9maWJfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWTEFOcyBpbiB0aGUgQlBGIEZJQiBsb29rdXAgaGVscGVyIChgYnBmX2ZpYl9sb29rdXBgKS4gSXQgaW50cm9kdWNlcyB0d28gbmV3IGZsYWdzOiBgQlBGX0ZJQl9MT09LVVBfVkxBTmAgYW5kIGBCUEZfRklCX0xPT0tVUF9WTEFOX0lOUFVUYC4gVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBjb3JlIEJQRiBGSUIgbG9va3VwIGxvZ2ljIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW1zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIEZJQiBsb29rdXAgZW50cnkgcG9pbnRzIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIGxvb2t1cCBmdW5jdGlvbnMuIGBDT05GSUdfVkxBTl84MDIxUWAgaXMgcmVxdWlyZWQgdG8gdGVzdCB0aGUgVkxBTiBzcGVjaWZpYyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3hkcF9maWJfbG9va3VwXCIsXG4gICAgXCJicGZfc2tiX2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9pcHY0X2ZpYl9sb29rdXBcIixcbiAgICBcImJwZl9pcHY2X2ZpYl9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFZMQU5zIGluIHRoZSBCUEYgRklCIGxvb2t1cCBoZWxwZXIgKGBicGZfZmliX2xvb2t1cGApLiBJdCBpbnRyb2R1Y2VzIHR3byBuZXcgZmxhZ3M6IGBCUEZfRklCX0xPT0tVUF9WTEFOYCBhbmQgYEJQRl9GSUJfTE9PS1VQX1ZMQU5fSU5QVVRgLiBUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIGNvcmUgQlBGIEZJQiBsb29rdXAgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBCUEYgcHJvZ3JhbXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgRklCIGxvb2t1cCBlbnRyeSBwb2ludHMgYW5kIHRoZSBJUHY0L0lQdjYgc3BlY2lmaWMgbG9va3VwIGZ1bmN0aW9ucy4gYENPTkZJR19WTEFOXzgwMjFRYCBpcyByZXF1aXJlZCB0byB0ZXN0IHRoZSBWTEFOIHNwZWNpZmljIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowlvhdf[1] Phase: Succeeded StartedAt: 2026-07-04 09:40:30 +0000 UTC FinishedAt: 2026-07-04 09:40:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-04 09:40:30 +0000 UTC FinishedAt: 2026-07-04 09:40:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2] Phase: Succeeded StartedAt: 2026-07-04 09:40:30 +0000 UTC FinishedAt: 2026-07-04 14:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 09:40:30 +0000 UTC FinishedAt: 2026-07-04 14:12:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 09:40:30 +0000 UTC FinishedAt: 2026-07-04 09:40:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 09:40:30 +0000 UTC FinishedAt: 2026-07-04 09:40:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-workflowlvhdf/series-workflowlvhdf-convert-artifact-2361652128/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 09:40:40 +0000 UTC FinishedAt: 2026-07-04 10:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 09:40:40 +0000 UTC FinishedAt: 2026-07-04 10:04:04 +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:*8fa183b0-e86e-4626-bcfb-41f814d27d96,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-workflowlvhdf/series-workflowlvhdf-convert-artifact-2361652128/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": "b6593529-5d40-4315-b0f3-b47918f7a5bc", "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-workflowlvhdf/series-workflowlvhdf-build-action-2754925158/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 09:40:40 +0000 UTC FinishedAt: 2026-07-04 10:03:54 +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:*8fa183b0-e86e-4626-bcfb-41f814d27d96,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-workflowlvhdf/series-workflowlvhdf-convert-artifact-2361652128/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": "b6593529-5d40-4315-b0f3-b47918f7a5bc", "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-workflowlvhdf/series-workflowlvhdf-build-action-2754925158/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 10:04:04 +0000 UTC FinishedAt: 2026-07-04 10:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 10:04:04 +0000 UTC FinishedAt: 2026-07-04 10:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 10:04:04 +0000 UTC FinishedAt: 2026-07-04 10:04:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 10:04:04 +0000 UTC FinishedAt: 2026-07-04 10:04:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-workflowlvhdf/series-workflowlvhdf-convert-artifact-2940827335/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 10:04:29 +0000 UTC FinishedAt: 2026-07-04 10:06:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 10:04:29 +0000 UTC FinishedAt: 2026-07-04 10:06:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b6593529-5d40-4315-b0f3-b47918f7a5bc,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-workflowlvhdf/series-workflowlvhdf-build-action-2754925158/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-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 10:06:21 +0000 UTC FinishedAt: 2026-07-04 10:06:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 10:06:21 +0000 UTC FinishedAt: 2026-07-04 10:06:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 10:06:21 +0000 UTC FinishedAt: 2026-07-04 11:08:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 10:06:21 +0000 UTC FinishedAt: 2026-07-04 11:08:11 +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:*8fa183b0-e86e-4626-bcfb-41f814d27d96,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-workflowlvhdf/series-workflowlvhdf-convert-artifact-2940827335/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": "bf4f06df-4095-4374-b424-da552e210482", "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-workflowlvhdf/series-workflowlvhdf-build-action-2418390603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 10:06:21 +0000 UTC FinishedAt: 2026-07-04 11:07:57 +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:*8fa183b0-e86e-4626-bcfb-41f814d27d96,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-workflowlvhdf/series-workflowlvhdf-convert-artifact-2940827335/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": "bf4f06df-4095-4374-b424-da552e210482", "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-workflowlvhdf/series-workflowlvhdf-build-action-2418390603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:08:11 +0000 UTC FinishedAt: 2026-07-04 11:08:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:08:11 +0000 UTC FinishedAt: 2026-07-04 11:08:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:08:11 +0000 UTC FinishedAt: 2026-07-04 11:10:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:08:11 +0000 UTC FinishedAt: 2026-07-04 11:10:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bf4f06df-4095-4374-b424-da552e210482,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-workflowlvhdf/series-workflowlvhdf-build-action-2418390603/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-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:10:27 +0000 UTC FinishedAt: 2026-07-04 14:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:10:27 +0000 UTC FinishedAt: 2026-07-04 14:12:55 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"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:*b6593529-5d40-4315-b0f3-b47918f7a5bc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bf4f06df-4095-4374-b424-da552e210482,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-workflowlvhdf/series-workflowlvhdf-build-action-2754925158/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-workflowlvhdf/series-workflowlvhdf-build-action-2418390603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:10:27 +0000 UTC FinishedAt: 2026-07-04 11:10:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:10:27 +0000 UTC FinishedAt: 2026-07-04 11:10:33 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"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-workflowlvhdf/series-workflowlvhdf-convert-artifact-918608544/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:10:27 +0000 UTC FinishedAt: 2026-07-04 11:10:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:10:27 +0000 UTC FinishedAt: 2026-07-04 11:10:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:10:27 +0000 UTC FinishedAt: 2026-07-04 11:10:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:10:37 +0000 UTC FinishedAt: 2026-07-04 14:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvhdf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_fib_lookup","bpf_skb_fib_lookup","bpf_ipv4_fib_lookup","bpf_ipv6_fib_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q"],"series_id":"0e6c9019-4eef-48d1-9dde-ecfa405713e1","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-04 11:10:37 +0000 UTC FinishedAt: 2026-07-04 14:12:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b6593529-5d40-4315-b0f3-b47918f7a5bc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bf4f06df-4095-4374-b424-da552e210482,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-workflowlvhdf/series-workflowlvhdf-build-action-2754925158/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-workflowlvhdf/series-workflowlvhdf-build-action-2418390603/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-workflowlvhdf/series-workflowlvhdf-convert-artifact-918608544/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,}