Name: series-workflowwdzsb Phase: Failed StartedAt: 2026-07-09 21:52:03 +0000 UTC FinishedAt: 2026-07-09 22:12:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdzsb[0] Phase: Succeeded StartedAt: 2026-07-09 21:52:03 +0000 UTC FinishedAt: 2026-07-09 22:11:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdzsb[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 21:52:03 +0000 UTC FinishedAt: 2026-07-09 22:11:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgUmVhbHRlayBSVEw4MzgwL1JUTDgzOTAgTURJTyBjb250cm9sbGVycyB0byBhIHBsYXRmb3JtIGRyaXZlciAobWRpby1yZWFsdGVrLXJ0bDkzMDAuYykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIChvciBkZXZpY2UgdHJlZSBub2RlcykgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gVGhlIGNoYW5nZXMgdG8gY29yZSBQSFkgY29kZSAocGh5X2RldmljZS5jKSBtZXJlbHkgYWRkIGFuZCBpbnZva2UgYSBjYWxsYmFjayB0aGF0IGlzIG9ubHkgaW1wbGVtZW50ZWQgYnkgdGhpcyB1bnJlYWNoYWJsZSBkcml2ZXIsIG1ha2luZyB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIxYTQ5ZWMxNzdjODZmYzA3YjUyYTlhMjA3ZDRjYWRkYzFkMzU5YTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDIyOjExOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuaW5kZXggMjcxZTA1YmFlOWM1NzQuLjY3ZTBiMjNhODQ3MGVhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbkBAIC00LDcgJiM0Mzs0LDcgQEBcbiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sI1xuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuIFxuLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyXG4mIzQzO3RpdGxlOiBSZWFsdGVrIE90dG8gU3dpdGNoZXMgRXRoZXJuZXQgTURJTyBDb250cm9sbGVyXG4gXG4gbWFpbnRhaW5lcnM6XG4gICAtIENocmlzIFBhY2toYW0gXHUwMDNjY2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56XHUwMDNlXG5AQCAtMTIsNiAmIzQzOzEyLDE2IEBAIG1haW50YWluZXJzOlxuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBvbmVPZjpcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODItbWRpb1xuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzgwLW1kaW9cbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5Mi1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpb1xuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAtIGl0ZW1zOlxuICAgICAgICAgICAtIGVudW06XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMmItbWRpb1xuQEAgLTI0LDYgJiM0MzszNCw4IEBAIHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvXG4gICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsOTMxMS1tZGlvXG4gICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpb1xuJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbmluZGV4IDg5MmVkMzc4MGE2NTcyLi44ZWU5MmRiZWQ1MmZkOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5AQCAtMzUsNiAmIzQzOzM1LDc0IEBAXG4gICpcbiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvblxuICAqIHRoZSBldGhlcm5ldC1wb3J0cyBwcm9wZXJ0eS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0XG4mIzQzOyAqIGNvbnN0YW50bHkgc2NhbnMgdGhlIE1ESU8gYnVzIGFuZCB0aGUgYXR0YWNoZWQgUEhZcyBhbmQgdXBkYXRlcyB0aGUgTUFDIHN0YXR1cyByZWdpc3RlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/XG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mXG4mIzQzOyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvclxuJiM0MzsgKiBlYWNoIHNldCBwb2xsaW5nIGJpdCBpdCBpc3N1ZXMgYSBzdGF0dXMgY2hlY2sgZm9yIHRoZSBQSFkuIEF0dGFjaGluZyBhIGxvZ2ljIGFuYWx5emVyIHRvIHRoZVxuJiM0MzsgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6XG4mIzQzOyAqXG4mIzQzOyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4mIzQzOyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIDB4MCk7XHRwaHlfcmVhZChwaHksIDApO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDEpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1x0cGh5X3JlYWQocGh5LCA0KTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCA1KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMTQpO1x0XHRwaHlfcmVhZChwaHksIDYpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDkpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1x0cGh5X3JlYWQocGh5LCAxMCk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcdHBoeV9yZWFkKHBoeSwgMTUpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA5KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxMCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDEpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA2KTtcbiYjNDM7ICpcbiYjNDM7ICogRnJvbSB0aGUgYWJvdmUgc25pcHBldHMgaXQgcG9sbHMgTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgdmlhIEM0NSBvdmVyIEMyMi4gQXNcbiYjNDM7ICogb2Ygbm93IGl0IGlzIHVuY2xlYXIgaG93IHRoZSBoYXJkd2FyZSBkZWNpZGVzIGlmIGEgUEhZIHN1cHBvcnRzIHRoZXNlIHJlZ2lzdGVycy4gQWZ0ZXIgb25lIFBIWVxuJiM0MzsgKiBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIEJhc2ljYWxseSB0aGUgYnVzIGlzIGFsd2F5cyBidXN5XG4mIzQzOyAqIGFuZCB0aGUgTUFDIHN0YXR1cyBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS5cbiYjNDM7ICpcbiYjNDM7ICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz9cbiYjNDM7ICpcbiYjNDM7ICogV2hlbiBpc3N1aW5nIE1ESU8gYWNjZXNzZXMgdmlhIGFuIE1NSU8gYmFzZWQgaW50ZXJmYWNlIHRoZSBmaW5hbCB3cml0ZSB0byB0aGUgY29tbWFuZCByZWdpc3RlclxuJiM0MzsgKiBzZXRzIGEgXCYjMzQ7cnVuIGNvbW1hbmQgbm93XCYjMzQ7IGJpdC4gQmV0d2VlbiB0d28gcG9sbGluZyBzZXF1ZW5jZXMgZm9yIGRpZmZlcmVudCBQSFlzIHRoZSBoYXJkd2FyZVxuJiM0MzsgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlc1xuJiM0MzsgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHJlYWQgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOlxuJiM0MzsgKlxuJiM0MzsgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuJiM0MzsgKlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1x0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XG4mIzQzOyAqXHRcdFx0XHRcdHBoeV93cml0ZShwaHksIDMxLCAwKTtcbiYjNDM7ICpcbiYjNDM7ICogV2hhdCBkb2VzIHRoaXMgbWVhbj9cbiYjNDM7ICpcbiYjNDM7ICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZVxuJiM0MzsgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0XG4mIzQzOyAqIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbCBQSFkgc3Vic3lzdGVtLlxuJiM0MzsgKlxuJiM0MzsgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuXG4mIzQzOyAqICAgRXNwZWNpYWxseSBhbiB1bnBvcHVsYXRlZCBNQUNfTElOS19TVFMgcmVnaXN0ZXIgY2FuY2VscyBvcGVyYXRpb25zIHRvIG90aGVyIE1BQyByZWdpc3RlcnMuXG4mIzQzOyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGxcbiYjNDM7ICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtXG4mIzQzOyAqICAgdG8gdHJhY2sgdGhlIHBhZ2UgYWNjZXNzIFwmIzM0O21hZ2ljYWxseVwmIzM0OyBpbiB0aGUgYmFja2dyb3VuZC5cbiYjNDM7ICogLSBBIEM0NSBvdmVyIEMyMiBrZXJuZWwgYWNjZXNzIHNlcXVlbmNlIGlzIG1vc3QgbGlrZWx5IHRvIGZhaWwgYmVjYXVzZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXRcbiYjNDM7ICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi5cbiYjNDM7ICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW5cbiYjNDM7ICogICBzZXF1ZW5jZSBvZiByZWdpc3RlcnMgYW5kIHZhbHVlcyB3aXRob3V0IGRldmlhdGlvbi5cbiYjNDM7ICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS5cbiYjNDM7ICpcbiYjNDM7ICogQ29uY2x1c2lvbjogVGhlIFJlYWx0ZWsgTURJTyBidXMgZHJpdmVyIFBIWSBhY2Nlc3MgbXVzdCBrbm93IGFuZCBoYW5kbGUgYW55IGludGVyZmVyZW5jZSB0aGF0XG4mIzQzOyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG5AQCAtNTEsNiAmIzQzOzExOSw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuIFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX0JVU0VTXHRcdFx0MVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXHRcdFx0MjhcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4YTEwMFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXHRcdDB4YTFiOFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXHRcdDB4YTFiY1xuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDI0LCAyMClcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFXHRcdEdFTk1BU0soMTksIDE1KVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0VcdFx0R0VOTUFTSygxNCwgMylcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcdFx0XHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzJcdFx0MHhhMWMwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcdFx0MHhhMWM0XG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhhMTdjXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhhMWM4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX0JVU0VTXHRcdFx0MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTXHRcdFx0ODE5MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTXHRcdFx0NTJcbiYjNDM7I2RlZmluZSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkxcdFx0MHgwM2VjXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcdFx0MHgwM2RjXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSXHRcdEdFTk1BU0soOSwgNSlcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMjIsIDEwKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXHRcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcdFx0XHQweDAzZTBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcdFx0R0VOTUFTSyg4LCAwKVxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTFx0XHQweDAzZjBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTFx0XHRcdDB4MDNmNFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcdFx0MHgwM2U0XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcdFx0MHgwM2U4XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcdFx0MHgwM2ZjXG4mIzQzO1xuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXHRcdFx0MjhcbkBAIC03MSw2ICYjNDM7MTgzLDcgQEBcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGNiN2NcbiYjNDM7I2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkxcdFx0XHQweGNhOTBcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMXHRcdDB4Y2I4MFxuIFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcdFx0XHQ0XG5AQCAtOTYsMTEgJiM0MzsyMDksMTMgQEBcbiAjZGVmaW5lICAgUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19NTURfQ1RSTFx0MHgwYzE4XG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFx0XHQweDBjNzRcbiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDBjY2NcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcdFx0MHgwYzljXG4gXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcdFx0XHRcdEJJVCgwKVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXHRcdFx0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSBQSFlfVkVORE9SX1JFQUxURUtcdFx0XHQweDAwMWNjODAwXG4gXG4gI2RlZmluZSBNQVBfQUREUlNfUEVSX1JFR1x0XHRcdDZcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSXHRcdFx0NVxuQEAgLTEyNiw3ICYjNDM7MjQxLDkgQEAgc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XG4gXHRjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvICppbmZvO1xuIFx0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuIFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3QgSFcgYWNjZXNzICovXG4mIzQzO1x0REVDTEFSRV9CSVRNQVAocGh5X3BvbGwsIE1BWF9QT1JUUyk7XG4gXHRERUNMQVJFX0JJVE1BUCh2YWxpZF9wb3J0cywgTUFYX1BPUlRTKTtcbiYjNDM7XHR1MTYgcGFnZVtNQVhfUE9SVFNdO1xuIFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xuIFx0dTggc21pX2FkZHJbTUFYX1BPUlRTXTtcbiBcdGJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdO1xuQEAgLTE0Myw2ICYjNDM7MjYwLDcgQEAgc3RydWN0IG90dG9fZW1kaW9faW5mbyB7XG4gXHR1OCBudW1fYnVzZXM7XG4gXHR1OCBudW1fcG9ydHM7XG4gXHR1MTYgbnVtX3BhZ2VzO1xuJiM0MztcdHUzMiBwb2xsX2N0cmw7XG4gXHRpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTtcbiBcdGludCAoKnJlYWRfYzIyKShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XG4gXHRpbnQgKCpyZWFkX2M0NSkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XG5AQCAtMTc4LDYgJiM0MzsyOTYsMTQgQEAgc3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcbiBcdHJldHVybiBjaGFuLVx1MDAzZXByaXY7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCBpbnQgcG9ydCwgYm9vbCBhY3RpdmUpXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIHByaXYtXHUwMDNlaW5mby1cdTAwM2Vwb2xsX2N0cmwgJiM0MzsgKHBvcnQgLyAzMikgKiA0LFxuJiM0MztcdFx0XHRcdCAgQklUKHBvcnQgJSAzMiksIGFjdGl2ZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpXG4ge1xuQEAgLTE4Niw5ICYjNDM7MzEyLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHUzMiBjbWRzdGF0ZTtcbiBcdGludCByZXQ7XG4gXG4tXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqL1xuJiM0MztcdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmx5IHdyb25nICovXG4gXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cdTAwM2VyZWdtYXAsIGluZm8tXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXG4tXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyOCw3ICYjNDM7MzU0LDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LVx1MDAzZXJlZ21hcCwgaW5mby1cdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xuJiM0MztcdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjY1LDEzICYjNDM7MzkxLDEyMyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRyZXR1cm4gb3R0b19lbWRpb19ydW5fY21kKGJ1cywgY21kIHwgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiYjNDM7XHRcdC5leHRfcGFnZVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiYjNDM7XHRcdC5leHRfcGFnZVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuIHtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4gXHR9O1xuIFxuQEAgLTI4NSw3ICYjNDM7NTIxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuIFx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuIFx0fTtcbkBAIC0zMjUsNyAmIzQzOzU2MSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmJyb2FkY2FzdFx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfQkNfUE9SVF9JRCwgcG9ydCksXG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0fTtcbiBcbiBcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMOTMxMF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG5AQCAtMzM3LDcgJiM0Mzs1NzMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuQEAgLTM4Myw4ICYjNDM7NjE5LDEyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKVxuIFx0aWYgKHBvcnQgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGlmIChyZWdudW0gPT0gMzEpXG4mIzQzO1x0XHRcdHJldHVybiBwcml2LVx1MDAzZXBhZ2VbcG9ydF07XG4mIzQzO1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlcmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sIFx1MDAyNnZhbHVlKTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XG4gfVxuQEAgLTM5OCw4ICYjNDM7NjM4LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2XG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbiYjNDM7XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0aWYgKHJlZ251bSA9PSAzMSkge1xuJiM0MztcdFx0XHRpZiAodmFsdWUgXHUwMDNlPSBSQVdfUEFHRShwcml2KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlcGFnZVtwb3J0XSA9IHZhbHVlO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdHJldCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2V3cml0ZV9jMjIoYnVzLCBwb3J0LCByZWdudW0sIHZhbHVlKTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00NzIsNiAmIzQzOzcyMSwxNSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZ1xuJiM0MztcdCAqIHBhdGNoaW5nIGFuZCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIFBIWXMgYXJlIHByb2JlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiB7XG4gXHR1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7XG5AQCAtNTA4LDYgJiM0Mzs3NjYsNTQgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4mIzQzO1x0aW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHBvcnQ7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVx1MDAzZW1kaW9fYnVzXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKCFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LVx1MDAzZXBoeV9pZCwgUEhZX1ZFTkRPUl9SRUFMVEVLKSkpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGlmICh0ZXN0X2JpdChwb3J0LCBwcml2LVx1MDAzZXBoeV9wb2xsKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdF9fc2V0X2JpdChwb3J0LCBwcml2LVx1MDAzZXBoeV9wb2xsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4mIzQzO1x0aW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0X19jbGVhcl9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZGV2X2VycihidXMtXHUwMDNlcGFyZW50LCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBwb2xsaW5nIGZvciBwb3J0ICVkXFxuXCYjMzQ7LCBwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcbiBcdFx0XHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSlcbiB7XG5AQCAtNTM3LDYgJiM0Mzs4NDMsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFx0XHRidXMtXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcbiBcdH1cbiBcdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4mIzQzO1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcbiYjNDM7XHRidXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xuJiM0MztcbiBcdGNoYW4gPSBidXMtXHUwMDNlcHJpdjtcbiBcdGNoYW4tXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcbiBcdGNoYW4tXHUwMDNlcHJpdiA9IHByaXY7XG5AQCAtNjUzLDYgJiM0Mzs5NjIsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIHByaXYtXHUwMDNlaW5mby1cdTAwM2VudW1fcG9ydHM7IHBvcnQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0XHRlcnIgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbkBAIC02NzIsNiAmIzQzOzk5NiwxMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZWdtYXApKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZXJlZ21hcCk7XG4gXG4mIzQzO1x0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuIFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XG4gXG4gXHRlcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpO1xuQEAgLTY5Nyw2ICYjNDM7MTAyNSw1MSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XG4mIzQzO1x0LmFkZHJfbWFwX2Jhc2UgPSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiYjNDM7XHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXG4mIzQzO1x0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxuJiM0MztcdC5jbWRfd3JpdGUgPSBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFLFxuJiM0MztcdC5jbWRfcmVncyA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xLFxuJiM0MztcdFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXG4mIzQzO1x0XHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3cgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMCxcbiYjNDM7XHR9LFxuJiM0MztcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcbiYjNDM7XHQubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsXG4mIzQzO1x0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxuJiM0MztcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4mIzQzO1x0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcixcbiYjNDM7XHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXG4mIzQzO1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuJiM0MztcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyLFxuJiM0MztcdC53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7XG4mIzQzO1x0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxuJiM0MztcdC5jbWRfcmVhZCA9IFJUTDgzOTBfUEhZX0NUUkxfUkVBRCxcbiYjNDM7XHQuY21kX3dyaXRlID0gUlRMODM5MF9QSFlfQ1RSTF9XUklURSxcbiYjNDM7XHQuY21kX3JlZ3MgPSB7XG4mIzQzO1x0XHQuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLFxuJiM0MztcdFx0LmMyMl9kYXRhID0gUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkwsXG4mIzQzO1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcbiYjNDM7XHRcdC5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsXG4mIzQzO1x0XHQuaW9fZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTCxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcbiYjNDM7XHRcdC5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILFxuJiM0MztcdH0sXG4mIzQzO1x0Lm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLFxuJiM0MztcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcbiYjNDM7XHQubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuJiM0MztcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMixcbiYjNDM7XHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsXG4mIzQzO1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG4mIzQzO1x0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiBcdC5idXNfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTCxcbkBAIC03MTIsNiAmIzQzOzEwODUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzAwX05VTV9QQUdFUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLFxuIFx0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcixcbiBcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMixcbiBcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSxcbkBAIC03MzcsNiAmIzQzOzExMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzEwX05VTV9CVVNFUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxuQEAgLTc0NSw2ICYjNDM7MTEyMCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHtcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw4MzgwLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb184MzgwX2luZm8gfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw4MzkxLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb184MzkwX2luZm8gfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHJ0bDkzMDEtbWRpb1wmIzM0OywgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMDBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsOTMxMS1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXG4gXHR7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAwNjE1MjI4NDU5ZWY0Mi4uNjc2Y2JmMTgzMzUwZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTg3Niw2ICYjNDM7MTg3NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3I7XG4gXG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuJiM0MztcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwaHlfcmVzdW1lKHBoeWRldik7XG4gXG4gXHQvKipcbkBAIC0xOTE5LDYgJiM0MzsxOTI1LDkgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcbiBcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4gXG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaClcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xuJiM0MztcbiBcdGlmIChwaHlkZXYtXHUwMDNlZGV2bGluaykge1xuIFx0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuIFx0XHRwaHlkZXYtXHUwMDNlZGV2bGluayA9IE5VTEw7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmZkLi4zMTYwY2E5OWRlYWI3OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0zNzYsNiAmIzQzOzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XG4gXHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpO1xuIFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cbiBcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcbiYjNDM7XHQvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovXG4mIzQzO1x0aW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuJiM0MztcdC8qKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyAqL1xuJiM0MztcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4gXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXG4gXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MC9SVEw4MzkwIE1ESU8gY29udHJvbGxlcnMgdG8gYSBwbGF0Zm9ybSBkcml2ZXIgKG1kaW8tcmVhbHRlay1ydGw5MzAwLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZSBjaGFuZ2VzIHRvIGNvcmUgUEhZIGNvZGUgKHBoeV9kZXZpY2UuYykgbWVyZWx5IGFkZCBhbmQgaW52b2tlIGEgY2FsbGJhY2sgdGhhdCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoaXMgdW5yZWFjaGFibGUgZHJpdmVyLCBtYWtpbmcgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIxYTQ5ZWMxNzdjODZmYzA3YjUyYTlhMjA3ZDRjYWRkYzFkMzU5YTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCA5IDIyOjExOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCmluZGV4IDI3MWUwNWJhZTljNTc0Li42N2UwYjIzYTg0NzBlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbApAQCAtNCw3ICYjNDM7NCw3IEBACiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIwogJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiAKLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyCiYjNDM7dGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXIKIAogbWFpbnRhaW5lcnM6CiAgIC0gQ2hyaXMgUGFja2hhbSAmbHQ7Y2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56Jmd0OwpAQCAtMTIsNiAmIzQzOzEyLDE2IEBAIG1haW50YWluZXJzOgogcHJvcGVydGllczoKICAgY29tcGF0aWJsZToKICAgICBvbmVPZjoKJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpbwomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpbwogICAgICAgLSBpdGVtczoKICAgICAgICAgICAtIGVudW06CiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvCkBAIC0yNCw2ICYjNDM7MzQsOCBAQCBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvCiAgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw5MzExLW1kaW8KICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpbwomIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvCiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpbwogICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCmluZGV4IDg5MmVkMzc4MGE2NTcyLi44ZWU5MmRiZWQ1MmZkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYwpAQCAtMzUsNiAmIzQzOzM1LDc0IEBACiAgKgogICogVGhlIGRyaXZlciB3b3JrcyBvdXQgdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIE1ESU8gYnVzIGRlc2NyaWJlZCBpbiBkZXZpY2UgdHJlZSBhbmQgcGhhbmRsZXMgb24KICAqIHRoZSBldGhlcm5ldC1wb3J0cyBwcm9wZXJ0eS4KJiM0MzsgKgomIzQzOyAqIFRoZSBkZXZpY2VzIGhhdmUgYSBoYXJkd2FyZSBwb2xsaW5nIHVuaXQgdGhhdCBydW5zIGluIHRoZSBiYWNrZ3JvdW5kIHdpdGhvdXQgYW55IENQVSBsb2FkLiBJdAomIzQzOyAqIGNvbnN0YW50bHkgc2NhbnMgdGhlIE1ESU8gYnVzIGFuZCB0aGUgYXR0YWNoZWQgUEhZcyBhbmQgdXBkYXRlcyB0aGUgTUFDIHN0YXR1cyByZWdpc3RlcnMuCiYjNDM7ICoKJiM0MzsgKiBIb3cgZG9lcyB0aGUgcG9sbGluZyB3b3JrPwomIzQzOyAqCiYjNDM7ICogRWFjaCBkZXZpY2UgaGFzIGEgU01JX1BPTExfQ1RSTCByZWdpc3Rlci4gQSBwZXItcG9ydCBiaXRtYXNrIGRlY2lkZXMgaWYgdGhlIGhhcmR3YXJlIHBvbGxpbmcgb2YKJiM0MzsgKiB0aGUgYXNzb2NpYXRlZCBidXMvYWRkcmVzcyBpcyBhY3RpdmUgb3Igbm90LiBUaGUgaGFyZHdhcmUgcnVucyBhIHRpZ2h0IGxvb3Agb3ZlciB0aGlzIGFuZCBmb3IKJiM0MzsgKiBlYWNoIHNldCBwb2xsaW5nIGJpdCBpdCBpc3N1ZXMgYSBzdGF0dXMgY2hlY2sgZm9yIHRoZSBQSFkuIEF0dGFjaGluZyBhIGxvZ2ljIGFuYWx5emVyIHRvIHRoZQomIzQzOyAqIE1ESU8gYnVzIG9mIGFuIFJUTDgzODAgYW5kIFJUTDgzOTMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoaW4ga2VybmVsIG5vdGF0aW9uKToKJiM0MzsgKgomIzQzOyAqCVJUTDgzODAJCQkJUlRMODM5MwomIzQzOyAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKglwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTsJcGh5X3JlYWQocGh5LCAwKTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg3KTsJcGh5X3JlYWQocGh5LCAxKTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7CXBoeV9yZWFkKHBoeSwgNCk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7CXBoeV9yZWFkKHBoeSwgNSk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNCk7CQlwaHlfcmVhZChwaHksIDYpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDEzLCAweDcpOwlwaHlfcmVhZChwaHksIDkpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDE0LCAweDNkKTsJcGh5X3JlYWQocGh5LCAxMCk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7CXBoeV9yZWFkKHBoeSwgMTUpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMTQpOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCA5KTsJCXBoeV93cml0ZShwaHksIDE0LCAweDNjKTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDEwKTsJCXBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMTUpOwkJcGh5X3JlYWQocGh5LCAxNCk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAwKTsJCXBoeV93cml0ZShwaHksIDEzLCAweDcpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMSk7CQlwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCA0KTsJCXBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgNSk7CQlwaHlfcmVhZChwaHksIDE0KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDYpOwomIzQzOyAqCiYjNDM7ICogRnJvbSB0aGUgYWJvdmUgc25pcHBldHMgaXQgcG9sbHMgTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgdmlhIEM0NSBvdmVyIEMyMi4gQXMKJiM0MzsgKiBvZiBub3cgaXQgaXMgdW5jbGVhciBob3cgdGhlIGhhcmR3YXJlIGRlY2lkZXMgaWYgYSBQSFkgc3VwcG9ydHMgdGhlc2UgcmVnaXN0ZXJzLiBBZnRlciBvbmUgUEhZCiYjNDM7ICogc3RhdHVzIGlzIHJlYWQsIHRoZSBwb2xsaW5nIGVuZ2luZSBnb2VzIG92ZXIgdG8gdGhlIG5leHQgUEhZLiBCYXNpY2FsbHkgdGhlIGJ1cyBpcyBhbHdheXMgYnVzeQomIzQzOyAqIGFuZCB0aGUgTUFDIHN0YXR1cyBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS4KJiM0MzsgKgomIzQzOyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/CiYjNDM7ICoKJiM0MzsgKiBXaGVuIGlzc3VpbmcgTURJTyBhY2Nlc3NlcyB2aWEgYW4gTU1JTyBiYXNlZCBpbnRlcmZhY2UgdGhlIGZpbmFsIHdyaXRlIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyCiYjNDM7ICogc2V0cyBhICYjMzQ7cnVuIGNvbW1hbmQgbm93JiMzNDsgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlCiYjNDM7ICogY2hlY2tzIGlmIGEgdXNlciBjb21tYW5kIG5lZWRzIHRvIHJ1biBhbmQgc2VuZHMgaXQgb250byB0aGUgYnVzLiBBZnRlcndhcmRzIGl0IHNpbXBseSBjb250aW51ZXMKJiM0MzsgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHJlYWQgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOgomIzQzOyAqCiYjNDM7ICoJUlRMODM4MAkJCQlSVEw4MzkzCiYjNDM7ICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqCXBoeV93cml0ZShwaHksIDMxLCBwYWdlKTsJcGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpOwlwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTsKJiM0MzsgKgkJCQkJcGh5X3dyaXRlKHBoeSwgMzEsIDApOwomIzQzOyAqCiYjNDM7ICogV2hhdCBkb2VzIHRoaXMgbWVhbj8KJiM0MzsgKgomIzQzOyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2UKJiM0MzsgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0CiYjNDM7ICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uCiYjNDM7ICoKJiM0MzsgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuCiYjNDM7ICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy4KJiM0MzsgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsCiYjNDM7ICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtCiYjNDM7ICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgJiMzNDttYWdpY2FsbHkmIzM0OyBpbiB0aGUgYmFja2dyb3VuZC4KJiM0MzsgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdAomIzQzOyAqICAgdGhlIHBvbGxpbmcgZW5naW5lIG92ZXJ3cml0ZXMgcmVnaXN0ZXJzIDEzLzE0IGluIGJldHdlZW4uCiYjNDM7ICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW4KJiM0MzsgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLgomIzQzOyAqIC0gQW4gYWNjZXNzIHRvIG9uZSBQSFkgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyZWUgc2xvdCBvZiB0aGUgcG9sbGluZyBlbmdpbmUuCiYjNDM7ICoKJiM0MzsgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXQKJiM0MzsgKiBhcmlzZXMgZnJvbSB0aGUgYWJvdmUgZGVzY3JpYmVkIGhhcmR3YXJlIHBvbGxpbmcuCiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CkBAIC01MSw2ICYjNDM7MTE5LDUwIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKIAomIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVMJCQkxCiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9QQUdFUwkJCTQwOTYKJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTCQkJMjgKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMCQkJMHhhMTAwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FCQlCSVQoMTUpCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMAkJMHhhMWI4CiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMQkJMHhhMWJjCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIJCUdFTk1BU0soMjQsIDIwKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRQkJR0VOTUFTSygxOSwgMTUpCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFCQlHRU5NQVNLKDE0LCAzKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFCQlCSVQoMikKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFECQkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1CQlCSVQoMSkKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMgkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwJCQkwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMgkJMHhhMWMwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDMxLCAxNikKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBCQkJR0VOTUFTSygxNSwgMCkKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zCQkweGExYzQKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTAkJCTB4YTE3YwomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwJCTB4YTFjOAomIzQzOwomIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVMJCQkyCiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9QQUdFUwkJCTgxOTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTCQkJNTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTAkJMHgwM2VjCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTAkJMHgwM2RjCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIJCUdFTk1BU0soOSwgNSkKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UJCUdFTk1BU0soMjIsIDEwKQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwJCQlCSVQoMSkKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURQkJQklUKDMpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRAkJCTAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NQkJQklUKDIpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIJCTAKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkwJCQkweDAzZTAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRQkJR0VOTUFTSyg4LCAwKQomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMCQkweDAzZjAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwJCQkweDAzZjQKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1cJCTB4MDNlNAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gJCTB4MDNlOAomIzQzOyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwJCTB4MDNmYwomIzQzOwogI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFUwkJCTQKICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVMJCQk0MDk2CiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTCQkJMjgKQEAgLTcxLDYgJiM0MzsxODMsNyBAQAogI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDMxLCAxNikKICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQogI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMwkJMHhjYjdjCiYjNDM7I2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwJCQkweGNhOTAKICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwJCTB4Y2I4MAogCiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTCQkJNApAQCAtOTYsMTEgJiM0MzsyMDksMTMgQEAKICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQQkJR0VOTUFTSygxNSwgMCkKICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMCTB4MGMxOAogI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTAkJMHgwYzc0CiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTAkJMHgwY2NjCiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUwJCTB4MGM5YwogCiAjZGVmaW5lIFBIWV9DVFJMX0NNRAkJCQlCSVQoMCkKICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFECQkJR0VOTUFTSygyMCwgMTYpCiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUcJCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgUEhZX1ZFTkRPUl9SRUFMVEVLCQkJMHgwMDFjYzgwMAogCiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHCQkJNgogI2RlZmluZSBNQVBfQklUU19QRVJfQUREUgkJCTUKQEAgLTEyNiw3ICYjNDM7MjQxLDkgQEAgc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7CiAJY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyAqaW5mbzsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CiAJc3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3QgSFcgYWNjZXNzICovCiYjNDM7CURFQ0xBUkVfQklUTUFQKHBoeV9wb2xsLCBNQVhfUE9SVFMpOwogCURFQ0xBUkVfQklUTUFQKHZhbGlkX3BvcnRzLCBNQVhfUE9SVFMpOwomIzQzOwl1MTYgcGFnZVtNQVhfUE9SVFNdOwogCXU4IHNtaV9idXNbTUFYX1BPUlRTXTsKIAl1OCBzbWlfYWRkcltNQVhfUE9SVFNdOwogCWJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdOwpAQCAtMTQzLDYgJiM0MzsyNjAsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHsKIAl1OCBudW1fYnVzZXM7CiAJdTggbnVtX3BvcnRzOwogCXUxNiBudW1fcGFnZXM7CiYjNDM7CXUzMiBwb2xsX2N0cmw7CiAJaW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7CiAJaW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTsKIAlpbnQgKCpyZWFkX2M0NSkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7CkBAIC0xNzgsNiAmIzQzOzI5NiwxNCBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogCXJldHVybiBjaGFuLSZndDtwcml2OwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtJmd0O3JlZ21hcCwgcHJpdi0mZ3Q7aW5mby0mZ3Q7cG9sbF9jdHJsICYjNDM7IChwb3J0IC8gMzIpICogNCwKJiM0MzsJCQkJICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLAogCQkJICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKQogewpAQCAtMTg2LDkgJiM0MzszMTIsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLAogCXUzMiBjbWRzdGF0ZTsKIAlpbnQgcmV0OwogCi0JLyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibGUgd3JvbmcgKi8KJiM0MzsJLyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcgKi8KIAlyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi0mZ3Q7cmVnbWFwLCBpbmZvLSZndDtjbWRfcmVncy5jMjJfZGF0YSwKLQkJCQkgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgJmFtcDsgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApOwomIzQzOwkJCQkgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgJmFtcDsgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yMjgsNyAmIzQzOzM1NCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi0mZ3Q7cmVnbWFwLCBpbmZvLSZndDtjbWRfcmVncy5jMjJfZGF0YSwKLQkJCQkgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgJmFtcDsgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApOwomIzQzOwkJCQkgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgJmFtcDsgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yNjUsMTMgJiM0MzszOTEsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCwKIAlyZXR1cm4gb3R0b19lbWRpb19ydW5fY21kKGJ1cywgY21kIHwgcHJpdi0mZ3Q7aW5mby0mZ3Q7Y21kX3dyaXRlLCBjbWRfZGF0YSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEsCiYjNDM7CQkJCSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKJiM0MzsJCS5wb3J0X21hc2tfbG93CT0gQklUKHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsCiYjNDM7CQkJCSAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jNDVfZGF0YQk9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgJmFtcDtjbWRfZGF0YSwKJiM0MzsJCQkJICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmM0NV9kYXRhCT0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiYjNDM7CQkucG9ydF9tYXNrX2xvdwk9IEJJVChwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgJmFtcDtjbWRfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmV4dF9wYWdlCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEsCiYjNDM7CQkJCSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5leHRfcGFnZQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiYjNDM7CQkucG9ydF9tYXNrX2hpZ2gJPSAodTMyKShCSVRfVUxMKHBvcnQpICZndDsmZ3Q7IDMyKSwKJiM0MzsJCS5wb3J0X21hc2tfbG93CT0gKHUzMikoQklUX1VMTChwb3J0KSksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmM0NV9kYXRhCT0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhLAomIzQzOwkJCQkgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzQ1X2RhdGEJPSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKJiM0MzsJCS5wb3J0X21hc2tfaGlnaAk9ICh1MzIpKEJJVF9VTEwocG9ydCkgJmd0OyZndDsgMzIpLAomIzQzOwkJLnBvcnRfbWFza19sb3cJPSAodTMyKShCSVRfVUxMKHBvcnQpKSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgJmFtcDtjbWRfZGF0YSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiB7CiAJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKIAkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKIAkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHwKLQkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKIAkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKIAl9OwogCkBAIC0yODUsNyAmIzQzOzUyMSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKIAkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKIAkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHwKLQkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKIAkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiAJCS5wb3J0X21hc2tfbG93CT0gQklUKHBvcnQpLAogCX07CkBAIC0zMjUsNyAmIzQzOzU2MSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1CiAJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiAJCS5icm9hZGNhc3QJPSBGSUVMRF9QUkVQKFJUTDkzMTBfQkNfUE9SVF9JRCwgcG9ydCksCiAJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8Ci0JCQkJICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksCiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiAJfTsKIAogCXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMOTMxMF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSwKQEAgLTMzNyw3ICYjNDM7NTczLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLAogCXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiAJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiAJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8Ci0JCQkJICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksCiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiAJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAogCQkucG9ydF9tYXNrX2hpZ2gJPSAodTMyKShCSVRfVUxMKHBvcnQpICZndDsmZ3Q7IDMyKSwKIAkJLnBvcnRfbWFza19sb3cJPSAodTMyKShCSVRfVUxMKHBvcnQpKSwKQEAgLTM4Myw4ICYjNDM7NjE5LDEyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKQogCWlmIChwb3J0ICZsdDsgMCkKIAkJcmV0dXJuIHBvcnQ7CiAKLQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCWlmIChyZWdudW0gPT0gMzEpCiYjNDM7CQkJcmV0dXJuIHByaXYtJmd0O3BhZ2VbcG9ydF07CiYjNDM7CiAJCXJldCA9IHByaXYtJmd0O2luZm8tJmd0O3JlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCAmYW1wO3ZhbHVlKTsKJiM0MzsJfQogCiAJcmV0dXJuIHJldCA/IHJldCA6IHZhbHVlOwogfQpAQCAtMzk4LDggJiM0Mzs2MzgsMTcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtLCB1MTYKIAlpZiAocG9ydCAmbHQ7IDApCiAJCXJldHVybiBwb3J0OwogCi0Jc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spCiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKSB7CiYjNDM7CQlpZiAocmVnbnVtID09IDMxKSB7CiYjNDM7CQkJaWYgKHZhbHVlICZndDs9IFJBV19QQUdFKHByaXYpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCQlwcml2LSZndDtwYWdlW3BvcnRdID0gdmFsdWU7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CiAJCXJldCA9IHByaXYtJmd0O2luZm8tJmd0O3dyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDcyLDYgJiM0Mzs3MjEsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZwomIzQzOwkgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtJmd0O3JlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiB7CiAJdTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwOwpAQCAtNTA4LDYgJiM0Mzs3NjYsNTQgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtJmd0O21kaW8uYnVzKTsKJiM0MzsJaW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi0mZ3Q7bWRpby5idXMsIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O3ByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBwb3J0OwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3NtaV9idXNfaXNfYzQ1W2NoYW4tJmd0O21kaW9fYnVzXSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoIXBoeV9pZF9jb21wYXJlX3ZlbmRvcihwaHlkZXYtJmd0O3BoeV9pZCwgUEhZX1ZFTkRPUl9SRUFMVEVLKSkpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O09ubHkgUmVhbHRlayBQSFlzIGFsbG93ZWQgb24gQzIyIGJ1c1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKSB7CiYjNDM7CQlpZiAodGVzdF9iaXQocG9ydCwgcHJpdi0mZ3Q7cGh5X3BvbGwpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJcmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJX19zZXRfYml0KHBvcnQsIHByaXYtJmd0O3BoeV9wb2xsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtJmd0O21kaW8uYnVzKTsKJiM0MzsJaW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi0mZ3Q7bWRpby5idXMsIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCXJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlfX2NsZWFyX2JpdChwb3J0LCBwcml2LSZndDtwaHlfcG9sbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWRldl9lcnIoYnVzLSZndDtwYXJlbnQsICYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxuJiMzNDssIHBvcnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSkKIHsKQEAgLTUzNyw2ICYjNDM7ODQzLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYKIAkJYnVzLSZndDt3cml0ZSA9IG90dG9fZW1kaW9fd3JpdGVfYzIyOwogCX0KIAlidXMtJmd0O3BhcmVudCA9IGRldjsKJiM0MzsJYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7CiYjNDM7CWJ1cy0mZ3Q7bm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoOwomIzQzOwogCWNoYW4gPSBidXMtJmd0O3ByaXY7CiAJY2hhbi0mZ3Q7bWRpb19idXMgPSBtZGlvX2J1czsKIAljaGFuLSZndDtwcml2ID0gcHJpdjsKQEAgLTY1Myw2ICYjNDM7OTYyLDIxIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlmb3IgKGludCBwb3J0ID0gMDsgcG9ydCAmbHQ7IHByaXYtJmd0O2luZm8tJmd0O251bV9wb3J0czsgcG9ydCYjNDM7JiM0MzspIHsKJiM0MzsJCXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKSB7CiYjNDM7CQkJZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwpAQCAtNjcyLDYgJiM0Mzs5OTYsMTAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJaWYgKElTX0VSUihwcml2LSZndDtyZWdtYXApKQogCQlyZXR1cm4gUFRSX0VSUihwcml2LSZndDtyZWdtYXApOwogCiYjNDM7CWVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKIAogCWVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7CkBAIC02OTcsNiAmIzQzOzEwMjUsNTEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHsKJiM0MzsJLmFkZHJfbWFwX2Jhc2UgPSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCwKJiM0MzsJLmNtZF9mYWlsID0gUlRMODM4MF9QSFlfQ1RSTF9GQUlMLAomIzQzOwkuY21kX3JlYWQgPSBSVEw4MzgwX1BIWV9DVFJMX1JFQUQsCiYjNDM7CS5jbWRfd3JpdGUgPSBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFLAomIzQzOwkuY21kX3JlZ3MgPSB7CiYjNDM7CQkuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSwKJiM0MzsJCS5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLAomIzQzOwkJLmlvX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMiwKJiM0MzsJCS5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsCiYjNDM7CX0sCiYjNDM7CS5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUywKJiM0MzsJLm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLAomIzQzOwkubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsCiYjNDM7CS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsCiYjNDM7CS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMiwKJiM0MzsJLnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LAomIzQzOwkud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMiwKJiM0MzsJLndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHsKJiM0MzsJLmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLAomIzQzOwkuY21kX3JlYWQgPSBSVEw4MzkwX1BIWV9DVFJMX1JFQUQsCiYjNDM7CS5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLAomIzQzOwkuY21kX3JlZ3MgPSB7CiYjNDM7CQkuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLAomIzQzOwkJLmMyMl9kYXRhID0gUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkwsCiYjNDM7CQkuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCwKJiM0MzsJCS5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsCiYjNDM7CQkuaW9fZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTCwKJiM0MzsJCS5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVywKJiM0MzsJCS5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILAomIzQzOwl9LAomIzQzOwkubnVtX2J1c2VzID0gUlRMODM5MF9OVU1fQlVTRVMsCiYjNDM7CS5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUywKJiM0MzsJLm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLAomIzQzOwkucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsCiYjNDM7CS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMiwKJiM0MzsJLnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LAomIzQzOwkud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMiwKJiM0MzsJLndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0gewogCS5hZGRyX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsCiAJLmJ1c19tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMLApAQCAtNzEyLDYgJiM0MzsxMDg1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7CiAJLm51bV9idXNlcyA9IFJUTDkzMDBfTlVNX0JVU0VTLAogCS5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUywKIAkubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsCiAJLnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlciwKIAkucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsCiAJLnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LApAQCAtNzM3LDYgJiM0MzsxMTExLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7CiAJLm51bV9idXNlcyA9IFJUTDkzMTBfTlVNX0JVU0VTLAogCS5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUywKIAkubnVtX3BvcnRzID0gUlRMOTMxMF9OVU1fUE9SVFMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCwKIAkuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLAogCS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMiwKIAkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsCkBAIC03NDUsNiAmIzQzOzExMjAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsODM4MC1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzgzODBfaW5mbyB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDgzOTEtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb184MzkwX2luZm8gfSwKIAl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDkzMDEtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb185MzAwX2luZm8gfSwKIAl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDkzMTEtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb185MzEwX2luZm8gfSwKIAl7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKaW5kZXggMDYxNTIyODQ1OWVmNDIuLjY3NmNiZjE4MzM1MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTE4NzYsNiAmIzQzOzE4NzYsMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKIAomIzQzOwlpZiAocGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2gpIHsKJiM0MzsJCWVyciA9IHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZXJyb3I7CiYjNDM7CX0KJiM0MzsKIAlwaHlfcmVzdW1lKHBoeWRldik7CiAKIAkvKioKQEAgLTE5MTksNiAmIzQzOzE5MjUsOSBAQCB2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAlzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDsKIAlzdHJ1Y3QgbWlpX2J1cyAqYnVzOwogCiYjNDM7CWlmIChwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2RldGFjaCkKJiM0MzsJCXBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7CiYjNDM7CiAJaWYgKHBoeWRldi0mZ3Q7ZGV2bGluaykgewogCQlkZXZpY2VfbGlua19kZWwocGh5ZGV2LSZndDtkZXZsaW5rKTsKIAkJcGh5ZGV2LSZndDtkZXZsaW5rID0gTlVMTDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDE5OWE3YWFhMzQxYmZkLi4zMTYwY2E5OWRlYWI3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0zNzYsNiAmIzQzOzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7CiAJCQkgaW50IHJlZ251bSwgdTE2IHZhbCk7CiAJLyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi8KIAlpbnQgKCpyZXNldCkoc3RydWN0IG1paV9idXMgKmJ1cyk7CiYjNDM7CS8qKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgKi8KJiM0MzsJaW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwomIzQzOwkvKiogQG5vdGlmeV9waHlfZGV0YWNoOiBQZXJmb3JtIHByZS1kZXRhY2ggaGFuZGxpbmcgKi8KJiM0MzsJdm9pZCAoKm5vdGlmeV9waHlfZGV0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIAogCS8qKiBAc3RhdHM6IFN0YXRpc3RpYyBjb3VudGVycyBwZXIgZGV2aWNlIG9uIHRoZSBidXMgKi8KIAlzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5OTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSVEw4MzgwL1JUTDgzOTAgTURJTyBDb250cm9sbGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sYCwgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L3BoeS5oYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBhZGRpbmcgc3VwcG9ydCBmb3IgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHRvIHRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDBgIGRyaXZlci4gVGhleSYjMzk7dmUgYWxzbyBhZGRlZCBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyB0byBgc3RydWN0IG1paV9idXNgIGFuZCBhcmUgY2FsbGluZyB0aGVtIGZyb20gYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgLiBJbnRlcmVzdGluZy4KCk5vdywgd2FpdCBhIG1pbnV0ZSwgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIGFyZSAqY29yZSogUEhZIGZ1bmN0aW9ucywgbWVhbmluZyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhpcyBpcyBrZXkuIFRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgZHJpdmVyIGlzIHNwZWNpZmljYWxseSBmb3IgUmVhbHRlayBzd2l0Y2hlcy4gVGhpcyByYWlzZXMgYSBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gTURJTyBkcml2ZXJzIGFyZSB1c3VhbGx5IHBsYXRmb3JtIGRyaXZlcnMsIG1lYW5pbmcgdGhleSBtaWdodCBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB1bmxlc3MgdGhlcmUmIzM5O3MgYSB2aXJ0dWFsIGRldmljZSBvciBhIHByb2JpbmcgbWVjaGFuaXNtLiBCdXQsIGFzIEkganVzdCByZWFsaXplZCwgKnRoZXkmIzM5O3ZlIG1vZGlmaWVkIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCouIFRoYXQmIzM5O3MgdGhlIHJlYWwgd2luIGZvciByZWFjaGFiaWxpdHkuIEFueSBQSFkgYXR0YWNobWVudCBvciBkZXRhY2htZW50IHdpbGwgbm93IGV4ZWN1dGUgdGhlIG5ldyBjb2RlLgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIG5ldyBjb2RlIGluIGBwaHlfYXR0YWNoX2RpcmVjdGAuIEl0JiMzOTtzIGEgc2ltcGxlIGNoZWNrOgpgYGBjCglpZiAocGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2gpIHsKCQllcnIgPSBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpOwoJCWlmIChlcnIpCgkJCWdvdG8gZXJyb3I7Cgl9CmBgYApJdCYjMzk7cyBhIHNtYWxsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgUEhZIGxvZ2ljLiBUaGUgbWFpbiBsb2dpYyBpcyBzdGlsbCB3aXRoaW4gYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLCBhbmQgdGhhdCYjMzk7cyB0aGUgcGFydCB0aGF0JiMzOTtzIGhhcmRlciB0byBnZXQgdG8uCgpTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiB3ZSByZWxpYWJseSBmdXp6IGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYD8gSXQgKmlzKiBhIHBsYXRmb3JtIGRyaXZlci4gQ2FuIFN5emthbGxlciBwcm9iZSBpdCB1c2luZyBgc3l6X21vdW50X2ltYWdlYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSYjMzk7bSBub3Qgc2VlaW5nIGFuIG9idmlvdXMgd2F5LiBTeXprYWxsZXIgZG9lc24mIzM5O3QgZWFzaWx5IGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSYjMzk7cyBhIHBzZXVkby1kZXZpY2Ugb3IgYSBVU0IvUENJIGRyaXZlciBjb21wb25lbnQuIEFoLCB3YWl0IGEgbWludXRlLiBEZXZpY2UgdHJlZSBvdmVybGF5cyEgU3l6a2FsbGVyICpjb3VsZCogcG90ZW50aWFsbHkgaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgdGhyb3VnaCBkZXZpY2UgdHJlZSBvdmVybGF5cywgYnV0IHRoYXQmIzM5O3MgdXN1YWxseSBhIHBhaW4uCgpTdGlsbCwgYmVjYXVzZSBgcGh5X2F0dGFjaF9kaXJlY3RgIGlzIHJlYWNoYWJsZSwgdGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludC4gV2Ugc2hvdWxkIGNoZWNrIHRoZSBjb25maWcgZm9yIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCwgc2VlIGlmIGl0IGNhbiBiZSBlbmFibGVkIG9yIG5vdCwgYnV0IHRoYXQmIzM5O3MgdGhlIGRpcmVjdGlvbiBJJiMzOTttIHRha2luZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8tcmVhbHRlay1ydGw5MzAwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX01ESU9fUElDNjRIUFNDKVx0XHQmIzQzOz0gbWRpby1waWM2NGhwc2Mub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDApXHQmIzQzOz0gbWRpby1yZWFsdGVrLXJ0bDkzMDAub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfTURJT19SRUdNQVApXHRcdCYjNDM7PSBtZGlvLXJlZ21hcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgc3BlY2lmaWMuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSB0byBjb25maXJtIHdoZXRoZXIgdGhlIGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgIG9wdGlvbiBpcyBjb3JyZWN0bHkgY29uZmlndXJlZC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGl0IGlzLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHZlcmlmeSB0aGlzIHNldHRpbmcuIFRoaXMgd2lsbCBoZWxwIHdpdGggZGVidWdnaW5nIGEgcHJvYmxlbSBJIGFtIHdvcmtpbmcgb24uIExldCBtZSBnbyBjaGVjay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTY0PWNvbmZpZyBNRElPX0lQUTgwNjRcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTcxLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3Mjpjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzMtXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjgzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBNRElPX1JFQUxURUtfUlRMOTMwMGAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgTURJT19SRUFMVEVLX1JUTDkzMDBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgdGhpbmcuIFRoaXMgbGlrZWx5IHJlcHJlc2VudHMgYSBtb2R1bGUgb3IgY29tcG9uZW50IHJlbGF0ZWQgdG8gTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgY29tbXVuaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhIFJlYWx0ZWsgUlRMOTMwMCBzZXJpZXMgY2hpcCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgbmV0d29yayBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBwaWVjZXMgb2YgdGhlIHN5c3RlbS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIHdheXMgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIGRlcGVuZGVuY3kgYW5hbHlzaXMuIEZpcnN0LCBJIG5lZWQgdG8ga25vdyB3aGF0IHRoaXMgcmVsaWVzICpvbiouIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBoYXJkd2FyZSBjb21wb25lbnRzIGRvZXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCByZXF1aXJlIHRvIGZ1bmN0aW9uPyBJcyBpdCBhIGRyaXZlcj8gQW4gYWJzdHJhY3Rpb24gbGF5ZXI/IERvZXMgaXQgaW50ZXJmYWNlIGRpcmVjdGx5IHdpdGggdGhlIGhhcmR3YXJlLCBvciBkb2VzIGl0IHNpdCBvbiB0b3Agb2YgYW5vdGhlciBsb3dlci1sZXZlbCBNRElPIGltcGxlbWVudGF0aW9uPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0IHdpbGwgZGVwZW5kIG9uIHRoZSBSZWFsdGVrIFJUTDkzMDAmIzM5O3MgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgb3IgcmVnaXN0ZXJzLCBhbmQgbWF5YmUgYSBnZW5lcmljIE1ESU8gbGlicmFyeS4KCkkgYWxzbyBuZWVkIHRvIGtub3cgd2hhdCAqZGVwZW5kcyogb24gaXQuIFdoYXQgb3RoZXIgY29kZSBpcyBjYWxsaW5nIGl0PyBJcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIG5ldHdvcmsgc3RhY2s/IERvZXMgaXQgZmVlZCBpbnRvIGEgc3BlY2lmaWMgbmV0d29yayBtYW5hZ2VtZW50IHN5c3RlbSBvciBjb25maWd1cmF0aW9uIHRvb2w/IFVuZGVyc3RhbmRpbmcgdGhlIHVwc3RyZWFtIGNvbnN1bWVycyBvZiB0aGlzIGNvbXBvbmVudCB3aWxsIGdpdmUgbWUgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaW1wb3J0YW5jZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGZlZWQgaW50byBuZXR3b3JraW5nIGZ1bmN0aW9ucyBhbmQgbWFuYWdlbWVudCBpbnRlcmZhY2VzLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgd291bGQgYmUgdG8gc3RhcnQgd2l0aCBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gb3IgaGVhZGVyIGZpbGVzLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHNvdXJjZSBjb2RlLCBhbnkgbWFrZWZpbGVzLCBvciBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gaWRlbnRpZnkgdGhvc2UgZGVwZW5kZW5jaWVzLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBpbmNsdWRlIHN0YXRlbWVudHMsIGxpYnJhcnkgbGlua2luZywgYW5kIGFueSBidWlsZCBmbGFncyB0aGF0IG1pZ2h0IHByb3ZpZGUgY2x1ZXMuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNvbXBpbGUtdGltZSwgbGluay10aW1lLCBvciBydW50aW1lIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGhlbHAgbWUgYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoaXMgbW9kdWxlJiMzOTtzIHBsYWNlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcdCAgaW50ZXJmYWNlIHVuaXRzIG9mIHRoZSBJUFE4MDY0IFNvQ1xuIDE3MTpcdFxuIDE3MjpcdGNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxuIDE3MzpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiAxNzQ6XHRcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcbiAxNzU6XHRcdGhlbHBcbiAxNzY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBSZWFsdGVrXG4gMTc3Olx0XHQgIFJUTDkzMDAgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXG4gMTc4Olx0XG4gMTc5Olx0Y29uZmlnIE1ESU9fUkVHTUFQXG4gMTgwOlx0XHR0cmlzdGF0ZVxuIDE4MTpcdFx0aGVscFxuIDE4MjpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNpbmcgTURJTyBkZXZpY2VzIHRoYXQgYXJlIG5vdCBzaXR0aW5nIG9uIGFcbiAxODM6XHRcdCAgcmVndWxhciBNRElPIGJ1cywgYnV0IHN0aWxsIGV4cG9zZXMgdGhlIHN0YW5kYXJkIDgwMi4zIHJlZ2lzdGVyXG4gMTg0Olx0XHQgIGxheW91dC4gSXQmIzM5O3MgcmVnbWFwLWJhc2VkIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgb24gaW50ZWdyYXRlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ0MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDkwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogVW5yZWFjaGFibGUgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBjb2RlJiMzOTtzIGNvbmRpdGlvbmFsIG9uIGBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVGAsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0JiMzOTtzIFJlYWx0ZWstc3BlY2lmaWMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgLCB3aGljaCBhcmUgUEhZIGZ1bmN0aW9ucy4gQSBjYWxsYmFjayBpcyBiZWluZyBpbnZva2VkIHRoZXJlLCBgbWRpby5idXMtJmd0O25vdGlmeV9waHlfYXR0YWNoYCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyByZWFjaGFibGUgdGhpcyBpcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHBsYXRmb3JtIGRyaXZlcnMgYXJlIHVzdWFsbHkgaW5zdGFudGlhdGVkIHRocm91Z2ggZGV2aWNlIHRyZWUuIFN5emthbGxlciwgaW4gaXRzIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGxvYWQgYXJiaXRyYXJ5IERUIG92ZXJsYXlzIHVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQsIG90aGVyIHRoYW4gZm9yIHNwZWNpZmljIGNhc2VzIGxpa2UgVVNCLCBQQ0ksIGFuZCB2aXJ0dWFsIGRldmljZXMuIEkgZGlkIGEgcXVpY2sgbWVtb3J5IGpvZyAtIGRvZXMgc3l6a2FsbGVyIGhhdmUgRFQgb3ZlcmxheSBzdXBwb3J0PyBNb3N0bHkgZm9yIHRob3NlIGRldmljZSB0eXBlcywgaXQgbG9va3MgbGlrZS4KCkJ1dCB0aGUgcmVhbCBraWNrZXIgaXMgdGhpczogdGhpcyBjYWxsYmFjayBgbm90aWZ5X3BoeV9hdHRhY2hgIGlzIG9ubHkgc2V0IGluIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBSZWFsdGVrIHN3aXRjaC4gSXQmIzM5O3Mgbm90IGdvaW5nIHRvIHByb2JlIGluIGEgZ2VuZXJpYyB4ODYgVk0gd2l0aG91dCBhIHNwZWNpZmljIGRldmljZSB0cmVlLCB3aGljaCBpcyBoaWdobHkgdW5saWtlbHkgdG8gYmUgdGhlIGRlZmF1bHQuIFNvIHRoZSBuZXcgY29kZSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIHdpbGwganVzdCBjaGVjayBhIE5VTEwgcG9pbnRlciBhbmQgY29udGludWUuIFRoZSBjb3JlIG9mIHRoZSBuZXcgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUuCgpJJiMzOTttIGNoZWNraW5nIGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciB3YXkgdG8gcmVhY2ggdGhpcyBSZWFsdGVrIE1ESU8gZHJpdmVyLiBObywgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIuIFBsYXRmb3JtIGRyaXZlcnMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBib2FyZCBjb2RlLCBkZXZpY2UgdHJlZSwgb3IgQUNQSS4gSW4gYSBnZW5lcmljIFZNIGxpa2UgUUVNVSB4ODZfNjQgb3IgYXJtNjQsIHRoaXMgc3BlY2lmaWMgZGV2aWNlIHdvbiYjMzk7dCBiZSBwcmVzZW50LgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBgV29ydGhGdXp6aW5nYCBhbmQgd2hldGhlciB0aGUgY29kZSBwYXRocyBhcmUgcG9zc2libGUuIElmIGl0JiMzOTtzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGl0IHNob3VsZCBiZSBmYWxzZSwgcmlnaHQ/IExldCBtZSBjaGVjayBhZ2FpbiBpZiBgb3R0b19lbWRpb19wcm9iZWAgaXMgcmVhY2hhYmxlLiBObywgYmVjYXVzZSBpdCBpcyBhIHBsYXRmb3JtIGRyaXZlci4KClNvIHRoZSBkcml2ZXIgd2lsbCBuZXZlciBwcm9iZSwgYW5kIHRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgY29kZSB3b24mIzM5O3QgZXhlY3V0ZS4gVGhlIGNoYW5nZXMgaW4gYHBoeV9kZXZpY2UuY2AgYXJlIGp1c3QgYWRkaW5nIHRoaXMgY2FsbGJhY2ssIHdoaWNoIHdpbGwgYmUgTlVMTCBpbiBvdXIgZW52aXJvbm1lbnQuIFRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgaW4gdGhlIGBwaHlfYXR0YWNoX2RpcmVjdGAgd2lsbCBuZXZlciBleGVjdXRlLgoKSSYjMzk7bSByZXZpZXdpbmcgdGhlIGluc3RydWN0aW9ucy4gVGhleSBzdGF0ZSB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLgoKVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBzd2l0Y2gsIGFuZCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgaXQgaW4gdGhlIGtlcm5lbCAobGlrZSBgbWFjODAyMTFfaHdzaW1gIG9yIGB2a21zYCkuIEl0JiMzOTtzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGNoZWNraW5nIGlmIHRoZXJlJiMzOTtzIGEgc3lzZnMgb3IgY29uZmlnZnMgaW50ZXJmYWNlIHRvIGluc3RhbnRpYXRlIGl0LiBOby4gSSYjMzk7bGwgZ3JlcCBmb3IgYG5vdGlmeV9waHlfYXR0YWNoYCB0byBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm8gb3RoZXIgZHJpdmVyLgoKVGhlIGNvbmNsdXNpb24gaXMgdGhpcyBpcyB1bnJlYWNoYWJsZSBhbmQsIHRoZXJlZm9yZSwgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vdGlmeV9waHlfYXR0YWNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz03NTM9c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03NjgtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzY5OnN0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc3MC17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTgxNz1zdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODQ1LVx0YnVzLVx1MDAzZXBhcmVudCA9IGRldjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo4NDY6XHRidXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTg0Ny1cdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2g7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzUyPWludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg3OTpcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg4MDpcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4ODEtXHRcdGlmIChlcnIpXG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD0zNjM9c3RydWN0IG1paV9idXMge1xuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMzc4LVx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xuaW5jbHVkZS9saW51eC9waHkuaDozNzk6XHQvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjM4MDpcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbmluY2x1ZGUvbGludXgvcGh5LmgtMzgxLVx0LyoqIEBub3RpZnlfcGh5X2RldGFjaDogUGVyZm9ybSBwcmUtZGV0YWNoIGhhbmRsaW5nICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzAzCgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFZhbHVlKioKCk9rYXksIGFmdGVyIGV4YW1pbmluZyB0aGUgY29kZSwgaXQmIzM5O3MgY2xlYXIgdGhlIG9ubHkgcGxhY2UgdGhlIGNydWNpYWwgc2V0dGluZyBoYXBwZW5zIGlzIHdpdGhpbiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgY29yZSBtb2RpZmljYXRpb25zIGFyZSBlc3NlbnRpYWxseSBuby1vcHMgd2l0aGluIG91ciBzcGVjaWZpYyB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGF0IG1lYW5zIHRoZSBkcml2ZXItbGV2ZWwgY2hhbmdlcywgd2hpY2ggYXJlIHRoZSBwb2ludCBvZiBpbnRlcmVzdCwgYXJlIHNpbXBseSB1bnJlYWNoYWJsZS4KCkdpdmVuIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODM4MC9SVEw4MzkwIE1ESU8gY29udHJvbGxlcnMsIGFuZCB0aGlzIHN1cHBvcnQgcmVsaWVzIGhlYXZpbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUgb3IgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBub2RlcyB0aGF0IGFyZW4mIzM5O3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIG91ciBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGV4ZXJjaXNlZC4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHBoeV9kZXZpY2UuY2AgbWVyZWx5IGluc2VydCBhIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoZSB0YXJnZXRlZCwgdW5yZWFjaGFibGUgZHJpdmVyLiBUaHVzLCB0aGUgcmVhbCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVmZmVjdGl2ZWx5IGhpZGRlbi4KClRoZXJlZm9yZSwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgcGF0Y2ggd29uJiMzOTt0IHByb3ZpZGUgYW55IG1lYW5pbmdmdWwgY292ZXJhZ2UuIEkmIzM5O20gZ29pbmcgdG8gZmxhZyBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJpc2svcmV3YXJkIGp1c3QgaXNuJiMzOTt0IHRoZXJlIGZvciB0aGUgZWZmb3J0IGl0IHdvdWxkIHJlcXVpcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAvUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHRvIGEgcGxhdGZvcm0gZHJpdmVyIChtZGlvLXJlYWx0ZWstcnRsOTMwMC5jKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgKG9yIGRldmljZSB0cmVlIG5vZGVzKSB0aGF0IGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBUaGUgY2hhbmdlcyB0byBjb3JlIFBIWSBjb2RlIChwaHlfZGV2aWNlLmMpIG1lcmVseSBhZGQgYW5kIGludm9rZSBhIGNhbGxiYWNrIHRoYXQgaXMgb25seSBpbXBsZW1lbnRlZCBieSB0aGlzIHVucmVhY2hhYmxlIGRyaXZlciwgbWFraW5nIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MC9SVEw4MzkwIE1ESU8gY29udHJvbGxlcnMgdG8gYSBwbGF0Zm9ybSBkcml2ZXIgKG1kaW8tcmVhbHRlay1ydGw5MzAwLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZSBjaGFuZ2VzIHRvIGNvcmUgUEhZIGNvZGUgKHBoeV9kZXZpY2UuYykgbWVyZWx5IGFkZCBhbmQgaW52b2tlIGEgY2FsbGJhY2sgdGhhdCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoaXMgdW5yZWFjaGFibGUgZHJpdmVyLCBtYWtpbmcgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjoxMTowNC42ODYzNzczOTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODEzNzU3MjU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAvUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHRvIGEgcGxhdGZvcm0gZHJpdmVyIChtZGlvLXJlYWx0ZWstcnRsOTMwMC5jKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgKG9yIGRldmljZSB0cmVlIG5vZGVzKSB0aGF0IGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBUaGUgY2hhbmdlcyB0byBjb3JlIFBIWSBjb2RlIChwaHlfZGV2aWNlLmMpIG1lcmVseSBhZGQgYW5kIGludm9rZSBhIGNhbGxiYWNrIHRoYXQgaXMgb25seSBpbXBsZW1lbnRlZCBieSB0aGlzIHVucmVhY2hhYmxlIGRyaXZlciwgbWFraW5nIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjoxMTowNC42ODYzODIzNzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODU0MTUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIxYTQ5ZWMxNzdjODZmYzA3YjUyYTlhMjA3ZDRjYWRkYzFkMzU5YTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAyMjoxMTowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcXG5pbmRleCAyNzFlMDViYWU5YzU3NC4uNjdlMGIyM2E4NDcwZWEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuQEAgLTQsNyArNCw3IEBAXFxuICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjXFxuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbiBcXG4tdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXJcXG4rdGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXJcXG4gXFxuIG1haW50YWluZXJzOlxcbiAgIC0gQ2hyaXMgUGFja2hhbSBcXHUwMDNjY2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56XFx1MDAzZVxcbkBAIC0xMiw2ICsxMiwxNiBAQCBtYWludGFpbmVyczpcXG4gcHJvcGVydGllczpcXG4gICBjb21wYXRpYmxlOlxcbiAgICAgb25lT2Y6XFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW9cXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvXFxuICAgICAgIC0gaXRlbXM6XFxuICAgICAgICAgICAtIGVudW06XFxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW9cXG5AQCAtMjQsNiArMzQsOCBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW9cXG4gICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsOTMxMS1tZGlvXFxuICAgICAgIC0gZW51bTpcXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xcbmluZGV4IDg5MmVkMzc4MGE2NTcyLi44ZWU5MmRiZWQ1MmZkOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcXG5AQCAtMzUsNiArMzUsNzQgQEBcXG4gICpcXG4gICogVGhlIGRyaXZlciB3b3JrcyBvdXQgdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIE1ESU8gYnVzIGRlc2NyaWJlZCBpbiBkZXZpY2UgdHJlZSBhbmQgcGhhbmRsZXMgb25cXG4gICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LlxcbisgKlxcbisgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXRcXG4rICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy5cXG4rICpcXG4rICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz9cXG4rICpcXG4rICogRWFjaCBkZXZpY2UgaGFzIGEgU01JX1BPTExfQ1RSTCByZWdpc3Rlci4gQSBwZXItcG9ydCBiaXRtYXNrIGRlY2lkZXMgaWYgdGhlIGhhcmR3YXJlIHBvbGxpbmcgb2ZcXG4rICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yXFxuKyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlXFxuKyAqIE1ESU8gYnVzIG9mIGFuIFJUTDgzODAgYW5kIFJUTDgzOTMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoaW4ga2VybmVsIG5vdGF0aW9uKTpcXG4rICpcXG4rICpcXHRSVEw4MzgwXFx0XFx0XFx0XFx0UlRMODM5M1xcbisgKlxcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKlxcdHBoeV93cml0ZShwaHksIDMxLCAweDApO1xcdHBoeV9yZWFkKHBoeSwgMCk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFx0cGh5X3JlYWQocGh5LCAxKTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XFx0cGh5X3JlYWQocGh5LCA0KTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcXHRwaHlfcmVhZChwaHksIDUpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcdFxcdHBoeV9yZWFkKHBoeSwgNik7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFx0cGh5X3JlYWQocGh5LCA5KTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XFx0cGh5X3JlYWQocGh5LCAxMCk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XFx0cGh5X3JlYWQocGh5LCAxNSk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxNCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA5KTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxMCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxNSk7XFx0XFx0cGh5X3JlYWQocGh5LCAxNCk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAwKTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDEpO1xcdFxcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDQpO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgNSk7XFx0XFx0cGh5X3JlYWQocGh5LCAxNCk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA2KTtcXG4rICpcXG4rICogRnJvbSB0aGUgYWJvdmUgc25pcHBldHMgaXQgcG9sbHMgTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgdmlhIEM0NSBvdmVyIEMyMi4gQXNcXG4rICogb2Ygbm93IGl0IGlzIHVuY2xlYXIgaG93IHRoZSBoYXJkd2FyZSBkZWNpZGVzIGlmIGEgUEhZIHN1cHBvcnRzIHRoZXNlIHJlZ2lzdGVycy4gQWZ0ZXIgb25lIFBIWVxcbisgKiBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIEJhc2ljYWxseSB0aGUgYnVzIGlzIGFsd2F5cyBidXN5XFxuKyAqIGFuZCB0aGUgTUFDIHN0YXR1cyBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS5cXG4rICpcXG4rICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz9cXG4rICpcXG4rICogV2hlbiBpc3N1aW5nIE1ESU8gYWNjZXNzZXMgdmlhIGFuIE1NSU8gYmFzZWQgaW50ZXJmYWNlIHRoZSBmaW5hbCB3cml0ZSB0byB0aGUgY29tbWFuZCByZWdpc3RlclxcbisgKiBzZXRzIGEgXFxcInJ1biBjb21tYW5kIG5vd1xcXCIgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXFxuKyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXFxuKyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgcmVhZCBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6XFxuKyAqXFxuKyAqXFx0UlRMODM4MFxcdFxcdFxcdFxcdFJUTDgzOTNcXG4rICpcXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICpcXHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XFx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1xcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1xcbisgKlxcdFxcdFxcdFxcdFxcdHBoeV93cml0ZShwaHksIDMxLCAwKTtcXG4rICpcXG4rICogV2hhdCBkb2VzIHRoaXMgbWVhbj9cXG4rICpcXG4rICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZVxcbisgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0XFxuKyAqIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbCBQSFkgc3Vic3lzdGVtLlxcbisgKlxcbisgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuXFxuKyAqICAgRXNwZWNpYWxseSBhbiB1bnBvcHVsYXRlZCBNQUNfTElOS19TVFMgcmVnaXN0ZXIgY2FuY2VscyBvcGVyYXRpb25zIHRvIG90aGVyIE1BQyByZWdpc3RlcnMuXFxuKyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGxcXG4rICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtXFxuKyAqICAgdG8gdHJhY2sgdGhlIHBhZ2UgYWNjZXNzIFxcXCJtYWdpY2FsbHlcXFwiIGluIHRoZSBiYWNrZ3JvdW5kLlxcbisgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdFxcbisgKiAgIHRoZSBwb2xsaW5nIGVuZ2luZSBvdmVyd3JpdGVzIHJlZ2lzdGVycyAxMy8xNCBpbiBiZXR3ZWVuLlxcbisgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhblxcbisgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLlxcbisgKiAtIEFuIGFjY2VzcyB0byBvbmUgUEhZIHdpbGwgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCBmcmVlIHNsb3Qgb2YgdGhlIHBvbGxpbmcgZW5naW5lLlxcbisgKlxcbisgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXRcXG4rICogYXJpc2VzIGZyb20gdGhlIGFib3ZlIGRlc2NyaWJlZCBoYXJkd2FyZSBwb2xsaW5nLlxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbkBAIC01MSw2ICsxMTksNTAgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4gXFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVNcXHRcXHRcXHQxXFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUEFHRVNcXHRcXHRcXHQ0MDk2XFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFNcXHRcXHRcXHQyOFxcbisjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMXFx0XFx0XFx0MHhhMTAwXFxuKyNkZWZpbmUgICBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORVxcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMFxcdFxcdDB4YTFiOFxcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXFx0XFx0MHhhMWJjXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSXFx0XFx0R0VOTUFTSygyNCwgMjApXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRVxcdFxcdEdFTk1BU0soMTksIDE1KVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0VcXHRcXHRHRU5NQVNLKDE0LCAzKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9XUklURVxcdFxcdEJJVCgyKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFEXFx0XFx0XFx0MFxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NVxcdFxcdEJJVCgxKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlxcdFxcdDBcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTFxcdFxcdFxcdDAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi9cXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMlxcdFxcdDB4YTFjMFxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEFcXHRcXHRHRU5NQVNLKDMxLCAxNilcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcXHRcXHQweGExYzRcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT0xMX0NUUkxcXHRcXHRcXHQweGExN2NcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFxcdFxcdDB4YTFjOFxcbitcXG4rI2RlZmluZSBSVEw4MzkwX05VTV9CVVNFU1xcdFxcdFxcdDJcXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QQUdFU1xcdFxcdFxcdDgxOTJcXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QT1JUU1xcdFxcdFxcdDUyXFxuKyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMXFx0XFx0MHgwM2VjXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcXHRcXHQweDAzZGNcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFJcXHRcXHRHRU5NQVNLKDksIDUpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRVxcdFxcdEdFTk1BU0soMjIsIDEwKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXFx0XFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFXFx0XFx0QklUKDMpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFQURcXHRcXHRcXHQwXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1XFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyXFx0XFx0MFxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcXHRcXHRcXHQweDAzZTBcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcXHRcXHRHRU5NQVNLKDgsIDApXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMXFx0XFx0MHgwM2YwXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMzEsIDE2KVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTFxcdFxcdFxcdDB4MDNmNFxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcXHRcXHQweDAzZTRcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSFxcdFxcdDB4MDNlOFxcbisjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMXFx0XFx0MHgwM2ZjXFxuK1xcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTXFx0XFx0XFx0NFxcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BBR0VTXFx0XFx0XFx0NDA5NlxcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXFx0XFx0XFx0MjhcXG5AQCAtNzEsNiArMTgzLDcgQEBcXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygzMSwgMTYpXFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEFcXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXFx0XFx0MHhjYjdjXFxuKyNkZWZpbmUgUlRMOTMwMF9TTUlfUE9MTF9DVFJMXFx0XFx0XFx0MHhjYTkwXFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcXHRcXHQweGNiODBcXG4gXFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcXHRcXHRcXHQ0XFxuQEAgLTk2LDExICsyMDksMTMgQEBcXG4gI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygxNSwgMClcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkxcXHQweDBjMThcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFxcdFxcdDB4MGM3NFxcbisjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMXFx0XFx0MHgwY2NjXFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTFxcdFxcdDB4MGM5Y1xcbiBcXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcXHRcXHRcXHRcXHRCSVQoMClcXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQURcXHRcXHRcXHRHRU5NQVNLKDIwLCAxNilcXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSBQSFlfVkVORE9SX1JFQUxURUtcXHRcXHRcXHQweDAwMWNjODAwXFxuIFxcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXFx0XFx0XFx0NlxcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSXFx0XFx0XFx0NVxcbkBAIC0xMjYsNyArMjQxLDkgQEAgc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87XFxuIFxcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcXG4gXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3QgSFcgYWNjZXNzICovXFxuK1xcdERFQ0xBUkVfQklUTUFQKHBoeV9wb2xsLCBNQVhfUE9SVFMpO1xcbiBcXHRERUNMQVJFX0JJVE1BUCh2YWxpZF9wb3J0cywgTUFYX1BPUlRTKTtcXG4rXFx0dTE2IHBhZ2VbTUFYX1BPUlRTXTtcXG4gXFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xcbiBcXHR1OCBzbWlfYWRkcltNQVhfUE9SVFNdO1xcbiBcXHRib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTtcXG5AQCAtMTQzLDYgKzI2MCw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xcbiBcXHR1OCBudW1fYnVzZXM7XFxuIFxcdHU4IG51bV9wb3J0cztcXG4gXFx0dTE2IG51bV9wYWdlcztcXG4rXFx0dTMyIHBvbGxfY3RybDtcXG4gXFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XFxuIFxcdGludCAoKnJlYWRfYzIyKShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XFxuIFxcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcXG5AQCAtMTc4LDYgKzI5NiwxNCBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbiBcXHRyZXR1cm4gY2hhbi1cXHUwMDNlcHJpdjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKVxcbit7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXBvbGxfY3RybCArIChwb3J0IC8gMzIpICogNCxcXG4rXFx0XFx0XFx0XFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxcbiB7XFxuQEAgLTE4Niw5ICszMTIsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbiBcXHR1MzIgY21kc3RhdGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqL1xcbitcXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xcbiBcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlcmVnbWFwLCBpbmZvLVxcdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjI4LDcgKzM1NCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlcmVnbWFwLCBpbmZvLVxcdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjY1LDEzICszOTEsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9IEJJVChwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFxcdTAwMjZjbWRfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jNDVfZGF0YVxcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gQklUKHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmV4dF9wYWdlXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbitcXHRcXHQuZXh0X3BhZ2VcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbitcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmM0NV9kYXRhXFx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoXFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFxcdTAwM2VcXHUwMDNlIDMyKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuIHtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuIFxcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4gXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXFxuIFxcdH07XFxuIFxcbkBAIC0yODUsNyArNTIxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbiBcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4tXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuIFxcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXFxuIFxcdFxcdC5wb3J0X21hc2tfbG93XFx0PSBCSVQocG9ydCksXFxuIFxcdH07XFxuQEAgLTMyNSw3ICs1NjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdVxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmJyb2FkY2FzdFxcdD0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLFxcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHR9O1xcbiBcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuQEAgLTMzNyw3ICs1NzMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuQEAgLTM4Myw4ICs2MTksMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXFxuIFxcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmIChyZWdudW0gPT0gMzEpXFxuK1xcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2VwYWdlW3BvcnRdO1xcbitcXG4gXFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlcmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sIFxcdTAwMjZ2YWx1ZSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiByZXQgPyByZXQgOiB2YWx1ZTtcXG4gfVxcbkBAIC0zOTgsOCArNjM4LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2XFxuIFxcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmIChyZWdudW0gPT0gMzEpIHtcXG4rXFx0XFx0XFx0aWYgKHZhbHVlIFxcdTAwM2U9IFJBV19QQUdFKHByaXYpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0gPSB2YWx1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXdyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTQ3Miw2ICs3MjEsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogUEhZX1BBVENIX0RPTkUgZW5hYmxlcyBQSFkgY29udHJvbCB2aWEgU29DLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBQSFkgYWNjZXNzLCBpbmNsdWRpbmdcXG4rXFx0ICogcGF0Y2hpbmcgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgUEhZcyBhcmUgcHJvYmVkLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIHJlZ21hcF9zZXRfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLCBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4ge1xcbiBcXHR1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7XFxuQEAgLTUwOCw2ICs3NjYsNTQgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyk7XFxuK1xcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBvcnQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcG9ydDtcXG4rXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlc21pX2J1c19pc19jNDVbY2hhbi1cXHUwMDNlbWRpb19idXNdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIXBoeV9pZF9jb21wYXJlX3ZlbmRvcihwaHlkZXYtXFx1MDAzZXBoeV9pZCwgUEhZX1ZFTkRPUl9SRUFMVEVLKSkpIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spIHtcXG4rXFx0XFx0aWYgKHRlc3RfYml0KHBvcnQsIHByaXYtXFx1MDAzZXBoeV9wb2xsKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRcXHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgdHJ1ZSk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRfX3NldF9iaXQocG9ydCwgcHJpdi1cXHUwMDNlcGh5X3BvbGwpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyk7XFxuK1xcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBvcnQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRfX2NsZWFyX2JpdChwb3J0LCBwcml2LVxcdTAwM2VwaHlfcG9sbCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGRldl9lcnIoYnVzLVxcdTAwM2VwYXJlbnQsIFxcXCJmYWlsZWQgdG8gZGlzYWJsZSBwb2xsaW5nIGZvciBwb3J0ICVkXFxcXG5cXFwiLCBwb3J0KTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSlcXG4ge1xcbkBAIC01MzcsNiArODQzLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcXG4gXFx0XFx0YnVzLVxcdTAwM2V3cml0ZSA9IG90dG9fZW1kaW9fd3JpdGVfYzIyO1xcbiBcXHR9XFxuIFxcdGJ1cy1cXHUwMDNlcGFyZW50ID0gZGV2O1xcbitcXHRidXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcXG4rXFx0YnVzLVxcdTAwM2Vub3RpZnlfcGh5X2RldGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2g7XFxuK1xcbiBcXHRjaGFuID0gYnVzLVxcdTAwM2Vwcml2O1xcbiBcXHRjaGFuLVxcdTAwM2VtZGlvX2J1cyA9IG1kaW9fYnVzO1xcbiBcXHRjaGFuLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG5AQCAtNjUzLDYgKzk2MiwyMSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcXHUwMDNjIHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZW51bV9wb3J0czsgcG9ydCsrKSB7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG5AQCAtNjcyLDYgKzk5NiwxMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZWdtYXApKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihwcml2LVxcdTAwM2VyZWdtYXApO1xcbiBcXG4rXFx0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbiBcXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTtcXG4gXFxuIFxcdGVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7XFxuQEAgLTY5Nyw2ICsxMDI1LDUxIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XFxuK1xcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXFxuK1xcdC5jbWRfZmFpbCA9IFJUTDgzODBfUEhZX0NUUkxfRkFJTCxcXG4rXFx0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxcbitcXHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcXG4rXFx0LmNtZF9yZWdzID0ge1xcbitcXHRcXHQuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSxcXG4rXFx0XFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXFxuK1xcdFxcdC5pb19kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzIsXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsXFxuK1xcdH0sXFxuK1xcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcXG4rXFx0Lm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLFxcbitcXHQubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXFxuK1xcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsXFxuK1xcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMixcXG4rXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxcbitcXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMixcXG4rXFx0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcXG4rXFx0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxcbitcXHQuY21kX3JlYWQgPSBSVEw4MzkwX1BIWV9DVFJMX1JFQUQsXFxuK1xcdC5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLFxcbitcXHQuY21kX3JlZ3MgPSB7XFxuK1xcdFxcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXFxuK1xcdFxcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxcbitcXHRcXHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcXG4rXFx0XFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcXG4rXFx0XFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXFxuK1xcdH0sXFxuK1xcdC5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUyxcXG4rXFx0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxcbitcXHQubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcXG4rXFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxcbitcXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsXFxuK1xcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLFxcbitcXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xcbiBcXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxcbiBcXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXFxuQEAgLTcxMiw2ICsxMDg1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XFxuIFxcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LFxcbkBAIC03MzcsNiArMTExMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiBcXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXFxuIFxcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxcbkBAIC03NDUsNiArMTEyMCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw4MzkxLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LFxcbiBcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscnRsOTMwMS1tZGlvXFxcIiwgLmRhdGEgPSBcXHUwMDI2b3R0b19lbWRpb185MzAwX2luZm8gfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDkzMTEtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXFxuIFxcdHt9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuaW5kZXggMDYxNTIyODQ1OWVmNDIuLjY3NmNiZjE4MzM1MGQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuQEAgLTE4NzYsNiArMTg3NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJvcjtcXG4gXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xcbitcXHRcXHRlcnIgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yO1xcbitcXHR9XFxuK1xcbiBcXHRwaHlfcmVzdW1lKHBoeWRldik7XFxuIFxcbiBcXHQvKipcXG5AQCAtMTkxOSw2ICsxOTI1LDkgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbiBcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKVxcbitcXHRcXHRwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xcbitcXG4gXFx0aWYgKHBoeWRldi1cXHUwMDNlZGV2bGluaykge1xcbiBcXHRcXHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVxcdTAwM2VkZXZsaW5rKTtcXG4gXFx0XFx0cGh5ZGV2LVxcdTAwM2VkZXZsaW5rID0gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uMzE2MGNhOTlkZWFiNzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMzc2LDYgKzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XFxuIFxcdFxcdFxcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKTtcXG4gXFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cXG4gXFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xcbitcXHQvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovXFxuK1xcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4rXFx0LyoqIEBub3RpZnlfcGh5X2RldGFjaDogUGVyZm9ybSBwcmUtZGV0YWNoIGhhbmRsaW5nICovXFxuK1xcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIFxcbiBcXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXFxuIFxcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjoxMTowNS4xMDU3MjcwNTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzE4MjE0Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MC9SVEw4MzkwIE1ESU8gY29udHJvbGxlcnMgdG8gYSBwbGF0Zm9ybSBkcml2ZXIgKG1kaW8tcmVhbHRlay1ydGw5MzAwLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZSBjaGFuZ2VzIHRvIGNvcmUgUEhZIGNvZGUgKHBoeV9kZXZpY2UuYykgbWVyZWx5IGFkZCBhbmQgaW52b2tlIGEgY2FsbGJhY2sgdGhhdCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoaXMgdW5yZWFjaGFibGUgZHJpdmVyLCBtYWtpbmcgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjFhNDllYzE3N2M4NmZjMDdiNTJhOWEyMDdkNGNhZGRjMWQzNTlhM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMjI6MTE6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbmluZGV4IDI3MWUwNWJhZTljNTc0Li42N2UwYjIzYTg0NzBlYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5AQCAtNCw3ICs0LDcgQEBcbiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sI1xuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuIFxuLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyXG4rdGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXJcbiBcbiBtYWludGFpbmVyczpcbiAgIC0gQ2hyaXMgUGFja2hhbSBcdTAwM2NjaHJpcy5wYWNraGFtQGFsbGllZHRlbGVzaXMuY28ubnpcdTAwM2VcbkBAIC0xMiw2ICsxMiwxNiBAQCBtYWludGFpbmVyczpcbiBwcm9wZXJ0aWVzOlxuICAgY29tcGF0aWJsZTpcbiAgICAgb25lT2Y6XG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODItbWRpb1xuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzODAtbWRpb1xuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAtIGl0ZW1zOlxuICAgICAgICAgICAtIGVudW06XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMmItbWRpb1xuQEAgLTI0LDYgKzM0LDggQEAgcHJvcGVydGllczpcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW9cbiAgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw5MzExLW1kaW9cbiAgICAgICAtIGVudW06XG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cbisgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbmluZGV4IDg5MmVkMzc4MGE2NTcyLi44ZWU5MmRiZWQ1MmZkOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5AQCAtMzUsNiArMzUsNzQgQEBcbiAgKlxuICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uXG4gICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LlxuKyAqXG4rICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0XG4rICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy5cbisgKlxuKyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/XG4rICpcbisgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZlxuKyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvclxuKyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlXG4rICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOlxuKyAqXG4rICpcdFJUTDgzODBcdFx0XHRcdFJUTDgzOTNcbisgKlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIDB4MCk7XHRwaHlfcmVhZChwaHksIDApO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgMSk7XG4rICpcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcdHBoeV9yZWFkKHBoeSwgNCk7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCA1KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV9yZWFkKHBoeSwgNik7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1x0cGh5X3JlYWQocGh5LCA5KTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1x0cGh5X3JlYWQocGh5LCAxMCk7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCAxNSk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbisgKlx0cGh5X3JlYWQocGh5LCA5KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xuKyAqXHRwaHlfcmVhZChwaHksIDEwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTUpO1x0XHRwaHlfcmVhZChwaHksIDE0KTtcbisgKlx0cGh5X3JlYWQocGh5LCAwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMSk7XHRcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcbisgKlx0cGh5X3JlYWQocGh5LCA0KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuKyAqXHRwaHlfcmVhZChwaHksIDYpO1xuKyAqXG4rICogRnJvbSB0aGUgYWJvdmUgc25pcHBldHMgaXQgcG9sbHMgTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgdmlhIEM0NSBvdmVyIEMyMi4gQXNcbisgKiBvZiBub3cgaXQgaXMgdW5jbGVhciBob3cgdGhlIGhhcmR3YXJlIGRlY2lkZXMgaWYgYSBQSFkgc3VwcG9ydHMgdGhlc2UgcmVnaXN0ZXJzLiBBZnRlciBvbmUgUEhZXG4rICogc3RhdHVzIGlzIHJlYWQsIHRoZSBwb2xsaW5nIGVuZ2luZSBnb2VzIG92ZXIgdG8gdGhlIG5leHQgUEhZLiBCYXNpY2FsbHkgdGhlIGJ1cyBpcyBhbHdheXMgYnVzeVxuKyAqIGFuZCB0aGUgTUFDIHN0YXR1cyBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS5cbisgKlxuKyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/XG4rICpcbisgKiBXaGVuIGlzc3VpbmcgTURJTyBhY2Nlc3NlcyB2aWEgYW4gTU1JTyBiYXNlZCBpbnRlcmZhY2UgdGhlIGZpbmFsIHdyaXRlIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyXG4rICogc2V0cyBhIFwicnVuIGNvbW1hbmQgbm93XCIgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXG4rICogY2hlY2tzIGlmIGEgdXNlciBjb21tYW5kIG5lZWRzIHRvIHJ1biBhbmQgc2VuZHMgaXQgb250byB0aGUgYnVzLiBBZnRlcndhcmRzIGl0IHNpbXBseSBjb250aW51ZXNcbisgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHJlYWQgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOlxuKyAqXG4rICpcdFJUTDgzODBcdFx0XHRcdFJUTDgzOTNcbisgKlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1x0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xuKyAqXHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1xuKyAqXHRcdFx0XHRcdHBoeV93cml0ZShwaHksIDMxLCAwKTtcbisgKlxuKyAqIFdoYXQgZG9lcyB0aGlzIG1lYW4/XG4rICpcbisgKiBUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIHBvbGxpbmcgYW5kIFBIWSBhY2Nlc3MgYmV0d2VlbiB0aGUgbW9kZWxzIGJ1dCB0aGUgY2hhbGxlbmdlXG4rICogc3RheXMgdGhlIHNhbWUuIE9uIHRoZSBvbmUgaGFuZCB0aGF0IGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgTUFDIGxheWVyLCBvbiB0aGUgb3RoZXIgaGFuZCBpdFxuKyAqIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbCBQSFkgc3Vic3lzdGVtLlxuKyAqXG4rICogLSBXaXRob3V0IHRoZSBwb2xsaW5nIGFuZCBhIHByb3BlciBNQUMgc3RhdHVzLCBzb21lIG9mIHRoZSBsaW5rIGhhbmRsaW5nIGZlYXR1cmVzIGRvIG5vdCB3b3JrLlxuKyAqICAgRXNwZWNpYWxseSBhbiB1bnBvcHVsYXRlZCBNQUNfTElOS19TVFMgcmVnaXN0ZXIgY2FuY2VscyBvcGVyYXRpb25zIHRvIG90aGVyIE1BQyByZWdpc3RlcnMuXG4rICogLSBUaGUgUmVhbHRlayBwYWdlIHJlZ2lzdGVyIDMxIGlzIG1hZ2ljYWxseSBtb2RpZmllZCBpbiB0aGUgYmFja2dyb3VuZCBzbyB0aGF0IHBvbGxpbmcgd2lsbFxuKyAqICAgcmVhZCB0aGUgcmlnaHQgZGF0YS4gT24gdGhlIFJUTDgzOHggcG9sbGluZyBzaW1wbHkgcmVzZXRzIGl0IHRvIHplcm8uIE90aGVyIGRldmljZXMgc2VlbVxuKyAqICAgdG8gdHJhY2sgdGhlIHBhZ2UgYWNjZXNzIFwibWFnaWNhbGx5XCIgaW4gdGhlIGJhY2tncm91bmQuXG4rICogLSBBIEM0NSBvdmVyIEMyMiBrZXJuZWwgYWNjZXNzIHNlcXVlbmNlIGlzIG1vc3QgbGlrZWx5IHRvIGZhaWwgYmVjYXVzZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXRcbisgKiAgIHRoZSBwb2xsaW5nIGVuZ2luZSBvdmVyd3JpdGVzIHJlZ2lzdGVycyAxMy8xNCBpbiBiZXR3ZWVuLlxuKyAqIC0gUEhZIGZpcm13YXJlIGxvYWRpbmcgY2FuIGhhdmUgaXNzdWVzLiBFc3BlY2lhbGx5IGlmIGEgUEhZIGlzIGRlc2lnbmVkIHRvIGV4cGVjdCBhIGNsZWFuXG4rICogICBzZXF1ZW5jZSBvZiByZWdpc3RlcnMgYW5kIHZhbHVlcyB3aXRob3V0IGRldmlhdGlvbi5cbisgKiAtIEFuIGFjY2VzcyB0byBvbmUgUEhZIHdpbGwgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCBmcmVlIHNsb3Qgb2YgdGhlIHBvbGxpbmcgZW5naW5lLlxuKyAqXG4rICogQ29uY2x1c2lvbjogVGhlIFJlYWx0ZWsgTURJTyBidXMgZHJpdmVyIFBIWSBhY2Nlc3MgbXVzdCBrbm93IGFuZCBoYW5kbGUgYW55IGludGVyZmVyZW5jZSB0aGF0XG4rICogYXJpc2VzIGZyb20gdGhlIGFib3ZlIGRlc2NyaWJlZCBoYXJkd2FyZSBwb2xsaW5nLlxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbkBAIC01MSw2ICsxMTksNTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbiBcbisjZGVmaW5lIFJUTDgzODBfTlVNX0JVU0VTXHRcdFx0MVxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4rI2RlZmluZSBSVEw4MzgwX05VTV9QT1JUU1x0XHRcdDI4XG4rI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4YTEwMFxuKyNkZWZpbmUgICBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORVx0XHRCSVQoMTUpXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMFx0XHQweGExYjhcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXHRcdDB4YTFiY1xuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSXHRcdEdFTk1BU0soMjQsIDIwKVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRVx0XHRHRU5NQVNLKDE5LCAxNSlcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0VcdFx0R0VOTUFTSygxNCwgMylcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9XUklURVx0XHRCSVQoMilcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgxKVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyXHRcdDBcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9GQUlMXHRcdFx0MCAvKiBubyBmYWlsIGluZGljYXRvciAqL1xuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzJcdFx0MHhhMWMwXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcdFx0MHhhMWM0XG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT0xMX0NUUkxcdFx0XHQweGExN2NcbisjZGVmaW5lIFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMXHRcdDB4YTFjOFxuK1xuKyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVNcdFx0XHQyXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QQUdFU1x0XHRcdDgxOTJcbisjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTXHRcdFx0NTJcbisjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTFx0XHQweDAzZWNcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMXHRcdDB4MDNkY1xuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSXHRcdEdFTk1BU0soOSwgNSlcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0VcdFx0R0VOTUFTSygyMiwgMTApXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRkFJTFx0XHRcdEJJVCgxKVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgzKVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDVcdFx0QklUKDIpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQ1RSTFx0XHRcdDB4MDNlMFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFXHRcdEdFTk1BU0soOCwgMClcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTFx0XHQweDAzZjBcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTFx0XHRcdDB4MDNmNFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPV1x0XHQweDAzZTRcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdIXHRcdDB4MDNlOFxuKyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcdFx0MHgwM2ZjXG4rXG4gI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFU1x0XHRcdDRcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFNcdFx0XHQyOFxuQEAgLTcxLDYgKzE4Myw3IEBAXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuICNkZWZpbmUgUlRMOTMwMF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcdFx0MHhjYjdjXG4rI2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkxcdFx0XHQweGNhOTBcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMXHRcdDB4Y2I4MFxuIFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcdFx0XHQ0XG5AQCAtOTYsMTEgKzIwOSwxMyBAQFxuICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDE1LCAwKVxuICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMXHQweDBjMThcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfQUREUl9DVFJMXHRcdDB4MGM3NFxuKyNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcdFx0MHgwY2NjXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfU0VMXHRcdDB4MGM5Y1xuIFxuICNkZWZpbmUgUEhZX0NUUkxfQ01EXHRcdFx0XHRCSVQoMClcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9ERVZBRFx0XHRcdEdFTk1BU0soMjAsIDE2KVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX1JFR1x0XHRcdEdFTk1BU0soMTUsIDApXG4rI2RlZmluZSBQSFlfVkVORE9SX1JFQUxURUtcdFx0XHQweDAwMWNjODAwXG4gXG4gI2RlZmluZSBNQVBfQUREUlNfUEVSX1JFR1x0XHRcdDZcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSXHRcdFx0NVxuQEAgLTEyNiw3ICsyNDEsOSBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2IHtcbiBcdGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87XG4gXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4gXHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdCBIVyBhY2Nlc3MgKi9cbitcdERFQ0xBUkVfQklUTUFQKHBoeV9wb2xsLCBNQVhfUE9SVFMpO1xuIFx0REVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7XG4rXHR1MTYgcGFnZVtNQVhfUE9SVFNdO1xuIFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xuIFx0dTggc21pX2FkZHJbTUFYX1BPUlRTXTtcbiBcdGJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdO1xuQEAgLTE0Myw2ICsyNjAsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcbiBcdHU4IG51bV9idXNlcztcbiBcdHU4IG51bV9wb3J0cztcbiBcdHUxNiBudW1fcGFnZXM7XG4rXHR1MzIgcG9sbF9jdHJsO1xuIFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XG4gXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuIFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuQEAgLTE3OCw2ICsyOTYsMTQgQEAgc3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcbiBcdHJldHVybiBjaGFuLVx1MDAzZXByaXY7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBwcml2LVx1MDAzZWluZm8tXHUwMDNlcG9sbF9jdHJsICsgKHBvcnQgLyAzMikgKiA0LFxuK1x0XHRcdFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpXG4ge1xuQEAgLTE4Niw5ICszMTIsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0dTMyIGNtZHN0YXRlO1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmxlIHdyb25nICovXG4rXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4rXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyOCw3ICszNTQsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4rXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTI2NSwxMyArMzkxLDEyMyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRyZXR1cm4gb3R0b19lbWRpb19ydW5fY21kKGJ1cywgY21kIHwgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4rXHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuK1x0XHRcdFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5leHRfcGFnZVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuK1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuK1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiB7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuIFx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4gXHR9O1xuIFxuQEAgLTI4NSw3ICs1MjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbiBcdH07XG5AQCAtMzI1LDcgKzU2MSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmJyb2FkY2FzdFx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfQkNfUE9SVF9JRCwgcG9ydCksXG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHR9O1xuIFxuIFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbkBAIC0zMzcsNyArNTczLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuQEAgLTM4Myw4ICs2MTksMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdGlmIChyZWdudW0gPT0gMzEpXG4rXHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlcGFnZVtwb3J0XTtcbitcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcdTAwMjZ2YWx1ZSk7XG4rXHR9XG4gXG4gXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XG4gfVxuQEAgLTM5OCw4ICs2MzgsMTcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtLCB1MTZcbiBcdGlmIChwb3J0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuK1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbitcdFx0aWYgKHJlZ251bSA9PSAzMSkge1xuK1x0XHRcdGlmICh2YWx1ZSBcdTAwM2U9IFJBV19QQUdFKHByaXYpKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdFx0cHJpdi1cdTAwM2VwYWdlW3BvcnRdID0gdmFsdWU7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXdyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDcyLDYgKzcyMSwxNSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4re1xuK1x0LypcbitcdCAqIFBIWV9QQVRDSF9ET05FIGVuYWJsZXMgUEhZIGNvbnRyb2wgdmlhIFNvQy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgUEhZIGFjY2VzcywgaW5jbHVkaW5nXG4rXHQgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuXG4rXHQgKi9cbitcdHJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLCBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiB7XG4gXHR1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7XG5AQCAtNTA4LDYgKzc2Niw1NCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVx1MDAzZW1kaW8uYnVzKTtcbitcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXHUwMDNlbWRpby5idXMsIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwb3J0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcG9ydDtcbitcbitcdGlmICghcHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVx1MDAzZW1kaW9fYnVzXSBcdTAwMjZcdTAwMjZcbitcdCAgICAoIXBoeV9pZF9jb21wYXJlX3ZlbmRvcihwaHlkZXYtXHUwMDNlcGh5X2lkLCBQSFlfVkVORE9SX1JFQUxURUspKSkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdGlmICh0ZXN0X2JpdChwb3J0LCBwcml2LVx1MDAzZXBoeV9wb2xsKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0cmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRfX3NldF9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVx1MDAzZW1kaW8uYnVzKTtcbitcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXHUwMDNlbWRpby5idXMsIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbitcdFx0cmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0X19jbGVhcl9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCk7XG4rXHR9XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfZXJyKGJ1cy1cdTAwM2VwYXJlbnQsIFwiZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcblwiLCBwb3J0KTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXG4ge1xuQEAgLTUzNyw2ICs4NDMsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFx0XHRidXMtXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcbiBcdH1cbiBcdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4rXHRidXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoO1xuK1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbitcbiBcdGNoYW4gPSBidXMtXHUwMDNlcHJpdjtcbiBcdGNoYW4tXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcbiBcdGNoYW4tXHUwMDNlcHJpdiA9IHByaXY7XG5AQCAtNjUzLDYgKzk2MiwyMSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIHByaXYtXHUwMDNlaW5mby1cdTAwM2VudW1fcG9ydHM7IHBvcnQrKykge1xuK1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuK1x0XHRcdGVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbkBAIC02NzIsNiArOTk2LDEwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbiBcbitcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbiBcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbkBAIC02OTcsNiArMTAyNSw1MSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcbitcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4rXHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXG4rXHQuY21kX3JlYWQgPSBSVEw4MzgwX1BIWV9DVFJMX1JFQUQsXG4rXHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcbitcdC5jbWRfcmVncyA9IHtcbitcdFx0LmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsXG4rXHRcdC5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLFxuK1x0XHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxuK1x0XHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLFxuK1x0fSxcbitcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcbitcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcbitcdC5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4rXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLFxuK1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXG4rXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NSxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0ge1xuK1x0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxuK1x0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxuK1x0LmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsXG4rXHQuY21kX3JlZ3MgPSB7XG4rXHRcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXG4rXHRcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxuK1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcbitcdFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcbitcdFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXG4rXHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcbitcdFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXG4rXHR9LFxuK1x0Lm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLFxuK1x0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuK1x0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuK1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG4rXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSxcbit9O1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiBcdC5idXNfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTCxcbkBAIC03MTIsNiArMTA4NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0Lm51bV9idXNlcyA9IFJUTDkzMDBfTlVNX0JVU0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxuIFx0Lm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXG5AQCAtNzM3LDYgKzExMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzEwX05VTV9CVVNFUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsXG5AQCAtNzQ1LDYgKzExMjAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDgzOTEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM5MF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDkzMDEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMwMF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDkzMTEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXG4gXHR7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAwNjE1MjI4NDU5ZWY0Mi4uNjc2Y2JmMTgzMzUwZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTg3Niw2ICsxODc2LDEyIEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcjtcbiBcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbitcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBlcnJvcjtcbitcdH1cbitcbiBcdHBoeV9yZXN1bWUocGh5ZGV2KTtcbiBcbiBcdC8qKlxuQEAgLTE5MTksNiArMTkyNSw5IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuIFxuK1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaClcbitcdFx0cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XG4rXG4gXHRpZiAocGh5ZGV2LVx1MDAzZWRldmxpbmspIHtcbiBcdFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cdTAwM2VkZXZsaW5rKTtcbiBcdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uMzE2MGNhOTlkZWFiNzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMzc2LDYgKzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XG4gXHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpO1xuIFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cbiBcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcbitcdC8qKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgKi9cbitcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbitcdC8qKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyAqL1xuK1x0dm9pZCAoKm5vdGlmeV9waHlfZGV0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBcbiBcdC8qKiBAc3RhdHM6IFN0YXRpc3RpYyBjb3VudGVycyBwZXIgZGV2aWNlIG9uIHRoZSBidXMgKi9cbiBcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6MTE6MDUuMTA1NzI4NzMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY0NTI0ODI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJUTDgzODAvUlRMODM5MCBNRElPIENvbnRyb2xsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sYCwgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L3BoeS5oYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBhZGRpbmcgc3VwcG9ydCBmb3IgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHRvIHRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDBgIGRyaXZlci4gVGhleSd2ZSBhbHNvIGFkZGVkIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIGBzdHJ1Y3QgbWlpX2J1c2AgYW5kIGFyZSBjYWxsaW5nIHRoZW0gZnJvbSBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIEludGVyZXN0aW5nLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBhcmUgKmNvcmUqIFBIWSBmdW5jdGlvbnMsIG1lYW5pbmcgdGhleSdyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhpcyBpcyBrZXkuIFRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgZHJpdmVyIGlzIHNwZWNpZmljYWxseSBmb3IgUmVhbHRlayBzd2l0Y2hlcy4gVGhpcyByYWlzZXMgYSBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gTURJTyBkcml2ZXJzIGFyZSB1c3VhbGx5IHBsYXRmb3JtIGRyaXZlcnMsIG1lYW5pbmcgdGhleSBtaWdodCBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB1bmxlc3MgdGhlcmUncyBhIHZpcnR1YWwgZGV2aWNlIG9yIGEgcHJvYmluZyBtZWNoYW5pc20uIEJ1dCwgYXMgSSBqdXN0IHJlYWxpemVkLCAqdGhleSd2ZSBtb2RpZmllZCBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAqLiBUaGF0J3MgdGhlIHJlYWwgd2luIGZvciByZWFjaGFiaWxpdHkuIEFueSBQSFkgYXR0YWNobWVudCBvciBkZXRhY2htZW50IHdpbGwgbm93IGV4ZWN1dGUgdGhlIG5ldyBjb2RlLlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZSBuZXcgY29kZSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgLiBJdCdzIGEgc2ltcGxlIGNoZWNrOlxuYGBgY1xuXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKSB7XG5cdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG5cdFx0aWYgKGVycilcblx0XHRcdGdvdG8gZXJyb3I7XG5cdH1cbmBgYFxuSXQncyBhIHNtYWxsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgUEhZIGxvZ2ljLiBUaGUgbWFpbiBsb2dpYyBpcyBzdGlsbCB3aXRoaW4gYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLCBhbmQgdGhhdCdzIHRoZSBwYXJ0IHRoYXQncyBoYXJkZXIgdG8gZ2V0IHRvLlxuXG5TbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiB3ZSByZWxpYWJseSBmdXp6IGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYD8gSXQgKmlzKiBhIHBsYXRmb3JtIGRyaXZlci4gQ2FuIFN5emthbGxlciBwcm9iZSBpdCB1c2luZyBgc3l6X21vdW50X2ltYWdlYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSdtIG5vdCBzZWVpbmcgYW4gb2J2aW91cyB3YXkuIFN5emthbGxlciBkb2Vzbid0IGVhc2lseSBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhlcmUncyBhIHBzZXVkby1kZXZpY2Ugb3IgYSBVU0IvUENJIGRyaXZlciBjb21wb25lbnQuIEFoLCB3YWl0IGEgbWludXRlLiBEZXZpY2UgdHJlZSBvdmVybGF5cyEgU3l6a2FsbGVyICpjb3VsZCogcG90ZW50aWFsbHkgaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgdGhyb3VnaCBkZXZpY2UgdHJlZSBvdmVybGF5cywgYnV0IHRoYXQncyB1c3VhbGx5IGEgcGFpbi5cblxuU3RpbGwsIGJlY2F1c2UgYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyByZWFjaGFibGUsIHRoYXQncyB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludC4gV2Ugc2hvdWxkIGNoZWNrIHRoZSBjb25maWcgZm9yIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCwgc2VlIGlmIGl0IGNhbiBiZSBlbmFibGVkIG9yIG5vdCwgYnV0IHRoYXQncyB0aGUgZGlyZWN0aW9uIEknbSB0YWtpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5OTIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjoxMToxMy43NTA5Nzg5MDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NTUzMDYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvLXJlYWx0ZWstcnRsOTMwMFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19NRElPX1BJQzY0SFBTQylcXHRcXHQrPSBtZGlvLXBpYzY0aHBzYy5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDApXFx0Kz0gbWRpby1yZWFsdGVrLXJ0bDkzMDAub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX01ESU9fUkVHTUFQKVxcdFxcdCs9IG1kaW8tcmVnbWFwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6MTE6MTUuOTQ2NTE0NjQ0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU4NjQzNDIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRGl2ZTogUmVhbHRlayBSVEw5MzAwIE1ESU8gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgc3BlY2lmaWMuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgYENPTkZJR19NRElPX1JFQUxURUtfUlRMOTMwMGAgb3B0aW9uIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLiBJJ20gYXNzdW1pbmcgdGhhdCBpdCBpcywgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHZlcmlmeSB0aGlzIHNldHRpbmcuIFRoaXMgd2lsbCBoZWxwIHdpdGggZGVidWdnaW5nIGEgcHJvYmxlbSBJIGFtIHdvcmtpbmcgb24uIExldCBtZSBnbyBjaGVjay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM5NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjExOjE4LjUzMjk1MDgyMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIzNzQ4MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTY0PWNvbmZpZyBNRElPX0lQUTgwNjRcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzEtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3Mjpjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6MTE6MjAuNTU2NzA0OTg3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNTM2ODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBNRElPX1JFQUxURUtfUlRMOTMwMGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE1ESU9fUkVBTFRFS19SVEw5MzAwYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIHRyYWNlIHRoaXMgdGhpbmcuIFRoaXMgbGlrZWx5IHJlcHJlc2VudHMgYSBtb2R1bGUgb3IgY29tcG9uZW50IHJlbGF0ZWQgdG8gTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgY29tbXVuaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhIFJlYWx0ZWsgUlRMOTMwMCBzZXJpZXMgY2hpcCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgbmV0d29yayBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBwaWVjZXMgb2YgdGhlIHN5c3RlbS5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzdGFuZGFyZCB3YXlzIEknZCBhcHByb2FjaCB0aGlzIGRlcGVuZGVuY3kgYW5hbHlzaXMuIEZpcnN0LCBJIG5lZWQgdG8ga25vdyB3aGF0IHRoaXMgcmVsaWVzICpvbiouIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBoYXJkd2FyZSBjb21wb25lbnRzIGRvZXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCByZXF1aXJlIHRvIGZ1bmN0aW9uPyBJcyBpdCBhIGRyaXZlcj8gQW4gYWJzdHJhY3Rpb24gbGF5ZXI/IERvZXMgaXQgaW50ZXJmYWNlIGRpcmVjdGx5IHdpdGggdGhlIGhhcmR3YXJlLCBvciBkb2VzIGl0IHNpdCBvbiB0b3Agb2YgYW5vdGhlciBsb3dlci1sZXZlbCBNRElPIGltcGxlbWVudGF0aW9uPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgaXQgd2lsbCBkZXBlbmQgb24gdGhlIFJlYWx0ZWsgUlRMOTMwMCdzIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIG9yIHJlZ2lzdGVycywgYW5kIG1heWJlIGEgZ2VuZXJpYyBNRElPIGxpYnJhcnkuXG5cbkkgYWxzbyBuZWVkIHRvIGtub3cgd2hhdCAqZGVwZW5kcyogb24gaXQuIFdoYXQgb3RoZXIgY29kZSBpcyBjYWxsaW5nIGl0PyBJcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIG5ldHdvcmsgc3RhY2s/IERvZXMgaXQgZmVlZCBpbnRvIGEgc3BlY2lmaWMgbmV0d29yayBtYW5hZ2VtZW50IHN5c3RlbSBvciBjb25maWd1cmF0aW9uIHRvb2w/IFVuZGVyc3RhbmRpbmcgdGhlIHVwc3RyZWFtIGNvbnN1bWVycyBvZiB0aGlzIGNvbXBvbmVudCB3aWxsIGdpdmUgbWUgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaW1wb3J0YW5jZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEknZCBleHBlY3QgaXQgdG8gZmVlZCBpbnRvIG5ldHdvcmtpbmcgZnVuY3Rpb25zIGFuZCBtYW5hZ2VtZW50IGludGVyZmFjZXMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzIHdvdWxkIGJlIHRvIHN0YXJ0IHdpdGggYW55IGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIG9yIGhlYWRlciBmaWxlcy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIHNvdXJjZSBjb2RlLCBhbnkgbWFrZWZpbGVzLCBvciBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gaWRlbnRpZnkgdGhvc2UgZGVwZW5kZW5jaWVzLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGluY2x1ZGUgc3RhdGVtZW50cywgbGlicmFyeSBsaW5raW5nLCBhbmQgYW55IGJ1aWxkIGZsYWdzIHRoYXQgbWlnaHQgcHJvdmlkZSBjbHVlcy4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb21waWxlLXRpbWUsIGxpbmstdGltZSwgb3IgcnVudGltZSBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGlzIG1vZHVsZSdzIHBsYWNlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjgzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6MTE6MjQuNjcyMDc1Mjk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXHQgIGludGVyZmFjZSB1bml0cyBvZiB0aGUgSVBRODA2NCBTb0NcXG4gMTcxOlxcdFxcbiAxNzI6XFx0Y29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXFxuIDE3MzpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuIDE3NDpcXHRcXHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXFxuIDE3NTpcXHRcXHRoZWxwXFxuIDE3NjpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgUmVhbHRla1xcbiAxNzc6XFx0XFx0ICBSVEw5MzAwIGZhbWlseSBvZiBFdGhlcm5ldCBzd2l0Y2hlcyB3aXRoIGludGVncmF0ZWQgU29DLlxcbiAxNzg6XFx0XFxuIDE3OTpcXHRjb25maWcgTURJT19SRUdNQVBcXG4gMTgwOlxcdFxcdHRyaXN0YXRlXFxuIDE4MTpcXHRcXHRoZWxwXFxuIDE4MjpcXHRcXHQgIFRoaXMgZHJpdmVyIGFsbG93cyB1c2luZyBNRElPIGRldmljZXMgdGhhdCBhcmUgbm90IHNpdHRpbmcgb24gYVxcbiAxODM6XFx0XFx0ICByZWd1bGFyIE1ESU8gYnVzLCBidXQgc3RpbGwgZXhwb3NlcyB0aGUgc3RhbmRhcmQgODAyLjMgcmVnaXN0ZXJcXG4gMTg0OlxcdFxcdCAgbGF5b3V0LiBJdCdzIHJlZ21hcC1iYXNlZCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIG9uIGludGVncmF0ZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjExOjI0LjY3MjE0ODAwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzE3NDcyOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBVbnJlYWNoYWJsZSBDb2RlIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgZGVhbC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUgY29kZSdzIGNvbmRpdGlvbmFsIG9uIGBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVGAsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0J3MgUmVhbHRlay1zcGVjaWZpYy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAsIHdoaWNoIGFyZSBQSFkgZnVuY3Rpb25zLiBBIGNhbGxiYWNrIGlzIGJlaW5nIGludm9rZWQgdGhlcmUsIGBtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaGAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgcmVhY2hhYmxlIHRoaXMgaXMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHBsYXRmb3JtIGRyaXZlcnMgYXJlIHVzdWFsbHkgaW5zdGFudGlhdGVkIHRocm91Z2ggZGV2aWNlIHRyZWUuIFN5emthbGxlciwgaW4gaXRzIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgZG9lc24ndCB0eXBpY2FsbHkgbG9hZCBhcmJpdHJhcnkgRFQgb3ZlcmxheXMgdW5sZXNzIGV4cGxpY2l0bHkgY29uZmlndXJlZCwgb3RoZXIgdGhhbiBmb3Igc3BlY2lmaWMgY2FzZXMgbGlrZSBVU0IsIFBDSSwgYW5kIHZpcnR1YWwgZGV2aWNlcy4gSSBkaWQgYSBxdWljayBtZW1vcnkgam9nIC0gZG9lcyBzeXprYWxsZXIgaGF2ZSBEVCBvdmVybGF5IHN1cHBvcnQ/IE1vc3RseSBmb3IgdGhvc2UgZGV2aWNlIHR5cGVzLCBpdCBsb29rcyBsaWtlLlxuXG5CdXQgdGhlIHJlYWwga2lja2VyIGlzIHRoaXM6IHRoaXMgY2FsbGJhY2sgYG5vdGlmeV9waHlfYXR0YWNoYCBpcyBvbmx5IHNldCBpbiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgUmVhbHRlayBzd2l0Y2guIEl0J3Mgbm90IGdvaW5nIHRvIHByb2JlIGluIGEgZ2VuZXJpYyB4ODYgVk0gd2l0aG91dCBhIHNwZWNpZmljIGRldmljZSB0cmVlLCB3aGljaCBpcyBoaWdobHkgdW5saWtlbHkgdG8gYmUgdGhlIGRlZmF1bHQuIFNvIHRoZSBuZXcgY29kZSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIHdpbGwganVzdCBjaGVjayBhIE5VTEwgcG9pbnRlciBhbmQgY29udGludWUuIFRoZSBjb3JlIG9mIHRoZSBuZXcgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUuXG5cbkknbSBjaGVja2luZyBpZiB0aGVyZSdzIGFueSBvdGhlciB3YXkgdG8gcmVhY2ggdGhpcyBSZWFsdGVrIE1ESU8gZHJpdmVyLiBObywgaXQncyBhIHBsYXRmb3JtIGRyaXZlci4gUGxhdGZvcm0gZHJpdmVycyBhcmUgY3JlYXRlZCB0aHJvdWdoIGJvYXJkIGNvZGUsIGRldmljZSB0cmVlLCBvciBBQ1BJLiBJbiBhIGdlbmVyaWMgVk0gbGlrZSBRRU1VIHg4Nl82NCBvciBhcm02NCwgdGhpcyBzcGVjaWZpYyBkZXZpY2Ugd29uJ3QgYmUgcHJlc2VudC5cblxuSSdtIHRoaW5raW5nIGFib3V0IGBXb3J0aEZ1enppbmdgIGFuZCB3aGV0aGVyIHRoZSBjb2RlIHBhdGhzIGFyZSBwb3NzaWJsZS4gSWYgaXQncyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBpdCBzaG91bGQgYmUgZmFsc2UsIHJpZ2h0PyBMZXQgbWUgY2hlY2sgYWdhaW4gaWYgYG90dG9fZW1kaW9fcHJvYmVgIGlzIHJlYWNoYWJsZS4gTm8sIGJlY2F1c2UgaXQgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuXG5cblNvIHRoZSBkcml2ZXIgd2lsbCBuZXZlciBwcm9iZSwgYW5kIHRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgY29kZSB3b24ndCBleGVjdXRlLiBUaGUgY2hhbmdlcyBpbiBgcGh5X2RldmljZS5jYCBhcmUganVzdCBhZGRpbmcgdGhpcyBjYWxsYmFjaywgd2hpY2ggd2lsbCBiZSBOVUxMIGluIG91ciBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBpbiB0aGUgYHBoeV9hdHRhY2hfZGlyZWN0YCB3aWxsIG5ldmVyIGV4ZWN1dGUuXG5cbkknbSByZXZpZXdpbmcgdGhlIGluc3RydWN0aW9ucy4gVGhleSBzdGF0ZSB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5UaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIHN3aXRjaCwgYW5kIHRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIGl0IGluIHRoZSBrZXJuZWwgKGxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBgdmttc2ApLiBJdCdzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBjaGVja2luZyBpZiB0aGVyZSdzIGEgc3lzZnMgb3IgY29uZmlnZnMgaW50ZXJmYWNlIHRvIGluc3RhbnRpYXRlIGl0LiBOby4gSSdsbCBncmVwIGZvciBgbm90aWZ5X3BoeV9hdHRhY2hgIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIG90aGVyIGRyaXZlci5cblxuVGhlIGNvbmNsdXNpb24gaXMgdGhpcyBpcyB1bnJlYWNoYWJsZSBhbmQsIHRoZXJlZm9yZSwgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDQxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6MTE6MzUuOTg5NjI1MTI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM3Mjc5OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vdGlmeV9waHlfYXR0YWNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz03NTM9c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc2OC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzY5OnN0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03NzAte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTgxNz1zdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04NDUtXFx0YnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjg0NjpcXHRidXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODQ3LVxcdGJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzUyPWludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODc4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg3OTpcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4ODA6XFx0XFx0ZXJyID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4ODEtXFx0XFx0aWYgKGVycilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9MzYzPXN0cnVjdCBtaWlfYnVzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMzc4LVxcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjM3OTpcXHQvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovXFxuaW5jbHVkZS9saW51eC9waHkuaDozODA6XFx0aW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbmluY2x1ZGUvbGludXgvcGh5LmgtMzgxLVxcdC8qKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjoxMTozOC4xMjY5MTA1MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5Njk5NDE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgVmFsdWUqKlxuXG5Pa2F5LCBhZnRlciBleGFtaW5pbmcgdGhlIGNvZGUsIGl0J3MgY2xlYXIgdGhlIG9ubHkgcGxhY2UgdGhlIGNydWNpYWwgc2V0dGluZyBoYXBwZW5zIGlzIHdpdGhpbiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgY29yZSBtb2RpZmljYXRpb25zIGFyZSBlc3NlbnRpYWxseSBuby1vcHMgd2l0aGluIG91ciBzcGVjaWZpYyB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGF0IG1lYW5zIHRoZSBkcml2ZXItbGV2ZWwgY2hhbmdlcywgd2hpY2ggYXJlIHRoZSBwb2ludCBvZiBpbnRlcmVzdCwgYXJlIHNpbXBseSB1bnJlYWNoYWJsZS5cblxuR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MzgwL1JUTDgzOTAgTURJTyBjb250cm9sbGVycywgYW5kIHRoaXMgc3VwcG9ydCByZWxpZXMgaGVhdmlseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSBvciBjb3JyZXNwb25kaW5nIGRldmljZSB0cmVlIG5vZGVzIHRoYXQgYXJlbid0IGF2YWlsYWJsZSBvciBlbXVsYXRlZCBpbiBvdXIgc3RhbmRhcmQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5IGlzbid0IGdvaW5nIHRvIGJlIGV4ZXJjaXNlZC4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHBoeV9kZXZpY2UuY2AgbWVyZWx5IGluc2VydCBhIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoZSB0YXJnZXRlZCwgdW5yZWFjaGFibGUgZHJpdmVyLiBUaHVzLCB0aGUgcmVhbCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVmZmVjdGl2ZWx5IGhpZGRlbi5cblxuVGhlcmVmb3JlLCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRjaCB3b24ndCBwcm92aWRlIGFueSBtZWFuaW5nZnVsIGNvdmVyYWdlLiBJJ20gZ29pbmcgdG8gZmxhZyBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJpc2svcmV3YXJkIGp1c3QgaXNuJ3QgdGhlcmUgZm9yIHRoZSBlZmZvcnQgaXQgd291bGQgcmVxdWlyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MDMsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjExOjQyLjgyMzkwNzE5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAvUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHRvIGEgcGxhdGZvcm0gZHJpdmVyIChtZGlvLXJlYWx0ZWstcnRsOTMwMC5jKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgKG9yIGRldmljZSB0cmVlIG5vZGVzKSB0aGF0IGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBUaGUgY2hhbmdlcyB0byBjb3JlIFBIWSBjb2RlIChwaHlfZGV2aWNlLmMpIG1lcmVseSBhZGQgYW5kIGludm9rZSBhIGNhbGxiYWNrIHRoYXQgaXMgb25seSBpbXBsZW1lbnRlZCBieSB0aGlzIHVucmVhY2hhYmxlIGRyaXZlciwgbWFraW5nIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MC9SVEw4MzkwIE1ESU8gY29udHJvbGxlcnMgdG8gYSBwbGF0Zm9ybSBkcml2ZXIgKG1kaW8tcmVhbHRlay1ydGw5MzAwLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZSBjaGFuZ2VzIHRvIGNvcmUgUEhZIGNvZGUgKHBoeV9kZXZpY2UuYykgbWVyZWx5IGFkZCBhbmQgaW52b2tlIGEgY2FsbGJhY2sgdGhhdCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoaXMgdW5yZWFjaGFibGUgZHJpdmVyLCBtYWtpbmcgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdzsb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 21:52:03 +0000 UTC FinishedAt: 2026-07-09 22:11:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgUmVhbHRlayBSVEw4MzgwL1JUTDgzOTAgTURJTyBjb250cm9sbGVycyB0byBhIHBsYXRmb3JtIGRyaXZlciAobWRpby1yZWFsdGVrLXJ0bDkzMDAuYykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIChvciBkZXZpY2UgdHJlZSBub2RlcykgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gVGhlIGNoYW5nZXMgdG8gY29yZSBQSFkgY29kZSAocGh5X2RldmljZS5jKSBtZXJlbHkgYWRkIGFuZCBpbnZva2UgYSBjYWxsYmFjayB0aGF0IGlzIG9ubHkgaW1wbGVtZW50ZWQgYnkgdGhpcyB1bnJlYWNoYWJsZSBkcml2ZXIsIG1ha2luZyB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIxYTQ5ZWMxNzdjODZmYzA3YjUyYTlhMjA3ZDRjYWRkYzFkMzU5YTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDIyOjExOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuaW5kZXggMjcxZTA1YmFlOWM1NzQuLjY3ZTBiMjNhODQ3MGVhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbkBAIC00LDcgJiM0Mzs0LDcgQEBcbiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sI1xuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuIFxuLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyXG4mIzQzO3RpdGxlOiBSZWFsdGVrIE90dG8gU3dpdGNoZXMgRXRoZXJuZXQgTURJTyBDb250cm9sbGVyXG4gXG4gbWFpbnRhaW5lcnM6XG4gICAtIENocmlzIFBhY2toYW0gXHUwMDNjY2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56XHUwMDNlXG5AQCAtMTIsNiAmIzQzOzEyLDE2IEBAIG1haW50YWluZXJzOlxuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBvbmVPZjpcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODItbWRpb1xuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzgwLW1kaW9cbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5Mi1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpb1xuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAtIGl0ZW1zOlxuICAgICAgICAgICAtIGVudW06XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMmItbWRpb1xuQEAgLTI0LDYgJiM0MzszNCw4IEBAIHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvXG4gICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsOTMxMS1tZGlvXG4gICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpb1xuJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbmluZGV4IDg5MmVkMzc4MGE2NTcyLi44ZWU5MmRiZWQ1MmZkOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5AQCAtMzUsNiAmIzQzOzM1LDc0IEBAXG4gICpcbiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvblxuICAqIHRoZSBldGhlcm5ldC1wb3J0cyBwcm9wZXJ0eS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0XG4mIzQzOyAqIGNvbnN0YW50bHkgc2NhbnMgdGhlIE1ESU8gYnVzIGFuZCB0aGUgYXR0YWNoZWQgUEhZcyBhbmQgdXBkYXRlcyB0aGUgTUFDIHN0YXR1cyByZWdpc3RlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/XG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mXG4mIzQzOyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvclxuJiM0MzsgKiBlYWNoIHNldCBwb2xsaW5nIGJpdCBpdCBpc3N1ZXMgYSBzdGF0dXMgY2hlY2sgZm9yIHRoZSBQSFkuIEF0dGFjaGluZyBhIGxvZ2ljIGFuYWx5emVyIHRvIHRoZVxuJiM0MzsgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6XG4mIzQzOyAqXG4mIzQzOyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4mIzQzOyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIDB4MCk7XHRwaHlfcmVhZChwaHksIDApO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDEpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1x0cGh5X3JlYWQocGh5LCA0KTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCA1KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMTQpO1x0XHRwaHlfcmVhZChwaHksIDYpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDkpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1x0cGh5X3JlYWQocGh5LCAxMCk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcdHBoeV9yZWFkKHBoeSwgMTUpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA5KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxMCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDEpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA2KTtcbiYjNDM7ICpcbiYjNDM7ICogRnJvbSB0aGUgYWJvdmUgc25pcHBldHMgaXQgcG9sbHMgTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgdmlhIEM0NSBvdmVyIEMyMi4gQXNcbiYjNDM7ICogb2Ygbm93IGl0IGlzIHVuY2xlYXIgaG93IHRoZSBoYXJkd2FyZSBkZWNpZGVzIGlmIGEgUEhZIHN1cHBvcnRzIHRoZXNlIHJlZ2lzdGVycy4gQWZ0ZXIgb25lIFBIWVxuJiM0MzsgKiBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIEJhc2ljYWxseSB0aGUgYnVzIGlzIGFsd2F5cyBidXN5XG4mIzQzOyAqIGFuZCB0aGUgTUFDIHN0YXR1cyBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS5cbiYjNDM7ICpcbiYjNDM7ICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz9cbiYjNDM7ICpcbiYjNDM7ICogV2hlbiBpc3N1aW5nIE1ESU8gYWNjZXNzZXMgdmlhIGFuIE1NSU8gYmFzZWQgaW50ZXJmYWNlIHRoZSBmaW5hbCB3cml0ZSB0byB0aGUgY29tbWFuZCByZWdpc3RlclxuJiM0MzsgKiBzZXRzIGEgXCYjMzQ7cnVuIGNvbW1hbmQgbm93XCYjMzQ7IGJpdC4gQmV0d2VlbiB0d28gcG9sbGluZyBzZXF1ZW5jZXMgZm9yIGRpZmZlcmVudCBQSFlzIHRoZSBoYXJkd2FyZVxuJiM0MzsgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlc1xuJiM0MzsgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHJlYWQgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOlxuJiM0MzsgKlxuJiM0MzsgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuJiM0MzsgKlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1x0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XG4mIzQzOyAqXHRcdFx0XHRcdHBoeV93cml0ZShwaHksIDMxLCAwKTtcbiYjNDM7ICpcbiYjNDM7ICogV2hhdCBkb2VzIHRoaXMgbWVhbj9cbiYjNDM7ICpcbiYjNDM7ICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZVxuJiM0MzsgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0XG4mIzQzOyAqIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbCBQSFkgc3Vic3lzdGVtLlxuJiM0MzsgKlxuJiM0MzsgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuXG4mIzQzOyAqICAgRXNwZWNpYWxseSBhbiB1bnBvcHVsYXRlZCBNQUNfTElOS19TVFMgcmVnaXN0ZXIgY2FuY2VscyBvcGVyYXRpb25zIHRvIG90aGVyIE1BQyByZWdpc3RlcnMuXG4mIzQzOyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGxcbiYjNDM7ICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtXG4mIzQzOyAqICAgdG8gdHJhY2sgdGhlIHBhZ2UgYWNjZXNzIFwmIzM0O21hZ2ljYWxseVwmIzM0OyBpbiB0aGUgYmFja2dyb3VuZC5cbiYjNDM7ICogLSBBIEM0NSBvdmVyIEMyMiBrZXJuZWwgYWNjZXNzIHNlcXVlbmNlIGlzIG1vc3QgbGlrZWx5IHRvIGZhaWwgYmVjYXVzZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXRcbiYjNDM7ICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi5cbiYjNDM7ICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW5cbiYjNDM7ICogICBzZXF1ZW5jZSBvZiByZWdpc3RlcnMgYW5kIHZhbHVlcyB3aXRob3V0IGRldmlhdGlvbi5cbiYjNDM7ICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS5cbiYjNDM7ICpcbiYjNDM7ICogQ29uY2x1c2lvbjogVGhlIFJlYWx0ZWsgTURJTyBidXMgZHJpdmVyIFBIWSBhY2Nlc3MgbXVzdCBrbm93IGFuZCBoYW5kbGUgYW55IGludGVyZmVyZW5jZSB0aGF0XG4mIzQzOyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG5AQCAtNTEsNiAmIzQzOzExOSw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuIFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX0JVU0VTXHRcdFx0MVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXHRcdFx0MjhcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4YTEwMFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXHRcdDB4YTFiOFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXHRcdDB4YTFiY1xuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDI0LCAyMClcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFXHRcdEdFTk1BU0soMTksIDE1KVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0VcdFx0R0VOTUFTSygxNCwgMylcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcdFx0XHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzJcdFx0MHhhMWMwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcdFx0MHhhMWM0XG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhhMTdjXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhhMWM4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX0JVU0VTXHRcdFx0MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTXHRcdFx0ODE5MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTXHRcdFx0NTJcbiYjNDM7I2RlZmluZSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkxcdFx0MHgwM2VjXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcdFx0MHgwM2RjXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSXHRcdEdFTk1BU0soOSwgNSlcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMjIsIDEwKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXHRcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcdFx0XHQweDAzZTBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcdFx0R0VOTUFTSyg4LCAwKVxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTFx0XHQweDAzZjBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTFx0XHRcdDB4MDNmNFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcdFx0MHgwM2U0XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcdFx0MHgwM2U4XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcdFx0MHgwM2ZjXG4mIzQzO1xuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXHRcdFx0MjhcbkBAIC03MSw2ICYjNDM7MTgzLDcgQEBcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGNiN2NcbiYjNDM7I2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkxcdFx0XHQweGNhOTBcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMXHRcdDB4Y2I4MFxuIFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcdFx0XHQ0XG5AQCAtOTYsMTEgJiM0MzsyMDksMTMgQEBcbiAjZGVmaW5lICAgUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19NTURfQ1RSTFx0MHgwYzE4XG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFx0XHQweDBjNzRcbiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDBjY2NcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcdFx0MHgwYzljXG4gXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcdFx0XHRcdEJJVCgwKVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXHRcdFx0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSBQSFlfVkVORE9SX1JFQUxURUtcdFx0XHQweDAwMWNjODAwXG4gXG4gI2RlZmluZSBNQVBfQUREUlNfUEVSX1JFR1x0XHRcdDZcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSXHRcdFx0NVxuQEAgLTEyNiw3ICYjNDM7MjQxLDkgQEAgc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XG4gXHRjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvICppbmZvO1xuIFx0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuIFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3QgSFcgYWNjZXNzICovXG4mIzQzO1x0REVDTEFSRV9CSVRNQVAocGh5X3BvbGwsIE1BWF9QT1JUUyk7XG4gXHRERUNMQVJFX0JJVE1BUCh2YWxpZF9wb3J0cywgTUFYX1BPUlRTKTtcbiYjNDM7XHR1MTYgcGFnZVtNQVhfUE9SVFNdO1xuIFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xuIFx0dTggc21pX2FkZHJbTUFYX1BPUlRTXTtcbiBcdGJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdO1xuQEAgLTE0Myw2ICYjNDM7MjYwLDcgQEAgc3RydWN0IG90dG9fZW1kaW9faW5mbyB7XG4gXHR1OCBudW1fYnVzZXM7XG4gXHR1OCBudW1fcG9ydHM7XG4gXHR1MTYgbnVtX3BhZ2VzO1xuJiM0MztcdHUzMiBwb2xsX2N0cmw7XG4gXHRpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTtcbiBcdGludCAoKnJlYWRfYzIyKShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XG4gXHRpbnQgKCpyZWFkX2M0NSkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XG5AQCAtMTc4LDYgJiM0MzsyOTYsMTQgQEAgc3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcbiBcdHJldHVybiBjaGFuLVx1MDAzZXByaXY7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCBpbnQgcG9ydCwgYm9vbCBhY3RpdmUpXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIHByaXYtXHUwMDNlaW5mby1cdTAwM2Vwb2xsX2N0cmwgJiM0MzsgKHBvcnQgLyAzMikgKiA0LFxuJiM0MztcdFx0XHRcdCAgQklUKHBvcnQgJSAzMiksIGFjdGl2ZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpXG4ge1xuQEAgLTE4Niw5ICYjNDM7MzEyLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHUzMiBjbWRzdGF0ZTtcbiBcdGludCByZXQ7XG4gXG4tXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqL1xuJiM0MztcdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmx5IHdyb25nICovXG4gXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cdTAwM2VyZWdtYXAsIGluZm8tXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXG4tXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyOCw3ICYjNDM7MzU0LDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LVx1MDAzZXJlZ21hcCwgaW5mby1cdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xuJiM0MztcdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjY1LDEzICYjNDM7MzkxLDEyMyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRyZXR1cm4gb3R0b19lbWRpb19ydW5fY21kKGJ1cywgY21kIHwgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiYjNDM7XHRcdC5leHRfcGFnZVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiYjNDM7XHRcdC5leHRfcGFnZVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuIHtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4gXHR9O1xuIFxuQEAgLTI4NSw3ICYjNDM7NTIxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuIFx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuIFx0fTtcbkBAIC0zMjUsNyAmIzQzOzU2MSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmJyb2FkY2FzdFx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfQkNfUE9SVF9JRCwgcG9ydCksXG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0fTtcbiBcbiBcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMOTMxMF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG5AQCAtMzM3LDcgJiM0Mzs1NzMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuQEAgLTM4Myw4ICYjNDM7NjE5LDEyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKVxuIFx0aWYgKHBvcnQgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGlmIChyZWdudW0gPT0gMzEpXG4mIzQzO1x0XHRcdHJldHVybiBwcml2LVx1MDAzZXBhZ2VbcG9ydF07XG4mIzQzO1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlcmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sIFx1MDAyNnZhbHVlKTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XG4gfVxuQEAgLTM5OCw4ICYjNDM7NjM4LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2XG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbiYjNDM7XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0aWYgKHJlZ251bSA9PSAzMSkge1xuJiM0MztcdFx0XHRpZiAodmFsdWUgXHUwMDNlPSBSQVdfUEFHRShwcml2KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlcGFnZVtwb3J0XSA9IHZhbHVlO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdHJldCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2V3cml0ZV9jMjIoYnVzLCBwb3J0LCByZWdudW0sIHZhbHVlKTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00NzIsNiAmIzQzOzcyMSwxNSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZ1xuJiM0MztcdCAqIHBhdGNoaW5nIGFuZCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIFBIWXMgYXJlIHByb2JlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiB7XG4gXHR1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7XG5AQCAtNTA4LDYgJiM0Mzs3NjYsNTQgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4mIzQzO1x0aW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHBvcnQ7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVx1MDAzZW1kaW9fYnVzXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKCFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LVx1MDAzZXBoeV9pZCwgUEhZX1ZFTkRPUl9SRUFMVEVLKSkpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGlmICh0ZXN0X2JpdChwb3J0LCBwcml2LVx1MDAzZXBoeV9wb2xsKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdF9fc2V0X2JpdChwb3J0LCBwcml2LVx1MDAzZXBoeV9wb2xsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4mIzQzO1x0aW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0X19jbGVhcl9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZGV2X2VycihidXMtXHUwMDNlcGFyZW50LCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBwb2xsaW5nIGZvciBwb3J0ICVkXFxuXCYjMzQ7LCBwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcbiBcdFx0XHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSlcbiB7XG5AQCAtNTM3LDYgJiM0Mzs4NDMsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFx0XHRidXMtXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcbiBcdH1cbiBcdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4mIzQzO1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcbiYjNDM7XHRidXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xuJiM0MztcbiBcdGNoYW4gPSBidXMtXHUwMDNlcHJpdjtcbiBcdGNoYW4tXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcbiBcdGNoYW4tXHUwMDNlcHJpdiA9IHByaXY7XG5AQCAtNjUzLDYgJiM0Mzs5NjIsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIHByaXYtXHUwMDNlaW5mby1cdTAwM2VudW1fcG9ydHM7IHBvcnQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0XHRlcnIgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbkBAIC02NzIsNiAmIzQzOzk5NiwxMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZWdtYXApKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZXJlZ21hcCk7XG4gXG4mIzQzO1x0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuIFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XG4gXG4gXHRlcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpO1xuQEAgLTY5Nyw2ICYjNDM7MTAyNSw1MSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XG4mIzQzO1x0LmFkZHJfbWFwX2Jhc2UgPSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiYjNDM7XHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXG4mIzQzO1x0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxuJiM0MztcdC5jbWRfd3JpdGUgPSBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFLFxuJiM0MztcdC5jbWRfcmVncyA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xLFxuJiM0MztcdFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXG4mIzQzO1x0XHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3cgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMCxcbiYjNDM7XHR9LFxuJiM0MztcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcbiYjNDM7XHQubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsXG4mIzQzO1x0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxuJiM0MztcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4mIzQzO1x0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcixcbiYjNDM7XHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXG4mIzQzO1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuJiM0MztcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyLFxuJiM0MztcdC53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7XG4mIzQzO1x0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxuJiM0MztcdC5jbWRfcmVhZCA9IFJUTDgzOTBfUEhZX0NUUkxfUkVBRCxcbiYjNDM7XHQuY21kX3dyaXRlID0gUlRMODM5MF9QSFlfQ1RSTF9XUklURSxcbiYjNDM7XHQuY21kX3JlZ3MgPSB7XG4mIzQzO1x0XHQuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLFxuJiM0MztcdFx0LmMyMl9kYXRhID0gUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkwsXG4mIzQzO1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcbiYjNDM7XHRcdC5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsXG4mIzQzO1x0XHQuaW9fZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTCxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcbiYjNDM7XHRcdC5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILFxuJiM0MztcdH0sXG4mIzQzO1x0Lm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLFxuJiM0MztcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcbiYjNDM7XHQubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuJiM0MztcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMixcbiYjNDM7XHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsXG4mIzQzO1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG4mIzQzO1x0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiBcdC5idXNfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTCxcbkBAIC03MTIsNiAmIzQzOzEwODUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzAwX05VTV9QQUdFUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLFxuIFx0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcixcbiBcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMixcbiBcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSxcbkBAIC03MzcsNiAmIzQzOzExMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzEwX05VTV9CVVNFUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxuQEAgLTc0NSw2ICYjNDM7MTEyMCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHtcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw4MzgwLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb184MzgwX2luZm8gfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw4MzkxLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb184MzkwX2luZm8gfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHJ0bDkzMDEtbWRpb1wmIzM0OywgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMDBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsOTMxMS1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXG4gXHR7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAwNjE1MjI4NDU5ZWY0Mi4uNjc2Y2JmMTgzMzUwZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTg3Niw2ICYjNDM7MTg3NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3I7XG4gXG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuJiM0MztcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwaHlfcmVzdW1lKHBoeWRldik7XG4gXG4gXHQvKipcbkBAIC0xOTE5LDYgJiM0MzsxOTI1LDkgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcbiBcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4gXG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaClcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xuJiM0MztcbiBcdGlmIChwaHlkZXYtXHUwMDNlZGV2bGluaykge1xuIFx0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuIFx0XHRwaHlkZXYtXHUwMDNlZGV2bGluayA9IE5VTEw7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmZkLi4zMTYwY2E5OWRlYWI3OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0zNzYsNiAmIzQzOzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XG4gXHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpO1xuIFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cbiBcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcbiYjNDM7XHQvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovXG4mIzQzO1x0aW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuJiM0MztcdC8qKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyAqL1xuJiM0MztcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4gXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXG4gXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MC9SVEw4MzkwIE1ESU8gY29udHJvbGxlcnMgdG8gYSBwbGF0Zm9ybSBkcml2ZXIgKG1kaW8tcmVhbHRlay1ydGw5MzAwLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZSBjaGFuZ2VzIHRvIGNvcmUgUEhZIGNvZGUgKHBoeV9kZXZpY2UuYykgbWVyZWx5IGFkZCBhbmQgaW52b2tlIGEgY2FsbGJhY2sgdGhhdCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoaXMgdW5yZWFjaGFibGUgZHJpdmVyLCBtYWtpbmcgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIxYTQ5ZWMxNzdjODZmYzA3YjUyYTlhMjA3ZDRjYWRkYzFkMzU5YTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCA5IDIyOjExOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCmluZGV4IDI3MWUwNWJhZTljNTc0Li42N2UwYjIzYTg0NzBlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbApAQCAtNCw3ICYjNDM7NCw3IEBACiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIwogJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiAKLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyCiYjNDM7dGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXIKIAogbWFpbnRhaW5lcnM6CiAgIC0gQ2hyaXMgUGFja2hhbSAmbHQ7Y2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56Jmd0OwpAQCAtMTIsNiAmIzQzOzEyLDE2IEBAIG1haW50YWluZXJzOgogcHJvcGVydGllczoKICAgY29tcGF0aWJsZToKICAgICBvbmVPZjoKJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpbwomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpbwogICAgICAgLSBpdGVtczoKICAgICAgICAgICAtIGVudW06CiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvCkBAIC0yNCw2ICYjNDM7MzQsOCBAQCBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvCiAgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw5MzExLW1kaW8KICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpbwomIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvCiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpbwogICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCmluZGV4IDg5MmVkMzc4MGE2NTcyLi44ZWU5MmRiZWQ1MmZkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYwpAQCAtMzUsNiAmIzQzOzM1LDc0IEBACiAgKgogICogVGhlIGRyaXZlciB3b3JrcyBvdXQgdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIE1ESU8gYnVzIGRlc2NyaWJlZCBpbiBkZXZpY2UgdHJlZSBhbmQgcGhhbmRsZXMgb24KICAqIHRoZSBldGhlcm5ldC1wb3J0cyBwcm9wZXJ0eS4KJiM0MzsgKgomIzQzOyAqIFRoZSBkZXZpY2VzIGhhdmUgYSBoYXJkd2FyZSBwb2xsaW5nIHVuaXQgdGhhdCBydW5zIGluIHRoZSBiYWNrZ3JvdW5kIHdpdGhvdXQgYW55IENQVSBsb2FkLiBJdAomIzQzOyAqIGNvbnN0YW50bHkgc2NhbnMgdGhlIE1ESU8gYnVzIGFuZCB0aGUgYXR0YWNoZWQgUEhZcyBhbmQgdXBkYXRlcyB0aGUgTUFDIHN0YXR1cyByZWdpc3RlcnMuCiYjNDM7ICoKJiM0MzsgKiBIb3cgZG9lcyB0aGUgcG9sbGluZyB3b3JrPwomIzQzOyAqCiYjNDM7ICogRWFjaCBkZXZpY2UgaGFzIGEgU01JX1BPTExfQ1RSTCByZWdpc3Rlci4gQSBwZXItcG9ydCBiaXRtYXNrIGRlY2lkZXMgaWYgdGhlIGhhcmR3YXJlIHBvbGxpbmcgb2YKJiM0MzsgKiB0aGUgYXNzb2NpYXRlZCBidXMvYWRkcmVzcyBpcyBhY3RpdmUgb3Igbm90LiBUaGUgaGFyZHdhcmUgcnVucyBhIHRpZ2h0IGxvb3Agb3ZlciB0aGlzIGFuZCBmb3IKJiM0MzsgKiBlYWNoIHNldCBwb2xsaW5nIGJpdCBpdCBpc3N1ZXMgYSBzdGF0dXMgY2hlY2sgZm9yIHRoZSBQSFkuIEF0dGFjaGluZyBhIGxvZ2ljIGFuYWx5emVyIHRvIHRoZQomIzQzOyAqIE1ESU8gYnVzIG9mIGFuIFJUTDgzODAgYW5kIFJUTDgzOTMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoaW4ga2VybmVsIG5vdGF0aW9uKToKJiM0MzsgKgomIzQzOyAqCVJUTDgzODAJCQkJUlRMODM5MwomIzQzOyAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKglwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTsJcGh5X3JlYWQocGh5LCAwKTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg3KTsJcGh5X3JlYWQocGh5LCAxKTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7CXBoeV9yZWFkKHBoeSwgNCk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7CXBoeV9yZWFkKHBoeSwgNSk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNCk7CQlwaHlfcmVhZChwaHksIDYpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDEzLCAweDcpOwlwaHlfcmVhZChwaHksIDkpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDE0LCAweDNkKTsJcGh5X3JlYWQocGh5LCAxMCk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7CXBoeV9yZWFkKHBoeSwgMTUpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMTQpOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCA5KTsJCXBoeV93cml0ZShwaHksIDE0LCAweDNjKTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDEwKTsJCXBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMTUpOwkJcGh5X3JlYWQocGh5LCAxNCk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAwKTsJCXBoeV93cml0ZShwaHksIDEzLCAweDcpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMSk7CQlwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCA0KTsJCXBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgNSk7CQlwaHlfcmVhZChwaHksIDE0KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDYpOwomIzQzOyAqCiYjNDM7ICogRnJvbSB0aGUgYWJvdmUgc25pcHBldHMgaXQgcG9sbHMgTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgdmlhIEM0NSBvdmVyIEMyMi4gQXMKJiM0MzsgKiBvZiBub3cgaXQgaXMgdW5jbGVhciBob3cgdGhlIGhhcmR3YXJlIGRlY2lkZXMgaWYgYSBQSFkgc3VwcG9ydHMgdGhlc2UgcmVnaXN0ZXJzLiBBZnRlciBvbmUgUEhZCiYjNDM7ICogc3RhdHVzIGlzIHJlYWQsIHRoZSBwb2xsaW5nIGVuZ2luZSBnb2VzIG92ZXIgdG8gdGhlIG5leHQgUEhZLiBCYXNpY2FsbHkgdGhlIGJ1cyBpcyBhbHdheXMgYnVzeQomIzQzOyAqIGFuZCB0aGUgTUFDIHN0YXR1cyBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS4KJiM0MzsgKgomIzQzOyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/CiYjNDM7ICoKJiM0MzsgKiBXaGVuIGlzc3VpbmcgTURJTyBhY2Nlc3NlcyB2aWEgYW4gTU1JTyBiYXNlZCBpbnRlcmZhY2UgdGhlIGZpbmFsIHdyaXRlIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyCiYjNDM7ICogc2V0cyBhICYjMzQ7cnVuIGNvbW1hbmQgbm93JiMzNDsgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlCiYjNDM7ICogY2hlY2tzIGlmIGEgdXNlciBjb21tYW5kIG5lZWRzIHRvIHJ1biBhbmQgc2VuZHMgaXQgb250byB0aGUgYnVzLiBBZnRlcndhcmRzIGl0IHNpbXBseSBjb250aW51ZXMKJiM0MzsgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHJlYWQgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOgomIzQzOyAqCiYjNDM7ICoJUlRMODM4MAkJCQlSVEw4MzkzCiYjNDM7ICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqCXBoeV93cml0ZShwaHksIDMxLCBwYWdlKTsJcGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpOwlwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTsKJiM0MzsgKgkJCQkJcGh5X3dyaXRlKHBoeSwgMzEsIDApOwomIzQzOyAqCiYjNDM7ICogV2hhdCBkb2VzIHRoaXMgbWVhbj8KJiM0MzsgKgomIzQzOyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2UKJiM0MzsgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0CiYjNDM7ICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uCiYjNDM7ICoKJiM0MzsgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuCiYjNDM7ICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy4KJiM0MzsgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsCiYjNDM7ICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtCiYjNDM7ICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgJiMzNDttYWdpY2FsbHkmIzM0OyBpbiB0aGUgYmFja2dyb3VuZC4KJiM0MzsgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdAomIzQzOyAqICAgdGhlIHBvbGxpbmcgZW5naW5lIG92ZXJ3cml0ZXMgcmVnaXN0ZXJzIDEzLzE0IGluIGJldHdlZW4uCiYjNDM7ICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW4KJiM0MzsgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLgomIzQzOyAqIC0gQW4gYWNjZXNzIHRvIG9uZSBQSFkgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyZWUgc2xvdCBvZiB0aGUgcG9sbGluZyBlbmdpbmUuCiYjNDM7ICoKJiM0MzsgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXQKJiM0MzsgKiBhcmlzZXMgZnJvbSB0aGUgYWJvdmUgZGVzY3JpYmVkIGhhcmR3YXJlIHBvbGxpbmcuCiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CkBAIC01MSw2ICYjNDM7MTE5LDUwIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKIAomIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVMJCQkxCiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9QQUdFUwkJCTQwOTYKJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTCQkJMjgKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMCQkJMHhhMTAwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FCQlCSVQoMTUpCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMAkJMHhhMWI4CiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMQkJMHhhMWJjCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIJCUdFTk1BU0soMjQsIDIwKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRQkJR0VOTUFTSygxOSwgMTUpCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFCQlHRU5NQVNLKDE0LCAzKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFCQlCSVQoMikKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFECQkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1CQlCSVQoMSkKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMgkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwJCQkwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMgkJMHhhMWMwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDMxLCAxNikKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBCQkJR0VOTUFTSygxNSwgMCkKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zCQkweGExYzQKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTAkJCTB4YTE3YwomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwJCTB4YTFjOAomIzQzOwomIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVMJCQkyCiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9QQUdFUwkJCTgxOTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTCQkJNTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTAkJMHgwM2VjCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTAkJMHgwM2RjCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIJCUdFTk1BU0soOSwgNSkKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UJCUdFTk1BU0soMjIsIDEwKQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwJCQlCSVQoMSkKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURQkJQklUKDMpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRAkJCTAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NQkJQklUKDIpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIJCTAKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkwJCQkweDAzZTAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRQkJR0VOTUFTSyg4LCAwKQomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMCQkweDAzZjAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwJCQkweDAzZjQKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1cJCTB4MDNlNAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gJCTB4MDNlOAomIzQzOyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwJCTB4MDNmYwomIzQzOwogI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFUwkJCTQKICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVMJCQk0MDk2CiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTCQkJMjgKQEAgLTcxLDYgJiM0MzsxODMsNyBAQAogI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDMxLCAxNikKICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQogI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMwkJMHhjYjdjCiYjNDM7I2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwJCQkweGNhOTAKICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwJCTB4Y2I4MAogCiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTCQkJNApAQCAtOTYsMTEgJiM0MzsyMDksMTMgQEAKICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQQkJR0VOTUFTSygxNSwgMCkKICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMCTB4MGMxOAogI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTAkJMHgwYzc0CiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTAkJMHgwY2NjCiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUwJCTB4MGM5YwogCiAjZGVmaW5lIFBIWV9DVFJMX0NNRAkJCQlCSVQoMCkKICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFECQkJR0VOTUFTSygyMCwgMTYpCiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUcJCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgUEhZX1ZFTkRPUl9SRUFMVEVLCQkJMHgwMDFjYzgwMAogCiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHCQkJNgogI2RlZmluZSBNQVBfQklUU19QRVJfQUREUgkJCTUKQEAgLTEyNiw3ICYjNDM7MjQxLDkgQEAgc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7CiAJY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyAqaW5mbzsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CiAJc3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3QgSFcgYWNjZXNzICovCiYjNDM7CURFQ0xBUkVfQklUTUFQKHBoeV9wb2xsLCBNQVhfUE9SVFMpOwogCURFQ0xBUkVfQklUTUFQKHZhbGlkX3BvcnRzLCBNQVhfUE9SVFMpOwomIzQzOwl1MTYgcGFnZVtNQVhfUE9SVFNdOwogCXU4IHNtaV9idXNbTUFYX1BPUlRTXTsKIAl1OCBzbWlfYWRkcltNQVhfUE9SVFNdOwogCWJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdOwpAQCAtMTQzLDYgJiM0MzsyNjAsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHsKIAl1OCBudW1fYnVzZXM7CiAJdTggbnVtX3BvcnRzOwogCXUxNiBudW1fcGFnZXM7CiYjNDM7CXUzMiBwb2xsX2N0cmw7CiAJaW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7CiAJaW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTsKIAlpbnQgKCpyZWFkX2M0NSkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7CkBAIC0xNzgsNiAmIzQzOzI5NiwxNCBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogCXJldHVybiBjaGFuLSZndDtwcml2OwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtJmd0O3JlZ21hcCwgcHJpdi0mZ3Q7aW5mby0mZ3Q7cG9sbF9jdHJsICYjNDM7IChwb3J0IC8gMzIpICogNCwKJiM0MzsJCQkJICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLAogCQkJICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKQogewpAQCAtMTg2LDkgJiM0MzszMTIsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLAogCXUzMiBjbWRzdGF0ZTsKIAlpbnQgcmV0OwogCi0JLyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibGUgd3JvbmcgKi8KJiM0MzsJLyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcgKi8KIAlyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi0mZ3Q7cmVnbWFwLCBpbmZvLSZndDtjbWRfcmVncy5jMjJfZGF0YSwKLQkJCQkgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgJmFtcDsgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApOwomIzQzOwkJCQkgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgJmFtcDsgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yMjgsNyAmIzQzOzM1NCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi0mZ3Q7cmVnbWFwLCBpbmZvLSZndDtjbWRfcmVncy5jMjJfZGF0YSwKLQkJCQkgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgJmFtcDsgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApOwomIzQzOwkJCQkgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgJmFtcDsgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yNjUsMTMgJiM0MzszOTEsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCwKIAlyZXR1cm4gb3R0b19lbWRpb19ydW5fY21kKGJ1cywgY21kIHwgcHJpdi0mZ3Q7aW5mby0mZ3Q7Y21kX3dyaXRlLCBjbWRfZGF0YSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEsCiYjNDM7CQkJCSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKJiM0MzsJCS5wb3J0X21hc2tfbG93CT0gQklUKHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsCiYjNDM7CQkJCSAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jNDVfZGF0YQk9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgJmFtcDtjbWRfZGF0YSwKJiM0MzsJCQkJICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmM0NV9kYXRhCT0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiYjNDM7CQkucG9ydF9tYXNrX2xvdwk9IEJJVChwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgJmFtcDtjbWRfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmV4dF9wYWdlCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEsCiYjNDM7CQkJCSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5leHRfcGFnZQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiYjNDM7CQkucG9ydF9tYXNrX2hpZ2gJPSAodTMyKShCSVRfVUxMKHBvcnQpICZndDsmZ3Q7IDMyKSwKJiM0MzsJCS5wb3J0X21hc2tfbG93CT0gKHUzMikoQklUX1VMTChwb3J0KSksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmM0NV9kYXRhCT0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhLAomIzQzOwkJCQkgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzQ1X2RhdGEJPSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKJiM0MzsJCS5wb3J0X21hc2tfaGlnaAk9ICh1MzIpKEJJVF9VTEwocG9ydCkgJmd0OyZndDsgMzIpLAomIzQzOwkJLnBvcnRfbWFza19sb3cJPSAodTMyKShCSVRfVUxMKHBvcnQpKSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgJmFtcDtjbWRfZGF0YSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiB7CiAJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKIAkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKIAkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHwKLQkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKIAkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKIAl9OwogCkBAIC0yODUsNyAmIzQzOzUyMSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKIAkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKIAkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHwKLQkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKIAkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiAJCS5wb3J0X21hc2tfbG93CT0gQklUKHBvcnQpLAogCX07CkBAIC0zMjUsNyAmIzQzOzU2MSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1CiAJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiAJCS5icm9hZGNhc3QJPSBGSUVMRF9QUkVQKFJUTDkzMTBfQkNfUE9SVF9JRCwgcG9ydCksCiAJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8Ci0JCQkJICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksCiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiAJfTsKIAogCXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMOTMxMF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSwKQEAgLTMzNyw3ICYjNDM7NTczLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLAogCXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiAJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiAJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8Ci0JCQkJICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksCiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiAJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAogCQkucG9ydF9tYXNrX2hpZ2gJPSAodTMyKShCSVRfVUxMKHBvcnQpICZndDsmZ3Q7IDMyKSwKIAkJLnBvcnRfbWFza19sb3cJPSAodTMyKShCSVRfVUxMKHBvcnQpKSwKQEAgLTM4Myw4ICYjNDM7NjE5LDEyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKQogCWlmIChwb3J0ICZsdDsgMCkKIAkJcmV0dXJuIHBvcnQ7CiAKLQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCWlmIChyZWdudW0gPT0gMzEpCiYjNDM7CQkJcmV0dXJuIHByaXYtJmd0O3BhZ2VbcG9ydF07CiYjNDM7CiAJCXJldCA9IHByaXYtJmd0O2luZm8tJmd0O3JlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCAmYW1wO3ZhbHVlKTsKJiM0MzsJfQogCiAJcmV0dXJuIHJldCA/IHJldCA6IHZhbHVlOwogfQpAQCAtMzk4LDggJiM0Mzs2MzgsMTcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtLCB1MTYKIAlpZiAocG9ydCAmbHQ7IDApCiAJCXJldHVybiBwb3J0OwogCi0Jc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spCiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKSB7CiYjNDM7CQlpZiAocmVnbnVtID09IDMxKSB7CiYjNDM7CQkJaWYgKHZhbHVlICZndDs9IFJBV19QQUdFKHByaXYpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCQlwcml2LSZndDtwYWdlW3BvcnRdID0gdmFsdWU7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CiAJCXJldCA9IHByaXYtJmd0O2luZm8tJmd0O3dyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDcyLDYgJiM0Mzs3MjEsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZwomIzQzOwkgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtJmd0O3JlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiB7CiAJdTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwOwpAQCAtNTA4LDYgJiM0Mzs3NjYsNTQgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtJmd0O21kaW8uYnVzKTsKJiM0MzsJaW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi0mZ3Q7bWRpby5idXMsIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O3ByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBwb3J0OwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3NtaV9idXNfaXNfYzQ1W2NoYW4tJmd0O21kaW9fYnVzXSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoIXBoeV9pZF9jb21wYXJlX3ZlbmRvcihwaHlkZXYtJmd0O3BoeV9pZCwgUEhZX1ZFTkRPUl9SRUFMVEVLKSkpIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O09ubHkgUmVhbHRlayBQSFlzIGFsbG93ZWQgb24gQzIyIGJ1c1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKSB7CiYjNDM7CQlpZiAodGVzdF9iaXQocG9ydCwgcHJpdi0mZ3Q7cGh5X3BvbGwpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJcmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJX19zZXRfYml0KHBvcnQsIHByaXYtJmd0O3BoeV9wb2xsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtJmd0O21kaW8uYnVzKTsKJiM0MzsJaW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi0mZ3Q7bWRpby5idXMsIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCXJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlfX2NsZWFyX2JpdChwb3J0LCBwcml2LSZndDtwaHlfcG9sbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWRldl9lcnIoYnVzLSZndDtwYXJlbnQsICYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxuJiMzNDssIHBvcnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSkKIHsKQEAgLTUzNyw2ICYjNDM7ODQzLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYKIAkJYnVzLSZndDt3cml0ZSA9IG90dG9fZW1kaW9fd3JpdGVfYzIyOwogCX0KIAlidXMtJmd0O3BhcmVudCA9IGRldjsKJiM0MzsJYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7CiYjNDM7CWJ1cy0mZ3Q7bm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoOwomIzQzOwogCWNoYW4gPSBidXMtJmd0O3ByaXY7CiAJY2hhbi0mZ3Q7bWRpb19idXMgPSBtZGlvX2J1czsKIAljaGFuLSZndDtwcml2ID0gcHJpdjsKQEAgLTY1Myw2ICYjNDM7OTYyLDIxIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlmb3IgKGludCBwb3J0ID0gMDsgcG9ydCAmbHQ7IHByaXYtJmd0O2luZm8tJmd0O251bV9wb3J0czsgcG9ydCYjNDM7JiM0MzspIHsKJiM0MzsJCXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKSB7CiYjNDM7CQkJZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwpAQCAtNjcyLDYgJiM0Mzs5OTYsMTAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJaWYgKElTX0VSUihwcml2LSZndDtyZWdtYXApKQogCQlyZXR1cm4gUFRSX0VSUihwcml2LSZndDtyZWdtYXApOwogCiYjNDM7CWVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKIAogCWVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7CkBAIC02OTcsNiAmIzQzOzEwMjUsNTEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHsKJiM0MzsJLmFkZHJfbWFwX2Jhc2UgPSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCwKJiM0MzsJLmNtZF9mYWlsID0gUlRMODM4MF9QSFlfQ1RSTF9GQUlMLAomIzQzOwkuY21kX3JlYWQgPSBSVEw4MzgwX1BIWV9DVFJMX1JFQUQsCiYjNDM7CS5jbWRfd3JpdGUgPSBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFLAomIzQzOwkuY21kX3JlZ3MgPSB7CiYjNDM7CQkuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSwKJiM0MzsJCS5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLAomIzQzOwkJLmlvX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMiwKJiM0MzsJCS5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsCiYjNDM7CX0sCiYjNDM7CS5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUywKJiM0MzsJLm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLAomIzQzOwkubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsCiYjNDM7CS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsCiYjNDM7CS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMiwKJiM0MzsJLnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LAomIzQzOwkud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMiwKJiM0MzsJLndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHsKJiM0MzsJLmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLAomIzQzOwkuY21kX3JlYWQgPSBSVEw4MzkwX1BIWV9DVFJMX1JFQUQsCiYjNDM7CS5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLAomIzQzOwkuY21kX3JlZ3MgPSB7CiYjNDM7CQkuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLAomIzQzOwkJLmMyMl9kYXRhID0gUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkwsCiYjNDM7CQkuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCwKJiM0MzsJCS5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsCiYjNDM7CQkuaW9fZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTCwKJiM0MzsJCS5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVywKJiM0MzsJCS5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILAomIzQzOwl9LAomIzQzOwkubnVtX2J1c2VzID0gUlRMODM5MF9OVU1fQlVTRVMsCiYjNDM7CS5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUywKJiM0MzsJLm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLAomIzQzOwkucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsCiYjNDM7CS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMiwKJiM0MzsJLnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LAomIzQzOwkud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMiwKJiM0MzsJLndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0gewogCS5hZGRyX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsCiAJLmJ1c19tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMLApAQCAtNzEyLDYgJiM0MzsxMDg1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7CiAJLm51bV9idXNlcyA9IFJUTDkzMDBfTlVNX0JVU0VTLAogCS5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUywKIAkubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsCiAJLnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlciwKIAkucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsCiAJLnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LApAQCAtNzM3LDYgJiM0MzsxMTExLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7CiAJLm51bV9idXNlcyA9IFJUTDkzMTBfTlVNX0JVU0VTLAogCS5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUywKIAkubnVtX3BvcnRzID0gUlRMOTMxMF9OVU1fUE9SVFMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCwKIAkuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLAogCS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMiwKIAkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsCkBAIC03NDUsNiAmIzQzOzExMjAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsODM4MC1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzgzODBfaW5mbyB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDgzOTEtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb184MzkwX2luZm8gfSwKIAl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDkzMDEtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb185MzAwX2luZm8gfSwKIAl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDkzMTEtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb185MzEwX2luZm8gfSwKIAl7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKaW5kZXggMDYxNTIyODQ1OWVmNDIuLjY3NmNiZjE4MzM1MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTE4NzYsNiAmIzQzOzE4NzYsMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKIAomIzQzOwlpZiAocGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2gpIHsKJiM0MzsJCWVyciA9IHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZXJyb3I7CiYjNDM7CX0KJiM0MzsKIAlwaHlfcmVzdW1lKHBoeWRldik7CiAKIAkvKioKQEAgLTE5MTksNiAmIzQzOzE5MjUsOSBAQCB2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAlzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDsKIAlzdHJ1Y3QgbWlpX2J1cyAqYnVzOwogCiYjNDM7CWlmIChwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2RldGFjaCkKJiM0MzsJCXBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7CiYjNDM7CiAJaWYgKHBoeWRldi0mZ3Q7ZGV2bGluaykgewogCQlkZXZpY2VfbGlua19kZWwocGh5ZGV2LSZndDtkZXZsaW5rKTsKIAkJcGh5ZGV2LSZndDtkZXZsaW5rID0gTlVMTDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDE5OWE3YWFhMzQxYmZkLi4zMTYwY2E5OWRlYWI3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0zNzYsNiAmIzQzOzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7CiAJCQkgaW50IHJlZ251bSwgdTE2IHZhbCk7CiAJLyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi8KIAlpbnQgKCpyZXNldCkoc3RydWN0IG1paV9idXMgKmJ1cyk7CiYjNDM7CS8qKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgKi8KJiM0MzsJaW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwomIzQzOwkvKiogQG5vdGlmeV9waHlfZGV0YWNoOiBQZXJmb3JtIHByZS1kZXRhY2ggaGFuZGxpbmcgKi8KJiM0MzsJdm9pZCAoKm5vdGlmeV9waHlfZGV0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIAogCS8qKiBAc3RhdHM6IFN0YXRpc3RpYyBjb3VudGVycyBwZXIgZGV2aWNlIG9uIHRoZSBidXMgKi8KIAlzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5OTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSVEw4MzgwL1JUTDgzOTAgTURJTyBDb250cm9sbGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sYCwgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L3BoeS5oYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBhZGRpbmcgc3VwcG9ydCBmb3IgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHRvIHRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDBgIGRyaXZlci4gVGhleSYjMzk7dmUgYWxzbyBhZGRlZCBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyB0byBgc3RydWN0IG1paV9idXNgIGFuZCBhcmUgY2FsbGluZyB0aGVtIGZyb20gYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgLiBJbnRlcmVzdGluZy4KCk5vdywgd2FpdCBhIG1pbnV0ZSwgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIGFyZSAqY29yZSogUEhZIGZ1bmN0aW9ucywgbWVhbmluZyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhpcyBpcyBrZXkuIFRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgZHJpdmVyIGlzIHNwZWNpZmljYWxseSBmb3IgUmVhbHRlayBzd2l0Y2hlcy4gVGhpcyByYWlzZXMgYSBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gTURJTyBkcml2ZXJzIGFyZSB1c3VhbGx5IHBsYXRmb3JtIGRyaXZlcnMsIG1lYW5pbmcgdGhleSBtaWdodCBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB1bmxlc3MgdGhlcmUmIzM5O3MgYSB2aXJ0dWFsIGRldmljZSBvciBhIHByb2JpbmcgbWVjaGFuaXNtLiBCdXQsIGFzIEkganVzdCByZWFsaXplZCwgKnRoZXkmIzM5O3ZlIG1vZGlmaWVkIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCouIFRoYXQmIzM5O3MgdGhlIHJlYWwgd2luIGZvciByZWFjaGFiaWxpdHkuIEFueSBQSFkgYXR0YWNobWVudCBvciBkZXRhY2htZW50IHdpbGwgbm93IGV4ZWN1dGUgdGhlIG5ldyBjb2RlLgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIG5ldyBjb2RlIGluIGBwaHlfYXR0YWNoX2RpcmVjdGAuIEl0JiMzOTtzIGEgc2ltcGxlIGNoZWNrOgpgYGBjCglpZiAocGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2gpIHsKCQllcnIgPSBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpOwoJCWlmIChlcnIpCgkJCWdvdG8gZXJyb3I7Cgl9CmBgYApJdCYjMzk7cyBhIHNtYWxsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgUEhZIGxvZ2ljLiBUaGUgbWFpbiBsb2dpYyBpcyBzdGlsbCB3aXRoaW4gYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLCBhbmQgdGhhdCYjMzk7cyB0aGUgcGFydCB0aGF0JiMzOTtzIGhhcmRlciB0byBnZXQgdG8uCgpTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiB3ZSByZWxpYWJseSBmdXp6IGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYD8gSXQgKmlzKiBhIHBsYXRmb3JtIGRyaXZlci4gQ2FuIFN5emthbGxlciBwcm9iZSBpdCB1c2luZyBgc3l6X21vdW50X2ltYWdlYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSYjMzk7bSBub3Qgc2VlaW5nIGFuIG9idmlvdXMgd2F5LiBTeXprYWxsZXIgZG9lc24mIzM5O3QgZWFzaWx5IGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSYjMzk7cyBhIHBzZXVkby1kZXZpY2Ugb3IgYSBVU0IvUENJIGRyaXZlciBjb21wb25lbnQuIEFoLCB3YWl0IGEgbWludXRlLiBEZXZpY2UgdHJlZSBvdmVybGF5cyEgU3l6a2FsbGVyICpjb3VsZCogcG90ZW50aWFsbHkgaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgdGhyb3VnaCBkZXZpY2UgdHJlZSBvdmVybGF5cywgYnV0IHRoYXQmIzM5O3MgdXN1YWxseSBhIHBhaW4uCgpTdGlsbCwgYmVjYXVzZSBgcGh5X2F0dGFjaF9kaXJlY3RgIGlzIHJlYWNoYWJsZSwgdGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludC4gV2Ugc2hvdWxkIGNoZWNrIHRoZSBjb25maWcgZm9yIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCwgc2VlIGlmIGl0IGNhbiBiZSBlbmFibGVkIG9yIG5vdCwgYnV0IHRoYXQmIzM5O3MgdGhlIGRpcmVjdGlvbiBJJiMzOTttIHRha2luZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8tcmVhbHRlay1ydGw5MzAwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX01ESU9fUElDNjRIUFNDKVx0XHQmIzQzOz0gbWRpby1waWM2NGhwc2Mub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDApXHQmIzQzOz0gbWRpby1yZWFsdGVrLXJ0bDkzMDAub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfTURJT19SRUdNQVApXHRcdCYjNDM7PSBtZGlvLXJlZ21hcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgc3BlY2lmaWMuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSB0byBjb25maXJtIHdoZXRoZXIgdGhlIGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgIG9wdGlvbiBpcyBjb3JyZWN0bHkgY29uZmlndXJlZC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGl0IGlzLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHZlcmlmeSB0aGlzIHNldHRpbmcuIFRoaXMgd2lsbCBoZWxwIHdpdGggZGVidWdnaW5nIGEgcHJvYmxlbSBJIGFtIHdvcmtpbmcgb24uIExldCBtZSBnbyBjaGVjay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTY0PWNvbmZpZyBNRElPX0lQUTgwNjRcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTcxLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3Mjpjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzMtXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjgzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBNRElPX1JFQUxURUtfUlRMOTMwMGAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgTURJT19SRUFMVEVLX1JUTDkzMDBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgdGhpbmcuIFRoaXMgbGlrZWx5IHJlcHJlc2VudHMgYSBtb2R1bGUgb3IgY29tcG9uZW50IHJlbGF0ZWQgdG8gTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgY29tbXVuaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhIFJlYWx0ZWsgUlRMOTMwMCBzZXJpZXMgY2hpcCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgbmV0d29yayBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBwaWVjZXMgb2YgdGhlIHN5c3RlbS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIHdheXMgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIGRlcGVuZGVuY3kgYW5hbHlzaXMuIEZpcnN0LCBJIG5lZWQgdG8ga25vdyB3aGF0IHRoaXMgcmVsaWVzICpvbiouIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBoYXJkd2FyZSBjb21wb25lbnRzIGRvZXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCByZXF1aXJlIHRvIGZ1bmN0aW9uPyBJcyBpdCBhIGRyaXZlcj8gQW4gYWJzdHJhY3Rpb24gbGF5ZXI/IERvZXMgaXQgaW50ZXJmYWNlIGRpcmVjdGx5IHdpdGggdGhlIGhhcmR3YXJlLCBvciBkb2VzIGl0IHNpdCBvbiB0b3Agb2YgYW5vdGhlciBsb3dlci1sZXZlbCBNRElPIGltcGxlbWVudGF0aW9uPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0IHdpbGwgZGVwZW5kIG9uIHRoZSBSZWFsdGVrIFJUTDkzMDAmIzM5O3MgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgb3IgcmVnaXN0ZXJzLCBhbmQgbWF5YmUgYSBnZW5lcmljIE1ESU8gbGlicmFyeS4KCkkgYWxzbyBuZWVkIHRvIGtub3cgd2hhdCAqZGVwZW5kcyogb24gaXQuIFdoYXQgb3RoZXIgY29kZSBpcyBjYWxsaW5nIGl0PyBJcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIG5ldHdvcmsgc3RhY2s/IERvZXMgaXQgZmVlZCBpbnRvIGEgc3BlY2lmaWMgbmV0d29yayBtYW5hZ2VtZW50IHN5c3RlbSBvciBjb25maWd1cmF0aW9uIHRvb2w/IFVuZGVyc3RhbmRpbmcgdGhlIHVwc3RyZWFtIGNvbnN1bWVycyBvZiB0aGlzIGNvbXBvbmVudCB3aWxsIGdpdmUgbWUgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaW1wb3J0YW5jZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGZlZWQgaW50byBuZXR3b3JraW5nIGZ1bmN0aW9ucyBhbmQgbWFuYWdlbWVudCBpbnRlcmZhY2VzLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgd291bGQgYmUgdG8gc3RhcnQgd2l0aCBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gb3IgaGVhZGVyIGZpbGVzLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHNvdXJjZSBjb2RlLCBhbnkgbWFrZWZpbGVzLCBvciBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gaWRlbnRpZnkgdGhvc2UgZGVwZW5kZW5jaWVzLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBpbmNsdWRlIHN0YXRlbWVudHMsIGxpYnJhcnkgbGlua2luZywgYW5kIGFueSBidWlsZCBmbGFncyB0aGF0IG1pZ2h0IHByb3ZpZGUgY2x1ZXMuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNvbXBpbGUtdGltZSwgbGluay10aW1lLCBvciBydW50aW1lIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGhlbHAgbWUgYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoaXMgbW9kdWxlJiMzOTtzIHBsYWNlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcdCAgaW50ZXJmYWNlIHVuaXRzIG9mIHRoZSBJUFE4MDY0IFNvQ1xuIDE3MTpcdFxuIDE3MjpcdGNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxuIDE3MzpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiAxNzQ6XHRcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcbiAxNzU6XHRcdGhlbHBcbiAxNzY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBSZWFsdGVrXG4gMTc3Olx0XHQgIFJUTDkzMDAgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXG4gMTc4Olx0XG4gMTc5Olx0Y29uZmlnIE1ESU9fUkVHTUFQXG4gMTgwOlx0XHR0cmlzdGF0ZVxuIDE4MTpcdFx0aGVscFxuIDE4MjpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNpbmcgTURJTyBkZXZpY2VzIHRoYXQgYXJlIG5vdCBzaXR0aW5nIG9uIGFcbiAxODM6XHRcdCAgcmVndWxhciBNRElPIGJ1cywgYnV0IHN0aWxsIGV4cG9zZXMgdGhlIHN0YW5kYXJkIDgwMi4zIHJlZ2lzdGVyXG4gMTg0Olx0XHQgIGxheW91dC4gSXQmIzM5O3MgcmVnbWFwLWJhc2VkIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgb24gaW50ZWdyYXRlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ0MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDkwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogVW5yZWFjaGFibGUgQ29kZSBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBjb2RlJiMzOTtzIGNvbmRpdGlvbmFsIG9uIGBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVGAsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0JiMzOTtzIFJlYWx0ZWstc3BlY2lmaWMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgLCB3aGljaCBhcmUgUEhZIGZ1bmN0aW9ucy4gQSBjYWxsYmFjayBpcyBiZWluZyBpbnZva2VkIHRoZXJlLCBgbWRpby5idXMtJmd0O25vdGlmeV9waHlfYXR0YWNoYCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyByZWFjaGFibGUgdGhpcyBpcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHBsYXRmb3JtIGRyaXZlcnMgYXJlIHVzdWFsbHkgaW5zdGFudGlhdGVkIHRocm91Z2ggZGV2aWNlIHRyZWUuIFN5emthbGxlciwgaW4gaXRzIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGxvYWQgYXJiaXRyYXJ5IERUIG92ZXJsYXlzIHVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQsIG90aGVyIHRoYW4gZm9yIHNwZWNpZmljIGNhc2VzIGxpa2UgVVNCLCBQQ0ksIGFuZCB2aXJ0dWFsIGRldmljZXMuIEkgZGlkIGEgcXVpY2sgbWVtb3J5IGpvZyAtIGRvZXMgc3l6a2FsbGVyIGhhdmUgRFQgb3ZlcmxheSBzdXBwb3J0PyBNb3N0bHkgZm9yIHRob3NlIGRldmljZSB0eXBlcywgaXQgbG9va3MgbGlrZS4KCkJ1dCB0aGUgcmVhbCBraWNrZXIgaXMgdGhpczogdGhpcyBjYWxsYmFjayBgbm90aWZ5X3BoeV9hdHRhY2hgIGlzIG9ubHkgc2V0IGluIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBSZWFsdGVrIHN3aXRjaC4gSXQmIzM5O3Mgbm90IGdvaW5nIHRvIHByb2JlIGluIGEgZ2VuZXJpYyB4ODYgVk0gd2l0aG91dCBhIHNwZWNpZmljIGRldmljZSB0cmVlLCB3aGljaCBpcyBoaWdobHkgdW5saWtlbHkgdG8gYmUgdGhlIGRlZmF1bHQuIFNvIHRoZSBuZXcgY29kZSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIHdpbGwganVzdCBjaGVjayBhIE5VTEwgcG9pbnRlciBhbmQgY29udGludWUuIFRoZSBjb3JlIG9mIHRoZSBuZXcgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUuCgpJJiMzOTttIGNoZWNraW5nIGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciB3YXkgdG8gcmVhY2ggdGhpcyBSZWFsdGVrIE1ESU8gZHJpdmVyLiBObywgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIuIFBsYXRmb3JtIGRyaXZlcnMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBib2FyZCBjb2RlLCBkZXZpY2UgdHJlZSwgb3IgQUNQSS4gSW4gYSBnZW5lcmljIFZNIGxpa2UgUUVNVSB4ODZfNjQgb3IgYXJtNjQsIHRoaXMgc3BlY2lmaWMgZGV2aWNlIHdvbiYjMzk7dCBiZSBwcmVzZW50LgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBgV29ydGhGdXp6aW5nYCBhbmQgd2hldGhlciB0aGUgY29kZSBwYXRocyBhcmUgcG9zc2libGUuIElmIGl0JiMzOTtzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGl0IHNob3VsZCBiZSBmYWxzZSwgcmlnaHQ/IExldCBtZSBjaGVjayBhZ2FpbiBpZiBgb3R0b19lbWRpb19wcm9iZWAgaXMgcmVhY2hhYmxlLiBObywgYmVjYXVzZSBpdCBpcyBhIHBsYXRmb3JtIGRyaXZlci4KClNvIHRoZSBkcml2ZXIgd2lsbCBuZXZlciBwcm9iZSwgYW5kIHRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgY29kZSB3b24mIzM5O3QgZXhlY3V0ZS4gVGhlIGNoYW5nZXMgaW4gYHBoeV9kZXZpY2UuY2AgYXJlIGp1c3QgYWRkaW5nIHRoaXMgY2FsbGJhY2ssIHdoaWNoIHdpbGwgYmUgTlVMTCBpbiBvdXIgZW52aXJvbm1lbnQuIFRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgaW4gdGhlIGBwaHlfYXR0YWNoX2RpcmVjdGAgd2lsbCBuZXZlciBleGVjdXRlLgoKSSYjMzk7bSByZXZpZXdpbmcgdGhlIGluc3RydWN0aW9ucy4gVGhleSBzdGF0ZSB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLgoKVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBzd2l0Y2gsIGFuZCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgaXQgaW4gdGhlIGtlcm5lbCAobGlrZSBgbWFjODAyMTFfaHdzaW1gIG9yIGB2a21zYCkuIEl0JiMzOTtzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGNoZWNraW5nIGlmIHRoZXJlJiMzOTtzIGEgc3lzZnMgb3IgY29uZmlnZnMgaW50ZXJmYWNlIHRvIGluc3RhbnRpYXRlIGl0LiBOby4gSSYjMzk7bGwgZ3JlcCBmb3IgYG5vdGlmeV9waHlfYXR0YWNoYCB0byBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm8gb3RoZXIgZHJpdmVyLgoKVGhlIGNvbmNsdXNpb24gaXMgdGhpcyBpcyB1bnJlYWNoYWJsZSBhbmQsIHRoZXJlZm9yZSwgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vdGlmeV9waHlfYXR0YWNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz03NTM9c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03NjgtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzY5OnN0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc3MC17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTgxNz1zdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODQ1LVx0YnVzLVx1MDAzZXBhcmVudCA9IGRldjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo4NDY6XHRidXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTg0Ny1cdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2g7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzUyPWludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg3OTpcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg4MDpcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4ODEtXHRcdGlmIChlcnIpXG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD0zNjM9c3RydWN0IG1paV9idXMge1xuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMzc4LVx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xuaW5jbHVkZS9saW51eC9waHkuaDozNzk6XHQvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjM4MDpcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbmluY2x1ZGUvbGludXgvcGh5LmgtMzgxLVx0LyoqIEBub3RpZnlfcGh5X2RldGFjaDogUGVyZm9ybSBwcmUtZGV0YWNoIGhhbmRsaW5nICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzAzCgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFZhbHVlKioKCk9rYXksIGFmdGVyIGV4YW1pbmluZyB0aGUgY29kZSwgaXQmIzM5O3MgY2xlYXIgdGhlIG9ubHkgcGxhY2UgdGhlIGNydWNpYWwgc2V0dGluZyBoYXBwZW5zIGlzIHdpdGhpbiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgY29yZSBtb2RpZmljYXRpb25zIGFyZSBlc3NlbnRpYWxseSBuby1vcHMgd2l0aGluIG91ciBzcGVjaWZpYyB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGF0IG1lYW5zIHRoZSBkcml2ZXItbGV2ZWwgY2hhbmdlcywgd2hpY2ggYXJlIHRoZSBwb2ludCBvZiBpbnRlcmVzdCwgYXJlIHNpbXBseSB1bnJlYWNoYWJsZS4KCkdpdmVuIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODM4MC9SVEw4MzkwIE1ESU8gY29udHJvbGxlcnMsIGFuZCB0aGlzIHN1cHBvcnQgcmVsaWVzIGhlYXZpbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUgb3IgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBub2RlcyB0aGF0IGFyZW4mIzM5O3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIG91ciBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGV4ZXJjaXNlZC4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHBoeV9kZXZpY2UuY2AgbWVyZWx5IGluc2VydCBhIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoZSB0YXJnZXRlZCwgdW5yZWFjaGFibGUgZHJpdmVyLiBUaHVzLCB0aGUgcmVhbCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVmZmVjdGl2ZWx5IGhpZGRlbi4KClRoZXJlZm9yZSwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgcGF0Y2ggd29uJiMzOTt0IHByb3ZpZGUgYW55IG1lYW5pbmdmdWwgY292ZXJhZ2UuIEkmIzM5O20gZ29pbmcgdG8gZmxhZyBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJpc2svcmV3YXJkIGp1c3QgaXNuJiMzOTt0IHRoZXJlIGZvciB0aGUgZWZmb3J0IGl0IHdvdWxkIHJlcXVpcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAvUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHRvIGEgcGxhdGZvcm0gZHJpdmVyIChtZGlvLXJlYWx0ZWstcnRsOTMwMC5jKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgKG9yIGRldmljZSB0cmVlIG5vZGVzKSB0aGF0IGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBUaGUgY2hhbmdlcyB0byBjb3JlIFBIWSBjb2RlIChwaHlfZGV2aWNlLmMpIG1lcmVseSBhZGQgYW5kIGludm9rZSBhIGNhbGxiYWNrIHRoYXQgaXMgb25seSBpbXBsZW1lbnRlZCBieSB0aGlzIHVucmVhY2hhYmxlIGRyaXZlciwgbWFraW5nIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MC9SVEw4MzkwIE1ESU8gY29udHJvbGxlcnMgdG8gYSBwbGF0Zm9ybSBkcml2ZXIgKG1kaW8tcmVhbHRlay1ydGw5MzAwLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZSBjaGFuZ2VzIHRvIGNvcmUgUEhZIGNvZGUgKHBoeV9kZXZpY2UuYykgbWVyZWx5IGFkZCBhbmQgaW52b2tlIGEgY2FsbGJhY2sgdGhhdCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoaXMgdW5yZWFjaGFibGUgZHJpdmVyLCBtYWtpbmcgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjoxMTowNC42ODYzNzczOTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODEzNzU3MjU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAvUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHRvIGEgcGxhdGZvcm0gZHJpdmVyIChtZGlvLXJlYWx0ZWstcnRsOTMwMC5jKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgKG9yIGRldmljZSB0cmVlIG5vZGVzKSB0aGF0IGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBUaGUgY2hhbmdlcyB0byBjb3JlIFBIWSBjb2RlIChwaHlfZGV2aWNlLmMpIG1lcmVseSBhZGQgYW5kIGludm9rZSBhIGNhbGxiYWNrIHRoYXQgaXMgb25seSBpbXBsZW1lbnRlZCBieSB0aGlzIHVucmVhY2hhYmxlIGRyaXZlciwgbWFraW5nIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjoxMTowNC42ODYzODIzNzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODU0MTUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIxYTQ5ZWMxNzdjODZmYzA3YjUyYTlhMjA3ZDRjYWRkYzFkMzU5YTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAyMjoxMTowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcXG5pbmRleCAyNzFlMDViYWU5YzU3NC4uNjdlMGIyM2E4NDcwZWEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuQEAgLTQsNyArNCw3IEBAXFxuICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjXFxuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbiBcXG4tdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXJcXG4rdGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXJcXG4gXFxuIG1haW50YWluZXJzOlxcbiAgIC0gQ2hyaXMgUGFja2hhbSBcXHUwMDNjY2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56XFx1MDAzZVxcbkBAIC0xMiw2ICsxMiwxNiBAQCBtYWludGFpbmVyczpcXG4gcHJvcGVydGllczpcXG4gICBjb21wYXRpYmxlOlxcbiAgICAgb25lT2Y6XFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW9cXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvXFxuICAgICAgIC0gaXRlbXM6XFxuICAgICAgICAgICAtIGVudW06XFxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW9cXG5AQCAtMjQsNiArMzQsOCBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW9cXG4gICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsOTMxMS1tZGlvXFxuICAgICAgIC0gZW51bTpcXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xcbmluZGV4IDg5MmVkMzc4MGE2NTcyLi44ZWU5MmRiZWQ1MmZkOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcXG5AQCAtMzUsNiArMzUsNzQgQEBcXG4gICpcXG4gICogVGhlIGRyaXZlciB3b3JrcyBvdXQgdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIE1ESU8gYnVzIGRlc2NyaWJlZCBpbiBkZXZpY2UgdHJlZSBhbmQgcGhhbmRsZXMgb25cXG4gICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LlxcbisgKlxcbisgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXRcXG4rICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy5cXG4rICpcXG4rICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz9cXG4rICpcXG4rICogRWFjaCBkZXZpY2UgaGFzIGEgU01JX1BPTExfQ1RSTCByZWdpc3Rlci4gQSBwZXItcG9ydCBiaXRtYXNrIGRlY2lkZXMgaWYgdGhlIGhhcmR3YXJlIHBvbGxpbmcgb2ZcXG4rICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yXFxuKyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlXFxuKyAqIE1ESU8gYnVzIG9mIGFuIFJUTDgzODAgYW5kIFJUTDgzOTMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoaW4ga2VybmVsIG5vdGF0aW9uKTpcXG4rICpcXG4rICpcXHRSVEw4MzgwXFx0XFx0XFx0XFx0UlRMODM5M1xcbisgKlxcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKlxcdHBoeV93cml0ZShwaHksIDMxLCAweDApO1xcdHBoeV9yZWFkKHBoeSwgMCk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFx0cGh5X3JlYWQocGh5LCAxKTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XFx0cGh5X3JlYWQocGh5LCA0KTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcXHRwaHlfcmVhZChwaHksIDUpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcdFxcdHBoeV9yZWFkKHBoeSwgNik7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFx0cGh5X3JlYWQocGh5LCA5KTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XFx0cGh5X3JlYWQocGh5LCAxMCk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XFx0cGh5X3JlYWQocGh5LCAxNSk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxNCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA5KTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxMCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxNSk7XFx0XFx0cGh5X3JlYWQocGh5LCAxNCk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAwKTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDEpO1xcdFxcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDQpO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgNSk7XFx0XFx0cGh5X3JlYWQocGh5LCAxNCk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA2KTtcXG4rICpcXG4rICogRnJvbSB0aGUgYWJvdmUgc25pcHBldHMgaXQgcG9sbHMgTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgdmlhIEM0NSBvdmVyIEMyMi4gQXNcXG4rICogb2Ygbm93IGl0IGlzIHVuY2xlYXIgaG93IHRoZSBoYXJkd2FyZSBkZWNpZGVzIGlmIGEgUEhZIHN1cHBvcnRzIHRoZXNlIHJlZ2lzdGVycy4gQWZ0ZXIgb25lIFBIWVxcbisgKiBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIEJhc2ljYWxseSB0aGUgYnVzIGlzIGFsd2F5cyBidXN5XFxuKyAqIGFuZCB0aGUgTUFDIHN0YXR1cyBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS5cXG4rICpcXG4rICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz9cXG4rICpcXG4rICogV2hlbiBpc3N1aW5nIE1ESU8gYWNjZXNzZXMgdmlhIGFuIE1NSU8gYmFzZWQgaW50ZXJmYWNlIHRoZSBmaW5hbCB3cml0ZSB0byB0aGUgY29tbWFuZCByZWdpc3RlclxcbisgKiBzZXRzIGEgXFxcInJ1biBjb21tYW5kIG5vd1xcXCIgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXFxuKyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXFxuKyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgcmVhZCBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6XFxuKyAqXFxuKyAqXFx0UlRMODM4MFxcdFxcdFxcdFxcdFJUTDgzOTNcXG4rICpcXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICpcXHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XFx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1xcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1xcbisgKlxcdFxcdFxcdFxcdFxcdHBoeV93cml0ZShwaHksIDMxLCAwKTtcXG4rICpcXG4rICogV2hhdCBkb2VzIHRoaXMgbWVhbj9cXG4rICpcXG4rICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZVxcbisgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0XFxuKyAqIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbCBQSFkgc3Vic3lzdGVtLlxcbisgKlxcbisgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuXFxuKyAqICAgRXNwZWNpYWxseSBhbiB1bnBvcHVsYXRlZCBNQUNfTElOS19TVFMgcmVnaXN0ZXIgY2FuY2VscyBvcGVyYXRpb25zIHRvIG90aGVyIE1BQyByZWdpc3RlcnMuXFxuKyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGxcXG4rICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtXFxuKyAqICAgdG8gdHJhY2sgdGhlIHBhZ2UgYWNjZXNzIFxcXCJtYWdpY2FsbHlcXFwiIGluIHRoZSBiYWNrZ3JvdW5kLlxcbisgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdFxcbisgKiAgIHRoZSBwb2xsaW5nIGVuZ2luZSBvdmVyd3JpdGVzIHJlZ2lzdGVycyAxMy8xNCBpbiBiZXR3ZWVuLlxcbisgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhblxcbisgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLlxcbisgKiAtIEFuIGFjY2VzcyB0byBvbmUgUEhZIHdpbGwgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCBmcmVlIHNsb3Qgb2YgdGhlIHBvbGxpbmcgZW5naW5lLlxcbisgKlxcbisgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXRcXG4rICogYXJpc2VzIGZyb20gdGhlIGFib3ZlIGRlc2NyaWJlZCBoYXJkd2FyZSBwb2xsaW5nLlxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbkBAIC01MSw2ICsxMTksNTAgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4gXFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVNcXHRcXHRcXHQxXFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUEFHRVNcXHRcXHRcXHQ0MDk2XFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFNcXHRcXHRcXHQyOFxcbisjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMXFx0XFx0XFx0MHhhMTAwXFxuKyNkZWZpbmUgICBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORVxcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMFxcdFxcdDB4YTFiOFxcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXFx0XFx0MHhhMWJjXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSXFx0XFx0R0VOTUFTSygyNCwgMjApXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRVxcdFxcdEdFTk1BU0soMTksIDE1KVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0VcXHRcXHRHRU5NQVNLKDE0LCAzKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9XUklURVxcdFxcdEJJVCgyKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFEXFx0XFx0XFx0MFxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NVxcdFxcdEJJVCgxKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlxcdFxcdDBcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTFxcdFxcdFxcdDAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi9cXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMlxcdFxcdDB4YTFjMFxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEFcXHRcXHRHRU5NQVNLKDMxLCAxNilcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcXHRcXHQweGExYzRcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT0xMX0NUUkxcXHRcXHRcXHQweGExN2NcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFxcdFxcdDB4YTFjOFxcbitcXG4rI2RlZmluZSBSVEw4MzkwX05VTV9CVVNFU1xcdFxcdFxcdDJcXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QQUdFU1xcdFxcdFxcdDgxOTJcXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QT1JUU1xcdFxcdFxcdDUyXFxuKyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMXFx0XFx0MHgwM2VjXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcXHRcXHQweDAzZGNcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFJcXHRcXHRHRU5NQVNLKDksIDUpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRVxcdFxcdEdFTk1BU0soMjIsIDEwKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXFx0XFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFXFx0XFx0QklUKDMpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFQURcXHRcXHRcXHQwXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1XFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyXFx0XFx0MFxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcXHRcXHRcXHQweDAzZTBcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcXHRcXHRHRU5NQVNLKDgsIDApXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMXFx0XFx0MHgwM2YwXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMzEsIDE2KVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTFxcdFxcdFxcdDB4MDNmNFxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcXHRcXHQweDAzZTRcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSFxcdFxcdDB4MDNlOFxcbisjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMXFx0XFx0MHgwM2ZjXFxuK1xcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTXFx0XFx0XFx0NFxcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BBR0VTXFx0XFx0XFx0NDA5NlxcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXFx0XFx0XFx0MjhcXG5AQCAtNzEsNiArMTgzLDcgQEBcXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygzMSwgMTYpXFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEFcXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXFx0XFx0MHhjYjdjXFxuKyNkZWZpbmUgUlRMOTMwMF9TTUlfUE9MTF9DVFJMXFx0XFx0XFx0MHhjYTkwXFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcXHRcXHQweGNiODBcXG4gXFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcXHRcXHRcXHQ0XFxuQEAgLTk2LDExICsyMDksMTMgQEBcXG4gI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygxNSwgMClcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkxcXHQweDBjMThcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFxcdFxcdDB4MGM3NFxcbisjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMXFx0XFx0MHgwY2NjXFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTFxcdFxcdDB4MGM5Y1xcbiBcXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcXHRcXHRcXHRcXHRCSVQoMClcXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQURcXHRcXHRcXHRHRU5NQVNLKDIwLCAxNilcXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSBQSFlfVkVORE9SX1JFQUxURUtcXHRcXHRcXHQweDAwMWNjODAwXFxuIFxcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXFx0XFx0XFx0NlxcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSXFx0XFx0XFx0NVxcbkBAIC0xMjYsNyArMjQxLDkgQEAgc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87XFxuIFxcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcXG4gXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3QgSFcgYWNjZXNzICovXFxuK1xcdERFQ0xBUkVfQklUTUFQKHBoeV9wb2xsLCBNQVhfUE9SVFMpO1xcbiBcXHRERUNMQVJFX0JJVE1BUCh2YWxpZF9wb3J0cywgTUFYX1BPUlRTKTtcXG4rXFx0dTE2IHBhZ2VbTUFYX1BPUlRTXTtcXG4gXFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xcbiBcXHR1OCBzbWlfYWRkcltNQVhfUE9SVFNdO1xcbiBcXHRib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTtcXG5AQCAtMTQzLDYgKzI2MCw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xcbiBcXHR1OCBudW1fYnVzZXM7XFxuIFxcdHU4IG51bV9wb3J0cztcXG4gXFx0dTE2IG51bV9wYWdlcztcXG4rXFx0dTMyIHBvbGxfY3RybDtcXG4gXFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XFxuIFxcdGludCAoKnJlYWRfYzIyKShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XFxuIFxcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcXG5AQCAtMTc4LDYgKzI5NiwxNCBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbiBcXHRyZXR1cm4gY2hhbi1cXHUwMDNlcHJpdjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKVxcbit7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXBvbGxfY3RybCArIChwb3J0IC8gMzIpICogNCxcXG4rXFx0XFx0XFx0XFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxcbiB7XFxuQEAgLTE4Niw5ICszMTIsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbiBcXHR1MzIgY21kc3RhdGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqL1xcbitcXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xcbiBcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlcmVnbWFwLCBpbmZvLVxcdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjI4LDcgKzM1NCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlcmVnbWFwLCBpbmZvLVxcdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjY1LDEzICszOTEsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9IEJJVChwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFxcdTAwMjZjbWRfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jNDVfZGF0YVxcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gQklUKHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmV4dF9wYWdlXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbitcXHRcXHQuZXh0X3BhZ2VcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbitcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmM0NV9kYXRhXFx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoXFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFxcdTAwM2VcXHUwMDNlIDMyKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuIHtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuIFxcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4gXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXFxuIFxcdH07XFxuIFxcbkBAIC0yODUsNyArNTIxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbiBcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4tXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuIFxcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXFxuIFxcdFxcdC5wb3J0X21hc2tfbG93XFx0PSBCSVQocG9ydCksXFxuIFxcdH07XFxuQEAgLTMyNSw3ICs1NjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdVxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmJyb2FkY2FzdFxcdD0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLFxcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHR9O1xcbiBcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuQEAgLTMzNyw3ICs1NzMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuQEAgLTM4Myw4ICs2MTksMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXFxuIFxcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmIChyZWdudW0gPT0gMzEpXFxuK1xcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2VwYWdlW3BvcnRdO1xcbitcXG4gXFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlcmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sIFxcdTAwMjZ2YWx1ZSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiByZXQgPyByZXQgOiB2YWx1ZTtcXG4gfVxcbkBAIC0zOTgsOCArNjM4LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2XFxuIFxcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmIChyZWdudW0gPT0gMzEpIHtcXG4rXFx0XFx0XFx0aWYgKHZhbHVlIFxcdTAwM2U9IFJBV19QQUdFKHByaXYpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0gPSB2YWx1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXdyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTQ3Miw2ICs3MjEsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogUEhZX1BBVENIX0RPTkUgZW5hYmxlcyBQSFkgY29udHJvbCB2aWEgU29DLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBQSFkgYWNjZXNzLCBpbmNsdWRpbmdcXG4rXFx0ICogcGF0Y2hpbmcgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgUEhZcyBhcmUgcHJvYmVkLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIHJlZ21hcF9zZXRfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLCBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4ge1xcbiBcXHR1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7XFxuQEAgLTUwOCw2ICs3NjYsNTQgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyk7XFxuK1xcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBvcnQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcG9ydDtcXG4rXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlc21pX2J1c19pc19jNDVbY2hhbi1cXHUwMDNlbWRpb19idXNdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIXBoeV9pZF9jb21wYXJlX3ZlbmRvcihwaHlkZXYtXFx1MDAzZXBoeV9pZCwgUEhZX1ZFTkRPUl9SRUFMVEVLKSkpIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spIHtcXG4rXFx0XFx0aWYgKHRlc3RfYml0KHBvcnQsIHByaXYtXFx1MDAzZXBoeV9wb2xsKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRcXHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgdHJ1ZSk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRfX3NldF9iaXQocG9ydCwgcHJpdi1cXHUwMDNlcGh5X3BvbGwpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyk7XFxuK1xcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBvcnQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRfX2NsZWFyX2JpdChwb3J0LCBwcml2LVxcdTAwM2VwaHlfcG9sbCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGRldl9lcnIoYnVzLVxcdTAwM2VwYXJlbnQsIFxcXCJmYWlsZWQgdG8gZGlzYWJsZSBwb2xsaW5nIGZvciBwb3J0ICVkXFxcXG5cXFwiLCBwb3J0KTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSlcXG4ge1xcbkBAIC01MzcsNiArODQzLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcXG4gXFx0XFx0YnVzLVxcdTAwM2V3cml0ZSA9IG90dG9fZW1kaW9fd3JpdGVfYzIyO1xcbiBcXHR9XFxuIFxcdGJ1cy1cXHUwMDNlcGFyZW50ID0gZGV2O1xcbitcXHRidXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcXG4rXFx0YnVzLVxcdTAwM2Vub3RpZnlfcGh5X2RldGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2g7XFxuK1xcbiBcXHRjaGFuID0gYnVzLVxcdTAwM2Vwcml2O1xcbiBcXHRjaGFuLVxcdTAwM2VtZGlvX2J1cyA9IG1kaW9fYnVzO1xcbiBcXHRjaGFuLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG5AQCAtNjUzLDYgKzk2MiwyMSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcXHUwMDNjIHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZW51bV9wb3J0czsgcG9ydCsrKSB7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG5AQCAtNjcyLDYgKzk5NiwxMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZWdtYXApKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihwcml2LVxcdTAwM2VyZWdtYXApO1xcbiBcXG4rXFx0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbiBcXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTtcXG4gXFxuIFxcdGVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7XFxuQEAgLTY5Nyw2ICsxMDI1LDUxIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XFxuK1xcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXFxuK1xcdC5jbWRfZmFpbCA9IFJUTDgzODBfUEhZX0NUUkxfRkFJTCxcXG4rXFx0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxcbitcXHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcXG4rXFx0LmNtZF9yZWdzID0ge1xcbitcXHRcXHQuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSxcXG4rXFx0XFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXFxuK1xcdFxcdC5pb19kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzIsXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsXFxuK1xcdH0sXFxuK1xcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcXG4rXFx0Lm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLFxcbitcXHQubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXFxuK1xcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsXFxuK1xcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMixcXG4rXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxcbitcXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMixcXG4rXFx0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcXG4rXFx0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxcbitcXHQuY21kX3JlYWQgPSBSVEw4MzkwX1BIWV9DVFJMX1JFQUQsXFxuK1xcdC5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLFxcbitcXHQuY21kX3JlZ3MgPSB7XFxuK1xcdFxcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXFxuK1xcdFxcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxcbitcXHRcXHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcXG4rXFx0XFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcXG4rXFx0XFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXFxuK1xcdH0sXFxuK1xcdC5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUyxcXG4rXFx0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxcbitcXHQubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcXG4rXFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxcbitcXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsXFxuK1xcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLFxcbitcXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xcbiBcXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxcbiBcXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXFxuQEAgLTcxMiw2ICsxMDg1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XFxuIFxcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LFxcbkBAIC03MzcsNiArMTExMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiBcXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXFxuIFxcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxcbkBAIC03NDUsNiArMTEyMCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw4MzkxLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LFxcbiBcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscnRsOTMwMS1tZGlvXFxcIiwgLmRhdGEgPSBcXHUwMDI2b3R0b19lbWRpb185MzAwX2luZm8gfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDkzMTEtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXFxuIFxcdHt9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuaW5kZXggMDYxNTIyODQ1OWVmNDIuLjY3NmNiZjE4MzM1MGQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuQEAgLTE4NzYsNiArMTg3NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJvcjtcXG4gXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xcbitcXHRcXHRlcnIgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yO1xcbitcXHR9XFxuK1xcbiBcXHRwaHlfcmVzdW1lKHBoeWRldik7XFxuIFxcbiBcXHQvKipcXG5AQCAtMTkxOSw2ICsxOTI1LDkgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbiBcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKVxcbitcXHRcXHRwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xcbitcXG4gXFx0aWYgKHBoeWRldi1cXHUwMDNlZGV2bGluaykge1xcbiBcXHRcXHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVxcdTAwM2VkZXZsaW5rKTtcXG4gXFx0XFx0cGh5ZGV2LVxcdTAwM2VkZXZsaW5rID0gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uMzE2MGNhOTlkZWFiNzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMzc2LDYgKzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XFxuIFxcdFxcdFxcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKTtcXG4gXFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cXG4gXFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xcbitcXHQvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovXFxuK1xcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4rXFx0LyoqIEBub3RpZnlfcGh5X2RldGFjaDogUGVyZm9ybSBwcmUtZGV0YWNoIGhhbmRsaW5nICovXFxuK1xcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIFxcbiBcXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXFxuIFxcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjoxMTowNS4xMDU3MjcwNTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzE4MjE0Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MC9SVEw4MzkwIE1ESU8gY29udHJvbGxlcnMgdG8gYSBwbGF0Zm9ybSBkcml2ZXIgKG1kaW8tcmVhbHRlay1ydGw5MzAwLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZSBjaGFuZ2VzIHRvIGNvcmUgUEhZIGNvZGUgKHBoeV9kZXZpY2UuYykgbWVyZWx5IGFkZCBhbmQgaW52b2tlIGEgY2FsbGJhY2sgdGhhdCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoaXMgdW5yZWFjaGFibGUgZHJpdmVyLCBtYWtpbmcgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjFhNDllYzE3N2M4NmZjMDdiNTJhOWEyMDdkNGNhZGRjMWQzNTlhM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMjI6MTE6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbmluZGV4IDI3MWUwNWJhZTljNTc0Li42N2UwYjIzYTg0NzBlYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5AQCAtNCw3ICs0LDcgQEBcbiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sI1xuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuIFxuLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyXG4rdGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXJcbiBcbiBtYWludGFpbmVyczpcbiAgIC0gQ2hyaXMgUGFja2hhbSBcdTAwM2NjaHJpcy5wYWNraGFtQGFsbGllZHRlbGVzaXMuY28ubnpcdTAwM2VcbkBAIC0xMiw2ICsxMiwxNiBAQCBtYWludGFpbmVyczpcbiBwcm9wZXJ0aWVzOlxuICAgY29tcGF0aWJsZTpcbiAgICAgb25lT2Y6XG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODItbWRpb1xuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzODAtbWRpb1xuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAtIGl0ZW1zOlxuICAgICAgICAgICAtIGVudW06XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMmItbWRpb1xuQEAgLTI0LDYgKzM0LDggQEAgcHJvcGVydGllczpcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW9cbiAgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw5MzExLW1kaW9cbiAgICAgICAtIGVudW06XG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cbisgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbmluZGV4IDg5MmVkMzc4MGE2NTcyLi44ZWU5MmRiZWQ1MmZkOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5AQCAtMzUsNiArMzUsNzQgQEBcbiAgKlxuICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uXG4gICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LlxuKyAqXG4rICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0XG4rICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy5cbisgKlxuKyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/XG4rICpcbisgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZlxuKyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvclxuKyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlXG4rICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOlxuKyAqXG4rICpcdFJUTDgzODBcdFx0XHRcdFJUTDgzOTNcbisgKlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIDB4MCk7XHRwaHlfcmVhZChwaHksIDApO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgMSk7XG4rICpcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcdHBoeV9yZWFkKHBoeSwgNCk7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCA1KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV9yZWFkKHBoeSwgNik7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1x0cGh5X3JlYWQocGh5LCA5KTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1x0cGh5X3JlYWQocGh5LCAxMCk7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCAxNSk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbisgKlx0cGh5X3JlYWQocGh5LCA5KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xuKyAqXHRwaHlfcmVhZChwaHksIDEwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTUpO1x0XHRwaHlfcmVhZChwaHksIDE0KTtcbisgKlx0cGh5X3JlYWQocGh5LCAwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMSk7XHRcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcbisgKlx0cGh5X3JlYWQocGh5LCA0KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuKyAqXHRwaHlfcmVhZChwaHksIDYpO1xuKyAqXG4rICogRnJvbSB0aGUgYWJvdmUgc25pcHBldHMgaXQgcG9sbHMgTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgdmlhIEM0NSBvdmVyIEMyMi4gQXNcbisgKiBvZiBub3cgaXQgaXMgdW5jbGVhciBob3cgdGhlIGhhcmR3YXJlIGRlY2lkZXMgaWYgYSBQSFkgc3VwcG9ydHMgdGhlc2UgcmVnaXN0ZXJzLiBBZnRlciBvbmUgUEhZXG4rICogc3RhdHVzIGlzIHJlYWQsIHRoZSBwb2xsaW5nIGVuZ2luZSBnb2VzIG92ZXIgdG8gdGhlIG5leHQgUEhZLiBCYXNpY2FsbHkgdGhlIGJ1cyBpcyBhbHdheXMgYnVzeVxuKyAqIGFuZCB0aGUgTUFDIHN0YXR1cyBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS5cbisgKlxuKyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/XG4rICpcbisgKiBXaGVuIGlzc3VpbmcgTURJTyBhY2Nlc3NlcyB2aWEgYW4gTU1JTyBiYXNlZCBpbnRlcmZhY2UgdGhlIGZpbmFsIHdyaXRlIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyXG4rICogc2V0cyBhIFwicnVuIGNvbW1hbmQgbm93XCIgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXG4rICogY2hlY2tzIGlmIGEgdXNlciBjb21tYW5kIG5lZWRzIHRvIHJ1biBhbmQgc2VuZHMgaXQgb250byB0aGUgYnVzLiBBZnRlcndhcmRzIGl0IHNpbXBseSBjb250aW51ZXNcbisgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHJlYWQgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOlxuKyAqXG4rICpcdFJUTDgzODBcdFx0XHRcdFJUTDgzOTNcbisgKlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1x0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xuKyAqXHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1xuKyAqXHRcdFx0XHRcdHBoeV93cml0ZShwaHksIDMxLCAwKTtcbisgKlxuKyAqIFdoYXQgZG9lcyB0aGlzIG1lYW4/XG4rICpcbisgKiBUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIHBvbGxpbmcgYW5kIFBIWSBhY2Nlc3MgYmV0d2VlbiB0aGUgbW9kZWxzIGJ1dCB0aGUgY2hhbGxlbmdlXG4rICogc3RheXMgdGhlIHNhbWUuIE9uIHRoZSBvbmUgaGFuZCB0aGF0IGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgTUFDIGxheWVyLCBvbiB0aGUgb3RoZXIgaGFuZCBpdFxuKyAqIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbCBQSFkgc3Vic3lzdGVtLlxuKyAqXG4rICogLSBXaXRob3V0IHRoZSBwb2xsaW5nIGFuZCBhIHByb3BlciBNQUMgc3RhdHVzLCBzb21lIG9mIHRoZSBsaW5rIGhhbmRsaW5nIGZlYXR1cmVzIGRvIG5vdCB3b3JrLlxuKyAqICAgRXNwZWNpYWxseSBhbiB1bnBvcHVsYXRlZCBNQUNfTElOS19TVFMgcmVnaXN0ZXIgY2FuY2VscyBvcGVyYXRpb25zIHRvIG90aGVyIE1BQyByZWdpc3RlcnMuXG4rICogLSBUaGUgUmVhbHRlayBwYWdlIHJlZ2lzdGVyIDMxIGlzIG1hZ2ljYWxseSBtb2RpZmllZCBpbiB0aGUgYmFja2dyb3VuZCBzbyB0aGF0IHBvbGxpbmcgd2lsbFxuKyAqICAgcmVhZCB0aGUgcmlnaHQgZGF0YS4gT24gdGhlIFJUTDgzOHggcG9sbGluZyBzaW1wbHkgcmVzZXRzIGl0IHRvIHplcm8uIE90aGVyIGRldmljZXMgc2VlbVxuKyAqICAgdG8gdHJhY2sgdGhlIHBhZ2UgYWNjZXNzIFwibWFnaWNhbGx5XCIgaW4gdGhlIGJhY2tncm91bmQuXG4rICogLSBBIEM0NSBvdmVyIEMyMiBrZXJuZWwgYWNjZXNzIHNlcXVlbmNlIGlzIG1vc3QgbGlrZWx5IHRvIGZhaWwgYmVjYXVzZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXRcbisgKiAgIHRoZSBwb2xsaW5nIGVuZ2luZSBvdmVyd3JpdGVzIHJlZ2lzdGVycyAxMy8xNCBpbiBiZXR3ZWVuLlxuKyAqIC0gUEhZIGZpcm13YXJlIGxvYWRpbmcgY2FuIGhhdmUgaXNzdWVzLiBFc3BlY2lhbGx5IGlmIGEgUEhZIGlzIGRlc2lnbmVkIHRvIGV4cGVjdCBhIGNsZWFuXG4rICogICBzZXF1ZW5jZSBvZiByZWdpc3RlcnMgYW5kIHZhbHVlcyB3aXRob3V0IGRldmlhdGlvbi5cbisgKiAtIEFuIGFjY2VzcyB0byBvbmUgUEhZIHdpbGwgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCBmcmVlIHNsb3Qgb2YgdGhlIHBvbGxpbmcgZW5naW5lLlxuKyAqXG4rICogQ29uY2x1c2lvbjogVGhlIFJlYWx0ZWsgTURJTyBidXMgZHJpdmVyIFBIWSBhY2Nlc3MgbXVzdCBrbm93IGFuZCBoYW5kbGUgYW55IGludGVyZmVyZW5jZSB0aGF0XG4rICogYXJpc2VzIGZyb20gdGhlIGFib3ZlIGRlc2NyaWJlZCBoYXJkd2FyZSBwb2xsaW5nLlxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbkBAIC01MSw2ICsxMTksNTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbiBcbisjZGVmaW5lIFJUTDgzODBfTlVNX0JVU0VTXHRcdFx0MVxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4rI2RlZmluZSBSVEw4MzgwX05VTV9QT1JUU1x0XHRcdDI4XG4rI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4YTEwMFxuKyNkZWZpbmUgICBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORVx0XHRCSVQoMTUpXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMFx0XHQweGExYjhcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXHRcdDB4YTFiY1xuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSXHRcdEdFTk1BU0soMjQsIDIwKVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRVx0XHRHRU5NQVNLKDE5LCAxNSlcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0VcdFx0R0VOTUFTSygxNCwgMylcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9XUklURVx0XHRCSVQoMilcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgxKVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyXHRcdDBcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9GQUlMXHRcdFx0MCAvKiBubyBmYWlsIGluZGljYXRvciAqL1xuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzJcdFx0MHhhMWMwXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcdFx0MHhhMWM0XG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT0xMX0NUUkxcdFx0XHQweGExN2NcbisjZGVmaW5lIFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMXHRcdDB4YTFjOFxuK1xuKyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVNcdFx0XHQyXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QQUdFU1x0XHRcdDgxOTJcbisjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTXHRcdFx0NTJcbisjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTFx0XHQweDAzZWNcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMXHRcdDB4MDNkY1xuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSXHRcdEdFTk1BU0soOSwgNSlcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0VcdFx0R0VOTUFTSygyMiwgMTApXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRkFJTFx0XHRcdEJJVCgxKVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgzKVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDVcdFx0QklUKDIpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQ1RSTFx0XHRcdDB4MDNlMFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFXHRcdEdFTk1BU0soOCwgMClcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTFx0XHQweDAzZjBcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTFx0XHRcdDB4MDNmNFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPV1x0XHQweDAzZTRcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdIXHRcdDB4MDNlOFxuKyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcdFx0MHgwM2ZjXG4rXG4gI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFU1x0XHRcdDRcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFNcdFx0XHQyOFxuQEAgLTcxLDYgKzE4Myw3IEBAXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuICNkZWZpbmUgUlRMOTMwMF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcdFx0MHhjYjdjXG4rI2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkxcdFx0XHQweGNhOTBcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMXHRcdDB4Y2I4MFxuIFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcdFx0XHQ0XG5AQCAtOTYsMTEgKzIwOSwxMyBAQFxuICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDE1LCAwKVxuICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMXHQweDBjMThcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfQUREUl9DVFJMXHRcdDB4MGM3NFxuKyNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcdFx0MHgwY2NjXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfU0VMXHRcdDB4MGM5Y1xuIFxuICNkZWZpbmUgUEhZX0NUUkxfQ01EXHRcdFx0XHRCSVQoMClcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9ERVZBRFx0XHRcdEdFTk1BU0soMjAsIDE2KVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX1JFR1x0XHRcdEdFTk1BU0soMTUsIDApXG4rI2RlZmluZSBQSFlfVkVORE9SX1JFQUxURUtcdFx0XHQweDAwMWNjODAwXG4gXG4gI2RlZmluZSBNQVBfQUREUlNfUEVSX1JFR1x0XHRcdDZcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSXHRcdFx0NVxuQEAgLTEyNiw3ICsyNDEsOSBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2IHtcbiBcdGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87XG4gXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4gXHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdCBIVyBhY2Nlc3MgKi9cbitcdERFQ0xBUkVfQklUTUFQKHBoeV9wb2xsLCBNQVhfUE9SVFMpO1xuIFx0REVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7XG4rXHR1MTYgcGFnZVtNQVhfUE9SVFNdO1xuIFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xuIFx0dTggc21pX2FkZHJbTUFYX1BPUlRTXTtcbiBcdGJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdO1xuQEAgLTE0Myw2ICsyNjAsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcbiBcdHU4IG51bV9idXNlcztcbiBcdHU4IG51bV9wb3J0cztcbiBcdHUxNiBudW1fcGFnZXM7XG4rXHR1MzIgcG9sbF9jdHJsO1xuIFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XG4gXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuIFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuQEAgLTE3OCw2ICsyOTYsMTQgQEAgc3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcbiBcdHJldHVybiBjaGFuLVx1MDAzZXByaXY7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBwcml2LVx1MDAzZWluZm8tXHUwMDNlcG9sbF9jdHJsICsgKHBvcnQgLyAzMikgKiA0LFxuK1x0XHRcdFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpXG4ge1xuQEAgLTE4Niw5ICszMTIsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0dTMyIGNtZHN0YXRlO1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmxlIHdyb25nICovXG4rXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4rXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyOCw3ICszNTQsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4rXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTI2NSwxMyArMzkxLDEyMyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRyZXR1cm4gb3R0b19lbWRpb19ydW5fY21kKGJ1cywgY21kIHwgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4rXHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuK1x0XHRcdFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5leHRfcGFnZVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuK1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuK1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiB7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuIFx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4gXHR9O1xuIFxuQEAgLTI4NSw3ICs1MjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbiBcdH07XG5AQCAtMzI1LDcgKzU2MSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmJyb2FkY2FzdFx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfQkNfUE9SVF9JRCwgcG9ydCksXG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHR9O1xuIFxuIFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbkBAIC0zMzcsNyArNTczLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuQEAgLTM4Myw4ICs2MTksMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdGlmIChyZWdudW0gPT0gMzEpXG4rXHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlcGFnZVtwb3J0XTtcbitcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcdTAwMjZ2YWx1ZSk7XG4rXHR9XG4gXG4gXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XG4gfVxuQEAgLTM5OCw4ICs2MzgsMTcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtLCB1MTZcbiBcdGlmIChwb3J0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuK1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbitcdFx0aWYgKHJlZ251bSA9PSAzMSkge1xuK1x0XHRcdGlmICh2YWx1ZSBcdTAwM2U9IFJBV19QQUdFKHByaXYpKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdFx0cHJpdi1cdTAwM2VwYWdlW3BvcnRdID0gdmFsdWU7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXdyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDcyLDYgKzcyMSwxNSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4re1xuK1x0LypcbitcdCAqIFBIWV9QQVRDSF9ET05FIGVuYWJsZXMgUEhZIGNvbnRyb2wgdmlhIFNvQy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgUEhZIGFjY2VzcywgaW5jbHVkaW5nXG4rXHQgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuXG4rXHQgKi9cbitcdHJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLCBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiB7XG4gXHR1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7XG5AQCAtNTA4LDYgKzc2Niw1NCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVx1MDAzZW1kaW8uYnVzKTtcbitcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXHUwMDNlbWRpby5idXMsIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwb3J0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcG9ydDtcbitcbitcdGlmICghcHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVx1MDAzZW1kaW9fYnVzXSBcdTAwMjZcdTAwMjZcbitcdCAgICAoIXBoeV9pZF9jb21wYXJlX3ZlbmRvcihwaHlkZXYtXHUwMDNlcGh5X2lkLCBQSFlfVkVORE9SX1JFQUxURUspKSkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdGlmICh0ZXN0X2JpdChwb3J0LCBwcml2LVx1MDAzZXBoeV9wb2xsKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0cmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRfX3NldF9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVx1MDAzZW1kaW8uYnVzKTtcbitcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXHUwMDNlbWRpby5idXMsIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbitcdFx0cmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0X19jbGVhcl9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCk7XG4rXHR9XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfZXJyKGJ1cy1cdTAwM2VwYXJlbnQsIFwiZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcblwiLCBwb3J0KTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXG4ge1xuQEAgLTUzNyw2ICs4NDMsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFx0XHRidXMtXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcbiBcdH1cbiBcdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4rXHRidXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoO1xuK1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbitcbiBcdGNoYW4gPSBidXMtXHUwMDNlcHJpdjtcbiBcdGNoYW4tXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcbiBcdGNoYW4tXHUwMDNlcHJpdiA9IHByaXY7XG5AQCAtNjUzLDYgKzk2MiwyMSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIHByaXYtXHUwMDNlaW5mby1cdTAwM2VudW1fcG9ydHM7IHBvcnQrKykge1xuK1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuK1x0XHRcdGVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbkBAIC02NzIsNiArOTk2LDEwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbiBcbitcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbiBcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbkBAIC02OTcsNiArMTAyNSw1MSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcbitcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4rXHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXG4rXHQuY21kX3JlYWQgPSBSVEw4MzgwX1BIWV9DVFJMX1JFQUQsXG4rXHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcbitcdC5jbWRfcmVncyA9IHtcbitcdFx0LmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsXG4rXHRcdC5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLFxuK1x0XHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxuK1x0XHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLFxuK1x0fSxcbitcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcbitcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcbitcdC5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4rXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLFxuK1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXG4rXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NSxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0ge1xuK1x0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxuK1x0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxuK1x0LmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsXG4rXHQuY21kX3JlZ3MgPSB7XG4rXHRcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXG4rXHRcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxuK1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcbitcdFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcbitcdFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXG4rXHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcbitcdFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXG4rXHR9LFxuK1x0Lm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLFxuK1x0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuK1x0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuK1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG4rXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSxcbit9O1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiBcdC5idXNfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTCxcbkBAIC03MTIsNiArMTA4NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0Lm51bV9idXNlcyA9IFJUTDkzMDBfTlVNX0JVU0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxuIFx0Lm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXG5AQCAtNzM3LDYgKzExMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzEwX05VTV9CVVNFUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsXG5AQCAtNzQ1LDYgKzExMjAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDgzOTEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM5MF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDkzMDEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMwMF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDkzMTEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXG4gXHR7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAwNjE1MjI4NDU5ZWY0Mi4uNjc2Y2JmMTgzMzUwZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTg3Niw2ICsxODc2LDEyIEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcjtcbiBcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbitcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBlcnJvcjtcbitcdH1cbitcbiBcdHBoeV9yZXN1bWUocGh5ZGV2KTtcbiBcbiBcdC8qKlxuQEAgLTE5MTksNiArMTkyNSw5IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuIFxuK1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaClcbitcdFx0cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XG4rXG4gXHRpZiAocGh5ZGV2LVx1MDAzZWRldmxpbmspIHtcbiBcdFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cdTAwM2VkZXZsaW5rKTtcbiBcdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uMzE2MGNhOTlkZWFiNzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMzc2LDYgKzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XG4gXHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpO1xuIFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cbiBcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcbitcdC8qKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgKi9cbitcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbitcdC8qKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyAqL1xuK1x0dm9pZCAoKm5vdGlmeV9waHlfZGV0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBcbiBcdC8qKiBAc3RhdHM6IFN0YXRpc3RpYyBjb3VudGVycyBwZXIgZGV2aWNlIG9uIHRoZSBidXMgKi9cbiBcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6MTE6MDUuMTA1NzI4NzMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY0NTI0ODI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJUTDgzODAvUlRMODM5MCBNRElPIENvbnRyb2xsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sYCwgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L3BoeS5oYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBhZGRpbmcgc3VwcG9ydCBmb3IgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHRvIHRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDBgIGRyaXZlci4gVGhleSd2ZSBhbHNvIGFkZGVkIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIGBzdHJ1Y3QgbWlpX2J1c2AgYW5kIGFyZSBjYWxsaW5nIHRoZW0gZnJvbSBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIEludGVyZXN0aW5nLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBhcmUgKmNvcmUqIFBIWSBmdW5jdGlvbnMsIG1lYW5pbmcgdGhleSdyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhpcyBpcyBrZXkuIFRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgZHJpdmVyIGlzIHNwZWNpZmljYWxseSBmb3IgUmVhbHRlayBzd2l0Y2hlcy4gVGhpcyByYWlzZXMgYSBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gTURJTyBkcml2ZXJzIGFyZSB1c3VhbGx5IHBsYXRmb3JtIGRyaXZlcnMsIG1lYW5pbmcgdGhleSBtaWdodCBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB1bmxlc3MgdGhlcmUncyBhIHZpcnR1YWwgZGV2aWNlIG9yIGEgcHJvYmluZyBtZWNoYW5pc20uIEJ1dCwgYXMgSSBqdXN0IHJlYWxpemVkLCAqdGhleSd2ZSBtb2RpZmllZCBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAqLiBUaGF0J3MgdGhlIHJlYWwgd2luIGZvciByZWFjaGFiaWxpdHkuIEFueSBQSFkgYXR0YWNobWVudCBvciBkZXRhY2htZW50IHdpbGwgbm93IGV4ZWN1dGUgdGhlIG5ldyBjb2RlLlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZSBuZXcgY29kZSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgLiBJdCdzIGEgc2ltcGxlIGNoZWNrOlxuYGBgY1xuXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKSB7XG5cdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG5cdFx0aWYgKGVycilcblx0XHRcdGdvdG8gZXJyb3I7XG5cdH1cbmBgYFxuSXQncyBhIHNtYWxsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgUEhZIGxvZ2ljLiBUaGUgbWFpbiBsb2dpYyBpcyBzdGlsbCB3aXRoaW4gYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLCBhbmQgdGhhdCdzIHRoZSBwYXJ0IHRoYXQncyBoYXJkZXIgdG8gZ2V0IHRvLlxuXG5TbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiB3ZSByZWxpYWJseSBmdXp6IGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYD8gSXQgKmlzKiBhIHBsYXRmb3JtIGRyaXZlci4gQ2FuIFN5emthbGxlciBwcm9iZSBpdCB1c2luZyBgc3l6X21vdW50X2ltYWdlYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSdtIG5vdCBzZWVpbmcgYW4gb2J2aW91cyB3YXkuIFN5emthbGxlciBkb2Vzbid0IGVhc2lseSBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhlcmUncyBhIHBzZXVkby1kZXZpY2Ugb3IgYSBVU0IvUENJIGRyaXZlciBjb21wb25lbnQuIEFoLCB3YWl0IGEgbWludXRlLiBEZXZpY2UgdHJlZSBvdmVybGF5cyEgU3l6a2FsbGVyICpjb3VsZCogcG90ZW50aWFsbHkgaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgdGhyb3VnaCBkZXZpY2UgdHJlZSBvdmVybGF5cywgYnV0IHRoYXQncyB1c3VhbGx5IGEgcGFpbi5cblxuU3RpbGwsIGJlY2F1c2UgYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyByZWFjaGFibGUsIHRoYXQncyB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludC4gV2Ugc2hvdWxkIGNoZWNrIHRoZSBjb25maWcgZm9yIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCwgc2VlIGlmIGl0IGNhbiBiZSBlbmFibGVkIG9yIG5vdCwgYnV0IHRoYXQncyB0aGUgZGlyZWN0aW9uIEknbSB0YWtpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5OTIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjoxMToxMy43NTA5Nzg5MDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NTUzMDYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvLXJlYWx0ZWstcnRsOTMwMFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19NRElPX1BJQzY0SFBTQylcXHRcXHQrPSBtZGlvLXBpYzY0aHBzYy5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDApXFx0Kz0gbWRpby1yZWFsdGVrLXJ0bDkzMDAub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX01ESU9fUkVHTUFQKVxcdFxcdCs9IG1kaW8tcmVnbWFwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6MTE6MTUuOTQ2NTE0NjQ0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU4NjQzNDIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRGl2ZTogUmVhbHRlayBSVEw5MzAwIE1ESU8gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgc3BlY2lmaWMuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgYENPTkZJR19NRElPX1JFQUxURUtfUlRMOTMwMGAgb3B0aW9uIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLiBJJ20gYXNzdW1pbmcgdGhhdCBpdCBpcywgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHZlcmlmeSB0aGlzIHNldHRpbmcuIFRoaXMgd2lsbCBoZWxwIHdpdGggZGVidWdnaW5nIGEgcHJvYmxlbSBJIGFtIHdvcmtpbmcgb24uIExldCBtZSBnbyBjaGVjay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM5NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjExOjE4LjUzMjk1MDgyMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIzNzQ4MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTY0PWNvbmZpZyBNRElPX0lQUTgwNjRcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzEtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3Mjpjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6MTE6MjAuNTU2NzA0OTg3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNTM2ODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBNRElPX1JFQUxURUtfUlRMOTMwMGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE1ESU9fUkVBTFRFS19SVEw5MzAwYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIHRyYWNlIHRoaXMgdGhpbmcuIFRoaXMgbGlrZWx5IHJlcHJlc2VudHMgYSBtb2R1bGUgb3IgY29tcG9uZW50IHJlbGF0ZWQgdG8gTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgY29tbXVuaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhIFJlYWx0ZWsgUlRMOTMwMCBzZXJpZXMgY2hpcCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgbmV0d29yayBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBwaWVjZXMgb2YgdGhlIHN5c3RlbS5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzdGFuZGFyZCB3YXlzIEknZCBhcHByb2FjaCB0aGlzIGRlcGVuZGVuY3kgYW5hbHlzaXMuIEZpcnN0LCBJIG5lZWQgdG8ga25vdyB3aGF0IHRoaXMgcmVsaWVzICpvbiouIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBoYXJkd2FyZSBjb21wb25lbnRzIGRvZXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCByZXF1aXJlIHRvIGZ1bmN0aW9uPyBJcyBpdCBhIGRyaXZlcj8gQW4gYWJzdHJhY3Rpb24gbGF5ZXI/IERvZXMgaXQgaW50ZXJmYWNlIGRpcmVjdGx5IHdpdGggdGhlIGhhcmR3YXJlLCBvciBkb2VzIGl0IHNpdCBvbiB0b3Agb2YgYW5vdGhlciBsb3dlci1sZXZlbCBNRElPIGltcGxlbWVudGF0aW9uPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgaXQgd2lsbCBkZXBlbmQgb24gdGhlIFJlYWx0ZWsgUlRMOTMwMCdzIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIG9yIHJlZ2lzdGVycywgYW5kIG1heWJlIGEgZ2VuZXJpYyBNRElPIGxpYnJhcnkuXG5cbkkgYWxzbyBuZWVkIHRvIGtub3cgd2hhdCAqZGVwZW5kcyogb24gaXQuIFdoYXQgb3RoZXIgY29kZSBpcyBjYWxsaW5nIGl0PyBJcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIG5ldHdvcmsgc3RhY2s/IERvZXMgaXQgZmVlZCBpbnRvIGEgc3BlY2lmaWMgbmV0d29yayBtYW5hZ2VtZW50IHN5c3RlbSBvciBjb25maWd1cmF0aW9uIHRvb2w/IFVuZGVyc3RhbmRpbmcgdGhlIHVwc3RyZWFtIGNvbnN1bWVycyBvZiB0aGlzIGNvbXBvbmVudCB3aWxsIGdpdmUgbWUgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaW1wb3J0YW5jZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEknZCBleHBlY3QgaXQgdG8gZmVlZCBpbnRvIG5ldHdvcmtpbmcgZnVuY3Rpb25zIGFuZCBtYW5hZ2VtZW50IGludGVyZmFjZXMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzIHdvdWxkIGJlIHRvIHN0YXJ0IHdpdGggYW55IGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIG9yIGhlYWRlciBmaWxlcy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIHNvdXJjZSBjb2RlLCBhbnkgbWFrZWZpbGVzLCBvciBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gaWRlbnRpZnkgdGhvc2UgZGVwZW5kZW5jaWVzLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGluY2x1ZGUgc3RhdGVtZW50cywgbGlicmFyeSBsaW5raW5nLCBhbmQgYW55IGJ1aWxkIGZsYWdzIHRoYXQgbWlnaHQgcHJvdmlkZSBjbHVlcy4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb21waWxlLXRpbWUsIGxpbmstdGltZSwgb3IgcnVudGltZSBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGlzIG1vZHVsZSdzIHBsYWNlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjgzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6MTE6MjQuNjcyMDc1Mjk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXHQgIGludGVyZmFjZSB1bml0cyBvZiB0aGUgSVBRODA2NCBTb0NcXG4gMTcxOlxcdFxcbiAxNzI6XFx0Y29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXFxuIDE3MzpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuIDE3NDpcXHRcXHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXFxuIDE3NTpcXHRcXHRoZWxwXFxuIDE3NjpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgUmVhbHRla1xcbiAxNzc6XFx0XFx0ICBSVEw5MzAwIGZhbWlseSBvZiBFdGhlcm5ldCBzd2l0Y2hlcyB3aXRoIGludGVncmF0ZWQgU29DLlxcbiAxNzg6XFx0XFxuIDE3OTpcXHRjb25maWcgTURJT19SRUdNQVBcXG4gMTgwOlxcdFxcdHRyaXN0YXRlXFxuIDE4MTpcXHRcXHRoZWxwXFxuIDE4MjpcXHRcXHQgIFRoaXMgZHJpdmVyIGFsbG93cyB1c2luZyBNRElPIGRldmljZXMgdGhhdCBhcmUgbm90IHNpdHRpbmcgb24gYVxcbiAxODM6XFx0XFx0ICByZWd1bGFyIE1ESU8gYnVzLCBidXQgc3RpbGwgZXhwb3NlcyB0aGUgc3RhbmRhcmQgODAyLjMgcmVnaXN0ZXJcXG4gMTg0OlxcdFxcdCAgbGF5b3V0LiBJdCdzIHJlZ21hcC1iYXNlZCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIG9uIGludGVncmF0ZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjExOjI0LjY3MjE0ODAwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzE3NDcyOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBVbnJlYWNoYWJsZSBDb2RlIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgZGVhbC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUgY29kZSdzIGNvbmRpdGlvbmFsIG9uIGBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVGAsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0J3MgUmVhbHRlay1zcGVjaWZpYy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAsIHdoaWNoIGFyZSBQSFkgZnVuY3Rpb25zLiBBIGNhbGxiYWNrIGlzIGJlaW5nIGludm9rZWQgdGhlcmUsIGBtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaGAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgcmVhY2hhYmxlIHRoaXMgaXMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHBsYXRmb3JtIGRyaXZlcnMgYXJlIHVzdWFsbHkgaW5zdGFudGlhdGVkIHRocm91Z2ggZGV2aWNlIHRyZWUuIFN5emthbGxlciwgaW4gaXRzIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgZG9lc24ndCB0eXBpY2FsbHkgbG9hZCBhcmJpdHJhcnkgRFQgb3ZlcmxheXMgdW5sZXNzIGV4cGxpY2l0bHkgY29uZmlndXJlZCwgb3RoZXIgdGhhbiBmb3Igc3BlY2lmaWMgY2FzZXMgbGlrZSBVU0IsIFBDSSwgYW5kIHZpcnR1YWwgZGV2aWNlcy4gSSBkaWQgYSBxdWljayBtZW1vcnkgam9nIC0gZG9lcyBzeXprYWxsZXIgaGF2ZSBEVCBvdmVybGF5IHN1cHBvcnQ/IE1vc3RseSBmb3IgdGhvc2UgZGV2aWNlIHR5cGVzLCBpdCBsb29rcyBsaWtlLlxuXG5CdXQgdGhlIHJlYWwga2lja2VyIGlzIHRoaXM6IHRoaXMgY2FsbGJhY2sgYG5vdGlmeV9waHlfYXR0YWNoYCBpcyBvbmx5IHNldCBpbiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgUmVhbHRlayBzd2l0Y2guIEl0J3Mgbm90IGdvaW5nIHRvIHByb2JlIGluIGEgZ2VuZXJpYyB4ODYgVk0gd2l0aG91dCBhIHNwZWNpZmljIGRldmljZSB0cmVlLCB3aGljaCBpcyBoaWdobHkgdW5saWtlbHkgdG8gYmUgdGhlIGRlZmF1bHQuIFNvIHRoZSBuZXcgY29kZSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIHdpbGwganVzdCBjaGVjayBhIE5VTEwgcG9pbnRlciBhbmQgY29udGludWUuIFRoZSBjb3JlIG9mIHRoZSBuZXcgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUuXG5cbkknbSBjaGVja2luZyBpZiB0aGVyZSdzIGFueSBvdGhlciB3YXkgdG8gcmVhY2ggdGhpcyBSZWFsdGVrIE1ESU8gZHJpdmVyLiBObywgaXQncyBhIHBsYXRmb3JtIGRyaXZlci4gUGxhdGZvcm0gZHJpdmVycyBhcmUgY3JlYXRlZCB0aHJvdWdoIGJvYXJkIGNvZGUsIGRldmljZSB0cmVlLCBvciBBQ1BJLiBJbiBhIGdlbmVyaWMgVk0gbGlrZSBRRU1VIHg4Nl82NCBvciBhcm02NCwgdGhpcyBzcGVjaWZpYyBkZXZpY2Ugd29uJ3QgYmUgcHJlc2VudC5cblxuSSdtIHRoaW5raW5nIGFib3V0IGBXb3J0aEZ1enppbmdgIGFuZCB3aGV0aGVyIHRoZSBjb2RlIHBhdGhzIGFyZSBwb3NzaWJsZS4gSWYgaXQncyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBpdCBzaG91bGQgYmUgZmFsc2UsIHJpZ2h0PyBMZXQgbWUgY2hlY2sgYWdhaW4gaWYgYG90dG9fZW1kaW9fcHJvYmVgIGlzIHJlYWNoYWJsZS4gTm8sIGJlY2F1c2UgaXQgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuXG5cblNvIHRoZSBkcml2ZXIgd2lsbCBuZXZlciBwcm9iZSwgYW5kIHRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgY29kZSB3b24ndCBleGVjdXRlLiBUaGUgY2hhbmdlcyBpbiBgcGh5X2RldmljZS5jYCBhcmUganVzdCBhZGRpbmcgdGhpcyBjYWxsYmFjaywgd2hpY2ggd2lsbCBiZSBOVUxMIGluIG91ciBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBpbiB0aGUgYHBoeV9hdHRhY2hfZGlyZWN0YCB3aWxsIG5ldmVyIGV4ZWN1dGUuXG5cbkknbSByZXZpZXdpbmcgdGhlIGluc3RydWN0aW9ucy4gVGhleSBzdGF0ZSB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5UaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIHN3aXRjaCwgYW5kIHRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIGl0IGluIHRoZSBrZXJuZWwgKGxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBgdmttc2ApLiBJdCdzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBjaGVja2luZyBpZiB0aGVyZSdzIGEgc3lzZnMgb3IgY29uZmlnZnMgaW50ZXJmYWNlIHRvIGluc3RhbnRpYXRlIGl0LiBOby4gSSdsbCBncmVwIGZvciBgbm90aWZ5X3BoeV9hdHRhY2hgIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIG90aGVyIGRyaXZlci5cblxuVGhlIGNvbmNsdXNpb24gaXMgdGhpcyBpcyB1bnJlYWNoYWJsZSBhbmQsIHRoZXJlZm9yZSwgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDQxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6MTE6MzUuOTg5NjI1MTI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM3Mjc5OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vdGlmeV9waHlfYXR0YWNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz03NTM9c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc2OC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzY5OnN0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03NzAte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTgxNz1zdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04NDUtXFx0YnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjg0NjpcXHRidXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODQ3LVxcdGJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzUyPWludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODc4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg3OTpcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4ODA6XFx0XFx0ZXJyID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4ODEtXFx0XFx0aWYgKGVycilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9MzYzPXN0cnVjdCBtaWlfYnVzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMzc4LVxcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjM3OTpcXHQvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovXFxuaW5jbHVkZS9saW51eC9waHkuaDozODA6XFx0aW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbmluY2x1ZGUvbGludXgvcGh5LmgtMzgxLVxcdC8qKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjoxMTozOC4xMjY5MTA1MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5Njk5NDE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgVmFsdWUqKlxuXG5Pa2F5LCBhZnRlciBleGFtaW5pbmcgdGhlIGNvZGUsIGl0J3MgY2xlYXIgdGhlIG9ubHkgcGxhY2UgdGhlIGNydWNpYWwgc2V0dGluZyBoYXBwZW5zIGlzIHdpdGhpbiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgY29yZSBtb2RpZmljYXRpb25zIGFyZSBlc3NlbnRpYWxseSBuby1vcHMgd2l0aGluIG91ciBzcGVjaWZpYyB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGF0IG1lYW5zIHRoZSBkcml2ZXItbGV2ZWwgY2hhbmdlcywgd2hpY2ggYXJlIHRoZSBwb2ludCBvZiBpbnRlcmVzdCwgYXJlIHNpbXBseSB1bnJlYWNoYWJsZS5cblxuR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MzgwL1JUTDgzOTAgTURJTyBjb250cm9sbGVycywgYW5kIHRoaXMgc3VwcG9ydCByZWxpZXMgaGVhdmlseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSBvciBjb3JyZXNwb25kaW5nIGRldmljZSB0cmVlIG5vZGVzIHRoYXQgYXJlbid0IGF2YWlsYWJsZSBvciBlbXVsYXRlZCBpbiBvdXIgc3RhbmRhcmQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5IGlzbid0IGdvaW5nIHRvIGJlIGV4ZXJjaXNlZC4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHBoeV9kZXZpY2UuY2AgbWVyZWx5IGluc2VydCBhIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoZSB0YXJnZXRlZCwgdW5yZWFjaGFibGUgZHJpdmVyLiBUaHVzLCB0aGUgcmVhbCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVmZmVjdGl2ZWx5IGhpZGRlbi5cblxuVGhlcmVmb3JlLCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRjaCB3b24ndCBwcm92aWRlIGFueSBtZWFuaW5nZnVsIGNvdmVyYWdlLiBJJ20gZ29pbmcgdG8gZmxhZyBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJpc2svcmV3YXJkIGp1c3QgaXNuJ3QgdGhlcmUgZm9yIHRoZSBlZmZvcnQgaXQgd291bGQgcmVxdWlyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MDMsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjExOjQyLjgyMzkwNzE5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAvUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHRvIGEgcGxhdGZvcm0gZHJpdmVyIChtZGlvLXJlYWx0ZWstcnRsOTMwMC5jKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgKG9yIGRldmljZSB0cmVlIG5vZGVzKSB0aGF0IGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBUaGUgY2hhbmdlcyB0byBjb3JlIFBIWSBjb2RlIChwaHlfZGV2aWNlLmMpIG1lcmVseSBhZGQgYW5kIGludm9rZSBhIGNhbGxiYWNrIHRoYXQgaXMgb25seSBpbXBsZW1lbnRlZCBieSB0aGlzIHVucmVhY2hhYmxlIGRyaXZlciwgbWFraW5nIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MC9SVEw4MzkwIE1ESU8gY29udHJvbGxlcnMgdG8gYSBwbGF0Zm9ybSBkcml2ZXIgKG1kaW8tcmVhbHRlay1ydGw5MzAwLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAob3IgZGV2aWNlIHRyZWUgbm9kZXMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIFRoZSBjaGFuZ2VzIHRvIGNvcmUgUEhZIGNvZGUgKHBoeV9kZXZpY2UuYykgbWVyZWx5IGFkZCBhbmQgaW52b2tlIGEgY2FsbGJhY2sgdGhhdCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IHRoaXMgdW5yZWFjaGFibGUgZHJpdmVyLCBtYWtpbmcgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdzsb[1] Phase: Running StartedAt: 2026-07-09 22:11:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdzsb[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-09 22:11:54 +0000 UTC FinishedAt: 2026-07-09 22:11:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}