Name: series-workflow5xvt6 Phase: Failed StartedAt: 2026-07-23 00:29:25 +0000 UTC FinishedAt: 2026-07-23 00:51:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvt6[0] Phase: Succeeded StartedAt: 2026-07-23 00:29:25 +0000 UTC FinishedAt: 2026-07-23 00:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvt6[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 00:29:25 +0000 UTC FinishedAt: 2026-07-23 00:51:23 +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+CgkJCTx0ZD4yMDI2LzA3LzIzIDAwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgUmVhbHRlayBSVEw4MzgwIGFuZCBSVEw4MzkwIE1ESU8gY29udHJvbGxlcnMgaW4gdGhlIG1kaW8tcmVhbHRlay1ydGw5MzAwIHBsYXRmb3JtIGRyaXZlciwgYW5kIGFkZHMgbm90aWZ5X3BoeV9hdHRhY2gvbm90aWZ5X3BoeV9kZXRhY2ggY2FsbGJhY2tzIHRvIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gd2hpY2ggYXJlIG9ubHkgdXNlZCBieSB0aGlzIHNwZWNpZmljIGRyaXZlci4gU2luY2UgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgUmVhbHRlayBTb0NzLCBpdCBjYW5ub3QgYmUgcHJvYmVkIGluIGEgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCAobGlrZSBRRU1VIG9yIEdDRSkgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBvciBkZXZpY2UgdHJlZSBzdXBwb3J0LiBUaGUgY29yZSBQSFkgc3Vic3lzdGVtIGNoYW5nZXMgYXJlIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGJlY2F1c2Ugbm8gcmVhY2hhYmxlIGRyaXZlciBzZXRzIHRoZXNlIGNhbGxiYWNrcy4gVGh1cywgdGhlIG1vZGlmaWVkIGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDExMGIyMmY4NDVkOGZhZDk0YTA2ZTU5YzM3ZjJjZTA4ZjY0OGFjODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAwMDo1MDoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbmluZGV4IDI3MWUwNWJhZTljNTc0Li42N2UwYjIzYTg0NzBlYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5AQCAtNCw3ICYjNDM7NCw3IEBAXG4gJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCNcbiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiBcbi10aXRsZTogUmVhbHRlayBSVEw5MzAwIE1ESU8gQ29udHJvbGxlclxuJiM0Mzt0aXRsZTogUmVhbHRlayBPdHRvIFN3aXRjaGVzIEV0aGVybmV0IE1ESU8gQ29udHJvbGxlclxuIFxuIG1haW50YWluZXJzOlxuICAgLSBDaHJpcyBQYWNraGFtIFx1MDAzY2NocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uelx1MDAzZVxuQEAgLTEyLDYgJiM0MzsxMiwxNiBAQCBtYWludGFpbmVyczpcbiBwcm9wZXJ0aWVzOlxuICAgY29tcGF0aWJsZTpcbiAgICAgb25lT2Y6XG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW9cbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvXG4gICAgICAgLSBpdGVtczpcbiAgICAgICAgICAgLSBlbnVtOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW9cbkBAIC0yNCw2ICYjNDM7MzQsOCBAQCBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTMtbWRpb1xuICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cbiYjNDM7ICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMS1tZGlvXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5pbmRleCBhZmQ1MmExY2Q3ZjgzMS4uYWViYzc2YWU1ZTU2MGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuQEAgLTM1LDYgJiM0MzszNSw3NCBAQFxuICAqXG4gICogVGhlIGRyaXZlciB3b3JrcyBvdXQgdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIE1ESU8gYnVzIGRlc2NyaWJlZCBpbiBkZXZpY2UgdHJlZSBhbmQgcGhhbmRsZXMgb25cbiAgKiB0aGUgZXRoZXJuZXQtcG9ydHMgcHJvcGVydHkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBkZXZpY2VzIGhhdmUgYSBoYXJkd2FyZSBwb2xsaW5nIHVuaXQgdGhhdCBydW5zIGluIHRoZSBiYWNrZ3JvdW5kIHdpdGhvdXQgYW55IENQVSBsb2FkLiBJdFxuJiM0MzsgKiBjb25zdGFudGx5IHNjYW5zIHRoZSBNRElPIGJ1cyBhbmQgdGhlIGF0dGFjaGVkIFBIWXMgYW5kIHVwZGF0ZXMgdGhlIE1BQyBzdGF0dXMgcmVnaXN0ZXJzLlxuJiM0MzsgKlxuJiM0MzsgKiBIb3cgZG9lcyB0aGUgcG9sbGluZyB3b3JrP1xuJiM0MzsgKlxuJiM0MzsgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZlxuJiM0MzsgKiB0aGUgYXNzb2NpYXRlZCBidXMvYWRkcmVzcyBpcyBhY3RpdmUgb3Igbm90LiBUaGUgaGFyZHdhcmUgcnVucyBhIHRpZ2h0IGxvb3Agb3ZlciB0aGlzIGFuZCBmb3JcbiYjNDM7ICogZWFjaCBzZXQgcG9sbGluZyBiaXQgaXQgaXNzdWVzIGEgc3RhdHVzIGNoZWNrIGZvciB0aGUgUEhZLiBBdHRhY2hpbmcgYSBsb2dpYyBhbmFseXplciB0byB0aGVcbiYjNDM7ICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOlxuJiM0MzsgKlxuJiM0MzsgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuJiM0MzsgKlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDMxLCAweDApO1x0cGh5X3JlYWQocGh5LCAwKTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1x0cGh5X3JlYWQocGh5LCAxKTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcdHBoeV9yZWFkKHBoeSwgNCk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcdHBoeV9yZWFkKHBoeSwgNSk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDE0KTtcdFx0cGh5X3JlYWQocGh5LCA2KTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1x0cGh5X3JlYWQocGh5LCA5KTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcdHBoeV9yZWFkKHBoeSwgMTApO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDE1KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMTQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgOSk7XHRcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMTApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMTUpO1x0XHRwaHlfcmVhZChwaHksIDE0KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA0KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDUpO1x0XHRwaHlfcmVhZChwaHksIDE0KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgNik7XG4mIzQzOyAqXG4mIzQzOyAqIEZyb20gdGhlIGFib3ZlIHNuaXBwZXRzIGl0IHBvbGxzIE1ESU9fQU5fRUVFX0FEViBhbmQgTURJT19BTl9FRUVfTFBBQkxFIHZpYSBDNDUgb3ZlciBDMjIuIEFzXG4mIzQzOyAqIG9mIG5vdyBpdCBpcyB1bmNsZWFyIGhvdyB0aGUgaGFyZHdhcmUgZGVjaWRlcyBpZiBhIFBIWSBzdXBwb3J0cyB0aGVzZSByZWdpc3RlcnMuIEFmdGVyIG9uZSBQSFlcbiYjNDM7ICogc3RhdHVzIGlzIHJlYWQsIHRoZSBwb2xsaW5nIGVuZ2luZSBnb2VzIG92ZXIgdG8gdGhlIG5leHQgUEhZLiBCYXNpY2FsbHkgdGhlIGJ1cyBpcyBhbHdheXMgYnVzeVxuJiM0MzsgKiBhbmQgdGhlIE1BQyBzdGF0dXMgaXMgdXBkYXRlZCBpbiByZWFsLXRpbWUuXG4mIzQzOyAqXG4mIzQzOyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/XG4mIzQzOyAqXG4mIzQzOyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXJcbiYjNDM7ICogc2V0cyBhIFwmIzM0O3J1biBjb21tYW5kIG5vd1wmIzM0OyBiaXQuIEJldHdlZW4gdHdvIHBvbGxpbmcgc2VxdWVuY2VzIGZvciBkaWZmZXJlbnQgUEhZcyB0aGUgaGFyZHdhcmVcbiYjNDM7ICogY2hlY2tzIGlmIGEgdXNlciBjb21tYW5kIG5lZWRzIHRvIHJ1biBhbmQgc2VuZHMgaXQgb250byB0aGUgYnVzLiBBZnRlcndhcmRzIGl0IHNpbXBseSBjb250aW51ZXNcbiYjNDM7ICogaXRzIHBvbGxpbmcgd29yay4gSW5zcGVjdGluZyB0aGUgY29tbWFuZCBzZXF1ZW5jZSBmb3IgYSBwYWdlZCByZWFkIG9uIHRoZSBsb2dpYyBhbmFseXplciBnaXZlczpcbiYjNDM7ICpcbiYjNDM7ICpcdFJUTDgzODBcdFx0XHRcdFJUTDgzOTNcbiYjNDM7ICpcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1xuJiM0MzsgKlx0XHRcdFx0XHRwaHlfd3JpdGUocGh5LCAzMSwgMCk7XG4mIzQzOyAqXG4mIzQzOyAqIFdoYXQgZG9lcyB0aGlzIG1lYW4/XG4mIzQzOyAqXG4mIzQzOyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2VcbiYjNDM7ICogc3RheXMgdGhlIHNhbWUuIE9uIHRoZSBvbmUgaGFuZCB0aGF0IGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgTUFDIGxheWVyLCBvbiB0aGUgb3RoZXIgaGFuZCBpdFxuJiM0MzsgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS5cbiYjNDM7ICpcbiYjNDM7ICogLSBXaXRob3V0IHRoZSBwb2xsaW5nIGFuZCBhIHByb3BlciBNQUMgc3RhdHVzLCBzb21lIG9mIHRoZSBsaW5rIGhhbmRsaW5nIGZlYXR1cmVzIGRvIG5vdCB3b3JrLlxuJiM0MzsgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLlxuJiM0MzsgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsXG4mIzQzOyAqICAgcmVhZCB0aGUgcmlnaHQgZGF0YS4gT24gdGhlIFJUTDgzOHggcG9sbGluZyBzaW1wbHkgcmVzZXRzIGl0IHRvIHplcm8uIE90aGVyIGRldmljZXMgc2VlbVxuJiM0MzsgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyBcJiMzNDttYWdpY2FsbHlcJiMzNDsgaW4gdGhlIGJhY2tncm91bmQuXG4mIzQzOyAqIC0gQSBDNDUgb3ZlciBDMjIga2VybmVsIGFjY2VzcyBzZXF1ZW5jZSBpcyBtb3N0IGxpa2VseSB0byBmYWlsIGJlY2F1c2UgY2hhbmNlcyBhcmUgaGlnaCB0aGF0XG4mIzQzOyAqICAgdGhlIHBvbGxpbmcgZW5naW5lIG92ZXJ3cml0ZXMgcmVnaXN0ZXJzIDEzLzE0IGluIGJldHdlZW4uXG4mIzQzOyAqIC0gUEhZIGZpcm13YXJlIGxvYWRpbmcgY2FuIGhhdmUgaXNzdWVzLiBFc3BlY2lhbGx5IGlmIGEgUEhZIGlzIGRlc2lnbmVkIHRvIGV4cGVjdCBhIGNsZWFuXG4mIzQzOyAqICAgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgd2l0aG91dCBkZXZpYXRpb24uXG4mIzQzOyAqIC0gQW4gYWNjZXNzIHRvIG9uZSBQSFkgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyZWUgc2xvdCBvZiB0aGUgcG9sbGluZyBlbmdpbmUuXG4mIzQzOyAqXG4mIzQzOyAqIENvbmNsdXNpb246IFRoZSBSZWFsdGVrIE1ESU8gYnVzIGRyaXZlciBQSFkgYWNjZXNzIG11c3Qga25vdyBhbmQgaGFuZGxlIGFueSBpbnRlcmZlcmVuY2UgdGhhdFxuJiM0MzsgKiBhcmlzZXMgZnJvbSB0aGUgYWJvdmUgZGVzY3JpYmVkIGhhcmR3YXJlIHBvbGxpbmcuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuQEAgLTUwLDYgJiM0MzsxMTgsNTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbiBcbiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9CVVNFU1x0XHRcdDFcbiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9QT1JUU1x0XHRcdDI4XG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfR0xCX0NUUkxcdFx0XHQweGExMDBcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FXHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMFx0XHQweGExYjhcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMVx0XHQweGExYmNcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFJcdFx0R0VOTUFTSygyNCwgMjApXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRVx0XHRHRU5NQVNLKDE5LCAxNSlcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMTQsIDMpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9GQUlMXHRcdFx0MCAvKiBubyBmYWlsIGluZGljYXRvciAqL1xuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yXHRcdDB4YTFjMFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXHRcdDB4YTFjNFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTFx0XHRcdDB4YTE3Y1xuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMXHRcdDB4YTFjOFxuJiM0MztcbiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9CVVNFU1x0XHRcdDJcbiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9QQUdFU1x0XHRcdDgxOTJcbiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9QT1JUU1x0XHRcdDUyXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMXHRcdDB4MDNlY1xuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMXHRcdDB4MDNkY1xuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDksIDUpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRVx0XHRHRU5NQVNLKDIyLCAxMClcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRkFJTFx0XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURVx0XHRCSVQoMylcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRFx0XHRcdDBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDVcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyXHRcdDBcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19DVFJMXHRcdFx0MHgwM2UwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFXHRcdEdFTk1BU0soOCwgMClcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkxcdFx0MHgwM2YwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkxcdFx0XHQweDAzZjRcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXHRcdDB4MDNlNFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdIXHRcdDB4MDNlOFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MDNmY1xuJiM0MztcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTXHRcdFx0NFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QT1JUU1x0XHRcdDI4XG5AQCAtNzAsNiAmIzQzOzE4Miw3IEBAXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuICNkZWZpbmUgUlRMOTMwMF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcdFx0MHhjYjdjXG4mIzQzOyNkZWZpbmUgUlRMOTMwMF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhjYTkwXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFx0XHQweGNiODBcbiBcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTXHRcdFx0NFxuQEAgLTk1LDExICYjNDM7MjA4LDEzIEBAXG4gI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkxcdDB4MGMxOFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9BRERSX0NUUkxcdFx0MHgwYzc0XG4mIzQzOyNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcdFx0MHgwY2NjXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfU0VMXHRcdDB4MGM5Y1xuIFxuICNkZWZpbmUgUEhZX0NUUkxfQ01EXHRcdFx0XHRCSVQoMClcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9ERVZBRFx0XHRcdEdFTk1BU0soMjAsIDE2KVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX1JFR1x0XHRcdEdFTk1BU0soMTUsIDApXG4mIzQzOyNkZWZpbmUgUEhZX1ZFTkRPUl9SRUFMVEVLXHRcdFx0MHgwMDFjYzgwMFxuIFxuICNkZWZpbmUgTUFQX0FERFJTX1BFUl9SRUdcdFx0XHQ2XG4gI2RlZmluZSBNQVBfQklUU19QRVJfQUREUlx0XHRcdDVcbkBAIC0xMjUsNyAmIzQzOzI0MCw5IEBAIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYge1xuIFx0Y29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyAqaW5mbztcbiBcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiBcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKHBoeV9wb2xsLCBNQVhfUE9SVFMpO1xuIFx0REVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7XG4mIzQzO1x0dTE2IHBhZ2VbTUFYX1BPUlRTXTtcbiBcdHU4IHNtaV9idXNbTUFYX1BPUlRTXTtcbiBcdHU4IHNtaV9hZGRyW01BWF9QT1JUU107XG4gXHRib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTtcbkBAIC0xNDIsNiAmIzQzOzI1OSw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xuIFx0dTggbnVtX2J1c2VzO1xuIFx0dTggbnVtX3BvcnRzO1xuIFx0dTE2IG51bV9wYWdlcztcbiYjNDM7XHR1MzIgcG9sbF9jdHJsO1xuIFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XG4gXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuIFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuQEAgLTE3Nyw2ICYjNDM7Mjk1LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpXG4gXHRyZXR1cm4gY2hhbi1cdTAwM2Vwcml2O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBwcml2LVx1MDAzZWluZm8tXHUwMDNlcG9sbF9jdHJsICYjNDM7IChwb3J0IC8gMzIpICogNCxcbiYjNDM7XHRcdFx0XHQgIEJJVChwb3J0ICUgMzIpLCBhY3RpdmUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRcdFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxuIHtcbkBAIC0xODUsOSAmIzQzOzMxMSw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHR1MzIgY21kc3RhdGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibGUgd3JvbmcgKi9cbiYjNDM7XHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMjcsNyAmIzQzOzM1Myw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cdTAwM2VyZWdtYXAsIGluZm8tXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXG4tXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTI2NCwxMyAmIzQzOzM5MCwxMjMgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXHUwMDNlaW5mby1cdTAwM2VjbWRfd3JpdGUsIGNtZF9kYXRhKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuZXh0X3BhZ2VcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuZXh0X3BhZ2VcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuJiM0MztcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiB7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuIFx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuIFx0fTtcbiBcbkBAIC0yODQsNyAmIzQzOzUyMCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiBcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbiBcdH07XG5AQCAtMzI0LDcgJiM0Mzs1NjAsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdVxuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5icm9hZGNhc3RcdD0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLFxuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdH07XG4gXG4gXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDkzMTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuQEAgLTMzNiw3ICYjNDM7NTcyLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuIFx0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuIFx0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbkBAIC0zODIsOCAmIzQzOzYxOCwxMiBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcbiBcdGlmIChwb3J0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4mIzQzO1x0XHRpZiAocmVnbnVtID09IDMxKVxuJiM0MztcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2VwYWdlW3BvcnRdO1xuJiM0MztcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcdTAwMjZ2YWx1ZSk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHJldCA/IHJldCA6IHZhbHVlO1xuIH1cbkBAIC0zOTcsOCAmIzQzOzYzNywxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNlxuIFx0aWYgKHBvcnQgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGlmIChyZWdudW0gPT0gMzEpIHtcbiYjNDM7XHRcdFx0aWYgKHZhbHVlIFx1MDAzZT0gUkFXX1BBR0UocHJpdikpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSB2YWx1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNld3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDcxLDYgJiM0Mzs3MjAsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUEhZX1BBVENIX0RPTkUgZW5hYmxlcyBQSFkgY29udHJvbCB2aWEgU29DLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBQSFkgYWNjZXNzLCBpbmNsdWRpbmdcbiYjNDM7XHQgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4ge1xuIFx0dTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwO1xuQEAgLTUwNyw2ICYjNDM7NzY1LDU0IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtXHUwMDNlbWRpby5idXMpO1xuJiM0MztcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXHUwMDNlbWRpby5idXMsIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBwb3J0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlc21pX2J1c19pc19jNDVbY2hhbi1cdTAwM2VtZGlvX2J1c10gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICghcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi1cdTAwM2VwaHlfaWQsIFBIWV9WRU5ET1JfUkVBTFRFSykpKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7T25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4mIzQzO1x0XHRpZiAodGVzdF9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCkpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRfX3NldF9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtXHUwMDNlbWRpby5idXMpO1xuJiM0MztcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXHUwMDNlbWRpby5idXMsIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4mIzQzO1x0XHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdF9fY2xlYXJfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9lcnIoYnVzLVx1MDAzZXBhcmVudCwgXCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcblwmIzM0OywgcG9ydCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXG4ge1xuQEAgLTUzNiw2ICYjNDM7ODQyLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcbiBcdFx0YnVzLVx1MDAzZXdyaXRlID0gb3R0b19lbWRpb193cml0ZV9jMjI7XG4gXHR9XG4gXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuJiM0MztcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XG4mIzQzO1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbiYjNDM7XG4gXHRjaGFuID0gYnVzLVx1MDAzZXByaXY7XG4gXHRjaGFuLVx1MDAzZW1kaW9fYnVzID0gbWRpb19idXM7XG4gXHRjaGFuLVx1MDAzZXByaXYgPSBwcml2O1xuQEAgLTY1Miw2ICYjNDM7OTYxLDIxIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBwcml2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3BvcnRzOyBwb3J0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdFx0ZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG5AQCAtNjcxLDYgJiM0Mzs5OTUsMTAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcmVnbWFwKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VyZWdtYXApO1xuIFxuJiM0MztcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiBcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbkBAIC02OTYsNiAmIzQzOzEwMjQsNTEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0ge1xuJiM0MztcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4mIzQzO1x0LmNtZF9mYWlsID0gUlRMODM4MF9QSFlfQ1RSTF9GQUlMLFxuJiM0MztcdC5jbWRfcmVhZCA9IFJUTDgzODBfUEhZX0NUUkxfUkVBRCxcbiYjNDM7XHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcbiYjNDM7XHQuY21kX3JlZ3MgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSxcbiYjNDM7XHRcdC5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLFxuJiM0MztcdFx0LmlvX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMixcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsXG4mIzQzO1x0fSxcbiYjNDM7XHQubnVtX2J1c2VzID0gUlRMODM4MF9OVU1fQlVTRVMsXG4mIzQzO1x0Lm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLFxuJiM0MztcdC5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMODM4MF9TTUlfUE9MTF9DVFJMLFxuJiM0MztcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsXG4mIzQzO1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLFxuJiM0MztcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NSxcbiYjNDM7XHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMixcbiYjNDM7XHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0ge1xuJiM0MztcdC5jbWRfZmFpbCA9IFJUTDgzOTBfUEhZX0NUUkxfRkFJTCxcbiYjNDM7XHQuY21kX3JlYWQgPSBSVEw4MzkwX1BIWV9DVFJMX1JFQUQsXG4mIzQzO1x0LmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsXG4mIzQzO1x0LmNtZF9yZWdzID0ge1xuJiM0MztcdFx0LmJyb2FkY2FzdCA9IFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTCxcbiYjNDM7XHRcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxuJiM0MztcdFx0LmM0NV9kYXRhID0gUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwsXG4mIzQzO1x0XHQuZXh0X3BhZ2UgPSBSVEw4MzkwX1BIWVJFR19DVFJMLFxuJiM0MztcdFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1csXG4mIzQzO1x0XHQucG9ydF9tYXNrX2hpZ2ggPSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSCxcbiYjNDM7XHR9LFxuJiM0MztcdC5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUyxcbiYjNDM7XHQubnVtX3BhZ2VzID0gUlRMODM5MF9OVU1fUEFHRVMsXG4mIzQzO1x0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxuJiM0MztcdC5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbiYjNDM7XHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIsXG4mIzQzO1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxuJiM0MztcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLFxuJiM0MztcdC53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1LFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5hZGRyX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4gXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXG5AQCAtNzExLDYgJiM0MzsxMDg0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XG4gXHQubnVtX2J1c2VzID0gUlRMOTMwMF9OVU1fQlVTRVMsXG4gXHQubnVtX3BvcnRzID0gUlRMOTMwMF9OVU1fUE9SVFMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXG5AQCAtNzM2LDYgJiM0MzsxMTEwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXG4gXHQubnVtX3BvcnRzID0gUlRMOTMxMF9OVU1fUE9SVFMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuIFx0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcixcbiBcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMixcbiBcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSxcbkBAIC03NDQsNiAmIzQzOzExMTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsODM4MC1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsODM5MS1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM5MF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw5MzAxLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb185MzAwX2luZm8gfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHJ0bDkzMTEtbWRpb1wmIzM0OywgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LFxuIFx0e31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggOTRiMmU4NWUwMGEzNzkuLmE2MmMyZmY2YzJhYWJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE4NzYsNiAmIzQzOzE4NzYsMTMgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycm9yO1xuIFxuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbiYjNDM7XHRcdGVyciA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBlcnJvcjtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VtZGlvX2J1c19ub3RpZmllZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHBoeV9yZXN1bWUocGh5ZGV2KTtcbiBcbiBcdC8qKlxuQEAgLTE5MTksNiAmIzQzOzE5MjYsMTAgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcbiBcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4gXG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvX2J1c19ub3RpZmllZCBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKVxuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZW1kaW9fYnVzX25vdGlmaWVkID0gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKHBoeWRldi1cdTAwM2VkZXZsaW5rKSB7XG4gXHRcdGRldmljZV9saW5rX2RlbChwaHlkZXYtXHUwMDNlZGV2bGluayk7XG4gXHRcdHBoeWRldi1cdTAwM2VkZXZsaW5rID0gTlVMTDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTEwOTJjMzE3NWIzZGUuLjJkMzBlMDg3YTIzMzczIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTM3Niw2ICYjNDM7Mzc2LDIzIEBAIHN0cnVjdCBtaWlfYnVzIHtcbiBcdFx0XHQgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4gXHQvKiogQHJlc2V0OiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGJ1cyAqL1xuIFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBub3RpZnlfcGh5X2F0dGFjaDogUGVyZm9ybSBwb3N0LWF0dGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcbiYjNDM7XHQgKiAgIGRyaXZlcnMuIENhbGxlZCBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpIHJpZ2h0IGFmdGVyIHBoeV9pbml0X2h3KClcbiYjNDM7XHQgKiAgIGFuZCBiZWZvcmUgcGh5X3Jlc3VtZSgpLiBBdCB0aGlzIHBvaW50LCB0aGUgUEhZIGlzIHN0aWxsXG4mIzQzO1x0ICogICBzdXNwZW5kZWQsIGFuZCBAcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiBtYXkgYmUgTlVMTCAoZS5nLiBmb3JcbiYjNDM7XHQgKiAgIHN0YW5kYWxvbmUgUEhZcykuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0IGFuZCBtYXkgc2xlZXAuIFJldHVyblxuJiM0MztcdCAqICAgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZSAod2hpY2ggYWJvcnRzIHRoZVxuJiM0MztcdCAqICAgYXR0YWNoIHNlcXVlbmNlKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQG5vdGlmeV9waHlfZGV0YWNoOiBQZXJmb3JtIHByZS1kZXRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzXG4mIzQzO1x0ICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2RldGFjaCgpIGJlZm9yZSBkZXZpY2UgbGlua3MgYW5kIHJlc291cmNlc1xuJiM0MztcdCAqICAgYXJlIGNsZWFuZWQgdXAuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0IGFuZCBtYXkgc2xlZXAuIE9ubHlcbiYjNDM7XHQgKiAgIGludm9rZWQgaWYgQG5vdGlmeV9waHlfYXR0YWNoIHdhcyBwcmV2aW91c2x5IGNhbGxlZCBhbmQgc3VjY2VlZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4gXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXG4gXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcbkBAIC01NzQsNiAmIzQzOzU5MSw3IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcbiAgKiBAaGFzX2ZpeHVwczogU2V0IHRvIHRydWUgaWYgdGhpcyBQSFkgaGFzIGZpeHVwcy9xdWlya3MuXG4gICogQHN1c3BlbmRlZDogU2V0IHRvIHRydWUgaWYgdGhpcyBQSFkgaGFzIGJlZW4gc3VzcGVuZGVkIHN1Y2Nlc3NmdWxseS5cbiAgKiBAc3VzcGVuZGVkX2J5X21kaW9fYnVzOiBTZXQgdG8gdHJ1ZSBpZiB0aGlzIFBIWSB3YXMgc3VzcGVuZGVkIGJ5IE1ESU8gYnVzLlxuJiM0MzsgKiBAbWRpb19idXNfbm90aWZpZWQ6IFNldCB0byB0cnVlIGlmIHBvc3QtYXR0YWNoIGJ1cyBub3RpZmljYXRvbiBzdWNjZWVkZWQuXG4gICogQHN5c2ZzX2xpbmtzOiBJbnRlcm5hbCBib29sZWFuIHRyYWNraW5nIHN5c2ZzIHN5bWJvbGljIGxpbmtzIHNldHVwL3JlbW92YWwuXG4gICogQGxvb3BiYWNrX2VuYWJsZWQ6IFNldCB0cnVlIGlmIHRoaXMgUEhZIGhhcyBiZWVuIGxvb3BiYWNrZWQgc3VjY2Vzc2Z1bGx5LlxuICAqIEBkb3duc2hpZnRlZF9yYXRlOiBTZXQgdHJ1ZSBpZiBsaW5rIHNwZWVkIGhhcyBiZWVuIGRvd25zaGlmdGVkLlxuQEAgLTY4NSw2ICYjNDM7NzAzLDcgQEAgc3RydWN0IHBoeV9kZXZpY2Uge1xuIFx0dW5zaWduZWQgaGFzX2ZpeHVwczoxO1xuIFx0dW5zaWduZWQgc3VzcGVuZGVkOjE7XG4gXHR1bnNpZ25lZCBzdXNwZW5kZWRfYnlfbWRpb19idXM6MTtcbiYjNDM7XHR1bnNpZ25lZCBtZGlvX2J1c19ub3RpZmllZDoxO1xuIFx0dW5zaWduZWQgc3lzZnNfbGlua3M6MTtcbiBcdHVuc2lnbmVkIGxvb3BiYWNrX2VuYWJsZWQ6MTtcbiBcdHVuc2lnbmVkIGRvd25zaGlmdGVkX3JhdGU6MTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAgYW5kIFJUTDgzOTAgTURJTyBjb250cm9sbGVycyBpbiB0aGUgbWRpby1yZWFsdGVrLXJ0bDkzMDAgcGxhdGZvcm0gZHJpdmVyLCBhbmQgYWRkcyBub3RpZnlfcGh5X2F0dGFjaC9ub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSB3aGljaCBhcmUgb25seSB1c2VkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBTaW5jZSB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBSZWFsdGVrIFNvQ3MsIGl0IGNhbm5vdCBiZSBwcm9iZWQgaW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChsaWtlIFFFTVUgb3IgR0NFKSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIHN1cHBvcnQuIFRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gY2hhbmdlcyBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgYmVjYXVzZSBubyByZWFjaGFibGUgZHJpdmVyIHNldHMgdGhlc2UgY2FsbGJhY2tzLiBUaHVzLCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMTBiMjJmODQ1ZDhmYWQ5NGEwNmU1OWMzN2YyY2UwOGY2NDhhYzg1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMjMgMDA6NTA6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKaW5kZXggMjcxZTA1YmFlOWM1NzQuLjY3ZTBiMjNhODQ3MGVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCkBAIC00LDcgJiM0Mzs0LDcgQEAKICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjCiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKIAotdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXIKJiM0Mzt0aXRsZTogUmVhbHRlayBPdHRvIFN3aXRjaGVzIEV0aGVybmV0IE1ESU8gQ29udHJvbGxlcgogCiBtYWludGFpbmVyczoKICAgLSBDaHJpcyBQYWNraGFtICZsdDtjaHJpcy5wYWNraGFtQGFsbGllZHRlbGVzaXMuY28ubnomZ3Q7CkBAIC0xMiw2ICYjNDM7MTIsMTYgQEAgbWFpbnRhaW5lcnM6CiBwcm9wZXJ0aWVzOgogICBjb21wYXRpYmxlOgogICAgIG9uZU9mOgomIzQzOyAgICAgIC0gaXRlbXM6CiYjNDM7ICAgICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW8KJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW8KJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzgwLW1kaW8KJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5Mi1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvCiAgICAgICAtIGl0ZW1zOgogICAgICAgICAgIC0gZW51bToKICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW8KQEAgLTI0LDYgJiM0MzszNCw4IEBAIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW8KICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpbwogICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvCiYjNDM7ICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW8KICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvCiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpbwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKaW5kZXggYWZkNTJhMWNkN2Y4MzEuLmFlYmM3NmFlNWU1NjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCkBAIC0zNSw2ICYjNDM7MzUsNzQgQEAKICAqCiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvbgogICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LgomIzQzOyAqCiYjNDM7ICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0CiYjNDM7ICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy4KJiM0MzsgKgomIzQzOyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/CiYjNDM7ICoKJiM0MzsgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZgomIzQzOyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvcgomIzQzOyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlCiYjNDM7ICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOgomIzQzOyAqCiYjNDM7ICoJUlRMODM4MAkJCQlSVEw4MzkzCiYjNDM7ICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqCXBoeV93cml0ZShwaHksIDMxLCAweDApOwlwaHlfcmVhZChwaHksIDApOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDEzLCAweDcpOwlwaHlfcmVhZChwaHksIDEpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDE0LCAweDNjKTsJcGh5X3JlYWQocGh5LCA0KTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTsJcGh5X3JlYWQocGh5LCA1KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDE0KTsJCXBoeV9yZWFkKHBoeSwgNik7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CXBoeV9yZWFkKHBoeSwgOSk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpOwlwaHlfcmVhZChwaHksIDEwKTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTsJcGh5X3JlYWQocGh5LCAxNSk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNCk7CQlwaHlfd3JpdGUocGh5LCAxMywgMHg3KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDkpOwkJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMTApOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNSk7CQlwaHlfcmVhZChwaHksIDE0KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDApOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxKTsJCXBoeV93cml0ZShwaHksIDE0LCAweDNkKTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDQpOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCA1KTsJCXBoeV9yZWFkKHBoeSwgMTQpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgNik7CiYjNDM7ICoKJiM0MzsgKiBGcm9tIHRoZSBhYm92ZSBzbmlwcGV0cyBpdCBwb2xscyBNRElPX0FOX0VFRV9BRFYgYW5kIE1ESU9fQU5fRUVFX0xQQUJMRSB2aWEgQzQ1IG92ZXIgQzIyLiBBcwomIzQzOyAqIG9mIG5vdyBpdCBpcyB1bmNsZWFyIGhvdyB0aGUgaGFyZHdhcmUgZGVjaWRlcyBpZiBhIFBIWSBzdXBwb3J0cyB0aGVzZSByZWdpc3RlcnMuIEFmdGVyIG9uZSBQSFkKJiM0MzsgKiBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIEJhc2ljYWxseSB0aGUgYnVzIGlzIGFsd2F5cyBidXN5CiYjNDM7ICogYW5kIHRoZSBNQUMgc3RhdHVzIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLgomIzQzOyAqCiYjNDM7ICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz8KJiM0MzsgKgomIzQzOyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXIKJiM0MzsgKiBzZXRzIGEgJiMzNDtydW4gY29tbWFuZCBub3cmIzM0OyBiaXQuIEJldHdlZW4gdHdvIHBvbGxpbmcgc2VxdWVuY2VzIGZvciBkaWZmZXJlbnQgUEhZcyB0aGUgaGFyZHdhcmUKJiM0MzsgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlcwomIzQzOyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgcmVhZCBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6CiYjNDM7ICoKJiM0MzsgKglSVEw4MzgwCQkJCVJUTDgzOTMKJiM0MzsgKgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpOwlwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7CXBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpOwomIzQzOyAqCQkJCQlwaHlfd3JpdGUocGh5LCAzMSwgMCk7CiYjNDM7ICoKJiM0MzsgKiBXaGF0IGRvZXMgdGhpcyBtZWFuPwomIzQzOyAqCiYjNDM7ICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZQomIzQzOyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXQKJiM0MzsgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS4KJiM0MzsgKgomIzQzOyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay4KJiM0MzsgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLgomIzQzOyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGwKJiM0MzsgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW0KJiM0MzsgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyAmIzM0O21hZ2ljYWxseSYjMzQ7IGluIHRoZSBiYWNrZ3JvdW5kLgomIzQzOyAqIC0gQSBDNDUgb3ZlciBDMjIga2VybmVsIGFjY2VzcyBzZXF1ZW5jZSBpcyBtb3N0IGxpa2VseSB0byBmYWlsIGJlY2F1c2UgY2hhbmNlcyBhcmUgaGlnaCB0aGF0CiYjNDM7ICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi4KJiM0MzsgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhbgomIzQzOyAqICAgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgd2l0aG91dCBkZXZpYXRpb24uCiYjNDM7ICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS4KJiM0MzsgKgomIzQzOyAqIENvbmNsdXNpb246IFRoZSBSZWFsdGVrIE1ESU8gYnVzIGRyaXZlciBQSFkgYWNjZXNzIG11c3Qga25vdyBhbmQgaGFuZGxlIGFueSBpbnRlcmZlcmVuY2UgdGhhdAomIzQzOyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy4KICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKQEAgLTUwLDYgJiM0MzsxMTgsNTAgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwogCiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9CVVNFUwkJCTEKJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTCQkJNDA5NgomIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFMJCQkyOAomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfR0xCX0NUUkwJCQkweGExMDAKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wCQkweGExYjgKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xCQkweGExYmMKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUgkJR0VOTUFTSygyNCwgMjApCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFCQlHRU5NQVNLKDE5LCAxNSkKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UJCUdFTk1BU0soMTQsIDMpCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEUJCUJJVCgyKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQUQJCQkwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUJCUJJVCgxKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyCQkwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTAkJCTAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi8KJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yCQkweGExYzAKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMJCTB4YTFjNAomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMCQkJMHhhMTdjCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTAkJMHhhMWM4CiYjNDM7CiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9CVVNFUwkJCTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTCQkJODE5MgomIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFMJCQk1MgomIzQzOyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMCQkweDAzZWMKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMCQkweDAzZGMKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUgkJR0VOTUFTSyg5LCA1KQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRQkJR0VOTUFTSygyMiwgMTApCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRkFJTAkJCUJJVCgxKQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFCQlCSVQoMykKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFECQkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1CQlCSVQoMikKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMgkJMAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQ1RSTAkJCTB4MDNlMAomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFCQlHRU5NQVNLKDgsIDApCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwJCTB4MDNmMAomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQQkJR0VOTUFTSygzMSwgMTYpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQQkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTAkJCTB4MDNmNAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVwkJMHgwM2U0CiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSAkJMHgwM2U4CiYjNDM7I2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTAkJMHgwM2ZjCiYjNDM7CiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTCQkJNAogI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFUwkJCTQwOTYKICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFMJCQkyOApAQCAtNzAsNiAmIzQzOzE4Miw3IEBACiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQogI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQQkJCUdFTk1BU0soMTUsIDApCiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zCQkweGNiN2MKJiM0MzsjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTAkJCTB4Y2E5MAogI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTAkJMHhjYjgwCiAKICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVMJCQk0CkBAIC05NSwxMSAmIzQzOzIwOCwxMyBAQAogI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDE1LCAwKQogI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkwJMHgwYzE4CiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfQUREUl9DVFJMCQkweDBjNzQKJiM0MzsjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMCQkweDBjY2MKICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTAkJMHgwYzljCiAKICNkZWZpbmUgUEhZX0NUUkxfQ01ECQkJCUJJVCgwKQogI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQUQJCQlHRU5NQVNLKDIwLCAxNikKICNkZWZpbmUgUEhZX0NUUkxfTU1EX1JFRwkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSBQSFlfVkVORE9SX1JFQUxURUsJCQkweDAwMWNjODAwCiAKICNkZWZpbmUgTUFQX0FERFJTX1BFUl9SRUcJCQk2CiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSCQkJNQpAQCAtMTI1LDcgJiM0MzsyNDAsOSBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2IHsKIAljb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvICppbmZvOwogCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdCBIVyBhY2Nlc3MgKi8KJiM0MzsJREVDTEFSRV9CSVRNQVAocGh5X3BvbGwsIE1BWF9QT1JUUyk7CiAJREVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7CiYjNDM7CXUxNiBwYWdlW01BWF9QT1JUU107CiAJdTggc21pX2J1c1tNQVhfUE9SVFNdOwogCXU4IHNtaV9hZGRyW01BWF9QT1JUU107CiAJYm9vbCBzbWlfYnVzX2lzX2M0NVtNQVhfU01JX0JVU1NFU107CkBAIC0xNDIsNiAmIzQzOzI1OSw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gewogCXU4IG51bV9idXNlczsKIAl1OCBudW1fcG9ydHM7CiAJdTE2IG51bV9wYWdlczsKJiM0MzsJdTMyIHBvbGxfY3RybDsKIAlpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTsKIAlpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpOwogCWludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTsKQEAgLTE3Nyw2ICYjNDM7Mjk1LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpCiAJcmV0dXJuIGNoYW4tJmd0O3ByaXY7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCBpbnQgcG9ydCwgYm9vbCBhY3RpdmUpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBwcml2LSZndDtpbmZvLSZndDtwb2xsX2N0cmwgJiM0MzsgKHBvcnQgLyAzMikgKiA0LAomIzQzOwkJCQkgIEJJVChwb3J0ICUgMzIpLCBhY3RpdmUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJCQkgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpCiB7CkBAIC0xODUsOSAmIzQzOzMxMSw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJdTMyIGNtZHN0YXRlOwogCWludCByZXQ7CiAKLQkvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqLwomIzQzOwkvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqLwogCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LSZndDtyZWdtYXAsIGluZm8tJmd0O2NtZF9yZWdzLmMyMl9kYXRhLAotCQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7CiYjNDM7CQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIyNyw3ICYjNDM7MzUzLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCwKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LSZndDtyZWdtYXAsIGluZm8tJmd0O2NtZF9yZWdzLmMyMl9kYXRhLAotCQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7CiYjNDM7CQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTI2NCwxMyAmIzQzOzM5MCwxMjMgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLAogCXJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LSZndDtpbmZvLSZndDtjbWRfd3JpdGUsIGNtZF9kYXRhKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSwKJiM0MzsJCQkJICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAomIzQzOwkJLnBvcnRfbWFza19sb3cJPSBCSVQocG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmM0NV9kYXRhCT0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhLAomIzQzOwkJCQkgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzQ1X2RhdGEJPSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKJiM0MzsJCS5wb3J0X21hc2tfbG93CT0gQklUKHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiYjNDM7CQkuZXh0X3BhZ2UJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSwKJiM0MzsJCQkJICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmV4dF9wYWdlCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKJiM0MzsJCS5wb3J0X21hc2tfaGlnaAk9ICh1MzIpKEJJVF9VTEwocG9ydCkgJmd0OyZndDsgMzIpLAomIzQzOwkJLnBvcnRfbWFza19sb3cJPSAodTMyKShCSVRfVUxMKHBvcnQpKSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzQ1X2RhdGEJPSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsICZhbXA7Y21kX2RhdGEsCiYjNDM7CQkJCSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsCiYjNDM7CQkJCSAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jNDVfZGF0YQk9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAomIzQzOwkJLnBvcnRfbWFza19oaWdoCT0gKHUzMikoQklUX1VMTChwb3J0KSAmZ3Q7Jmd0OyAzMiksCiYjNDM7CQkucG9ydF9tYXNrX2xvdwk9ICh1MzIpKEJJVF9VTEwocG9ydCkpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKIHsKIAlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAogCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAogCX07CiAKQEAgLTI4NCw3ICYjNDM7NTIwLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLAogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAogCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKIAkJLnBvcnRfbWFza19sb3cJPSBCSVQocG9ydCksCiAJfTsKQEAgLTMyNCw3ICYjNDM7NTYwLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKIAkJLmJyb2FkY2FzdAk9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSwKIAkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKLQkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKIAl9OwogCiAJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhLApAQCAtMzM2LDcgJiM0Mzs1NzIsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sCiAJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKIAkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKLQkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKIAkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiAJCS5wb3J0X21hc2tfaGlnaAk9ICh1MzIpKEJJVF9VTEwocG9ydCkgJmd0OyZndDsgMzIpLAogCQkucG9ydF9tYXNrX2xvdwk9ICh1MzIpKEJJVF9VTEwocG9ydCkpLApAQCAtMzgyLDggJiM0Mzs2MTgsMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pCiAJaWYgKHBvcnQgJmx0OyAwKQogCQlyZXR1cm4gcG9ydDsKIAotCXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKQomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykgewomIzQzOwkJaWYgKHJlZ251bSA9PSAzMSkKJiM0MzsJCQlyZXR1cm4gcHJpdi0mZ3Q7cGFnZVtwb3J0XTsKJiM0MzsKIAkJcmV0ID0gcHJpdi0mZ3Q7aW5mby0mZ3Q7cmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sICZhbXA7dmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7CiB9CkBAIC0zOTcsOCAmIzQzOzYzNywxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNgogCWlmIChwb3J0ICZsdDsgMCkKIAkJcmV0dXJuIHBvcnQ7CiAKLQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCWlmIChyZWdudW0gPT0gMzEpIHsKJiM0MzsJCQlpZiAodmFsdWUgJmd0Oz0gUkFXX1BBR0UocHJpdikpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJCXByaXYtJmd0O3BhZ2VbcG9ydF0gPSB2YWx1ZTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKIAkJcmV0ID0gcHJpdi0mZ3Q7aW5mby0mZ3Q7d3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7CiYjNDM7CX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC00NzEsNiAmIzQzOzcyMCwxNSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFBIWV9QQVRDSF9ET05FIGVuYWJsZXMgUEhZIGNvbnRyb2wgdmlhIFNvQy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgUEhZIGFjY2VzcywgaW5jbHVkaW5nCiYjNDM7CSAqIHBhdGNoaW5nIGFuZCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIFBIWXMgYXJlIHByb2JlZC4KJiM0MzsJICovCiYjNDM7CXJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKIHsKIAl1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7CkBAIC01MDcsNiAmIzQzOzc2NSw1NCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi0mZ3Q7bWRpby5idXMpOwomIzQzOwlpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LSZndDttZGlvLmJ1cywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBvcnQ7CiYjNDM7CiYjNDM7CWlmICghcHJpdi0mZ3Q7c21pX2J1c19pc19jNDVbY2hhbi0mZ3Q7bWRpb19idXNdICZhbXA7JmFtcDsKJiM0MzsJICAgICghcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi0mZ3Q7cGh5X2lkLCBQSFlfVkVORE9SX1JFQUxURUspKSkgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7T25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCWlmICh0ZXN0X2JpdChwb3J0LCBwcml2LSZndDtwaHlfcG9sbCkpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQlyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgdHJ1ZSk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlfX3NldF9iaXQocG9ydCwgcHJpdi0mZ3Q7cGh5X3BvbGwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi0mZ3Q7bWRpby5idXMpOwomIzQzOwlpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LSZndDttZGlvLmJ1cywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykgewomIzQzOwkJcmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCV9fY2xlYXJfYml0KHBvcnQsIHByaXYtJmd0O3BoeV9wb2xsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZGV2X2VycihidXMtJmd0O3BhcmVudCwgJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBwb2xsaW5nIGZvciBwb3J0ICVkXG4mIzM0OywgcG9ydCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsCiAJCQkJIHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKQogewpAQCAtNTM2LDYgJiM0Mzs4NDIsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdgogCQlidXMtJmd0O3dyaXRlID0gb3R0b19lbWRpb193cml0ZV9jMjI7CiAJfQogCWJ1cy0mZ3Q7cGFyZW50ID0gZGV2OwomIzQzOwlidXMtJmd0O25vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDsKJiM0MzsJYnVzLSZndDtub3RpZnlfcGh5X2RldGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2g7CiYjNDM7CiAJY2hhbiA9IGJ1cy0mZ3Q7cHJpdjsKIAljaGFuLSZndDttZGlvX2J1cyA9IG1kaW9fYnVzOwogCWNoYW4tJmd0O3ByaXYgPSBwcml2OwpAQCAtNjUyLDYgJiM0Mzs5NjEsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgcHJpdi0mZ3Q7aW5mby0mZ3Q7bnVtX3BvcnRzOyBwb3J0JiM0MzsmIzQzOykgewomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCQllcnIgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwZGV2LSZndDtkZXY7CkBAIC02NzEsNiAmIzQzOzk5NSwxMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpZiAoSVNfRVJSKHByaXYtJmd0O3JlZ21hcCkpCiAJCXJldHVybiBQVFJfRVJSKHByaXYtJmd0O3JlZ21hcCk7CiAKJiM0MzsJZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwogCiAJZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTsKQEAgLTY5Niw2ICYjNDM7MTAyNCw1MSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0gewomIzQzOwkuYWRkcl9tYXBfYmFzZSA9IFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMLAomIzQzOwkuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsCiYjNDM7CS5jbWRfcmVhZCA9IFJUTDgzODBfUEhZX0NUUkxfUkVBRCwKJiM0MzsJLmNtZF93cml0ZSA9IFJUTDgzODBfUEhZX0NUUkxfV1JJVEUsCiYjNDM7CS5jbWRfcmVncyA9IHsKJiM0MzsJCS5jMjJfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xLAomIzQzOwkJLmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsCiYjNDM7CQkuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLAomIzQzOwkJLnBvcnRfbWFza19sb3cgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMCwKJiM0MzsJfSwKJiM0MzsJLm51bV9idXNlcyA9IFJUTDgzODBfTlVNX0JVU0VTLAomIzQzOwkubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsCiYjNDM7CS5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDgzODBfU01JX1BPTExfQ1RSTCwKJiM0MzsJLnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlciwKJiM0MzsJLnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLAomIzQzOwkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUsCiYjNDM7CS53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyLAomIzQzOwkud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0gewomIzQzOwkuY21kX2ZhaWwgPSBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwsCiYjNDM7CS5jbWRfcmVhZCA9IFJUTDgzOTBfUEhZX0NUUkxfUkVBRCwKJiM0MzsJLmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsCiYjNDM7CS5jbWRfcmVncyA9IHsKJiM0MzsJCS5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsCiYjNDM7CQkuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCwKJiM0MzsJCS5jNDVfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMLAomIzQzOwkJLmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCwKJiM0MzsJCS5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLAomIzQzOwkJLnBvcnRfbWFza19sb3cgPSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XLAomIzQzOwkJLnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsCiYjNDM7CX0sCiYjNDM7CS5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUywKJiM0MzsJLm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLAomIzQzOwkubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCwKJiM0MzsJLnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLAomIzQzOwkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsCiYjNDM7CS53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLAomIzQzOwkud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7CiAJLmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCwKIAkuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsCkBAIC03MTEsNiAmIzQzOzEwODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHsKIAkubnVtX2J1c2VzID0gUlRMOTMwMF9OVU1fQlVTRVMsCiAJLm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLAogCS5udW1fcGFnZXMgPSBSVEw5MzAwX05VTV9QQUdFUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCwKIAkuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLAogCS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMiwKIAkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsCkBAIC03MzYsNiAmIzQzOzExMTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHsKIAkubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsCiAJLm51bV9wYWdlcyA9IFJUTDkzMTBfTlVNX1BBR0VTLAogCS5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLAogCS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsCiAJLnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLAogCS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSwKQEAgLTc0NCw2ICYjNDM7MTExOSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0gewogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxydGw4MzgwLW1kaW8mIzM0OywgLmRhdGEgPSAmYW1wO290dG9fZW1kaW9fODM4MF9pbmZvIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsODM5MS1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LAogCXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsOTMwMS1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzkzMDBfaW5mbyB9LAogCXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsOTMxMS1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LAogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCA5NGIyZTg1ZTAwYTM3OS4uYTYyYzJmZjZjMmFhYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMTg3Niw2ICYjNDM7MTg3NiwxMyBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogCiYjNDM7CWlmIChwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaCkgewomIzQzOwkJZXJyID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJvcjsKJiM0MzsJCXBoeWRldi0mZ3Q7bWRpb19idXNfbm90aWZpZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJcGh5X3Jlc3VtZShwaHlkZXYpOwogCiAJLyoqCkBAIC0xOTE5LDYgJiM0MzsxOTI2LDEwIEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCXN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMOwogCXN0cnVjdCBtaWlfYnVzICpidXM7CiAKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpb19idXNfbm90aWZpZWQgJmFtcDsmYW1wOyBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2RldGFjaCkKJiM0MzsJCXBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7CiYjNDM7CXBoeWRldi0mZ3Q7bWRpb19idXNfbm90aWZpZWQgPSBmYWxzZTsKJiM0MzsKIAlpZiAocGh5ZGV2LSZndDtkZXZsaW5rKSB7CiAJCWRldmljZV9saW5rX2RlbChwaHlkZXYtJmd0O2RldmxpbmspOwogCQlwaHlkZXYtJmd0O2RldmxpbmsgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggMTEwOTJjMzE3NWIzZGUuLjJkMzBlMDg3YTIzMzczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTM3Niw2ICYjNDM7Mzc2LDIzIEBAIHN0cnVjdCBtaWlfYnVzIHsKIAkJCSBpbnQgcmVnbnVtLCB1MTYgdmFsKTsKIAkvKiogQHJlc2V0OiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGJ1cyAqLwogCWludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTsKJiM0MzsJLyoqCiYjNDM7CSAqIEBub3RpZnlfcGh5X2F0dGFjaDogUGVyZm9ybSBwb3N0LWF0dGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXMKJiM0MzsJICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2F0dGFjaF9kaXJlY3QoKSByaWdodCBhZnRlciBwaHlfaW5pdF9odygpCiYjNDM7CSAqICAgYW5kIGJlZm9yZSBwaHlfcmVzdW1lKCkuIEF0IHRoaXMgcG9pbnQsIHRoZSBQSFkgaXMgc3RpbGwKJiM0MzsJICogICBzdXNwZW5kZWQsIGFuZCBAcGh5ZGV2LSZndDthdHRhY2hlZF9kZXYgbWF5IGJlIE5VTEwgKGUuZy4gZm9yCiYjNDM7CSAqICAgc3RhbmRhbG9uZSBQSFlzKS4gUnVucyBpbiBwcm9jZXNzIGNvbnRleHQgYW5kIG1heSBzbGVlcC4gUmV0dXJuCiYjNDM7CSAqICAgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZSAod2hpY2ggYWJvcnRzIHRoZQomIzQzOwkgKiAgIGF0dGFjaCBzZXF1ZW5jZSkuCiYjNDM7CSAqLwomIzQzOwlpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiYjNDM7CS8qKgomIzQzOwkgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXMKJiM0MzsJICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2RldGFjaCgpIGJlZm9yZSBkZXZpY2UgbGlua3MgYW5kIHJlc291cmNlcwomIzQzOwkgKiAgIGFyZSBjbGVhbmVkIHVwLiBSdW5zIGluIHByb2Nlc3MgY29udGV4dCBhbmQgbWF5IHNsZWVwLiBPbmx5CiYjNDM7CSAqICAgaW52b2tlZCBpZiBAbm90aWZ5X3BoeV9hdHRhY2ggd2FzIHByZXZpb3VzbHkgY2FsbGVkIGFuZCBzdWNjZWVkZWQuCiYjNDM7CSAqLwomIzQzOwl2b2lkICgqbm90aWZ5X3BoeV9kZXRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogCiAJLyoqIEBzdGF0czogU3RhdGlzdGljIGNvdW50ZXJzIHBlciBkZXZpY2Ugb24gdGhlIGJ1cyAqLwogCXN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdOwpAQCAtNTc0LDYgJiM0Mzs1OTEsNyBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7CiAgKiBAaGFzX2ZpeHVwczogU2V0IHRvIHRydWUgaWYgdGhpcyBQSFkgaGFzIGZpeHVwcy9xdWlya3MuCiAgKiBAc3VzcGVuZGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGlzIFBIWSBoYXMgYmVlbiBzdXNwZW5kZWQgc3VjY2Vzc2Z1bGx5LgogICogQHN1c3BlbmRlZF9ieV9tZGlvX2J1czogU2V0IHRvIHRydWUgaWYgdGhpcyBQSFkgd2FzIHN1c3BlbmRlZCBieSBNRElPIGJ1cy4KJiM0MzsgKiBAbWRpb19idXNfbm90aWZpZWQ6IFNldCB0byB0cnVlIGlmIHBvc3QtYXR0YWNoIGJ1cyBub3RpZmljYXRvbiBzdWNjZWVkZWQuCiAgKiBAc3lzZnNfbGlua3M6IEludGVybmFsIGJvb2xlYW4gdHJhY2tpbmcgc3lzZnMgc3ltYm9saWMgbGlua3Mgc2V0dXAvcmVtb3ZhbC4KICAqIEBsb29wYmFja19lbmFibGVkOiBTZXQgdHJ1ZSBpZiB0aGlzIFBIWSBoYXMgYmVlbiBsb29wYmFja2VkIHN1Y2Nlc3NmdWxseS4KICAqIEBkb3duc2hpZnRlZF9yYXRlOiBTZXQgdHJ1ZSBpZiBsaW5rIHNwZWVkIGhhcyBiZWVuIGRvd25zaGlmdGVkLgpAQCAtNjg1LDYgJiM0Mzs3MDMsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7CiAJdW5zaWduZWQgaGFzX2ZpeHVwczoxOwogCXVuc2lnbmVkIHN1c3BlbmRlZDoxOwogCXVuc2lnbmVkIHN1c3BlbmRlZF9ieV9tZGlvX2J1czoxOwomIzQzOwl1bnNpZ25lZCBtZGlvX2J1c19ub3RpZmllZDoxOwogCXVuc2lnbmVkIHN5c2ZzX2xpbmtzOjE7CiAJdW5zaWduZWQgbG9vcGJhY2tfZW5hYmxlZDoxOwogCXVuc2lnbmVkIGRvd25zaGlmdGVkX3JhdGU6MTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NzEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBSZWFsdGVrIFJUTDgzODAvUlRMODM5MCBNRElPIENvbnRyb2xsZXIgQ29kZSoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sYCwgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L3BoeS5oYC4gVGhpcyBpcyBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzLCB3aGljaCBpcyBmaW5lLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCB0ZXN0IGVudmlyb25tZW50LCBsaWtlIFFFTVUgb3IgR0NFLiBJdCYjMzk7cyBhZGRpbmcgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGBtaWlfYnVzYCBzdHJ1Y3QgYW5kIGNhbGxpbmcgdGhlbSBmcm9tIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYC4gVGhlc2UgY2FsbGJhY2tzIGFyZSBzcGVjaWZpYyB0byB0aGUgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGRyaXZlciwgZW5hYmxpbmcvZGlzYWJsaW5nIGhhcmR3YXJlIHBvbGxpbmcuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIEkgZXZlbiBnZXQgdGhlIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBkcml2ZXIgdG8gcHJvYmU/IEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBzbyBpdCBuZWVkcyBhIHBsYXRmb3JtIGRldmljZSBpbnN0YW5jZS4gVGhlc2UgdXN1YWxseSBjb21lIGZyb20gRGV2aWNlIFRyZWUgKERUKSBvdmVybGF5cywgYnV0IEkga25vdyBzeXprYWxsZXIgZG9lc24mIzM5O3QgZ2VuZXJhbGx5IGxvYWQgRFQgb3ZlcmxheXMgdW5sZXNzIHNwZWNpZmljYWxseSBjb25maWd1cmVkIGZvciBpdCwgYW5kIEkgaGF2ZW4mIzM5O3QgY29uZmlndXJlZCBmb3IgaXQuIFN5emthbGxlciB1c3VhbGx5IHJlbGllcyBvbiBhIGZldyB0ZWNobmlxdWVzIGZvciBkZXZpY2UgY3JlYXRpb24uIERvZXMgaXQgaGF2ZSBhIHNwZWNpYWwgc3lzY2FsbCBsaWtlIGBzeXpfZGV2X2NyZWF0ZWAsIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAgb3Igc2ltaWxhcj8gTm8sIEkgZG9uJiMzOTt0IHRoaW5rIGl0IGRvZXMsIG9yIGF0IGxlYXN0IG5vdCBpbiBhIGdlbmVyaWMgd2F5LiBJIGFtIHByZXR0eSBzdXJlIGl0IHVzZXMgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAgb3IgYHN5el9pbml0X25ldF9zb2NrZXRgIGZvciBjcmVhdGluZyBwbGF0Zm9ybSBkZXZpY2VzLCBpZiBhIHNwZWNpZmljIHN1YnN5c3RlbSBhbGxvd3MgaXQuCgpBaCwgYnV0IHdhaXQuLi4gYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIGFyZSBjb3JlIFBIWSBmdW5jdGlvbnMuICpUaG9zZSogYXJlIGFsd2F5cyByZWFjaGFibGUgaWYgKmFueSogUEhZIGlzIGF0dGFjaGVkIG9yIGRldGFjaGVkLiBUaGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRob3NlIHRvIGNhbGwgdGhlIG5ldyBjYWxsYmFja3MsIGJ1dCBvbmx5IGlmIHRoZXkmIzM5O3JlIHNldC4gU28sIHRoZSBuZXcgY29kZSBwYXRoIHdpdGhpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIG9yIGBwaHlfZGV0YWNoYCAqaXMqIHJlYWNoYWJsZSBpZiAqYW55KiBQSFkgaXMgYXR0YWNoZWQsIGJ1dCBvbmx5IGRvZXMgc29tZXRoaW5nIGlmIHRoZSBgbm90aWZ5X3BoeV9hdHRhY2hgIG9yIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIGFyZSBzZXQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZHJpdmVycyBzZXR0aW5nIHRob3NlIGNhbGxiYWNrcz8gTm8sIHRoZSBwYXRjaCBvbmx5IHNldHMgdGhlbSBpbiB0aGUgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGRyaXZlci4KClNvIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhlIHByb2JlIGZvciBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgYmUgdHJpZ2dlcmVkPyBUaGUgZHJpdmVyIG1hdGNoZXMgYCYjMzQ7cmVhbHRlayxydGw4MzgwLW1kaW8mIzM0O2AsIGAmIzM0O3JlYWx0ZWsscnRsODM5MS1tZGlvJiMzNDtgLCBgJiMzNDtyZWFsdGVrLHJ0bDkzMDEtbWRpbyYjMzQ7YCwgYW5kIGAmIzM0O3JlYWx0ZWsscnRsOTMxMS1tZGlvJiMzNDtgLiBVbmxlc3Mgd2UgYXJlIHJ1bm5pbmcgb24gYSBSZWFsdGVrIFNvQyBvciBtYW5hZ2UgdG8gY3JlYXRlIHRoZSBwbGF0Zm9ybSBkZXZpY2UsIGl0cyBwcm9iZSBmdW5jdGlvbiB3b24mIzM5O3QgYmUgY2FsbGVkLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgZ2VuZXJhbGx5IGluamVjdCBhcmJpdHJhcnkgRFQgbm9kZXMsIHNvIGl0JiMzOTtzIHVubGlrZWx5IGl0JiMzOTtzIGdlbmVyYXRpbmcgdGhlIERUIG5vZGUgZm9yIHRoaXMgY29udHJvbGxlci4KCkNhbiBJIGNyZWF0ZSB0aGUgcGxhdGZvcm0gZGV2aWNlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcz8gTm8sIHRoYXQmIzM5O3Mgbm90IHBvc3NpYmxlLiBJIGtub3cgdGhlcmUmIzM5O3MgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAsIGJ1dCB0aGF0JiMzOTtzIGtlcm5lbC1pbnRlcm5hbC4KClRoZXJlZm9yZSwgc2luY2UgdGhlIGRyaXZlciBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgU29DcywgYW5kIGl0IGlzIGhpZ2hseSB1bmxpa2VseSB0byBwcm9iZSBpbiBhIGdlbmVyaWMgUUVNVS9HQ0UgZW52aXJvbm1lbnQsIEkgZG9uJiMzOTt0IHRoaW5rIEkgY2FuIHRyaWdnZXIgdGhlIG5ldyBjb2RlLiBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZywgdGhvdWdoLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJJiMzOTtsbCBsb29rIGF0IGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIGZvciBgTURJT19SRUFMVEVLX1JUTDkzMDBgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBpdCYjMzk7cyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0xNjY9Y29uZmlnIE1ESU9fSVBRODA2NFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzMtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTc0OmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3NS1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MDEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBNRElPX1JFQUxURUtfUlRMOTMwMGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgbW9kdWxlLiBBcyBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhcmNoaXRlY3R1cmUsIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiBpdCByZWxpZXMgb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBkZWJ1Z2dpbmcsIHBvcnRpbmcsIG9yIGV2ZW4ganVzdCB1bmRlcnN0YW5kaW5nIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxheWVycy4uLiBkb2VzIGl0IHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzPyBLZXJuZWwgZHJpdmVycz8gUG9zc2libHkgbG93LWxldmVsIHJlZ2lzdGVyIGRlZmluaXRpb25zPyBBbmQgd2hhdCBhYm91dCBwb3RlbnRpYWwgdXNlci1zcGFjZSBjb21wb25lbnRzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXM/IEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIG1hcCBvZiBhbGwgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0IG1ha2UgdXAgdGhpcyBtb2R1bGUgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTE2Nj1jb25maWcgTURJT19JUFE4MDY0XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3My1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNzQ6Y29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTc1LVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk1OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBJIGhhdmUgYSBzdHJvbmcgaHVuY2ggdGhhdCB0aGUgYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2AgZmlsZSBpcyB3aGVyZSB0byBzdGFydC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDE3NC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgYXJlYSBmb3IgbWUgdG8gYmVnaW4gbXkgZXhwbG9yYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zIG9yIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBNRElPIGRyaXZlciBjb25maWd1cmF0aW9uIHRoZXJlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBiYXNlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBwcm9jZWVkLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBpbmZvcm1hdGlvbiBJIGFtIHNlYXJjaGluZyBmb3Igd2lsbCBiZSBhcm91bmQgdGhhdCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcdGhlbHBcbiAxNzE6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBuZXR3b3JrXG4gMTcyOlx0XHQgIGludGVyZmFjZSB1bml0cyBvZiB0aGUgSVBRODA2NCBTb0NcbiAxNzM6XHRcbiAxNzQ6XHRjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcbiAxNzU6XHRcdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4gMTc2Olx0XHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXG4gMTc3Olx0XHRoZWxwXG4gMTc4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgUmVhbHRla1xuIDE3OTpcdFx0ICBSVEw5MzAwIGZhbWlseSBvZiBFdGhlcm5ldCBzd2l0Y2hlcyB3aXRoIGludGVncmF0ZWQgU29DLlxuIDE4MDpcdFxuIDE4MTpcdGNvbmZpZyBNRElPX1JFR01BUFxuIDE4MjpcdFx0dHJpc3RhdGVcbiAxODM6XHRcdGhlbHBcbiAxODQ6XHRcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzaW5nIE1ESU8gZGV2aWNlcyB0aGF0IGFyZSBub3Qgc2l0dGluZyBvbiBhXG4gMTg1Olx0XHQgIHJlZ3VsYXIgTURJTyBidXMsIGJ1dCBzdGlsbCBleHBvc2VzIHRoZSBzdGFuZGFyZCA4MDIuMyByZWdpc3RlclxuIDE4NjpcdFx0ICBsYXlvdXQuIEl0JiMzOTtzIHJlZ21hcC1iYXNlZCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIG9uIGludGVncmF0ZWQsXG4gMTg3Olx0XHQgIG1lbW9yeS1tYXBwZWQgUEhZcywgU1BJIFBIWXMgYW5kIHNvIG9uLiBBIG5ldyB2aXJ0dWFsIE1ESU8gYnVzIGlzXG4gMTg4Olx0XHQgIGNyZWF0ZWQsIGFuZCBpdHMgcmVhZC93cml0ZSBvcGVyYXRpb25zIGFyZSBtYXBwZWQgdG8gdGhlIHVuZGVybHlpbmdcbiAxODk6XHRcdCAgcmVnbWFwLiBVc2VycyB3aWxsaW5nIHRvIHVzZSB0aGlzIGRyaXZlciBtdXN0IGV4cGxpY2l0bHkgc2VsZWN0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MjEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWx0ZWsgUlRMOTMwMCBEcml2ZXImIzM5O3MgQWN0aXZhdGlvbioqCgpPa2F5LCBzbyB0aGUgUmVhbHRlayBSVEw5MzAwIGRyaXZlciYjMzk7cyBhY3RpdmF0aW9uIGhpbmdlcyBvbiBlaXRoZXIgYE1BQ0hfUkVBTFRFS19SVExgIG9yLCBtb3JlIGNvbW1vbmx5LCBgQ09NUElMRV9URVNUYC4gIEV2ZW4gd2hlbiB3ZSBmb3JjZSB0aGUgaW5jbHVzaW9uIHZpYSBgQ09NUElMRV9URVNUYCwgaXQmIzM5O3Mgc3RpbGwgYSAqcGxhdGZvcm0qIGRyaXZlci4gVGhhdCYjMzk7cyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIFRoZSByZWFsIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIHRoZSBkcml2ZXIgYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCBpbiB0aGF0IHNjZW5hcmlvPyBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgLCB0byBsb29rIGZvciB0aGF0IGFsbC1pbXBvcnRhbnQgYG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJgIGNhbGwuIFRoaXMgd2lsbCBjb25maXJtIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBwbGF0Zm9ybSBhbmQgd2hldGhlciB0aGUgcHJvYmluZyBtZWNoYW5pc20gaXMgc2V0IHVwIGNvcnJlY3RseSwgcmVnYXJkbGVzcyBvZiB0aGUgYENPTVBJTEVfVEVTVGAgZmxhZyYjMzk7cyBwcmVzZW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgcGxhdGZvcm0gcmVnaXN0cmF0aW9uIG9mIHRoaXMgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0xMTMwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG90dG9fZW1kaW9fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTM3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjExMzg6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihvdHRvX2VtZGlvX2RyaXZlcik7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTEzOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5OTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgRHJpdmVyIENvZGUgaW4gYSBGdXp6aW5nIENvbnRleHQqKgoKT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgcGxhdGZvcm0gZHJpdmVyLiBUaGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhhdCBpbiBvdXIgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGxpa2UgUUVNVSB4ODZfNjQgb3IgYXJtNjQsIHVubGVzcyB3ZSBoYXZlIGEgdmVyeSBzcGVjaWZpYyBib2FyZCBtb2RlbCBjb25maWd1cmVkIHRvIGluc3RhbnRpYXRlIHRoaXMgcGFydGljdWxhciBkZXZpY2UsIG9yIGlmIHN5emthbGxlciBoYXMgYSBtZWNoYW5pc20gdG8gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgb24gdGhlIGZseSwgdGhlIGRyaXZlciYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGNhbGxlZC4gQW5kIGFzIGZhciBhcyBJIGtub3csIHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgKmdlbmVyaWMqIG1ldGhvZCB0byBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcy4gV2UgY2FuIGluamVjdCBVU0IgZGV2aWNlcyB3aXRoIGR1bW15X2hjZCBhbmQgUENJIGRldmljZXMgdGhyb3VnaCBgc3l6X3BjaV8qYCwgYnV0IG5vdCBqdXN0IGFueSBwbGF0Zm9ybSBkZXZpY2UsIHVubGVzcyB0aGVyZSYjMzk7cyBzb21lIHNwZWNpYWwgc3Vic3lzdGVtIGludGVyZmFjZSBleHBvc2VkLCBsaWtlIHdpdGggbWFjODAyMTFfaHdzaW0gb3IgbmV0ZGV2c2ltLgoKU28sIHJlYWxpc3RpY2FsbHksIHRoZSBjb2RlIHdpdGhpbiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgaXMgdW5yZWFjaGFibGUuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuCgpCdXQgd2hhdCBhYm91dCB0aGUgY2hhbmdlcyBpbiBgcGh5X2RldmljZS5jYD8gVGhvc2UgYXJlIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSSBrbm93IHRoYXQgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIGFyZSByZWFjaGFibGUsIGJ1dCB3aGF0IGFib3V0IHRoZSBuZXcgY29kZSB0aGF0JiMzOTtzIGJlZW4gYWRkZWQ/CgpgYGBjCglpZiAocGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2gpIHsKCQllcnIgPSBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpOwoJCWlmIChlcnIpCgkJCWdvdG8gZXJyb3I7CgkJcGh5ZGV2LSZndDttZGlvX2J1c19ub3RpZmllZCA9IHRydWU7Cgl9CmBgYAoKTG9va2luZyBhdCB0aGlzLCBpdCBsb29rcyBsaWtlIHRoaXMgY29kZSB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgaWYgYSBgbm90aWZ5X3BoeV9hdHRhY2hgIGZ1bmN0aW9uIHBvaW50ZXIgaXMgc2V0IG9uIHRoZSBgbWRpby5idXNgLiBCdXQsIEkmIzM5O20gcHJldHR5IGNlcnRhaW4gbm8gY3VycmVudGx5IHJlYWNoYWJsZSBkcml2ZXIgc2V0cyB0aGF0IHBvaW50ZXIuIFNvIHRoaXMgbmV3IGNvZGUgaXMgZWZmZWN0aXZlbHkgZGVhZCwgbmV2ZXIgZXhlY3V0ZWQgaW4gb3VyIGZ1enppbmcgZW52aXJvbm1lbnQuCgpIb2xkIG9uLCBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gSXMgdGhlcmUgYW55IG90aGVyIGRyaXZlciB0aGF0IEkmIzM5O20gbWlzc2luZyB0aGF0IGFjdHVhbGx5IGRvZXMgc2V0IGBub3RpZnlfcGh5X2F0dGFjaGA/IEkgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlIGFnYWluIGp1c3QgdG8gYmUgY2VydGFpbi4gTGV0IG1lIGRvIGEgcXVpY2sgc2Nhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm90aWZ5X3BoeV9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTc1Mj1zdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc2Ny1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo3Njg6c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNzY5LXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9ODE2PXN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04NDQtXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjg0NTpcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODQ2LVx0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE3NTI9aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODc4LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODc5Olx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODgwOlx0XHRlcnIgPSBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg4MS1cdFx0aWYgKGVycilcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTM2Mz1zdHJ1Y3QgbWlpX2J1cyB7XG4tLVxuaW5jbHVkZS9saW51eC9waHkuaC0zNzktXHQvKipcbmluY2x1ZGUvbGludXgvcGh5Lmg6MzgwOlx0ICogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nIGZvciBNRElPIGJ1c1xuaW5jbHVkZS9saW51eC9waHkuaC0zODEtXHQgKiAgIGRyaXZlcnMuIENhbGxlZCBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpIHJpZ2h0IGFmdGVyIHBoeV9pbml0X2h3KClcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTM4Ny1cdCAqL1xuaW5jbHVkZS9saW51eC9waHkuaDozODg6XHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG5pbmNsdWRlL2xpbnV4L3BoeS5oLTM4OS1cdC8qKlxuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMzkyLVx0ICogICBhcmUgY2xlYW5lZCB1cC4gUnVucyBpbiBwcm9jZXNzIGNvbnRleHQgYW5kIG1heSBzbGVlcC4gT25seVxuaW5jbHVkZS9saW51eC9waHkuaDozOTM6XHQgKiAgIGludm9rZWQgaWYgQG5vdGlmeV9waHlfYXR0YWNoIHdhcyBwcmV2aW91c2x5IGNhbGxlZCBhbmQgc3VjY2VlZGVkLlxuaW5jbHVkZS9saW51eC9waHkuaC0zOTQtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NjEKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gdGhlIFJlYWx0ZWsgTURJTyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtUaGlzIGxvb2tzIGxpa2UgY29kZSB0aGF0JiMzOTtzIG5vdCBnb2luZyB0byBnZXQgaGl0IGJ5IGZ1enppbmcuJiMzNDsgSXQgYXBwZWFycyB0aGF0IHRoZSBvbmx5IGRyaXZlciBzZXR0aW5nIGBub3RpZnlfcGh5X2F0dGFjaGAgaXMgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBOb3csIHRoYXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIg4oCTIFJlYWx0ZWsgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHNwZWNpZmljYWxseS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXNlIHR5cGVzIG9mIHBsYXRmb3JtIGRyaXZlcnMgYXJlIGluY3JlZGlibHkgZGlmZmljdWx0LCBpZiBub3QgaW1wb3NzaWJsZSwgdG8gaW5zdGFudGlhdGUgaW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGluZ3MgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBqdXN0IHdvbiYjMzk7dCBjdXQgaXQuIFlvdSByZWFsbHkgbmVlZCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgb3IgYSBwZXJmZWN0bHkgY3JhZnRlZCBkZXZpY2UgdHJlZS4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIENhbiB3ZSBzb21laG93IGZvcmNlIHRoaXMgZHJpdmVyIHRvIHByb2JlPyBTaW5jZSBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciwgU3l6a2FsbGVyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIGp1c3QgbWFnaWNhbGx5IHRyaWdnZXIgaXQgdW5sZXNzIGl0JiMzOTtzIHByb3Blcmx5IGluc3RhbnRpYXRlZC4gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gQ2FuIGl0IGJlIGJyb3VnaHQgdXAgdmlhIGFuIEkyQyBvciBTUEkgZGV2aWNlPyBOb3BlLiBJdCYjMzk7cyBhIHBsYXRmb3JtIGRldmljZSwgc28gaXQmIzM5O3Mgbm90IGdvaW5nIHRvIGF0dGFjaCB0byB0aG9zZSBidXNlcy4gV2hhdCBhYm91dCBhIFBDSSBkZXZpY2U/IFN0aWxsIG5vLiBBbmQgZGVmaW5pdGVseSBub3QgVVNCLiBTbyB5ZWFoLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgZHJpdmVyIGNhbiYjMzk7dCBiZSByZWFjaGVkIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LCBgV29ydGhGdXp6aW5nYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBUaGUgY29yZSBQSFkgc3Vic3lzdGVtIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2gsIGluY2x1ZGluZyB0aGUgYWRkZWQgYG5vdGlmeV9waHlfYXR0YWNoYCBjYWxsYmFja3MsIGFyZSBlZmZlY3RpdmVseSBkZWFkIGNvZGUgaW4gYSBmdXp6aW5nIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAgYW5kIFJUTDgzOTAgTURJTyBjb250cm9sbGVycyBpbiB0aGUgbWRpby1yZWFsdGVrLXJ0bDkzMDAgcGxhdGZvcm0gZHJpdmVyLCBhbmQgYWRkcyBub3RpZnlfcGh5X2F0dGFjaC9ub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSB3aGljaCBhcmUgb25seSB1c2VkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBTaW5jZSB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBSZWFsdGVrIFNvQ3MsIGl0IGNhbm5vdCBiZSBwcm9iZWQgaW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChsaWtlIFFFTVUgb3IgR0NFKSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIHN1cHBvcnQuIFRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gY2hhbmdlcyBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgYmVjYXVzZSBubyByZWFjaGFibGUgZHJpdmVyIHNldHMgdGhlc2UgY2FsbGJhY2tzLiBUaHVzLCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIGluIHRoZSBtZGlvLXJlYWx0ZWstcnRsOTMwMCBwbGF0Zm9ybSBkcml2ZXIsIGFuZCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoL25vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIHdoaWNoIGFyZSBvbmx5IHVzZWQgYnkgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIFNpbmNlIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIFJlYWx0ZWsgU29DcywgaXQgY2Fubm90IGJlIHByb2JlZCBpbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgKGxpa2UgUUVNVSBvciBHQ0UpIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgc3VwcG9ydC4gVGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBjaGFuZ2VzIGFyZSBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBiZWNhdXNlIG5vIHJlYWNoYWJsZSBkcml2ZXIgc2V0cyB0aGVzZSBjYWxsYmFja3MuIFRodXMsIHRoZSBtb2RpZmllZCBjb2RlIGNhbm5vdCBiZSBleGVjdXRlZCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDoyMS42ODgwNDgyNzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTY3NTk4NTY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAgYW5kIFJUTDgzOTAgTURJTyBjb250cm9sbGVycyBpbiB0aGUgbWRpby1yZWFsdGVrLXJ0bDkzMDAgcGxhdGZvcm0gZHJpdmVyLCBhbmQgYWRkcyBub3RpZnlfcGh5X2F0dGFjaC9ub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSB3aGljaCBhcmUgb25seSB1c2VkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBTaW5jZSB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBSZWFsdGVrIFNvQ3MsIGl0IGNhbm5vdCBiZSBwcm9iZWQgaW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChsaWtlIFFFTVUgb3IgR0NFKSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIHN1cHBvcnQuIFRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gY2hhbmdlcyBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgYmVjYXVzZSBubyByZWFjaGFibGUgZHJpdmVyIHNldHMgdGhlc2UgY2FsbGJhY2tzLiBUaHVzLCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDoyMS42ODgwNjAyNjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4Mzk2NjA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDExMGIyMmY4NDVkOGZhZDk0YTA2ZTU5YzM3ZjJjZTA4ZjY0OGFjODVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMDA6NTA6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuaW5kZXggMjcxZTA1YmFlOWM1NzQuLjY3ZTBiMjNhODQ3MGVhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbkBAIC00LDcgKzQsNyBAQFxcbiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sI1xcbiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4gXFxuLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyXFxuK3RpdGxlOiBSZWFsdGVrIE90dG8gU3dpdGNoZXMgRXRoZXJuZXQgTURJTyBDb250cm9sbGVyXFxuIFxcbiBtYWludGFpbmVyczpcXG4gICAtIENocmlzIFBhY2toYW0gXFx1MDAzY2NocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uelxcdTAwM2VcXG5AQCAtMTIsNiArMTIsMTYgQEAgbWFpbnRhaW5lcnM6XFxuIHByb3BlcnRpZXM6XFxuICAgY29tcGF0aWJsZTpcXG4gICAgIG9uZU9mOlxcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzODAtbWRpb1xcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpb1xcbiAgICAgICAtIGl0ZW1zOlxcbiAgICAgICAgICAgLSBlbnVtOlxcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXFxuQEAgLTI0LDYgKzM0LDggQEAgcHJvcGVydGllczpcXG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvXFxuICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpb1xcbiAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvXFxuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvXFxuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvXFxuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMS1tZGlvXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcXG5pbmRleCBhZmQ1MmExY2Q3ZjgzMS4uYWViYzc2YWU1ZTU2MGMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuQEAgLTM1LDYgKzM1LDc0IEBAXFxuICAqXFxuICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uXFxuICAqIHRoZSBldGhlcm5ldC1wb3J0cyBwcm9wZXJ0eS5cXG4rICpcXG4rICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0XFxuKyAqIGNvbnN0YW50bHkgc2NhbnMgdGhlIE1ESU8gYnVzIGFuZCB0aGUgYXR0YWNoZWQgUEhZcyBhbmQgdXBkYXRlcyB0aGUgTUFDIHN0YXR1cyByZWdpc3RlcnMuXFxuKyAqXFxuKyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/XFxuKyAqXFxuKyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mXFxuKyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvclxcbisgKiBlYWNoIHNldCBwb2xsaW5nIGJpdCBpdCBpc3N1ZXMgYSBzdGF0dXMgY2hlY2sgZm9yIHRoZSBQSFkuIEF0dGFjaGluZyBhIGxvZ2ljIGFuYWx5emVyIHRvIHRoZVxcbisgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6XFxuKyAqXFxuKyAqXFx0UlRMODM4MFxcdFxcdFxcdFxcdFJUTDgzOTNcXG4rICpcXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICpcXHRwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTtcXHRwaHlfcmVhZChwaHksIDApO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcdHBoeV9yZWFkKHBoeSwgMSk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xcdHBoeV9yZWFkKHBoeSwgNCk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XFx0cGh5X3JlYWQocGh5LCA1KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDE0KTtcXHRcXHRwaHlfcmVhZChwaHksIDYpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcdHBoeV9yZWFkKHBoeSwgOSk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1xcdHBoeV9yZWFkKHBoeSwgMTApO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1xcdHBoeV9yZWFkKHBoeSwgMTUpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgOSk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTApO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTUpO1xcdFxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxKTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA0KTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDUpO1xcdFxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgNik7XFxuKyAqXFxuKyAqIEZyb20gdGhlIGFib3ZlIHNuaXBwZXRzIGl0IHBvbGxzIE1ESU9fQU5fRUVFX0FEViBhbmQgTURJT19BTl9FRUVfTFBBQkxFIHZpYSBDNDUgb3ZlciBDMjIuIEFzXFxuKyAqIG9mIG5vdyBpdCBpcyB1bmNsZWFyIGhvdyB0aGUgaGFyZHdhcmUgZGVjaWRlcyBpZiBhIFBIWSBzdXBwb3J0cyB0aGVzZSByZWdpc3RlcnMuIEFmdGVyIG9uZSBQSFlcXG4rICogc3RhdHVzIGlzIHJlYWQsIHRoZSBwb2xsaW5nIGVuZ2luZSBnb2VzIG92ZXIgdG8gdGhlIG5leHQgUEhZLiBCYXNpY2FsbHkgdGhlIGJ1cyBpcyBhbHdheXMgYnVzeVxcbisgKiBhbmQgdGhlIE1BQyBzdGF0dXMgaXMgdXBkYXRlZCBpbiByZWFsLXRpbWUuXFxuKyAqXFxuKyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/XFxuKyAqXFxuKyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXJcXG4rICogc2V0cyBhIFxcXCJydW4gY29tbWFuZCBub3dcXFwiIGJpdC4gQmV0d2VlbiB0d28gcG9sbGluZyBzZXF1ZW5jZXMgZm9yIGRpZmZlcmVudCBQSFlzIHRoZSBoYXJkd2FyZVxcbisgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlc1xcbisgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHJlYWQgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOlxcbisgKlxcbisgKlxcdFJUTDgzODBcXHRcXHRcXHRcXHRSVEw4MzkzXFxuKyAqXFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcXHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcXG4rICpcXHRcXHRcXHRcXHRcXHRwaHlfd3JpdGUocGh5LCAzMSwgMCk7XFxuKyAqXFxuKyAqIFdoYXQgZG9lcyB0aGlzIG1lYW4/XFxuKyAqXFxuKyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2VcXG4rICogc3RheXMgdGhlIHNhbWUuIE9uIHRoZSBvbmUgaGFuZCB0aGF0IGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgTUFDIGxheWVyLCBvbiB0aGUgb3RoZXIgaGFuZCBpdFxcbisgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS5cXG4rICpcXG4rICogLSBXaXRob3V0IHRoZSBwb2xsaW5nIGFuZCBhIHByb3BlciBNQUMgc3RhdHVzLCBzb21lIG9mIHRoZSBsaW5rIGhhbmRsaW5nIGZlYXR1cmVzIGRvIG5vdCB3b3JrLlxcbisgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLlxcbisgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsXFxuKyAqICAgcmVhZCB0aGUgcmlnaHQgZGF0YS4gT24gdGhlIFJUTDgzOHggcG9sbGluZyBzaW1wbHkgcmVzZXRzIGl0IHRvIHplcm8uIE90aGVyIGRldmljZXMgc2VlbVxcbisgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyBcXFwibWFnaWNhbGx5XFxcIiBpbiB0aGUgYmFja2dyb3VuZC5cXG4rICogLSBBIEM0NSBvdmVyIEMyMiBrZXJuZWwgYWNjZXNzIHNlcXVlbmNlIGlzIG1vc3QgbGlrZWx5IHRvIGZhaWwgYmVjYXVzZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXRcXG4rICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi5cXG4rICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW5cXG4rICogICBzZXF1ZW5jZSBvZiByZWdpc3RlcnMgYW5kIHZhbHVlcyB3aXRob3V0IGRldmlhdGlvbi5cXG4rICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS5cXG4rICpcXG4rICogQ29uY2x1c2lvbjogVGhlIFJlYWx0ZWsgTURJTyBidXMgZHJpdmVyIFBIWSBhY2Nlc3MgbXVzdCBrbm93IGFuZCBoYW5kbGUgYW55IGludGVyZmVyZW5jZSB0aGF0XFxuKyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy5cXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG5AQCAtNTAsNiArMTE4LDUwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVnbWFwLmhcXHUwMDNlXFxuIFxcbisjZGVmaW5lIFJUTDgzODBfTlVNX0JVU0VTXFx0XFx0XFx0MVxcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXFx0XFx0XFx0NDA5NlxcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXFx0XFx0XFx0MjhcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFxcdFxcdFxcdDB4YTEwMFxcbisjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzBcXHRcXHQweGExYjhcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMVxcdFxcdDB4YTFiY1xcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlxcdFxcdEdFTk1BU0soMjQsIDIwKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0VcXHRcXHRHRU5NQVNLKDE5LCAxNSlcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFXFx0XFx0R0VOTUFTSygxNCwgMylcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcXHRcXHRCSVQoMilcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVBRFxcdFxcdFxcdDBcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDVcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjJcXHRcXHQwXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcXHRcXHRcXHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzJcXHRcXHQweGExYzBcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygzMSwgMTYpXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEFcXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXFx0XFx0MHhhMWM0XFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXFx0XFx0XFx0MHhhMTdjXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcXHRcXHQweGExYzhcXG4rXFxuKyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVNcXHRcXHRcXHQyXFxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUEFHRVNcXHRcXHRcXHQ4MTkyXFxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFNcXHRcXHRcXHQ1MlxcbisjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTFxcdFxcdDB4MDNlY1xcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMXFx0XFx0MHgwM2RjXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSXFx0XFx0R0VOTUFTSyg5LCA1KVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0VcXHRcXHRHRU5NQVNLKDIyLCAxMClcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRkFJTFxcdFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURVxcdFxcdEJJVCgzKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXFx0XFx0XFx0MFxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVxcdFxcdEJJVCgyKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMlxcdFxcdDBcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19DVFJMXFx0XFx0XFx0MHgwM2UwXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFXFx0XFx0R0VOTUFTSyg4LCAwKVxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTFxcdFxcdDB4MDNmMFxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEFcXHRcXHRHRU5NQVNLKDMxLCAxNilcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkxcXHRcXHRcXHQweDAzZjRcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXFx0XFx0MHgwM2U0XFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcXHRcXHQweDAzZThcXG4rI2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFxcdFxcdDB4MDNmY1xcbitcXG4gI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFU1xcdFxcdFxcdDRcXG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1xcdFxcdFxcdDQwOTZcXG4gI2RlZmluZSBSVEw5MzAwX05VTV9QT1JUU1xcdFxcdFxcdDI4XFxuQEAgLTcwLDYgKzE4Miw3IEBAXFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMzEsIDE2KVxcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9EQVRBXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1xcdFxcdDB4Y2I3Y1xcbisjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTFxcdFxcdFxcdDB4Y2E5MFxcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMXFx0XFx0MHhjYjgwXFxuIFxcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTXFx0XFx0XFx0NFxcbkBAIC05NSwxMSArMjA4LDEzIEBAXFxuICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMTUsIDApXFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMXFx0MHgwYzE4XFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9BRERSX0NUUkxcXHRcXHQweDBjNzRcXG4rI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFxcdFxcdDB4MGNjY1xcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcXHRcXHQweDBjOWNcXG4gXFxuICNkZWZpbmUgUEhZX0NUUkxfQ01EXFx0XFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXFx0XFx0XFx0R0VOTUFTSygyMCwgMTYpXFxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX1JFR1xcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgUEhZX1ZFTkRPUl9SRUFMVEVLXFx0XFx0XFx0MHgwMDFjYzgwMFxcbiBcXG4gI2RlZmluZSBNQVBfQUREUlNfUEVSX1JFR1xcdFxcdFxcdDZcXG4gI2RlZmluZSBNQVBfQklUU19QRVJfQUREUlxcdFxcdFxcdDVcXG5AQCAtMTI1LDcgKzI0MCw5IEBAIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYge1xcbiBcXHRjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvICppbmZvO1xcbiBcXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XFxuIFxcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xcbitcXHRERUNMQVJFX0JJVE1BUChwaHlfcG9sbCwgTUFYX1BPUlRTKTtcXG4gXFx0REVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7XFxuK1xcdHUxNiBwYWdlW01BWF9QT1JUU107XFxuIFxcdHU4IHNtaV9idXNbTUFYX1BPUlRTXTtcXG4gXFx0dTggc21pX2FkZHJbTUFYX1BPUlRTXTtcXG4gXFx0Ym9vbCBzbWlfYnVzX2lzX2M0NVtNQVhfU01JX0JVU1NFU107XFxuQEAgLTE0Miw2ICsyNTksNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcXG4gXFx0dTggbnVtX2J1c2VzO1xcbiBcXHR1OCBudW1fcG9ydHM7XFxuIFxcdHUxNiBudW1fcGFnZXM7XFxuK1xcdHUzMiBwb2xsX2N0cmw7XFxuIFxcdGludCAoKnNldHVwX2NvbnRyb2xsZXIpKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpO1xcbiBcXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xcbiBcXHRpbnQgKCpyZWFkX2M0NSkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XFxuQEAgLTE3Nyw2ICsyOTUsMTQgQEAgc3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcXG4gXFx0cmV0dXJuIGNoYW4tXFx1MDAzZXByaXY7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2Vwb2xsX2N0cmwgKyAocG9ydCAvIDMyKSAqIDQsXFxuK1xcdFxcdFxcdFxcdCAgQklUKHBvcnQgJSAzMiksIGFjdGl2ZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcXG4ge1xcbkBAIC0xODUsOSArMzExLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0dTMyIGNtZHN0YXRlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibGUgd3JvbmcgKi9cXG4rXFx0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcgKi9cXG4gXFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXFx1MDAzZXJlZ21hcCwgaW5mby1cXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTIyNyw3ICszNTMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXFx1MDAzZXJlZ21hcCwgaW5mby1cXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTI2NCwxMyArMzkwLDEyMyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXFxuIFxcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VjbWRfd3JpdGUsIGNtZF9kYXRhKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93XFx0PSBCSVQocG9ydCksXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmM0NV9kYXRhXFx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9IEJJVChwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFxcdTAwMjZjbWRfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuK1xcdFxcdC5leHRfcGFnZVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmV4dF9wYWdlXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoXFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFxcdTAwM2VcXHUwMDNlIDMyKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jNDVfZGF0YVxcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsIFxcdTAwMjZjbWRfZGF0YSxcXG4rXFx0XFx0XFx0XFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmM0NV9kYXRhXFx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXFxuK1xcdFxcdC5wb3J0X21hc2tfaGlnaFxcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcXHUwMDNlXFx1MDAzZSAzMiksXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93XFx0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsIFxcdTAwMjZjbWRfZGF0YSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxcbiB7XFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuIFxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxcbi1cXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4gXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbiBcXHR9O1xcbiBcXG5AQCAtMjg0LDcgKzUyMCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuIFxcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4gXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gQklUKHBvcnQpLFxcbiBcXHR9O1xcbkBAIC0zMjQsNyArNTYwLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHVcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuIFxcdFxcdC5icm9hZGNhc3RcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSxcXG4gXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbi1cXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4gXFx0fTtcXG4gXFxuIFxcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMOTMxMF9QSFlfQ1RSTF9UWVBFX0MyMiwgXFx1MDAyNmNtZF9kYXRhLFxcbkBAIC0zMzYsNyArNTcyLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbi1cXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4gXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4gXFx0XFx0LnBvcnRfbWFza19oaWdoXFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFxcdTAwM2VcXHUwMDNlIDMyKSxcXG4gXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxcbkBAIC0zODIsOCArNjE4LDEyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKVxcbiBcXHRpZiAocG9ydCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBwb3J0O1xcbiBcXG4tXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaylcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRpZiAocmVnbnVtID09IDMxKVxcbitcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcGFnZVtwb3J0XTtcXG4rXFxuIFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcXHUwMDI2dmFsdWUpO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XFxuIH1cXG5AQCAtMzk3LDggKzYzNywxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNlxcbiBcXHRpZiAocG9ydCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBwb3J0O1xcbiBcXG4tXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaylcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRpZiAocmVnbnVtID09IDMxKSB7XFxuK1xcdFxcdFxcdGlmICh2YWx1ZSBcXHUwMDNlPSBSQVdfUEFHRShwcml2KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VwYWdlW3BvcnRdID0gdmFsdWU7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRyZXQgPSBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2V3cml0ZV9jMjIoYnVzLCBwb3J0LCByZWdudW0sIHZhbHVlKTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC00NzEsNiArNzIwLDE1IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFBIWV9QQVRDSF9ET05FIGVuYWJsZXMgUEhZIGNvbnRyb2wgdmlhIFNvQy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgUEhZIGFjY2VzcywgaW5jbHVkaW5nXFxuK1xcdCAqIHBhdGNoaW5nIGFuZCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIFBIWXMgYXJlIHByb2JlZC5cXG4rXFx0ICovXFxuK1xcdHJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0dTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwO1xcbkBAIC01MDcsNiArNzY1LDU0IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cXHUwMDNlbWRpby5idXMpO1xcbitcXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHBvcnQ7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXNtaV9idXNfaXNfYzQ1W2NoYW4tXFx1MDAzZW1kaW9fYnVzXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKCFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LVxcdTAwM2VwaHlfaWQsIFBIWV9WRU5ET1JfUkVBTFRFSykpKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiT25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmICh0ZXN0X2JpdChwb3J0LCBwcml2LVxcdTAwM2VwaHlfcG9sbCkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0cmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0X19zZXRfYml0KHBvcnQsIHByaXYtXFx1MDAzZXBoeV9wb2xsKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cXHUwMDNlbWRpby5idXMpO1xcbitcXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0X19jbGVhcl9iaXQocG9ydCwgcHJpdi1cXHUwMDNlcGh5X3BvbGwpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZXJyKGJ1cy1cXHUwMDNlcGFyZW50LCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcXFxuXFxcIiwgcG9ydCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXFxuIHtcXG5AQCAtNTM2LDYgKzg0Miw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2XFxuIFxcdFxcdGJ1cy1cXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcXG4gXFx0fVxcbiBcXHRidXMtXFx1MDAzZXBhcmVudCA9IGRldjtcXG4rXFx0YnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XFxuK1xcdGJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xcbitcXG4gXFx0Y2hhbiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4gXFx0Y2hhbi1cXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcXG4gXFx0Y2hhbi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuQEAgLTY1Miw2ICs5NjEsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXFx1MDAzYyBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fcG9ydHM7IHBvcnQrKykge1xcbitcXHRcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdFxcdGVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuQEAgLTY3MSw2ICs5OTUsMTAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlcmVnbWFwKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlcmVnbWFwKTtcXG4gXFxuK1xcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4gXFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XFxuIFxcbiBcXHRlcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpO1xcbkBAIC02OTYsNiArMTAyNCw1MSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0ge1xcbitcXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxcbitcXHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXFxuK1xcdC5jbWRfcmVhZCA9IFJUTDgzODBfUEhZX0NUUkxfUkVBRCxcXG4rXFx0LmNtZF93cml0ZSA9IFJUTDgzODBfUEhZX0NUUkxfV1JJVEUsXFxuK1xcdC5jbWRfcmVncyA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsXFxuK1xcdFxcdC5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLFxcbitcXHRcXHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLFxcbitcXHR9LFxcbitcXHQubnVtX2J1c2VzID0gUlRMODM4MF9OVU1fQlVTRVMsXFxuK1xcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcXG4rXFx0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMODM4MF9TTUlfUE9MTF9DVFJMLFxcbitcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxcbitcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXFxuK1xcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NSxcXG4rXFx0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXFxuK1xcdC53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7XFxuK1xcdC5jbWRfZmFpbCA9IFJUTDgzOTBfUEhZX0NUUkxfRkFJTCxcXG4rXFx0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxcbitcXHQuY21kX3dyaXRlID0gUlRMODM5MF9QSFlfQ1RSTF9XUklURSxcXG4rXFx0LmNtZF9yZWdzID0ge1xcbitcXHRcXHQuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLFxcbitcXHRcXHQuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCxcXG4rXFx0XFx0LmM0NV9kYXRhID0gUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwsXFxuK1xcdFxcdC5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsXFxuK1xcdFxcdC5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1csXFxuK1xcdFxcdC5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILFxcbitcXHR9LFxcbitcXHQubnVtX2J1c2VzID0gUlRMODM5MF9OVU1fQlVTRVMsXFxuK1xcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcXG4rXFx0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXFxuK1xcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMixcXG4rXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxcbitcXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMixcXG4rXFx0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcXG4gXFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcXG4gXFx0LmJ1c19tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMLFxcbkBAIC03MTEsNiArMTA4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xcbiBcXHQubnVtX2J1c2VzID0gUlRMOTMwMF9OVU1fQlVTRVMsXFxuIFxcdC5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUyxcXG4gXFx0Lm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLFxcbiBcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLFxcbiBcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXFxuIFxcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSxcXG5AQCAtNzM2LDYgKzExMTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcXG4gXFx0Lm51bV9idXNlcyA9IFJUTDkzMTBfTlVNX0JVU0VTLFxcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXFxuIFxcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcXG4rXFx0LnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxcbiBcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLFxcbiBcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXFxuIFxcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSxcXG5AQCAtNzQ0LDYgKzExMTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw4MzgwLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzgzODBfaW5mbyB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscnRsODM5MS1tZGlvXFxcIiwgLmRhdGEgPSBcXHUwMDI2b3R0b19lbWRpb184MzkwX2luZm8gfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDkzMDEtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fOTMwMF9pbmZvIH0sXFxuIFxcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw5MzExLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LFxcbiBcXHR7fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDk0YjJlODVlMDBhMzc5Li5hNjJjMmZmNmMyYWFiYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbkBAIC0xODc2LDYgKzE4NzYsMTMgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcXG4rXFx0XFx0ZXJyID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VtZGlvX2J1c19ub3RpZmllZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuIFxcdHBoeV9yZXN1bWUocGh5ZGV2KTtcXG4gXFxuIFxcdC8qKlxcbkBAIC0xOTE5LDYgKzE5MjYsMTAgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbiBcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpb19idXNfbm90aWZpZWQgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gpXFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XFxuK1xcdHBoeWRldi1cXHUwMDNlbWRpb19idXNfbm90aWZpZWQgPSBmYWxzZTtcXG4rXFxuIFxcdGlmIChwaHlkZXYtXFx1MDAzZWRldmxpbmspIHtcXG4gXFx0XFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cXHUwMDNlZGV2bGluayk7XFxuIFxcdFxcdHBoeWRldi1cXHUwMDNlZGV2bGluayA9IE5VTEw7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuaW5kZXggMTEwOTJjMzE3NWIzZGUuLjJkMzBlMDg3YTIzMzczIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuQEAgLTM3Niw2ICszNzYsMjMgQEAgc3RydWN0IG1paV9idXMge1xcbiBcXHRcXHRcXHQgaW50IHJlZ251bSwgdTE2IHZhbCk7XFxuIFxcdC8qKiBAcmVzZXQ6IFBlcmZvcm0gYSByZXNldCBvZiB0aGUgYnVzICovXFxuIFxcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcXG4rXFx0LyoqXFxuK1xcdCAqIEBub3RpZnlfcGh5X2F0dGFjaDogUGVyZm9ybSBwb3N0LWF0dGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcXG4rXFx0ICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2F0dGFjaF9kaXJlY3QoKSByaWdodCBhZnRlciBwaHlfaW5pdF9odygpXFxuK1xcdCAqICAgYW5kIGJlZm9yZSBwaHlfcmVzdW1lKCkuIEF0IHRoaXMgcG9pbnQsIHRoZSBQSFkgaXMgc3RpbGxcXG4rXFx0ICogICBzdXNwZW5kZWQsIGFuZCBAcGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYgbWF5IGJlIE5VTEwgKGUuZy4gZm9yXFxuK1xcdCAqICAgc3RhbmRhbG9uZSBQSFlzKS4gUnVucyBpbiBwcm9jZXNzIGNvbnRleHQgYW5kIG1heSBzbGVlcC4gUmV0dXJuXFxuK1xcdCAqICAgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZSAod2hpY2ggYWJvcnRzIHRoZVxcbitcXHQgKiAgIGF0dGFjaCBzZXF1ZW5jZSkuXFxuK1xcdCAqL1xcbitcXHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuK1xcdC8qKlxcbitcXHQgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcXG4rXFx0ICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2RldGFjaCgpIGJlZm9yZSBkZXZpY2UgbGlua3MgYW5kIHJlc291cmNlc1xcbitcXHQgKiAgIGFyZSBjbGVhbmVkIHVwLiBSdW5zIGluIHByb2Nlc3MgY29udGV4dCBhbmQgbWF5IHNsZWVwLiBPbmx5XFxuK1xcdCAqICAgaW52b2tlZCBpZiBAbm90aWZ5X3BoeV9hdHRhY2ggd2FzIHByZXZpb3VzbHkgY2FsbGVkIGFuZCBzdWNjZWVkZWQuXFxuK1xcdCAqL1xcbitcXHR2b2lkICgqbm90aWZ5X3BoeV9kZXRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBcXG4gXFx0LyoqIEBzdGF0czogU3RhdGlzdGljIGNvdW50ZXJzIHBlciBkZXZpY2Ugb24gdGhlIGJ1cyAqL1xcbiBcXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcXG5AQCAtNTc0LDYgKzU5MSw3IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcXG4gICogQGhhc19maXh1cHM6IFNldCB0byB0cnVlIGlmIHRoaXMgUEhZIGhhcyBmaXh1cHMvcXVpcmtzLlxcbiAgKiBAc3VzcGVuZGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGlzIFBIWSBoYXMgYmVlbiBzdXNwZW5kZWQgc3VjY2Vzc2Z1bGx5LlxcbiAgKiBAc3VzcGVuZGVkX2J5X21kaW9fYnVzOiBTZXQgdG8gdHJ1ZSBpZiB0aGlzIFBIWSB3YXMgc3VzcGVuZGVkIGJ5IE1ESU8gYnVzLlxcbisgKiBAbWRpb19idXNfbm90aWZpZWQ6IFNldCB0byB0cnVlIGlmIHBvc3QtYXR0YWNoIGJ1cyBub3RpZmljYXRvbiBzdWNjZWVkZWQuXFxuICAqIEBzeXNmc19saW5rczogSW50ZXJuYWwgYm9vbGVhbiB0cmFja2luZyBzeXNmcyBzeW1ib2xpYyBsaW5rcyBzZXR1cC9yZW1vdmFsLlxcbiAgKiBAbG9vcGJhY2tfZW5hYmxlZDogU2V0IHRydWUgaWYgdGhpcyBQSFkgaGFzIGJlZW4gbG9vcGJhY2tlZCBzdWNjZXNzZnVsbHkuXFxuICAqIEBkb3duc2hpZnRlZF9yYXRlOiBTZXQgdHJ1ZSBpZiBsaW5rIHNwZWVkIGhhcyBiZWVuIGRvd25zaGlmdGVkLlxcbkBAIC02ODUsNiArNzAzLDcgQEAgc3RydWN0IHBoeV9kZXZpY2Uge1xcbiBcXHR1bnNpZ25lZCBoYXNfZml4dXBzOjE7XFxuIFxcdHVuc2lnbmVkIHN1c3BlbmRlZDoxO1xcbiBcXHR1bnNpZ25lZCBzdXNwZW5kZWRfYnlfbWRpb19idXM6MTtcXG4rXFx0dW5zaWduZWQgbWRpb19idXNfbm90aWZpZWQ6MTtcXG4gXFx0dW5zaWduZWQgc3lzZnNfbGlua3M6MTtcXG4gXFx0dW5zaWduZWQgbG9vcGJhY2tfZW5hYmxlZDoxO1xcbiBcXHR1bnNpZ25lZCBkb3duc2hpZnRlZF9yYXRlOjE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAwOjUwOjIyLjM3NTExMjcyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM4OTg4OTEzMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIGluIHRoZSBtZGlvLXJlYWx0ZWstcnRsOTMwMCBwbGF0Zm9ybSBkcml2ZXIsIGFuZCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoL25vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIHdoaWNoIGFyZSBvbmx5IHVzZWQgYnkgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIFNpbmNlIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIFJlYWx0ZWsgU29DcywgaXQgY2Fubm90IGJlIHByb2JlZCBpbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgKGxpa2UgUUVNVSBvciBHQ0UpIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgc3VwcG9ydC4gVGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBjaGFuZ2VzIGFyZSBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBiZWNhdXNlIG5vIHJlYWNoYWJsZSBkcml2ZXIgc2V0cyB0aGVzZSBjYWxsYmFja3MuIFRodXMsIHRoZSBtb2RpZmllZCBjb2RlIGNhbm5vdCBiZSBleGVjdXRlZCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTEwYjIyZjg0NWQ4ZmFkOTRhMDZlNTljMzdmMmNlMDhmNjQ4YWM4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDAwOjUwOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5pbmRleCAyNzFlMDViYWU5YzU3NC4uNjdlMGIyM2E4NDcwZWEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuQEAgLTQsNyArNCw3IEBAXG4gJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCNcbiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiBcbi10aXRsZTogUmVhbHRlayBSVEw5MzAwIE1ESU8gQ29udHJvbGxlclxuK3RpdGxlOiBSZWFsdGVrIE90dG8gU3dpdGNoZXMgRXRoZXJuZXQgTURJTyBDb250cm9sbGVyXG4gXG4gbWFpbnRhaW5lcnM6XG4gICAtIENocmlzIFBhY2toYW0gXHUwMDNjY2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56XHUwMDNlXG5AQCAtMTIsNiArMTIsMTYgQEAgbWFpbnRhaW5lcnM6XG4gcHJvcGVydGllczpcbiAgIGNvbXBhdGlibGU6XG4gICAgIG9uZU9mOlxuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW9cbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzgwLW1kaW9cbisgICAgICAtIGl0ZW1zOlxuKyAgICAgICAgICAtIGVudW06XG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5Mi1tZGlvXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvXG4gICAgICAgLSBpdGVtczpcbiAgICAgICAgICAgLSBlbnVtOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW9cbkBAIC0yNCw2ICszNCw4IEBAIHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvXG4gICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsOTMxMS1tZGlvXG4gICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMS1tZGlvXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5pbmRleCBhZmQ1MmExY2Q3ZjgzMS4uYWViYzc2YWU1ZTU2MGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuQEAgLTM1LDYgKzM1LDc0IEBAXG4gICpcbiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvblxuICAqIHRoZSBldGhlcm5ldC1wb3J0cyBwcm9wZXJ0eS5cbisgKlxuKyAqIFRoZSBkZXZpY2VzIGhhdmUgYSBoYXJkd2FyZSBwb2xsaW5nIHVuaXQgdGhhdCBydW5zIGluIHRoZSBiYWNrZ3JvdW5kIHdpdGhvdXQgYW55IENQVSBsb2FkLiBJdFxuKyAqIGNvbnN0YW50bHkgc2NhbnMgdGhlIE1ESU8gYnVzIGFuZCB0aGUgYXR0YWNoZWQgUEhZcyBhbmQgdXBkYXRlcyB0aGUgTUFDIHN0YXR1cyByZWdpc3RlcnMuXG4rICpcbisgKiBIb3cgZG9lcyB0aGUgcG9sbGluZyB3b3JrP1xuKyAqXG4rICogRWFjaCBkZXZpY2UgaGFzIGEgU01JX1BPTExfQ1RSTCByZWdpc3Rlci4gQSBwZXItcG9ydCBiaXRtYXNrIGRlY2lkZXMgaWYgdGhlIGhhcmR3YXJlIHBvbGxpbmcgb2ZcbisgKiB0aGUgYXNzb2NpYXRlZCBidXMvYWRkcmVzcyBpcyBhY3RpdmUgb3Igbm90LiBUaGUgaGFyZHdhcmUgcnVucyBhIHRpZ2h0IGxvb3Agb3ZlciB0aGlzIGFuZCBmb3JcbisgKiBlYWNoIHNldCBwb2xsaW5nIGJpdCBpdCBpc3N1ZXMgYSBzdGF0dXMgY2hlY2sgZm9yIHRoZSBQSFkuIEF0dGFjaGluZyBhIGxvZ2ljIGFuYWx5emVyIHRvIHRoZVxuKyAqIE1ESU8gYnVzIG9mIGFuIFJUTDgzODAgYW5kIFJUTDgzOTMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoaW4ga2VybmVsIG5vdGF0aW9uKTpcbisgKlxuKyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4rICpcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICpcdHBoeV93cml0ZShwaHksIDMxLCAweDApO1x0cGh5X3JlYWQocGh5LCAwKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDEpO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XHRwaHlfcmVhZChwaHksIDQpO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcdHBoeV9yZWFkKHBoeSwgNSk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTQpO1x0XHRwaHlfcmVhZChwaHksIDYpO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgOSk7XG4rICpcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcdHBoeV9yZWFkKHBoeSwgMTApO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcdHBoeV9yZWFkKHBoeSwgMTUpO1xuKyAqXHRwaHlfcmVhZChwaHksIDE0KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgOSk7XHRcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcbisgKlx0cGh5X3JlYWQocGh5LCAxMCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xuKyAqXHRwaHlfcmVhZChwaHksIDE1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xuKyAqXHRwaHlfcmVhZChwaHksIDEpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XG4rICpcdHBoeV9yZWFkKHBoeSwgNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xuKyAqXHRwaHlfcmVhZChwaHksIDUpO1x0XHRwaHlfcmVhZChwaHksIDE0KTtcbisgKlx0cGh5X3JlYWQocGh5LCA2KTtcbisgKlxuKyAqIEZyb20gdGhlIGFib3ZlIHNuaXBwZXRzIGl0IHBvbGxzIE1ESU9fQU5fRUVFX0FEViBhbmQgTURJT19BTl9FRUVfTFBBQkxFIHZpYSBDNDUgb3ZlciBDMjIuIEFzXG4rICogb2Ygbm93IGl0IGlzIHVuY2xlYXIgaG93IHRoZSBoYXJkd2FyZSBkZWNpZGVzIGlmIGEgUEhZIHN1cHBvcnRzIHRoZXNlIHJlZ2lzdGVycy4gQWZ0ZXIgb25lIFBIWVxuKyAqIHN0YXR1cyBpcyByZWFkLCB0aGUgcG9sbGluZyBlbmdpbmUgZ29lcyBvdmVyIHRvIHRoZSBuZXh0IFBIWS4gQmFzaWNhbGx5IHRoZSBidXMgaXMgYWx3YXlzIGJ1c3lcbisgKiBhbmQgdGhlIE1BQyBzdGF0dXMgaXMgdXBkYXRlZCBpbiByZWFsLXRpbWUuXG4rICpcbisgKiBIb3cgZG9lcyBNRElPIGFjY2VzcyBmcm9tIGtlcm5lbCB3b3JrP1xuKyAqXG4rICogV2hlbiBpc3N1aW5nIE1ESU8gYWNjZXNzZXMgdmlhIGFuIE1NSU8gYmFzZWQgaW50ZXJmYWNlIHRoZSBmaW5hbCB3cml0ZSB0byB0aGUgY29tbWFuZCByZWdpc3RlclxuKyAqIHNldHMgYSBcInJ1biBjb21tYW5kIG5vd1wiIGJpdC4gQmV0d2VlbiB0d28gcG9sbGluZyBzZXF1ZW5jZXMgZm9yIGRpZmZlcmVudCBQSFlzIHRoZSBoYXJkd2FyZVxuKyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXG4rICogaXRzIHBvbGxpbmcgd29yay4gSW5zcGVjdGluZyB0aGUgY29tbWFuZCBzZXF1ZW5jZSBmb3IgYSBwYWdlZCByZWFkIG9uIHRoZSBsb2dpYyBhbmFseXplciBnaXZlczpcbisgKlxuKyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4rICpcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICpcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcbisgKlx0XHRcdFx0XHRwaHlfd3JpdGUocGh5LCAzMSwgMCk7XG4rICpcbisgKiBXaGF0IGRvZXMgdGhpcyBtZWFuP1xuKyAqXG4rICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZVxuKyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXRcbisgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS5cbisgKlxuKyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay5cbisgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLlxuKyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGxcbisgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW1cbisgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyBcIm1hZ2ljYWxseVwiIGluIHRoZSBiYWNrZ3JvdW5kLlxuKyAqIC0gQSBDNDUgb3ZlciBDMjIga2VybmVsIGFjY2VzcyBzZXF1ZW5jZSBpcyBtb3N0IGxpa2VseSB0byBmYWlsIGJlY2F1c2UgY2hhbmNlcyBhcmUgaGlnaCB0aGF0XG4rICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi5cbisgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhblxuKyAqICAgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgd2l0aG91dCBkZXZpYXRpb24uXG4rICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS5cbisgKlxuKyAqIENvbmNsdXNpb246IFRoZSBSZWFsdGVrIE1ESU8gYnVzIGRyaXZlciBQSFkgYWNjZXNzIG11c3Qga25vdyBhbmQgaGFuZGxlIGFueSBpbnRlcmZlcmVuY2UgdGhhdFxuKyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG5AQCAtNTAsNiArMTE4LDUwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4gXG4rI2RlZmluZSBSVEw4MzgwX05VTV9CVVNFU1x0XHRcdDFcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFNcdFx0XHQyOFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfR0xCX0NUUkxcdFx0XHQweGExMDBcbisjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcdFx0QklUKDE1KVxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzBcdFx0MHhhMWI4XG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMVx0XHQweGExYmNcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDI0LCAyMClcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0VcdFx0R0VOTUFTSygxOSwgMTUpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMTQsIDMpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDIpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVBRFx0XHRcdDBcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMSlcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTFx0XHRcdDAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi9cbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yXHRcdDB4YTFjMFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXHRcdDB4YTFjNFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhhMTdjXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFx0XHQweGExYzhcbitcbisjZGVmaW5lIFJUTDgzOTBfTlVNX0JVU0VTXHRcdFx0MlxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUEFHRVNcdFx0XHQ4MTkyXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QT1JUU1x0XHRcdDUyXG4rI2RlZmluZSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkxcdFx0MHgwM2VjXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTFx0XHQweDAzZGNcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDksIDUpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMjIsIDEwKVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUxcdFx0XHRCSVQoMSlcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURVx0XHRCSVQoMylcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgyKVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyXHRcdDBcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcdFx0XHQweDAzZTBcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRVx0XHRHRU5NQVNLKDgsIDApXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkxcdFx0MHgwM2YwXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkxcdFx0XHQweDAzZjRcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcdFx0MHgwM2U0XG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSFx0XHQweDAzZThcbisjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MDNmY1xuK1xuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXHRcdFx0MjhcbkBAIC03MCw2ICsxODIsNyBAQFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXHRcdDB4Y2I3Y1xuKyNkZWZpbmUgUlRMOTMwMF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhjYTkwXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFx0XHQweGNiODBcbiBcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTXHRcdFx0NFxuQEAgLTk1LDExICsyMDgsMTMgQEBcbiAjZGVmaW5lICAgUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19NTURfQ1RSTFx0MHgwYzE4XG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFx0XHQweDBjNzRcbisjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MGNjY1xuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTFx0XHQweDBjOWNcbiBcbiAjZGVmaW5lIFBIWV9DVFJMX0NNRFx0XHRcdFx0QklUKDApXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQURcdFx0XHRHRU5NQVNLKDIwLCAxNilcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUdcdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgUEhZX1ZFTkRPUl9SRUFMVEVLXHRcdFx0MHgwMDFjYzgwMFxuIFxuICNkZWZpbmUgTUFQX0FERFJTX1BFUl9SRUdcdFx0XHQ2XG4gI2RlZmluZSBNQVBfQklUU19QRVJfQUREUlx0XHRcdDVcbkBAIC0xMjUsNyArMjQwLDkgQEAgc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XG4gXHRjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvICppbmZvO1xuIFx0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuIFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3QgSFcgYWNjZXNzICovXG4rXHRERUNMQVJFX0JJVE1BUChwaHlfcG9sbCwgTUFYX1BPUlRTKTtcbiBcdERFQ0xBUkVfQklUTUFQKHZhbGlkX3BvcnRzLCBNQVhfUE9SVFMpO1xuK1x0dTE2IHBhZ2VbTUFYX1BPUlRTXTtcbiBcdHU4IHNtaV9idXNbTUFYX1BPUlRTXTtcbiBcdHU4IHNtaV9hZGRyW01BWF9QT1JUU107XG4gXHRib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTtcbkBAIC0xNDIsNiArMjU5LDcgQEAgc3RydWN0IG90dG9fZW1kaW9faW5mbyB7XG4gXHR1OCBudW1fYnVzZXM7XG4gXHR1OCBudW1fcG9ydHM7XG4gXHR1MTYgbnVtX3BhZ2VzO1xuK1x0dTMyIHBvbGxfY3RybDtcbiBcdGludCAoKnNldHVwX2NvbnRyb2xsZXIpKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpO1xuIFx0aW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbiBcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbkBAIC0xNzcsNiArMjk1LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpXG4gXHRyZXR1cm4gY2hhbi1cdTAwM2Vwcml2O1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCBpbnQgcG9ydCwgYm9vbCBhY3RpdmUpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXBvbGxfY3RybCArIChwb3J0IC8gMzIpICogNCxcbitcdFx0XHRcdCAgQklUKHBvcnQgJSAzMiksIGFjdGl2ZSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRcdFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxuIHtcbkBAIC0xODUsOSArMzExLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHUzMiBjbWRzdGF0ZTtcbiBcdGludCByZXQ7XG4gXG4tXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqL1xuK1x0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcgKi9cbiBcdHJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LVx1MDAzZXJlZ21hcCwgaW5mby1cdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xuK1x0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMjcsNyArMzUzLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LVx1MDAzZXJlZ21hcCwgaW5mby1cdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xuK1x0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yNjQsMTMgKzM5MCwxMjMgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXHUwMDNlaW5mby1cdTAwM2VjbWRfd3JpdGUsIGNtZF9kYXRhKTtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuK1x0XHRcdFx0ICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuK1x0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhLFxuK1x0XHRcdFx0ICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4rXHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5leHRfcGFnZVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbitcdFx0XHRcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuK1x0XHQuZXh0X3BhZ2VcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhLFxuK1x0XHRcdFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4rXHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4rXHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4ge1xuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiBcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuIFx0fTtcbiBcbkBAIC0yODQsNyArNTIwLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuIFx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuIFx0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4gXHR9O1xuQEAgLTMyNCw3ICs1NjAsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdVxuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5icm9hZGNhc3RcdD0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLFxuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0fTtcbiBcbiBcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMOTMxMF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG5AQCAtMzM2LDcgKzU3Miw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuIFx0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuIFx0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbkBAIC0zODIsOCArNjE4LDEyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKVxuIFx0aWYgKHBvcnQgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuK1x0XHRpZiAocmVnbnVtID09IDMxKVxuK1x0XHRcdHJldHVybiBwcml2LVx1MDAzZXBhZ2VbcG9ydF07XG4rXG4gXHRcdHJldCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2VyZWFkX2MyMihidXMsIHBvcnQsIHJlZ251bSwgXHUwMDI2dmFsdWUpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHJldCA/IHJldCA6IHZhbHVlO1xuIH1cbkBAIC0zOTcsOCArNjM3LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2XG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdGlmIChyZWdudW0gPT0gMzEpIHtcbitcdFx0XHRpZiAodmFsdWUgXHUwMDNlPSBSQVdfUEFHRShwcml2KSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRcdHByaXYtXHUwMDNlcGFnZVtwb3J0XSA9IHZhbHVlO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXG4gXHRcdHJldCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2V3cml0ZV9jMjIoYnVzLCBwb3J0LCByZWdudW0sIHZhbHVlKTtcbitcdH1cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ3MSw2ICs3MjAsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuK3tcbitcdC8qXG4rXHQgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZ1xuK1x0ICogcGF0Y2hpbmcgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgUEhZcyBhcmUgcHJvYmVkLlxuK1x0ICovXG4rXHRyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4ge1xuIFx0dTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwO1xuQEAgLTUwNyw2ICs3NjUsNTQgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4rXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHBvcnQ7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlc21pX2J1c19pc19jNDVbY2hhbi1cdTAwM2VtZGlvX2J1c10gXHUwMDI2XHUwMDI2XG4rXHQgICAgKCFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LVx1MDAzZXBoeV9pZCwgUEhZX1ZFTkRPUl9SRUFMVEVLKSkpIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiT25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuK1x0XHRpZiAodGVzdF9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCkpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0X19zZXRfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4rXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBvcnQgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdF9fY2xlYXJfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpO1xuK1x0fVxuK1xuK1x0aWYgKHJldClcbitcdFx0ZGV2X2VycihidXMtXHUwMDNlcGFyZW50LCBcImZhaWxlZCB0byBkaXNhYmxlIHBvbGxpbmcgZm9yIHBvcnQgJWRcXG5cIiwgcG9ydCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuIFx0XHRcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxuIHtcbkBAIC01MzYsNiArODQyLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcbiBcdFx0YnVzLVx1MDAzZXdyaXRlID0gb3R0b19lbWRpb193cml0ZV9jMjI7XG4gXHR9XG4gXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuK1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcbitcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2g7XG4rXG4gXHRjaGFuID0gYnVzLVx1MDAzZXByaXY7XG4gXHRjaGFuLVx1MDAzZW1kaW9fYnVzID0gbWRpb19idXM7XG4gXHRjaGFuLVx1MDAzZXByaXYgPSBwcml2O1xuQEAgLTY1Miw2ICs5NjEsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBwcml2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3BvcnRzOyBwb3J0KyspIHtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbitcdFx0XHRlcnIgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG5AQCAtNjcxLDYgKzk5NSwxMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZWdtYXApKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZXJlZ21hcCk7XG4gXG4rXHRlcnIgPSBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhwcml2KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4gXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTtcbiBcbiBcdGVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7XG5AQCAtNjk2LDYgKzEwMjQsNTEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XG4rXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxuK1x0LmNtZF9mYWlsID0gUlRMODM4MF9QSFlfQ1RSTF9GQUlMLFxuK1x0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxuK1x0LmNtZF93cml0ZSA9IFJUTDgzODBfUEhZX0NUUkxfV1JJVEUsXG4rXHQuY21kX3JlZ3MgPSB7XG4rXHRcdC5jMjJfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xLFxuK1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMyxcbitcdFx0LmlvX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMixcbitcdFx0LnBvcnRfbWFza19sb3cgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMCxcbitcdH0sXG4rXHQubnVtX2J1c2VzID0gUlRMODM4MF9OVU1fQlVTRVMsXG4rXHQubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsXG4rXHQubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsXG4rXHQucG9sbF9jdHJsID0gUlRMODM4MF9TTUlfUE9MTF9DVFJMLFxuK1x0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcixcbitcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMixcbitcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NSxcbitcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyLFxuK1x0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcbitcdC5jbWRfZmFpbCA9IFJUTDgzOTBfUEhZX0NUUkxfRkFJTCxcbitcdC5jbWRfcmVhZCA9IFJUTDgzOTBfUEhZX0NUUkxfUkVBRCxcbitcdC5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLFxuK1x0LmNtZF9yZWdzID0ge1xuK1x0XHQuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLFxuK1x0XHQuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCxcbitcdFx0LmM0NV9kYXRhID0gUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwsXG4rXHRcdC5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsXG4rXHRcdC5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLFxuK1x0XHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1csXG4rXHRcdC5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILFxuK1x0fSxcbitcdC5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUyxcbitcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcbitcdC5udW1fcG9ydHMgPSBSVEw4MzkwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbitcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMixcbitcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NSxcbitcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLFxuK1x0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5hZGRyX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4gXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXG5AQCAtNzExLDYgKzEwODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzAwX05VTV9QQUdFUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LFxuQEAgLTczNiw2ICsxMTEwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXG4gXHQubnVtX3BvcnRzID0gUlRMOTMxMF9OVU1fUE9SVFMsXG4rXHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxuQEAgLTc0NCw2ICsxMTE5LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvdHRvX2VtZGlvX2lkc1tdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw4MzgwLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzgzODBfaW5mbyB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw4MzkxLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw5MzAxLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMDBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw5MzExLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LFxuIFx0e31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggOTRiMmU4NWUwMGEzNzkuLmE2MmMyZmY2YzJhYWJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE4NzYsNiArMTg3NiwxMyBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3I7XG4gXG4rXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKSB7XG4rXHRcdGVyciA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXHRcdHBoeWRldi1cdTAwM2VtZGlvX2J1c19ub3RpZmllZCA9IHRydWU7XG4rXHR9XG4rXG4gXHRwaHlfcmVzdW1lKHBoeWRldik7XG4gXG4gXHQvKipcbkBAIC0xOTE5LDYgKzE5MjYsMTAgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcbiBcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4gXG4rXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW9fYnVzX25vdGlmaWVkIFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gpXG4rXHRcdHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xuK1x0cGh5ZGV2LVx1MDAzZW1kaW9fYnVzX25vdGlmaWVkID0gZmFsc2U7XG4rXG4gXHRpZiAocGh5ZGV2LVx1MDAzZWRldmxpbmspIHtcbiBcdFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cdTAwM2VkZXZsaW5rKTtcbiBcdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAxMTA5MmMzMTc1YjNkZS4uMmQzMGUwODdhMjMzNzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMzc2LDYgKzM3NiwyMyBAQCBzdHJ1Y3QgbWlpX2J1cyB7XG4gXHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpO1xuIFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cbiBcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcbitcdC8qKlxuK1x0ICogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nIGZvciBNRElPIGJ1c1xuK1x0ICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2F0dGFjaF9kaXJlY3QoKSByaWdodCBhZnRlciBwaHlfaW5pdF9odygpXG4rXHQgKiAgIGFuZCBiZWZvcmUgcGh5X3Jlc3VtZSgpLiBBdCB0aGlzIHBvaW50LCB0aGUgUEhZIGlzIHN0aWxsXG4rXHQgKiAgIHN1c3BlbmRlZCwgYW5kIEBwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2IG1heSBiZSBOVUxMIChlLmcuIGZvclxuK1x0ICogICBzdGFuZGFsb25lIFBIWXMpLiBSdW5zIGluIHByb2Nlc3MgY29udGV4dCBhbmQgbWF5IHNsZWVwLiBSZXR1cm5cbitcdCAqICAgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZSAod2hpY2ggYWJvcnRzIHRoZVxuK1x0ICogICBhdHRhY2ggc2VxdWVuY2UpLlxuK1x0ICovXG4rXHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4rXHQvKipcbitcdCAqIEBub3RpZnlfcGh5X2RldGFjaDogUGVyZm9ybSBwcmUtZGV0YWNoIGhhbmRsaW5nIGZvciBNRElPIGJ1c1xuK1x0ICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2RldGFjaCgpIGJlZm9yZSBkZXZpY2UgbGlua3MgYW5kIHJlc291cmNlc1xuK1x0ICogICBhcmUgY2xlYW5lZCB1cC4gUnVucyBpbiBwcm9jZXNzIGNvbnRleHQgYW5kIG1heSBzbGVlcC4gT25seVxuK1x0ICogICBpbnZva2VkIGlmIEBub3RpZnlfcGh5X2F0dGFjaCB3YXMgcHJldmlvdXNseSBjYWxsZWQgYW5kIHN1Y2NlZWRlZC5cbitcdCAqL1xuK1x0dm9pZCAoKm5vdGlmeV9waHlfZGV0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBcbiBcdC8qKiBAc3RhdHM6IFN0YXRpc3RpYyBjb3VudGVycyBwZXIgZGV2aWNlIG9uIHRoZSBidXMgKi9cbiBcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xuQEAgLTU3NCw2ICs1OTEsNyBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQGhhc19maXh1cHM6IFNldCB0byB0cnVlIGlmIHRoaXMgUEhZIGhhcyBmaXh1cHMvcXVpcmtzLlxuICAqIEBzdXNwZW5kZWQ6IFNldCB0byB0cnVlIGlmIHRoaXMgUEhZIGhhcyBiZWVuIHN1c3BlbmRlZCBzdWNjZXNzZnVsbHkuXG4gICogQHN1c3BlbmRlZF9ieV9tZGlvX2J1czogU2V0IHRvIHRydWUgaWYgdGhpcyBQSFkgd2FzIHN1c3BlbmRlZCBieSBNRElPIGJ1cy5cbisgKiBAbWRpb19idXNfbm90aWZpZWQ6IFNldCB0byB0cnVlIGlmIHBvc3QtYXR0YWNoIGJ1cyBub3RpZmljYXRvbiBzdWNjZWVkZWQuXG4gICogQHN5c2ZzX2xpbmtzOiBJbnRlcm5hbCBib29sZWFuIHRyYWNraW5nIHN5c2ZzIHN5bWJvbGljIGxpbmtzIHNldHVwL3JlbW92YWwuXG4gICogQGxvb3BiYWNrX2VuYWJsZWQ6IFNldCB0cnVlIGlmIHRoaXMgUEhZIGhhcyBiZWVuIGxvb3BiYWNrZWQgc3VjY2Vzc2Z1bGx5LlxuICAqIEBkb3duc2hpZnRlZF9yYXRlOiBTZXQgdHJ1ZSBpZiBsaW5rIHNwZWVkIGhhcyBiZWVuIGRvd25zaGlmdGVkLlxuQEAgLTY4NSw2ICs3MDMsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XG4gXHR1bnNpZ25lZCBoYXNfZml4dXBzOjE7XG4gXHR1bnNpZ25lZCBzdXNwZW5kZWQ6MTtcbiBcdHVuc2lnbmVkIHN1c3BlbmRlZF9ieV9tZGlvX2J1czoxO1xuK1x0dW5zaWduZWQgbWRpb19idXNfbm90aWZpZWQ6MTtcbiBcdHVuc2lnbmVkIHN5c2ZzX2xpbmtzOjE7XG4gXHR1bnNpZ25lZCBsb29wYmFja19lbmFibGVkOjE7XG4gXHR1bnNpZ25lZCBkb3duc2hpZnRlZF9yYXRlOjE7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDoyMi4zNzUxMTU1MjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzczMzY1NzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgUmVhbHRlayBSVEw4MzgwL1JUTDgzOTAgTURJTyBDb250cm9sbGVyIENvZGUqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxgLCBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCwgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvcGh5LmhgLiBUaGlzIGlzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MzgwIGFuZCBSVEw4MzkwIE1ESU8gY29udHJvbGxlcnMsIHdoaWNoIGlzIGZpbmUsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGNvZGUgaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIHRlc3QgZW52aXJvbm1lbnQsIGxpa2UgUUVNVSBvciBHQ0UuIEl0J3MgYWRkaW5nIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBgbWlpX2J1c2Agc3RydWN0IGFuZCBjYWxsaW5nIHRoZW0gZnJvbSBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIFRoZXNlIGNhbGxiYWNrcyBhcmUgc3BlY2lmaWMgdG8gdGhlIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBkcml2ZXIsIGVuYWJsaW5nL2Rpc2FibGluZyBoYXJkd2FyZSBwb2xsaW5nLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIEkgZXZlbiBnZXQgdGhlIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBkcml2ZXIgdG8gcHJvYmU/IEl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHNvIGl0IG5lZWRzIGEgcGxhdGZvcm0gZGV2aWNlIGluc3RhbmNlLiBUaGVzZSB1c3VhbGx5IGNvbWUgZnJvbSBEZXZpY2UgVHJlZSAoRFQpIG92ZXJsYXlzLCBidXQgSSBrbm93IHN5emthbGxlciBkb2Vzbid0IGdlbmVyYWxseSBsb2FkIERUIG92ZXJsYXlzIHVubGVzcyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZCBmb3IgaXQsIGFuZCBJIGhhdmVuJ3QgY29uZmlndXJlZCBmb3IgaXQuIFN5emthbGxlciB1c3VhbGx5IHJlbGllcyBvbiBhIGZldyB0ZWNobmlxdWVzIGZvciBkZXZpY2UgY3JlYXRpb24uIERvZXMgaXQgaGF2ZSBhIHNwZWNpYWwgc3lzY2FsbCBsaWtlIGBzeXpfZGV2X2NyZWF0ZWAsIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAgb3Igc2ltaWxhcj8gTm8sIEkgZG9uJ3QgdGhpbmsgaXQgZG9lcywgb3IgYXQgbGVhc3Qgbm90IGluIGEgZ2VuZXJpYyB3YXkuIEkgYW0gcHJldHR5IHN1cmUgaXQgdXNlcyBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5YCBvciBgc3l6X2luaXRfbmV0X3NvY2tldGAgZm9yIGNyZWF0aW5nIHBsYXRmb3JtIGRldmljZXMsIGlmIGEgc3BlY2lmaWMgc3Vic3lzdGVtIGFsbG93cyBpdC5cblxuQWgsIGJ1dCB3YWl0Li4uIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBhcmUgY29yZSBQSFkgZnVuY3Rpb25zLiAqVGhvc2UqIGFyZSBhbHdheXMgcmVhY2hhYmxlIGlmICphbnkqIFBIWSBpcyBhdHRhY2hlZCBvciBkZXRhY2hlZC4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyB0aG9zZSB0byBjYWxsIHRoZSBuZXcgY2FsbGJhY2tzLCBidXQgb25seSBpZiB0aGV5J3JlIHNldC4gU28sIHRoZSBuZXcgY29kZSBwYXRoIHdpdGhpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIG9yIGBwaHlfZGV0YWNoYCAqaXMqIHJlYWNoYWJsZSBpZiAqYW55KiBQSFkgaXMgYXR0YWNoZWQsIGJ1dCBvbmx5IGRvZXMgc29tZXRoaW5nIGlmIHRoZSBgbm90aWZ5X3BoeV9hdHRhY2hgIG9yIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIGFyZSBzZXQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZHJpdmVycyBzZXR0aW5nIHRob3NlIGNhbGxiYWNrcz8gTm8sIHRoZSBwYXRjaCBvbmx5IHNldHMgdGhlbSBpbiB0aGUgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGRyaXZlci5cblxuU28gdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGUgcHJvYmUgZm9yIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBiZSB0cmlnZ2VyZWQ/IFRoZSBkcml2ZXIgbWF0Y2hlcyBgXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1wiYCwgYFwicmVhbHRlayxydGw4MzkxLW1kaW9cImAsIGBcInJlYWx0ZWsscnRsOTMwMS1tZGlvXCJgLCBhbmQgYFwicmVhbHRlayxydGw5MzExLW1kaW9cImAuIFVubGVzcyB3ZSBhcmUgcnVubmluZyBvbiBhIFJlYWx0ZWsgU29DIG9yIG1hbmFnZSB0byBjcmVhdGUgdGhlIHBsYXRmb3JtIGRldmljZSwgaXRzIHByb2JlIGZ1bmN0aW9uIHdvbid0IGJlIGNhbGxlZC4gU3l6a2FsbGVyIGRvZXNuJ3QgZ2VuZXJhbGx5IGluamVjdCBhcmJpdHJhcnkgRFQgbm9kZXMsIHNvIGl0J3MgdW5saWtlbHkgaXQncyBnZW5lcmF0aW5nIHRoZSBEVCBub2RlIGZvciB0aGlzIGNvbnRyb2xsZXIuXG5cbkNhbiBJIGNyZWF0ZSB0aGUgcGxhdGZvcm0gZGV2aWNlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcz8gTm8sIHRoYXQncyBub3QgcG9zc2libGUuIEkga25vdyB0aGVyZSdzIGBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJgLCBidXQgdGhhdCdzIGtlcm5lbC1pbnRlcm5hbC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgZHJpdmVyIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBTb0NzLCBhbmQgaXQgaXMgaGlnaGx5IHVubGlrZWx5IHRvIHByb2JlIGluIGEgZ2VuZXJpYyBRRU1VL0dDRSBlbnZpcm9ubWVudCwgSSBkb24ndCB0aGluayBJIGNhbiB0cmlnZ2VyIHRoZSBuZXcgY29kZS4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcsIHRob3VnaCwganVzdCB0byBiZSB0aG9yb3VnaC4gSSdsbCBsb29rIGF0IGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIGZvciBgTURJT19SRUFMVEVLX1JUTDkzMDBgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBpdCdzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTcxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAwOjUwOjM2LjEwODc3NTU4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE4ODY1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0xNjY9Y29uZmlnIE1ESU9fSVBRODA2NFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3My1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTc0OmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzUtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDozNi41NjA2NjkxMzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTYxNjExMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgTURJT19SRUFMVEVLX1JUTDkzMDBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgYnJlYWsgZG93biB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgbW9kdWxlLiBBcyBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhcmNoaXRlY3R1cmUsIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiBpdCByZWxpZXMgb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBkZWJ1Z2dpbmcsIHBvcnRpbmcsIG9yIGV2ZW4ganVzdCB1bmRlcnN0YW5kaW5nIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEknbSB0aGlua2luZyBhYm91dCB0aGUgbGF5ZXJzLi4uIGRvZXMgaXQgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnM/IEtlcm5lbCBkcml2ZXJzPyBQb3NzaWJseSBsb3ctbGV2ZWwgcmVnaXN0ZXIgZGVmaW5pdGlvbnM/IEFuZCB3aGF0IGFib3V0IHBvdGVudGlhbCB1c2VyLXNwYWNlIGNvbXBvbmVudHMgb3IgY29uZmlndXJhdGlvbiBmaWxlcz8gSSBuZWVkIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgbWFwIG9mIGFsbCB0aGUgYnVpbGRpbmcgYmxvY2tzIHRoYXQgbWFrZSB1cCB0aGlzIG1vZHVsZSBzbyB0aGF0IGl0IGNhbiBiZSBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTYwMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAwOjUwOjM5LjUyMjI4MjE5NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjE3Njg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0xNjY9Y29uZmlnIE1ESU9fSVBRODA2NFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3My1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTc0OmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzUtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDozOS42MDg0NjMyMDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQzMTczODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIEkgaGF2ZSBhIHN0cm9uZyBodW5jaCB0aGF0IHRoZSBgZHJpdmVycy9uZXQvbWRpby9LY29uZmlnYCBmaWxlIGlzIHdoZXJlIHRvIHN0YXJ0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhcm91bmQgbGluZSAxNzQuIFRoYXQncyBhIHJlYXNvbmFibGUgYXJlYSBmb3IgbWUgdG8gYmVnaW4gbXkgZXhwbG9yYXRpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIE1ESU8gZHJpdmVyIGNvbmZpZ3VyYXRpb24gdGhlcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGJhc2UgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHByb2NlZWQuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlIGluZm9ybWF0aW9uIEkgYW0gc2VhcmNoaW5nIGZvciB3aWxsIGJlIGFyb3VuZCB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTU5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDA6NTA6NDIuMzUxNjM5ODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXHRoZWxwXFxuIDE3MTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgbmV0d29ya1xcbiAxNzI6XFx0XFx0ICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIElQUTgwNjQgU29DXFxuIDE3MzpcXHRcXG4gMTc0OlxcdGNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbiAxNzU6XFx0XFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbiAxNzY6XFx0XFx0ZGVwZW5kcyBvbiBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVFxcbiAxNzc6XFx0XFx0aGVscFxcbiAxNzg6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgTURJTyBpbnRlcmZhY2UgZm91bmQgaW4gdGhlIFJlYWx0ZWtcXG4gMTc5OlxcdFxcdCAgUlRMOTMwMCBmYW1pbHkgb2YgRXRoZXJuZXQgc3dpdGNoZXMgd2l0aCBpbnRlZ3JhdGVkIFNvQy5cXG4gMTgwOlxcdFxcbiAxODE6XFx0Y29uZmlnIE1ESU9fUkVHTUFQXFxuIDE4MjpcXHRcXHR0cmlzdGF0ZVxcbiAxODM6XFx0XFx0aGVscFxcbiAxODQ6XFx0XFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNpbmcgTURJTyBkZXZpY2VzIHRoYXQgYXJlIG5vdCBzaXR0aW5nIG9uIGFcXG4gMTg1OlxcdFxcdCAgcmVndWxhciBNRElPIGJ1cywgYnV0IHN0aWxsIGV4cG9zZXMgdGhlIHN0YW5kYXJkIDgwMi4zIHJlZ2lzdGVyXFxuIDE4NjpcXHRcXHQgIGxheW91dC4gSXQncyByZWdtYXAtYmFzZWQgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBvbiBpbnRlZ3JhdGVkLFxcbiAxODc6XFx0XFx0ICBtZW1vcnktbWFwcGVkIFBIWXMsIFNQSSBQSFlzIGFuZCBzbyBvbi4gQSBuZXcgdmlydHVhbCBNRElPIGJ1cyBpc1xcbiAxODg6XFx0XFx0ICBjcmVhdGVkLCBhbmQgaXRzIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBhcmUgbWFwcGVkIHRvIHRoZSB1bmRlcmx5aW5nXFxuIDE4OTpcXHRcXHQgIHJlZ21hcC4gVXNlcnMgd2lsbGluZyB0byB1c2UgdGhpcyBkcml2ZXIgbXVzdCBleHBsaWNpdGx5IHNlbGVjdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDo0Mi4zNTE3NDk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NTc3Nzg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWx0ZWsgUlRMOTMwMCBEcml2ZXIncyBBY3RpdmF0aW9uKipcblxuT2theSwgc28gdGhlIFJlYWx0ZWsgUlRMOTMwMCBkcml2ZXIncyBhY3RpdmF0aW9uIGhpbmdlcyBvbiBlaXRoZXIgYE1BQ0hfUkVBTFRFS19SVExgIG9yLCBtb3JlIGNvbW1vbmx5LCBgQ09NUElMRV9URVNUYC4gIEV2ZW4gd2hlbiB3ZSBmb3JjZSB0aGUgaW5jbHVzaW9uIHZpYSBgQ09NUElMRV9URVNUYCwgaXQncyBzdGlsbCBhICpwbGF0Zm9ybSogZHJpdmVyLiBUaGF0J3MgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLiBUaGUgcmVhbCBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiB0aGUgZHJpdmVyIGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQgaW4gdGhhdCBzY2VuYXJpbz8gTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCwgdG8gbG9vayBmb3IgdGhhdCBhbGwtaW1wb3J0YW50IGBtb2R1bGVfcGxhdGZvcm1fZHJpdmVyYCBjYWxsLiBUaGlzIHdpbGwgY29uZmlybSBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgcGxhdGZvcm0gYW5kIHdoZXRoZXIgdGhlIHByb2JpbmcgbWVjaGFuaXNtIGlzIHNldCB1cCBjb3JyZWN0bHksIHJlZ2FyZGxlc3Mgb2YgdGhlIGBDT01QSUxFX1RFU1RgIGZsYWcncyBwcmVzZW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgcGxhdGZvcm0gcmVnaXN0cmF0aW9uIG9mIHRoaXMgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUyMSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDA6NTA6NDUuNjA3NTI5NTA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODI2ODU5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGxhdGZvcm1fZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9MTEzMD1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvdHRvX2VtZGlvX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTM3LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoxMTM4Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIob3R0b19lbWRpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTM5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDo0NS43MDU4MDMzODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQzMjE0NzUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBEcml2ZXIgQ29kZSBpbiBhIEZ1enppbmcgQ29udGV4dCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIHBsYXRmb3JtIGRyaXZlci4gVGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgaW4gb3VyIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBsaWtlIFFFTVUgeDg2XzY0IG9yIGFybTY0LCB1bmxlc3Mgd2UgaGF2ZSBhIHZlcnkgc3BlY2lmaWMgYm9hcmQgbW9kZWwgY29uZmlndXJlZCB0byBpbnN0YW50aWF0ZSB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlLCBvciBpZiBzeXprYWxsZXIgaGFzIGEgbWVjaGFuaXNtIHRvIGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzIG9uIHRoZSBmbHksIHRoZSBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGNhbGxlZC4gQW5kIGFzIGZhciBhcyBJIGtub3csIHN5emthbGxlciBkb2Vzbid0IGhhdmUgYSAqZ2VuZXJpYyogbWV0aG9kIHRvIGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzLiBXZSBjYW4gaW5qZWN0IFVTQiBkZXZpY2VzIHdpdGggZHVtbXlfaGNkIGFuZCBQQ0kgZGV2aWNlcyB0aHJvdWdoIGBzeXpfcGNpXypgLCBidXQgbm90IGp1c3QgYW55IHBsYXRmb3JtIGRldmljZSwgdW5sZXNzIHRoZXJlJ3Mgc29tZSBzcGVjaWFsIHN1YnN5c3RlbSBpbnRlcmZhY2UgZXhwb3NlZCwgbGlrZSB3aXRoIG1hYzgwMjExX2h3c2ltIG9yIG5ldGRldnNpbS5cblxuU28sIHJlYWxpc3RpY2FsbHksIHRoZSBjb2RlIHdpdGhpbiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgaXMgdW5yZWFjaGFibGUuIFRoYXQncyB0aGUgY3J1eCBvZiBpdC5cblxuQnV0IHdoYXQgYWJvdXQgdGhlIGNoYW5nZXMgaW4gYHBoeV9kZXZpY2UuY2A/IFRob3NlIGFyZSB0aGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEkga25vdyB0aGF0IGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBhcmUgcmVhY2hhYmxlLCBidXQgd2hhdCBhYm91dCB0aGUgbmV3IGNvZGUgdGhhdCdzIGJlZW4gYWRkZWQ/XG5cbmBgYGNcblx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuXHRcdGVyciA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xuXHRcdGlmIChlcnIpXG5cdFx0XHRnb3RvIGVycm9yO1xuXHRcdHBoeWRldi1cdTAwM2VtZGlvX2J1c19ub3RpZmllZCA9IHRydWU7XG5cdH1cbmBgYFxuXG5Mb29raW5nIGF0IHRoaXMsIGl0IGxvb2tzIGxpa2UgdGhpcyBjb2RlIHdpbGwgb25seSBiZSBleGVjdXRlZCBpZiBhIGBub3RpZnlfcGh5X2F0dGFjaGAgZnVuY3Rpb24gcG9pbnRlciBpcyBzZXQgb24gdGhlIGBtZGlvLmJ1c2AuIEJ1dCwgSSdtIHByZXR0eSBjZXJ0YWluIG5vIGN1cnJlbnRseSByZWFjaGFibGUgZHJpdmVyIHNldHMgdGhhdCBwb2ludGVyLiBTbyB0aGlzIG5ldyBjb2RlIGlzIGVmZmVjdGl2ZWx5IGRlYWQsIG5ldmVyIGV4ZWN1dGVkIGluIG91ciBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5Ib2xkIG9uLCBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gSXMgdGhlcmUgYW55IG90aGVyIGRyaXZlciB0aGF0IEknbSBtaXNzaW5nIHRoYXQgYWN0dWFsbHkgZG9lcyBzZXQgYG5vdGlmeV9waHlfYXR0YWNoYD8gSSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNvZGUgYWdhaW4ganVzdCB0byBiZSBjZXJ0YWluLiBMZXQgbWUgZG8gYSBxdWljayBzY2FuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk5MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDo1Mi4xMzc5NTQ1MjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzk4NjY1NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm90aWZ5X3BoeV9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz03NTI9c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc2Ny1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzY4OnN0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03Njkte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTgxNj1zdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04NDQtXFx0YnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjg0NTpcXHRidXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODQ2LVxcdGJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzUyPWludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODc4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg3OTpcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4ODA6XFx0XFx0ZXJyID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4ODEtXFx0XFx0aWYgKGVycilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9MzYzPXN0cnVjdCBtaWlfYnVzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMzc5LVxcdC8qKlxcbmluY2x1ZGUvbGludXgvcGh5Lmg6MzgwOlxcdCAqIEBub3RpZnlfcGh5X2F0dGFjaDogUGVyZm9ybSBwb3N0LWF0dGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTM4MS1cXHQgKiAgIGRyaXZlcnMuIENhbGxlZCBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpIHJpZ2h0IGFmdGVyIHBoeV9pbml0X2h3KClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMzg3LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvcGh5Lmg6Mzg4OlxcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTM4OS1cXHQvKipcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMzkyLVxcdCAqICAgYXJlIGNsZWFuZWQgdXAuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0IGFuZCBtYXkgc2xlZXAuIE9ubHlcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjM5MzpcXHQgKiAgIGludm9rZWQgaWYgQG5vdGlmeV9waHlfYXR0YWNoIHdhcyBwcmV2aW91c2x5IGNhbGxlZCBhbmQgc3VjY2VlZGVkLlxcbmluY2x1ZGUvbGludXgvcGh5LmgtMzk0LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDo1NC44Nzc4Mjk1MjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4NjE1OTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIGluIHRoZSBSZWFsdGVrIE1ESU8gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlRoaXMgbG9va3MgbGlrZSBjb2RlIHRoYXQncyBub3QgZ29pbmcgdG8gZ2V0IGhpdCBieSBmdXp6aW5nLlwiIEl0IGFwcGVhcnMgdGhhdCB0aGUgb25seSBkcml2ZXIgc2V0dGluZyBgbm90aWZ5X3BoeV9hdHRhY2hgIGlzIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gTm93LCB0aGF0J3MgYSBwbGF0Zm9ybSBkcml2ZXIg4oCTIFJlYWx0ZWsgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHNwZWNpZmljYWxseS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXNlIHR5cGVzIG9mIHBsYXRmb3JtIGRyaXZlcnMgYXJlIGluY3JlZGlibHkgZGlmZmljdWx0LCBpZiBub3QgaW1wb3NzaWJsZSwgdG8gaW5zdGFudGlhdGUgaW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGluZ3MgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBqdXN0IHdvbid0IGN1dCBpdC4gWW91IHJlYWxseSBuZWVkIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBhIHBlcmZlY3RseSBjcmFmdGVkIGRldmljZSB0cmVlLlxuXG5MZXQncyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIENhbiB3ZSBzb21laG93IGZvcmNlIHRoaXMgZHJpdmVyIHRvIHByb2JlPyBTaW5jZSBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyLCBTeXprYWxsZXIgd29uJ3QgYmUgYWJsZSB0byBqdXN0IG1hZ2ljYWxseSB0cmlnZ2VyIGl0IHVubGVzcyBpdCdzIHByb3Blcmx5IGluc3RhbnRpYXRlZC4gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gQ2FuIGl0IGJlIGJyb3VnaHQgdXAgdmlhIGFuIEkyQyBvciBTUEkgZGV2aWNlPyBOb3BlLiBJdCdzIGEgcGxhdGZvcm0gZGV2aWNlLCBzbyBpdCdzIG5vdCBnb2luZyB0byBhdHRhY2ggdG8gdGhvc2UgYnVzZXMuIFdoYXQgYWJvdXQgYSBQQ0kgZGV2aWNlPyBTdGlsbCBuby4gQW5kIGRlZmluaXRlbHkgbm90IFVTQi4gU28geWVhaCwgSSdtIHByZXR0eSBjb25maWRlbnQgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBkcml2ZXIgY2FuJ3QgYmUgcmVhY2hlZCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gVGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLCBpbmNsdWRpbmcgdGhlIGFkZGVkIGBub3RpZnlfcGh5X2F0dGFjaGAgY2FsbGJhY2tzLCBhcmUgZWZmZWN0aXZlbHkgZGVhZCBjb2RlIGluIGEgZnV6emluZyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU2MSwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDA6NTE6MDEuMzYzOTkxNDYzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAgYW5kIFJUTDgzOTAgTURJTyBjb250cm9sbGVycyBpbiB0aGUgbWRpby1yZWFsdGVrLXJ0bDkzMDAgcGxhdGZvcm0gZHJpdmVyLCBhbmQgYWRkcyBub3RpZnlfcGh5X2F0dGFjaC9ub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSB3aGljaCBhcmUgb25seSB1c2VkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBTaW5jZSB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBSZWFsdGVrIFNvQ3MsIGl0IGNhbm5vdCBiZSBwcm9iZWQgaW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChsaWtlIFFFTVUgb3IgR0NFKSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIHN1cHBvcnQuIFRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gY2hhbmdlcyBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgYmVjYXVzZSBubyByZWFjaGFibGUgZHJpdmVyIHNldHMgdGhlc2UgY2FsbGJhY2tzLiBUaHVzLCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIGluIHRoZSBtZGlvLXJlYWx0ZWstcnRsOTMwMCBwbGF0Zm9ybSBkcml2ZXIsIGFuZCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoL25vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIHdoaWNoIGFyZSBvbmx5IHVzZWQgYnkgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIFNpbmNlIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIFJlYWx0ZWsgU29DcywgaXQgY2Fubm90IGJlIHByb2JlZCBpbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgKGxpa2UgUUVNVSBvciBHQ0UpIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgc3VwcG9ydC4gVGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBjaGFuZ2VzIGFyZSBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBiZWNhdXNlIG5vIHJlYWNoYWJsZSBkcml2ZXIgc2V0cyB0aGVzZSBjYWxsYmFja3MuIFRodXMsIHRoZSBtb2RpZmllZCBjb2RlIGNhbm5vdCBiZSBleGVjdXRlZCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5xvt6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 00:29:25 +0000 UTC FinishedAt: 2026-07-23 00:51:02 +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+CgkJCTx0ZD4yMDI2LzA3LzIzIDAwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgUmVhbHRlayBSVEw4MzgwIGFuZCBSVEw4MzkwIE1ESU8gY29udHJvbGxlcnMgaW4gdGhlIG1kaW8tcmVhbHRlay1ydGw5MzAwIHBsYXRmb3JtIGRyaXZlciwgYW5kIGFkZHMgbm90aWZ5X3BoeV9hdHRhY2gvbm90aWZ5X3BoeV9kZXRhY2ggY2FsbGJhY2tzIHRvIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gd2hpY2ggYXJlIG9ubHkgdXNlZCBieSB0aGlzIHNwZWNpZmljIGRyaXZlci4gU2luY2UgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgUmVhbHRlayBTb0NzLCBpdCBjYW5ub3QgYmUgcHJvYmVkIGluIGEgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCAobGlrZSBRRU1VIG9yIEdDRSkgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBvciBkZXZpY2UgdHJlZSBzdXBwb3J0LiBUaGUgY29yZSBQSFkgc3Vic3lzdGVtIGNoYW5nZXMgYXJlIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGJlY2F1c2Ugbm8gcmVhY2hhYmxlIGRyaXZlciBzZXRzIHRoZXNlIGNhbGxiYWNrcy4gVGh1cywgdGhlIG1vZGlmaWVkIGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDExMGIyMmY4NDVkOGZhZDk0YTA2ZTU5YzM3ZjJjZTA4ZjY0OGFjODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAwMDo1MDoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbmluZGV4IDI3MWUwNWJhZTljNTc0Li42N2UwYjIzYTg0NzBlYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5AQCAtNCw3ICYjNDM7NCw3IEBAXG4gJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCNcbiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiBcbi10aXRsZTogUmVhbHRlayBSVEw5MzAwIE1ESU8gQ29udHJvbGxlclxuJiM0Mzt0aXRsZTogUmVhbHRlayBPdHRvIFN3aXRjaGVzIEV0aGVybmV0IE1ESU8gQ29udHJvbGxlclxuIFxuIG1haW50YWluZXJzOlxuICAgLSBDaHJpcyBQYWNraGFtIFx1MDAzY2NocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uelx1MDAzZVxuQEAgLTEyLDYgJiM0MzsxMiwxNiBAQCBtYWludGFpbmVyczpcbiBwcm9wZXJ0aWVzOlxuICAgY29tcGF0aWJsZTpcbiAgICAgb25lT2Y6XG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW9cbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvXG4gICAgICAgLSBpdGVtczpcbiAgICAgICAgICAgLSBlbnVtOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW9cbkBAIC0yNCw2ICYjNDM7MzQsOCBAQCBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTMtbWRpb1xuICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cbiYjNDM7ICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMS1tZGlvXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5pbmRleCBhZmQ1MmExY2Q3ZjgzMS4uYWViYzc2YWU1ZTU2MGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuQEAgLTM1LDYgJiM0MzszNSw3NCBAQFxuICAqXG4gICogVGhlIGRyaXZlciB3b3JrcyBvdXQgdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIE1ESU8gYnVzIGRlc2NyaWJlZCBpbiBkZXZpY2UgdHJlZSBhbmQgcGhhbmRsZXMgb25cbiAgKiB0aGUgZXRoZXJuZXQtcG9ydHMgcHJvcGVydHkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBkZXZpY2VzIGhhdmUgYSBoYXJkd2FyZSBwb2xsaW5nIHVuaXQgdGhhdCBydW5zIGluIHRoZSBiYWNrZ3JvdW5kIHdpdGhvdXQgYW55IENQVSBsb2FkLiBJdFxuJiM0MzsgKiBjb25zdGFudGx5IHNjYW5zIHRoZSBNRElPIGJ1cyBhbmQgdGhlIGF0dGFjaGVkIFBIWXMgYW5kIHVwZGF0ZXMgdGhlIE1BQyBzdGF0dXMgcmVnaXN0ZXJzLlxuJiM0MzsgKlxuJiM0MzsgKiBIb3cgZG9lcyB0aGUgcG9sbGluZyB3b3JrP1xuJiM0MzsgKlxuJiM0MzsgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZlxuJiM0MzsgKiB0aGUgYXNzb2NpYXRlZCBidXMvYWRkcmVzcyBpcyBhY3RpdmUgb3Igbm90LiBUaGUgaGFyZHdhcmUgcnVucyBhIHRpZ2h0IGxvb3Agb3ZlciB0aGlzIGFuZCBmb3JcbiYjNDM7ICogZWFjaCBzZXQgcG9sbGluZyBiaXQgaXQgaXNzdWVzIGEgc3RhdHVzIGNoZWNrIGZvciB0aGUgUEhZLiBBdHRhY2hpbmcgYSBsb2dpYyBhbmFseXplciB0byB0aGVcbiYjNDM7ICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOlxuJiM0MzsgKlxuJiM0MzsgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuJiM0MzsgKlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDMxLCAweDApO1x0cGh5X3JlYWQocGh5LCAwKTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1x0cGh5X3JlYWQocGh5LCAxKTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcdHBoeV9yZWFkKHBoeSwgNCk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcdHBoeV9yZWFkKHBoeSwgNSk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDE0KTtcdFx0cGh5X3JlYWQocGh5LCA2KTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1x0cGh5X3JlYWQocGh5LCA5KTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcdHBoeV9yZWFkKHBoeSwgMTApO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDE1KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMTQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgOSk7XHRcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMTApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMTUpO1x0XHRwaHlfcmVhZChwaHksIDE0KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA0KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDUpO1x0XHRwaHlfcmVhZChwaHksIDE0KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgNik7XG4mIzQzOyAqXG4mIzQzOyAqIEZyb20gdGhlIGFib3ZlIHNuaXBwZXRzIGl0IHBvbGxzIE1ESU9fQU5fRUVFX0FEViBhbmQgTURJT19BTl9FRUVfTFBBQkxFIHZpYSBDNDUgb3ZlciBDMjIuIEFzXG4mIzQzOyAqIG9mIG5vdyBpdCBpcyB1bmNsZWFyIGhvdyB0aGUgaGFyZHdhcmUgZGVjaWRlcyBpZiBhIFBIWSBzdXBwb3J0cyB0aGVzZSByZWdpc3RlcnMuIEFmdGVyIG9uZSBQSFlcbiYjNDM7ICogc3RhdHVzIGlzIHJlYWQsIHRoZSBwb2xsaW5nIGVuZ2luZSBnb2VzIG92ZXIgdG8gdGhlIG5leHQgUEhZLiBCYXNpY2FsbHkgdGhlIGJ1cyBpcyBhbHdheXMgYnVzeVxuJiM0MzsgKiBhbmQgdGhlIE1BQyBzdGF0dXMgaXMgdXBkYXRlZCBpbiByZWFsLXRpbWUuXG4mIzQzOyAqXG4mIzQzOyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/XG4mIzQzOyAqXG4mIzQzOyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXJcbiYjNDM7ICogc2V0cyBhIFwmIzM0O3J1biBjb21tYW5kIG5vd1wmIzM0OyBiaXQuIEJldHdlZW4gdHdvIHBvbGxpbmcgc2VxdWVuY2VzIGZvciBkaWZmZXJlbnQgUEhZcyB0aGUgaGFyZHdhcmVcbiYjNDM7ICogY2hlY2tzIGlmIGEgdXNlciBjb21tYW5kIG5lZWRzIHRvIHJ1biBhbmQgc2VuZHMgaXQgb250byB0aGUgYnVzLiBBZnRlcndhcmRzIGl0IHNpbXBseSBjb250aW51ZXNcbiYjNDM7ICogaXRzIHBvbGxpbmcgd29yay4gSW5zcGVjdGluZyB0aGUgY29tbWFuZCBzZXF1ZW5jZSBmb3IgYSBwYWdlZCByZWFkIG9uIHRoZSBsb2dpYyBhbmFseXplciBnaXZlczpcbiYjNDM7ICpcbiYjNDM7ICpcdFJUTDgzODBcdFx0XHRcdFJUTDgzOTNcbiYjNDM7ICpcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1xuJiM0MzsgKlx0XHRcdFx0XHRwaHlfd3JpdGUocGh5LCAzMSwgMCk7XG4mIzQzOyAqXG4mIzQzOyAqIFdoYXQgZG9lcyB0aGlzIG1lYW4/XG4mIzQzOyAqXG4mIzQzOyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2VcbiYjNDM7ICogc3RheXMgdGhlIHNhbWUuIE9uIHRoZSBvbmUgaGFuZCB0aGF0IGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgTUFDIGxheWVyLCBvbiB0aGUgb3RoZXIgaGFuZCBpdFxuJiM0MzsgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS5cbiYjNDM7ICpcbiYjNDM7ICogLSBXaXRob3V0IHRoZSBwb2xsaW5nIGFuZCBhIHByb3BlciBNQUMgc3RhdHVzLCBzb21lIG9mIHRoZSBsaW5rIGhhbmRsaW5nIGZlYXR1cmVzIGRvIG5vdCB3b3JrLlxuJiM0MzsgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLlxuJiM0MzsgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsXG4mIzQzOyAqICAgcmVhZCB0aGUgcmlnaHQgZGF0YS4gT24gdGhlIFJUTDgzOHggcG9sbGluZyBzaW1wbHkgcmVzZXRzIGl0IHRvIHplcm8uIE90aGVyIGRldmljZXMgc2VlbVxuJiM0MzsgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyBcJiMzNDttYWdpY2FsbHlcJiMzNDsgaW4gdGhlIGJhY2tncm91bmQuXG4mIzQzOyAqIC0gQSBDNDUgb3ZlciBDMjIga2VybmVsIGFjY2VzcyBzZXF1ZW5jZSBpcyBtb3N0IGxpa2VseSB0byBmYWlsIGJlY2F1c2UgY2hhbmNlcyBhcmUgaGlnaCB0aGF0XG4mIzQzOyAqICAgdGhlIHBvbGxpbmcgZW5naW5lIG92ZXJ3cml0ZXMgcmVnaXN0ZXJzIDEzLzE0IGluIGJldHdlZW4uXG4mIzQzOyAqIC0gUEhZIGZpcm13YXJlIGxvYWRpbmcgY2FuIGhhdmUgaXNzdWVzLiBFc3BlY2lhbGx5IGlmIGEgUEhZIGlzIGRlc2lnbmVkIHRvIGV4cGVjdCBhIGNsZWFuXG4mIzQzOyAqICAgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgd2l0aG91dCBkZXZpYXRpb24uXG4mIzQzOyAqIC0gQW4gYWNjZXNzIHRvIG9uZSBQSFkgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyZWUgc2xvdCBvZiB0aGUgcG9sbGluZyBlbmdpbmUuXG4mIzQzOyAqXG4mIzQzOyAqIENvbmNsdXNpb246IFRoZSBSZWFsdGVrIE1ESU8gYnVzIGRyaXZlciBQSFkgYWNjZXNzIG11c3Qga25vdyBhbmQgaGFuZGxlIGFueSBpbnRlcmZlcmVuY2UgdGhhdFxuJiM0MzsgKiBhcmlzZXMgZnJvbSB0aGUgYWJvdmUgZGVzY3JpYmVkIGhhcmR3YXJlIHBvbGxpbmcuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuQEAgLTUwLDYgJiM0MzsxMTgsNTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbiBcbiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9CVVNFU1x0XHRcdDFcbiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9QT1JUU1x0XHRcdDI4XG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfR0xCX0NUUkxcdFx0XHQweGExMDBcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FXHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMFx0XHQweGExYjhcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMVx0XHQweGExYmNcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFJcdFx0R0VOTUFTSygyNCwgMjApXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRVx0XHRHRU5NQVNLKDE5LCAxNSlcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMTQsIDMpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9GQUlMXHRcdFx0MCAvKiBubyBmYWlsIGluZGljYXRvciAqL1xuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yXHRcdDB4YTFjMFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXHRcdDB4YTFjNFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTFx0XHRcdDB4YTE3Y1xuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMXHRcdDB4YTFjOFxuJiM0MztcbiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9CVVNFU1x0XHRcdDJcbiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9QQUdFU1x0XHRcdDgxOTJcbiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9QT1JUU1x0XHRcdDUyXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMXHRcdDB4MDNlY1xuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMXHRcdDB4MDNkY1xuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDksIDUpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRVx0XHRHRU5NQVNLKDIyLCAxMClcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRkFJTFx0XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURVx0XHRCSVQoMylcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRFx0XHRcdDBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDVcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyXHRcdDBcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19DVFJMXHRcdFx0MHgwM2UwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFXHRcdEdFTk1BU0soOCwgMClcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkxcdFx0MHgwM2YwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkxcdFx0XHQweDAzZjRcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXHRcdDB4MDNlNFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdIXHRcdDB4MDNlOFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MDNmY1xuJiM0MztcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTXHRcdFx0NFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QT1JUU1x0XHRcdDI4XG5AQCAtNzAsNiAmIzQzOzE4Miw3IEBAXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuICNkZWZpbmUgUlRMOTMwMF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcdFx0MHhjYjdjXG4mIzQzOyNkZWZpbmUgUlRMOTMwMF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhjYTkwXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFx0XHQweGNiODBcbiBcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTXHRcdFx0NFxuQEAgLTk1LDExICYjNDM7MjA4LDEzIEBAXG4gI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkxcdDB4MGMxOFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9BRERSX0NUUkxcdFx0MHgwYzc0XG4mIzQzOyNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcdFx0MHgwY2NjXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfU0VMXHRcdDB4MGM5Y1xuIFxuICNkZWZpbmUgUEhZX0NUUkxfQ01EXHRcdFx0XHRCSVQoMClcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9ERVZBRFx0XHRcdEdFTk1BU0soMjAsIDE2KVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX1JFR1x0XHRcdEdFTk1BU0soMTUsIDApXG4mIzQzOyNkZWZpbmUgUEhZX1ZFTkRPUl9SRUFMVEVLXHRcdFx0MHgwMDFjYzgwMFxuIFxuICNkZWZpbmUgTUFQX0FERFJTX1BFUl9SRUdcdFx0XHQ2XG4gI2RlZmluZSBNQVBfQklUU19QRVJfQUREUlx0XHRcdDVcbkBAIC0xMjUsNyAmIzQzOzI0MCw5IEBAIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYge1xuIFx0Y29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyAqaW5mbztcbiBcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiBcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKHBoeV9wb2xsLCBNQVhfUE9SVFMpO1xuIFx0REVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7XG4mIzQzO1x0dTE2IHBhZ2VbTUFYX1BPUlRTXTtcbiBcdHU4IHNtaV9idXNbTUFYX1BPUlRTXTtcbiBcdHU4IHNtaV9hZGRyW01BWF9QT1JUU107XG4gXHRib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTtcbkBAIC0xNDIsNiAmIzQzOzI1OSw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xuIFx0dTggbnVtX2J1c2VzO1xuIFx0dTggbnVtX3BvcnRzO1xuIFx0dTE2IG51bV9wYWdlcztcbiYjNDM7XHR1MzIgcG9sbF9jdHJsO1xuIFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XG4gXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuIFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuQEAgLTE3Nyw2ICYjNDM7Mjk1LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpXG4gXHRyZXR1cm4gY2hhbi1cdTAwM2Vwcml2O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBwcml2LVx1MDAzZWluZm8tXHUwMDNlcG9sbF9jdHJsICYjNDM7IChwb3J0IC8gMzIpICogNCxcbiYjNDM7XHRcdFx0XHQgIEJJVChwb3J0ICUgMzIpLCBhY3RpdmUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRcdFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxuIHtcbkBAIC0xODUsOSAmIzQzOzMxMSw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHR1MzIgY21kc3RhdGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibGUgd3JvbmcgKi9cbiYjNDM7XHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMjcsNyAmIzQzOzM1Myw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cdTAwM2VyZWdtYXAsIGluZm8tXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXG4tXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTI2NCwxMyAmIzQzOzM5MCwxMjMgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXHUwMDNlaW5mby1cdTAwM2VjbWRfd3JpdGUsIGNtZF9kYXRhKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuZXh0X3BhZ2VcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuZXh0X3BhZ2VcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuJiM0MztcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiB7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuIFx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuIFx0fTtcbiBcbkBAIC0yODQsNyAmIzQzOzUyMCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiBcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbiBcdH07XG5AQCAtMzI0LDcgJiM0Mzs1NjAsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdVxuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5icm9hZGNhc3RcdD0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLFxuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdH07XG4gXG4gXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDkzMTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuQEAgLTMzNiw3ICYjNDM7NTcyLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuIFx0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuIFx0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbkBAIC0zODIsOCAmIzQzOzYxOCwxMiBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcbiBcdGlmIChwb3J0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4mIzQzO1x0XHRpZiAocmVnbnVtID09IDMxKVxuJiM0MztcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2VwYWdlW3BvcnRdO1xuJiM0MztcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcdTAwMjZ2YWx1ZSk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHJldCA/IHJldCA6IHZhbHVlO1xuIH1cbkBAIC0zOTcsOCAmIzQzOzYzNywxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNlxuIFx0aWYgKHBvcnQgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGlmIChyZWdudW0gPT0gMzEpIHtcbiYjNDM7XHRcdFx0aWYgKHZhbHVlIFx1MDAzZT0gUkFXX1BBR0UocHJpdikpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSB2YWx1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNld3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDcxLDYgJiM0Mzs3MjAsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUEhZX1BBVENIX0RPTkUgZW5hYmxlcyBQSFkgY29udHJvbCB2aWEgU29DLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBQSFkgYWNjZXNzLCBpbmNsdWRpbmdcbiYjNDM7XHQgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4ge1xuIFx0dTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwO1xuQEAgLTUwNyw2ICYjNDM7NzY1LDU0IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtXHUwMDNlbWRpby5idXMpO1xuJiM0MztcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXHUwMDNlbWRpby5idXMsIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBwb3J0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlc21pX2J1c19pc19jNDVbY2hhbi1cdTAwM2VtZGlvX2J1c10gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICghcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi1cdTAwM2VwaHlfaWQsIFBIWV9WRU5ET1JfUkVBTFRFSykpKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7T25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4mIzQzO1x0XHRpZiAodGVzdF9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCkpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRfX3NldF9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtXHUwMDNlbWRpby5idXMpO1xuJiM0MztcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXHUwMDNlbWRpby5idXMsIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4mIzQzO1x0XHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdF9fY2xlYXJfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9lcnIoYnVzLVx1MDAzZXBhcmVudCwgXCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcblwmIzM0OywgcG9ydCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXG4ge1xuQEAgLTUzNiw2ICYjNDM7ODQyLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcbiBcdFx0YnVzLVx1MDAzZXdyaXRlID0gb3R0b19lbWRpb193cml0ZV9jMjI7XG4gXHR9XG4gXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuJiM0MztcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XG4mIzQzO1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbiYjNDM7XG4gXHRjaGFuID0gYnVzLVx1MDAzZXByaXY7XG4gXHRjaGFuLVx1MDAzZW1kaW9fYnVzID0gbWRpb19idXM7XG4gXHRjaGFuLVx1MDAzZXByaXYgPSBwcml2O1xuQEAgLTY1Miw2ICYjNDM7OTYxLDIxIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBwcml2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3BvcnRzOyBwb3J0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdFx0ZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG5AQCAtNjcxLDYgJiM0Mzs5OTUsMTAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcmVnbWFwKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VyZWdtYXApO1xuIFxuJiM0MztcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiBcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbkBAIC02OTYsNiAmIzQzOzEwMjQsNTEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0ge1xuJiM0MztcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4mIzQzO1x0LmNtZF9mYWlsID0gUlRMODM4MF9QSFlfQ1RSTF9GQUlMLFxuJiM0MztcdC5jbWRfcmVhZCA9IFJUTDgzODBfUEhZX0NUUkxfUkVBRCxcbiYjNDM7XHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcbiYjNDM7XHQuY21kX3JlZ3MgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSxcbiYjNDM7XHRcdC5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLFxuJiM0MztcdFx0LmlvX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMixcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsXG4mIzQzO1x0fSxcbiYjNDM7XHQubnVtX2J1c2VzID0gUlRMODM4MF9OVU1fQlVTRVMsXG4mIzQzO1x0Lm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLFxuJiM0MztcdC5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMODM4MF9TTUlfUE9MTF9DVFJMLFxuJiM0MztcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsXG4mIzQzO1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLFxuJiM0MztcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NSxcbiYjNDM7XHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMixcbiYjNDM7XHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0ge1xuJiM0MztcdC5jbWRfZmFpbCA9IFJUTDgzOTBfUEhZX0NUUkxfRkFJTCxcbiYjNDM7XHQuY21kX3JlYWQgPSBSVEw4MzkwX1BIWV9DVFJMX1JFQUQsXG4mIzQzO1x0LmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsXG4mIzQzO1x0LmNtZF9yZWdzID0ge1xuJiM0MztcdFx0LmJyb2FkY2FzdCA9IFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTCxcbiYjNDM7XHRcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxuJiM0MztcdFx0LmM0NV9kYXRhID0gUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwsXG4mIzQzO1x0XHQuZXh0X3BhZ2UgPSBSVEw4MzkwX1BIWVJFR19DVFJMLFxuJiM0MztcdFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1csXG4mIzQzO1x0XHQucG9ydF9tYXNrX2hpZ2ggPSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSCxcbiYjNDM7XHR9LFxuJiM0MztcdC5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUyxcbiYjNDM7XHQubnVtX3BhZ2VzID0gUlRMODM5MF9OVU1fUEFHRVMsXG4mIzQzO1x0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxuJiM0MztcdC5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbiYjNDM7XHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIsXG4mIzQzO1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxuJiM0MztcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLFxuJiM0MztcdC53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1LFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5hZGRyX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4gXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXG5AQCAtNzExLDYgJiM0MzsxMDg0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XG4gXHQubnVtX2J1c2VzID0gUlRMOTMwMF9OVU1fQlVTRVMsXG4gXHQubnVtX3BvcnRzID0gUlRMOTMwMF9OVU1fUE9SVFMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXG5AQCAtNzM2LDYgJiM0MzsxMTEwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXG4gXHQubnVtX3BvcnRzID0gUlRMOTMxMF9OVU1fUE9SVFMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuIFx0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcixcbiBcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMixcbiBcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSxcbkBAIC03NDQsNiAmIzQzOzExMTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsODM4MC1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsODM5MS1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM5MF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw5MzAxLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb185MzAwX2luZm8gfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHJ0bDkzMTEtbWRpb1wmIzM0OywgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LFxuIFx0e31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggOTRiMmU4NWUwMGEzNzkuLmE2MmMyZmY2YzJhYWJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE4NzYsNiAmIzQzOzE4NzYsMTMgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycm9yO1xuIFxuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbiYjNDM7XHRcdGVyciA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBlcnJvcjtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VtZGlvX2J1c19ub3RpZmllZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHBoeV9yZXN1bWUocGh5ZGV2KTtcbiBcbiBcdC8qKlxuQEAgLTE5MTksNiAmIzQzOzE5MjYsMTAgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcbiBcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4gXG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvX2J1c19ub3RpZmllZCBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKVxuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZW1kaW9fYnVzX25vdGlmaWVkID0gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKHBoeWRldi1cdTAwM2VkZXZsaW5rKSB7XG4gXHRcdGRldmljZV9saW5rX2RlbChwaHlkZXYtXHUwMDNlZGV2bGluayk7XG4gXHRcdHBoeWRldi1cdTAwM2VkZXZsaW5rID0gTlVMTDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTEwOTJjMzE3NWIzZGUuLjJkMzBlMDg3YTIzMzczIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTM3Niw2ICYjNDM7Mzc2LDIzIEBAIHN0cnVjdCBtaWlfYnVzIHtcbiBcdFx0XHQgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4gXHQvKiogQHJlc2V0OiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGJ1cyAqL1xuIFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBub3RpZnlfcGh5X2F0dGFjaDogUGVyZm9ybSBwb3N0LWF0dGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcbiYjNDM7XHQgKiAgIGRyaXZlcnMuIENhbGxlZCBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpIHJpZ2h0IGFmdGVyIHBoeV9pbml0X2h3KClcbiYjNDM7XHQgKiAgIGFuZCBiZWZvcmUgcGh5X3Jlc3VtZSgpLiBBdCB0aGlzIHBvaW50LCB0aGUgUEhZIGlzIHN0aWxsXG4mIzQzO1x0ICogICBzdXNwZW5kZWQsIGFuZCBAcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiBtYXkgYmUgTlVMTCAoZS5nLiBmb3JcbiYjNDM7XHQgKiAgIHN0YW5kYWxvbmUgUEhZcykuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0IGFuZCBtYXkgc2xlZXAuIFJldHVyblxuJiM0MztcdCAqICAgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZSAod2hpY2ggYWJvcnRzIHRoZVxuJiM0MztcdCAqICAgYXR0YWNoIHNlcXVlbmNlKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQG5vdGlmeV9waHlfZGV0YWNoOiBQZXJmb3JtIHByZS1kZXRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzXG4mIzQzO1x0ICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2RldGFjaCgpIGJlZm9yZSBkZXZpY2UgbGlua3MgYW5kIHJlc291cmNlc1xuJiM0MztcdCAqICAgYXJlIGNsZWFuZWQgdXAuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0IGFuZCBtYXkgc2xlZXAuIE9ubHlcbiYjNDM7XHQgKiAgIGludm9rZWQgaWYgQG5vdGlmeV9waHlfYXR0YWNoIHdhcyBwcmV2aW91c2x5IGNhbGxlZCBhbmQgc3VjY2VlZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4gXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXG4gXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcbkBAIC01NzQsNiAmIzQzOzU5MSw3IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcbiAgKiBAaGFzX2ZpeHVwczogU2V0IHRvIHRydWUgaWYgdGhpcyBQSFkgaGFzIGZpeHVwcy9xdWlya3MuXG4gICogQHN1c3BlbmRlZDogU2V0IHRvIHRydWUgaWYgdGhpcyBQSFkgaGFzIGJlZW4gc3VzcGVuZGVkIHN1Y2Nlc3NmdWxseS5cbiAgKiBAc3VzcGVuZGVkX2J5X21kaW9fYnVzOiBTZXQgdG8gdHJ1ZSBpZiB0aGlzIFBIWSB3YXMgc3VzcGVuZGVkIGJ5IE1ESU8gYnVzLlxuJiM0MzsgKiBAbWRpb19idXNfbm90aWZpZWQ6IFNldCB0byB0cnVlIGlmIHBvc3QtYXR0YWNoIGJ1cyBub3RpZmljYXRvbiBzdWNjZWVkZWQuXG4gICogQHN5c2ZzX2xpbmtzOiBJbnRlcm5hbCBib29sZWFuIHRyYWNraW5nIHN5c2ZzIHN5bWJvbGljIGxpbmtzIHNldHVwL3JlbW92YWwuXG4gICogQGxvb3BiYWNrX2VuYWJsZWQ6IFNldCB0cnVlIGlmIHRoaXMgUEhZIGhhcyBiZWVuIGxvb3BiYWNrZWQgc3VjY2Vzc2Z1bGx5LlxuICAqIEBkb3duc2hpZnRlZF9yYXRlOiBTZXQgdHJ1ZSBpZiBsaW5rIHNwZWVkIGhhcyBiZWVuIGRvd25zaGlmdGVkLlxuQEAgLTY4NSw2ICYjNDM7NzAzLDcgQEAgc3RydWN0IHBoeV9kZXZpY2Uge1xuIFx0dW5zaWduZWQgaGFzX2ZpeHVwczoxO1xuIFx0dW5zaWduZWQgc3VzcGVuZGVkOjE7XG4gXHR1bnNpZ25lZCBzdXNwZW5kZWRfYnlfbWRpb19idXM6MTtcbiYjNDM7XHR1bnNpZ25lZCBtZGlvX2J1c19ub3RpZmllZDoxO1xuIFx0dW5zaWduZWQgc3lzZnNfbGlua3M6MTtcbiBcdHVuc2lnbmVkIGxvb3BiYWNrX2VuYWJsZWQ6MTtcbiBcdHVuc2lnbmVkIGRvd25zaGlmdGVkX3JhdGU6MTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAgYW5kIFJUTDgzOTAgTURJTyBjb250cm9sbGVycyBpbiB0aGUgbWRpby1yZWFsdGVrLXJ0bDkzMDAgcGxhdGZvcm0gZHJpdmVyLCBhbmQgYWRkcyBub3RpZnlfcGh5X2F0dGFjaC9ub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSB3aGljaCBhcmUgb25seSB1c2VkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBTaW5jZSB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBSZWFsdGVrIFNvQ3MsIGl0IGNhbm5vdCBiZSBwcm9iZWQgaW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChsaWtlIFFFTVUgb3IgR0NFKSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIHN1cHBvcnQuIFRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gY2hhbmdlcyBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgYmVjYXVzZSBubyByZWFjaGFibGUgZHJpdmVyIHNldHMgdGhlc2UgY2FsbGJhY2tzLiBUaHVzLCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMTBiMjJmODQ1ZDhmYWQ5NGEwNmU1OWMzN2YyY2UwOGY2NDhhYzg1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMjMgMDA6NTA6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKaW5kZXggMjcxZTA1YmFlOWM1NzQuLjY3ZTBiMjNhODQ3MGVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCkBAIC00LDcgJiM0Mzs0LDcgQEAKICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjCiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKIAotdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXIKJiM0Mzt0aXRsZTogUmVhbHRlayBPdHRvIFN3aXRjaGVzIEV0aGVybmV0IE1ESU8gQ29udHJvbGxlcgogCiBtYWludGFpbmVyczoKICAgLSBDaHJpcyBQYWNraGFtICZsdDtjaHJpcy5wYWNraGFtQGFsbGllZHRlbGVzaXMuY28ubnomZ3Q7CkBAIC0xMiw2ICYjNDM7MTIsMTYgQEAgbWFpbnRhaW5lcnM6CiBwcm9wZXJ0aWVzOgogICBjb21wYXRpYmxlOgogICAgIG9uZU9mOgomIzQzOyAgICAgIC0gaXRlbXM6CiYjNDM7ICAgICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW8KJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW8KJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzgwLW1kaW8KJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5Mi1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvCiAgICAgICAtIGl0ZW1zOgogICAgICAgICAgIC0gZW51bToKICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW8KQEAgLTI0LDYgJiM0MzszNCw4IEBAIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW8KICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpbwogICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvCiYjNDM7ICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW8KICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvCiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpbwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKaW5kZXggYWZkNTJhMWNkN2Y4MzEuLmFlYmM3NmFlNWU1NjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCkBAIC0zNSw2ICYjNDM7MzUsNzQgQEAKICAqCiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvbgogICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LgomIzQzOyAqCiYjNDM7ICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0CiYjNDM7ICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy4KJiM0MzsgKgomIzQzOyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/CiYjNDM7ICoKJiM0MzsgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZgomIzQzOyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvcgomIzQzOyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlCiYjNDM7ICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOgomIzQzOyAqCiYjNDM7ICoJUlRMODM4MAkJCQlSVEw4MzkzCiYjNDM7ICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqCXBoeV93cml0ZShwaHksIDMxLCAweDApOwlwaHlfcmVhZChwaHksIDApOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDEzLCAweDcpOwlwaHlfcmVhZChwaHksIDEpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDE0LCAweDNjKTsJcGh5X3JlYWQocGh5LCA0KTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTsJcGh5X3JlYWQocGh5LCA1KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDE0KTsJCXBoeV9yZWFkKHBoeSwgNik7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CXBoeV9yZWFkKHBoeSwgOSk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpOwlwaHlfcmVhZChwaHksIDEwKTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTsJcGh5X3JlYWQocGh5LCAxNSk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNCk7CQlwaHlfd3JpdGUocGh5LCAxMywgMHg3KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDkpOwkJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMTApOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNSk7CQlwaHlfcmVhZChwaHksIDE0KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDApOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxKTsJCXBoeV93cml0ZShwaHksIDE0LCAweDNkKTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDQpOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCA1KTsJCXBoeV9yZWFkKHBoeSwgMTQpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgNik7CiYjNDM7ICoKJiM0MzsgKiBGcm9tIHRoZSBhYm92ZSBzbmlwcGV0cyBpdCBwb2xscyBNRElPX0FOX0VFRV9BRFYgYW5kIE1ESU9fQU5fRUVFX0xQQUJMRSB2aWEgQzQ1IG92ZXIgQzIyLiBBcwomIzQzOyAqIG9mIG5vdyBpdCBpcyB1bmNsZWFyIGhvdyB0aGUgaGFyZHdhcmUgZGVjaWRlcyBpZiBhIFBIWSBzdXBwb3J0cyB0aGVzZSByZWdpc3RlcnMuIEFmdGVyIG9uZSBQSFkKJiM0MzsgKiBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIEJhc2ljYWxseSB0aGUgYnVzIGlzIGFsd2F5cyBidXN5CiYjNDM7ICogYW5kIHRoZSBNQUMgc3RhdHVzIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLgomIzQzOyAqCiYjNDM7ICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz8KJiM0MzsgKgomIzQzOyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXIKJiM0MzsgKiBzZXRzIGEgJiMzNDtydW4gY29tbWFuZCBub3cmIzM0OyBiaXQuIEJldHdlZW4gdHdvIHBvbGxpbmcgc2VxdWVuY2VzIGZvciBkaWZmZXJlbnQgUEhZcyB0aGUgaGFyZHdhcmUKJiM0MzsgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlcwomIzQzOyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgcmVhZCBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6CiYjNDM7ICoKJiM0MzsgKglSVEw4MzgwCQkJCVJUTDgzOTMKJiM0MzsgKgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpOwlwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7CXBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpOwomIzQzOyAqCQkJCQlwaHlfd3JpdGUocGh5LCAzMSwgMCk7CiYjNDM7ICoKJiM0MzsgKiBXaGF0IGRvZXMgdGhpcyBtZWFuPwomIzQzOyAqCiYjNDM7ICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZQomIzQzOyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXQKJiM0MzsgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS4KJiM0MzsgKgomIzQzOyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay4KJiM0MzsgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLgomIzQzOyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGwKJiM0MzsgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW0KJiM0MzsgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyAmIzM0O21hZ2ljYWxseSYjMzQ7IGluIHRoZSBiYWNrZ3JvdW5kLgomIzQzOyAqIC0gQSBDNDUgb3ZlciBDMjIga2VybmVsIGFjY2VzcyBzZXF1ZW5jZSBpcyBtb3N0IGxpa2VseSB0byBmYWlsIGJlY2F1c2UgY2hhbmNlcyBhcmUgaGlnaCB0aGF0CiYjNDM7ICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi4KJiM0MzsgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhbgomIzQzOyAqICAgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgd2l0aG91dCBkZXZpYXRpb24uCiYjNDM7ICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS4KJiM0MzsgKgomIzQzOyAqIENvbmNsdXNpb246IFRoZSBSZWFsdGVrIE1ESU8gYnVzIGRyaXZlciBQSFkgYWNjZXNzIG11c3Qga25vdyBhbmQgaGFuZGxlIGFueSBpbnRlcmZlcmVuY2UgdGhhdAomIzQzOyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy4KICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKQEAgLTUwLDYgJiM0MzsxMTgsNTAgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwogCiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9CVVNFUwkJCTEKJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTCQkJNDA5NgomIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFMJCQkyOAomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfR0xCX0NUUkwJCQkweGExMDAKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wCQkweGExYjgKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xCQkweGExYmMKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUgkJR0VOTUFTSygyNCwgMjApCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFCQlHRU5NQVNLKDE5LCAxNSkKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UJCUdFTk1BU0soMTQsIDMpCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEUJCUJJVCgyKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQUQJCQkwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUJCUJJVCgxKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyCQkwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTAkJCTAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi8KJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yCQkweGExYzAKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMJCTB4YTFjNAomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMCQkJMHhhMTdjCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTAkJMHhhMWM4CiYjNDM7CiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9CVVNFUwkJCTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTCQkJODE5MgomIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFMJCQk1MgomIzQzOyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMCQkweDAzZWMKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMCQkweDAzZGMKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUgkJR0VOTUFTSyg5LCA1KQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRQkJR0VOTUFTSygyMiwgMTApCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRkFJTAkJCUJJVCgxKQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFCQlCSVQoMykKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFECQkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1CQlCSVQoMikKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMgkJMAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQ1RSTAkJCTB4MDNlMAomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFCQlHRU5NQVNLKDgsIDApCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwJCTB4MDNmMAomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQQkJR0VOTUFTSygzMSwgMTYpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQQkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTAkJCTB4MDNmNAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVwkJMHgwM2U0CiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSAkJMHgwM2U4CiYjNDM7I2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTAkJMHgwM2ZjCiYjNDM7CiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTCQkJNAogI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFUwkJCTQwOTYKICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFMJCQkyOApAQCAtNzAsNiAmIzQzOzE4Miw3IEBACiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQogI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQQkJCUdFTk1BU0soMTUsIDApCiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zCQkweGNiN2MKJiM0MzsjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTAkJCTB4Y2E5MAogI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTAkJMHhjYjgwCiAKICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVMJCQk0CkBAIC05NSwxMSAmIzQzOzIwOCwxMyBAQAogI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDE1LCAwKQogI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkwJMHgwYzE4CiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfQUREUl9DVFJMCQkweDBjNzQKJiM0MzsjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMCQkweDBjY2MKICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTAkJMHgwYzljCiAKICNkZWZpbmUgUEhZX0NUUkxfQ01ECQkJCUJJVCgwKQogI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQUQJCQlHRU5NQVNLKDIwLCAxNikKICNkZWZpbmUgUEhZX0NUUkxfTU1EX1JFRwkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSBQSFlfVkVORE9SX1JFQUxURUsJCQkweDAwMWNjODAwCiAKICNkZWZpbmUgTUFQX0FERFJTX1BFUl9SRUcJCQk2CiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSCQkJNQpAQCAtMTI1LDcgJiM0MzsyNDAsOSBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2IHsKIAljb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvICppbmZvOwogCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdCBIVyBhY2Nlc3MgKi8KJiM0MzsJREVDTEFSRV9CSVRNQVAocGh5X3BvbGwsIE1BWF9QT1JUUyk7CiAJREVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7CiYjNDM7CXUxNiBwYWdlW01BWF9QT1JUU107CiAJdTggc21pX2J1c1tNQVhfUE9SVFNdOwogCXU4IHNtaV9hZGRyW01BWF9QT1JUU107CiAJYm9vbCBzbWlfYnVzX2lzX2M0NVtNQVhfU01JX0JVU1NFU107CkBAIC0xNDIsNiAmIzQzOzI1OSw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gewogCXU4IG51bV9idXNlczsKIAl1OCBudW1fcG9ydHM7CiAJdTE2IG51bV9wYWdlczsKJiM0MzsJdTMyIHBvbGxfY3RybDsKIAlpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTsKIAlpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpOwogCWludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTsKQEAgLTE3Nyw2ICYjNDM7Mjk1LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpCiAJcmV0dXJuIGNoYW4tJmd0O3ByaXY7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCBpbnQgcG9ydCwgYm9vbCBhY3RpdmUpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBwcml2LSZndDtpbmZvLSZndDtwb2xsX2N0cmwgJiM0MzsgKHBvcnQgLyAzMikgKiA0LAomIzQzOwkJCQkgIEJJVChwb3J0ICUgMzIpLCBhY3RpdmUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJCQkgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpCiB7CkBAIC0xODUsOSAmIzQzOzMxMSw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJdTMyIGNtZHN0YXRlOwogCWludCByZXQ7CiAKLQkvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqLwomIzQzOwkvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqLwogCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LSZndDtyZWdtYXAsIGluZm8tJmd0O2NtZF9yZWdzLmMyMl9kYXRhLAotCQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7CiYjNDM7CQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIyNyw3ICYjNDM7MzUzLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCwKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LSZndDtyZWdtYXAsIGluZm8tJmd0O2NtZF9yZWdzLmMyMl9kYXRhLAotCQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7CiYjNDM7CQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTI2NCwxMyAmIzQzOzM5MCwxMjMgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLAogCXJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LSZndDtpbmZvLSZndDtjbWRfd3JpdGUsIGNtZF9kYXRhKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSwKJiM0MzsJCQkJICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAomIzQzOwkJLnBvcnRfbWFza19sb3cJPSBCSVQocG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmM0NV9kYXRhCT0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhLAomIzQzOwkJCQkgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzQ1X2RhdGEJPSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKJiM0MzsJCS5wb3J0X21hc2tfbG93CT0gQklUKHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiYjNDM7CQkuZXh0X3BhZ2UJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSwKJiM0MzsJCQkJICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmV4dF9wYWdlCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKJiM0MzsJCS5wb3J0X21hc2tfaGlnaAk9ICh1MzIpKEJJVF9VTEwocG9ydCkgJmd0OyZndDsgMzIpLAomIzQzOwkJLnBvcnRfbWFza19sb3cJPSAodTMyKShCSVRfVUxMKHBvcnQpKSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzQ1X2RhdGEJPSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsICZhbXA7Y21kX2RhdGEsCiYjNDM7CQkJCSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsCiYjNDM7CQkJCSAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jNDVfZGF0YQk9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAomIzQzOwkJLnBvcnRfbWFza19oaWdoCT0gKHUzMikoQklUX1VMTChwb3J0KSAmZ3Q7Jmd0OyAzMiksCiYjNDM7CQkucG9ydF9tYXNrX2xvdwk9ICh1MzIpKEJJVF9VTEwocG9ydCkpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKIHsKIAlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAogCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAogCX07CiAKQEAgLTI4NCw3ICYjNDM7NTIwLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLAogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAogCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKIAkJLnBvcnRfbWFza19sb3cJPSBCSVQocG9ydCksCiAJfTsKQEAgLTMyNCw3ICYjNDM7NTYwLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKIAkJLmJyb2FkY2FzdAk9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSwKIAkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKLQkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKIAl9OwogCiAJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhLApAQCAtMzM2LDcgJiM0Mzs1NzIsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sCiAJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKIAkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKLQkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKIAkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiAJCS5wb3J0X21hc2tfaGlnaAk9ICh1MzIpKEJJVF9VTEwocG9ydCkgJmd0OyZndDsgMzIpLAogCQkucG9ydF9tYXNrX2xvdwk9ICh1MzIpKEJJVF9VTEwocG9ydCkpLApAQCAtMzgyLDggJiM0Mzs2MTgsMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pCiAJaWYgKHBvcnQgJmx0OyAwKQogCQlyZXR1cm4gcG9ydDsKIAotCXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKQomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykgewomIzQzOwkJaWYgKHJlZ251bSA9PSAzMSkKJiM0MzsJCQlyZXR1cm4gcHJpdi0mZ3Q7cGFnZVtwb3J0XTsKJiM0MzsKIAkJcmV0ID0gcHJpdi0mZ3Q7aW5mby0mZ3Q7cmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sICZhbXA7dmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7CiB9CkBAIC0zOTcsOCAmIzQzOzYzNywxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNgogCWlmIChwb3J0ICZsdDsgMCkKIAkJcmV0dXJuIHBvcnQ7CiAKLQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCWlmIChyZWdudW0gPT0gMzEpIHsKJiM0MzsJCQlpZiAodmFsdWUgJmd0Oz0gUkFXX1BBR0UocHJpdikpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJCXByaXYtJmd0O3BhZ2VbcG9ydF0gPSB2YWx1ZTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKIAkJcmV0ID0gcHJpdi0mZ3Q7aW5mby0mZ3Q7d3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7CiYjNDM7CX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC00NzEsNiAmIzQzOzcyMCwxNSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFBIWV9QQVRDSF9ET05FIGVuYWJsZXMgUEhZIGNvbnRyb2wgdmlhIFNvQy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgUEhZIGFjY2VzcywgaW5jbHVkaW5nCiYjNDM7CSAqIHBhdGNoaW5nIGFuZCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIFBIWXMgYXJlIHByb2JlZC4KJiM0MzsJICovCiYjNDM7CXJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKIHsKIAl1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7CkBAIC01MDcsNiAmIzQzOzc2NSw1NCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi0mZ3Q7bWRpby5idXMpOwomIzQzOwlpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LSZndDttZGlvLmJ1cywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBvcnQ7CiYjNDM7CiYjNDM7CWlmICghcHJpdi0mZ3Q7c21pX2J1c19pc19jNDVbY2hhbi0mZ3Q7bWRpb19idXNdICZhbXA7JmFtcDsKJiM0MzsJICAgICghcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi0mZ3Q7cGh5X2lkLCBQSFlfVkVORE9SX1JFQUxURUspKSkgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7T25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCWlmICh0ZXN0X2JpdChwb3J0LCBwcml2LSZndDtwaHlfcG9sbCkpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQlyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgdHJ1ZSk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlfX3NldF9iaXQocG9ydCwgcHJpdi0mZ3Q7cGh5X3BvbGwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi0mZ3Q7bWRpby5idXMpOwomIzQzOwlpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LSZndDttZGlvLmJ1cywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykgewomIzQzOwkJcmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCV9fY2xlYXJfYml0KHBvcnQsIHByaXYtJmd0O3BoeV9wb2xsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZGV2X2VycihidXMtJmd0O3BhcmVudCwgJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBwb2xsaW5nIGZvciBwb3J0ICVkXG4mIzM0OywgcG9ydCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsCiAJCQkJIHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKQogewpAQCAtNTM2LDYgJiM0Mzs4NDIsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdgogCQlidXMtJmd0O3dyaXRlID0gb3R0b19lbWRpb193cml0ZV9jMjI7CiAJfQogCWJ1cy0mZ3Q7cGFyZW50ID0gZGV2OwomIzQzOwlidXMtJmd0O25vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDsKJiM0MzsJYnVzLSZndDtub3RpZnlfcGh5X2RldGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2g7CiYjNDM7CiAJY2hhbiA9IGJ1cy0mZ3Q7cHJpdjsKIAljaGFuLSZndDttZGlvX2J1cyA9IG1kaW9fYnVzOwogCWNoYW4tJmd0O3ByaXYgPSBwcml2OwpAQCAtNjUyLDYgJiM0Mzs5NjEsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgcHJpdi0mZ3Q7aW5mby0mZ3Q7bnVtX3BvcnRzOyBwb3J0JiM0MzsmIzQzOykgewomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCQllcnIgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwZGV2LSZndDtkZXY7CkBAIC02NzEsNiAmIzQzOzk5NSwxMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpZiAoSVNfRVJSKHByaXYtJmd0O3JlZ21hcCkpCiAJCXJldHVybiBQVFJfRVJSKHByaXYtJmd0O3JlZ21hcCk7CiAKJiM0MzsJZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwogCiAJZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTsKQEAgLTY5Niw2ICYjNDM7MTAyNCw1MSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0gewomIzQzOwkuYWRkcl9tYXBfYmFzZSA9IFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMLAomIzQzOwkuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsCiYjNDM7CS5jbWRfcmVhZCA9IFJUTDgzODBfUEhZX0NUUkxfUkVBRCwKJiM0MzsJLmNtZF93cml0ZSA9IFJUTDgzODBfUEhZX0NUUkxfV1JJVEUsCiYjNDM7CS5jbWRfcmVncyA9IHsKJiM0MzsJCS5jMjJfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xLAomIzQzOwkJLmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsCiYjNDM7CQkuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLAomIzQzOwkJLnBvcnRfbWFza19sb3cgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMCwKJiM0MzsJfSwKJiM0MzsJLm51bV9idXNlcyA9IFJUTDgzODBfTlVNX0JVU0VTLAomIzQzOwkubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsCiYjNDM7CS5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDgzODBfU01JX1BPTExfQ1RSTCwKJiM0MzsJLnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlciwKJiM0MzsJLnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLAomIzQzOwkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUsCiYjNDM7CS53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyLAomIzQzOwkud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0gewomIzQzOwkuY21kX2ZhaWwgPSBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwsCiYjNDM7CS5jbWRfcmVhZCA9IFJUTDgzOTBfUEhZX0NUUkxfUkVBRCwKJiM0MzsJLmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsCiYjNDM7CS5jbWRfcmVncyA9IHsKJiM0MzsJCS5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsCiYjNDM7CQkuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCwKJiM0MzsJCS5jNDVfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMLAomIzQzOwkJLmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCwKJiM0MzsJCS5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLAomIzQzOwkJLnBvcnRfbWFza19sb3cgPSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XLAomIzQzOwkJLnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsCiYjNDM7CX0sCiYjNDM7CS5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUywKJiM0MzsJLm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLAomIzQzOwkubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCwKJiM0MzsJLnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLAomIzQzOwkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsCiYjNDM7CS53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLAomIzQzOwkud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7CiAJLmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCwKIAkuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsCkBAIC03MTEsNiAmIzQzOzEwODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHsKIAkubnVtX2J1c2VzID0gUlRMOTMwMF9OVU1fQlVTRVMsCiAJLm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLAogCS5udW1fcGFnZXMgPSBSVEw5MzAwX05VTV9QQUdFUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCwKIAkuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLAogCS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMiwKIAkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsCkBAIC03MzYsNiAmIzQzOzExMTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHsKIAkubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsCiAJLm51bV9wYWdlcyA9IFJUTDkzMTBfTlVNX1BBR0VTLAogCS5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLAogCS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsCiAJLnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLAogCS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSwKQEAgLTc0NCw2ICYjNDM7MTExOSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0gewogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxydGw4MzgwLW1kaW8mIzM0OywgLmRhdGEgPSAmYW1wO290dG9fZW1kaW9fODM4MF9pbmZvIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsODM5MS1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LAogCXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsOTMwMS1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzkzMDBfaW5mbyB9LAogCXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsOTMxMS1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LAogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCA5NGIyZTg1ZTAwYTM3OS4uYTYyYzJmZjZjMmFhYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMTg3Niw2ICYjNDM7MTg3NiwxMyBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogCiYjNDM7CWlmIChwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaCkgewomIzQzOwkJZXJyID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJvcjsKJiM0MzsJCXBoeWRldi0mZ3Q7bWRpb19idXNfbm90aWZpZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJcGh5X3Jlc3VtZShwaHlkZXYpOwogCiAJLyoqCkBAIC0xOTE5LDYgJiM0MzsxOTI2LDEwIEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCXN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMOwogCXN0cnVjdCBtaWlfYnVzICpidXM7CiAKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpb19idXNfbm90aWZpZWQgJmFtcDsmYW1wOyBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2RldGFjaCkKJiM0MzsJCXBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7CiYjNDM7CXBoeWRldi0mZ3Q7bWRpb19idXNfbm90aWZpZWQgPSBmYWxzZTsKJiM0MzsKIAlpZiAocGh5ZGV2LSZndDtkZXZsaW5rKSB7CiAJCWRldmljZV9saW5rX2RlbChwaHlkZXYtJmd0O2RldmxpbmspOwogCQlwaHlkZXYtJmd0O2RldmxpbmsgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggMTEwOTJjMzE3NWIzZGUuLjJkMzBlMDg3YTIzMzczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTM3Niw2ICYjNDM7Mzc2LDIzIEBAIHN0cnVjdCBtaWlfYnVzIHsKIAkJCSBpbnQgcmVnbnVtLCB1MTYgdmFsKTsKIAkvKiogQHJlc2V0OiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGJ1cyAqLwogCWludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTsKJiM0MzsJLyoqCiYjNDM7CSAqIEBub3RpZnlfcGh5X2F0dGFjaDogUGVyZm9ybSBwb3N0LWF0dGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXMKJiM0MzsJICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2F0dGFjaF9kaXJlY3QoKSByaWdodCBhZnRlciBwaHlfaW5pdF9odygpCiYjNDM7CSAqICAgYW5kIGJlZm9yZSBwaHlfcmVzdW1lKCkuIEF0IHRoaXMgcG9pbnQsIHRoZSBQSFkgaXMgc3RpbGwKJiM0MzsJICogICBzdXNwZW5kZWQsIGFuZCBAcGh5ZGV2LSZndDthdHRhY2hlZF9kZXYgbWF5IGJlIE5VTEwgKGUuZy4gZm9yCiYjNDM7CSAqICAgc3RhbmRhbG9uZSBQSFlzKS4gUnVucyBpbiBwcm9jZXNzIGNvbnRleHQgYW5kIG1heSBzbGVlcC4gUmV0dXJuCiYjNDM7CSAqICAgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZSAod2hpY2ggYWJvcnRzIHRoZQomIzQzOwkgKiAgIGF0dGFjaCBzZXF1ZW5jZSkuCiYjNDM7CSAqLwomIzQzOwlpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiYjNDM7CS8qKgomIzQzOwkgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXMKJiM0MzsJICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2RldGFjaCgpIGJlZm9yZSBkZXZpY2UgbGlua3MgYW5kIHJlc291cmNlcwomIzQzOwkgKiAgIGFyZSBjbGVhbmVkIHVwLiBSdW5zIGluIHByb2Nlc3MgY29udGV4dCBhbmQgbWF5IHNsZWVwLiBPbmx5CiYjNDM7CSAqICAgaW52b2tlZCBpZiBAbm90aWZ5X3BoeV9hdHRhY2ggd2FzIHByZXZpb3VzbHkgY2FsbGVkIGFuZCBzdWNjZWVkZWQuCiYjNDM7CSAqLwomIzQzOwl2b2lkICgqbm90aWZ5X3BoeV9kZXRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogCiAJLyoqIEBzdGF0czogU3RhdGlzdGljIGNvdW50ZXJzIHBlciBkZXZpY2Ugb24gdGhlIGJ1cyAqLwogCXN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdOwpAQCAtNTc0LDYgJiM0Mzs1OTEsNyBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7CiAgKiBAaGFzX2ZpeHVwczogU2V0IHRvIHRydWUgaWYgdGhpcyBQSFkgaGFzIGZpeHVwcy9xdWlya3MuCiAgKiBAc3VzcGVuZGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGlzIFBIWSBoYXMgYmVlbiBzdXNwZW5kZWQgc3VjY2Vzc2Z1bGx5LgogICogQHN1c3BlbmRlZF9ieV9tZGlvX2J1czogU2V0IHRvIHRydWUgaWYgdGhpcyBQSFkgd2FzIHN1c3BlbmRlZCBieSBNRElPIGJ1cy4KJiM0MzsgKiBAbWRpb19idXNfbm90aWZpZWQ6IFNldCB0byB0cnVlIGlmIHBvc3QtYXR0YWNoIGJ1cyBub3RpZmljYXRvbiBzdWNjZWVkZWQuCiAgKiBAc3lzZnNfbGlua3M6IEludGVybmFsIGJvb2xlYW4gdHJhY2tpbmcgc3lzZnMgc3ltYm9saWMgbGlua3Mgc2V0dXAvcmVtb3ZhbC4KICAqIEBsb29wYmFja19lbmFibGVkOiBTZXQgdHJ1ZSBpZiB0aGlzIFBIWSBoYXMgYmVlbiBsb29wYmFja2VkIHN1Y2Nlc3NmdWxseS4KICAqIEBkb3duc2hpZnRlZF9yYXRlOiBTZXQgdHJ1ZSBpZiBsaW5rIHNwZWVkIGhhcyBiZWVuIGRvd25zaGlmdGVkLgpAQCAtNjg1LDYgJiM0Mzs3MDMsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7CiAJdW5zaWduZWQgaGFzX2ZpeHVwczoxOwogCXVuc2lnbmVkIHN1c3BlbmRlZDoxOwogCXVuc2lnbmVkIHN1c3BlbmRlZF9ieV9tZGlvX2J1czoxOwomIzQzOwl1bnNpZ25lZCBtZGlvX2J1c19ub3RpZmllZDoxOwogCXVuc2lnbmVkIHN5c2ZzX2xpbmtzOjE7CiAJdW5zaWduZWQgbG9vcGJhY2tfZW5hYmxlZDoxOwogCXVuc2lnbmVkIGRvd25zaGlmdGVkX3JhdGU6MTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NzEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBSZWFsdGVrIFJUTDgzODAvUlRMODM5MCBNRElPIENvbnRyb2xsZXIgQ29kZSoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sYCwgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L3BoeS5oYC4gVGhpcyBpcyBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzLCB3aGljaCBpcyBmaW5lLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCB0ZXN0IGVudmlyb25tZW50LCBsaWtlIFFFTVUgb3IgR0NFLiBJdCYjMzk7cyBhZGRpbmcgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGBtaWlfYnVzYCBzdHJ1Y3QgYW5kIGNhbGxpbmcgdGhlbSBmcm9tIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYC4gVGhlc2UgY2FsbGJhY2tzIGFyZSBzcGVjaWZpYyB0byB0aGUgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGRyaXZlciwgZW5hYmxpbmcvZGlzYWJsaW5nIGhhcmR3YXJlIHBvbGxpbmcuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIEkgZXZlbiBnZXQgdGhlIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBkcml2ZXIgdG8gcHJvYmU/IEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBzbyBpdCBuZWVkcyBhIHBsYXRmb3JtIGRldmljZSBpbnN0YW5jZS4gVGhlc2UgdXN1YWxseSBjb21lIGZyb20gRGV2aWNlIFRyZWUgKERUKSBvdmVybGF5cywgYnV0IEkga25vdyBzeXprYWxsZXIgZG9lc24mIzM5O3QgZ2VuZXJhbGx5IGxvYWQgRFQgb3ZlcmxheXMgdW5sZXNzIHNwZWNpZmljYWxseSBjb25maWd1cmVkIGZvciBpdCwgYW5kIEkgaGF2ZW4mIzM5O3QgY29uZmlndXJlZCBmb3IgaXQuIFN5emthbGxlciB1c3VhbGx5IHJlbGllcyBvbiBhIGZldyB0ZWNobmlxdWVzIGZvciBkZXZpY2UgY3JlYXRpb24uIERvZXMgaXQgaGF2ZSBhIHNwZWNpYWwgc3lzY2FsbCBsaWtlIGBzeXpfZGV2X2NyZWF0ZWAsIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAgb3Igc2ltaWxhcj8gTm8sIEkgZG9uJiMzOTt0IHRoaW5rIGl0IGRvZXMsIG9yIGF0IGxlYXN0IG5vdCBpbiBhIGdlbmVyaWMgd2F5LiBJIGFtIHByZXR0eSBzdXJlIGl0IHVzZXMgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAgb3IgYHN5el9pbml0X25ldF9zb2NrZXRgIGZvciBjcmVhdGluZyBwbGF0Zm9ybSBkZXZpY2VzLCBpZiBhIHNwZWNpZmljIHN1YnN5c3RlbSBhbGxvd3MgaXQuCgpBaCwgYnV0IHdhaXQuLi4gYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIGFyZSBjb3JlIFBIWSBmdW5jdGlvbnMuICpUaG9zZSogYXJlIGFsd2F5cyByZWFjaGFibGUgaWYgKmFueSogUEhZIGlzIGF0dGFjaGVkIG9yIGRldGFjaGVkLiBUaGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRob3NlIHRvIGNhbGwgdGhlIG5ldyBjYWxsYmFja3MsIGJ1dCBvbmx5IGlmIHRoZXkmIzM5O3JlIHNldC4gU28sIHRoZSBuZXcgY29kZSBwYXRoIHdpdGhpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIG9yIGBwaHlfZGV0YWNoYCAqaXMqIHJlYWNoYWJsZSBpZiAqYW55KiBQSFkgaXMgYXR0YWNoZWQsIGJ1dCBvbmx5IGRvZXMgc29tZXRoaW5nIGlmIHRoZSBgbm90aWZ5X3BoeV9hdHRhY2hgIG9yIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIGFyZSBzZXQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZHJpdmVycyBzZXR0aW5nIHRob3NlIGNhbGxiYWNrcz8gTm8sIHRoZSBwYXRjaCBvbmx5IHNldHMgdGhlbSBpbiB0aGUgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGRyaXZlci4KClNvIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhlIHByb2JlIGZvciBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgYmUgdHJpZ2dlcmVkPyBUaGUgZHJpdmVyIG1hdGNoZXMgYCYjMzQ7cmVhbHRlayxydGw4MzgwLW1kaW8mIzM0O2AsIGAmIzM0O3JlYWx0ZWsscnRsODM5MS1tZGlvJiMzNDtgLCBgJiMzNDtyZWFsdGVrLHJ0bDkzMDEtbWRpbyYjMzQ7YCwgYW5kIGAmIzM0O3JlYWx0ZWsscnRsOTMxMS1tZGlvJiMzNDtgLiBVbmxlc3Mgd2UgYXJlIHJ1bm5pbmcgb24gYSBSZWFsdGVrIFNvQyBvciBtYW5hZ2UgdG8gY3JlYXRlIHRoZSBwbGF0Zm9ybSBkZXZpY2UsIGl0cyBwcm9iZSBmdW5jdGlvbiB3b24mIzM5O3QgYmUgY2FsbGVkLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgZ2VuZXJhbGx5IGluamVjdCBhcmJpdHJhcnkgRFQgbm9kZXMsIHNvIGl0JiMzOTtzIHVubGlrZWx5IGl0JiMzOTtzIGdlbmVyYXRpbmcgdGhlIERUIG5vZGUgZm9yIHRoaXMgY29udHJvbGxlci4KCkNhbiBJIGNyZWF0ZSB0aGUgcGxhdGZvcm0gZGV2aWNlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcz8gTm8sIHRoYXQmIzM5O3Mgbm90IHBvc3NpYmxlLiBJIGtub3cgdGhlcmUmIzM5O3MgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAsIGJ1dCB0aGF0JiMzOTtzIGtlcm5lbC1pbnRlcm5hbC4KClRoZXJlZm9yZSwgc2luY2UgdGhlIGRyaXZlciBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgU29DcywgYW5kIGl0IGlzIGhpZ2hseSB1bmxpa2VseSB0byBwcm9iZSBpbiBhIGdlbmVyaWMgUUVNVS9HQ0UgZW52aXJvbm1lbnQsIEkgZG9uJiMzOTt0IHRoaW5rIEkgY2FuIHRyaWdnZXIgdGhlIG5ldyBjb2RlLiBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZywgdGhvdWdoLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJJiMzOTtsbCBsb29rIGF0IGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIGZvciBgTURJT19SRUFMVEVLX1JUTDkzMDBgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBpdCYjMzk7cyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0xNjY9Y29uZmlnIE1ESU9fSVBRODA2NFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzMtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTc0OmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3NS1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MDEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBNRElPX1JFQUxURUtfUlRMOTMwMGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgbW9kdWxlLiBBcyBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhcmNoaXRlY3R1cmUsIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiBpdCByZWxpZXMgb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBkZWJ1Z2dpbmcsIHBvcnRpbmcsIG9yIGV2ZW4ganVzdCB1bmRlcnN0YW5kaW5nIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxheWVycy4uLiBkb2VzIGl0IHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzPyBLZXJuZWwgZHJpdmVycz8gUG9zc2libHkgbG93LWxldmVsIHJlZ2lzdGVyIGRlZmluaXRpb25zPyBBbmQgd2hhdCBhYm91dCBwb3RlbnRpYWwgdXNlci1zcGFjZSBjb21wb25lbnRzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXM/IEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIG1hcCBvZiBhbGwgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0IG1ha2UgdXAgdGhpcyBtb2R1bGUgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTE2Nj1jb25maWcgTURJT19JUFE4MDY0XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3My1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNzQ6Y29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTc1LVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk1OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBJIGhhdmUgYSBzdHJvbmcgaHVuY2ggdGhhdCB0aGUgYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2AgZmlsZSBpcyB3aGVyZSB0byBzdGFydC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDE3NC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgYXJlYSBmb3IgbWUgdG8gYmVnaW4gbXkgZXhwbG9yYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zIG9yIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBNRElPIGRyaXZlciBjb25maWd1cmF0aW9uIHRoZXJlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBiYXNlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBwcm9jZWVkLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBpbmZvcm1hdGlvbiBJIGFtIHNlYXJjaGluZyBmb3Igd2lsbCBiZSBhcm91bmQgdGhhdCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcdGhlbHBcbiAxNzE6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBuZXR3b3JrXG4gMTcyOlx0XHQgIGludGVyZmFjZSB1bml0cyBvZiB0aGUgSVBRODA2NCBTb0NcbiAxNzM6XHRcbiAxNzQ6XHRjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcbiAxNzU6XHRcdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4gMTc2Olx0XHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXG4gMTc3Olx0XHRoZWxwXG4gMTc4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgUmVhbHRla1xuIDE3OTpcdFx0ICBSVEw5MzAwIGZhbWlseSBvZiBFdGhlcm5ldCBzd2l0Y2hlcyB3aXRoIGludGVncmF0ZWQgU29DLlxuIDE4MDpcdFxuIDE4MTpcdGNvbmZpZyBNRElPX1JFR01BUFxuIDE4MjpcdFx0dHJpc3RhdGVcbiAxODM6XHRcdGhlbHBcbiAxODQ6XHRcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzaW5nIE1ESU8gZGV2aWNlcyB0aGF0IGFyZSBub3Qgc2l0dGluZyBvbiBhXG4gMTg1Olx0XHQgIHJlZ3VsYXIgTURJTyBidXMsIGJ1dCBzdGlsbCBleHBvc2VzIHRoZSBzdGFuZGFyZCA4MDIuMyByZWdpc3RlclxuIDE4NjpcdFx0ICBsYXlvdXQuIEl0JiMzOTtzIHJlZ21hcC1iYXNlZCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIG9uIGludGVncmF0ZWQsXG4gMTg3Olx0XHQgIG1lbW9yeS1tYXBwZWQgUEhZcywgU1BJIFBIWXMgYW5kIHNvIG9uLiBBIG5ldyB2aXJ0dWFsIE1ESU8gYnVzIGlzXG4gMTg4Olx0XHQgIGNyZWF0ZWQsIGFuZCBpdHMgcmVhZC93cml0ZSBvcGVyYXRpb25zIGFyZSBtYXBwZWQgdG8gdGhlIHVuZGVybHlpbmdcbiAxODk6XHRcdCAgcmVnbWFwLiBVc2VycyB3aWxsaW5nIHRvIHVzZSB0aGlzIGRyaXZlciBtdXN0IGV4cGxpY2l0bHkgc2VsZWN0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MjEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWx0ZWsgUlRMOTMwMCBEcml2ZXImIzM5O3MgQWN0aXZhdGlvbioqCgpPa2F5LCBzbyB0aGUgUmVhbHRlayBSVEw5MzAwIGRyaXZlciYjMzk7cyBhY3RpdmF0aW9uIGhpbmdlcyBvbiBlaXRoZXIgYE1BQ0hfUkVBTFRFS19SVExgIG9yLCBtb3JlIGNvbW1vbmx5LCBgQ09NUElMRV9URVNUYC4gIEV2ZW4gd2hlbiB3ZSBmb3JjZSB0aGUgaW5jbHVzaW9uIHZpYSBgQ09NUElMRV9URVNUYCwgaXQmIzM5O3Mgc3RpbGwgYSAqcGxhdGZvcm0qIGRyaXZlci4gVGhhdCYjMzk7cyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIFRoZSByZWFsIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIHRoZSBkcml2ZXIgYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCBpbiB0aGF0IHNjZW5hcmlvPyBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgLCB0byBsb29rIGZvciB0aGF0IGFsbC1pbXBvcnRhbnQgYG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJgIGNhbGwuIFRoaXMgd2lsbCBjb25maXJtIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBwbGF0Zm9ybSBhbmQgd2hldGhlciB0aGUgcHJvYmluZyBtZWNoYW5pc20gaXMgc2V0IHVwIGNvcnJlY3RseSwgcmVnYXJkbGVzcyBvZiB0aGUgYENPTVBJTEVfVEVTVGAgZmxhZyYjMzk7cyBwcmVzZW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgcGxhdGZvcm0gcmVnaXN0cmF0aW9uIG9mIHRoaXMgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0xMTMwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG90dG9fZW1kaW9fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTM3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjExMzg6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihvdHRvX2VtZGlvX2RyaXZlcik7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTEzOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5OTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgRHJpdmVyIENvZGUgaW4gYSBGdXp6aW5nIENvbnRleHQqKgoKT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgcGxhdGZvcm0gZHJpdmVyLiBUaGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhhdCBpbiBvdXIgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGxpa2UgUUVNVSB4ODZfNjQgb3IgYXJtNjQsIHVubGVzcyB3ZSBoYXZlIGEgdmVyeSBzcGVjaWZpYyBib2FyZCBtb2RlbCBjb25maWd1cmVkIHRvIGluc3RhbnRpYXRlIHRoaXMgcGFydGljdWxhciBkZXZpY2UsIG9yIGlmIHN5emthbGxlciBoYXMgYSBtZWNoYW5pc20gdG8gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgb24gdGhlIGZseSwgdGhlIGRyaXZlciYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGNhbGxlZC4gQW5kIGFzIGZhciBhcyBJIGtub3csIHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgKmdlbmVyaWMqIG1ldGhvZCB0byBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcy4gV2UgY2FuIGluamVjdCBVU0IgZGV2aWNlcyB3aXRoIGR1bW15X2hjZCBhbmQgUENJIGRldmljZXMgdGhyb3VnaCBgc3l6X3BjaV8qYCwgYnV0IG5vdCBqdXN0IGFueSBwbGF0Zm9ybSBkZXZpY2UsIHVubGVzcyB0aGVyZSYjMzk7cyBzb21lIHNwZWNpYWwgc3Vic3lzdGVtIGludGVyZmFjZSBleHBvc2VkLCBsaWtlIHdpdGggbWFjODAyMTFfaHdzaW0gb3IgbmV0ZGV2c2ltLgoKU28sIHJlYWxpc3RpY2FsbHksIHRoZSBjb2RlIHdpdGhpbiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgaXMgdW5yZWFjaGFibGUuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuCgpCdXQgd2hhdCBhYm91dCB0aGUgY2hhbmdlcyBpbiBgcGh5X2RldmljZS5jYD8gVGhvc2UgYXJlIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSSBrbm93IHRoYXQgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIGFyZSByZWFjaGFibGUsIGJ1dCB3aGF0IGFib3V0IHRoZSBuZXcgY29kZSB0aGF0JiMzOTtzIGJlZW4gYWRkZWQ/CgpgYGBjCglpZiAocGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2gpIHsKCQllcnIgPSBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpOwoJCWlmIChlcnIpCgkJCWdvdG8gZXJyb3I7CgkJcGh5ZGV2LSZndDttZGlvX2J1c19ub3RpZmllZCA9IHRydWU7Cgl9CmBgYAoKTG9va2luZyBhdCB0aGlzLCBpdCBsb29rcyBsaWtlIHRoaXMgY29kZSB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgaWYgYSBgbm90aWZ5X3BoeV9hdHRhY2hgIGZ1bmN0aW9uIHBvaW50ZXIgaXMgc2V0IG9uIHRoZSBgbWRpby5idXNgLiBCdXQsIEkmIzM5O20gcHJldHR5IGNlcnRhaW4gbm8gY3VycmVudGx5IHJlYWNoYWJsZSBkcml2ZXIgc2V0cyB0aGF0IHBvaW50ZXIuIFNvIHRoaXMgbmV3IGNvZGUgaXMgZWZmZWN0aXZlbHkgZGVhZCwgbmV2ZXIgZXhlY3V0ZWQgaW4gb3VyIGZ1enppbmcgZW52aXJvbm1lbnQuCgpIb2xkIG9uLCBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gSXMgdGhlcmUgYW55IG90aGVyIGRyaXZlciB0aGF0IEkmIzM5O20gbWlzc2luZyB0aGF0IGFjdHVhbGx5IGRvZXMgc2V0IGBub3RpZnlfcGh5X2F0dGFjaGA/IEkgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlIGFnYWluIGp1c3QgdG8gYmUgY2VydGFpbi4gTGV0IG1lIGRvIGEgcXVpY2sgc2Nhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm90aWZ5X3BoeV9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTc1Mj1zdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc2Ny1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo3Njg6c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNzY5LXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9ODE2PXN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04NDQtXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjg0NTpcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODQ2LVx0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE3NTI9aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODc4LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODc5Olx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODgwOlx0XHRlcnIgPSBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg4MS1cdFx0aWYgKGVycilcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTM2Mz1zdHJ1Y3QgbWlpX2J1cyB7XG4tLVxuaW5jbHVkZS9saW51eC9waHkuaC0zNzktXHQvKipcbmluY2x1ZGUvbGludXgvcGh5Lmg6MzgwOlx0ICogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nIGZvciBNRElPIGJ1c1xuaW5jbHVkZS9saW51eC9waHkuaC0zODEtXHQgKiAgIGRyaXZlcnMuIENhbGxlZCBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpIHJpZ2h0IGFmdGVyIHBoeV9pbml0X2h3KClcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTM4Ny1cdCAqL1xuaW5jbHVkZS9saW51eC9waHkuaDozODg6XHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG5pbmNsdWRlL2xpbnV4L3BoeS5oLTM4OS1cdC8qKlxuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMzkyLVx0ICogICBhcmUgY2xlYW5lZCB1cC4gUnVucyBpbiBwcm9jZXNzIGNvbnRleHQgYW5kIG1heSBzbGVlcC4gT25seVxuaW5jbHVkZS9saW51eC9waHkuaDozOTM6XHQgKiAgIGludm9rZWQgaWYgQG5vdGlmeV9waHlfYXR0YWNoIHdhcyBwcmV2aW91c2x5IGNhbGxlZCBhbmQgc3VjY2VlZGVkLlxuaW5jbHVkZS9saW51eC9waHkuaC0zOTQtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NjEKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gdGhlIFJlYWx0ZWsgTURJTyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtUaGlzIGxvb2tzIGxpa2UgY29kZSB0aGF0JiMzOTtzIG5vdCBnb2luZyB0byBnZXQgaGl0IGJ5IGZ1enppbmcuJiMzNDsgSXQgYXBwZWFycyB0aGF0IHRoZSBvbmx5IGRyaXZlciBzZXR0aW5nIGBub3RpZnlfcGh5X2F0dGFjaGAgaXMgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBOb3csIHRoYXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIg4oCTIFJlYWx0ZWsgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHNwZWNpZmljYWxseS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXNlIHR5cGVzIG9mIHBsYXRmb3JtIGRyaXZlcnMgYXJlIGluY3JlZGlibHkgZGlmZmljdWx0LCBpZiBub3QgaW1wb3NzaWJsZSwgdG8gaW5zdGFudGlhdGUgaW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGluZ3MgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBqdXN0IHdvbiYjMzk7dCBjdXQgaXQuIFlvdSByZWFsbHkgbmVlZCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgb3IgYSBwZXJmZWN0bHkgY3JhZnRlZCBkZXZpY2UgdHJlZS4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIENhbiB3ZSBzb21laG93IGZvcmNlIHRoaXMgZHJpdmVyIHRvIHByb2JlPyBTaW5jZSBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciwgU3l6a2FsbGVyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIGp1c3QgbWFnaWNhbGx5IHRyaWdnZXIgaXQgdW5sZXNzIGl0JiMzOTtzIHByb3Blcmx5IGluc3RhbnRpYXRlZC4gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gQ2FuIGl0IGJlIGJyb3VnaHQgdXAgdmlhIGFuIEkyQyBvciBTUEkgZGV2aWNlPyBOb3BlLiBJdCYjMzk7cyBhIHBsYXRmb3JtIGRldmljZSwgc28gaXQmIzM5O3Mgbm90IGdvaW5nIHRvIGF0dGFjaCB0byB0aG9zZSBidXNlcy4gV2hhdCBhYm91dCBhIFBDSSBkZXZpY2U/IFN0aWxsIG5vLiBBbmQgZGVmaW5pdGVseSBub3QgVVNCLiBTbyB5ZWFoLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgZHJpdmVyIGNhbiYjMzk7dCBiZSByZWFjaGVkIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LCBgV29ydGhGdXp6aW5nYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBUaGUgY29yZSBQSFkgc3Vic3lzdGVtIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2gsIGluY2x1ZGluZyB0aGUgYWRkZWQgYG5vdGlmeV9waHlfYXR0YWNoYCBjYWxsYmFja3MsIGFyZSBlZmZlY3RpdmVseSBkZWFkIGNvZGUgaW4gYSBmdXp6aW5nIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAgYW5kIFJUTDgzOTAgTURJTyBjb250cm9sbGVycyBpbiB0aGUgbWRpby1yZWFsdGVrLXJ0bDkzMDAgcGxhdGZvcm0gZHJpdmVyLCBhbmQgYWRkcyBub3RpZnlfcGh5X2F0dGFjaC9ub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSB3aGljaCBhcmUgb25seSB1c2VkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBTaW5jZSB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBSZWFsdGVrIFNvQ3MsIGl0IGNhbm5vdCBiZSBwcm9iZWQgaW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChsaWtlIFFFTVUgb3IgR0NFKSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIHN1cHBvcnQuIFRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gY2hhbmdlcyBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgYmVjYXVzZSBubyByZWFjaGFibGUgZHJpdmVyIHNldHMgdGhlc2UgY2FsbGJhY2tzLiBUaHVzLCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIGluIHRoZSBtZGlvLXJlYWx0ZWstcnRsOTMwMCBwbGF0Zm9ybSBkcml2ZXIsIGFuZCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoL25vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIHdoaWNoIGFyZSBvbmx5IHVzZWQgYnkgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIFNpbmNlIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIFJlYWx0ZWsgU29DcywgaXQgY2Fubm90IGJlIHByb2JlZCBpbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgKGxpa2UgUUVNVSBvciBHQ0UpIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgc3VwcG9ydC4gVGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBjaGFuZ2VzIGFyZSBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBiZWNhdXNlIG5vIHJlYWNoYWJsZSBkcml2ZXIgc2V0cyB0aGVzZSBjYWxsYmFja3MuIFRodXMsIHRoZSBtb2RpZmllZCBjb2RlIGNhbm5vdCBiZSBleGVjdXRlZCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDoyMS42ODgwNDgyNzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTY3NTk4NTY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAgYW5kIFJUTDgzOTAgTURJTyBjb250cm9sbGVycyBpbiB0aGUgbWRpby1yZWFsdGVrLXJ0bDkzMDAgcGxhdGZvcm0gZHJpdmVyLCBhbmQgYWRkcyBub3RpZnlfcGh5X2F0dGFjaC9ub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSB3aGljaCBhcmUgb25seSB1c2VkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBTaW5jZSB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBSZWFsdGVrIFNvQ3MsIGl0IGNhbm5vdCBiZSBwcm9iZWQgaW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChsaWtlIFFFTVUgb3IgR0NFKSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIHN1cHBvcnQuIFRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gY2hhbmdlcyBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgYmVjYXVzZSBubyByZWFjaGFibGUgZHJpdmVyIHNldHMgdGhlc2UgY2FsbGJhY2tzLiBUaHVzLCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDoyMS42ODgwNjAyNjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4Mzk2NjA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDExMGIyMmY4NDVkOGZhZDk0YTA2ZTU5YzM3ZjJjZTA4ZjY0OGFjODVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMDA6NTA6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuaW5kZXggMjcxZTA1YmFlOWM1NzQuLjY3ZTBiMjNhODQ3MGVhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbkBAIC00LDcgKzQsNyBAQFxcbiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sI1xcbiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4gXFxuLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyXFxuK3RpdGxlOiBSZWFsdGVrIE90dG8gU3dpdGNoZXMgRXRoZXJuZXQgTURJTyBDb250cm9sbGVyXFxuIFxcbiBtYWludGFpbmVyczpcXG4gICAtIENocmlzIFBhY2toYW0gXFx1MDAzY2NocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uelxcdTAwM2VcXG5AQCAtMTIsNiArMTIsMTYgQEAgbWFpbnRhaW5lcnM6XFxuIHByb3BlcnRpZXM6XFxuICAgY29tcGF0aWJsZTpcXG4gICAgIG9uZU9mOlxcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzODAtbWRpb1xcbisgICAgICAtIGl0ZW1zOlxcbisgICAgICAgICAgLSBlbnVtOlxcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvXFxuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpb1xcbiAgICAgICAtIGl0ZW1zOlxcbiAgICAgICAgICAgLSBlbnVtOlxcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXFxuQEAgLTI0LDYgKzM0LDggQEAgcHJvcGVydGllczpcXG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvXFxuICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpb1xcbiAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvXFxuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvXFxuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvXFxuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMS1tZGlvXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcXG5pbmRleCBhZmQ1MmExY2Q3ZjgzMS4uYWViYzc2YWU1ZTU2MGMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuQEAgLTM1LDYgKzM1LDc0IEBAXFxuICAqXFxuICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uXFxuICAqIHRoZSBldGhlcm5ldC1wb3J0cyBwcm9wZXJ0eS5cXG4rICpcXG4rICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0XFxuKyAqIGNvbnN0YW50bHkgc2NhbnMgdGhlIE1ESU8gYnVzIGFuZCB0aGUgYXR0YWNoZWQgUEhZcyBhbmQgdXBkYXRlcyB0aGUgTUFDIHN0YXR1cyByZWdpc3RlcnMuXFxuKyAqXFxuKyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/XFxuKyAqXFxuKyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mXFxuKyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvclxcbisgKiBlYWNoIHNldCBwb2xsaW5nIGJpdCBpdCBpc3N1ZXMgYSBzdGF0dXMgY2hlY2sgZm9yIHRoZSBQSFkuIEF0dGFjaGluZyBhIGxvZ2ljIGFuYWx5emVyIHRvIHRoZVxcbisgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6XFxuKyAqXFxuKyAqXFx0UlRMODM4MFxcdFxcdFxcdFxcdFJUTDgzOTNcXG4rICpcXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICpcXHRwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTtcXHRwaHlfcmVhZChwaHksIDApO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcdHBoeV9yZWFkKHBoeSwgMSk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xcdHBoeV9yZWFkKHBoeSwgNCk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XFx0cGh5X3JlYWQocGh5LCA1KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDE0KTtcXHRcXHRwaHlfcmVhZChwaHksIDYpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcdHBoeV9yZWFkKHBoeSwgOSk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1xcdHBoeV9yZWFkKHBoeSwgMTApO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1xcdHBoeV9yZWFkKHBoeSwgMTUpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgOSk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTApO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTUpO1xcdFxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxKTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA0KTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDUpO1xcdFxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgNik7XFxuKyAqXFxuKyAqIEZyb20gdGhlIGFib3ZlIHNuaXBwZXRzIGl0IHBvbGxzIE1ESU9fQU5fRUVFX0FEViBhbmQgTURJT19BTl9FRUVfTFBBQkxFIHZpYSBDNDUgb3ZlciBDMjIuIEFzXFxuKyAqIG9mIG5vdyBpdCBpcyB1bmNsZWFyIGhvdyB0aGUgaGFyZHdhcmUgZGVjaWRlcyBpZiBhIFBIWSBzdXBwb3J0cyB0aGVzZSByZWdpc3RlcnMuIEFmdGVyIG9uZSBQSFlcXG4rICogc3RhdHVzIGlzIHJlYWQsIHRoZSBwb2xsaW5nIGVuZ2luZSBnb2VzIG92ZXIgdG8gdGhlIG5leHQgUEhZLiBCYXNpY2FsbHkgdGhlIGJ1cyBpcyBhbHdheXMgYnVzeVxcbisgKiBhbmQgdGhlIE1BQyBzdGF0dXMgaXMgdXBkYXRlZCBpbiByZWFsLXRpbWUuXFxuKyAqXFxuKyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/XFxuKyAqXFxuKyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXJcXG4rICogc2V0cyBhIFxcXCJydW4gY29tbWFuZCBub3dcXFwiIGJpdC4gQmV0d2VlbiB0d28gcG9sbGluZyBzZXF1ZW5jZXMgZm9yIGRpZmZlcmVudCBQSFlzIHRoZSBoYXJkd2FyZVxcbisgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlc1xcbisgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHJlYWQgb24gdGhlIGxvZ2ljIGFuYWx5emVyIGdpdmVzOlxcbisgKlxcbisgKlxcdFJUTDgzODBcXHRcXHRcXHRcXHRSVEw4MzkzXFxuKyAqXFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcXHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcXG4rICpcXHRcXHRcXHRcXHRcXHRwaHlfd3JpdGUocGh5LCAzMSwgMCk7XFxuKyAqXFxuKyAqIFdoYXQgZG9lcyB0aGlzIG1lYW4/XFxuKyAqXFxuKyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2VcXG4rICogc3RheXMgdGhlIHNhbWUuIE9uIHRoZSBvbmUgaGFuZCB0aGF0IGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgTUFDIGxheWVyLCBvbiB0aGUgb3RoZXIgaGFuZCBpdFxcbisgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS5cXG4rICpcXG4rICogLSBXaXRob3V0IHRoZSBwb2xsaW5nIGFuZCBhIHByb3BlciBNQUMgc3RhdHVzLCBzb21lIG9mIHRoZSBsaW5rIGhhbmRsaW5nIGZlYXR1cmVzIGRvIG5vdCB3b3JrLlxcbisgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLlxcbisgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsXFxuKyAqICAgcmVhZCB0aGUgcmlnaHQgZGF0YS4gT24gdGhlIFJUTDgzOHggcG9sbGluZyBzaW1wbHkgcmVzZXRzIGl0IHRvIHplcm8uIE90aGVyIGRldmljZXMgc2VlbVxcbisgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyBcXFwibWFnaWNhbGx5XFxcIiBpbiB0aGUgYmFja2dyb3VuZC5cXG4rICogLSBBIEM0NSBvdmVyIEMyMiBrZXJuZWwgYWNjZXNzIHNlcXVlbmNlIGlzIG1vc3QgbGlrZWx5IHRvIGZhaWwgYmVjYXVzZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXRcXG4rICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi5cXG4rICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW5cXG4rICogICBzZXF1ZW5jZSBvZiByZWdpc3RlcnMgYW5kIHZhbHVlcyB3aXRob3V0IGRldmlhdGlvbi5cXG4rICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS5cXG4rICpcXG4rICogQ29uY2x1c2lvbjogVGhlIFJlYWx0ZWsgTURJTyBidXMgZHJpdmVyIFBIWSBhY2Nlc3MgbXVzdCBrbm93IGFuZCBoYW5kbGUgYW55IGludGVyZmVyZW5jZSB0aGF0XFxuKyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy5cXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG5AQCAtNTAsNiArMTE4LDUwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVnbWFwLmhcXHUwMDNlXFxuIFxcbisjZGVmaW5lIFJUTDgzODBfTlVNX0JVU0VTXFx0XFx0XFx0MVxcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXFx0XFx0XFx0NDA5NlxcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXFx0XFx0XFx0MjhcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFxcdFxcdFxcdDB4YTEwMFxcbisjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzBcXHRcXHQweGExYjhcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMVxcdFxcdDB4YTFiY1xcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlxcdFxcdEdFTk1BU0soMjQsIDIwKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0VcXHRcXHRHRU5NQVNLKDE5LCAxNSlcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFXFx0XFx0R0VOTUFTSygxNCwgMylcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcXHRcXHRCSVQoMilcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVBRFxcdFxcdFxcdDBcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDVcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjJcXHRcXHQwXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcXHRcXHRcXHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzJcXHRcXHQweGExYzBcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygzMSwgMTYpXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEFcXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXFx0XFx0MHhhMWM0XFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXFx0XFx0XFx0MHhhMTdjXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcXHRcXHQweGExYzhcXG4rXFxuKyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVNcXHRcXHRcXHQyXFxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUEFHRVNcXHRcXHRcXHQ4MTkyXFxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFNcXHRcXHRcXHQ1MlxcbisjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTFxcdFxcdDB4MDNlY1xcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMXFx0XFx0MHgwM2RjXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSXFx0XFx0R0VOTUFTSyg5LCA1KVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0VcXHRcXHRHRU5NQVNLKDIyLCAxMClcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRkFJTFxcdFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURVxcdFxcdEJJVCgzKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXFx0XFx0XFx0MFxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVxcdFxcdEJJVCgyKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMlxcdFxcdDBcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19DVFJMXFx0XFx0XFx0MHgwM2UwXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFXFx0XFx0R0VOTUFTSyg4LCAwKVxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTFxcdFxcdDB4MDNmMFxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEFcXHRcXHRHRU5NQVNLKDMxLCAxNilcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkxcXHRcXHRcXHQweDAzZjRcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXFx0XFx0MHgwM2U0XFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcXHRcXHQweDAzZThcXG4rI2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFxcdFxcdDB4MDNmY1xcbitcXG4gI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFU1xcdFxcdFxcdDRcXG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1xcdFxcdFxcdDQwOTZcXG4gI2RlZmluZSBSVEw5MzAwX05VTV9QT1JUU1xcdFxcdFxcdDI4XFxuQEAgLTcwLDYgKzE4Miw3IEBAXFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMzEsIDE2KVxcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9EQVRBXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1xcdFxcdDB4Y2I3Y1xcbisjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTFxcdFxcdFxcdDB4Y2E5MFxcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMXFx0XFx0MHhjYjgwXFxuIFxcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTXFx0XFx0XFx0NFxcbkBAIC05NSwxMSArMjA4LDEzIEBAXFxuICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMTUsIDApXFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMXFx0MHgwYzE4XFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9BRERSX0NUUkxcXHRcXHQweDBjNzRcXG4rI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFxcdFxcdDB4MGNjY1xcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcXHRcXHQweDBjOWNcXG4gXFxuICNkZWZpbmUgUEhZX0NUUkxfQ01EXFx0XFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXFx0XFx0XFx0R0VOTUFTSygyMCwgMTYpXFxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX1JFR1xcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgUEhZX1ZFTkRPUl9SRUFMVEVLXFx0XFx0XFx0MHgwMDFjYzgwMFxcbiBcXG4gI2RlZmluZSBNQVBfQUREUlNfUEVSX1JFR1xcdFxcdFxcdDZcXG4gI2RlZmluZSBNQVBfQklUU19QRVJfQUREUlxcdFxcdFxcdDVcXG5AQCAtMTI1LDcgKzI0MCw5IEBAIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYge1xcbiBcXHRjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvICppbmZvO1xcbiBcXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XFxuIFxcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xcbitcXHRERUNMQVJFX0JJVE1BUChwaHlfcG9sbCwgTUFYX1BPUlRTKTtcXG4gXFx0REVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7XFxuK1xcdHUxNiBwYWdlW01BWF9QT1JUU107XFxuIFxcdHU4IHNtaV9idXNbTUFYX1BPUlRTXTtcXG4gXFx0dTggc21pX2FkZHJbTUFYX1BPUlRTXTtcXG4gXFx0Ym9vbCBzbWlfYnVzX2lzX2M0NVtNQVhfU01JX0JVU1NFU107XFxuQEAgLTE0Miw2ICsyNTksNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcXG4gXFx0dTggbnVtX2J1c2VzO1xcbiBcXHR1OCBudW1fcG9ydHM7XFxuIFxcdHUxNiBudW1fcGFnZXM7XFxuK1xcdHUzMiBwb2xsX2N0cmw7XFxuIFxcdGludCAoKnNldHVwX2NvbnRyb2xsZXIpKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpO1xcbiBcXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xcbiBcXHRpbnQgKCpyZWFkX2M0NSkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XFxuQEAgLTE3Nyw2ICsyOTUsMTQgQEAgc3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcXG4gXFx0cmV0dXJuIGNoYW4tXFx1MDAzZXByaXY7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2Vwb2xsX2N0cmwgKyAocG9ydCAvIDMyKSAqIDQsXFxuK1xcdFxcdFxcdFxcdCAgQklUKHBvcnQgJSAzMiksIGFjdGl2ZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcXG4ge1xcbkBAIC0xODUsOSArMzExLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0dTMyIGNtZHN0YXRlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibGUgd3JvbmcgKi9cXG4rXFx0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcgKi9cXG4gXFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXFx1MDAzZXJlZ21hcCwgaW5mby1cXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTIyNyw3ICszNTMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXFx1MDAzZXJlZ21hcCwgaW5mby1cXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTI2NCwxMyArMzkwLDEyMyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXFxuIFxcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VjbWRfd3JpdGUsIGNtZF9kYXRhKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93XFx0PSBCSVQocG9ydCksXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmM0NV9kYXRhXFx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9IEJJVChwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFxcdTAwMjZjbWRfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuK1xcdFxcdC5leHRfcGFnZVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmV4dF9wYWdlXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoXFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFxcdTAwM2VcXHUwMDNlIDMyKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jNDVfZGF0YVxcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsIFxcdTAwMjZjbWRfZGF0YSxcXG4rXFx0XFx0XFx0XFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmM0NV9kYXRhXFx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXFxuK1xcdFxcdC5wb3J0X21hc2tfaGlnaFxcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcXHUwMDNlXFx1MDAzZSAzMiksXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93XFx0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsIFxcdTAwMjZjbWRfZGF0YSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxcbiB7XFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuIFxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxcbi1cXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4gXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbiBcXHR9O1xcbiBcXG5AQCAtMjg0LDcgKzUyMCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuIFxcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4gXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gQklUKHBvcnQpLFxcbiBcXHR9O1xcbkBAIC0zMjQsNyArNTYwLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHVcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuIFxcdFxcdC5icm9hZGNhc3RcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSxcXG4gXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbi1cXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4gXFx0fTtcXG4gXFxuIFxcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMOTMxMF9QSFlfQ1RSTF9UWVBFX0MyMiwgXFx1MDAyNmNtZF9kYXRhLFxcbkBAIC0zMzYsNyArNTcyLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbi1cXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4gXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4gXFx0XFx0LnBvcnRfbWFza19oaWdoXFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFxcdTAwM2VcXHUwMDNlIDMyKSxcXG4gXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxcbkBAIC0zODIsOCArNjE4LDEyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKVxcbiBcXHRpZiAocG9ydCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBwb3J0O1xcbiBcXG4tXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaylcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRpZiAocmVnbnVtID09IDMxKVxcbitcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcGFnZVtwb3J0XTtcXG4rXFxuIFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcXHUwMDI2dmFsdWUpO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XFxuIH1cXG5AQCAtMzk3LDggKzYzNywxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNlxcbiBcXHRpZiAocG9ydCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBwb3J0O1xcbiBcXG4tXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaylcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRpZiAocmVnbnVtID09IDMxKSB7XFxuK1xcdFxcdFxcdGlmICh2YWx1ZSBcXHUwMDNlPSBSQVdfUEFHRShwcml2KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VwYWdlW3BvcnRdID0gdmFsdWU7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRyZXQgPSBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2V3cml0ZV9jMjIoYnVzLCBwb3J0LCByZWdudW0sIHZhbHVlKTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC00NzEsNiArNzIwLDE1IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFBIWV9QQVRDSF9ET05FIGVuYWJsZXMgUEhZIGNvbnRyb2wgdmlhIFNvQy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgUEhZIGFjY2VzcywgaW5jbHVkaW5nXFxuK1xcdCAqIHBhdGNoaW5nIGFuZCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIFBIWXMgYXJlIHByb2JlZC5cXG4rXFx0ICovXFxuK1xcdHJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0dTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwO1xcbkBAIC01MDcsNiArNzY1LDU0IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cXHUwMDNlbWRpby5idXMpO1xcbitcXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHBvcnQ7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXNtaV9idXNfaXNfYzQ1W2NoYW4tXFx1MDAzZW1kaW9fYnVzXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKCFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LVxcdTAwM2VwaHlfaWQsIFBIWV9WRU5ET1JfUkVBTFRFSykpKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiT25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmICh0ZXN0X2JpdChwb3J0LCBwcml2LVxcdTAwM2VwaHlfcG9sbCkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0cmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0X19zZXRfYml0KHBvcnQsIHByaXYtXFx1MDAzZXBoeV9wb2xsKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cXHUwMDNlbWRpby5idXMpO1xcbitcXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0X19jbGVhcl9iaXQocG9ydCwgcHJpdi1cXHUwMDNlcGh5X3BvbGwpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZXJyKGJ1cy1cXHUwMDNlcGFyZW50LCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcXFxuXFxcIiwgcG9ydCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXFxuIHtcXG5AQCAtNTM2LDYgKzg0Miw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2XFxuIFxcdFxcdGJ1cy1cXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcXG4gXFx0fVxcbiBcXHRidXMtXFx1MDAzZXBhcmVudCA9IGRldjtcXG4rXFx0YnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XFxuK1xcdGJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xcbitcXG4gXFx0Y2hhbiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4gXFx0Y2hhbi1cXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcXG4gXFx0Y2hhbi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuQEAgLTY1Miw2ICs5NjEsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXFx1MDAzYyBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fcG9ydHM7IHBvcnQrKykge1xcbitcXHRcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdFxcdGVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuQEAgLTY3MSw2ICs5OTUsMTAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlcmVnbWFwKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlcmVnbWFwKTtcXG4gXFxuK1xcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4gXFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XFxuIFxcbiBcXHRlcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpO1xcbkBAIC02OTYsNiArMTAyNCw1MSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0ge1xcbitcXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxcbitcXHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXFxuK1xcdC5jbWRfcmVhZCA9IFJUTDgzODBfUEhZX0NUUkxfUkVBRCxcXG4rXFx0LmNtZF93cml0ZSA9IFJUTDgzODBfUEhZX0NUUkxfV1JJVEUsXFxuK1xcdC5jbWRfcmVncyA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsXFxuK1xcdFxcdC5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLFxcbitcXHRcXHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLFxcbitcXHR9LFxcbitcXHQubnVtX2J1c2VzID0gUlRMODM4MF9OVU1fQlVTRVMsXFxuK1xcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcXG4rXFx0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMODM4MF9TTUlfUE9MTF9DVFJMLFxcbitcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxcbitcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXFxuK1xcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NSxcXG4rXFx0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXFxuK1xcdC53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7XFxuK1xcdC5jbWRfZmFpbCA9IFJUTDgzOTBfUEhZX0NUUkxfRkFJTCxcXG4rXFx0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxcbitcXHQuY21kX3dyaXRlID0gUlRMODM5MF9QSFlfQ1RSTF9XUklURSxcXG4rXFx0LmNtZF9yZWdzID0ge1xcbitcXHRcXHQuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLFxcbitcXHRcXHQuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCxcXG4rXFx0XFx0LmM0NV9kYXRhID0gUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwsXFxuK1xcdFxcdC5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsXFxuK1xcdFxcdC5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1csXFxuK1xcdFxcdC5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILFxcbitcXHR9LFxcbitcXHQubnVtX2J1c2VzID0gUlRMODM5MF9OVU1fQlVTRVMsXFxuK1xcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcXG4rXFx0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXFxuK1xcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMixcXG4rXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxcbitcXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMixcXG4rXFx0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcXG4gXFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcXG4gXFx0LmJ1c19tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMLFxcbkBAIC03MTEsNiArMTA4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xcbiBcXHQubnVtX2J1c2VzID0gUlRMOTMwMF9OVU1fQlVTRVMsXFxuIFxcdC5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUyxcXG4gXFx0Lm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLFxcbiBcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLFxcbiBcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXFxuIFxcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSxcXG5AQCAtNzM2LDYgKzExMTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcXG4gXFx0Lm51bV9idXNlcyA9IFJUTDkzMTBfTlVNX0JVU0VTLFxcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXFxuIFxcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcXG4rXFx0LnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxcbiBcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLFxcbiBcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXFxuIFxcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSxcXG5AQCAtNzQ0LDYgKzExMTksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw4MzgwLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzgzODBfaW5mbyB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscnRsODM5MS1tZGlvXFxcIiwgLmRhdGEgPSBcXHUwMDI2b3R0b19lbWRpb184MzkwX2luZm8gfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDkzMDEtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fOTMwMF9pbmZvIH0sXFxuIFxcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw5MzExLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LFxcbiBcXHR7fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDk0YjJlODVlMDBhMzc5Li5hNjJjMmZmNmMyYWFiYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbkBAIC0xODc2LDYgKzE4NzYsMTMgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcXG4rXFx0XFx0ZXJyID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VtZGlvX2J1c19ub3RpZmllZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuIFxcdHBoeV9yZXN1bWUocGh5ZGV2KTtcXG4gXFxuIFxcdC8qKlxcbkBAIC0xOTE5LDYgKzE5MjYsMTAgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbiBcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpb19idXNfbm90aWZpZWQgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gpXFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XFxuK1xcdHBoeWRldi1cXHUwMDNlbWRpb19idXNfbm90aWZpZWQgPSBmYWxzZTtcXG4rXFxuIFxcdGlmIChwaHlkZXYtXFx1MDAzZWRldmxpbmspIHtcXG4gXFx0XFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cXHUwMDNlZGV2bGluayk7XFxuIFxcdFxcdHBoeWRldi1cXHUwMDNlZGV2bGluayA9IE5VTEw7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuaW5kZXggMTEwOTJjMzE3NWIzZGUuLjJkMzBlMDg3YTIzMzczIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuQEAgLTM3Niw2ICszNzYsMjMgQEAgc3RydWN0IG1paV9idXMge1xcbiBcXHRcXHRcXHQgaW50IHJlZ251bSwgdTE2IHZhbCk7XFxuIFxcdC8qKiBAcmVzZXQ6IFBlcmZvcm0gYSByZXNldCBvZiB0aGUgYnVzICovXFxuIFxcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcXG4rXFx0LyoqXFxuK1xcdCAqIEBub3RpZnlfcGh5X2F0dGFjaDogUGVyZm9ybSBwb3N0LWF0dGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcXG4rXFx0ICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2F0dGFjaF9kaXJlY3QoKSByaWdodCBhZnRlciBwaHlfaW5pdF9odygpXFxuK1xcdCAqICAgYW5kIGJlZm9yZSBwaHlfcmVzdW1lKCkuIEF0IHRoaXMgcG9pbnQsIHRoZSBQSFkgaXMgc3RpbGxcXG4rXFx0ICogICBzdXNwZW5kZWQsIGFuZCBAcGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYgbWF5IGJlIE5VTEwgKGUuZy4gZm9yXFxuK1xcdCAqICAgc3RhbmRhbG9uZSBQSFlzKS4gUnVucyBpbiBwcm9jZXNzIGNvbnRleHQgYW5kIG1heSBzbGVlcC4gUmV0dXJuXFxuK1xcdCAqICAgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZSAod2hpY2ggYWJvcnRzIHRoZVxcbitcXHQgKiAgIGF0dGFjaCBzZXF1ZW5jZSkuXFxuK1xcdCAqL1xcbitcXHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuK1xcdC8qKlxcbitcXHQgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcXG4rXFx0ICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2RldGFjaCgpIGJlZm9yZSBkZXZpY2UgbGlua3MgYW5kIHJlc291cmNlc1xcbitcXHQgKiAgIGFyZSBjbGVhbmVkIHVwLiBSdW5zIGluIHByb2Nlc3MgY29udGV4dCBhbmQgbWF5IHNsZWVwLiBPbmx5XFxuK1xcdCAqICAgaW52b2tlZCBpZiBAbm90aWZ5X3BoeV9hdHRhY2ggd2FzIHByZXZpb3VzbHkgY2FsbGVkIGFuZCBzdWNjZWVkZWQuXFxuK1xcdCAqL1xcbitcXHR2b2lkICgqbm90aWZ5X3BoeV9kZXRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBcXG4gXFx0LyoqIEBzdGF0czogU3RhdGlzdGljIGNvdW50ZXJzIHBlciBkZXZpY2Ugb24gdGhlIGJ1cyAqL1xcbiBcXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcXG5AQCAtNTc0LDYgKzU5MSw3IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcXG4gICogQGhhc19maXh1cHM6IFNldCB0byB0cnVlIGlmIHRoaXMgUEhZIGhhcyBmaXh1cHMvcXVpcmtzLlxcbiAgKiBAc3VzcGVuZGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGlzIFBIWSBoYXMgYmVlbiBzdXNwZW5kZWQgc3VjY2Vzc2Z1bGx5LlxcbiAgKiBAc3VzcGVuZGVkX2J5X21kaW9fYnVzOiBTZXQgdG8gdHJ1ZSBpZiB0aGlzIFBIWSB3YXMgc3VzcGVuZGVkIGJ5IE1ESU8gYnVzLlxcbisgKiBAbWRpb19idXNfbm90aWZpZWQ6IFNldCB0byB0cnVlIGlmIHBvc3QtYXR0YWNoIGJ1cyBub3RpZmljYXRvbiBzdWNjZWVkZWQuXFxuICAqIEBzeXNmc19saW5rczogSW50ZXJuYWwgYm9vbGVhbiB0cmFja2luZyBzeXNmcyBzeW1ib2xpYyBsaW5rcyBzZXR1cC9yZW1vdmFsLlxcbiAgKiBAbG9vcGJhY2tfZW5hYmxlZDogU2V0IHRydWUgaWYgdGhpcyBQSFkgaGFzIGJlZW4gbG9vcGJhY2tlZCBzdWNjZXNzZnVsbHkuXFxuICAqIEBkb3duc2hpZnRlZF9yYXRlOiBTZXQgdHJ1ZSBpZiBsaW5rIHNwZWVkIGhhcyBiZWVuIGRvd25zaGlmdGVkLlxcbkBAIC02ODUsNiArNzAzLDcgQEAgc3RydWN0IHBoeV9kZXZpY2Uge1xcbiBcXHR1bnNpZ25lZCBoYXNfZml4dXBzOjE7XFxuIFxcdHVuc2lnbmVkIHN1c3BlbmRlZDoxO1xcbiBcXHR1bnNpZ25lZCBzdXNwZW5kZWRfYnlfbWRpb19idXM6MTtcXG4rXFx0dW5zaWduZWQgbWRpb19idXNfbm90aWZpZWQ6MTtcXG4gXFx0dW5zaWduZWQgc3lzZnNfbGlua3M6MTtcXG4gXFx0dW5zaWduZWQgbG9vcGJhY2tfZW5hYmxlZDoxO1xcbiBcXHR1bnNpZ25lZCBkb3duc2hpZnRlZF9yYXRlOjE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAwOjUwOjIyLjM3NTExMjcyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM4OTg4OTEzMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIGluIHRoZSBtZGlvLXJlYWx0ZWstcnRsOTMwMCBwbGF0Zm9ybSBkcml2ZXIsIGFuZCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoL25vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIHdoaWNoIGFyZSBvbmx5IHVzZWQgYnkgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIFNpbmNlIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIFJlYWx0ZWsgU29DcywgaXQgY2Fubm90IGJlIHByb2JlZCBpbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgKGxpa2UgUUVNVSBvciBHQ0UpIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgc3VwcG9ydC4gVGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBjaGFuZ2VzIGFyZSBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBiZWNhdXNlIG5vIHJlYWNoYWJsZSBkcml2ZXIgc2V0cyB0aGVzZSBjYWxsYmFja3MuIFRodXMsIHRoZSBtb2RpZmllZCBjb2RlIGNhbm5vdCBiZSBleGVjdXRlZCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTEwYjIyZjg0NWQ4ZmFkOTRhMDZlNTljMzdmMmNlMDhmNjQ4YWM4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDAwOjUwOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5pbmRleCAyNzFlMDViYWU5YzU3NC4uNjdlMGIyM2E4NDcwZWEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuQEAgLTQsNyArNCw3IEBAXG4gJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCNcbiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiBcbi10aXRsZTogUmVhbHRlayBSVEw5MzAwIE1ESU8gQ29udHJvbGxlclxuK3RpdGxlOiBSZWFsdGVrIE90dG8gU3dpdGNoZXMgRXRoZXJuZXQgTURJTyBDb250cm9sbGVyXG4gXG4gbWFpbnRhaW5lcnM6XG4gICAtIENocmlzIFBhY2toYW0gXHUwMDNjY2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56XHUwMDNlXG5AQCAtMTIsNiArMTIsMTYgQEAgbWFpbnRhaW5lcnM6XG4gcHJvcGVydGllczpcbiAgIGNvbXBhdGlibGU6XG4gICAgIG9uZU9mOlxuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW9cbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzgwLW1kaW9cbisgICAgICAtIGl0ZW1zOlxuKyAgICAgICAgICAtIGVudW06XG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5Mi1tZGlvXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvXG4gICAgICAgLSBpdGVtczpcbiAgICAgICAgICAgLSBlbnVtOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW9cbkBAIC0yNCw2ICszNCw4IEBAIHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvXG4gICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsOTMxMS1tZGlvXG4gICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMS1tZGlvXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5pbmRleCBhZmQ1MmExY2Q3ZjgzMS4uYWViYzc2YWU1ZTU2MGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuQEAgLTM1LDYgKzM1LDc0IEBAXG4gICpcbiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvblxuICAqIHRoZSBldGhlcm5ldC1wb3J0cyBwcm9wZXJ0eS5cbisgKlxuKyAqIFRoZSBkZXZpY2VzIGhhdmUgYSBoYXJkd2FyZSBwb2xsaW5nIHVuaXQgdGhhdCBydW5zIGluIHRoZSBiYWNrZ3JvdW5kIHdpdGhvdXQgYW55IENQVSBsb2FkLiBJdFxuKyAqIGNvbnN0YW50bHkgc2NhbnMgdGhlIE1ESU8gYnVzIGFuZCB0aGUgYXR0YWNoZWQgUEhZcyBhbmQgdXBkYXRlcyB0aGUgTUFDIHN0YXR1cyByZWdpc3RlcnMuXG4rICpcbisgKiBIb3cgZG9lcyB0aGUgcG9sbGluZyB3b3JrP1xuKyAqXG4rICogRWFjaCBkZXZpY2UgaGFzIGEgU01JX1BPTExfQ1RSTCByZWdpc3Rlci4gQSBwZXItcG9ydCBiaXRtYXNrIGRlY2lkZXMgaWYgdGhlIGhhcmR3YXJlIHBvbGxpbmcgb2ZcbisgKiB0aGUgYXNzb2NpYXRlZCBidXMvYWRkcmVzcyBpcyBhY3RpdmUgb3Igbm90LiBUaGUgaGFyZHdhcmUgcnVucyBhIHRpZ2h0IGxvb3Agb3ZlciB0aGlzIGFuZCBmb3JcbisgKiBlYWNoIHNldCBwb2xsaW5nIGJpdCBpdCBpc3N1ZXMgYSBzdGF0dXMgY2hlY2sgZm9yIHRoZSBQSFkuIEF0dGFjaGluZyBhIGxvZ2ljIGFuYWx5emVyIHRvIHRoZVxuKyAqIE1ESU8gYnVzIG9mIGFuIFJUTDgzODAgYW5kIFJUTDgzOTMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoaW4ga2VybmVsIG5vdGF0aW9uKTpcbisgKlxuKyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4rICpcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICpcdHBoeV93cml0ZShwaHksIDMxLCAweDApO1x0cGh5X3JlYWQocGh5LCAwKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDEpO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XHRwaHlfcmVhZChwaHksIDQpO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcdHBoeV9yZWFkKHBoeSwgNSk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTQpO1x0XHRwaHlfcmVhZChwaHksIDYpO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgOSk7XG4rICpcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcdHBoeV9yZWFkKHBoeSwgMTApO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcdHBoeV9yZWFkKHBoeSwgMTUpO1xuKyAqXHRwaHlfcmVhZChwaHksIDE0KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgOSk7XHRcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcbisgKlx0cGh5X3JlYWQocGh5LCAxMCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xuKyAqXHRwaHlfcmVhZChwaHksIDE1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xuKyAqXHRwaHlfcmVhZChwaHksIDEpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XG4rICpcdHBoeV9yZWFkKHBoeSwgNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xuKyAqXHRwaHlfcmVhZChwaHksIDUpO1x0XHRwaHlfcmVhZChwaHksIDE0KTtcbisgKlx0cGh5X3JlYWQocGh5LCA2KTtcbisgKlxuKyAqIEZyb20gdGhlIGFib3ZlIHNuaXBwZXRzIGl0IHBvbGxzIE1ESU9fQU5fRUVFX0FEViBhbmQgTURJT19BTl9FRUVfTFBBQkxFIHZpYSBDNDUgb3ZlciBDMjIuIEFzXG4rICogb2Ygbm93IGl0IGlzIHVuY2xlYXIgaG93IHRoZSBoYXJkd2FyZSBkZWNpZGVzIGlmIGEgUEhZIHN1cHBvcnRzIHRoZXNlIHJlZ2lzdGVycy4gQWZ0ZXIgb25lIFBIWVxuKyAqIHN0YXR1cyBpcyByZWFkLCB0aGUgcG9sbGluZyBlbmdpbmUgZ29lcyBvdmVyIHRvIHRoZSBuZXh0IFBIWS4gQmFzaWNhbGx5IHRoZSBidXMgaXMgYWx3YXlzIGJ1c3lcbisgKiBhbmQgdGhlIE1BQyBzdGF0dXMgaXMgdXBkYXRlZCBpbiByZWFsLXRpbWUuXG4rICpcbisgKiBIb3cgZG9lcyBNRElPIGFjY2VzcyBmcm9tIGtlcm5lbCB3b3JrP1xuKyAqXG4rICogV2hlbiBpc3N1aW5nIE1ESU8gYWNjZXNzZXMgdmlhIGFuIE1NSU8gYmFzZWQgaW50ZXJmYWNlIHRoZSBmaW5hbCB3cml0ZSB0byB0aGUgY29tbWFuZCByZWdpc3RlclxuKyAqIHNldHMgYSBcInJ1biBjb21tYW5kIG5vd1wiIGJpdC4gQmV0d2VlbiB0d28gcG9sbGluZyBzZXF1ZW5jZXMgZm9yIGRpZmZlcmVudCBQSFlzIHRoZSBoYXJkd2FyZVxuKyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXG4rICogaXRzIHBvbGxpbmcgd29yay4gSW5zcGVjdGluZyB0aGUgY29tbWFuZCBzZXF1ZW5jZSBmb3IgYSBwYWdlZCByZWFkIG9uIHRoZSBsb2dpYyBhbmFseXplciBnaXZlczpcbisgKlxuKyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4rICpcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICpcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcbisgKlx0XHRcdFx0XHRwaHlfd3JpdGUocGh5LCAzMSwgMCk7XG4rICpcbisgKiBXaGF0IGRvZXMgdGhpcyBtZWFuP1xuKyAqXG4rICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZVxuKyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXRcbisgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS5cbisgKlxuKyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay5cbisgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLlxuKyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGxcbisgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW1cbisgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyBcIm1hZ2ljYWxseVwiIGluIHRoZSBiYWNrZ3JvdW5kLlxuKyAqIC0gQSBDNDUgb3ZlciBDMjIga2VybmVsIGFjY2VzcyBzZXF1ZW5jZSBpcyBtb3N0IGxpa2VseSB0byBmYWlsIGJlY2F1c2UgY2hhbmNlcyBhcmUgaGlnaCB0aGF0XG4rICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi5cbisgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhblxuKyAqICAgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgd2l0aG91dCBkZXZpYXRpb24uXG4rICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS5cbisgKlxuKyAqIENvbmNsdXNpb246IFRoZSBSZWFsdGVrIE1ESU8gYnVzIGRyaXZlciBQSFkgYWNjZXNzIG11c3Qga25vdyBhbmQgaGFuZGxlIGFueSBpbnRlcmZlcmVuY2UgdGhhdFxuKyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG5AQCAtNTAsNiArMTE4LDUwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4gXG4rI2RlZmluZSBSVEw4MzgwX05VTV9CVVNFU1x0XHRcdDFcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFNcdFx0XHQyOFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfR0xCX0NUUkxcdFx0XHQweGExMDBcbisjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcdFx0QklUKDE1KVxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzBcdFx0MHhhMWI4XG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMVx0XHQweGExYmNcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDI0LCAyMClcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0VcdFx0R0VOTUFTSygxOSwgMTUpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMTQsIDMpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDIpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVBRFx0XHRcdDBcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMSlcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTFx0XHRcdDAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi9cbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yXHRcdDB4YTFjMFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXHRcdDB4YTFjNFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhhMTdjXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFx0XHQweGExYzhcbitcbisjZGVmaW5lIFJUTDgzOTBfTlVNX0JVU0VTXHRcdFx0MlxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUEFHRVNcdFx0XHQ4MTkyXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QT1JUU1x0XHRcdDUyXG4rI2RlZmluZSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkxcdFx0MHgwM2VjXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTFx0XHQweDAzZGNcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDksIDUpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMjIsIDEwKVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUxcdFx0XHRCSVQoMSlcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURVx0XHRCSVQoMylcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgyKVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyXHRcdDBcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcdFx0XHQweDAzZTBcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRVx0XHRHRU5NQVNLKDgsIDApXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkxcdFx0MHgwM2YwXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkxcdFx0XHQweDAzZjRcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcdFx0MHgwM2U0XG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSFx0XHQweDAzZThcbisjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MDNmY1xuK1xuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXHRcdFx0MjhcbkBAIC03MCw2ICsxODIsNyBAQFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXHRcdDB4Y2I3Y1xuKyNkZWZpbmUgUlRMOTMwMF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhjYTkwXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFx0XHQweGNiODBcbiBcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTXHRcdFx0NFxuQEAgLTk1LDExICsyMDgsMTMgQEBcbiAjZGVmaW5lICAgUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19NTURfQ1RSTFx0MHgwYzE4XG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFx0XHQweDBjNzRcbisjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MGNjY1xuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTFx0XHQweDBjOWNcbiBcbiAjZGVmaW5lIFBIWV9DVFJMX0NNRFx0XHRcdFx0QklUKDApXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQURcdFx0XHRHRU5NQVNLKDIwLCAxNilcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUdcdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgUEhZX1ZFTkRPUl9SRUFMVEVLXHRcdFx0MHgwMDFjYzgwMFxuIFxuICNkZWZpbmUgTUFQX0FERFJTX1BFUl9SRUdcdFx0XHQ2XG4gI2RlZmluZSBNQVBfQklUU19QRVJfQUREUlx0XHRcdDVcbkBAIC0xMjUsNyArMjQwLDkgQEAgc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XG4gXHRjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvICppbmZvO1xuIFx0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuIFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3QgSFcgYWNjZXNzICovXG4rXHRERUNMQVJFX0JJVE1BUChwaHlfcG9sbCwgTUFYX1BPUlRTKTtcbiBcdERFQ0xBUkVfQklUTUFQKHZhbGlkX3BvcnRzLCBNQVhfUE9SVFMpO1xuK1x0dTE2IHBhZ2VbTUFYX1BPUlRTXTtcbiBcdHU4IHNtaV9idXNbTUFYX1BPUlRTXTtcbiBcdHU4IHNtaV9hZGRyW01BWF9QT1JUU107XG4gXHRib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTtcbkBAIC0xNDIsNiArMjU5LDcgQEAgc3RydWN0IG90dG9fZW1kaW9faW5mbyB7XG4gXHR1OCBudW1fYnVzZXM7XG4gXHR1OCBudW1fcG9ydHM7XG4gXHR1MTYgbnVtX3BhZ2VzO1xuK1x0dTMyIHBvbGxfY3RybDtcbiBcdGludCAoKnNldHVwX2NvbnRyb2xsZXIpKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpO1xuIFx0aW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbiBcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbkBAIC0xNzcsNiArMjk1LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpXG4gXHRyZXR1cm4gY2hhbi1cdTAwM2Vwcml2O1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCBpbnQgcG9ydCwgYm9vbCBhY3RpdmUpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXBvbGxfY3RybCArIChwb3J0IC8gMzIpICogNCxcbitcdFx0XHRcdCAgQklUKHBvcnQgJSAzMiksIGFjdGl2ZSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRcdFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxuIHtcbkBAIC0xODUsOSArMzExLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHUzMiBjbWRzdGF0ZTtcbiBcdGludCByZXQ7XG4gXG4tXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqL1xuK1x0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcgKi9cbiBcdHJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LVx1MDAzZXJlZ21hcCwgaW5mby1cdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xuK1x0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMjcsNyArMzUzLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LVx1MDAzZXJlZ21hcCwgaW5mby1cdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xuK1x0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yNjQsMTMgKzM5MCwxMjMgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXHUwMDNlaW5mby1cdTAwM2VjbWRfd3JpdGUsIGNtZF9kYXRhKTtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuK1x0XHRcdFx0ICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuK1x0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhLFxuK1x0XHRcdFx0ICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4rXHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5leHRfcGFnZVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbitcdFx0XHRcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuK1x0XHQuZXh0X3BhZ2VcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhLFxuK1x0XHRcdFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4rXHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4rXHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4ge1xuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiBcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuIFx0fTtcbiBcbkBAIC0yODQsNyArNTIwLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuIFx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuIFx0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4gXHR9O1xuQEAgLTMyNCw3ICs1NjAsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdVxuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5icm9hZGNhc3RcdD0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLFxuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0fTtcbiBcbiBcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMOTMxMF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG5AQCAtMzM2LDcgKzU3Miw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuIFx0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuIFx0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbkBAIC0zODIsOCArNjE4LDEyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKVxuIFx0aWYgKHBvcnQgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuK1x0XHRpZiAocmVnbnVtID09IDMxKVxuK1x0XHRcdHJldHVybiBwcml2LVx1MDAzZXBhZ2VbcG9ydF07XG4rXG4gXHRcdHJldCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2VyZWFkX2MyMihidXMsIHBvcnQsIHJlZ251bSwgXHUwMDI2dmFsdWUpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHJldCA/IHJldCA6IHZhbHVlO1xuIH1cbkBAIC0zOTcsOCArNjM3LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2XG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdGlmIChyZWdudW0gPT0gMzEpIHtcbitcdFx0XHRpZiAodmFsdWUgXHUwMDNlPSBSQVdfUEFHRShwcml2KSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRcdHByaXYtXHUwMDNlcGFnZVtwb3J0XSA9IHZhbHVlO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXG4gXHRcdHJldCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2V3cml0ZV9jMjIoYnVzLCBwb3J0LCByZWdudW0sIHZhbHVlKTtcbitcdH1cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ3MSw2ICs3MjAsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuK3tcbitcdC8qXG4rXHQgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZ1xuK1x0ICogcGF0Y2hpbmcgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgUEhZcyBhcmUgcHJvYmVkLlxuK1x0ICovXG4rXHRyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4ge1xuIFx0dTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwO1xuQEAgLTUwNyw2ICs3NjUsNTQgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4rXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHBvcnQ7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlc21pX2J1c19pc19jNDVbY2hhbi1cdTAwM2VtZGlvX2J1c10gXHUwMDI2XHUwMDI2XG4rXHQgICAgKCFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LVx1MDAzZXBoeV9pZCwgUEhZX1ZFTkRPUl9SRUFMVEVLKSkpIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiT25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuK1x0XHRpZiAodGVzdF9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCkpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0X19zZXRfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4rXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBvcnQgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdF9fY2xlYXJfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpO1xuK1x0fVxuK1xuK1x0aWYgKHJldClcbitcdFx0ZGV2X2VycihidXMtXHUwMDNlcGFyZW50LCBcImZhaWxlZCB0byBkaXNhYmxlIHBvbGxpbmcgZm9yIHBvcnQgJWRcXG5cIiwgcG9ydCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuIFx0XHRcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxuIHtcbkBAIC01MzYsNiArODQyLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcbiBcdFx0YnVzLVx1MDAzZXdyaXRlID0gb3R0b19lbWRpb193cml0ZV9jMjI7XG4gXHR9XG4gXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuK1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcbitcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2g7XG4rXG4gXHRjaGFuID0gYnVzLVx1MDAzZXByaXY7XG4gXHRjaGFuLVx1MDAzZW1kaW9fYnVzID0gbWRpb19idXM7XG4gXHRjaGFuLVx1MDAzZXByaXYgPSBwcml2O1xuQEAgLTY1Miw2ICs5NjEsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBwcml2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3BvcnRzOyBwb3J0KyspIHtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbitcdFx0XHRlcnIgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG5AQCAtNjcxLDYgKzk5NSwxMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZWdtYXApKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZXJlZ21hcCk7XG4gXG4rXHRlcnIgPSBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhwcml2KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4gXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTtcbiBcbiBcdGVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7XG5AQCAtNjk2LDYgKzEwMjQsNTEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XG4rXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxuK1x0LmNtZF9mYWlsID0gUlRMODM4MF9QSFlfQ1RSTF9GQUlMLFxuK1x0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxuK1x0LmNtZF93cml0ZSA9IFJUTDgzODBfUEhZX0NUUkxfV1JJVEUsXG4rXHQuY21kX3JlZ3MgPSB7XG4rXHRcdC5jMjJfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xLFxuK1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMyxcbitcdFx0LmlvX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMixcbitcdFx0LnBvcnRfbWFza19sb3cgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMCxcbitcdH0sXG4rXHQubnVtX2J1c2VzID0gUlRMODM4MF9OVU1fQlVTRVMsXG4rXHQubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsXG4rXHQubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsXG4rXHQucG9sbF9jdHJsID0gUlRMODM4MF9TTUlfUE9MTF9DVFJMLFxuK1x0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcixcbitcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMixcbitcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NSxcbitcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyLFxuK1x0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcbitcdC5jbWRfZmFpbCA9IFJUTDgzOTBfUEhZX0NUUkxfRkFJTCxcbitcdC5jbWRfcmVhZCA9IFJUTDgzOTBfUEhZX0NUUkxfUkVBRCxcbitcdC5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLFxuK1x0LmNtZF9yZWdzID0ge1xuK1x0XHQuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLFxuK1x0XHQuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCxcbitcdFx0LmM0NV9kYXRhID0gUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwsXG4rXHRcdC5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsXG4rXHRcdC5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLFxuK1x0XHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1csXG4rXHRcdC5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILFxuK1x0fSxcbitcdC5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUyxcbitcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcbitcdC5udW1fcG9ydHMgPSBSVEw4MzkwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbitcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMixcbitcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NSxcbitcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLFxuK1x0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5hZGRyX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4gXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXG5AQCAtNzExLDYgKzEwODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzAwX05VTV9QQUdFUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LFxuQEAgLTczNiw2ICsxMTEwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXG4gXHQubnVtX3BvcnRzID0gUlRMOTMxMF9OVU1fUE9SVFMsXG4rXHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxuQEAgLTc0NCw2ICsxMTE5LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvdHRvX2VtZGlvX2lkc1tdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw4MzgwLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzgzODBfaW5mbyB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw4MzkxLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw5MzAxLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMDBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwicmVhbHRlayxydGw5MzExLW1kaW9cIiwgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LFxuIFx0e31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggOTRiMmU4NWUwMGEzNzkuLmE2MmMyZmY2YzJhYWJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE4NzYsNiArMTg3NiwxMyBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3I7XG4gXG4rXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKSB7XG4rXHRcdGVyciA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXHRcdHBoeWRldi1cdTAwM2VtZGlvX2J1c19ub3RpZmllZCA9IHRydWU7XG4rXHR9XG4rXG4gXHRwaHlfcmVzdW1lKHBoeWRldik7XG4gXG4gXHQvKipcbkBAIC0xOTE5LDYgKzE5MjYsMTAgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcbiBcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4gXG4rXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW9fYnVzX25vdGlmaWVkIFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gpXG4rXHRcdHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xuK1x0cGh5ZGV2LVx1MDAzZW1kaW9fYnVzX25vdGlmaWVkID0gZmFsc2U7XG4rXG4gXHRpZiAocGh5ZGV2LVx1MDAzZWRldmxpbmspIHtcbiBcdFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cdTAwM2VkZXZsaW5rKTtcbiBcdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAxMTA5MmMzMTc1YjNkZS4uMmQzMGUwODdhMjMzNzMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMzc2LDYgKzM3NiwyMyBAQCBzdHJ1Y3QgbWlpX2J1cyB7XG4gXHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpO1xuIFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cbiBcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcbitcdC8qKlxuK1x0ICogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nIGZvciBNRElPIGJ1c1xuK1x0ICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2F0dGFjaF9kaXJlY3QoKSByaWdodCBhZnRlciBwaHlfaW5pdF9odygpXG4rXHQgKiAgIGFuZCBiZWZvcmUgcGh5X3Jlc3VtZSgpLiBBdCB0aGlzIHBvaW50LCB0aGUgUEhZIGlzIHN0aWxsXG4rXHQgKiAgIHN1c3BlbmRlZCwgYW5kIEBwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2IG1heSBiZSBOVUxMIChlLmcuIGZvclxuK1x0ICogICBzdGFuZGFsb25lIFBIWXMpLiBSdW5zIGluIHByb2Nlc3MgY29udGV4dCBhbmQgbWF5IHNsZWVwLiBSZXR1cm5cbitcdCAqICAgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZSAod2hpY2ggYWJvcnRzIHRoZVxuK1x0ICogICBhdHRhY2ggc2VxdWVuY2UpLlxuK1x0ICovXG4rXHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4rXHQvKipcbitcdCAqIEBub3RpZnlfcGh5X2RldGFjaDogUGVyZm9ybSBwcmUtZGV0YWNoIGhhbmRsaW5nIGZvciBNRElPIGJ1c1xuK1x0ICogICBkcml2ZXJzLiBDYWxsZWQgaW4gcGh5X2RldGFjaCgpIGJlZm9yZSBkZXZpY2UgbGlua3MgYW5kIHJlc291cmNlc1xuK1x0ICogICBhcmUgY2xlYW5lZCB1cC4gUnVucyBpbiBwcm9jZXNzIGNvbnRleHQgYW5kIG1heSBzbGVlcC4gT25seVxuK1x0ICogICBpbnZva2VkIGlmIEBub3RpZnlfcGh5X2F0dGFjaCB3YXMgcHJldmlvdXNseSBjYWxsZWQgYW5kIHN1Y2NlZWRlZC5cbitcdCAqL1xuK1x0dm9pZCAoKm5vdGlmeV9waHlfZGV0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBcbiBcdC8qKiBAc3RhdHM6IFN0YXRpc3RpYyBjb3VudGVycyBwZXIgZGV2aWNlIG9uIHRoZSBidXMgKi9cbiBcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xuQEAgLTU3NCw2ICs1OTEsNyBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQGhhc19maXh1cHM6IFNldCB0byB0cnVlIGlmIHRoaXMgUEhZIGhhcyBmaXh1cHMvcXVpcmtzLlxuICAqIEBzdXNwZW5kZWQ6IFNldCB0byB0cnVlIGlmIHRoaXMgUEhZIGhhcyBiZWVuIHN1c3BlbmRlZCBzdWNjZXNzZnVsbHkuXG4gICogQHN1c3BlbmRlZF9ieV9tZGlvX2J1czogU2V0IHRvIHRydWUgaWYgdGhpcyBQSFkgd2FzIHN1c3BlbmRlZCBieSBNRElPIGJ1cy5cbisgKiBAbWRpb19idXNfbm90aWZpZWQ6IFNldCB0byB0cnVlIGlmIHBvc3QtYXR0YWNoIGJ1cyBub3RpZmljYXRvbiBzdWNjZWVkZWQuXG4gICogQHN5c2ZzX2xpbmtzOiBJbnRlcm5hbCBib29sZWFuIHRyYWNraW5nIHN5c2ZzIHN5bWJvbGljIGxpbmtzIHNldHVwL3JlbW92YWwuXG4gICogQGxvb3BiYWNrX2VuYWJsZWQ6IFNldCB0cnVlIGlmIHRoaXMgUEhZIGhhcyBiZWVuIGxvb3BiYWNrZWQgc3VjY2Vzc2Z1bGx5LlxuICAqIEBkb3duc2hpZnRlZF9yYXRlOiBTZXQgdHJ1ZSBpZiBsaW5rIHNwZWVkIGhhcyBiZWVuIGRvd25zaGlmdGVkLlxuQEAgLTY4NSw2ICs3MDMsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XG4gXHR1bnNpZ25lZCBoYXNfZml4dXBzOjE7XG4gXHR1bnNpZ25lZCBzdXNwZW5kZWQ6MTtcbiBcdHVuc2lnbmVkIHN1c3BlbmRlZF9ieV9tZGlvX2J1czoxO1xuK1x0dW5zaWduZWQgbWRpb19idXNfbm90aWZpZWQ6MTtcbiBcdHVuc2lnbmVkIHN5c2ZzX2xpbmtzOjE7XG4gXHR1bnNpZ25lZCBsb29wYmFja19lbmFibGVkOjE7XG4gXHR1bnNpZ25lZCBkb3duc2hpZnRlZF9yYXRlOjE7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDoyMi4zNzUxMTU1MjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzczMzY1NzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgUmVhbHRlayBSVEw4MzgwL1JUTDgzOTAgTURJTyBDb250cm9sbGVyIENvZGUqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxgLCBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCwgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvcGh5LmhgLiBUaGlzIGlzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw4MzgwIGFuZCBSVEw4MzkwIE1ESU8gY29udHJvbGxlcnMsIHdoaWNoIGlzIGZpbmUsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGNvZGUgaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIHRlc3QgZW52aXJvbm1lbnQsIGxpa2UgUUVNVSBvciBHQ0UuIEl0J3MgYWRkaW5nIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBgbWlpX2J1c2Agc3RydWN0IGFuZCBjYWxsaW5nIHRoZW0gZnJvbSBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIFRoZXNlIGNhbGxiYWNrcyBhcmUgc3BlY2lmaWMgdG8gdGhlIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBkcml2ZXIsIGVuYWJsaW5nL2Rpc2FibGluZyBoYXJkd2FyZSBwb2xsaW5nLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIEkgZXZlbiBnZXQgdGhlIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBkcml2ZXIgdG8gcHJvYmU/IEl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHNvIGl0IG5lZWRzIGEgcGxhdGZvcm0gZGV2aWNlIGluc3RhbmNlLiBUaGVzZSB1c3VhbGx5IGNvbWUgZnJvbSBEZXZpY2UgVHJlZSAoRFQpIG92ZXJsYXlzLCBidXQgSSBrbm93IHN5emthbGxlciBkb2Vzbid0IGdlbmVyYWxseSBsb2FkIERUIG92ZXJsYXlzIHVubGVzcyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZCBmb3IgaXQsIGFuZCBJIGhhdmVuJ3QgY29uZmlndXJlZCBmb3IgaXQuIFN5emthbGxlciB1c3VhbGx5IHJlbGllcyBvbiBhIGZldyB0ZWNobmlxdWVzIGZvciBkZXZpY2UgY3JlYXRpb24uIERvZXMgaXQgaGF2ZSBhIHNwZWNpYWwgc3lzY2FsbCBsaWtlIGBzeXpfZGV2X2NyZWF0ZWAsIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAgb3Igc2ltaWxhcj8gTm8sIEkgZG9uJ3QgdGhpbmsgaXQgZG9lcywgb3IgYXQgbGVhc3Qgbm90IGluIGEgZ2VuZXJpYyB3YXkuIEkgYW0gcHJldHR5IHN1cmUgaXQgdXNlcyBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5YCBvciBgc3l6X2luaXRfbmV0X3NvY2tldGAgZm9yIGNyZWF0aW5nIHBsYXRmb3JtIGRldmljZXMsIGlmIGEgc3BlY2lmaWMgc3Vic3lzdGVtIGFsbG93cyBpdC5cblxuQWgsIGJ1dCB3YWl0Li4uIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBhcmUgY29yZSBQSFkgZnVuY3Rpb25zLiAqVGhvc2UqIGFyZSBhbHdheXMgcmVhY2hhYmxlIGlmICphbnkqIFBIWSBpcyBhdHRhY2hlZCBvciBkZXRhY2hlZC4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyB0aG9zZSB0byBjYWxsIHRoZSBuZXcgY2FsbGJhY2tzLCBidXQgb25seSBpZiB0aGV5J3JlIHNldC4gU28sIHRoZSBuZXcgY29kZSBwYXRoIHdpdGhpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIG9yIGBwaHlfZGV0YWNoYCAqaXMqIHJlYWNoYWJsZSBpZiAqYW55KiBQSFkgaXMgYXR0YWNoZWQsIGJ1dCBvbmx5IGRvZXMgc29tZXRoaW5nIGlmIHRoZSBgbm90aWZ5X3BoeV9hdHRhY2hgIG9yIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIGFyZSBzZXQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZHJpdmVycyBzZXR0aW5nIHRob3NlIGNhbGxiYWNrcz8gTm8sIHRoZSBwYXRjaCBvbmx5IHNldHMgdGhlbSBpbiB0aGUgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGRyaXZlci5cblxuU28gdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGUgcHJvYmUgZm9yIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBiZSB0cmlnZ2VyZWQ/IFRoZSBkcml2ZXIgbWF0Y2hlcyBgXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1wiYCwgYFwicmVhbHRlayxydGw4MzkxLW1kaW9cImAsIGBcInJlYWx0ZWsscnRsOTMwMS1tZGlvXCJgLCBhbmQgYFwicmVhbHRlayxydGw5MzExLW1kaW9cImAuIFVubGVzcyB3ZSBhcmUgcnVubmluZyBvbiBhIFJlYWx0ZWsgU29DIG9yIG1hbmFnZSB0byBjcmVhdGUgdGhlIHBsYXRmb3JtIGRldmljZSwgaXRzIHByb2JlIGZ1bmN0aW9uIHdvbid0IGJlIGNhbGxlZC4gU3l6a2FsbGVyIGRvZXNuJ3QgZ2VuZXJhbGx5IGluamVjdCBhcmJpdHJhcnkgRFQgbm9kZXMsIHNvIGl0J3MgdW5saWtlbHkgaXQncyBnZW5lcmF0aW5nIHRoZSBEVCBub2RlIGZvciB0aGlzIGNvbnRyb2xsZXIuXG5cbkNhbiBJIGNyZWF0ZSB0aGUgcGxhdGZvcm0gZGV2aWNlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcz8gTm8sIHRoYXQncyBub3QgcG9zc2libGUuIEkga25vdyB0aGVyZSdzIGBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJgLCBidXQgdGhhdCdzIGtlcm5lbC1pbnRlcm5hbC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgZHJpdmVyIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBTb0NzLCBhbmQgaXQgaXMgaGlnaGx5IHVubGlrZWx5IHRvIHByb2JlIGluIGEgZ2VuZXJpYyBRRU1VL0dDRSBlbnZpcm9ubWVudCwgSSBkb24ndCB0aGluayBJIGNhbiB0cmlnZ2VyIHRoZSBuZXcgY29kZS4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcsIHRob3VnaCwganVzdCB0byBiZSB0aG9yb3VnaC4gSSdsbCBsb29rIGF0IGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIGZvciBgTURJT19SRUFMVEVLX1JUTDkzMDBgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBpdCdzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTcxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAwOjUwOjM2LjEwODc3NTU4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE4ODY1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0xNjY9Y29uZmlnIE1ESU9fSVBRODA2NFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3My1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTc0OmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzUtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDozNi41NjA2NjkxMzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTYxNjExMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgTURJT19SRUFMVEVLX1JUTDkzMDBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgYnJlYWsgZG93biB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgbW9kdWxlLiBBcyBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhcmNoaXRlY3R1cmUsIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiBpdCByZWxpZXMgb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBkZWJ1Z2dpbmcsIHBvcnRpbmcsIG9yIGV2ZW4ganVzdCB1bmRlcnN0YW5kaW5nIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEknbSB0aGlua2luZyBhYm91dCB0aGUgbGF5ZXJzLi4uIGRvZXMgaXQgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnM/IEtlcm5lbCBkcml2ZXJzPyBQb3NzaWJseSBsb3ctbGV2ZWwgcmVnaXN0ZXIgZGVmaW5pdGlvbnM/IEFuZCB3aGF0IGFib3V0IHBvdGVudGlhbCB1c2VyLXNwYWNlIGNvbXBvbmVudHMgb3IgY29uZmlndXJhdGlvbiBmaWxlcz8gSSBuZWVkIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgbWFwIG9mIGFsbCB0aGUgYnVpbGRpbmcgYmxvY2tzIHRoYXQgbWFrZSB1cCB0aGlzIG1vZHVsZSBzbyB0aGF0IGl0IGNhbiBiZSBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTYwMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAwOjUwOjM5LjUyMjI4MjE5NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjE3Njg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0xNjY9Y29uZmlnIE1ESU9fSVBRODA2NFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3My1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTc0OmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzUtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDozOS42MDg0NjMyMDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQzMTczODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIEkgaGF2ZSBhIHN0cm9uZyBodW5jaCB0aGF0IHRoZSBgZHJpdmVycy9uZXQvbWRpby9LY29uZmlnYCBmaWxlIGlzIHdoZXJlIHRvIHN0YXJ0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhcm91bmQgbGluZSAxNzQuIFRoYXQncyBhIHJlYXNvbmFibGUgYXJlYSBmb3IgbWUgdG8gYmVnaW4gbXkgZXhwbG9yYXRpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIE1ESU8gZHJpdmVyIGNvbmZpZ3VyYXRpb24gdGhlcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGJhc2UgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHByb2NlZWQuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlIGluZm9ybWF0aW9uIEkgYW0gc2VhcmNoaW5nIGZvciB3aWxsIGJlIGFyb3VuZCB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTU5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDA6NTA6NDIuMzUxNjM5ODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXHRoZWxwXFxuIDE3MTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgbmV0d29ya1xcbiAxNzI6XFx0XFx0ICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIElQUTgwNjQgU29DXFxuIDE3MzpcXHRcXG4gMTc0OlxcdGNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbiAxNzU6XFx0XFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbiAxNzY6XFx0XFx0ZGVwZW5kcyBvbiBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVFxcbiAxNzc6XFx0XFx0aGVscFxcbiAxNzg6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgTURJTyBpbnRlcmZhY2UgZm91bmQgaW4gdGhlIFJlYWx0ZWtcXG4gMTc5OlxcdFxcdCAgUlRMOTMwMCBmYW1pbHkgb2YgRXRoZXJuZXQgc3dpdGNoZXMgd2l0aCBpbnRlZ3JhdGVkIFNvQy5cXG4gMTgwOlxcdFxcbiAxODE6XFx0Y29uZmlnIE1ESU9fUkVHTUFQXFxuIDE4MjpcXHRcXHR0cmlzdGF0ZVxcbiAxODM6XFx0XFx0aGVscFxcbiAxODQ6XFx0XFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNpbmcgTURJTyBkZXZpY2VzIHRoYXQgYXJlIG5vdCBzaXR0aW5nIG9uIGFcXG4gMTg1OlxcdFxcdCAgcmVndWxhciBNRElPIGJ1cywgYnV0IHN0aWxsIGV4cG9zZXMgdGhlIHN0YW5kYXJkIDgwMi4zIHJlZ2lzdGVyXFxuIDE4NjpcXHRcXHQgIGxheW91dC4gSXQncyByZWdtYXAtYmFzZWQgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBvbiBpbnRlZ3JhdGVkLFxcbiAxODc6XFx0XFx0ICBtZW1vcnktbWFwcGVkIFBIWXMsIFNQSSBQSFlzIGFuZCBzbyBvbi4gQSBuZXcgdmlydHVhbCBNRElPIGJ1cyBpc1xcbiAxODg6XFx0XFx0ICBjcmVhdGVkLCBhbmQgaXRzIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBhcmUgbWFwcGVkIHRvIHRoZSB1bmRlcmx5aW5nXFxuIDE4OTpcXHRcXHQgIHJlZ21hcC4gVXNlcnMgd2lsbGluZyB0byB1c2UgdGhpcyBkcml2ZXIgbXVzdCBleHBsaWNpdGx5IHNlbGVjdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDo0Mi4zNTE3NDk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NTc3Nzg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWx0ZWsgUlRMOTMwMCBEcml2ZXIncyBBY3RpdmF0aW9uKipcblxuT2theSwgc28gdGhlIFJlYWx0ZWsgUlRMOTMwMCBkcml2ZXIncyBhY3RpdmF0aW9uIGhpbmdlcyBvbiBlaXRoZXIgYE1BQ0hfUkVBTFRFS19SVExgIG9yLCBtb3JlIGNvbW1vbmx5LCBgQ09NUElMRV9URVNUYC4gIEV2ZW4gd2hlbiB3ZSBmb3JjZSB0aGUgaW5jbHVzaW9uIHZpYSBgQ09NUElMRV9URVNUYCwgaXQncyBzdGlsbCBhICpwbGF0Zm9ybSogZHJpdmVyLiBUaGF0J3MgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLiBUaGUgcmVhbCBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiB0aGUgZHJpdmVyIGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQgaW4gdGhhdCBzY2VuYXJpbz8gTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCwgdG8gbG9vayBmb3IgdGhhdCBhbGwtaW1wb3J0YW50IGBtb2R1bGVfcGxhdGZvcm1fZHJpdmVyYCBjYWxsLiBUaGlzIHdpbGwgY29uZmlybSBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgcGxhdGZvcm0gYW5kIHdoZXRoZXIgdGhlIHByb2JpbmcgbWVjaGFuaXNtIGlzIHNldCB1cCBjb3JyZWN0bHksIHJlZ2FyZGxlc3Mgb2YgdGhlIGBDT01QSUxFX1RFU1RgIGZsYWcncyBwcmVzZW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgaXMgcGxhdGZvcm0gcmVnaXN0cmF0aW9uIG9mIHRoaXMgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUyMSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDA6NTA6NDUuNjA3NTI5NTA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODI2ODU5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGxhdGZvcm1fZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9MTEzMD1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvdHRvX2VtZGlvX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTM3LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoxMTM4Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIob3R0b19lbWRpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTM5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDo0NS43MDU4MDMzODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQzMjE0NzUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBEcml2ZXIgQ29kZSBpbiBhIEZ1enppbmcgQ29udGV4dCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIHBsYXRmb3JtIGRyaXZlci4gVGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgaW4gb3VyIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBsaWtlIFFFTVUgeDg2XzY0IG9yIGFybTY0LCB1bmxlc3Mgd2UgaGF2ZSBhIHZlcnkgc3BlY2lmaWMgYm9hcmQgbW9kZWwgY29uZmlndXJlZCB0byBpbnN0YW50aWF0ZSB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlLCBvciBpZiBzeXprYWxsZXIgaGFzIGEgbWVjaGFuaXNtIHRvIGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzIG9uIHRoZSBmbHksIHRoZSBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGNhbGxlZC4gQW5kIGFzIGZhciBhcyBJIGtub3csIHN5emthbGxlciBkb2Vzbid0IGhhdmUgYSAqZ2VuZXJpYyogbWV0aG9kIHRvIGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzLiBXZSBjYW4gaW5qZWN0IFVTQiBkZXZpY2VzIHdpdGggZHVtbXlfaGNkIGFuZCBQQ0kgZGV2aWNlcyB0aHJvdWdoIGBzeXpfcGNpXypgLCBidXQgbm90IGp1c3QgYW55IHBsYXRmb3JtIGRldmljZSwgdW5sZXNzIHRoZXJlJ3Mgc29tZSBzcGVjaWFsIHN1YnN5c3RlbSBpbnRlcmZhY2UgZXhwb3NlZCwgbGlrZSB3aXRoIG1hYzgwMjExX2h3c2ltIG9yIG5ldGRldnNpbS5cblxuU28sIHJlYWxpc3RpY2FsbHksIHRoZSBjb2RlIHdpdGhpbiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgaXMgdW5yZWFjaGFibGUuIFRoYXQncyB0aGUgY3J1eCBvZiBpdC5cblxuQnV0IHdoYXQgYWJvdXQgdGhlIGNoYW5nZXMgaW4gYHBoeV9kZXZpY2UuY2A/IFRob3NlIGFyZSB0aGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEkga25vdyB0aGF0IGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBhcmUgcmVhY2hhYmxlLCBidXQgd2hhdCBhYm91dCB0aGUgbmV3IGNvZGUgdGhhdCdzIGJlZW4gYWRkZWQ/XG5cbmBgYGNcblx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuXHRcdGVyciA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xuXHRcdGlmIChlcnIpXG5cdFx0XHRnb3RvIGVycm9yO1xuXHRcdHBoeWRldi1cdTAwM2VtZGlvX2J1c19ub3RpZmllZCA9IHRydWU7XG5cdH1cbmBgYFxuXG5Mb29raW5nIGF0IHRoaXMsIGl0IGxvb2tzIGxpa2UgdGhpcyBjb2RlIHdpbGwgb25seSBiZSBleGVjdXRlZCBpZiBhIGBub3RpZnlfcGh5X2F0dGFjaGAgZnVuY3Rpb24gcG9pbnRlciBpcyBzZXQgb24gdGhlIGBtZGlvLmJ1c2AuIEJ1dCwgSSdtIHByZXR0eSBjZXJ0YWluIG5vIGN1cnJlbnRseSByZWFjaGFibGUgZHJpdmVyIHNldHMgdGhhdCBwb2ludGVyLiBTbyB0aGlzIG5ldyBjb2RlIGlzIGVmZmVjdGl2ZWx5IGRlYWQsIG5ldmVyIGV4ZWN1dGVkIGluIG91ciBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5Ib2xkIG9uLCBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gSXMgdGhlcmUgYW55IG90aGVyIGRyaXZlciB0aGF0IEknbSBtaXNzaW5nIHRoYXQgYWN0dWFsbHkgZG9lcyBzZXQgYG5vdGlmeV9waHlfYXR0YWNoYD8gSSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNvZGUgYWdhaW4ganVzdCB0byBiZSBjZXJ0YWluLiBMZXQgbWUgZG8gYSBxdWljayBzY2FuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk5MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDo1Mi4xMzc5NTQ1MjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzk4NjY1NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm90aWZ5X3BoeV9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz03NTI9c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc2Ny1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzY4OnN0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03Njkte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTgxNj1zdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04NDQtXFx0YnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjg0NTpcXHRidXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODQ2LVxcdGJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzUyPWludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODc4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg3OTpcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4ODA6XFx0XFx0ZXJyID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4ODEtXFx0XFx0aWYgKGVycilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9MzYzPXN0cnVjdCBtaWlfYnVzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMzc5LVxcdC8qKlxcbmluY2x1ZGUvbGludXgvcGh5Lmg6MzgwOlxcdCAqIEBub3RpZnlfcGh5X2F0dGFjaDogUGVyZm9ybSBwb3N0LWF0dGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTM4MS1cXHQgKiAgIGRyaXZlcnMuIENhbGxlZCBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpIHJpZ2h0IGFmdGVyIHBoeV9pbml0X2h3KClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMzg3LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvcGh5Lmg6Mzg4OlxcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTM4OS1cXHQvKipcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMzkyLVxcdCAqICAgYXJlIGNsZWFuZWQgdXAuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0IGFuZCBtYXkgc2xlZXAuIE9ubHlcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjM5MzpcXHQgKiAgIGludm9rZWQgaWYgQG5vdGlmeV9waHlfYXR0YWNoIHdhcyBwcmV2aW91c2x5IGNhbGxlZCBhbmQgc3VjY2VlZGVkLlxcbmluY2x1ZGUvbGludXgvcGh5LmgtMzk0LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMDo1MDo1NC44Nzc4Mjk1MjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4NjE1OTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIGluIHRoZSBSZWFsdGVrIE1ESU8gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlRoaXMgbG9va3MgbGlrZSBjb2RlIHRoYXQncyBub3QgZ29pbmcgdG8gZ2V0IGhpdCBieSBmdXp6aW5nLlwiIEl0IGFwcGVhcnMgdGhhdCB0aGUgb25seSBkcml2ZXIgc2V0dGluZyBgbm90aWZ5X3BoeV9hdHRhY2hgIGlzIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gTm93LCB0aGF0J3MgYSBwbGF0Zm9ybSBkcml2ZXIg4oCTIFJlYWx0ZWsgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIHNwZWNpZmljYWxseS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXNlIHR5cGVzIG9mIHBsYXRmb3JtIGRyaXZlcnMgYXJlIGluY3JlZGlibHkgZGlmZmljdWx0LCBpZiBub3QgaW1wb3NzaWJsZSwgdG8gaW5zdGFudGlhdGUgaW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGluZ3MgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBqdXN0IHdvbid0IGN1dCBpdC4gWW91IHJlYWxseSBuZWVkIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBhIHBlcmZlY3RseSBjcmFmdGVkIGRldmljZSB0cmVlLlxuXG5MZXQncyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIENhbiB3ZSBzb21laG93IGZvcmNlIHRoaXMgZHJpdmVyIHRvIHByb2JlPyBTaW5jZSBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyLCBTeXprYWxsZXIgd29uJ3QgYmUgYWJsZSB0byBqdXN0IG1hZ2ljYWxseSB0cmlnZ2VyIGl0IHVubGVzcyBpdCdzIHByb3Blcmx5IGluc3RhbnRpYXRlZC4gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gQ2FuIGl0IGJlIGJyb3VnaHQgdXAgdmlhIGFuIEkyQyBvciBTUEkgZGV2aWNlPyBOb3BlLiBJdCdzIGEgcGxhdGZvcm0gZGV2aWNlLCBzbyBpdCdzIG5vdCBnb2luZyB0byBhdHRhY2ggdG8gdGhvc2UgYnVzZXMuIFdoYXQgYWJvdXQgYSBQQ0kgZGV2aWNlPyBTdGlsbCBuby4gQW5kIGRlZmluaXRlbHkgbm90IFVTQi4gU28geWVhaCwgSSdtIHByZXR0eSBjb25maWRlbnQgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBkcml2ZXIgY2FuJ3QgYmUgcmVhY2hlZCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gVGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLCBpbmNsdWRpbmcgdGhlIGFkZGVkIGBub3RpZnlfcGh5X2F0dGFjaGAgY2FsbGJhY2tzLCBhcmUgZWZmZWN0aXZlbHkgZGVhZCBjb2RlIGluIGEgZnV6emluZyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU2MSwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDA6NTE6MDEuMzYzOTkxNDYzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBSZWFsdGVrIFJUTDgzODAgYW5kIFJUTDgzOTAgTURJTyBjb250cm9sbGVycyBpbiB0aGUgbWRpby1yZWFsdGVrLXJ0bDkzMDAgcGxhdGZvcm0gZHJpdmVyLCBhbmQgYWRkcyBub3RpZnlfcGh5X2F0dGFjaC9ub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSB3aGljaCBhcmUgb25seSB1c2VkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBTaW5jZSB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBSZWFsdGVrIFNvQ3MsIGl0IGNhbm5vdCBiZSBwcm9iZWQgaW4gYSBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChsaWtlIFFFTVUgb3IgR0NFKSB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIHN1cHBvcnQuIFRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gY2hhbmdlcyBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgYmVjYXVzZSBubyByZWFjaGFibGUgZHJpdmVyIHNldHMgdGhlc2UgY2FsbGJhY2tzLiBUaHVzLCB0aGUgbW9kaWZpZWQgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODM4MCBhbmQgUlRMODM5MCBNRElPIGNvbnRyb2xsZXJzIGluIHRoZSBtZGlvLXJlYWx0ZWstcnRsOTMwMCBwbGF0Zm9ybSBkcml2ZXIsIGFuZCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoL25vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIHdoaWNoIGFyZSBvbmx5IHVzZWQgYnkgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIFNpbmNlIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIFJlYWx0ZWsgU29DcywgaXQgY2Fubm90IGJlIHByb2JlZCBpbiBhIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgKGxpa2UgUUVNVSBvciBHQ0UpIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgc3VwcG9ydC4gVGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBjaGFuZ2VzIGFyZSBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBiZWNhdXNlIG5vIHJlYWNoYWJsZSBkcml2ZXIgc2V0cyB0aGVzZSBjYWxsYmFja3MuIFRodXMsIHRoZSBtb2RpZmllZCBjb2RlIGNhbm5vdCBiZSBleGVjdXRlZCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5xvt6[1] Phase: Running StartedAt: 2026-07-23 00:51:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xvt6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-23 00:51:23 +0000 UTC FinishedAt: 2026-07-23 00:51:35 +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,}