Name: series-workflow476kg Phase: Failed StartedAt: 2026-06-30 03:55:06 +0000 UTC FinishedAt: 2026-06-30 04:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow476kg[0] Phase: Succeeded StartedAt: 2026-06-30 03:55:06 +0000 UTC FinishedAt: 2026-06-30 04:08:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow476kg[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 03:55:06 +0000 UTC FinishedAt: 2026-06-30 04:08:18 +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+CgkJCTx0ZD4yMDI2LzA2LzMwIDA0OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlcnMgKG5nYmUsIHR4Z2JlKSB0byBhZGQgUENJIGVycm9yIHJlY292ZXJ5LCBUWCB0aW1lb3V0IGhhbmRsaW5nLCBhbmQgVFggaGFuZyBkZXRlY3Rpb24uIFRoZXNlIGFyZSBkcml2ZXJzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBQQ0kgaGFyZHdhcmUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciBXYW5neHVuIGRldmljZXMgaW4gdGhlIGtlcm5lbCwgdGhlIHByb2JlIGZ1bmN0aW9ucyB3aWxsIG5vdCBzdWNjZWVkIGFuZCB0aGUgbmV0ZGV2cyB3aWxsIG5vdCBiZSByZWdpc3RlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNDowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDIxNjBhNDE0ZDI0NmFjM2ZkZjM2ZDI2ZjdmMWRkNzU2YWU4NzQwNTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwNDowNjo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuaW5kZXggYTcxYjBhZDc3ZGUzZjcuLmM4NzI0YmIxMjlhYTA2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuQEAgLTQsNSAmIzQzOzQsNSBAQFxuIFxuIG9iai0kKENPTkZJR19MSUJXWCkgJiM0Mzs9IGxpYnd4Lm9cbiBcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cbiYjNDM7bGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXG4gbGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmMzNGM5NDA2YTVhZWRmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMCwwICYjNDM7MSwzMjEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cbiYjNDM7LyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Flci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3eF90eXBlLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfZXJyLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXG4mIzQzOyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1xuJiM0MztcdGlmICghd3gpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKVxuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0d3hfc29mdF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovXG4mIzQzO1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbiYjNDM7ICpcbiYjNDM7ICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRwY2lfZXJzX3Jlc3VsdF90IHJlc3VsdDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkge1xuJiM0MztcdFx0d3hfZXJyKHd4LCBcJiMzNDtDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXG4mIzQzO1x0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiYjNDM7XHRcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiYjNDM7XHRcdHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpO1xuJiM0MztcdFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdFx0cnRubF9sb2NrKCk7XG4mIzQzO1x0XHRpZiAobmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb3duX3N1c3BlbmQpXG4mIzQzO1x0XHRcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XG4mIzQzO1x0XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgZmFsc2UpO1xuJiM0MztcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBjaV9hZXJfY2xlYXJfbm9uZmF0YWxfc3RhdHVzKHBkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzdWx0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxuJiM0MzsgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdGVyciA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHd4X2Vycih3eCwgXCYjMzQ7RmFpbGVkIHRvIG9wZW4gbmV0ZGV2IGFmdGVyIHJlc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbiYjNDM7b3V0OlxuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7XG4mIzQzO1x0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4mIzQzO1x0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxuJiM0MztcdC5yZXN1bWUgPSB3eF9pb19yZXN1bWUsXG4mIzQzO307XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfZXJyX2hhbmRsZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O1Jlc2V0IGFkYXB0ZXIuXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0d3hfc29mdF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcbiYjNDM7XG4mIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc19yZXNldF93cV8leFwmIzM0OywgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXG4mIzQzO1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZXJlc2V0X3dxKSB7XG4mIzQzO1x0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcdTAwMjZ3eC1cdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xuJiM0MztcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuJiM0MztcdHUzMiBpLCBqO1xuJiM0MztcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZW51bV92ZnMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1MzIgaCwgdDtcbiYjNDM7XG4mIzQzO1x0XHRcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1x0XHRcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaCAhPSB0KVxuJiM0MztcdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcbiYjNDM7XHRcdC8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbiYjNDM7XHRcdCAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmdcbiYjNDM7XHRcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxuJiM0MztcdFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0d3hfd2Fybih3eCwgXCYjMzQ7aW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIElmIHdlJiMzOTtyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbiYjNDM7XHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuJiM0MztcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR1MTYgdmlkLCBwY2lfY21kO1xuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2aWQpO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcdTAwMjZwY2lfY21kKTtcbiYjNDM7XG4mIzQzO1x0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbiYjMzk7dCBhY2Nlc3MgKi9cbiYjNDM7XHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuJiM0MztcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSXG4mIzQzO1x0ICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZFxuJiM0MztcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuJiM0MztcdCAqL1xuJiM0MztcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR3eF9lcnIod3gsIFwmIzM0O1BDSWUgZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHR4IHRpbWVvdXRcXG5cJiMzNDspO1xuJiM0MztcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcXG5cJiMzNDspO1xuJiM0MztcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1xuJiM0MztcdGlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSlcbiYjNDM7XHRcdHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLVx1MDAzZW5ldGRldik7XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsXG4mIzQzO1x0XHRcJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcXG5cJiMzNDssXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4LFxuJiM0MztcdFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4mIzQzO1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbiYjNDM7XHRcdHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UsIG5leHQsXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpO1xuJiM0MztcbiYjNDM7XHRuZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiYjNDM7XG4mIzQzO1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0OVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1dYX0VSUl9IX1xuJiM0MzsjZGVmaW5lIF9XWF9FUlJfSF9cbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xuJiM0MztcbiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbmluZGV4IDVkZjk3MWFjYTllMzVmLi5kMTM1NmZmNWQ2OWI1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5NSw3ICYjNDM7Mzk1LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIH1cbiBcbiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5pbmRleCAyNjBlMTRkNWQ1NDEyMS4uMTIyYzQ5NTJkMjAzZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuQEAgLTE5MzIsNiAmIzQzOzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxuIFx0ZWxzZVxuIFx0XHRyaW5nLVx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XG4gXG4mIzQzO1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTtcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcdTAwMjZ3eC1cdTAwM2VzdGF0cztcbiYjNDM7XHR1NjQgZGF0YTtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4mIzQzO1x0XHRkYXRhID0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuJiM0MztcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbiYjNDM7XHRcdGRhdGEgPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuJiM0MztcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IGRhdGE7XG4mIzQzO1xuJiM0MztcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4mIzQzO1x0aWYgKCFkYXRhKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbmluZGV4IGQwNDI1NjdiODEyODRiLi5kMzM0MGIyYjA2ODI0MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2Vyci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfcHRwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfdmZfbGliLmhcJiMzNDtcbkBAIC03NDIsNiAmIzQzOzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbiYjNDM7XG4mIzQzO1x0aGVhZCA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbiYjNDM7XHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICgoaGVhZCBcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcbiYjNDM7XHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuJiM0MztcdHUzMiB0eF9kb25lID0gcmluZy1cdTAwM2VzdGF0cy5wYWNrZXRzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuJiM0MztcdFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cbiYjNDM7XHRcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xuJiM0MztcdHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xuJiM0MztcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbiYjNDM7XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxuQEAgLTg2Niw2ICYjNDM7ODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4mIzQzO1x0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcbiYjNDM7XHRcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXG4gXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcdTAwMjZcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xuQEAgLTMxMTEsNyAmIzQzOzMxNDgsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcdGVsc2UgaWYgKGNoYW5nZWQgXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXG4gXHRcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XG4gXG5AQCAtMzE2MSw3ICYjNDM7MzE5OCw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXG4gb3V0OlxuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzQ1LDUgJiM0MzszMzgyLDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcbiBcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwY2lfY2xlYXJfbWFzdGVyKHd4LVx1MDAzZXBkZXYpO1xuJiM0MztcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0bmV0aWZfdHhfZGlzYWJsZSh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuJiM0MztcdHd4X3B0cF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbiYjNDM7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5pbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5AQCAtNDEsNSAmIzQzOzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gXG4gI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDRmM2U2NTA1MjQ2OGYuLjcwNjhjNjg0NWI2MjQ1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICYjNDM7MzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCB3eCwgcHRwX2NhcHMpO1xuIFx0aW50IHRzX2RvbmU7XG4gXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuIEhaO1xuJiM0MztcbiBcdHRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7XG4gXG4gXHR3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpO1xuQEAgLTg0Miw2ICYjNDM7ODQ1LDIxIEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XG4gXG4mIzQzO3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAod3gtXHUwMDNlcHRwX3R4X3NrYikge1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXHUwMDNlcHRwX3R4X3NrYik7XG4mIzQzO1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcbiYjNDM7XG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTY2Li5hZDJmODI0ODc1ZDUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9yeF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCBjN2JlZmU0Y2RmZTkwOC4uYzJlZGI3NDg4MWYyYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiAmIzQzOzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXG4gXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzO1xuIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuQEAgLTEwMzksNiAmIzQzOzEwNDQsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMge1xuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XG4gXHR1NjQgcmVzdGFydF9xdWV1ZTtcbiBcdHU2NCB0eF9idXN5O1xuJiM0MztcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NCw2ICYjNDM7MTA2MCwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcbiBcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXHUwMDNlbmV4dClcbiBcbiYjNDM7ZW51bSB3eF9yaW5nX3N0YXRlIHtcbiYjNDM7XHRXWF9UWF9ERVRFQ1RfSEFORyxcbiYjNDM7XHRXWF9IQU5HX0NIRUNLX0FSTUVELFxuJiM0MztcdFdYX1JJTkdfU1RBVEVfTkJJVFNcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cbkBAIC0xMDczLDYgJiM0MzsxMDg1LDcgQEAgc3RydWN0IHd4X3Jpbmcge1xuIFx0XHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbztcbiBcdFx0c3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87XG4gXHR9O1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOCw2ICYjNDM7MTIyMSw4IEBAIGVudW0gd3hfc3RhdGUge1xuIFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXG4gXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxuJiM0MztcdFdYX1NUQVRFX0RJU0FCTEVELFxuJiM0MztcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NCw2ICYjNDM7MTI4OSw4IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xuIFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxuIFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxuIFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcbiYjNDM7XHRXWF9GTEFHX05FRURfUEZfUkVTRVQsXG4mIzQzO1x0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXG4gXHRXWF9QRl9GTEFHU19OQklUUyAgICAgICAgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTM5NCw3ICYjNDM7MTQxMSw4IEBAIHN0cnVjdCB3eCB7XG4gXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcbiBcdHZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xuLVx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiYjNDM7XHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiYjNDM7XHR2b2lkICgqZG93bl9zdXNwZW5kKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xuIFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbkBAIC0xNDIyLDYgJiM0MzsxNDQwLDggQEAgc3RydWN0IHd4IHtcbiBcbiBcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrO1xuJiM0MztcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93cTtcbiBcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cbiB9O1xuIFxuQEAgLTE1MDQsNyAmIzQzOzE1MjQsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxuIFxuICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9lcnIoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbi1cbiYjNDM7I2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXFxcbiYjNDM7XHRkZXZfd2FybihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9kYmcoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5AQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLmNkYTIyMzEwMWNlZDcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5AQCAtNDYsNiAmIzQzOzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcbiBcdHsgfVxuIH07XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiAmIzQzOzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xuJiM0MztcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcbiYjNDM7XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTtcbiBcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbiYjNDM7XHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC00MDgsNiAmIzQzOzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcbiBcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4gfVxuIFxuLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyAmIzQzOzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXG4gXHR3eF9wdHBfaW5pdCh3eCk7XG4gXG4tXHRuZ2JlX3VwKHd4KTtcbiYjNDM7XHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiBcbiBcdHJldHVybiAwO1xuIGVycl9kaXNfcGh5OlxuQEAgLTUwMyw2ICYjNDM7NTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7dm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eF9jb25maWd1cmUod3gpO1xuJiM0MztcdG5nYmVfdXBfY29tcGxldGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCw2ICYjNDM7NTQ4LDkgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0bmdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbkBAIC01MjUsNyAmIzQzOzU1OCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cdTAwM2VwaHlsaW5rKTtcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbi1cbiYjNDM7b3V0OlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTU1NSw3ICYjNDM7NTg4LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxuIFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICYjNDM7NjI0LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKi9cbiBcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdG5nYmVfY2xvc2UoZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSAmIzQzOzY0MiwzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRuZXRpZl90cmFuc191cGRhdGUod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiYjNDM7XHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRuZ2JlX2Rvd24od3gpO1xuJiM0MztcdG5nYmVfdXAod3gpO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuJiM0MztcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuJiM0MztcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTcwMCw2ICYjNDM7NzYxLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHxcbkBAIC03OTYsNiAmIzQzOzg1OCwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuJiM0MztcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbiYjNDM7XG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICYjNDM7ODc4LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4mIzQzO1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiAmIzQzOzg5MCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgJiM0Mzs5MjMsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgJiM0Mzs5MzQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiAmIzQzOzk2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgJiM0Mzs5ODcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4gXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcbiBcdC5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODZhLi5jOTIzM2RjN2FlNTA1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5AQCAtMTI1LDUgJiM0MzsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbiYjNDM7dm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiBcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbmluZGV4IDIwYzVhMjk1YzZjMjk2Li5kODVlZTgzMTkyZTRmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXJyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuQEAgLTkzLDYgJiM0Mzs5NCwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTA2LDYgJiM0MzsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRywgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTIzLDYgJiM0MzsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcbiBcdHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2sod3gpO1xuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbiYjNDM7XHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xuJiM0MztcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0xNDQsNiAmIzQzOzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cbiBcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTE4Nyw2ICYjNDM7MTk5LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiBcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xuIFx0aWYgKGVyciAhPSAwKVxuIFx0XHR3eF9lcnIod3gsIFwmIzM0O0hhcmR3YXJlIEVycm9yOiAlZFxcblwmIzM0OywgZXJyKTtcbkBAIC0yMjQsNiAmIzQzOzIzOSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9pcnFfZGlzYWJsZSh3eCk7XG4gXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC0yOTIsNiAmIzQzOzMwOCwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4gXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0eGdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7XHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgdHhnYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtNDA4LDYgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XG4gXHR3eC1cdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xuJiM0MztcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTUxOCwxMiAmIzQzOzU0OSwxNiBAQCBzdGF0aWMgaW50IHR4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0dHhnYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4mIzQzO291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU0NCw3ICYjNDM7NTc5LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC02MDYsMTEgJiM0Mzs2NDIsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuIH1cbiBcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiBcdFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4gXHRlbHNlXG4gXHRcdHR4Z2JlX3Jlc2V0KHd4KTtcbkBAIC02NTQsNiAmIzQzOzY5MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHhnYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4mIzQzO1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtNzQ1LDYgJiM0Mzs3ODIsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcbiBcdHR4Z2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcdG5ldGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvID0gXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XG4gXG4gXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cbkBAIC04MTQsNiAmIzQzOzg1MiwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbiYjNDM7XHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4mIzQzO1xuIFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODg5LDYgJiM0Mzs5MzEsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZW1vdmVfcGh5O1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbiYjNDM7XHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuQEAgLTkxNiw2ICYjNDM7OTU5LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtOTQ4LDYgJiM0Mzs5OTMsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuQEAgLTk1OSw3ICYjNDM7MTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbkBAIC05NjksNiAmIzQzOzEwMTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xuIFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxuIFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuaW5kZXggODc3MjM0ZTNmZGMyYjYuLjNlOTNhM2YzMDljMTY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG5AQCAtMzEzLDcgJiM0MzszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgdHhnYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXG4gXHR1bnNpZ25lZCBsb25nIG5hbWVbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF0gPSB7IDAsIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSkgdG8gYWRkIFBDSSBlcnJvciByZWNvdmVyeSwgVFggdGltZW91dCBoYW5kbGluZywgYW5kIFRYIGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgZHJpdmVycyBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgUENJIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgV2FuZ3h1biBkZXZpY2VzIGluIHRoZSBrZXJuZWwsIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBub3Qgc3VjY2VlZCBhbmQgdGhlIG5ldGRldnMgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIxNjBhNDE0ZDI0NmFjM2ZkZjM2ZDI2ZjdmMWRkNzU2YWU4NzQwNTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAwNDowNjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCmluZGV4IGE3MWIwYWQ3N2RlM2Y3Li5jODcyNGJiMTI5YWEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCkBAIC00LDUgJiM0Mzs0LDUgQEAKIAogb2JqLSQoQ09ORklHX0xJQldYKSAmIzQzOz0gbGlid3gubwogCi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8KJiM0MztsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm8KIGxpYnd4LW9ianMgJiM0Mzs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jMzRjOTQwNmE1YWVkZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKQEAgLTAsMCAmIzQzOzEsMzIxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24uICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWVyLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF90eXBlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfZXJyLmgmIzM0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkCiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQomIzQzOyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGUKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKJiM0MzsgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCQkJCSAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiYjNDM7CiYjNDM7CWlmICghd3gpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJbmV0ZGV2ID0gd3gtJmd0O25ldGRldjsKJiM0MzsJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQomIzQzOwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiYjNDM7CiYjNDM7CWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKJiM0MzsJc2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwkvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi8KJiM0MzsJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuCiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LgomIzQzOyAqCiYjNDM7ICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXBjaV9lcnNfcmVzdWx0X3QgcmVzdWx0OwomIzQzOwomIzQzOwlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuJiMzNDspOwomIzQzOwkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovCiYjNDM7CQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKJiM0MzsJCWNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKTsKJiM0MzsJCWNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwomIzQzOwkJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiYjNDM7CQlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTsKJiM0MzsKJiM0MzsJCXJ0bmxfbG9jaygpOwomIzQzOwkJaWYgKG5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgJmFtcDsmYW1wOyB3eC0mZ3Q7ZG93bl9zdXNwZW5kKQomIzQzOwkJCXd4LSZndDtkb3duX3N1c3BlbmQod3gpOwomIzQzOwkJaWYgKHd4LSZndDtkb19yZXNldCkKJiM0MzsJCQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgZmFsc2UpOwomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKJiM0MzsJfQomIzQzOwomIzQzOwlwY2lfYWVyX2NsZWFyX25vbmZhdGFsX3N0YXR1cyhwZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlc3VsdDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdAomIzQzOyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewomIzQzOwkJZXJyID0gbmV0ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXd4X2Vycih3eCwgJiMzNDtGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiYjNDM7b3V0OgomIzQzOwlydG5sX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0gewomIzQzOwkuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCwKJiM0MzsJLnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LAomIzQzOwkucmVzdW1lID0gd3hfaW9fcmVzdW1lLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LCAmIzM0O1Jlc2V0IGFkYXB0ZXIuXG4mIzM0Oyk7CiYjNDM7CWlmICh3eC0mZ3Q7ZG9fcmVzZXQpCiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncykpCiYjNDM7CQlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spOwomIzQzOwomIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl3eC0mZ3Q7cmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDslc19yZXNldF93cV8leCYjMzQ7LCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSwKJiM0MzsJCQkJICAgICAgIDEsIHd4LSZndDtkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC0mZ3Q7cGRldikpOwomIzQzOwlpZiAoIXd4LSZndDtyZXNldF93cSkgewomIzQzOwkJd3hfZXJyKHd4LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlJTklUX1dPUksoJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spOwomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtJmd0O3R4X3JpbmdbaV07CiYjNDM7CiYjNDM7CQlpZiAodHhfcmluZy0mZ3Q7bmV4dF90b191c2UgIT0gdHhfcmluZy0mZ3Q7bmV4dF90b19jbGVhbikKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSAmYW1wO3d4LSZndDtyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdOwomIzQzOwl1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS0mZ3Q7bWFzayk7CiYjNDM7CXUzMiBpLCBqOwomIzQzOwomIzQzOwlpZiAoIXd4LSZndDtudW1fdmZzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV92ZnM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgcV9wZXJfcG9vbDsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQl1MzIgaCwgdDsKJiM0MzsKJiM0MzsJCQloID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpOwomIzQzOwkJCXQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7CiYjNDM7CiYjNDM7CQkJaWYgKGggIT0gdCkKJiM0MzsJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHsKJiM0MzsJCS8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSwKJiM0MzsJCSAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmcKJiM0MzsJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgomIzQzOwkJICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS4KJiM0MzsJCSAqLwomIzQzOwkJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcbiYjMzQ7KTsKJiM0MzsJCXNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogSWYgd2UmIzM5O3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi8KJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi8KJiM0MzsJaWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtJmd0O25ldGRldikpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJc2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpOwomIzQzOwl3eF9kZXRlY3RfdHhfaGFuZyh3eCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl1MTYgdmlkLCBwY2lfY21kOwomIzQzOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX1ZFTkRPUl9JRCwgJmFtcDt2aWQpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX0NPTU1BTkQsICZhbXA7cGNpX2NtZCk7CiYjNDM7CiYjNDM7CS8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4mIzM5O3QgYWNjZXNzICovCiYjNDM7CWlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgJmFtcDsgUENJX0NPTU1BTkRfTUVNT1JZKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llCiYjNDM7CSAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSCiYjNDM7CSAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWQKJiM0MzsJICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF9lcnIod3gsICYjMzQ7UENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxuJiMzNDspOwomIzQzOwlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XG4mIzM0Oyk7CiYjNDM7CXd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSkKJiM0MzsJCXd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpOwomIzQzOwllbHNlCiYjNDM7CQl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTsKJiM0MzsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LAomIzQzOwkJJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcbiYjMzQ7LAomIzQzOwkJdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgsCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQl0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSwgbmV4dCwKJiM0MzsJCXR4X3JpbmctJmd0O3R4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpOwomIzQzOwomIzQzOwluZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctJmd0O25ldGRldiwgdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwomIzQzOwl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NDkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1dYX0VSUl9IXwomIzQzOyNkZWZpbmUgX1dYX0VSUl9IXwomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyOwomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9XWF9FUlJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKaW5kZXggNWRmOTcxYWNhOWUzNWYuLmQxMzU2ZmY1ZDY5YjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwpAQCAtMzk1LDcgJiM0MzszOTUsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpCiAKIAkvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi8KIAlpZiAobmVlZF9yZXNldCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIH0KIAogaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCmluZGV4IDI2MGUxNGQ1ZDU0MTIxLi4xMjJjNDk1MmQyMDNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwpAQCAtMTkzMiw2ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsCiAJZWxzZQogCQlyaW5nLSZndDthdHJfc2FtcGxlX3JhdGUgPSAwOwogCiYjNDM7CWJpdG1hcF96ZXJvKHJpbmctJmd0O3N0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTsKIAkvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi8KIAltZW1zZXQocmluZy0mZ3Q7dHhfYnVmZmVyX2luZm8sIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctJmd0O2NvdW50KTsKQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTsKIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KQogewogCXN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9ICZhbXA7d3gtJmd0O3N0YXRzOwomIzQzOwl1NjQgZGF0YTsKJiM0MzsJaW50IGk7CiAKIAlpZiAod3gtJmd0O2ZjLm1vZGUgIT0gd3hfZmNfZnVsbCAmYW1wOyZhbXA7CiAJICAgIHd4LSZndDtmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKQogCQlyZXR1cm47CiAKIAlpZiAod3gtJmd0O21hYy50eXBlICZndDs9IHd4X21hY19hbWwpCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCi0JCQkJCSAgICAgICAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKJiM0MzsJCWRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCiYjNDM7CQkJCSAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKIAllbHNlCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpOwomIzQzOwkJZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7CiYjNDM7CWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSBkYXRhOwomIzQzOwomIzQzOwkvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqLwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCBkMDQyNTY3YjgxMjg0Yi4uZDMzNDBiMmIwNjgyNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKIAogI2luY2x1ZGUgJiMzNDt3eF90eXBlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfaHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X3ZmX2xpYi5oJiMzNDsKQEAgLTc0Miw2ICYjNDM7NzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKQogCXJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctJmd0O25ldGRldiwgcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwogfQogCiYjNDM7c3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBoZWFkLCB0YWlsOwomIzQzOwomIzQzOwloZWFkID0gcmluZy0mZ3Q7bmV4dF90b19jbGVhbjsKJiM0MzsJdGFpbCA9IHJpbmctJmd0O25leHRfdG9fdXNlOwomIzQzOwomIzQzOwlyZXR1cm4gKChoZWFkICZsdDs9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy0mZ3Q7Y291bnQpIC0gaGVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZykKJiM0Mzt7CiYjNDM7CXUzMiB0eF9kb25lX29sZCA9IHJpbmctJmd0O3R4X3N0YXRzLnR4X2RvbmVfb2xkOwomIzQzOwl1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpOwomIzQzOwl1MzIgdHhfZG9uZSA9IHJpbmctJmd0O3N0YXRzLnBhY2tldHM7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lICZhbXA7JmFtcDsgdHhfcGVuZGluZykKJiM0MzsJCS8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovCiYjNDM7CQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CS8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovCiYjNDM7CXJpbmctJmd0O3R4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTsKJiM0MzsJLyogcmVzZXQgdGhlIGNvdW50ZG93biAqLwomIzQzOwljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXMKICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uCkBAIC04NjYsNiAmIzQzOzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvciwKIAluZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksCiAJCQkJICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7CiAKJiM0MzsJaWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHsKJiM0MzsJCXd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpOwomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMikKIAlpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyAmYW1wOyZhbXA7IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy0mZ3Q7bmV0ZGV2KSAmYW1wOyZhbXA7CiAJCSAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpICZndDs9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHsKQEAgLTMxMTEsNyAmIzQzOzMxNDgsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCW5ldGRldi0mZ3Q7ZmVhdHVyZXMgPSBmZWF0dXJlczsKIAogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogCWVsc2UgaWYgKGNoYW5nZWQgJmFtcDsgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSkKIAkJd3hfc2V0X3J4X21vZGUobmV0ZGV2KTsKIApAQCAtMzE2MSw3ICYjNDM7MzE5OCw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiAKIG91dDoKIAlpZiAobmVlZF9yZXNldCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzM0NSw1ICYjNDM7MzM4MiwyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiB9CiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpOwogCiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyh3eC0mZ3Q7bmV0ZGV2KSB8fAomIzQzOwkgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwY2lfY2xlYXJfbWFzdGVyKHd4LSZndDtwZGV2KTsKJiM0MzsJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LSZndDtuZXRkZXYpOwomIzQzOwluZXRpZl9jYXJyaWVyX29mZih3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJbmV0aWZfdHhfZGlzYWJsZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJd3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7CiYjNDM7CXd4X3B0cF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTsKJiM0MzsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAppbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaApAQCAtNDEsNSAmIzQzOzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LAogdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTsKJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTsKIAogI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi43MDY4YzY4NDViNjI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCkBAIC0zMjEsNiAmIzQzOzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCkKIAlzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7CiAJaW50IHRzX2RvbmU7CiAKJiM0MzsJaWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiBIWjsKJiM0MzsKIAl0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpOwogCiAJd3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTsKQEAgLTg0Miw2ICYjNDM7ODQ1LDIxIEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCkKIH0KIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApOwogCiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKHd4LSZndDtwdHBfdHhfc2tiKSB7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueSh3eC0mZ3Q7cHRwX3R4X3NrYik7CiYjNDM7CQl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CX0KJiM0MzsJY2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LSZndDtzdGF0ZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpOwomIzQzOwogLyoqCiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcAogICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKaW5kZXggNTBkYjkwYTZlM2VlNjYuLmFkMmY4MjQ4NzVkNTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKQEAgLTEwLDYgJiM0MzsxMCw3IEBAIHZvaWQgd3hfcHRwX3Jlc2V0KHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfaW5pdChzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpOwomIzQzO3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9yeF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaAppbmRleCBjN2JlZmU0Y2RmZTkwOC4uYzJlZGI3NDg4MWYyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCkBAIC00NTAsNiAmIzQzOzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHsKICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4CiAjZGVmaW5lIFdYX1BYX1RSX0NGR19IRUFEX1dCICAgICAgICAgQklUKDI3KQogCiYjNDM7I2RlZmluZSBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFwKJiM0MzsJCShXWF9QWF9UUl9SUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKQomIzQzOyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcCiYjNDM7CQkoV1hfUFhfVFJfV1AoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgJiM0MzsgKHZmX3FfaW5kZXgpKSkKJiM0MzsKIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqLwogI2RlZmluZSBXWF9QWF9SUl9CQUwoX2kpICAgICAgICAgICAgICgweDAxMDAwICYjNDM7ICgoX2kpICogMHg0MCkpCiAjZGVmaW5lIFdYX1BYX1JSX0JBSChfaSkgICAgICAgICAgICAgKDB4MDEwMDQgJiM0MzsgKChfaSkgKiAweDQwKSkKQEAgLTEwMzksNiAmIzQzOzEwNDQsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMgewogc3RydWN0IHd4X3R4X3F1ZXVlX3N0YXRzIHsKIAl1NjQgcmVzdGFydF9xdWV1ZTsKIAl1NjQgdHhfYnVzeTsKJiM0MzsJdTMyIHR4X2RvbmVfb2xkOwogfTsKIAogc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHsKQEAgLTEwNTQsNiAmIzQzOzEwNjAsMTIgQEAgc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHsKICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXAogCWZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tJmd0O25leHQpCiAKJiM0MztlbnVtIHd4X3Jpbmdfc3RhdGUgewomIzQzOwlXWF9UWF9ERVRFQ1RfSEFORywKJiM0MzsJV1hfSEFOR19DSEVDS19BUk1FRCwKJiM0MzsJV1hfUklOR19TVEFURV9OQklUUwomIzQzO307CiYjNDM7CiBzdHJ1Y3Qgd3hfcmluZ19jb250YWluZXIgewogCXN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqLwogCXVuc2lnbmVkIGludCB0b3RhbF9ieXRlczsgICAgICAgLyogdG90YWwgYnl0ZXMgcHJvY2Vzc2VkIHRoaXMgaW50ICovCkBAIC0xMDczLDYgJiM0MzsxMDg1LDcgQEAgc3RydWN0IHd4X3JpbmcgewogCQlzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKIAkJc3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87CiAJfTsKJiM0MzsJREVDTEFSRV9CSVRNQVAoc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpOwogCXU4IF9faW9tZW0gKnRhaWw7CiAJZG1hX2FkZHJfdCBkbWE7ICAgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqLwogCWRtYV9hZGRyX3QgaGVhZHdiX2RtYTsKQEAgLTEyMDgsNiAmIzQzOzEyMjEsOCBAQCBlbnVtIHd4X3N0YXRlIHsKIAlXWF9TVEFURV9QVFBfUlVOTklORywKIAlXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsCiAJV1hfU1RBVEVfU0VSVklDRV9TQ0hFRCwKJiM0MzsJV1hfU1RBVEVfRElTQUJMRUQsCiYjNDM7CVdYX1NUQVRFX1JFU19GUkVFRCwKIAlXWF9TVEFURV9OQklUUwkJLyogbXVzdCBiZSBsYXN0ICovCiB9OwogCkBAIC0xMjc0LDYgJiM0MzsxMjg5LDggQEAgZW51bSB3eF9wZl9mbGFncyB7CiAJV1hfRkxBR19ORUVEX0RPX1JFU0VULAogCVdYX0ZMQUdfUlhfTUVSR0VfRU5BQkxFRCwKIAlXWF9GTEFHX1RYSEVBRF9XQl9FTkFCTEVELAomIzQzOwlXWF9GTEFHX05FRURfUEZfUkVTRVQsCiYjNDM7CVdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLAogCVdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovCiB9OwogCkBAIC0xMzk0LDcgJiM0MzsxNDExLDggQEAgc3RydWN0IHd4IHsKIAl2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTsKIAl2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpOwogCWludCAoKnNldHVwX3RjKShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCB0Yyk7Ci0Jdm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKJiM0MzsJdm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiYjNDM7CXZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpOwogCWludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpOwogCXZvaWQgKCpzZXRfbnVtX3F1ZXVlcykoc3RydWN0IHd4ICp3eCk7CiAKQEAgLTE0MjIsNiAmIzQzOzE0NDAsOCBAQCBzdHJ1Y3Qgd3ggewogCiAJc3RydWN0IHRpbWVyX2xpc3Qgc2VydmljZV90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzazsKJiM0MzsJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxOwogCXN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi8KIH07CiAKQEAgLTE1MDQsNyAmIzQzOzE1MjQsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KQogCiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFwKIAlkZXZfZXJyKCZhbXA7KHd4KS0mZ3Q7cGRldi0mZ3Q7ZGV2LCBmbXQsICMjYXJnKQotCiYjNDM7I2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXAomIzQzOwlkZXZfd2FybigmYW1wOyh3eCktJmd0O3BkZXYtJmd0O2RldiwgZm10LCAjI2FyZykKICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXAogCWRldl9kYmcoJmFtcDsod3gpLSZndDtwZGV2LSZndDtkZXYsIGZtdCwgIyNhcmcpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwppbmRleCBiMmUxOTE5ODI4MDMyNi4uMTk2MGY3MTU0MTUxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMKQEAgLTU5LDcgJiM0Mzs1OSw2IEBAIHN0YXRpYyBpbnQgbmdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJd3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpOwogCWt2ZnJlZSh0ZW1wX3JpbmcpOwogCi0Jd3hfY29uZmlndXJlKHd4KTsKIAluZ2JlX3VwKHd4KTsKIAogY2xlYXJfcmVzZXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKaW5kZXggYTE2MjIxOTk1OTA5ZjkuLmNkYTIyMzEwMWNlZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF90eXBlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9ody5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X21ieC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaCYjMzQ7CkBAIC00Niw2ICYjNDM7NDcsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nYmVfcGNpX3RibFtdID0gewogCXsgfQogfTsKIAomIzQzO3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBoeWxpbmtfc3RvcCh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7CXBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtJmd0O3BoeWxpbmspOwomIzQzOwl3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpOwomIzQzOwl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwomIzQzOwl3eF9mcmVlX2lycSh3eCk7CiYjNDM7CXd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7CiYjNDM7CXd4X2ZyZWVfcmVzb3VyY2VzKHd4KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqICBuZ2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGUKICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC0xMzMsNiAmIzQzOzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpCiAKIAl3eC0mZ3Q7bWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTsKIAl3eC0mZ3Q7c2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjOwomIzQzOwl3eC0mZ3Q7ZG9fcmVzZXQgPSBuZ2JlX2RvX3Jlc2V0OwomIzQzOwl3eC0mZ3Q7ZG93bl9zdXNwZW5kID0gbmdiZV9kb3duX3N1c3BlbmQ7CiAJc2V0X2JpdCgwLCAmYW1wO3d4LSZndDtmd2RfYml0bWFzayk7CiAKIAlyZXR1cm4gMDsKQEAgLTE0Nyw2ICYjNDM7MTY0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spOwogCiAJd3hfdXBkYXRlX3N0YXRzKHd4KTsKJiM0MzsJd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTsKJiM0MzsJd3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpOwogCiAJd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7CiB9CkBAIC0zOTIsNiAmIzQzOzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eCkKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CiAKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKIAl0aW1lcl9kZWxldGVfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGFzayk7CiAKQEAgLTQwOCw2ICYjNDM7NDI4LDkgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpCiB7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAl3eF9mbHVzaF9zd19tYWNfdGFibGUod3gpOwogCXd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LSZndDttYWMuYWRkcik7CiAJaWYgKHRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC0mZ3Q7c3RhdGUpKQpAQCAtNDIzLDEzICYjNDM7NDQ2LDE0IEBAIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpCiAJd3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTsKIH0KIAotdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpCiYjNDM7c3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KQogewogCXd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTsKIAogCS8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqLwogCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpOwogCXd4X25hcGlfZW5hYmxlX2FsbCh3eCk7CiAJLyogZW5hYmxlIHRyYW5zbWl0cyAqLwogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtJmd0O25ldGRldik7CkBAIC00OTAsNyAmIzQzOzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAKIAl3eF9wdHBfaW5pdCh3eCk7CiAKLQluZ2JlX3VwKHd4KTsKJiM0MzsJbmdiZV91cF9jb21wbGV0ZSh3eCk7CiAKIAlyZXR1cm4gMDsKIGVycl9kaXNfcGh5OgpAQCAtNTAzLDYgJiM0Mzs1MjcsMTIgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7dm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl3eF9jb25maWd1cmUod3gpOwomIzQzOwluZ2JlX3VwX2NvbXBsZXRlKHd4KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlCiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCkBAIC01MTgsNiAmIzQzOzU0OCw5IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAl3eF9wdHBfc3RvcCh3eCk7CiAJbmdiZV9kb3duKHd4KTsKIAl3eF9mcmVlX2lycSh3eCk7CkBAIC01MjUsNyAmIzQzOzU1OCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXd4X2ZyZWVfcmVzb3VyY2VzKHd4KTsKIAlwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LSZndDtwaHlsaW5rKTsKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7Ci0KJiM0MztvdXQ6CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1NSw3ICYjNDM7NTg4LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKQogCSplbmFibGVfd2FrZSA9ICEhd3VmYzsKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTU5MCw2ICYjNDM7NjI0LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJbmdiZV9jbG9zZShkZXYpOwomIzQzOwllbHNlCiYjNDM7CQluZ2JlX3Jlc2V0KHd4KTsKIAogCXd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpOwogCkBAIC02MDYsMTEgJiM0Mzs2NDIsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CW5ldGlmX3RyYW5zX3VwZGF0ZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0MzsJc2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CW5nYmVfZG93bih3eCk7CiYjNDM7CW5nYmVfdXAod3gpOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQomIzQzOwkJbmdiZV9yZWluaXRfbG9ja2VkKHd4KTsKJiM0MzsJZWxzZQomIzQzOwkJbmdiZV9yZXNldCh3eCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsCiYjNDM7CS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCwKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLAogCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLApAQCAtNzAwLDYgJiM0Mzs3NjEsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTsKIAluZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpOwogCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bmdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCiAJbmV0ZGV2LSZndDtmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAogCQkJICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfApAQCAtNzk2LDYgJiM0Mzs4NTgsMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCWV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAl3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAKJiM0MzsJZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlX21hY190YWJsZTsKJiM0MzsKIAluZ2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODEyLDYgJiM0Mzs4NzgsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODIzLDYgJiM0Mzs4OTAsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTg1NCw2ICYjNDM7OTIzLDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIAogCXBoeWxpbmtfZGVzdHJveSh3eC0mZ3Q7cGh5bGluayk7CiAJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LApAQCAtODYzLDcgJiM0Mzs5MzQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgaW50IG5nYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODkwLDYgJiM0Mzs5NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuJiMzNDspOwogCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWRldmljZV93YWtldXBfZGlzYWJsZSgmYW1wO3BkZXYtJmd0O2Rldik7CiAKQEAgLTkxNCw2ICYjNDM7OTg3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0gewogCS5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLAogCS5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oCkBAIC0xMjUsNSAmIzQzOzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTsKIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpOwogdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCmluZGV4IDIwYzVhMjk1YzZjMjk2Li5kODVlZTgzMTkyZTRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9tYnguaCYjMzQ7CkBAIC05Myw2ICYjNDM7OTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiB7CiAJaW50IGVycjsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTA2LDYgJiM0MzsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTIzLDYgJiM0MzsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7CiAJdHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7CiAJd3hfdXBkYXRlX3N0YXRzKHd4KTsKJiM0MzsJd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTsKJiM0MzsJd3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpOwogCiAJd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7CiB9CkBAIC0xNDQsNiAmIzQzOzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAogCXN3aXRjaCAod3gtJmd0O21hYy50eXBlKSB7CkBAIC0xODcsNiAmIzQzOzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpCiAJdTggb2xkX2FkZHJbRVRIX0FMRU5dOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTsKIAlpZiAoZXJyICE9IDApCiAJCXd4X2Vycih3eCwgJiMzNDtIYXJkd2FyZSBFcnJvcjogJWRcbiYjMzQ7LCBlcnIpOwpAQCAtMjI0LDYgJiM0MzsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCXd4X2lycV9kaXNhYmxlKHd4KTsKIAl3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtMjkyLDYgJiM0MzszMDgsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KQogCXR4Z2JlX3VwX2NvbXBsZXRlKHd4KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwaHlsaW5rX3N0b3Aod3gtJmd0O3BoeWxpbmspOwomIzQzOwl3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpOwomIzQzOwl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwomIzQzOwl3eF9mcmVlX2lycSh3eCk7CiYjNDM7CXR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtJmd0O3ByaXYpOwomIzQzOwl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiYjNDM7CXR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGUKICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC00MDgsNiAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KQogCiAJd3gtJmd0O3NldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7CiAJd3gtJmd0O2RvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7CiAJc2V0X2JpdCgwLCAmYW1wO3d4LSZndDtmd2RfYml0bWFzayk7CiAKIAlzd2l0Y2ggKHd4LSZndDttYWMudHlwZSkgewpAQCAtNTE4LDEyICYjNDM7NTQ5LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCXR4Z2JlX2Rvd24od3gpOwogCXd4X2ZyZWVfaXJxKHd4KTsKIAl0eGdiZV9mcmVlX21pc2NfaXJxKHd4LSZndDtwcml2KTsKIAl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiAJdHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7CiYjNDM7b3V0OgogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAogCXJldHVybiAwOwpAQCAtNTQ0LDcgJiM0Mzs1NzksOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC02MDYsMTEgJiM0Mzs2NDIsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KQogCW11dGV4X3VubG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKIH0KIAotdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpCiB7CiAJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQogCQl0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTsKIAllbHNlCiAJCXR4Z2JlX3Jlc2V0KHd4KTsKQEAgLTY1NCw2ICYjNDM7NjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0gewogCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LAogCS5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSwKJiM0MzsJLm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LAogCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsCiAJLm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsCkBAIC03NDUsNiAmIzQzOzc4Miw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7CiAJdHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDt0eGdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCW5ldGRldi0mZ3Q7dWRwX3R1bm5lbF9uaWNfaW5mbyA9ICZhbXA7dHhnYmVfdWRwX3R1bm5lbHM7CiAKIAkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KQEAgLTgxNCw2ICYjNDM7ODUyLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCXd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAomIzQzOwllcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlOwomIzQzOwogCXR4Z2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODg5LDYgJiM0Mzs5MzEsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlnb3RvIGVycl9yZW1vdmVfcGh5OwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIApAQCAtOTE2LDYgJiM0Mzs5NTksOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogZXJyX2NhbmNlbF9zZXJ2aWNlOgogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIGVycl9mcmVlX21hY190YWJsZToKIAlrZnJlZSh3eC0mZ3Q7cnNzX2tleSk7CiAJa2ZyZWUod3gtJmd0O21hY190YWJsZSk7CkBAIC05NDgsNiAmIzQzOzk5Myw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogCiAJdHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7CiAJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKQEAgLTk1OSw3ICYjNDM7MTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0gewpAQCAtOTY5LDYgJiM0MzsxMDE3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHsKIAkucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsCiAJLnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaAppbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCkBAIC0zMTMsNyAmIzQzOzMxMyw3IEBAIGV4dGVybiBjaGFyIHR4Z2JlX2RyaXZlcl9uYW1lW107CiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7CiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IHR4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTsKLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcCiAJdW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBXYW5neHVuIGV0aGVybmV0IGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgYG5nYmVgIGFuZCBgdHhnYmVgIGRyaXZlcnMgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvYC4gVGhpcyBpcyBhZGRpbmcgc29tZSBjcnVjaWFsIGVycm9yIGhhbmRsaW5nIGFuZCB0aW1lb3V0IHJlY292ZXJ5IGZ1bmN0aW9uYWxpdHkg4oCTIGJhc2ljYWxseSwgcm9idXN0aWZ5aW5nIHRoZSBkcml2ZXJzLiBXZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgYWNyb3NzIGB3eF9lcnIuY2AsIGB3eF9lcnIuaGAsIGFuZCBtb2RpZmljYXRpb25zIHRvIHNldmVyYWwgY29yZSBmaWxlczogYHd4X2h3LmNgLCBgd3hfbGliLmNgLCBgd3hfcHRwLmNgLCBgd3hfdHlwZS5oYCwgYG5nYmVfbWFpbi5jYCwgYW5kIGB0eGdiZV9tYWluLmNgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYWRkaW5nIFBDSSBlcnJvciByZWNvdmVyeSwgaGFuZGxpbmcgVFggdGltZW91dHMsIGFuZCBpbXBsZW1lbnRpbmcgVFggaGFuZyBkZXRlY3Rpb24uCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgYWJvdXQgcmVhY2hhYmlsaXR5LCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZXNlIGFyZSBQQ0kgZHJpdmVycywgYW5kIFdhbmd4dW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBzcGVjaWZpY2FsbHkuIFR5cGljYWxseSwgd2l0aG91dCBhIHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdG9yLCBvciBhIHdheSB0byBpbmplY3QgZXJyb3JzIG9yIHRpbWVvdXRzIHRocm91Z2ggZ2VuZXJpYyBuZXRkZXYgaW50ZXJmYWNlcywgdGhlc2UgcGF0aHMgYXJlbiYjMzk7dCBkaXJlY3RseSByZWFjaGFibGUuCgpCdXQgd2FpdCwgc3l6a2FsbGVyISBJdCBjYW4gZnV6eiBuZXRkZXZzLCBjcmVhdGluZyBvciB1c2luZyBleGlzdGluZyBvbmVzLiBCdXQsIGZvciBQQ0kgZHJpdmVycywgd2UmIzM5O3JlIHN0aWxsIHN0dWNrIHVubGVzcyB0aGVyZSYjMzk7cyBhIHZpcnR1YWwgZGV2aWNlIHJlcHJlc2VudGluZyB0aGUgaGFyZHdhcmUuIENhbiBzeXprYWxsZXIgcmVnaXN0ZXIgYSBXYW5neHVuIG5ldGRldiB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW50PwoKTm8sIHRoYXQmIzM5O3Mgbm90IGdvaW5nIHRvIHdvcmsuIGBuZ2JlX3Byb2JlYCBhbmQgYHR4Z2JlX3Byb2JlYCBib3RoIHJlbHkgb24gdGhlIFBDSSBkZXZpY2UgYmVpbmcgcHJlc2VudC4gVGhleSYjMzk7cmUgZ29pbmcgdG8gZmFpbCBpZiB0aGUgaGFyZHdhcmUgaXMgbm90IHRoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGV4cGxvcmUgaWYgdGhlcmUmIzM5O3MgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgV2FuZ3h1biBkZXZpY2VzLiBJJiMzOTtsbCBzZWFyY2ggdGhyb3VnaCB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vYCBkaXJlY3RvcnkgZm9yIGFueSByZWZlcmVuY2VzIHRvIGBuZ2JlYCBvciBgdHhnYmVgIHdpdGhpbiB0aGUgY29kZWJhc2UsIGhvcGluZyBmb3IgYSBoaW50IG9mIHZpcnR1YWxpemF0aW9uIG9yIGVtdWxhdGlvbiBzdXBwb3J0LiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gZWZmZWN0aXZlIHRlc3Rpbmcgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZ2JlX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTY2OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNjg4LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjY4OTogKiBuZ2JlX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTAtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTY5NC0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjY5NTogKiBuZ2JlX3Byb2JlIGluaXRpYWxpemVzIGFuIHd4IGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTYtICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgd3ggcHJpdmF0ZSBzdHJ1Y3R1cmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTY5OC0gKiovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Njk5OnN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03MDAtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz05ODE9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy05ODMtXHQuaWRfdGFibGUgPSBuZ2JlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTg0Olx0LnByb2JlICAgID0gbmdiZV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy05ODUtXHQucmVtb3ZlICAgPSBuZ2JlX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXYW5neHVuIFBDSSBEcml2ZXImIzM5O3MgVmlydHVhbGl6YXRpb24gTGltaXRhdGlvbnMqKgoKT2theSwgc28gdGhpcyBXYW5neHVuIGRyaXZlciBpcyAqZGVmaW5pdGVseSogYSBQQ0ktc3BlY2lmaWMgY3JlYXR1cmUuIEl0JiMzOTtzIGJ1aWx0IHRvIGludGVyZmFjZSB3aXRoIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggbWVhbnMgdGhlIHdob2xlIHByb2JlIGZ1bmN0aW9uLCB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQsIHdvbiYjMzk7dCBldmVuICpmaXJlKiB1bmxlc3MgdGhhdCBoYXJkd2FyZSBpcyBwcmVzZW50LiBUaGF0IGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDt1bnJlYWNoYWJsZSBjb2RlJiMzNDsgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBHQ0UsIFFFTVUsIHRoZSB3aG9sZSBsb3Qg4oCTIHVubGVzcyB5b3UmIzM5O3JlIGRvaW5nIGZ1bGwgUENJIHBhc3N0aHJvdWdoIG9mIHRoZSBXYW5neHVuIGRldmljZS4gV2hpY2gsIGxldCYjMzk7cyBiZSBob25lc3QsIGlzIGEgcGFpbi4KCldhaXQgYSBzZWNvbmQsIHRob3VnaC4uLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGVyZSBhcmUgZW11bGF0b3JzIGZvciBvdGhlciBraW5kcyBvZiBkZXZpY2VzLCBzbyBtYXliZSBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLiBJIGtub3cgc3l6a2FsbGVyIGhhcyBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYW5kIGBuZXRkZXZzaW1gIHByb3ZpZGVzIHNvbWUgbmV0ZGV2IGZlYXR1cmVzLiBQZXJoYXBzIHRoZXJlJiMzOTtzIHNvbWUgb2JzY3VyZSBjb3JuZXIgb2YgdGhlIGtlcm5lbCwgc29tZSBoaWRkZW4gZ2VtLCB0aGF0IGVtdWxhdGVzIFdhbmd4dW4gUENJIGRldmljZXM/IEl0JiMzOTtzIHVubGlrZWx5LCBidXQgSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRvIGVuc3VyZSB0aGVyZSBpc24mIzM5O3Qgc29tZSBQQ0kgZW11bGF0aW9uIGZvciBXYW5neHVuIHRoYXQgSSYjMzk7dmUgb3Zlcmxvb2tlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZ1bGx5IGF3YXJlIG9mIHRoZSBmYWN0cyBiZWZvcmUgZGlzbWlzc2luZyB0aGUgcG9zc2liaWxpdHkgb2YgdmlydHVhbGl6ZWQgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOR0JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyODpjb25maWcgTkdCRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4NTpjb25maWcgTkdCRVZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODYtXHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX1RYR0JFVkYpICYjNDM7PSB0eGdiZXZmL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19OR0JFKSAmIzQzOz0gbmdiZS9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX05HQkVWRikgJiM0Mzs9IG5nYmV2Zi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvTWFrZWZpbGUtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19OR0JFKSAmIzQzOz0gbmdiZS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvTWFrZWZpbGUtOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmgtMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuaDo0OiNpZm5kZWYgX05HQkVfRVRIVE9PTF9IX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5oOjU6I2RlZmluZSBfTkdCRV9FVEhUT09MX0hfXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmgtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuaD03PXZvaWQgbmdiZV9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmgtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuaDo5OiNlbmRpZiAvKiBfTkdCRV9FVEhUT09MX0hfICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYz0xMz1pbnQgbmdiZV9lZXByb21fY2hrc3VtX2hvc3RpZihzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjE5Olx0YnVmZmVyLmhkci5yZXEuY21kID0gTkdCRV9GV19FRVBST01fQ0hFQ0tTVU1fQ01EO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy0yMC1cdGJ1ZmZlci5oZHIucmVxLmJ1Zl9sZW5oID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtMjEtXHRidWZmZXIuaGRyLnJlcS5idWZfbGVubCA9IDA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjIyOlx0YnVmZmVyLmhkci5yZXEuY2hlY2tzdW0gPSBOR0JFX0ZXX0NNRF9ERUZBVUxUX0NIRUNLU1VNO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy0yMy1cdC8qIGNvbnZlcnQgb2Zmc2V0IGZyb20gd29yZHMgdG8gYnl0ZXMgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTMzLVx0dG1wID0gcmQzMmEod3gsIFdYX01OR19NQk9YLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6MzQ6XHRpZiAodG1wID09IE5HQkVfRldfQ01EX1NUX1BBU1MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTM1LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jPTM5PXN0YXRpYyBpbnQgbmdiZV9yZXNldF9taXNjKHN0cnVjdCB3eCAqd3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy00My1cdFx0LyogZ3BpbzAgaXMgdXNlZCB0byBwb3dlciBvbi9vZmYgY29udHJvbCovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjQ0Olx0XHR3cjMyKHd4LCBOR0JFX0dQSU9fRERSLCAweDEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy00NS1cdFx0bmdiZV9zZnBfbW9kdWxlc190eHJ4X3Bvd2VyY3RsKHd4LCBmYWxzZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYz01MD12b2lkIG5nYmVfc2ZwX21vZHVsZXNfdHhyeF9wb3dlcmN0bChzdHJ1Y3Qgd3ggKnd4LCBib29sIHN3aSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTUyLVx0LyogZ3BpbzAgaXMgdXNlZCB0byBwb3dlciBvbiBjb250cm9sIC4gMCBpcyBvbiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYzo1MzpcdHdyMzIod3gsIE5HQkVfR1BJT19EUiwgc3dpID8gMCA6IE5HQkVfR1BJT19EUl8wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtNTQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM9NjQ9aW50IG5nYmVfcmVzZXRfaHcoc3RydWN0IHd4ICp3eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTkzLVx0LyogcmVzZXQgbnVtX3Jhcl9lbnRyaWVzIHRvIDEyOCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYzo5NDpcdHd4LVx1MDAzZW1hYy5udW1fcmFyX2VudHJpZXMgPSBOR0JFX1JBUl9FTlRSSUVTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy05NS1cdHd4X2luaXRfcnhfYWRkcnMod3gpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmgtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3Lmg6NzojaWZuZGVmIF9OR0JFX0hXX0hfXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5oOjg6I2RlZmluZSBfTkdCRV9IV19IX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuaC05LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3Lmg9MTI9aW50IG5nYmVfcmVzZXRfaHcoc3RydWN0IHd4ICp3eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5oOjEzOiNlbmRpZiAvKiBfTkdCRV9IV19IXyAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz0zMz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MzQ6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMX1cpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MzU6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEEyKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjM2Olx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBMlMpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Mzc6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEE0KSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjM4Olx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBNFMpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Mzk6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMMikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0MDpcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRV9ERVZfSURfRU1fV1gxODYwQUwyUykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0MTpcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRV9ERVZfSURfRU1fV1gxODYwQUw0KSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjQyOlx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBTDRTKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjQzOlx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBMQykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0NDpcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRV9ERVZfSURfRU1fV1gxODYwQTEpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NDU6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEExTCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy00Ni1cdC8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM9Njg9c3RhdGljIHZvaWQgbmdiZV9pbml0X3R5cGVfY29kZShzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03My1cdHd4LVx1MDAzZW1hYy50eXBlID0gd3hfbWFjX2VtO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjc0Olx0dHlwZV9tYXNrID0gKHUxNikod3gtXHUwMDNlc3Vic3lzdGVtX2RldmljZV9pZCBcdTAwMjYgTkdCRV9PRU1fTUFTSyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNzUtXHRuY3NpX21hc2sgPSB3eC1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlX2lkIFx1MDAyNiBXWF9OQ1NJX01BU0s7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg0LVx0d3gtXHUwMDNlbmNzaV9lbmFibGVkID0gKG5jc2lfbWFzayA9PSBXWF9OQ1NJX1NVUCB8fFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjg1Olx0XHRcdCAgIHR5cGVfbWFzayA9PSBOR0JFX1NVQklEX09DUF9DQVJEKSA/IDEgOiAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg3LVx0c3dpdGNoICh0eXBlX21hc2spIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4ODpcdGNhc2UgTkdCRV9TVUJJRF9MWV9ZVDg1MjFTX1NGUDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4OTpcdGNhc2UgTkdCRV9TVUJJRF9MWV9NODhFMTUxMl9TRlA6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTA6XHRjYXNlIE5HQkVfU1VCSURfWVQ4NTIxU19TRlBfR1BJTzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo5MTpcdGNhc2UgTkdCRV9TVUJJRF9JTlRFUk5BTF9ZVDg1MjFTX1NGUF9HUElPOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTkyLVx0XHR3eC1cdTAwM2VncGlvX2N0cmwgPSAxO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz0xMDQ9c3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTA5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExMDpcdHd4LVx1MDAzZW1hYy5udW1fcmFyX2VudHJpZXMgPSBOR0JFX1JBUl9FTlRSSUVTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExMTpcdHd4LVx1MDAzZW1hYy5tYXhfcnhfcXVldWVzID0gTkdCRV9NQVhfUlhfUVVFVUVTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExMjpcdHd4LVx1MDAzZW1hYy5tYXhfdHhfcXVldWVzID0gTkdCRV9NQVhfVFhfUVVFVUVTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExMzpcdHd4LVx1MDAzZW1hYy5tY2Z0X3NpemUgPSBOR0JFX01DX1RCTF9TSVpFO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExNDpcdHd4LVx1MDAzZW1hYy52ZnRfc2l6ZSA9IE5HQkVfU1BfVkZUX1RCTF9TSVpFO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExNTpcdHd4LVx1MDAzZW1hYy5yeF9wYl9zaXplID0gTkdCRV9SWF9QQl9TSVpFO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExNjpcdHd4LVx1MDAzZW1hYy50eF9wYl9zaXplID0gTkdCRV9UREJfUEJfU1o7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTE3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMjYtXHQvKiBTZXQgY29tbW9uIGNhcGFiaWxpdHkgZmxhZ3MgYW5kIHNldHRpbmdzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTI3Olx0d3gtXHUwMDNlbWF4X3FfdmVjdG9ycyA9IE5HQkVfTUFYX01TSVhfVkVDVE9SUztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxMjg6XHRlcnIgPSB3eF9nZXRfcGNpZV9tc2l4X2NvdW50cyh3eCwgXHUwMDI2bXNpeF9jb3VudCwgTkdCRV9NQVhfTVNJWF9WRUNUT1JTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMjktXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTMzOlx0d3gtXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLmxpbWl0ID0gbWluX3QoaW50LCBOR0JFX01BWF9SU1NfSU5ESUNFUyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMzQtXHRcdFx0XHRcdFx0ICAgbnVtX29ubGluZV9jcHVzKCkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xNDEtXHQvKiBzZXQgZGVmYXVsdCByaW5nIHNpemVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTQyOlx0d3gtXHUwMDNldHhfcmluZ19jb3VudCA9IE5HQkVfREVGQVVMVF9UWEQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTQzOlx0d3gtXHUwMDNlcnhfcmluZ19jb3VudCA9IE5HQkVfREVGQVVMVF9SWEQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTE0NS1cdC8qIHNldCBkZWZhdWx0IHdvcmsgbGltaXRzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTQ2Olx0d3gtXHUwMDNldHhfd29ya19saW1pdCA9IE5HQkVfREVGQVVMVF9UWF9XT1JLO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE0NzpcdHd4LVx1MDAzZXJ4X3dvcmtfbGltaXQgPSBOR0JFX0RFRkFVTFRfUlhfV09SSztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xNDgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTE4NT1zdGF0aWMgdm9pZCBuZ2JlX2lycV9lbmFibGUoc3RydWN0IHd4ICp3eCwgYm9vbCBxdWV1ZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTE4OS1cdC8qIGVuYWJsZSBtaXNjIGludGVycnVwdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE5MDpcdG1hc2sgPSBOR0JFX1BYX01JU0NfSUVOX01BU0s7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTkxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yMDAtXHRpZiAocXVldWVzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjIwMTpcdFx0d3hfaW50cl9lbmFibGUod3gsIE5HQkVfSU5UUl9BTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTIwMi1cdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoyMDM6XHRcdHd4X2ludHJfZW5hYmxlKHd4LCBOR0JFX0lOVFJfTUlTQyh3eCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTIwNC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTIxMT1zdGF0aWMgaXJxcmV0dXJuX3QgbmdiZV9pbnRyKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yMzQtXHRlaWNyX21pc2MgPSB3eF9taXNjX2lzYih3eCwgV1hfSVNCX01JU0MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjIzNTpcdGlmICh1bmxpa2VseShlaWNyX21pc2MgXHUwMDI2IE5HQkVfUFhfTUlTQ19JQ19USU1FU1lOQykpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMjM2LVx0XHR3eF9wdHBfY2hlY2tfcHBzX2V2ZW50KHd4KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM9MjQ4PXN0YXRpYyBpcnFyZXR1cm5fdCBfX25nYmVfbXNpeF9taXNjKHN0cnVjdCB3eCAqd3gsIHUzMiBlaWNyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTI0OS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MjUwOlx0aWYgKGVpY3IgXHUwMDI2IE5HQkVfUFhfTUlTQ19JQ19WRl9NQk9YKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTI1MS1cdFx0d3hfbXNnX3Rhc2sod3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTI1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoyNTM6XHRpZiAodW5saWtlbHkoZWljciBcdTAwMjYgTkdCRV9QWF9NSVNDX0lDX1RJTUVTWU5DKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yNTQtXHRcdHd4X3B0cF9jaGVja19wcHNfZXZlbnQod3gpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz02OTk9c3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03MzQtXHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IHd4KSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo3MzU6XHRcdFx0XHRcdCBOR0JFX01BWF9UWF9RVUVVRVMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NzM2Olx0XHRcdFx0XHQgTkdCRV9NQVhfUlhfUVVFVUVTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03MzctXHRpZiAoIW5ldGRldikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03NTktXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo3NjA6XHRwY2lfc3Jpb3Zfc2V0X3RvdGFsdmZzKHBkZXYsIE5HQkVfTUFYX1ZGU19EUlZfTElNSVQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc2MS1cdHd4LVx1MDAzZWRyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNzkyLVx0LyogY2hlY2sgaWYgZmxhc2ggbG9hZCBpcyBkb25lIGFmdGVyIGh3IHBvd2VyIHVwICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NzkzOlx0ZXJyID0gd3hfY2hlY2tfZmxhc2hfbG9hZCh3eCwgTkdCRV9TUElfSUxEUl9TVEFUVVNfUEVSU1QpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc5NC1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNzk1LVx0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo3OTY6XHRlcnIgPSB3eF9jaGVja19mbGFzaF9sb2FkKHd4LCBOR0JFX1NQSV9JTERSX1NUQVRVU19QV1JSU1QpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc5Ny1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTgxMi1cdGlmICh3eC1cdTAwM2VidXMuZnVuYyA9PSAwKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6ODEzOlx0XHR3cjMyKHd4LCBOR0JFX0NBTFNVTV9DQVBfU1RBVFVTLCAweDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjgxNDpcdFx0d3IzMih3eCwgTkdCRV9FRVBST01fVkVSU0lPTl9TVE9SRV9SRUcsIDB4MCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODE1LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4MTY6XHRcdGUycm9tX2Nrc3VtX2NhcCA9IHJkMzIod3gsIE5HQkVfQ0FMU1VNX0NBUF9TVEFUVVMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjgxNzpcdFx0c2F2ZWRfdmVyID0gcmQzMih3eCwgTkdCRV9FRVBST01fVkVSU0lPTl9TVE9SRV9SRUcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTgxOC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODQ1LVx0XHR3eF9yZWFkX2VlX2hvc3RpZih3eCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4NDY6XHRcdFx0XHQgIHd4LVx1MDAzZWVlcHJvbS5zd19yZWdpb25fb2Zmc2V0ICYjNDM7IE5HQkVfRUVQUk9NX1ZFUlNJT05fSCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy04NDctXHRcdFx0XHQgIFx1MDAyNmUycm9tX3Zlcik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg0OS1cdFx0d3hfcmVhZF9lZV9ob3N0aWYod3gsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6ODUwOlx0XHRcdFx0ICB3eC1cdTAwM2VlZXByb20uc3dfcmVnaW9uX29mZnNldCAmIzQzOyBOR0JFX0VFUFJPTV9WRVJTSU9OX0wsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODUxLVx0XHRcdFx0ICBcdTAwMjZlMnJvbV92ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg1Mi1cdFx0ZXRyYWNrX2lkIHw9IGUycm9tX3ZlcjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4NTM6XHRcdHdyMzIod3gsIE5HQkVfRUVQUk9NX1ZFUlNJT05fU1RPUkVfUkVHLCBldHJhY2tfaWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg1NC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM9MTY9c3RhdGljIGludCBuZ2JlX3BoeV9yZWFkX3JlZ19pbnRlcm5hbChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdudW0pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTIxLVx0XHRyZXR1cm4gMHhmZmZmO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjIyOlx0cmV0dXJuICh1MTYpcmQzMih3eCwgTkdCRV9QSFlfQ09ORklHKHJlZ251bSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTIzLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM9MjU9c3RhdGljIGludCBuZ2JlX3BoeV93cml0ZV9yZWdfaW50ZXJuYWwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTI5LVx0aWYgKHBoeV9hZGRyID09IDApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MzA6XHRcdHdyMzIod3gsIE5HQkVfUEhZX0NPTkZJRyhyZWdudW0pLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmMtMzEtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM9Nzg9c3RhdGljIHZvaWQgbmdiZV9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmMtMTAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjEwMjpcdHdyMzJtKHd4LCBOR0JFX0NGR19MQU5fU1BFRUQsIDB4MywgbGFuX3NwZWVkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0xMDMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oLTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmg6NzojaWZuZGVmIF9OR0JFX01ESU9fSF9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uaDo4OiNkZWZpbmUgX05HQkVfTURJT19IX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oLTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmg9MTA9aW50IG5nYmVfbWRpb19pbml0KHN0cnVjdCB3eCAqd3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oOjExOiNlbmRpZiAvKiBfTkdCRV9NRElPX0hfICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NDojaWZuZGVmIF9OR0JFX1RZUEVfSF9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1OiNkZWZpbmUgX05HQkVfVFlQRV9IX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTA6LyoqKioqKioqKioqKiBOR0JFX3JlZ2lzdGVyLmggKioqKioqKioqKioqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTExLS8qIERldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMjojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMX1dcdFx0MHgwMTAwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTM6I2RlZmluZSBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBMlx0XHRcdDB4MDEwMVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjE0OiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwQTJTXHRcdDB4MDEwMlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjE1OiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwQTRcdFx0XHQweDAxMDNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxNjojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEE0U1x0XHQweDAxMDRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxNzojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMMlx0XHQweDAxMDVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxODojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMMlNcdFx0MHgwMTA2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTk6I2RlZmluZSBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBTDRcdFx0MHgwMTA3XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MjA6I2RlZmluZSBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBTDRTXHRcdDB4MDEwOFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjIxOiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwTENcdFx0XHQweDAxMDlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoyMjojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEExXHRcdFx0MHgwMTBhXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MjM6I2RlZmluZSBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBMUxcdFx0MHgwMTBiXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMjUtLyogU3Vic3lzdGVtIElEICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MjY6I2RlZmluZSBOR0JFX1NVQklEX004OEUxNTEyX1NGUFx0XHRcdDB4MDAwM1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjI3OiNkZWZpbmUgTkdCRV9TVUJJRF9PQ1BfQ0FSRFx0XHRcdDB4MDA0MFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjI4OiNkZWZpbmUgTkdCRV9TVUJJRF9MWV9NODhFMTUxMl9TRlBcdFx0MHgwMDUwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Mjk6I2RlZmluZSBOR0JFX1NVQklEX004OEUxNTEyX1JKNDVcdFx0MHgwMDUxXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MzA6I2RlZmluZSBOR0JFX1NVQklEX004OEUxNTEyX01JWFx0XHRcdDB4MDA1MlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjMxOiNkZWZpbmUgTkdCRV9TVUJJRF9ZVDg1MjFTX1NGUFx0XHRcdDB4MDA2MFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjMyOiNkZWZpbmUgTkdCRV9TVUJJRF9JTlRFUk5BTF9ZVDg1MjFTX1NGUFx0XHQweDAwNjFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDozMzojZGVmaW5lIE5HQkVfU1VCSURfWVQ4NTIxU19TRlBfR1BJT1x0XHQweDAwNjJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDozNDojZGVmaW5lIE5HQkVfU1VCSURfSU5URVJOQUxfWVQ4NTIxU19TRlBfR1BJT1x0MHgwMDY0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MzU6I2RlZmluZSBOR0JFX1NVQklEX0xZX1lUODUyMVNfU0ZQXHRcdDB4MDA3MFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjM2OiNkZWZpbmUgTkdCRV9TVUJJRF9SR01JSV9GUEdBXHRcdFx0MHgwMDgwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Mzg6I2RlZmluZSBOR0JFX09FTV9NQVNLXHRcdFx0XHQweDAwRkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0zOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNDEtLyogY2hpcCBjb250cm9sIFJlZ2lzdGVycyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjQyOiNkZWZpbmUgTkdCRV9NSVNfUFJCX0NUTFx0XHRcdDB4MTAwMTBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC00My0vKiBGTUdSIFJlZ2lzdGVycyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjQ0OiNkZWZpbmUgTkdCRV9TUElfSUxEUl9TVEFUVVNcdFx0XHQweDEwMTIwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NDU6I2RlZmluZSBOR0JFX1NQSV9JTERSX1NUQVRVU19QRVJTVFx0XHRCSVQoMCkgLyogUENJRV9QRVJTVCBpcyBkb25lICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NDY6I2RlZmluZSBOR0JFX1NQSV9JTERSX1NUQVRVU19QV1JSU1RcdFx0QklUKDEpIC8qIFBvd2VyIG9uIHJlc2V0IGlzIGRvbmUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC00Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC00OC0vKiBDaGVja3N1bSBhbmQgRUVQUk9NIHBvaW50ZXJzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NDk6I2RlZmluZSBOR0JFX0NBTFNVTV9DT01NQU5EXHRcdFx0MHhFOVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjUwOiNkZWZpbmUgTkdCRV9DQUxTVU1fQ0FQX1NUQVRVU1x0XHRcdDB4MTAyMjRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1MTojZGVmaW5lIE5HQkVfRUVQUk9NX1ZFUlNJT05fU1RPUkVfUkVHXHRcdDB4MTAyMkNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1MjojZGVmaW5lIE5HQkVfU0FOX01BQ19BRERSX1BUUlx0XHRcdDB4MThcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1MzojZGVmaW5lIE5HQkVfREVWSUNFX0NBUFNcdFx0XHQweDFDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NTQ6I2RlZmluZSBOR0JFX0VFUFJPTV9WRVJTSU9OX0xcdFx0XHQweDFEXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NTU6I2RlZmluZSBOR0JFX0VFUFJPTV9WRVJTSU9OX0hcdFx0XHQweDFFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNTctLyogR1BJTyBSZWdpc3RlcnMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1ODojZGVmaW5lIE5HQkVfR1BJT19EUlx0XHRcdFx0MHgxNDgwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjU5OiNkZWZpbmUgTkdCRV9HUElPX0REUlx0XHRcdFx0MHgxNDgwNFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTYwLS8qR1BJTyBiaXQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo2MTojZGVmaW5lIE5HQkVfR1BJT19EUl8wXHRcdFx0XHRCSVQoMCkgLyogU0RQMCBEYXRhIFZhbHVlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NjI6I2RlZmluZSBOR0JFX0dQSU9fRFJfMVx0XHRcdFx0QklUKDEpIC8qIFNEUDEgRGF0YSBWYWx1ZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjYzOiNkZWZpbmUgTkdCRV9HUElPX0REUl8wXHRcdFx0XHRCSVQoMCkgLyogU0RQMCBJTyBkaXJlY3Rpb24gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo2NDojZGVmaW5lIE5HQkVfR1BJT19ERFJfMVx0XHRcdFx0QklUKDEpIC8qIFNEUDEgSU8gZGlyZWN0aW9uICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNjYtLyogRXh0ZW5kZWQgSW50ZXJydXB0IEVuYWJsZSBTZXQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo2NzojZGVmaW5lIE5HQkVfUFhfTUlTQ19JRU5fREVWX1JTVFx0XHRCSVQoMTApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Njg6I2RlZmluZSBOR0JFX1BYX01JU0NfSUVOX1RJTUVTWU5DXHRcdEJJVCgxMSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo2OTojZGVmaW5lIE5HQkVfUFhfTUlTQ19JRU5fRVRIX0xLXHRcdFx0QklUKDE4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjcwOiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lFTl9JTlRfRVJSXHRcdEJJVCgyMClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo3MTojZGVmaW5lIE5HQkVfUFhfTUlTQ19JQ19WRl9NQk9YXHRcdFx0QklUKDIzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjcyOiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lFTl9HUElPXHRcdFx0QklUKDI2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjczOiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lFTl9NQVNLICggXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo3NDpcdFx0XHRcdE5HQkVfUFhfTUlTQ19JRU5fREVWX1JTVCB8IFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NzU6XHRcdFx0XHROR0JFX1BYX01JU0NfSUVOX1RJTUVTWU5DIHwgXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo3NjpcdFx0XHRcdE5HQkVfUFhfTUlTQ19JRU5fRVRIX0xLIHwgXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo3NzpcdFx0XHRcdE5HQkVfUFhfTUlTQ19JRU5fSU5UX0VSUiB8IFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Nzg6XHRcdFx0XHROR0JFX1BYX01JU0NfSUNfVkZfTUJPWCB8IFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Nzk6XHRcdFx0XHROR0JFX1BYX01JU0NfSUVOX0dQSU8pXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtODAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtODEtLyogRXh0ZW5kZWQgSW50ZXJydXB0IENhdXNlIFJlYWQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo4MjojZGVmaW5lIE5HQkVfUFhfTUlTQ19JQ19USU1FU1lOQ1x0XHRCSVQoMTEpIC8qIHRpbWUgc3luYyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjg0OiNkZWZpbmUgTkdCRV9JTlRSX0FMTFx0XHRcdFx0MHgxRkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo4NTojZGVmaW5lIE5HQkVfSU5UUl9NSVNDKEEpXHRcdFx0QklUKChBKS1cdTAwM2Vtc2l4X2VudHJ5LVx1MDAzZWVudHJ5KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTg2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjg3OiNkZWZpbmUgTkdCRV9QSFlfQ09ORklHKHJlZ19vZmZzZXQpXHRcdCgweDE0MDAwICYjNDM7ICgocmVnX29mZnNldCkgKiA0KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo4ODojZGVmaW5lIE5HQkVfQ0ZHX0xBTl9TUEVFRFx0XHRcdDB4MTQ0NDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo4OTojZGVmaW5lIE5HQkVfQ0ZHX1BPUlRfU1RcdFx0XHQweDE0NDA0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6OTE6I2RlZmluZSBOR0JFX0ZXX0VFUFJPTV9DSEVDS1NVTV9DTURcdFx0MHhFOVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjkyOiNkZWZpbmUgTkdCRV9GV19OVk1fREFUQV9PRkZTRVRcdFx0XHQzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6OTM6I2RlZmluZSBOR0JFX0ZXX0NNRF9ERUZBVUxUX0NIRUNLU1VNXHRcdDB4RkYgLyogY2hlY2tzdW0gYWx3YXlzIDB4RkYgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo5NDojZGVmaW5lIE5HQkVfRldfQ01EX1NUX1BBU1NcdFx0XHQweDgwNjU4MzgzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6OTU6I2RlZmluZSBOR0JFX0ZXX0NNRF9TVF9GQUlMXHRcdFx0MHg3MDY1NzM3NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTk2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjk3OiNkZWZpbmUgTkdCRV9NQVhfRkRJUl9JTkRJQ0VTXHRcdFx0N1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjk4OiNkZWZpbmUgTkdCRV9NQVhfUlNTX0lORElDRVNcdFx0XHQ4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtOTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTAwOiNkZWZpbmUgTkdCRV9NQVhfUlhfUVVFVUVTXHRcdFx0KE5HQkVfTUFYX0ZESVJfSU5ESUNFUyAmIzQzOyAxKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwMTojZGVmaW5lIE5HQkVfTUFYX1RYX1FVRVVFU1x0XHRcdChOR0JFX01BWF9GRElSX0lORElDRVMgJiM0MzsgMSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTAzOiNkZWZpbmUgTkdCRV9FVEhfTEVOR1RIX09GX0FERFJFU1NcdFx0NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwNDojZGVmaW5lIE5HQkVfTUFYX01TSVhfVkVDVE9SU1x0XHRcdDB4MDlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMDU6I2RlZmluZSBOR0JFX1JBUl9FTlRSSUVTXHRcdFx0MzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMDY6I2RlZmluZSBOR0JFX1JYX1BCX1NJWkVcdFx0XHRcdDQyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTA3OiNkZWZpbmUgTkdCRV9NQ19UQkxfU0laRVx0XHRcdDEyOFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwODojZGVmaW5lIE5HQkVfU1BfVkZUX1RCTF9TSVpFXHRcdFx0MTI4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTA5OiNkZWZpbmUgTkdCRV9UREJfUEJfU1pcdFx0XHRcdCgyMCAqIDEwMjQpIC8qIDE2MEtCIFBhY2tldCBCdWZmZXIgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTExLS8qIFRYL1JYIGRlc2NyaXB0b3IgZGVmaW5lcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExMjojZGVmaW5lIE5HQkVfREVGQVVMVF9UWERcdFx0XHQ1MTIgLyogZGVmYXVsdCByaW5nIHNpemUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMTM6I2RlZmluZSBOR0JFX0RFRkFVTFRfVFhfV09SS1x0XHRcdDI1NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExNDojZGVmaW5lIE5HQkVfTUFYX1RYRFx0XHRcdFx0ODE5MlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExNTojZGVmaW5lIE5HQkVfTUlOX1RYRFx0XHRcdFx0MTI4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExNzojZGVmaW5lIE5HQkVfREVGQVVMVF9SWERcdFx0XHQ1MTIgLyogZGVmYXVsdCByaW5nIHNpemUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMTg6I2RlZmluZSBOR0JFX0RFRkFVTFRfUlhfV09SS1x0XHRcdDI1NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExOTojZGVmaW5lIE5HQkVfTUFYX1JYRFx0XHRcdFx0ODE5MlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEyMDojZGVmaW5lIE5HQkVfTUlOX1JYRFx0XHRcdFx0MTI4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEyMjojZGVmaW5lIE5HQkVfTUFYX1ZGU19EUlZfTElNSVRcdFx0XHQ3XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTIzLWV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg9MTI4PXZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEzMDojZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL01ha2VmaWxlLTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19OR0JFKSAmIzQzOz0gbmdiZXZmLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL01ha2VmaWxlLTgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYz0yOD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZXZmX3BjaV90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6Mjk6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUxfVykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MzA6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTIpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjMxOlx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEEyUykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MzI6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTQpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjMzOlx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEE0UykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MzQ6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUwyKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzozNTpcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDJTKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzozNjpcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDQpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjM3Olx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMNFMpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjM4Olx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2ME5DU0kpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjM5Olx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEExKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzo0MDpcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDEpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTQxLVx0LyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM9NjA9c3RhdGljIGludCBuZ2JldmZfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtNzctXHR3eC1cdTAwM2VtYWMudHlwZSA9IHd4X21hY19lbTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6Nzg6XHR3eC1cdTAwM2VtYWMubWF4X21zaXhfdmVjdG9ycyA9IE5HQkVWRl9NQVhfTVNJWF9WRUNUT1JTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy03OS1cdC8qIGxvY2sgdG8gcHJvdGVjdCBtYWlsYm94IGFjY2Vzc2VzICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0xMDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEwMTpcdHd4LVx1MDAzZW1hYy5tYXhfdHhfcXVldWVzID0gTkdCRVZGX01BWF9UWF9RVUVVRVM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEwMjpcdHd4LVx1MDAzZW1hYy5tYXhfcnhfcXVldWVzID0gTkdCRVZGX01BWF9SWF9RVUVVRVM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTEwMy1cdC8qIEVuYWJsZSBkeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGVzICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0xMDctXHQvKiBzZXQgZGVmYXVsdCByaW5nIHNpemVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEwODpcdHd4LVx1MDAzZXR4X3JpbmdfY291bnQgPSBOR0JFVkZfREVGQVVMVF9UWEQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEwOTpcdHd4LVx1MDAzZXJ4X3JpbmdfY291bnQgPSBOR0JFVkZfREVGQVVMVF9SWEQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTExMC1cdC8qIHNldCBkZWZhdWx0IHdvcmsgbGltaXRzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjExMTpcdHd4LVx1MDAzZXR4X3dvcmtfbGltaXQgPSBOR0JFVkZfREVGQVVMVF9UWF9XT1JLO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxMTI6XHR3eC1cdTAwM2VyeF93b3JrX2xpbWl0ID0gTkdCRVZGX0RFRkFVTFRfUlhfV09SSztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTEzLVx0d3gtXHUwMDNlc2V0X251bV9xdWV1ZXMgPSBuZ2JldmZfc2V0X251bV9xdWV1ZXM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYz0xMzY9c3RhdGljIGludCBuZ2JldmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0xNjYtXHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IHd4KSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTY3Olx0XHRcdFx0XHQgTkdCRVZGX01BWF9UWF9RVUVVRVMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjE2ODpcdFx0XHRcdFx0IE5HQkVWRl9NQVhfUlhfUVVFVUVTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTY5LVx0aWYgKCFuZXRkZXYpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oLTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjQ6I2lmbmRlZiBfTkdCRVZGX1RZUEVfSF9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6NTojZGVmaW5lIF9OR0JFVkZfVFlQRV9IX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaC02LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaC03LS8qIERldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6ODojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUxfVyAgICAgICAgICAgICAweDAxMTBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6OTojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTIgICAgICAgICAgICAgICAweDAxMTFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTA6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEEyUyAgICAgICAgICAgICAgMHgwMTEyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjExOiNkZWZpbmUgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBNCAgICAgICAgICAgICAgIDB4MDExM1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxMjojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTRTICAgICAgICAgICAgICAweDAxMTRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTM6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMMiAgICAgICAgICAgICAgMHgwMTE1XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjE0OiNkZWZpbmUgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDJTICAgICAgICAgICAgIDB4MDExNlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxNTojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUw0ICAgICAgICAgICAgICAweDAxMTdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTY6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMNFMgICAgICAgICAgICAgMHgwMTE4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjE3OiNkZWZpbmUgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBOQ1NJICAgICAgICAgICAgIDB4MDExOVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxODojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTEgICAgICAgICAgICAgICAweDAxMWFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTk6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMMSAgICAgICAgICAgICAgMHgwMTFiXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyMTojZGVmaW5lIE5HQkVWRl9NQVhfTVNJWF9WRUNUT1JTICAgICAgICAgICAgICAgMVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyMjojZGVmaW5lIE5HQkVWRl9NQVhfUlhfUVVFVUVTICAgICAgICAgICAgICAgICAgMVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyMzojZGVmaW5lIE5HQkVWRl9NQVhfVFhfUVVFVUVTICAgICAgICAgICAgICAgICAgMVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyNDojZGVmaW5lIE5HQkVWRl9ERUZBVUxUX1RYRCAgICAgICAgICAgICAgICAgICAgMTI4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjI1OiNkZWZpbmUgTkdCRVZGX0RFRkFVTFRfUlhEICAgICAgICAgICAgICAgICAgICAxMjhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MjY6I2RlZmluZSBOR0JFVkZfREVGQVVMVF9UWF9XT1JLICAgICAgICAgICAgICAgIDI1NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyNzojZGVmaW5lIE5HQkVWRl9ERUZBVUxUX1JYX1dPUksgICAgICAgICAgICAgICAgMjU2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oLTI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyOTojZW5kaWYgLyogX05HQkVWRl9UWVBFX0hfICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2ODAKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBXb3JsZCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIFdhbmd4dW4gZHJpdmVycyDigJMgc3BlY2lmaWNhbGx5IHRoZSBgbmdiZWAgYW5kIGB0eGdiZWAgZHJpdmVycy4gVGhlc2UgYXJlLCBhcyBJIHN1c3BlY3RlZCwgZGVzaWduZWQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGVyZSYjMzk7cyBubyB2aXJ0dWFsIGRldmljZSBlbXVsYXRpb24gb3IgYW55dGhpbmcgbGlrZSB0aGF0IGJ1aWx0IGludG8gdGhlIGtlcm5lbCBmb3IgdGhlbS4gVGhpcyBtZWFucyB0aGUgY29kZSBiZWluZyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoIOKAkyB0aGUgZXJyb3IgaGFuZGxpbmcsIHRoZSBUWCB0aW1lb3V0IHJlY292ZXJ5LCBhbmQgdGhlIFRYIGhhbmcgZGV0ZWN0aW9uIOKAkyBpcyBzaW1wbHkgdW5yZWFjaGFibGUgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgZXZlbiBRRU1VLgoKTXkgaW5pdGlhbCBndXQgZmVlbGluZyB3YXMgcmlnaHQ7IHRoaXMgaXMgbm90IHdvcnRoIGZ1enppbmcuIEJ1dCBJIG5lZWRlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSB0cmFjZSBob3cgdGhpcyBjb2RlIGdldHMgY2FsbGVkLiBJdCYjMzk7cyBuZXN0bGVkIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jYC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRoZSBgd3hfdHhfdGltZW91dGAgZnVuY3Rpb24gaXMgdGhlIHBvaW50IG9mIGVudHJ5IGFuZCBpdCYjMzk7cyBob29rZWQgdXAgYXMgdGhlIGAubmRvX3R4X3RpbWVvdXRgIGhhbmRsZXIuIE5vdywgdG8gZ2V0IHRoYXQgcmVnaXN0ZXJlZCwgZWl0aGVyIGBuZ2JlX3Byb2JlYCBvciBgdHhnYmVfcHJvYmVgIGhhcyB0byBzdWNjZWVkLiBBbmQgdGhvc2UgcHJvYmUgZnVuY3Rpb25zIGFyZSAqdmVyeSogc3BlY2lmaWMuIFRoZXkmIzM5O3JlIHRpZWQgdG8gdGhlIFBDSSBkZXZpY2UmIzM5O3MgcHJlc2VuY2UgYW5kIGludm9sdmUgYWN0dWFsIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uOiByZWFkaW5nIEVFUFJPTSwgcmVzZXR0aW5nIHRoZSBNQUMsIGFsbCB0aGF0IHN0dWZmLgoKU28sIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUsIHRob3NlIHByb2JlcyB3aWxsIGVpdGhlciBmYWlsIGVhcmx5IG9uIG9yIHdvbiYjMzk7dCBldmVuIGJlIGludm9rZWQuIE5vIHByb2JlID0gbm8gbmV0ZGV2ID0gbm8gcmVnaXN0cmF0aW9uIG9mIGAubmRvX3R4X3RpbWVvdXRgLiBUaGF0JiMzOTtzIHRoYXQuIFRoZSBQQ0kgZXJyb3IgaGFuZGxlcnMgbGlrZSBgd3hfZXJyX2hhbmRsZXJgIGhhdmUgdGhlIHNhbWUgZGVwZW5kZW5jeSBvbiB0aGUgcGh5c2ljYWwgUENJIGRldmljZSBleGlzdGluZy4gVGhlIHdob2xlIHNldHVwIGlzIHJlbGlhbnQgb24gdGhlIHJlYWwgaGFyZHdhcmUuCgpUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGltZSB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSkgdG8gYWRkIFBDSSBlcnJvciByZWNvdmVyeSwgVFggdGltZW91dCBoYW5kbGluZywgYW5kIFRYIGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgZHJpdmVycyBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgUENJIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgV2FuZ3h1biBkZXZpY2VzIGluIHRoZSBrZXJuZWwsIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBub3Qgc3VjY2VlZCBhbmQgdGhlIG5ldGRldnMgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlcnMgKG5nYmUsIHR4Z2JlKSB0byBhZGQgUENJIGVycm9yIHJlY292ZXJ5LCBUWCB0aW1lb3V0IGhhbmRsaW5nLCBhbmQgVFggaGFuZyBkZXRlY3Rpb24uIFRoZXNlIGFyZSBkcml2ZXJzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBQQ0kgaGFyZHdhcmUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciBXYW5neHVuIGRldmljZXMgaW4gdGhlIGtlcm5lbCwgdGhlIHByb2JlIGZ1bmN0aW9ucyB3aWxsIG5vdCBzdWNjZWVkIGFuZCB0aGUgbmV0ZGV2cyB3aWxsIG5vdCBiZSByZWdpc3RlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA0OjA2OjUyLjY2NTk3NTU5MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDUxMTQ1NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSkgdG8gYWRkIFBDSSBlcnJvciByZWNvdmVyeSwgVFggdGltZW91dCBoYW5kbGluZywgYW5kIFRYIGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgZHJpdmVycyBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgUENJIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgV2FuZ3h1biBkZXZpY2VzIGluIHRoZSBrZXJuZWwsIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBub3Qgc3VjY2VlZCBhbmQgdGhlIG5ldGRldnMgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA0OjA2OjUyLjY2NTk4MTY3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwMDk5ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjE2MGE0MTRkMjQ2YWMzZmRmMzZkMjZmN2YxZGQ3NTZhZTg3NDA1NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAwNDowNjo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbmluZGV4IGE3MWIwYWQ3N2RlM2Y3Li5jODcyNGJiMTI5YWEwNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbkBAIC00LDUgKzQsNSBAQFxcbiBcXG4gb2JqLSQoQ09ORklHX0xJQldYKSArPSBsaWJ3eC5vXFxuIFxcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cXG4rbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXFxuIGxpYnd4LW9ianMgKz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmMzNGM5NDA2YTVhZWRmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5AQCAtMCwwICsxLDMyMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqL1xcbisvKiBDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDI2IEludGVsIENvcnBvcmF0aW9uLiAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hZXIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ3eF90eXBlLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X2Vyci5oXFxcIlxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxcbisgKlxcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmdcXG4rICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuXFxuKyAqL1xcbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcbitcXHRpZiAoIXd4KVxcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFxuK1xcdG5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuK1xcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcbitcXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKVxcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdC8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqL1xcbitcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICpcXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxcbisgKlxcbisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC5cXG4rICovXFxuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0cGNpX2Vyc19yZXN1bHRfdCByZXN1bHQ7XFxuK1xcbitcXHRpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7XFxuK1xcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBtYWtlIGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSBjbGVhcmluZyB0aGUgZmxhZyAqL1xcbitcXHRcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4rXFx0XFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbitcXHRcXHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcXG4rXFx0XFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XFxuK1xcbitcXHRcXHRydG5sX2xvY2soKTtcXG4rXFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvd25fc3VzcGVuZClcXG4rXFx0XFx0XFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XFxuK1xcdFxcdGlmICh3eC1cXHUwMDNlZG9fcmVzZXQpXFxuK1xcdFxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldCh3eC1cXHUwMDNlbmV0ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdFxcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcXG4rXFx0fVxcbitcXG4rXFx0cGNpX2Flcl9jbGVhcl9ub25mYXRhbF9zdGF0dXMocGRldik7XFxuK1xcbitcXHRyZXR1cm4gcmVzdWx0O1xcbit9XFxuK1xcbisvKipcXG4rICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxcbisgKlxcbisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxcbisgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdG5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuK1xcdFxcdGVyciA9IG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHR3eF9lcnIod3gsIFxcXCJGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcXG4rb3V0OlxcbitcXHRydG5sX3VubG9jaygpO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xcbitcXHQuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCxcXG4rXFx0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxcbitcXHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxcbit9O1xcbitFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3BmX3Jlc2V0X3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHd4X3dhcm4od3gsIFxcXCJSZXNldCBhZGFwdGVyLlxcXFxuXFxcIik7XFxuK1xcdGlmICh3eC1cXHUwMDNlZG9fcmVzZXQpXFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldCh3eC1cXHUwMDNlbmV0ZGV2LCB0cnVlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spO1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpO1xcbitcXG4rb3V0OlxcbitcXHRydG5sX3VubG9jaygpO1xcbit9XFxuK1xcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cXVldWVfd29yayh3eC1cXHUwMDNlcmVzZXRfd3EsIFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7XFxuK1xcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHd4LVxcdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwiJXNfcmVzZXRfd3FfJXhcXFwiLCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIDEsIHd4LVxcdTAwM2Vkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC1cXHUwMDNlcGRldikpO1xcbitcXHRpZiAoIXd4LVxcdTAwM2VyZXNldF93cSkge1xcbitcXHRcXHR3eF9lcnIod3gsIFxcXCJGYWlsZWQgdG8gY3JlYXRlIHd4X3Jlc2V0X3dxIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRJTklUX1dPUksoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9pbml0X2Vycl90YXNrKTtcXG4rXFxuK3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cXHUwMDNldHhfcmluZ1tpXTtcXG4rXFxuK1xcdFxcdGlmICh0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX2NsZWFuKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB3eF92Zl90eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0c3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9IFxcdTAwMjZ3eC1cXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9WTURRXTtcXG4rXFx0dTMyIHFfcGVyX3Bvb2wgPSBfX0FMSUdOX01BU0soMSwgfnZtZHEtXFx1MDAzZW1hc2spO1xcbitcXHR1MzIgaSwgajtcXG4rXFxuK1xcdGlmICghd3gtXFx1MDAzZW51bV92ZnMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3ZmczsgaSsrKSB7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBxX3Blcl9wb29sOyBqKyspIHtcXG4rXFx0XFx0XFx0dTMyIGgsIHQ7XFxuK1xcbitcXHRcXHRcXHRoID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xcbitcXHRcXHRcXHR0ID0gcmQzMih3eCwgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xcbitcXG4rXFx0XFx0XFx0aWYgKGggIT0gdClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cXHUwMDNlbmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcXG4rXFx0XFx0LyogV2UndmUgbG9zdCBsaW5rLCBzbyB0aGUgY29udHJvbGxlciBzdG9wcyBETUEsXFxuK1xcdFxcdCAqIGJ1dCB3ZSd2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCdzIG5ldmVyIGdvaW5nXFxuK1xcdFxcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxcbitcXHRcXHQgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0d3hfd2Fybih3eCwgXFxcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xcXFxuXFxcIik7XFxuK1xcdFxcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKiBJZiB3ZSdyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovXFxuK1xcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVxcdTAwM2VuZXRkZXYpKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRcXHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlc3RhdGUpO1xcbitcXHR9XFxuK31cXG4rXFxuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xcbitcXHR3eF9kZXRlY3RfdHhfaGFuZyh3eCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spO1xcbitcXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfcGNpZV9lcnJvcihzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHUxNiB2aWQsIHBjaV9jbWQ7XFxuK1xcbitcXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cXHUwMDNlcGRldiwgUENJX1ZFTkRPUl9JRCwgXFx1MDAyNnZpZCk7XFxuK1xcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVxcdTAwM2VwZGV2LCBQQ0lfQ09NTUFORCwgXFx1MDAyNnBjaV9jbWQpO1xcbitcXG4rXFx0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbid0IGFjY2VzcyAqL1xcbitcXHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFxcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxcbitcXHQgKiByZWNvdmVyeSBtZWNoYW5pc20uIEhvd2V2ZXIsIHRoaXMgcmVjb3ZlcnkgZmxvdyByZWxpZXMgb24gdGhlIEFFUlxcbitcXHQgKiBkcml2ZXIgZm9yIGN1cnJlbnQga2VybmVsIHBvbGljeS4gVGhlcmVmb3JlLCBhIHNlbGYtY29udGFpbmVkXFxuK1xcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxcbitcXHQgKi9cXG4rXFx0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0d3hfZXJyKHd4LCBcXFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcXFxuXFxcIik7XFxuK1xcdHF1ZXVlX3dvcmsod3gtXFx1MDAzZXJlc2V0X3dxLCBcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR3eF93YXJuKHd4LCBcXFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcXFxuXFxcIik7XFxuK1xcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xcbit9XFxuK1xcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXG4rXFx0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxcbitcXHRcXHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpO1xcbitcXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHR3eF93YXJuKHd4LFxcbitcXHRcXHRcXFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxcXG5cXFwiLFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCxcXG4rXFx0XFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cXHUwMDNlcmVnX2lkeCkpLFxcbitcXHRcXHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVxcdTAwM2VyZWdfaWR4KSksXFxuK1xcdFxcdHR4X3JpbmctXFx1MDAzZW5leHRfdG9fdXNlLCBuZXh0LFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcXG4rXFxuK1xcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCk7XFxuK1xcbitcXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE2YTgyYTI2MzUyODQ5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcXG5AQCAtMCwwICsxLDE4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qXFxuKyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXJcXG4rICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9XWF9FUlJfSF9cXG4rI2RlZmluZSBfV1hfRVJSX0hfXFxuK1xcbitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjtcXG4rXFxuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XFxuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpO1xcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcXG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTtcXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpO1xcbitcXG4rI2VuZGlmIC8qIF9XWF9FUlJfSF8gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbmluZGV4IDVkZjk3MWFjYTllMzVmLi5kMTM1NmZmNWQ2OWI1NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuQEAgLTM5NSw3ICszOTUsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHQvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi9cXG4gXFx0aWYgKG5lZWRfcmVzZXQgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIH1cXG4gXFxuIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuaW5kZXggMjYwZTE0ZDVkNTQxMjEuLjEyMmM0OTUyZDIwM2YwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbkBAIC0xOTMyLDYgKzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxcbiBcXHRlbHNlXFxuIFxcdFxcdHJpbmctXFx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XFxuIFxcbitcXHRiaXRtYXBfemVybyhyaW5nLVxcdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XFxuIFxcdC8qIHJlaW5pdGlhbGl6ZSB0eF9idWZmZXJfaW5mbyAqL1xcbiBcXHRtZW1zZXQocmluZy1cXHUwMDNldHhfYnVmZmVyX2luZm8sIDAsXFxuIFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3R4X2J1ZmZlcikgKiByaW5nLVxcdTAwM2Vjb3VudCk7XFxuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcXHUwMDI2d3gtXFx1MDAzZXN0YXRzO1xcbitcXHR1NjQgZGF0YTtcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRpZiAod3gtXFx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfZnVsbCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgd3gtXFx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmICh3eC1cXHUwMDNlbWFjLnR5cGUgXFx1MDAzZT0gd3hfbWFjX2FtbClcXG4tXFx0XFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnd4LVxcdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcXG4rXFx0XFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZ3eC1cXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcXG4rXFx0XFx0ZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XFxuK1xcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IGRhdGE7XFxuK1xcbitcXHQvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqL1xcbitcXHRpZiAoIWRhdGEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXN0YXRlKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuaW5kZXggZDA0MjU2N2I4MTI4NGIuLmQzMzQwYjJiMDY4MjQzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ3eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X2Vyci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfdmZfbGliLmhcXFwiXFxuQEAgLTc0Miw2ICs3NDMsMzcgQEAgc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnd4X3R4cmluZ190eHEoY29uc3Qgc3RydWN0IHd4X3JpbmcgKnJpbmcpXFxuIFxcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXFx1MDAzZW5ldGRldiwgcmluZy1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbiB9XFxuIFxcbitzdGF0aWMgdTMyIHd4X2dldF90eF9wZW5kaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBoZWFkLCB0YWlsO1xcbitcXG4rXFx0aGVhZCA9IHJpbmctXFx1MDAzZW5leHRfdG9fY2xlYW47XFxuK1xcdHRhaWwgPSByaW5nLVxcdTAwM2VuZXh0X3RvX3VzZTtcXG4rXFxuK1xcdHJldHVybiAoKGhlYWQgXFx1MDAzYz0gdGFpbCkgPyB0YWlsIDogdGFpbCArIHJpbmctXFx1MDAzZWNvdW50KSAtIGhlYWQ7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXFxuK3tcXG4rXFx0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQ7XFxuK1xcdHUzMiB0eF9wZW5kaW5nID0gd3hfZ2V0X3R4X3BlbmRpbmcocmluZyk7XFxuK1xcdHUzMiB0eF9kb25lID0gcmluZy1cXHUwMDNlc3RhdHMucGFja2V0cztcXG4rXFxuK1xcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFxcdTAwMjZcXHUwMDI2IHR4X3BlbmRpbmcpXFxuK1xcdFxcdC8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovXFxuK1xcdFxcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdC8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovXFxuK1xcdHJpbmctXFx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTtcXG4rXFx0LyogcmVzZXQgdGhlIGNvdW50ZG93biAqL1xcbitcXHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKipcXG4gICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzXFxuICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uXFxuQEAgLTg2Niw2ICs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsXFxuIFxcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUod3hfdHhyaW5nX3R4cSh0eF9yaW5nKSxcXG4gXFx0XFx0XFx0XFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XFxuIFxcbitcXHRpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkge1xcbitcXHRcXHR3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMilcXG4gXFx0aWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgXFx1MDAyNlxcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFxcdTAwM2U9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHtcXG5AQCAtMzExMSw3ICszMTQ4LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4gXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IGZlYXR1cmVzO1xcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG9fcmVzZXQpXFxuLVxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYpO1xcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcXG4gXFx0ZWxzZSBpZiAoY2hhbmdlZCBcXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXFxuIFxcdFxcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XFxuIFxcbkBAIC0zMTYxLDcgKzMxOTgsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbiBcXG4gb3V0OlxcbiBcXHRpZiAobmVlZF9yZXNldCBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG9fcmVzZXQpXFxuLVxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYpO1xcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTMzNDUsNSArMzM4MiwyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcXG4gXFxuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpIHx8XFxuK1xcdCAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBjaV9jbGVhcl9tYXN0ZXIod3gtXFx1MDAzZXBkZXYpO1xcbitcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRuZXRpZl90eF9kaXNhYmxlKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcXG4rXFx0d3hfcHRwX3F1aWVzY2Uod3gpO1xcbitcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3NvZnRfcXVpZXNjZSk7XFxuK1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkNvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcXG5pbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcXG5AQCAtNDEsNSArNDEsNiBAQCB2b2lkIHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuICNlbmRpZiAvKiBfV1hfTElCX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuaW5kZXggNDRmM2U2NTA1MjQ2OGYuLjcwNjhjNjg0NWI2MjQ1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTtcXG4gXFx0aW50IHRzX2RvbmU7XFxuIFxcbitcXHRpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm4gSFo7XFxuK1xcbiBcXHR0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpO1xcbiBcXG4gXFx0d3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTtcXG5AQCAtODQyLDYgKzg0NSwyMSBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XFxuIFxcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdGlmICh3eC1cXHUwMDNlcHRwX3R4X3NrYikge1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cXHUwMDNlcHRwX3R4X3NrYik7XFxuK1xcdFxcdHd4LVxcdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcXG4rXFx0fVxcbitcXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcXG4rXFxuIC8qKlxcbiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcFxcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuaW5kZXggNTBkYjkwYTZlM2VlNjYuLmFkMmY4MjQ4NzVkNTFiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuQEAgLTEwLDYgKzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbmluZGV4IGM3YmVmZTRjZGZlOTA4Li5jMmVkYjc0ODgxZjJiNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuQEAgLTQ1MCw2ICs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXFxuIFxcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfUlAoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfV1AoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbitcXG4gLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXFxuQEAgLTEwMzksNiArMTA0NCw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7XFxuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XFxuIFxcdHU2NCByZXN0YXJ0X3F1ZXVlO1xcbiBcXHR1NjQgdHhfYnVzeTtcXG4rXFx0dTMyIHR4X2RvbmVfb2xkO1xcbiB9O1xcbiBcXG4gc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcXG5AQCAtMTA1NCw2ICsxMDYwLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XFxuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcXFxcbiBcXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVxcdTAwM2VuZXh0KVxcbiBcXG4rZW51bSB3eF9yaW5nX3N0YXRlIHtcXG4rXFx0V1hfVFhfREVURUNUX0hBTkcsXFxuK1xcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXFxuK1xcdFdYX1JJTkdfU1RBVEVfTkJJVFNcXG4rfTtcXG4rXFxuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XFxuIFxcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xcbkBAIC0xMDczLDYgKzEwODUsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7XFxuIFxcdFxcdHN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvO1xcbiBcXHRcXHRzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbztcXG4gXFx0fTtcXG4rXFx0REVDTEFSRV9CSVRNQVAoc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xcbiBcXHR1OCBfX2lvbWVtICp0YWlsO1xcbiBcXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXFxuIFxcdGRtYV9hZGRyX3QgaGVhZHdiX2RtYTtcXG5AQCAtMTIwOCw2ICsxMjIxLDggQEAgZW51bSB3eF9zdGF0ZSB7XFxuIFxcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxcbiBcXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXFxuIFxcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXFxuK1xcdFdYX1NUQVRFX0RJU0FCTEVELFxcbitcXHRXWF9TVEFURV9SRVNfRlJFRUQsXFxuIFxcdFdYX1NUQVRFX05CSVRTXFx0XFx0LyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMjc0LDYgKzEyODksOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcXG4gXFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxcbiBcXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXFxuIFxcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXFxuK1xcdFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCxcXG4rXFx0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXFxuIFxcdFdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMzk0LDcgKzE0MTEsOCBAQCBzdHJ1Y3Qgd3gge1xcbiBcXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcXG4gXFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcXG4tXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4rXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuK1xcdHZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuQEAgLTE0MjIsNiArMTQ0MCw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxO1xcbiBcXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXFxuIH07XFxuIFxcbkBAIC0xNTA0LDcgKzE1MjQsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxcbiBcXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9lcnIoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4tXFxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4rXFx0ZGV2X3dhcm4oXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9kYmcoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG5AQCAtNTksNyArNTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XFxuIFxcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xcbiBcXG4tXFx0d3hfY29uZmlndXJlKHd4KTtcXG4gXFx0bmdiZV91cCh3eCk7XFxuIFxcbiBjbGVhcl9yZXNldDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLmNkYTIyMzEwMWNlZDcyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9lcnIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbkBAIC00Niw2ICs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XFxuIFxcdHsgfVxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBoeWxpbmtfc3RvcCh3eC1cXHUwMDNlcGh5bGluayk7XFxuK1xcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXFx1MDAzZXBoeWxpbmspO1xcbitcXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xcbitcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbitcXHR3eF9mcmVlX2lycSh3eCk7XFxuK1xcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XFxuK1xcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICBuZ2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtMTMzLDYgKzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHR3eC1cXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcXG4gXFx0d3gtXFx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcXG4rXFx0d3gtXFx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IG5nYmVfZG93bl9zdXNwZW5kO1xcbiBcXHRzZXRfYml0KDAsIFxcdTAwMjZ3eC1cXHUwMDNlZndkX2JpdG1hc2spO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE0Nyw2ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spO1xcbiBcXG4gXFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcXG4rXFx0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcXG4rXFx0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xcbiBcXG4gXFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XFxuIH1cXG5AQCAtMzkyLDYgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcXG4gXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiBcXG5AQCAtNDA4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFxuIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcXG4ge1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMuYWRkcik7XFxuIFxcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXFx1MDAzZXN0YXRlKSlcXG5AQCAtNDIzLDEzICs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcXG4gXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4gfVxcbiBcXG4tdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuK3N0YXRpYyB2b2lkIG5nYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHR3eF9jb25maWd1cmVfdmVjdG9ycyh3eCk7XFxuIFxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXHQvKiBlbmFibGUgdHJhbnNtaXRzICovXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXFx1MDAzZW5ldGRldik7XFxuQEAgLTQ5MCw3ICs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXG4gXFx0d3hfcHRwX2luaXQod3gpO1xcbiBcXG4tXFx0bmdiZV91cCh3eCk7XFxuK1xcdG5nYmVfdXBfY29tcGxldGUod3gpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIGVycl9kaXNfcGh5OlxcbkBAIC01MDMsNiArNTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHd4X2NvbmZpZ3VyZSh3eCk7XFxuK1xcdG5nYmVfdXBfY29tcGxldGUod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2VcXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxcbkBAIC01MTgsNiArNTQ4LDkgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdHd4X3B0cF9zdG9wKHd4KTtcXG4gXFx0bmdiZV9kb3duKHd4KTtcXG4gXFx0d3hfZnJlZV9pcnEod3gpO1xcbkBAIC01MjUsNyArNTU4LDcgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcXG4gXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cXHUwMDNlcGh5bGluayk7XFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4tXFxuK291dDpcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTU1NSw3ICs1ODgsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpXFxuIFxcdCplbmFibGVfd2FrZSA9ICEhd3VmYztcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5AQCAtNTkwLDYgKzYyNCw4IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiBcXHQgKi9cXG4gXFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcXG4gXFx0XFx0bmdiZV9jbG9zZShkZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5nYmVfcmVzZXQod3gpO1xcbiBcXG4gXFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuIFxcbkBAIC02MDYsMTEgKzY0MiwzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdG5ldGlmX3RyYW5zX3VwZGF0ZSh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnd4LVxcdTAwM2VyZXNldF9sb2NrKTtcXG4rXFx0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRuZ2JlX2Rvd24od3gpO1xcbitcXHRuZ2JlX3VwKHd4KTtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbit9XFxuK1xcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4rXFx0XFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuZ2JlX3Jlc2V0KHd4KTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsXFxuIFxcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxcbitcXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXFxuIFxcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcXG5AQCAtNzAwLDYgKzc2MSw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0d3gtXFx1MDAzZWRyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTtcXG4gXFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNm5nYmVfbmV0ZGV2X29wcztcXG4rXFx0bmV0ZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcXG4gXFxuIFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcXG4gXFx0XFx0XFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxcbkBAIC03OTYsNiArODU4LDEwIEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXFx1MDAzZW1hYy5wZXJtX2FkZHIpO1xcbiBcXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcbitcXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XFxuK1xcbiBcXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XFxuIFxcbiBcXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xcbkBAIC04MTIsNiArODc4LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XFxuK1xcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC04MjMsNiArODkwLDggQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIGVycl9mcmVlX21hY190YWJsZTpcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZXJzc19rZXkpO1xcbiBcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG5AQCAtODU0LDYgKzkyMyw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXG4gXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBcXG4gXFx0cGh5bGlua19kZXN0cm95KHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxcbkBAIC04NjMsNyArOTM0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXFxuQEAgLTg5MCw2ICs5NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHR3eF9lcnIod3gsIFxcXCJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbiBcXHRkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbkBAIC05MTQsNiArOTg3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xcbiBcXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcXG4gXFx0LnNodXRkb3duID0gbmdiZV9zaHV0ZG93bixcXG4gXFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXFxuK1xcdC5lcnJfaGFuZGxlciA9IFxcdTAwMjZ3eF9lcnJfaGFuZGxlcixcXG4gfTtcXG4gXFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXFxuaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbkBAIC0xMjUsNSArMTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuIFxcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuaW5kZXggMjBjNWEyOTVjNmMyOTYuLmQ4NWVlODMxOTJlNGZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXJyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9tYnguaFxcXCJcXG5AQCAtOTMsNiArOTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTEwNiw2ICsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC0xMjMsNiArMTMyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcXG4gXFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XFxuIFxcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XFxuK1xcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XFxuK1xcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcXG4gXFxuIFxcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xcbiB9XFxuQEAgLTE0NCw2ICsxNTUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXG4gXFx0c3dpdGNoICh3eC1cXHUwMDNlbWFjLnR5cGUpIHtcXG5AQCAtMTg3LDYgKzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuIFxcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xcbiBcXHRpZiAoZXJyICE9IDApXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkhhcmR3YXJlIEVycm9yOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG5AQCAtMjI0LDYgKzIzOSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHd4X2lycV9kaXNhYmxlKHd4KTtcXG4gXFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XFxuIFxcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4gXFxuQEAgLTI5Miw2ICszMDgsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGh5bGlua19zdG9wKHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcXG4rXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4rXFx0d3hfZnJlZV9pcnEod3gpO1xcbitcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4rXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbitcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXFxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXFxuQEAgLTQwOCw2ICs0MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHd4LVxcdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xcbiBcXHR3eC1cXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcXG4gXFx0c2V0X2JpdCgwLCBcXHUwMDI2d3gtXFx1MDAzZWZ3ZF9iaXRtYXNrKTtcXG4gXFxuIFxcdHN3aXRjaCAod3gtXFx1MDAzZW1hYy50eXBlKSB7XFxuQEAgLTUxOCwxMiArNTQ5LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0d3hfcHRwX3N0b3Aod3gpO1xcbiBcXHR0eGdiZV9kb3duKHd4KTtcXG4gXFx0d3hfZnJlZV9pcnEod3gpO1xcbiBcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4gXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbiBcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rb3V0OlxcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTQ0LDcgKzU3OSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC02MDYsMTEgKzY0MiwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbiB9XFxuIFxcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4gXFx0XFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0dHhnYmVfcmVzZXQod3gpO1xcbkBAIC02NTQsNiArNjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxcbiBcXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXFxuIFxcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcXG4rXFx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxcbiBcXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXFxuQEAgLTc0NSw2ICs3ODIsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcXG4gXFx0dHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XFxuIFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xcbitcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xcbiBcXHRuZXRkZXYtXFx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBcXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XFxuIFxcbiBcXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cXG5AQCAtODE0LDYgKzg1MiwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFxuK1xcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG4rXFxuIFxcdHR4Z2JlX2luaXRfc2VydmljZSh3eCk7XFxuIFxcbiBcXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xcbkBAIC04ODksNiArOTMxLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0XFx0Z290byBlcnJfcmVtb3ZlX3BoeTtcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XFxuK1xcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXG4gXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcbkBAIC05MTYsNiArOTU5LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBlcnJfZnJlZV9tYWNfdGFibGU6XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2Vyc3Nfa2V5KTtcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuQEAgLTk0OCw2ICs5OTMsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIFxcbiBcXHR0eGdiZV9yZW1vdmVfcGh5KHR4Z2JlKTtcXG4gXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG5AQCAtOTU5LDcgKzEwMDYsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XFxuQEAgLTk2OSw2ICsxMDE3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcXG4gXFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxcbiBcXHQuc2h1dGRvd24gPSB0eGdiZV9zaHV0ZG93bixcXG4gXFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXFxuK1xcdC5lcnJfaGFuZGxlciA9IFxcdTAwMjZ3eF9lcnJfaGFuZGxlcixcXG4gfTtcXG4gXFxuIG1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG5pbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcXG4gdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4gXFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxcXFxuIFxcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNDowNjo1My40MzgwNDEyMzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNjc5MDY5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSkgdG8gYWRkIFBDSSBlcnJvciByZWNvdmVyeSwgVFggdGltZW91dCBoYW5kbGluZywgYW5kIFRYIGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgZHJpdmVycyBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgUENJIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgV2FuZ3h1biBkZXZpY2VzIGluIHRoZSBrZXJuZWwsIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBub3Qgc3VjY2VlZCBhbmQgdGhlIG5ldGRldnMgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjE2MGE0MTRkMjQ2YWMzZmRmMzZkMjZmN2YxZGQ3NTZhZTg3NDA1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDA0OjA2OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbmluZGV4IGE3MWIwYWQ3N2RlM2Y3Li5jODcyNGJiMTI5YWEwNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbkBAIC00LDUgKzQsNSBAQFxuIFxuIG9iai0kKENPTkZJR19MSUJXWCkgKz0gbGlid3gub1xuIFxuLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3Yub1xuK2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xuIGxpYnd4LW9ianMgKz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmMzNGM5NDA2YTVhZWRmXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMCwwICsxLDMyMSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cbisvKiBDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDI2IEludGVsIENvcnBvcmF0aW9uLiAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hZXIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwid3hfdHlwZS5oXCJcbisjaW5jbHVkZSBcInd4X2xpYi5oXCJcbisjaW5jbHVkZSBcInd4X2Vyci5oXCJcbitcbisvKipcbisgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlXG4rICpcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXG4rICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuXG4rICovXG4rc3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4rXHRcdFx0XHRcdCAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSlcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcbitcdGlmICghd3gpXG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1xuK1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuK1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdGlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpXG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XG4rXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xuK1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHQvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi9cbitcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUO1xuK31cbitcbisvKipcbisgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbisgKlxuKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHBjaV9lcnNfcmVzdWx0X3QgcmVzdWx0O1xuK1xuK1x0aWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkge1xuK1x0XHR3eF9lcnIod3gsIFwiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxcblwiKTtcbitcdFx0cmVzdWx0ID0gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXG4rXHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuK1x0XHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKTtcbitcdFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuK1x0XHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcbitcdFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XG4rXG4rXHRcdHJ0bmxfbG9jaygpO1xuK1x0XHRpZiAobmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb3duX3N1c3BlbmQpXG4rXHRcdFx0d3gtXHUwMDNlZG93bl9zdXNwZW5kKHd4KTtcbitcdFx0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuK1x0XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgZmFsc2UpO1xuK1x0XHRydG5sX3VubG9jaygpO1xuK1x0XHRyZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7XG4rXHR9XG4rXG4rXHRwY2lfYWVyX2NsZWFyX25vbmZhdGFsX3N0YXR1cyhwZGV2KTtcbitcbitcdHJldHVybiByZXN1bHQ7XG4rfVxuK1xuKy8qKlxuKyAqIHd4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuKyAqXG4rICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXRcbisgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXG4rICovXG4rc3RhdGljIHZvaWQgd3hfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuK1x0aW50IGVycjtcbitcbitcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbitcdHJ0bmxfbG9jaygpO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuK1x0XHRlcnIgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0d3hfZXJyKHd4LCBcIkZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxcblwiKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0fVxuK1x0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xuK291dDpcbitcdHJ0bmxfdW5sb2NrKCk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7XG4rXHQuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCxcbitcdC5zbG90X3Jlc2V0ID0gd3hfaW9fc2xvdF9yZXNldCxcbitcdC5yZXN1bWUgPSB3eF9pb19yZXN1bWUsXG4rfTtcbitFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcbitcbitzdGF0aWMgdm9pZCB3eF9wZl9yZXNldF9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbitcdHd4X3dhcm4od3gsIFwiUmVzZXQgYWRhcHRlci5cXG5cIik7XG4rXHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4rXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0d3hfcGZfcmVzZXRfc3VidGFzayh3eCk7XG4rXG4rb3V0OlxuK1x0cnRubF91bmxvY2soKTtcbit9XG4rXG4rdm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cXVldWVfd29yayh3eC1cdTAwM2VyZXNldF93cSwgXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spO1xuK1xuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0d3gtXHUwMDNlcmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoXCIlc19yZXNldF93cV8leFwiLCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSxcbitcdFx0XHRcdCAgICAgICAxLCB3eC1cdTAwM2Vkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC1cdTAwM2VwZGV2KSk7XG4rXHRpZiAoIXd4LVx1MDAzZXJlc2V0X3dxKSB7XG4rXHRcdHd4X2Vycih3eCwgXCJGYWlsZWQgdG8gY3JlYXRlIHd4X3Jlc2V0X3dxIHdvcmtxdWV1ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRJTklUX1dPUksoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9pbml0X2Vycl90YXNrKTtcbitcbitzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xuK1x0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LVx1MDAzZXR4X3JpbmdbaV07XG4rXG4rXHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcdTAwMjZ3eC1cdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xuK1x0dTMyIHFfcGVyX3Bvb2wgPSBfX0FMSUdOX01BU0soMSwgfnZtZHEtXHUwMDNlbWFzayk7XG4rXHR1MzIgaSwgajtcbitcbitcdGlmICghd3gtXHUwMDNlbnVtX3ZmcylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3ZmczsgaSsrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHFfcGVyX3Bvb2w7IGorKykge1xuK1x0XHRcdHUzMiBoLCB0O1xuK1xuK1x0XHRcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4rXHRcdFx0dCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcbitcbitcdFx0XHRpZiAoaCAhPSB0KVxuK1x0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfd2F0Y2hkb2dfZmx1c2hfdHgoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSlcbitcdFx0cmV0dXJuO1xuK1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcbitcdFx0LyogV2UndmUgbG9zdCBsaW5rLCBzbyB0aGUgY29udHJvbGxlciBzdG9wcyBETUEsXG4rXHRcdCAqIGJ1dCB3ZSd2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCdzIG5ldmVyIGdvaW5nXG4rXHRcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxuK1x0XHQgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLlxuK1x0XHQgKi9cbitcdFx0d3hfd2Fybih3eCwgXCJpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcXG5cIik7XG4rXHRcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aW50IGk7XG4rXG4rXHQvKiBJZiB3ZSdyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXG4rXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovXG4rXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbitcdFx0XHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbitcdH1cbit9XG4rXG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHd4KTtcbitcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spO1xuK1xuK3N0YXRpYyBib29sIHd4X2NoZWNrX3BjaWVfZXJyb3Ioc3RydWN0IHd4ICp3eClcbit7XG4rXHR1MTYgdmlkLCBwY2lfY21kO1xuK1xuK1x0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXHUwMDNlcGRldiwgUENJX1ZFTkRPUl9JRCwgXHUwMDI2dmlkKTtcbitcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcdTAwMjZwY2lfY21kKTtcbitcbitcdC8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4ndCBhY2Nlc3MgKi9cbitcdGlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgXHUwMDI2IFBDSV9DT01NQU5EX01FTU9SWSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3JlY292ZXJ5KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0LypcbitcdCAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llXG4rXHQgKiByZWNvdmVyeSBtZWNoYW5pc20uIEhvd2V2ZXIsIHRoaXMgcmVjb3ZlcnkgZmxvdyByZWxpZXMgb24gdGhlIEFFUlxuK1x0ICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZFxuK1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuXG4rXHQgKi9cbitcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X2Vycih3eCwgXCJQQ0llIGVycm9yIGRldGVjdGVkIGR1cmluZyB0eCB0aW1lb3V0XFxuXCIpO1xuK1x0cXVldWVfd29yayh3eC1cdTAwM2VyZXNldF93cSwgXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0d3hfd2Fybih3eCwgXCJpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XFxuXCIpO1xuK1x0d3hfc2VydmljZV9ldmVudF9zY2hlZHVsZSh3eCk7XG4rfVxuK1xuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgX19hbHdheXNfdW51c2VkIHR4cXVldWUpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXG4rXHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXG4rXHRcdHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpO1xuK1x0ZWxzZVxuK1x0XHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTtcbitcbit2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dClcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuK1xuK1x0d3hfd2Fybih3eCxcbitcdFx0XCJEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcXG5cIixcbitcdFx0dHhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCxcbitcdFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4rXHRcdHJkMzIod3gsIFdYX1BYX1RSX1dQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuK1x0XHR0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlLCBuZXh0LFxuK1x0XHR0eF9yaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpO1xuK1xuK1x0bmV0aWZfc3RvcF9zdWJxdWV1ZSh0eF9yaW5nLVx1MDAzZW5ldGRldiwgdHhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4rXG4rXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NDlcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcbkBAIC0wLDAgKzEsMTggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxuKyAqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuXG4rICovXG4rXG4rI2lmbmRlZiBfV1hfRVJSX0hfXG4rI2RlZmluZSBfV1hfRVJSX0hfXG4rXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXI7XG4rXG4rdm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xuK3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KTtcbitcbisjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbmluZGV4IDVkZjk3MWFjYTllMzVmLi5kMTM1NmZmNWQ2OWI1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5NSw3ICszOTUsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpXG4gXG4gXHQvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi9cbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiB9XG4gXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMjYwZTE0ZDVkNTQxMjEuLjEyMmM0OTUyZDIwM2YwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbkBAIC0xOTMyLDYgKzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxuIFx0ZWxzZVxuIFx0XHRyaW5nLVx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XG4gXG4rXHRiaXRtYXBfemVybyhyaW5nLVx1MDAzZXN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdC8qIHJlaW5pdGlhbGl6ZSB0eF9idWZmZXJfaW5mbyAqL1xuIFx0bWVtc2V0KHJpbmctXHUwMDNldHhfYnVmZmVyX2luZm8sIDAsXG4gXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF90eF9idWZmZXIpICogcmluZy1cdTAwM2Vjb3VudCk7XG5AQCAtMjg1MSwxNiArMjg1MiwyNiBAQCBFWFBPUlRfU1lNQk9MKHd4X2ZjX2VuYWJsZSk7XG4gc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0c3RydWN0IHd4X2h3X3N0YXRzICpod3N0YXRzID0gXHUwMDI2d3gtXHUwMDNlc3RhdHM7XG4rXHR1NjQgZGF0YTtcbitcdGludCBpO1xuIFxuIFx0aWYgKHd4LVx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfZnVsbCBcdTAwMjZcdTAwMjZcbiBcdCAgICB3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAod3gtXHUwMDNlbWFjLnR5cGUgXHUwMDNlPSB3eF9tYWNfYW1sKVxuLVx0XHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICs9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbi1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNnd4LVx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xuK1x0XHRkYXRhID0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuK1x0XHRcdFx0IFx1MDAyNnd4LVx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xuIFx0ZWxzZVxuLVx0XHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICs9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XG4rXHRcdGRhdGEgPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuK1x0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSBkYXRhO1xuK1xuK1x0LyogcmVmaWxsIGNyZWRpdHMgKG5vIHR4IGhhbmcpIGlmIHdlIHJlY2VpdmVkIHhvZmYgKi9cbitcdGlmICghZGF0YSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuK1x0XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5pbmRleCBkMDQyNTY3YjgxMjg0Yi4uZDMzNDBiMmIwNjgyNDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuIFxuICNpbmNsdWRlIFwid3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcInd4X2xpYi5oXCJcbisjaW5jbHVkZSBcInd4X2Vyci5oXCJcbiAjaW5jbHVkZSBcInd4X3B0cC5oXCJcbiAjaW5jbHVkZSBcInd4X2h3LmhcIlxuICNpbmNsdWRlIFwid3hfdmZfbGliLmhcIlxuQEAgLTc0Miw2ICs3NDMsMzcgQEAgc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnd4X3R4cmluZ190eHEoY29uc3Qgc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4gXHRyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShyaW5nLVx1MDAzZW5ldGRldiwgcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4gfVxuIFxuK3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4re1xuK1x0dW5zaWduZWQgaW50IGhlYWQsIHRhaWw7XG4rXG4rXHRoZWFkID0gcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuO1xuK1x0dGFpbCA9IHJpbmctXHUwMDNlbmV4dF90b191c2U7XG4rXG4rXHRyZXR1cm4gKChoZWFkIFx1MDAzYz0gdGFpbCkgPyB0YWlsIDogdGFpbCArIHJpbmctXHUwMDNlY291bnQpIC0gaGVhZDtcbit9XG4rXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbit7XG4rXHR1MzIgdHhfZG9uZV9vbGQgPSByaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkO1xuK1x0dTMyIHR4X3BlbmRpbmcgPSB3eF9nZXRfdHhfcGVuZGluZyhyaW5nKTtcbitcdHUzMiB0eF9kb25lID0gcmluZy1cdTAwM2VzdGF0cy5wYWNrZXRzO1xuK1xuK1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHJpbmctXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAodHhfZG9uZV9vbGQgPT0gdHhfZG9uZSBcdTAwMjZcdTAwMjYgdHhfcGVuZGluZylcbitcdFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cbitcdFx0cmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4rXG4rXHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xuK1x0cmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZCA9IHR4X2RvbmU7XG4rXHQvKiByZXNldCB0aGUgY291bnRkb3duICovXG4rXHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qKlxuICAqIHd4X2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlc1xuICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uXG5AQCAtODY2LDYgKzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvcixcbiBcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUod3hfdHhyaW5nX3R4cSh0eF9yaW5nKSxcbiBcdFx0XHRcdCAgdG90YWxfcGFja2V0cywgdG90YWxfYnl0ZXMpO1xuIFxuK1x0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcbitcdFx0d3hfaGFuZGxlX3R4X2hhbmcodHhfcmluZywgaSk7XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMilcbiBcdGlmICh1bmxpa2VseSh0b3RhbF9wYWNrZXRzIFx1MDAyNlx1MDAyNiBuZXRpZl9jYXJyaWVyX29rKHR4X3JpbmctXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAod3hfZGVzY191bnVzZWQodHhfcmluZykgXHUwMDNlPSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7XG5AQCAtMzExMSw3ICszMTQ4LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IGZlYXR1cmVzO1xuIFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcdGVsc2UgaWYgKGNoYW5nZWQgXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXG4gXHRcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XG4gXG5AQCAtMzE2MSw3ICszMTk4LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiBcbiBvdXQ6XG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzM0NSw1ICszMzgyLDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcbiBcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4rXHQgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHBjaV9jbGVhcl9tYXN0ZXIod3gtXHUwMDNlcGRldik7XG4rXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbitcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVx1MDAzZW5ldGRldik7XG4rXHRuZXRpZl90eF9kaXNhYmxlKHd4LVx1MDAzZW5ldGRldik7XG4rXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbitcdHd4X3B0cF9xdWllc2NlKHd4KTtcbitcbitcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X3NvZnRfcXVpZXNjZSk7XG4rXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiQ29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbmluZGV4IGFlZDZlYThjZjBkNjRhLi4xMWJkNzk5ODVlMTcxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbkBAIC00MSw1ICs0MSw2IEBAIHZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gXG4gI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDRmM2U2NTA1MjQ2OGYuLjcwNjhjNjg0NWI2MjQ1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XG4gXHRpbnQgdHNfZG9uZTtcbiBcbitcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIEhaO1xuK1xuIFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcbiBcbiBcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XG5AQCAtODQyLDYgKzg0NSwyMSBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xuIFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiKSB7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuK1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdH1cbitcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpO1xuK1xuIC8qKlxuICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wXG4gICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5pbmRleCA1MGRiOTBhNmUzZWU2Ni4uYWQyZjgyNDg3NWQ1MWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5AQCAtMTAsNiArMTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbmluZGV4IGM3YmVmZTRjZGZlOTA4Li5jMmVkYjc0ODgxZjJiNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuQEAgLTQ1MCw2ICs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDhcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19IRUFEX1dCICAgICAgICAgQklUKDI3KVxuIFxuKyNkZWZpbmUgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuK1x0XHQoV1hfUFhfVFJfUlAoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxuKyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuK1x0XHQoV1hfUFhfVFJfV1AoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxuK1xuIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpXG4gI2RlZmluZSBXWF9QWF9SUl9CQUgoX2kpICAgICAgICAgICAgICgweDAxMDA0ICsgKChfaSkgKiAweDQwKSlcbkBAIC0xMDM5LDYgKzEwNDQsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMge1xuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XG4gXHR1NjQgcmVzdGFydF9xdWV1ZTtcbiBcdHU2NCB0eF9idXN5O1xuK1x0dTMyIHR4X2RvbmVfb2xkO1xuIH07XG4gXG4gc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcbkBAIC0xMDU0LDYgKzEwNjAsMTIgQEAgc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcbiAjZGVmaW5lIHd4X2Zvcl9lYWNoX3JpbmcocG9zbSwgaGVhZG0pIFxcXG4gXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVx1MDAzZW5leHQpXG4gXG4rZW51bSB3eF9yaW5nX3N0YXRlIHtcbitcdFdYX1RYX0RFVEVDVF9IQU5HLFxuK1x0V1hfSEFOR19DSEVDS19BUk1FRCxcbitcdFdYX1JJTkdfU1RBVEVfTkJJVFNcbit9O1xuK1xuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XG4gXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZzsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbGlua2VkIGxpc3Qgb2YgcmluZ3MgKi9cbiBcdHVuc2lnbmVkIGludCB0b3RhbF9ieXRlczsgICAgICAgLyogdG90YWwgYnl0ZXMgcHJvY2Vzc2VkIHRoaXMgaW50ICovXG5AQCAtMTA3Myw2ICsxMDg1LDcgQEAgc3RydWN0IHd4X3Jpbmcge1xuIFx0XHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbztcbiBcdFx0c3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87XG4gXHR9O1xuK1x0REVDTEFSRV9CSVRNQVAoc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xuIFx0dTggX19pb21lbSAqdGFpbDtcbiBcdGRtYV9hZGRyX3QgZG1hOyAgICAgICAgICAgICAgICAgLyogcGh5cy4gYWRkcmVzcyBvZiBkZXNjcmlwdG9yIHJpbmcgKi9cbiBcdGRtYV9hZGRyX3QgaGVhZHdiX2RtYTtcbkBAIC0xMjA4LDYgKzEyMjEsOCBAQCBlbnVtIHd4X3N0YXRlIHtcbiBcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxuIFx0V1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLFxuIFx0V1hfU1RBVEVfU0VSVklDRV9TQ0hFRCxcbitcdFdYX1NUQVRFX0RJU0FCTEVELFxuK1x0V1hfU1RBVEVfUkVTX0ZSRUVELFxuIFx0V1hfU1RBVEVfTkJJVFNcdFx0LyogbXVzdCBiZSBsYXN0ICovXG4gfTtcbiBcbkBAIC0xMjc0LDYgKzEyODksOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcbiBcdFdYX0ZMQUdfTkVFRF9ET19SRVNFVCxcbiBcdFdYX0ZMQUdfUlhfTUVSR0VfRU5BQkxFRCxcbiBcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXG4rXHRXWF9GTEFHX05FRURfUEZfUkVTRVQsXG4rXHRXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSxcbiBcdFdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovXG4gfTtcbiBcbkBAIC0xMzk0LDcgKzE0MTEsOCBAQCBzdHJ1Y3Qgd3gge1xuIFx0dm9pZCAoKmF0cikoc3RydWN0IHd4X3JpbmcgKnJpbmcsIHN0cnVjdCB3eF90eF9idWZmZXIgKmZpcnN0LCB1OCBwdHlwZSk7XG4gXHR2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpO1xuIFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcbi1cdHZvaWQgKCpkb19yZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4rXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbitcdHZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpO1xuIFx0aW50ICgqcHRwX3NldHVwX3NkcCkoc3RydWN0IHd4ICp3eCk7XG4gXHR2b2lkICgqc2V0X251bV9xdWV1ZXMpKHN0cnVjdCB3eCAqd3gpO1xuIFxuQEAgLTE0MjIsNiArMTQ0MCw4IEBAIHN0cnVjdCB3eCB7XG4gXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHNlcnZpY2VfdGFzaztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrO1xuK1x0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxO1xuIFx0c3RydWN0IG11dGV4IHJlc2V0X2xvY2s7IC8qIG11dGV4IGZvciByZXNldCAqL1xuIH07XG4gXG5AQCAtMTUwNCw3ICsxNTI0LDggQEAgcmQzMl93cmFwKHN0cnVjdCB3eCAqd3gsIHUzMiByZWcsIHUzMiAqbGFzdClcbiBcbiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZXJyKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4tXG4rI2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXFxcbitcdGRldl93YXJuKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4gI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcXFxuIFx0ZGV2X2RiZyhcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuaW5kZXggYjJlMTkxOTgyODAzMjYuLjE5NjBmNzE1NDE1MWRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbkBAIC01OSw3ICs1OSw2IEBAIHN0YXRpYyBpbnQgbmdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XG4gXHRrdmZyZWUodGVtcF9yaW5nKTtcbiBcbi1cdHd4X2NvbmZpZ3VyZSh3eCk7XG4gXHRuZ2JlX3VwKHd4KTtcbiBcbiBjbGVhcl9yZXNldDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbmluZGV4IGExNjIyMTk5NTkwOWY5Li5jZGEyMjMxMDFjZWQ3MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbGliLmhcIlxuKyNpbmNsdWRlIFwiLi4vbGlid3gvd3hfZXJyLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfcHRwLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfc3Jpb3YuaFwiXG5AQCAtNDYsNiArNDcsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nYmVfcGNpX3RibFtdID0ge1xuIFx0eyB9XG4gfTtcbiBcbitzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4rXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuK1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbitcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4rXHR3eF9mcmVlX2lycSh3eCk7XG4rXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuK1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuK31cbitcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiArMTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZW1ieC5zaXplID0gV1hfVlhNQUlMQk9YX1NJWkU7XG4gXHR3eC1cdTAwM2VzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7XG4rXHR3eC1cdTAwM2Vkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7XG4rXHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgKzE2NCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spO1xuIFxuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbitcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4rXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFxuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtNDA4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgKzQ0NiwxNCBAQCB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbiB9XG4gXG4tdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4rc3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcbiBcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyArNTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcbiBcdHd4X3B0cF9pbml0KHd4KTtcbiBcbi1cdG5nYmVfdXAod3gpO1xuK1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBlcnJfZGlzX3BoeTpcbkBAIC01MDMsNiArNTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbit2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbit7XG4rXHR3eF9jb25maWd1cmUod3gpO1xuK1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4rfVxuK1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCw2ICs1NDgsOSBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHRuZ2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuQEAgLTUyNSw3ICs1NTgsNyBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4tXG4rb3V0OlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTU1NSw3ICs1ODgsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpXG4gXHQqZW5hYmxlX3dha2UgPSAhIXd1ZmM7XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICs2MjQsOCBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdCAqL1xuIFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbiBcdFx0bmdiZV9jbG9zZShkZXYpO1xuK1x0ZWxzZVxuK1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSArNjQyLDM2IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdG5ldGlmX3RyYW5zX3VwZGF0ZSh3eC1cdTAwM2VuZXRkZXYpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbitcdHNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRuZ2JlX2Rvd24od3gpO1xuK1x0bmdiZV91cCh3eCk7XG4rXG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4rfVxuK1xuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbitcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbitcdGVsc2VcbitcdFx0bmdiZV9yZXNldCh3eCk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sXG4gXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4rXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03MDAsNiArNzYxLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuK1x0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuIFxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8XG4gXHRcdFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxuQEAgLTc5Niw2ICs4NTgsMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbitcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4rXG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICs4NzgsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbitcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtODIzLDYgKzg5MCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTg1NCw2ICs5MjMsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0cGh5bGlua19kZXN0cm95KHd4LVx1MDAzZXBoeWxpbmspO1xuIFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxuQEAgLTg2Myw3ICs5MzQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXG5AQCAtODkwLDYgKzk2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXFxuXCIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgKzk4Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZ2JlX2RyaXZlciA9IHtcbiBcdC5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLFxuIFx0LnNodXRkb3duID0gbmdiZV9zaHV0ZG93bixcbiBcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxuK1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5pbmRleCA3MDc3YTBkYTRjOTg2YS4uYzkyMzNkYzdhZTUwNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuaW5kZXggMjBjNWEyOTVjNmMyOTYuLmQ4NWVlODMxOTJlNGZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuIFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2xpYi5oXCJcbisjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2Vyci5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3B0cC5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuQEAgLTkzLDYgKzk0LDEwIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTEwNiw2ICsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMjMsNiArMTMyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7XG4gXHR0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHd4KTtcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4rXHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xuK1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTE0NCw2ICsxNTUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTE4Nyw2ICsxOTksOSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xuIFx0aW50IGVycjtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRlcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7XG4gXHRpZiAoZXJyICE9IDApXG4gXHRcdHd4X2Vycih3eCwgXCJIYXJkd2FyZSBFcnJvcjogJWRcXG5cIiwgZXJyKTtcbkBAIC0yMjQsNiArMjM5LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdHd4X2lycV9kaXNhYmxlKHd4KTtcbiBcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuIFxuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtMjkyLDYgKzMwOCwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4gXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4rXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xuK1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbitcdHd4X2ZyZWVfaXJxKHd4KTtcbitcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4rXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4rXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbit9XG4rXG4gLyoqXG4gICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuQEAgLTQwOCw2ICs0MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XG4gXHR3eC1cdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xuK1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kO1xuIFx0c2V0X2JpdCgwLCBcdTAwMjZ3eC1cdTAwM2Vmd2RfYml0bWFzayk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtNTE4LDEyICs1NDksMTYgQEAgc3RhdGljIGludCB0eGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdHd4X3B0cF9zdG9wKHd4KTtcbiBcdHR4Z2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0dHhnYmVfZnJlZV9taXNjX2lycSh3eC1cdTAwM2Vwcml2KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuK291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU0NCw3ICs1NzksOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC02MDYsMTEgKzY0MiwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4gfVxuIFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiBcdFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4gXHRlbHNlXG4gXHRcdHR4Z2JlX3Jlc2V0KHd4KTtcbkBAIC02NTQsNiArNjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSB0eGdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbitcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTc0NSw2ICs3ODIsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcbiBcdHR4Z2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xuK1x0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuIFx0bmV0ZGV2LVx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBcdTAwMjZ0eGdiZV91ZHBfdHVubmVscztcbiBcbiBcdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xuQEAgLTgxNCw2ICs4NTIsMTAgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXG4rXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlO1xuK1xuIFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODg5LDYgKzkzMSw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdGdvdG8gZXJyX3JlbW92ZV9waHk7XG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuK1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcbkBAIC05MTYsNiArOTU5LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTk0OCw2ICs5OTMsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbkBAIC05NTksNyArMTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG5AQCAtOTY5LDYgKzEwMTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xuIFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxuIFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbitcdC5lcnJfaGFuZGxlciA9IFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxuIH07XG4gXG4gbW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG5pbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXG4gXHR1bnNpZ25lZCBsb25nIG5hbWVbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF0gPSB7IDAsIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA0OjA2OjUzLjQzODA0Mjk3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMjA3ODQ1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXYW5neHVuIEV0aGVybmV0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBXYW5neHVuIGV0aGVybmV0IGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgYG5nYmVgIGFuZCBgdHhnYmVgIGRyaXZlcnMgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvYC4gVGhpcyBpcyBhZGRpbmcgc29tZSBjcnVjaWFsIGVycm9yIGhhbmRsaW5nIGFuZCB0aW1lb3V0IHJlY292ZXJ5IGZ1bmN0aW9uYWxpdHkg4oCTIGJhc2ljYWxseSwgcm9idXN0aWZ5aW5nIHRoZSBkcml2ZXJzLiBXZSdyZSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYHd4X2Vyci5jYCwgYHd4X2Vyci5oYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBjb3JlIGZpbGVzOiBgd3hfaHcuY2AsIGB3eF9saWIuY2AsIGB3eF9wdHAuY2AsIGB3eF90eXBlLmhgLCBgbmdiZV9tYWluLmNgLCBhbmQgYHR4Z2JlX21haW4uY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhZGRpbmcgUENJIGVycm9yIHJlY292ZXJ5LCBoYW5kbGluZyBUWCB0aW1lb3V0cywgYW5kIGltcGxlbWVudGluZyBUWCBoYW5nIGRldGVjdGlvbi5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIGFib3V0IHJlYWNoYWJpbGl0eSwgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGVzZSBhcmUgUENJIGRyaXZlcnMsIGFuZCBXYW5neHVuIEdpZ2FiaXQgUENJIEV4cHJlc3Mgc3BlY2lmaWNhbGx5LiBUeXBpY2FsbHksIHdpdGhvdXQgYSBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRvciwgb3IgYSB3YXkgdG8gaW5qZWN0IGVycm9ycyBvciB0aW1lb3V0cyB0aHJvdWdoIGdlbmVyaWMgbmV0ZGV2IGludGVyZmFjZXMsIHRoZXNlIHBhdGhzIGFyZW4ndCBkaXJlY3RseSByZWFjaGFibGUuXG5cbkJ1dCB3YWl0LCBzeXprYWxsZXIhIEl0IGNhbiBmdXp6IG5ldGRldnMsIGNyZWF0aW5nIG9yIHVzaW5nIGV4aXN0aW5nIG9uZXMuIEJ1dCwgZm9yIFBDSSBkcml2ZXJzLCB3ZSdyZSBzdGlsbCBzdHVjayB1bmxlc3MgdGhlcmUncyBhIHZpcnR1YWwgZGV2aWNlIHJlcHJlc2VudGluZyB0aGUgaGFyZHdhcmUuIENhbiBzeXprYWxsZXIgcmVnaXN0ZXIgYSBXYW5neHVuIG5ldGRldiB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW50P1xuXG5ObywgdGhhdCdzIG5vdCBnb2luZyB0byB3b3JrLiBgbmdiZV9wcm9iZWAgYW5kIGB0eGdiZV9wcm9iZWAgYm90aCByZWx5IG9uIHRoZSBQQ0kgZGV2aWNlIGJlaW5nIHByZXNlbnQuIFRoZXkncmUgZ29pbmcgdG8gZmFpbCBpZiB0aGUgaGFyZHdhcmUgaXMgbm90IHRoZXJlLlxuXG5BbHJpZ2h0LCBsZXQncyBleHBsb3JlIGlmIHRoZXJlJ3MgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgV2FuZ3h1biBkZXZpY2VzLiBJJ2xsIHNlYXJjaCB0aHJvdWdoIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9gIGRpcmVjdG9yeSBmb3IgYW55IHJlZmVyZW5jZXMgdG8gYG5nYmVgIG9yIGB0eGdiZWAgd2l0aGluIHRoZSBjb2RlYmFzZSwgaG9waW5nIGZvciBhIGhpbnQgb2YgdmlydHVhbGl6YXRpb24gb3IgZW11bGF0aW9uIHN1cHBvcnQuIFRoYXQncyB0aGUga2V5IHRvIGVmZmVjdGl2ZSB0ZXN0aW5nIG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDQ6MDc6MDAuNTU4ODMwMjg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTc4NzI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZ2JlX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz02Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNjg4LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo2ODk6ICogbmdiZV9wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTY5MC0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTQtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Njk1OiAqIG5nYmVfcHJvYmUgaW5pdGlhbGl6ZXMgYW4gd3ggaWRlbnRpZmllZCBieSBhIHBjaV9kZXYgc3RydWN0dXJlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTYtICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgd3ggcHJpdmF0ZSBzdHJ1Y3R1cmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNjk4LSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Njk5OnN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNzAwLVxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTk4MT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtOTgzLVxcdC5pZF90YWJsZSA9IG5nYmVfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTg0OlxcdC5wcm9iZSAgICA9IG5nYmVfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk4NS1cXHQucmVtb3ZlICAgPSBuZ2JlX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDQ6MDc6MDAuNzEwNjI0NDk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUzNDAyNDQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXYW5neHVuIFBDSSBEcml2ZXIncyBWaXJ0dWFsaXphdGlvbiBMaW1pdGF0aW9ucyoqXG5cbk9rYXksIHNvIHRoaXMgV2FuZ3h1biBkcml2ZXIgaXMgKmRlZmluaXRlbHkqIGEgUENJLXNwZWNpZmljIGNyZWF0dXJlLiBJdCdzIGJ1aWx0IHRvIGludGVyZmFjZSB3aXRoIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggbWVhbnMgdGhlIHdob2xlIHByb2JlIGZ1bmN0aW9uLCB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQsIHdvbid0IGV2ZW4gKmZpcmUqIHVubGVzcyB0aGF0IGhhcmR3YXJlIGlzIHByZXNlbnQuIFRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyBcInVucmVhY2hhYmxlIGNvZGVcIiBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIEdDRSwgUUVNVSwgdGhlIHdob2xlIGxvdCDigJMgdW5sZXNzIHlvdSdyZSBkb2luZyBmdWxsIFBDSSBwYXNzdGhyb3VnaCBvZiB0aGUgV2FuZ3h1biBkZXZpY2UuIFdoaWNoLCBsZXQncyBiZSBob25lc3QsIGlzIGEgcGFpbi5cblxuV2FpdCBhIHNlY29uZCwgdGhvdWdoLi4uIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXJlIGFyZSBlbXVsYXRvcnMgZm9yIG90aGVyIGtpbmRzIG9mIGRldmljZXMsIHNvIG1heWJlIEknbSBtaXNzaW5nIHNvbWV0aGluZy4gSSBrbm93IHN5emthbGxlciBoYXMgYHZoY2lgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmksIGFuZCBgbmV0ZGV2c2ltYCBwcm92aWRlcyBzb21lIG5ldGRldiBmZWF0dXJlcy4gUGVyaGFwcyB0aGVyZSdzIHNvbWUgb2JzY3VyZSBjb3JuZXIgb2YgdGhlIGtlcm5lbCwgc29tZSBoaWRkZW4gZ2VtLCB0aGF0IGVtdWxhdGVzIFdhbmd4dW4gUENJIGRldmljZXM/IEl0J3MgdW5saWtlbHksIGJ1dCBJJ2xsIGRvdWJsZSBjaGVjayB0byBlbnN1cmUgdGhlcmUgaXNuJ3Qgc29tZSBQQ0kgZW11bGF0aW9uIGZvciBXYW5neHVuIHRoYXQgSSd2ZSBvdmVybG9va2VkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgdGhlIGZhY3RzIGJlZm9yZSBkaXNtaXNzaW5nIHRoZSBwb3NzaWJpbGl0eSBvZiB2aXJ0dWFsaXplZCB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNDowNzowNi4yNDQ2NTE5NzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NTk4NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5HQkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyODpjb25maWcgTkdCRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4NTpjb25maWcgTkdCRVZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTg2LVxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX1RYR0JFVkYpICs9IHR4Z2JldmYvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19OR0JFKSArPSBuZ2JlL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX05HQkVWRikgKz0gbmdiZXZmL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL01ha2VmaWxlLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX05HQkUpICs9IG5nYmUub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9NYWtlZmlsZS04LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5oLTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5oOjQ6I2lmbmRlZiBfTkdCRV9FVEhUT09MX0hfXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5oOjU6I2RlZmluZSBfTkdCRV9FVEhUT09MX0hfXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5oLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5oPTc9dm9pZCBuZ2JlX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmgtOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmg6OTojZW5kaWYgLyogX05HQkVfRVRIVE9PTF9IXyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYz0xMz1pbnQgbmdiZV9lZXByb21fY2hrc3VtX2hvc3RpZihzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy0xOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjE5OlxcdGJ1ZmZlci5oZHIucmVxLmNtZCA9IE5HQkVfRldfRUVQUk9NX0NIRUNLU1VNX0NNRDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTIwLVxcdGJ1ZmZlci5oZHIucmVxLmJ1Zl9sZW5oID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTIxLVxcdGJ1ZmZlci5oZHIucmVxLmJ1Zl9sZW5sID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjIyOlxcdGJ1ZmZlci5oZHIucmVxLmNoZWNrc3VtID0gTkdCRV9GV19DTURfREVGQVVMVF9DSEVDS1NVTTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTIzLVxcdC8qIGNvbnZlcnQgb2Zmc2V0IGZyb20gd29yZHMgdG8gYnl0ZXMgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtMzMtXFx0dG1wID0gcmQzMmEod3gsIFdYX01OR19NQk9YLCAxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjM0OlxcdGlmICh0bXAgPT0gTkdCRV9GV19DTURfU1RfUEFTUylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTM1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYz0zOT1zdGF0aWMgaW50IG5nYmVfcmVzZXRfbWlzYyhzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy00My1cXHRcXHQvKiBncGlvMCBpcyB1c2VkIHRvIHBvd2VyIG9uL29mZiBjb250cm9sKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjQ0OlxcdFxcdHdyMzIod3gsIE5HQkVfR1BJT19ERFIsIDB4MSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy00NS1cXHRcXHRuZ2JlX3NmcF9tb2R1bGVzX3R4cnhfcG93ZXJjdGwod3gsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM9NTA9dm9pZCBuZ2JlX3NmcF9tb2R1bGVzX3R4cnhfcG93ZXJjdGwoc3RydWN0IHd4ICp3eCwgYm9vbCBzd2kpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTUyLVxcdC8qIGdwaW8wIGlzIHVzZWQgdG8gcG93ZXIgb24gY29udHJvbCAuIDAgaXMgb24gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjUzOlxcdHdyMzIod3gsIE5HQkVfR1BJT19EUiwgc3dpID8gMCA6IE5HQkVfR1BJT19EUl8wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTU0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM9NjQ9aW50IG5nYmVfcmVzZXRfaHcoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtOTMtXFx0LyogcmVzZXQgbnVtX3Jhcl9lbnRyaWVzIHRvIDEyOCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6OTQ6XFx0d3gtXFx1MDAzZW1hYy5udW1fcmFyX2VudHJpZXMgPSBOR0JFX1JBUl9FTlRSSUVTO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtOTUtXFx0d3hfaW5pdF9yeF9hZGRycyh3eCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5oLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuaDo3OiNpZm5kZWYgX05HQkVfSFdfSF9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5oOjg6I2RlZmluZSBfTkdCRV9IV19IX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmgtOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3Lmg9MTI9aW50IG5nYmVfcmVzZXRfaHcoc3RydWN0IHd4ICp3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuaDoxMzojZW5kaWYgLyogX05HQkVfSFdfSF8gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz0zMz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjM0OlxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRV9ERVZfSURfRU1fV1gxODYwQUxfVykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MzU6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBMikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MzY6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBMlMpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjM3OlxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRV9ERVZfSURfRU1fV1gxODYwQTQpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjM4OlxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRV9ERVZfSURfRU1fV1gxODYwQTRTKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzozOTpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMMikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NDA6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBTDJTKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0MTpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMNCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NDI6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBTDRTKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0MzpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MExDKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0NDpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEExKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0NTpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEExTCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNDYtXFx0LyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTY4PXN0YXRpYyB2b2lkIG5nYmVfaW5pdF90eXBlX2NvZGUoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03My1cXHR3eC1cXHUwMDNlbWFjLnR5cGUgPSB3eF9tYWNfZW07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjc0OlxcdHR5cGVfbWFzayA9ICh1MTYpKHd4LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlX2lkIFxcdTAwMjYgTkdCRV9PRU1fTUFTSyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc1LVxcdG5jc2lfbWFzayA9IHd4LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlX2lkIFxcdTAwMjYgV1hfTkNTSV9NQVNLO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg0LVxcdHd4LVxcdTAwM2VuY3NpX2VuYWJsZWQgPSAobmNzaV9tYXNrID09IFdYX05DU0lfU1VQIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjg1OlxcdFxcdFxcdCAgIHR5cGVfbWFzayA9PSBOR0JFX1NVQklEX09DUF9DQVJEKSA/IDEgOiAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy04Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODctXFx0c3dpdGNoICh0eXBlX21hc2spIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6ODg6XFx0Y2FzZSBOR0JFX1NVQklEX0xZX1lUODUyMVNfU0ZQOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4OTpcXHRjYXNlIE5HQkVfU1VCSURfTFlfTTg4RTE1MTJfU0ZQOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo5MDpcXHRjYXNlIE5HQkVfU1VCSURfWVQ4NTIxU19TRlBfR1BJTzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTE6XFx0Y2FzZSBOR0JFX1NVQklEX0lOVEVSTkFMX1lUODUyMVNfU0ZQX0dQSU86XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTkyLVxcdFxcdHd4LVxcdTAwM2VncGlvX2N0cmwgPSAxO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTEwND1zdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTEwOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTEwOlxcdHd4LVxcdTAwM2VtYWMubnVtX3Jhcl9lbnRyaWVzID0gTkdCRV9SQVJfRU5UUklFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTExOlxcdHd4LVxcdTAwM2VtYWMubWF4X3J4X3F1ZXVlcyA9IE5HQkVfTUFYX1JYX1FVRVVFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTEyOlxcdHd4LVxcdTAwM2VtYWMubWF4X3R4X3F1ZXVlcyA9IE5HQkVfTUFYX1RYX1FVRVVFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTEzOlxcdHd4LVxcdTAwM2VtYWMubWNmdF9zaXplID0gTkdCRV9NQ19UQkxfU0laRTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTE0OlxcdHd4LVxcdTAwM2VtYWMudmZ0X3NpemUgPSBOR0JFX1NQX1ZGVF9UQkxfU0laRTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTE1OlxcdHd4LVxcdTAwM2VtYWMucnhfcGJfc2l6ZSA9IE5HQkVfUlhfUEJfU0laRTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTE2OlxcdHd4LVxcdTAwM2VtYWMudHhfcGJfc2l6ZSA9IE5HQkVfVERCX1BCX1NaO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMTctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTI2LVxcdC8qIFNldCBjb21tb24gY2FwYWJpbGl0eSBmbGFncyBhbmQgc2V0dGluZ3MgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTI3OlxcdHd4LVxcdTAwM2VtYXhfcV92ZWN0b3JzID0gTkdCRV9NQVhfTVNJWF9WRUNUT1JTO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxMjg6XFx0ZXJyID0gd3hfZ2V0X3BjaWVfbXNpeF9jb3VudHMod3gsIFxcdTAwMjZtc2l4X2NvdW50LCBOR0JFX01BWF9NU0lYX1ZFQ1RPUlMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMjktXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjEzMzpcXHR3eC1cXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLmxpbWl0ID0gbWluX3QoaW50LCBOR0JFX01BWF9SU1NfSU5ESUNFUyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgIG51bV9vbmxpbmVfY3B1cygpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xNDEtXFx0Lyogc2V0IGRlZmF1bHQgcmluZyBzaXplcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxNDI6XFx0d3gtXFx1MDAzZXR4X3JpbmdfY291bnQgPSBOR0JFX0RFRkFVTFRfVFhEO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxNDM6XFx0d3gtXFx1MDAzZXJ4X3JpbmdfY291bnQgPSBOR0JFX0RFRkFVTFRfUlhEO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTE0NS1cXHQvKiBzZXQgZGVmYXVsdCB3b3JrIGxpbWl0cyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxNDY6XFx0d3gtXFx1MDAzZXR4X3dvcmtfbGltaXQgPSBOR0JFX0RFRkFVTFRfVFhfV09SSztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTQ3OlxcdHd4LVxcdTAwM2VyeF93b3JrX2xpbWl0ID0gTkdCRV9ERUZBVUxUX1JYX1dPUks7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTE0OC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz0xODU9c3RhdGljIHZvaWQgbmdiZV9pcnFfZW5hYmxlKHN0cnVjdCB3eCAqd3gsIGJvb2wgcXVldWVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTE4OS1cXHQvKiBlbmFibGUgbWlzYyBpbnRlcnJ1cHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTkwOlxcdG1hc2sgPSBOR0JFX1BYX01JU0NfSUVOX01BU0s7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTE5MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yMDAtXFx0aWYgKHF1ZXVlcylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MjAxOlxcdFxcdHd4X2ludHJfZW5hYmxlKHd4LCBOR0JFX0lOVFJfQUxMKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMjAyLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MjAzOlxcdFxcdHd4X2ludHJfZW5hYmxlKHd4LCBOR0JFX0lOVFJfTUlTQyh3eCkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yMDQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTIxMT1zdGF0aWMgaXJxcmV0dXJuX3QgbmdiZV9pbnRyKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTIzNC1cXHRlaWNyX21pc2MgPSB3eF9taXNjX2lzYih3eCwgV1hfSVNCX01JU0MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoyMzU6XFx0aWYgKHVubGlrZWx5KGVpY3JfbWlzYyBcXHUwMDI2IE5HQkVfUFhfTUlTQ19JQ19USU1FU1lOQykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTIzNi1cXHRcXHR3eF9wdHBfY2hlY2tfcHBzX2V2ZW50KHd4KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz0yNDg9c3RhdGljIGlycXJldHVybl90IF9fbmdiZV9tc2l4X21pc2Moc3RydWN0IHd4ICp3eCwgdTMyIGVpY3IpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTI0OS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjI1MDpcXHRpZiAoZWljciBcXHUwMDI2IE5HQkVfUFhfTUlTQ19JQ19WRl9NQk9YKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yNTEtXFx0XFx0d3hfbXNnX3Rhc2sod3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yNTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjI1MzpcXHRpZiAodW5saWtlbHkoZWljciBcXHUwMDI2IE5HQkVfUFhfTUlTQ19JQ19USU1FU1lOQykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTI1NC1cXHRcXHR3eF9wdHBfY2hlY2tfcHBzX2V2ZW50KHd4KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz02OTk9c3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTczNC1cXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCB3eCksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjczNTpcXHRcXHRcXHRcXHRcXHQgTkdCRV9NQVhfVFhfUVVFVUVTLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo3MzY6XFx0XFx0XFx0XFx0XFx0IE5HQkVfTUFYX1JYX1FVRVVFUyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTczNy1cXHRpZiAoIW5ldGRldikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc1OS1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NzYwOlxcdHBjaV9zcmlvdl9zZXRfdG90YWx2ZnMocGRldiwgTkdCRV9NQVhfVkZTX0RSVl9MSU1JVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc2MS1cXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc5Mi1cXHQvKiBjaGVjayBpZiBmbGFzaCBsb2FkIGlzIGRvbmUgYWZ0ZXIgaHcgcG93ZXIgdXAgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NzkzOlxcdGVyciA9IHd4X2NoZWNrX2ZsYXNoX2xvYWQod3gsIE5HQkVfU1BJX0lMRFJfU1RBVFVTX1BFUlNUKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNzk0LVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc5NS1cXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Nzk2OlxcdGVyciA9IHd4X2NoZWNrX2ZsYXNoX2xvYWQod3gsIE5HQkVfU1BJX0lMRFJfU1RBVFVTX1BXUlJTVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc5Ny1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTgxMi1cXHRpZiAod3gtXFx1MDAzZWJ1cy5mdW5jID09IDApIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6ODEzOlxcdFxcdHdyMzIod3gsIE5HQkVfQ0FMU1VNX0NBUF9TVEFUVVMsIDB4MCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjgxNDpcXHRcXHR3cjMyKHd4LCBOR0JFX0VFUFJPTV9WRVJTSU9OX1NUT1JFX1JFRywgMHgwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODE1LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjgxNjpcXHRcXHRlMnJvbV9ja3N1bV9jYXAgPSByZDMyKHd4LCBOR0JFX0NBTFNVTV9DQVBfU1RBVFVTKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6ODE3OlxcdFxcdHNhdmVkX3ZlciA9IHJkMzIod3gsIE5HQkVfRUVQUk9NX1ZFUlNJT05fU1RPUkVfUkVHKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODE4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy04NDUtXFx0XFx0d3hfcmVhZF9lZV9ob3N0aWYod3gsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjg0NjpcXHRcXHRcXHRcXHQgIHd4LVxcdTAwM2VlZXByb20uc3dfcmVnaW9uX29mZnNldCArIE5HQkVfRUVQUk9NX1ZFUlNJT05fSCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODQ3LVxcdFxcdFxcdFxcdCAgXFx1MDAyNmUycm9tX3Zlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODQ5LVxcdFxcdHd4X3JlYWRfZWVfaG9zdGlmKHd4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4NTA6XFx0XFx0XFx0XFx0ICB3eC1cXHUwMDNlZWVwcm9tLnN3X3JlZ2lvbl9vZmZzZXQgKyBOR0JFX0VFUFJPTV9WRVJTSU9OX0wsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg1MS1cXHRcXHRcXHRcXHQgIFxcdTAwMjZlMnJvbV92ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy04NTItXFx0XFx0ZXRyYWNrX2lkIHw9IGUycm9tX3ZlcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6ODUzOlxcdFxcdHdyMzIod3gsIE5HQkVfRUVQUk9NX1ZFUlNJT05fU1RPUkVfUkVHLCBldHJhY2tfaWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy04NTQtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jPTE2PXN0YXRpYyBpbnQgbmdiZV9waHlfcmVhZF9yZWdfaW50ZXJuYWwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTIxLVxcdFxcdHJldHVybiAweGZmZmY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjIyOlxcdHJldHVybiAodTE2KXJkMzIod3gsIE5HQkVfUEhZX0NPTkZJRyhyZWdudW0pKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmMtMjMtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jPTI1PXN0YXRpYyBpbnQgbmdiZV9waHlfd3JpdGVfcmVnX2ludGVybmFsKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTI5LVxcdGlmIChwaHlfYWRkciA9PSAwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzozMDpcXHRcXHR3cjMyKHd4LCBOR0JFX1BIWV9DT05GSUcocmVnbnVtKSwgdmFsdWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0zMS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYz03OD1zdGF0aWMgdm9pZCBuZ2JlX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTEwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTAyOlxcdHdyMzJtKHd4LCBOR0JFX0NGR19MQU5fU1BFRUQsIDB4MywgbGFuX3NwZWVkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmMtMTAzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oOjc6I2lmbmRlZiBfTkdCRV9NRElPX0hfXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oOjg6I2RlZmluZSBfTkdCRV9NRElPX0hfXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oLTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oPTEwPWludCBuZ2JlX21kaW9faW5pdChzdHJ1Y3Qgd3ggKnd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmg6MTE6I2VuZGlmIC8qIF9OR0JFX01ESU9fSF8gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0zLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo0OiNpZm5kZWYgX05HQkVfVFlQRV9IX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1OiNkZWZpbmUgX05HQkVfVFlQRV9IX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC02LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwOi8qKioqKioqKioqKiogTkdCRV9yZWdpc3Rlci5oICoqKioqKioqKioqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTEtLyogRGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMjojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMX1dcXHRcXHQweDAxMDBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTM6I2RlZmluZSBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBMlxcdFxcdFxcdDB4MDEwMVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxNDojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEEyU1xcdFxcdDB4MDEwMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxNTojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEE0XFx0XFx0XFx0MHgwMTAzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjE2OiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwQTRTXFx0XFx0MHgwMTA0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjE3OiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwQUwyXFx0XFx0MHgwMTA1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjE4OiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwQUwyU1xcdFxcdDB4MDEwNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxOTojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMNFxcdFxcdDB4MDEwN1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoyMDojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMNFNcXHRcXHQweDAxMDhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MjE6I2RlZmluZSBOR0JFX0RFVl9JRF9FTV9XWDE4NjBMQ1xcdFxcdFxcdDB4MDEwOVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoyMjojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEExXFx0XFx0XFx0MHgwMTBhXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjIzOiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwQTFMXFx0XFx0MHgwMTBiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0yNS0vKiBTdWJzeXN0ZW0gSUQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MjY6I2RlZmluZSBOR0JFX1NVQklEX004OEUxNTEyX1NGUFxcdFxcdFxcdDB4MDAwM1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoyNzojZGVmaW5lIE5HQkVfU1VCSURfT0NQX0NBUkRcXHRcXHRcXHQweDAwNDBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Mjg6I2RlZmluZSBOR0JFX1NVQklEX0xZX004OEUxNTEyX1NGUFxcdFxcdDB4MDA1MFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoyOTojZGVmaW5lIE5HQkVfU1VCSURfTTg4RTE1MTJfUko0NVxcdFxcdDB4MDA1MVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDozMDojZGVmaW5lIE5HQkVfU1VCSURfTTg4RTE1MTJfTUlYXFx0XFx0XFx0MHgwMDUyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjMxOiNkZWZpbmUgTkdCRV9TVUJJRF9ZVDg1MjFTX1NGUFxcdFxcdFxcdDB4MDA2MFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDozMjojZGVmaW5lIE5HQkVfU1VCSURfSU5URVJOQUxfWVQ4NTIxU19TRlBcXHRcXHQweDAwNjFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MzM6I2RlZmluZSBOR0JFX1NVQklEX1lUODUyMVNfU0ZQX0dQSU9cXHRcXHQweDAwNjJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MzQ6I2RlZmluZSBOR0JFX1NVQklEX0lOVEVSTkFMX1lUODUyMVNfU0ZQX0dQSU9cXHQweDAwNjRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MzU6I2RlZmluZSBOR0JFX1NVQklEX0xZX1lUODUyMVNfU0ZQXFx0XFx0MHgwMDcwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjM2OiNkZWZpbmUgTkdCRV9TVUJJRF9SR01JSV9GUEdBXFx0XFx0XFx0MHgwMDgwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDozODojZGVmaW5lIE5HQkVfT0VNX01BU0tcXHRcXHRcXHRcXHQweDAwRkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMzktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNDEtLyogY2hpcCBjb250cm9sIFJlZ2lzdGVycyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo0MjojZGVmaW5lIE5HQkVfTUlTX1BSQl9DVExcXHRcXHRcXHQweDEwMDEwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTQzLS8qIEZNR1IgUmVnaXN0ZXJzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjQ0OiNkZWZpbmUgTkdCRV9TUElfSUxEUl9TVEFUVVNcXHRcXHRcXHQweDEwMTIwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjQ1OiNkZWZpbmUgTkdCRV9TUElfSUxEUl9TVEFUVVNfUEVSU1RcXHRcXHRCSVQoMCkgLyogUENJRV9QRVJTVCBpcyBkb25lICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjQ2OiNkZWZpbmUgTkdCRV9TUElfSUxEUl9TVEFUVVNfUFdSUlNUXFx0XFx0QklUKDEpIC8qIFBvd2VyIG9uIHJlc2V0IGlzIGRvbmUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTQ4LS8qIENoZWNrc3VtIGFuZCBFRVBST00gcG9pbnRlcnMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NDk6I2RlZmluZSBOR0JFX0NBTFNVTV9DT01NQU5EXFx0XFx0XFx0MHhFOVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1MDojZGVmaW5lIE5HQkVfQ0FMU1VNX0NBUF9TVEFUVVNcXHRcXHRcXHQweDEwMjI0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjUxOiNkZWZpbmUgTkdCRV9FRVBST01fVkVSU0lPTl9TVE9SRV9SRUdcXHRcXHQweDEwMjJDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjUyOiNkZWZpbmUgTkdCRV9TQU5fTUFDX0FERFJfUFRSXFx0XFx0XFx0MHgxOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1MzojZGVmaW5lIE5HQkVfREVWSUNFX0NBUFNcXHRcXHRcXHQweDFDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjU0OiNkZWZpbmUgTkdCRV9FRVBST01fVkVSU0lPTl9MXFx0XFx0XFx0MHgxRFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1NTojZGVmaW5lIE5HQkVfRUVQUk9NX1ZFUlNJT05fSFxcdFxcdFxcdDB4MUVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTU3LS8qIEdQSU8gUmVnaXN0ZXJzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjU4OiNkZWZpbmUgTkdCRV9HUElPX0RSXFx0XFx0XFx0XFx0MHgxNDgwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1OTojZGVmaW5lIE5HQkVfR1BJT19ERFJcXHRcXHRcXHRcXHQweDE0ODA0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTYwLS8qR1BJTyBiaXQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NjE6I2RlZmluZSBOR0JFX0dQSU9fRFJfMFxcdFxcdFxcdFxcdEJJVCgwKSAvKiBTRFAwIERhdGEgVmFsdWUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NjI6I2RlZmluZSBOR0JFX0dQSU9fRFJfMVxcdFxcdFxcdFxcdEJJVCgxKSAvKiBTRFAxIERhdGEgVmFsdWUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NjM6I2RlZmluZSBOR0JFX0dQSU9fRERSXzBcXHRcXHRcXHRcXHRCSVQoMCkgLyogU0RQMCBJTyBkaXJlY3Rpb24gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NjQ6I2RlZmluZSBOR0JFX0dQSU9fRERSXzFcXHRcXHRcXHRcXHRCSVQoMSkgLyogU0RQMSBJTyBkaXJlY3Rpb24gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTY2LS8qIEV4dGVuZGVkIEludGVycnVwdCBFbmFibGUgU2V0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjY3OiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lFTl9ERVZfUlNUXFx0XFx0QklUKDEwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo2ODojZGVmaW5lIE5HQkVfUFhfTUlTQ19JRU5fVElNRVNZTkNcXHRcXHRCSVQoMTEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjY5OiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lFTl9FVEhfTEtcXHRcXHRcXHRCSVQoMTgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjcwOiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lFTl9JTlRfRVJSXFx0XFx0QklUKDIwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo3MTojZGVmaW5lIE5HQkVfUFhfTUlTQ19JQ19WRl9NQk9YXFx0XFx0XFx0QklUKDIzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo3MjojZGVmaW5lIE5HQkVfUFhfTUlTQ19JRU5fR1BJT1xcdFxcdFxcdEJJVCgyNilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NzM6I2RlZmluZSBOR0JFX1BYX01JU0NfSUVOX01BU0sgKCBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjc0OlxcdFxcdFxcdFxcdE5HQkVfUFhfTUlTQ19JRU5fREVWX1JTVCB8IFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NzU6XFx0XFx0XFx0XFx0TkdCRV9QWF9NSVNDX0lFTl9USU1FU1lOQyB8IFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NzY6XFx0XFx0XFx0XFx0TkdCRV9QWF9NSVNDX0lFTl9FVEhfTEsgfCBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjc3OlxcdFxcdFxcdFxcdE5HQkVfUFhfTUlTQ19JRU5fSU5UX0VSUiB8IFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Nzg6XFx0XFx0XFx0XFx0TkdCRV9QWF9NSVNDX0lDX1ZGX01CT1ggfCBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjc5OlxcdFxcdFxcdFxcdE5HQkVfUFhfTUlTQ19JRU5fR1BJTylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtODAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTgxLS8qIEV4dGVuZGVkIEludGVycnVwdCBDYXVzZSBSZWFkICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjgyOiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lDX1RJTUVTWU5DXFx0XFx0QklUKDExKSAvKiB0aW1lIHN5bmMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjg0OiNkZWZpbmUgTkdCRV9JTlRSX0FMTFxcdFxcdFxcdFxcdDB4MUZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjg1OiNkZWZpbmUgTkdCRV9JTlRSX01JU0MoQSlcXHRcXHRcXHRCSVQoKEEpLVxcdTAwM2Vtc2l4X2VudHJ5LVxcdTAwM2VlbnRyeSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtODYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjg3OiNkZWZpbmUgTkdCRV9QSFlfQ09ORklHKHJlZ19vZmZzZXQpXFx0XFx0KDB4MTQwMDAgKyAoKHJlZ19vZmZzZXQpICogNCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjg4OiNkZWZpbmUgTkdCRV9DRkdfTEFOX1NQRUVEXFx0XFx0XFx0MHgxNDQ0MFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo4OTojZGVmaW5lIE5HQkVfQ0ZHX1BPUlRfU1RcXHRcXHRcXHQweDE0NDA0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo5MTojZGVmaW5lIE5HQkVfRldfRUVQUk9NX0NIRUNLU1VNX0NNRFxcdFxcdDB4RTlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6OTI6I2RlZmluZSBOR0JFX0ZXX05WTV9EQVRBX09GRlNFVFxcdFxcdFxcdDNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6OTM6I2RlZmluZSBOR0JFX0ZXX0NNRF9ERUZBVUxUX0NIRUNLU1VNXFx0XFx0MHhGRiAvKiBjaGVja3N1bSBhbHdheXMgMHhGRiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo5NDojZGVmaW5lIE5HQkVfRldfQ01EX1NUX1BBU1NcXHRcXHRcXHQweDgwNjU4MzgzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjk1OiNkZWZpbmUgTkdCRV9GV19DTURfU1RfRkFJTFxcdFxcdFxcdDB4NzA2NTczNzZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtOTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjk3OiNkZWZpbmUgTkdCRV9NQVhfRkRJUl9JTkRJQ0VTXFx0XFx0XFx0N1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo5ODojZGVmaW5lIE5HQkVfTUFYX1JTU19JTkRJQ0VTXFx0XFx0XFx0OFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC05OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTAwOiNkZWZpbmUgTkdCRV9NQVhfUlhfUVVFVUVTXFx0XFx0XFx0KE5HQkVfTUFYX0ZESVJfSU5ESUNFUyArIDEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwMTojZGVmaW5lIE5HQkVfTUFYX1RYX1FVRVVFU1xcdFxcdFxcdChOR0JFX01BWF9GRElSX0lORElDRVMgKyAxKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwMzojZGVmaW5lIE5HQkVfRVRIX0xFTkdUSF9PRl9BRERSRVNTXFx0XFx0NlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMDQ6I2RlZmluZSBOR0JFX01BWF9NU0lYX1ZFQ1RPUlNcXHRcXHRcXHQweDA5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwNTojZGVmaW5lIE5HQkVfUkFSX0VOVFJJRVNcXHRcXHRcXHQzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMDY6I2RlZmluZSBOR0JFX1JYX1BCX1NJWkVcXHRcXHRcXHRcXHQ0MlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMDc6I2RlZmluZSBOR0JFX01DX1RCTF9TSVpFXFx0XFx0XFx0MTI4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwODojZGVmaW5lIE5HQkVfU1BfVkZUX1RCTF9TSVpFXFx0XFx0XFx0MTI4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwOTojZGVmaW5lIE5HQkVfVERCX1BCX1NaXFx0XFx0XFx0XFx0KDIwICogMTAyNCkgLyogMTYwS0IgUGFja2V0IEJ1ZmZlciAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTExMS0vKiBUWC9SWCBkZXNjcmlwdG9yIGRlZmluZXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTEyOiNkZWZpbmUgTkdCRV9ERUZBVUxUX1RYRFxcdFxcdFxcdDUxMiAvKiBkZWZhdWx0IHJpbmcgc2l6ZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMTM6I2RlZmluZSBOR0JFX0RFRkFVTFRfVFhfV09SS1xcdFxcdFxcdDI1NlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMTQ6I2RlZmluZSBOR0JFX01BWF9UWERcXHRcXHRcXHRcXHQ4MTkyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExNTojZGVmaW5lIE5HQkVfTUlOX1RYRFxcdFxcdFxcdFxcdDEyOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExNzojZGVmaW5lIE5HQkVfREVGQVVMVF9SWERcXHRcXHRcXHQ1MTIgLyogZGVmYXVsdCByaW5nIHNpemUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTE4OiNkZWZpbmUgTkdCRV9ERUZBVUxUX1JYX1dPUktcXHRcXHRcXHQyNTZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTE5OiNkZWZpbmUgTkdCRV9NQVhfUlhEXFx0XFx0XFx0XFx0ODE5MlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMjA6I2RlZmluZSBOR0JFX01JTl9SWERcXHRcXHRcXHRcXHQxMjhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMjI6I2RlZmluZSBOR0JFX01BWF9WRlNfRFJWX0xJTUlUXFx0XFx0XFx0N1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMjMtZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oPTEyOD12b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEzMDojZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvTWFrZWZpbGUtNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19OR0JFKSArPSBuZ2JldmYub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL01ha2VmaWxlLTgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jPTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JldmZfcGNpX3RibFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6Mjk6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMX1cpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzozMDpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTIpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzozMTpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTJTKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MzI6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEE0KSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MzM6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEE0UykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjM0OlxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDIpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzozNTpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUwyUykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjM2OlxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDQpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzozNzpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUw0UykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjM4OlxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBOQ1NJKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6Mzk6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEExKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6NDA6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMMSkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTQxLVxcdC8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM9NjA9c3RhdGljIGludCBuZ2JldmZfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy03Ny1cXHR3eC1cXHUwMDNlbWFjLnR5cGUgPSB3eF9tYWNfZW07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzo3ODpcXHR3eC1cXHUwMDNlbWFjLm1heF9tc2l4X3ZlY3RvcnMgPSBOR0JFVkZfTUFYX01TSVhfVkVDVE9SUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTc5LVxcdC8qIGxvY2sgdG8gcHJvdGVjdCBtYWlsYm94IGFjY2Vzc2VzICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTEwMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEwMTpcXHR3eC1cXHUwMDNlbWFjLm1heF90eF9xdWV1ZXMgPSBOR0JFVkZfTUFYX1RYX1FVRVVFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEwMjpcXHR3eC1cXHUwMDNlbWFjLm1heF9yeF9xdWV1ZXMgPSBOR0JFVkZfTUFYX1JYX1FVRVVFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTEwMy1cXHQvKiBFbmFibGUgZHluYW1pYyBpbnRlcnJ1cHQgdGhyb3R0bGluZyByYXRlcyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0xMDctXFx0Lyogc2V0IGRlZmF1bHQgcmluZyBzaXplcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTA4OlxcdHd4LVxcdTAwM2V0eF9yaW5nX2NvdW50ID0gTkdCRVZGX0RFRkFVTFRfVFhEO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTA5OlxcdHd4LVxcdTAwM2VyeF9yaW5nX2NvdW50ID0gTkdCRVZGX0RFRkFVTFRfUlhEO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTEwLVxcdC8qIHNldCBkZWZhdWx0IHdvcmsgbGltaXRzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxMTE6XFx0d3gtXFx1MDAzZXR4X3dvcmtfbGltaXQgPSBOR0JFVkZfREVGQVVMVF9UWF9XT1JLO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTEyOlxcdHd4LVxcdTAwM2VyeF93b3JrX2xpbWl0ID0gTkdCRVZGX0RFRkFVTFRfUlhfV09SSztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTExMy1cXHR3eC1cXHUwMDNlc2V0X251bV9xdWV1ZXMgPSBuZ2JldmZfc2V0X251bV9xdWV1ZXM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jPTEzNj1zdGF0aWMgaW50IG5nYmV2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTY2LVxcdFxcdFxcdFxcdFxcdCBzaXplb2Yoc3RydWN0IHd4KSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjE2NzpcXHRcXHRcXHRcXHRcXHQgTkdCRVZGX01BWF9UWF9RVUVVRVMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNjg6XFx0XFx0XFx0XFx0XFx0IE5HQkVWRl9NQVhfUlhfUVVFVUVTKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTE2OS1cXHRpZiAoIW5ldGRldikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaC0zLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6NDojaWZuZGVmIF9OR0JFVkZfVFlQRV9IX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6NTojZGVmaW5lIF9OR0JFVkZfVFlQRV9IX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmgtNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oLTctLyogRGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6ODojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUxfVyAgICAgICAgICAgICAweDAxMTBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjk6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEEyICAgICAgICAgICAgICAgMHgwMTExXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxMDojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTJTICAgICAgICAgICAgICAweDAxMTJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjExOiNkZWZpbmUgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBNCAgICAgICAgICAgICAgIDB4MDExM1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTI6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEE0UyAgICAgICAgICAgICAgMHgwMTE0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxMzojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUwyICAgICAgICAgICAgICAweDAxMTVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjE0OiNkZWZpbmUgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDJTICAgICAgICAgICAgIDB4MDExNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTU6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMNCAgICAgICAgICAgICAgMHgwMTE3XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxNjojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUw0UyAgICAgICAgICAgICAweDAxMThcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjE3OiNkZWZpbmUgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBOQ1NJICAgICAgICAgICAgIDB4MDExOVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTg6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEExICAgICAgICAgICAgICAgMHgwMTFhXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxOTojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUwxICAgICAgICAgICAgICAweDAxMWJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oLTIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MjE6I2RlZmluZSBOR0JFVkZfTUFYX01TSVhfVkVDVE9SUyAgICAgICAgICAgICAgIDFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjIyOiNkZWZpbmUgTkdCRVZGX01BWF9SWF9RVUVVRVMgICAgICAgICAgICAgICAgICAxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyMzojZGVmaW5lIE5HQkVWRl9NQVhfVFhfUVVFVUVTICAgICAgICAgICAgICAgICAgMVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MjQ6I2RlZmluZSBOR0JFVkZfREVGQVVMVF9UWEQgICAgICAgICAgICAgICAgICAgIDEyOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MjU6I2RlZmluZSBOR0JFVkZfREVGQVVMVF9SWEQgICAgICAgICAgICAgICAgICAgIDEyOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MjY6I2RlZmluZSBOR0JFVkZfREVGQVVMVF9UWF9XT1JLICAgICAgICAgICAgICAgIDI1NlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6Mjc6I2RlZmluZSBOR0JFVkZfREVGQVVMVF9SWF9XT1JLICAgICAgICAgICAgICAgIDI1NlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmgtMjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyOTojZW5kaWYgLyogX05HQkVWRl9UWVBFX0hfICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA0OjA3OjA2LjQ5MTI2MDM4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MjU3ODYzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIFZpcnR1YWxpemVkIFdvcmxkKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIFdhbmd4dW4gZHJpdmVycyDigJMgc3BlY2lmaWNhbGx5IHRoZSBgbmdiZWAgYW5kIGB0eGdiZWAgZHJpdmVycy4gVGhlc2UgYXJlLCBhcyBJIHN1c3BlY3RlZCwgZGVzaWduZWQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGVyZSdzIG5vIHZpcnR1YWwgZGV2aWNlIGVtdWxhdGlvbiBvciBhbnl0aGluZyBsaWtlIHRoYXQgYnVpbHQgaW50byB0aGUga2VybmVsIGZvciB0aGVtLiBUaGlzIG1lYW5zIHRoZSBjb2RlIGJlaW5nIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2gg4oCTIHRoZSBlcnJvciBoYW5kbGluZywgdGhlIFRYIHRpbWVvdXQgcmVjb3ZlcnksIGFuZCB0aGUgVFggaGFuZyBkZXRlY3Rpb24g4oCTIGlzIHNpbXBseSB1bnJlYWNoYWJsZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBldmVuIFFFTVUuXG5cbk15IGluaXRpYWwgZ3V0IGZlZWxpbmcgd2FzIHJpZ2h0OyB0aGlzIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBCdXQgSSBuZWVkZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQgbWUgdHJhY2UgaG93IHRoaXMgY29kZSBnZXRzIGNhbGxlZC4gSXQncyBuZXN0bGVkIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jYC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRoZSBgd3hfdHhfdGltZW91dGAgZnVuY3Rpb24gaXMgdGhlIHBvaW50IG9mIGVudHJ5IGFuZCBpdCdzIGhvb2tlZCB1cCBhcyB0aGUgYC5uZG9fdHhfdGltZW91dGAgaGFuZGxlci4gTm93LCB0byBnZXQgdGhhdCByZWdpc3RlcmVkLCBlaXRoZXIgYG5nYmVfcHJvYmVgIG9yIGB0eGdiZV9wcm9iZWAgaGFzIHRvIHN1Y2NlZWQuIEFuZCB0aG9zZSBwcm9iZSBmdW5jdGlvbnMgYXJlICp2ZXJ5KiBzcGVjaWZpYy4gVGhleSdyZSB0aWVkIHRvIHRoZSBQQ0kgZGV2aWNlJ3MgcHJlc2VuY2UgYW5kIGludm9sdmUgYWN0dWFsIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uOiByZWFkaW5nIEVFUFJPTSwgcmVzZXR0aW5nIHRoZSBNQUMsIGFsbCB0aGF0IHN0dWZmLlxuXG5Tbywgd2l0aG91dCB0aGUgcmVhbCBoYXJkd2FyZSwgdGhvc2UgcHJvYmVzIHdpbGwgZWl0aGVyIGZhaWwgZWFybHkgb24gb3Igd29uJ3QgZXZlbiBiZSBpbnZva2VkLiBObyBwcm9iZSA9IG5vIG5ldGRldiA9IG5vIHJlZ2lzdHJhdGlvbiBvZiBgLm5kb190eF90aW1lb3V0YC4gVGhhdCdzIHRoYXQuIFRoZSBQQ0kgZXJyb3IgaGFuZGxlcnMgbGlrZSBgd3hfZXJyX2hhbmRsZXJgIGhhdmUgdGhlIHNhbWUgZGVwZW5kZW5jeSBvbiB0aGUgcGh5c2ljYWwgUENJIGRldmljZSBleGlzdGluZy4gVGhlIHdob2xlIHNldHVwIGlzIHJlbGlhbnQgb24gdGhlIHJlYWwgaGFyZHdhcmUuXG5cblRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaW1lIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2ODAsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA0OjA3OjE0LjExNzA0ODY5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUpIHRvIGFkZCBQQ0kgZXJyb3IgcmVjb3ZlcnksIFRYIHRpbWVvdXQgaGFuZGxpbmcsIGFuZCBUWCBoYW5nIGRldGVjdGlvbi4gVGhlc2UgYXJlIGRyaXZlcnMgZm9yIHNwZWNpZmljIHBoeXNpY2FsIFBDSSBoYXJkd2FyZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIFdhbmd4dW4gZGV2aWNlcyBpbiB0aGUga2VybmVsLCB0aGUgcHJvYmUgZnVuY3Rpb25zIHdpbGwgbm90IHN1Y2NlZWQgYW5kIHRoZSBuZXRkZXZzIHdpbGwgbm90IGJlIHJlZ2lzdGVyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSkgdG8gYWRkIFBDSSBlcnJvciByZWNvdmVyeSwgVFggdGltZW91dCBoYW5kbGluZywgYW5kIFRYIGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgZHJpdmVycyBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgUENJIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgV2FuZ3h1biBkZXZpY2VzIGluIHRoZSBrZXJuZWwsIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBub3Qgc3VjY2VlZCBhbmQgdGhlIG5ldGRldnMgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow476kg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 03:55:07 +0000 UTC FinishedAt: 2026-06-30 04:07:15 +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+CgkJCTx0ZD4yMDI2LzA2LzMwIDA0OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlcnMgKG5nYmUsIHR4Z2JlKSB0byBhZGQgUENJIGVycm9yIHJlY292ZXJ5LCBUWCB0aW1lb3V0IGhhbmRsaW5nLCBhbmQgVFggaGFuZyBkZXRlY3Rpb24uIFRoZXNlIGFyZSBkcml2ZXJzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBQQ0kgaGFyZHdhcmUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciBXYW5neHVuIGRldmljZXMgaW4gdGhlIGtlcm5lbCwgdGhlIHByb2JlIGZ1bmN0aW9ucyB3aWxsIG5vdCBzdWNjZWVkIGFuZCB0aGUgbmV0ZGV2cyB3aWxsIG5vdCBiZSByZWdpc3RlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNDowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDIxNjBhNDE0ZDI0NmFjM2ZkZjM2ZDI2ZjdmMWRkNzU2YWU4NzQwNTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwNDowNjo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuaW5kZXggYTcxYjBhZDc3ZGUzZjcuLmM4NzI0YmIxMjlhYTA2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxuQEAgLTQsNSAmIzQzOzQsNSBAQFxuIFxuIG9iai0kKENPTkZJR19MSUJXWCkgJiM0Mzs9IGxpYnd4Lm9cbiBcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cbiYjNDM7bGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXG4gbGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmMzNGM5NDA2YTVhZWRmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMCwwICYjNDM7MSwzMjEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cbiYjNDM7LyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Flci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3eF90eXBlLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfZXJyLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXG4mIzQzOyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1xuJiM0MztcdGlmICghd3gpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKVxuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0d3hfc29mdF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovXG4mIzQzO1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbiYjNDM7ICpcbiYjNDM7ICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRwY2lfZXJzX3Jlc3VsdF90IHJlc3VsdDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkge1xuJiM0MztcdFx0d3hfZXJyKHd4LCBcJiMzNDtDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXG4mIzQzO1x0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiYjNDM7XHRcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiYjNDM7XHRcdHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpO1xuJiM0MztcdFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdFx0cnRubF9sb2NrKCk7XG4mIzQzO1x0XHRpZiAobmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb3duX3N1c3BlbmQpXG4mIzQzO1x0XHRcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XG4mIzQzO1x0XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgZmFsc2UpO1xuJiM0MztcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBjaV9hZXJfY2xlYXJfbm9uZmF0YWxfc3RhdHVzKHBkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzdWx0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxuJiM0MzsgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdGVyciA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHd4X2Vycih3eCwgXCYjMzQ7RmFpbGVkIHRvIG9wZW4gbmV0ZGV2IGFmdGVyIHJlc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbiYjNDM7b3V0OlxuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7XG4mIzQzO1x0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXG4mIzQzO1x0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxuJiM0MztcdC5yZXN1bWUgPSB3eF9pb19yZXN1bWUsXG4mIzQzO307XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfZXJyX2hhbmRsZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O1Jlc2V0IGFkYXB0ZXIuXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldCh3eC1cdTAwM2VuZXRkZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0d3hfc29mdF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2Vycl9zdWJ0YXNrKTtcbiYjNDM7XG4mIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc19yZXNldF93cV8leFwmIzM0OywgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXG4mIzQzO1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZXJlc2V0X3dxKSB7XG4mIzQzO1x0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2ssIHd4X3Jlc2V0X3Rhc2spO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cdTAwM2V0eF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcdTAwMjZ3eC1cdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xuJiM0MztcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVx1MDAzZW1hc2spO1xuJiM0MztcdHUzMiBpLCBqO1xuJiM0MztcbiYjNDM7XHRpZiAoIXd4LVx1MDAzZW51bV92ZnMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBxX3Blcl9wb29sOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1MzIgaCwgdDtcbiYjNDM7XG4mIzQzO1x0XHRcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1x0XHRcdHQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaCAhPSB0KVxuJiM0MztcdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcbiYjNDM7XHRcdC8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbiYjNDM7XHRcdCAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmdcbiYjNDM7XHRcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxuJiM0MztcdFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0d3hfd2Fybih3eCwgXCYjMzQ7aW5pdGlhdGluZyByZXNldCBkdWUgdG8gbG9zdCBsaW5rIHdpdGggcGVuZGluZyBUeCB3b3JrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIElmIHdlJiMzOTtyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbiYjNDM7XHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuJiM0MztcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR1MTYgdmlkLCBwY2lfY21kO1xuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2aWQpO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcdTAwMjZwY2lfY21kKTtcbiYjNDM7XG4mIzQzO1x0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbiYjMzk7dCBhY2Nlc3MgKi9cbiYjNDM7XHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZWNvdmVyeShzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxuJiM0MztcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSXG4mIzQzO1x0ICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZFxuJiM0MztcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuJiM0MztcdCAqL1xuJiM0MztcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR3eF9lcnIod3gsIFwmIzM0O1BDSWUgZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHR4IHRpbWVvdXRcXG5cJiMzNDspO1xuJiM0MztcdHF1ZXVlX3dvcmsod3gtXHUwMDNlcmVzZXRfd3EsIFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHd4X3dhcm4od3gsIFwmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcXG5cJiMzNDspO1xuJiM0MztcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1xuJiM0MztcdGlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSlcbiYjNDM7XHRcdHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfdHhfdGltZW91dCk7XG4mIzQzO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLVx1MDAzZW5ldGRldik7XG4mIzQzO1xuJiM0MztcdHd4X3dhcm4od3gsXG4mIzQzO1x0XHRcJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcXG5cJiMzNDssXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4LFxuJiM0MztcdFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4mIzQzO1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbiYjNDM7XHRcdHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UsIG5leHQsXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpO1xuJiM0MztcbiYjNDM7XHRuZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiYjNDM7XG4mIzQzO1x0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0OVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1dYX0VSUl9IX1xuJiM0MzsjZGVmaW5lIF9XWF9FUlJfSF9cbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyO1xuJiM0MztcbiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xuJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbmluZGV4IDVkZjk3MWFjYTllMzVmLi5kMTM1NmZmNWQ2OWI1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5NSw3ICYjNDM7Mzk1LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4mIzQzO1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIH1cbiBcbiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5pbmRleCAyNjBlMTRkNWQ1NDEyMS4uMTIyYzQ5NTJkMjAzZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuQEAgLTE5MzIsNiAmIzQzOzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxuIFx0ZWxzZVxuIFx0XHRyaW5nLVx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XG4gXG4mIzQzO1x0Yml0bWFwX3plcm8ocmluZy1cdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cbiBcdG1lbXNldChyaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxuIFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctXHUwMDNlY291bnQpO1xuQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTtcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcdTAwMjZ3eC1cdTAwM2VzdGF0cztcbiYjNDM7XHR1NjQgZGF0YTtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdGlmICh3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXHUwMDI2XHUwMDI2XG4gXHQgICAgd3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19yeF9wYXVzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlIFx1MDAzZT0gd3hfbWFjX2FtbClcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4mIzQzO1x0XHRkYXRhID0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuJiM0MztcdFx0XHRcdCBcdTAwMjZ3eC1cdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcbiBcdGVsc2Vcbi1cdFx0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyAmIzQzOz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbiYjNDM7XHRcdGRhdGEgPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuJiM0MztcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IGRhdGE7XG4mIzQzO1xuJiM0MztcdC8qIHJlZmlsbCBjcmVkaXRzIChubyB0eCBoYW5nKSBpZiB3ZSByZWNlaXZlZCB4b2ZmICovXG4mIzQzO1x0aWYgKCFkYXRhKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbmluZGV4IGQwNDI1NjdiODEyODRiLi5kMzM0MGIyYjA2ODI0MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2Vyci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfcHRwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfdmZfbGliLmhcJiMzNDtcbkBAIC03NDIsNiAmIzQzOzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbiYjNDM7XG4mIzQzO1x0aGVhZCA9IHJpbmctXHUwMDNlbmV4dF90b19jbGVhbjtcbiYjNDM7XHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICgoaGVhZCBcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZDtcbiYjNDM7XHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuJiM0MztcdHUzMiB0eF9kb25lID0gcmluZy1cdTAwM2VzdGF0cy5wYWNrZXRzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuJiM0MztcdFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cbiYjNDM7XHRcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xuJiM0MztcdHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lO1xuJiM0MztcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbiYjNDM7XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXNcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxuQEAgLTg2Niw2ICYjNDM7ODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4mIzQzO1x0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcbiYjNDM7XHRcdHd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXG4gXHRpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyBcdTAwMjZcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFx1MDAzZT0gVFhfV0FLRV9USFJFU0hPTEQpKSkge1xuQEAgLTMxMTEsNyAmIzQzOzMxNDgsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcdGVsc2UgaWYgKGNoYW5nZWQgXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXG4gXHRcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XG4gXG5AQCAtMzE2MSw3ICYjNDM7MzE5OCw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXG4gb3V0OlxuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzQ1LDUgJiM0MzszMzgyLDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcbiBcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwY2lfY2xlYXJfbWFzdGVyKHd4LVx1MDAzZXBkZXYpO1xuJiM0MztcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0bmV0aWZfdHhfZGlzYWJsZSh3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuJiM0MztcdHd4X3B0cF9xdWllc2NlKHd4KTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbiYjNDM7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5pbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXG5AQCAtNDEsNSAmIzQzOzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gXG4gI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDRmM2U2NTA1MjQ2OGYuLjcwNjhjNjg0NWI2MjQ1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICYjNDM7MzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCB3eCwgcHRwX2NhcHMpO1xuIFx0aW50IHRzX2RvbmU7XG4gXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuIEhaO1xuJiM0MztcbiBcdHRzX2RvbmUgPSB3eF9wdHBfdHhfaHd0c3RhbXBfd29yayh3eCk7XG4gXG4gXHR3eF9wdHBfb3ZlcmZsb3dfY2hlY2sod3gpO1xuQEAgLTg0Miw2ICYjNDM7ODQ1LDIxIEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XG4gXG4mIzQzO3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAod3gtXHUwMDNlcHRwX3R4X3NrYikge1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXHUwMDNlcHRwX3R4X3NrYik7XG4mIzQzO1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcbiYjNDM7XG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTY2Li5hZDJmODI0ODc1ZDUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9yeF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5pbmRleCBjN2JlZmU0Y2RmZTkwOC4uYzJlZGI3NDg4MWYyYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbkBAIC00NTAsNiAmIzQzOzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXG4gXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzOyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuJiM0MztcdFx0KFdYX1BYX1RSX1dQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpXG4mIzQzO1xuIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKVxuQEAgLTEwMzksNiAmIzQzOzEwNDQsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMge1xuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XG4gXHR1NjQgcmVzdGFydF9xdWV1ZTtcbiBcdHU2NCB0eF9idXN5O1xuJiM0MztcdHUzMiB0eF9kb25lX29sZDtcbiB9O1xuIFxuIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XG5AQCAtMTA1NCw2ICYjNDM7MTA2MCwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcbiBcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXHUwMDNlbmV4dClcbiBcbiYjNDM7ZW51bSB3eF9yaW5nX3N0YXRlIHtcbiYjNDM7XHRXWF9UWF9ERVRFQ1RfSEFORyxcbiYjNDM7XHRXWF9IQU5HX0NIRUNLX0FSTUVELFxuJiM0MztcdFdYX1JJTkdfU1RBVEVfTkJJVFNcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cbkBAIC0xMDczLDYgJiM0MzsxMDg1LDcgQEAgc3RydWN0IHd4X3Jpbmcge1xuIFx0XHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbztcbiBcdFx0c3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87XG4gXHR9O1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKHN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdHU4IF9faW9tZW0gKnRhaWw7XG4gXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXG4gXHRkbWFfYWRkcl90IGhlYWR3Yl9kbWE7XG5AQCAtMTIwOCw2ICYjNDM7MTIyMSw4IEBAIGVudW0gd3hfc3RhdGUge1xuIFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXG4gXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxuJiM0MztcdFdYX1NUQVRFX0RJU0FCTEVELFxuJiM0MztcdFdYX1NUQVRFX1JFU19GUkVFRCxcbiBcdFdYX1NUQVRFX05CSVRTXHRcdC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTI3NCw2ICYjNDM7MTI4OSw4IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xuIFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxuIFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxuIFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcbiYjNDM7XHRXWF9GTEFHX05FRURfUEZfUkVTRVQsXG4mIzQzO1x0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXG4gXHRXWF9QRl9GTEFHU19OQklUUyAgICAgICAgICAgICAgIC8qIG11c3QgYmUgbGFzdCAqL1xuIH07XG4gXG5AQCAtMTM5NCw3ICYjNDM7MTQxMSw4IEBAIHN0cnVjdCB3eCB7XG4gXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcbiBcdHZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xuLVx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiYjNDM7XHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiYjNDM7XHR2b2lkICgqZG93bl9zdXNwZW5kKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdGludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpO1xuIFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbkBAIC0xNDIyLDYgJiM0MzsxNDQwLDggQEAgc3RydWN0IHd4IHtcbiBcbiBcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrO1xuJiM0MztcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNldF93cTtcbiBcdHN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi9cbiB9O1xuIFxuQEAgLTE1MDQsNyAmIzQzOzE1MjQsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxuIFxuICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9lcnIoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbi1cbiYjNDM7I2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXFxcbiYjNDM7XHRkZXZfd2FybihcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9kYmcoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5AQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLmNkYTIyMzEwMWNlZDcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5AQCAtNDYsNiAmIzQzOzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JlX3BjaV90YmxbXSA9IHtcbiBcdHsgfVxuIH07XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiAmIzQzOzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VtYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFO1xuIFx0d3gtXHUwMDNlc2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjO1xuJiM0MztcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcbiYjNDM7XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgc2VydmljZV90YXNrKTtcbiBcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbiYjNDM7XHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC00MDgsNiAmIzQzOzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcbiBcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4gfVxuIFxuLXZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyAmIzQzOzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXG4gXHR3eF9wdHBfaW5pdCh3eCk7XG4gXG4tXHRuZ2JlX3VwKHd4KTtcbiYjNDM7XHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiBcbiBcdHJldHVybiAwO1xuIGVycl9kaXNfcGh5OlxuQEAgLTUwMyw2ICYjNDM7NTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7dm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHR3eF9jb25maWd1cmUod3gpO1xuJiM0MztcdG5nYmVfdXBfY29tcGxldGUod3gpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCw2ICYjNDM7NTQ4LDkgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0bmdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbkBAIC01MjUsNyAmIzQzOzU1OCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cdTAwM2VwaHlsaW5rKTtcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbi1cbiYjNDM7b3V0OlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTU1NSw3ICYjNDM7NTg4LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKVxuIFx0KmVuYWJsZV93YWtlID0gISF3dWZjO1xuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICYjNDM7NjI0LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHQgKi9cbiBcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4gXHRcdG5nYmVfY2xvc2UoZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSAmIzQzOzY0MiwzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRuZXRpZl90cmFuc191cGRhdGUod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiYjNDM7XHRzZXRfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRuZ2JlX2Rvd24od3gpO1xuJiM0MztcdG5nYmVfdXAod3gpO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjYgcmVpbml0KVxuJiM0MztcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuJiM0MztcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTcwMCw2ICYjNDM7NzYxLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHxcbkBAIC03OTYsNiAmIzQzOzg1OCwxMCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFxuJiM0MztcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbiYjNDM7XG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICYjNDM7ODc4LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4mIzQzO1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC04MjMsNiAmIzQzOzg5MCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtODU0LDYgJiM0Mzs5MjMsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gXG4gXHRwaHlsaW5rX2Rlc3Ryb3kod3gtXHUwMDNlcGh5bGluayk7XG4gXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsXG5AQCAtODYzLDcgJiM0Mzs5MzQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBuZ2JlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbkBAIC04OTAsNiAmIzQzOzk2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgJiM0Mzs5ODcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4gXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcbiBcdC5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbmluZGV4IDcwNzdhMGRhNGM5ODZhLi5jOTIzM2RjN2FlNTA1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5AQCAtMTI1LDUgJiM0MzsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbiYjNDM7dm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbiBcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbmluZGV4IDIwYzVhMjk1YzZjMjk2Li5kODVlZTgzMTkyZTRmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXJyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuQEAgLTkzLDYgJiM0Mzs5NCwxMCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9tb2R1bGVfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX01PRFVMRV9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTA2LDYgJiM0MzsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRywgd3gtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTIzLDYgJiM0MzsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcbiBcdHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2sod3gpO1xuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbiYjNDM7XHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xuJiM0MztcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0xNDQsNiAmIzQzOzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4gXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cbiBcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuIFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTE4Nyw2ICYjNDM7MTk5LDkgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiBcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xuIFx0aWYgKGVyciAhPSAwKVxuIFx0XHR3eF9lcnIod3gsIFwmIzM0O0hhcmR3YXJlIEVycm9yOiAlZFxcblwmIzM0OywgZXJyKTtcbkBAIC0yMjQsNiAmIzQzOzIzOSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9pcnFfZGlzYWJsZSh3eCk7XG4gXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbiBcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC0yOTIsNiAmIzQzOzMwOCwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4gXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0eGdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuJiM0MztcdHd4X2ZyZWVfaXJxKHd4KTtcbiYjNDM7XHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuJiM0MztcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiYjNDM7XHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiAgdHhnYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtNDA4LDYgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XG4gXHR3eC1cdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xuJiM0MztcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTUxOCwxMiAmIzQzOzU0OSwxNiBAQCBzdGF0aWMgaW50IHR4Z2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0dHhnYmVfZG93bih3eCk7XG4gXHR3eF9mcmVlX2lycSh3eCk7XG4gXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVx1MDAzZXByaXYpO1xuIFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuIFx0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4mIzQzO291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU0NCw3ICYjNDM7NTc5LDggQEAgc3RhdGljIHZvaWQgdHhnYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xuIFxuLVx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC02MDYsMTEgJiM0Mzs2NDIsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuIH1cbiBcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiBcdFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4gXHRlbHNlXG4gXHRcdHR4Z2JlX3Jlc2V0KHd4KTtcbkBAIC02NTQsNiAmIzQzOzY5MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHhnYmVfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4mIzQzO1x0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxuIFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSB3eF9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXG5AQCAtNzQ1LDYgJiM0Mzs3ODIsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcbiBcdHR4Z2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xuJiM0MztcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbiBcdG5ldGRldi1cdTAwM2V1ZHBfdHVubmVsX25pY19pbmZvID0gXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XG4gXG4gXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cbkBAIC04MTQsNiAmIzQzOzg1MiwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbiYjNDM7XHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4mIzQzO1xuIFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODg5LDYgJiM0Mzs5MzEsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRnb3RvIGVycl9yZW1vdmVfcGh5O1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbiYjNDM7XHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuQEAgLTkxNiw2ICYjNDM7OTU5LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBlcnJfZnJlZV9tYWNfdGFibGU6XG4gXHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG5AQCAtOTQ4LDYgJiM0Mzs5OTMsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0dHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7XG4gXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuQEAgLTk1OSw3ICYjNDM7MTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbkBAIC05NjksNiAmIzQzOzEwMTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xuIFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxuIFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbiYjNDM7XHQuZXJyX2hhbmRsZXIgPSBcdTAwMjZ3eF9lcnJfaGFuZGxlcixcbiB9O1xuIFxuIG1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuaW5kZXggODc3MjM0ZTNmZGMyYjYuLjNlOTNhM2YzMDljMTY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG5AQCAtMzEzLDcgJiM0MzszMTMsNyBAQCBleHRlcm4gY2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgdHhnYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCB0eGdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXG4gXHR1bnNpZ25lZCBsb25nIG5hbWVbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF0gPSB7IDAsIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSkgdG8gYWRkIFBDSSBlcnJvciByZWNvdmVyeSwgVFggdGltZW91dCBoYW5kbGluZywgYW5kIFRYIGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgZHJpdmVycyBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgUENJIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgV2FuZ3h1biBkZXZpY2VzIGluIHRoZSBrZXJuZWwsIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBub3Qgc3VjY2VlZCBhbmQgdGhlIG5ldGRldnMgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIxNjBhNDE0ZDI0NmFjM2ZkZjM2ZDI2ZjdmMWRkNzU2YWU4NzQwNTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAwNDowNjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCmluZGV4IGE3MWIwYWQ3N2RlM2Y3Li5jODcyNGJiMTI5YWEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCkBAIC00LDUgJiM0Mzs0LDUgQEAKIAogb2JqLSQoQ09ORklHX0xJQldYKSAmIzQzOz0gbGlid3gubwogCi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8KJiM0MztsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm8KIGxpYnd4LW9ianMgJiM0Mzs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jMzRjOTQwNmE1YWVkZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKQEAgLTAsMCAmIzQzOzEsMzIxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24uICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWVyLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF90eXBlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfZXJyLmgmIzM0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkCiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQomIzQzOyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGUKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKJiM0MzsgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCQkJCSAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiYjNDM7CiYjNDM7CWlmICghd3gpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJbmV0ZGV2ID0gd3gtJmd0O25ldGRldjsKJiM0MzsJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKQomIzQzOwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiYjNDM7CiYjNDM7CWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKJiM0MzsJc2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwkvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi8KJiM0MzsJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuCiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LgomIzQzOyAqCiYjNDM7ICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXBjaV9lcnNfcmVzdWx0X3QgcmVzdWx0OwomIzQzOwomIzQzOwlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7CiYjNDM7CQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuJiMzNDspOwomIzQzOwkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovCiYjNDM7CQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKJiM0MzsJCWNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKTsKJiM0MzsJCWNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwomIzQzOwkJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiYjNDM7CQlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTsKJiM0MzsKJiM0MzsJCXJ0bmxfbG9jaygpOwomIzQzOwkJaWYgKG5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikgJmFtcDsmYW1wOyB3eC0mZ3Q7ZG93bl9zdXNwZW5kKQomIzQzOwkJCXd4LSZndDtkb3duX3N1c3BlbmQod3gpOwomIzQzOwkJaWYgKHd4LSZndDtkb19yZXNldCkKJiM0MzsJCQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgZmFsc2UpOwomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKJiM0MzsJfQomIzQzOwomIzQzOwlwY2lfYWVyX2NsZWFyX25vbmZhdGFsX3N0YXR1cyhwZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlc3VsdDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdAomIzQzOyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewomIzQzOwkJZXJyID0gbmV0ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXd4X2Vycih3eCwgJiMzNDtGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiYjNDM7b3V0OgomIzQzOwlydG5sX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0gewomIzQzOwkuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCwKJiM0MzsJLnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LAomIzQzOwkucmVzdW1lID0gd3hfaW9fcmVzdW1lLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LCAmIzM0O1Jlc2V0IGFkYXB0ZXIuXG4mIzM0Oyk7CiYjNDM7CWlmICh3eC0mZ3Q7ZG9fcmVzZXQpCiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncykpCiYjNDM7CQlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spOwomIzQzOwomIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl3eC0mZ3Q7cmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDslc19yZXNldF93cV8leCYjMzQ7LCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSwKJiM0MzsJCQkJICAgICAgIDEsIHd4LSZndDtkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC0mZ3Q7cGRldikpOwomIzQzOwlpZiAoIXd4LSZndDtyZXNldF93cSkgewomIzQzOwkJd3hfZXJyKHd4LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlJTklUX1dPUksoJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spOwomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtJmd0O3R4X3JpbmdbaV07CiYjNDM7CiYjNDM7CQlpZiAodHhfcmluZy0mZ3Q7bmV4dF90b191c2UgIT0gdHhfcmluZy0mZ3Q7bmV4dF90b19jbGVhbikKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSAmYW1wO3d4LSZndDtyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdOwomIzQzOwl1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS0mZ3Q7bWFzayk7CiYjNDM7CXUzMiBpLCBqOwomIzQzOwomIzQzOwlpZiAoIXd4LSZndDtudW1fdmZzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV92ZnM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgcV9wZXJfcG9vbDsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQl1MzIgaCwgdDsKJiM0MzsKJiM0MzsJCQloID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpOwomIzQzOwkJCXQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7CiYjNDM7CiYjNDM7CQkJaWYgKGggIT0gdCkKJiM0MzsJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHsKJiM0MzsJCS8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSwKJiM0MzsJCSAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmcKJiM0MzsJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgomIzQzOwkJICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS4KJiM0MzsJCSAqLwomIzQzOwkJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcbiYjMzQ7KTsKJiM0MzsJCXNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogSWYgd2UmIzM5O3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi8KJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi8KJiM0MzsJaWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtJmd0O25ldGRldikpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJc2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpOwomIzQzOwl3eF9kZXRlY3RfdHhfaGFuZyh3eCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl1MTYgdmlkLCBwY2lfY21kOwomIzQzOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX1ZFTkRPUl9JRCwgJmFtcDt2aWQpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX0NPTU1BTkQsICZhbXA7cGNpX2NtZCk7CiYjNDM7CiYjNDM7CS8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4mIzM5O3QgYWNjZXNzICovCiYjNDM7CWlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgJmFtcDsgUENJX0NPTU1BTkRfTUVNT1JZKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llCiYjNDM7CSAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSCiYjNDM7CSAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWQKJiM0MzsJICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF9lcnIod3gsICYjMzQ7UENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxuJiMzNDspOwomIzQzOwlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XG4mIzM0Oyk7CiYjNDM7CXd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSkKJiM0MzsJCXd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpOwomIzQzOwllbHNlCiYjNDM7CQl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTsKJiM0MzsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LAomIzQzOwkJJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcbiYjMzQ7LAomIzQzOwkJdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgsCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQl0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSwgbmV4dCwKJiM0MzsJCXR4X3JpbmctJmd0O3R4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpOwomIzQzOwomIzQzOwluZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctJmd0O25ldGRldiwgdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwomIzQzOwl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NDkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1dYX0VSUl9IXwomIzQzOyNkZWZpbmUgX1dYX0VSUl9IXwomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyOwomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9XWF9FUlJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKaW5kZXggNWRmOTcxYWNhOWUzNWYuLmQxMzU2ZmY1ZDY5YjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwpAQCAtMzk1LDcgJiM0MzszOTUsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpCiAKIAkvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi8KIAlpZiAobmVlZF9yZXNldCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIH0KIAogaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCmluZGV4IDI2MGUxNGQ1ZDU0MTIxLi4xMjJjNDk1MmQyMDNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwpAQCAtMTkzMiw2ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsCiAJZWxzZQogCQlyaW5nLSZndDthdHJfc2FtcGxlX3JhdGUgPSAwOwogCiYjNDM7CWJpdG1hcF96ZXJvKHJpbmctJmd0O3N0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTsKIAkvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi8KIAltZW1zZXQocmluZy0mZ3Q7dHhfYnVmZmVyX2luZm8sIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctJmd0O2NvdW50KTsKQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTsKIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KQogewogCXN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9ICZhbXA7d3gtJmd0O3N0YXRzOwomIzQzOwl1NjQgZGF0YTsKJiM0MzsJaW50IGk7CiAKIAlpZiAod3gtJmd0O2ZjLm1vZGUgIT0gd3hfZmNfZnVsbCAmYW1wOyZhbXA7CiAJICAgIHd4LSZndDtmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKQogCQlyZXR1cm47CiAKIAlpZiAod3gtJmd0O21hYy50eXBlICZndDs9IHd4X21hY19hbWwpCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCi0JCQkJCSAgICAgICAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKJiM0MzsJCWRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCiYjNDM7CQkJCSAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKIAllbHNlCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpOwomIzQzOwkJZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7CiYjNDM7CWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSBkYXRhOwomIzQzOwomIzQzOwkvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqLwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCBkMDQyNTY3YjgxMjg0Yi4uZDMzNDBiMmIwNjgyNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKIAogI2luY2x1ZGUgJiMzNDt3eF90eXBlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfaHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X3ZmX2xpYi5oJiMzNDsKQEAgLTc0Miw2ICYjNDM7NzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKQogCXJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctJmd0O25ldGRldiwgcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwogfQogCiYjNDM7c3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBoZWFkLCB0YWlsOwomIzQzOwomIzQzOwloZWFkID0gcmluZy0mZ3Q7bmV4dF90b19jbGVhbjsKJiM0MzsJdGFpbCA9IHJpbmctJmd0O25leHRfdG9fdXNlOwomIzQzOwomIzQzOwlyZXR1cm4gKChoZWFkICZsdDs9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy0mZ3Q7Y291bnQpIC0gaGVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZykKJiM0Mzt7CiYjNDM7CXUzMiB0eF9kb25lX29sZCA9IHJpbmctJmd0O3R4X3N0YXRzLnR4X2RvbmVfb2xkOwomIzQzOwl1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpOwomIzQzOwl1MzIgdHhfZG9uZSA9IHJpbmctJmd0O3N0YXRzLnBhY2tldHM7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lICZhbXA7JmFtcDsgdHhfcGVuZGluZykKJiM0MzsJCS8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovCiYjNDM7CQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CS8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovCiYjNDM7CXJpbmctJmd0O3R4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTsKJiM0MzsJLyogcmVzZXQgdGhlIGNvdW50ZG93biAqLwomIzQzOwljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXMKICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uCkBAIC04NjYsNiAmIzQzOzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvciwKIAluZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksCiAJCQkJICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7CiAKJiM0MzsJaWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHsKJiM0MzsJCXd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpOwomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMikKIAlpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyAmYW1wOyZhbXA7IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy0mZ3Q7bmV0ZGV2KSAmYW1wOyZhbXA7CiAJCSAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpICZndDs9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHsKQEAgLTMxMTEsNyAmIzQzOzMxNDgsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCW5ldGRldi0mZ3Q7ZmVhdHVyZXMgPSBmZWF0dXJlczsKIAogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogCWVsc2UgaWYgKGNoYW5nZWQgJmFtcDsgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSkKIAkJd3hfc2V0X3J4X21vZGUobmV0ZGV2KTsKIApAQCAtMzE2MSw3ICYjNDM7MzE5OCw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiAKIG91dDoKIAlpZiAobmVlZF9yZXNldCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzM0NSw1ICYjNDM7MzM4MiwyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiB9CiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpOwogCiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyh3eC0mZ3Q7bmV0ZGV2KSB8fAomIzQzOwkgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwY2lfY2xlYXJfbWFzdGVyKHd4LSZndDtwZGV2KTsKJiM0MzsJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LSZndDtuZXRkZXYpOwomIzQzOwluZXRpZl9jYXJyaWVyX29mZih3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJbmV0aWZfdHhfZGlzYWJsZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJd3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7CiYjNDM7CXd4X3B0cF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTsKJiM0MzsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAppbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaApAQCAtNDEsNSAmIzQzOzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LAogdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTsKJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTsKIAogI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi43MDY4YzY4NDViNjI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCkBAIC0zMjEsNiAmIzQzOzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCkKIAlzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7CiAJaW50IHRzX2RvbmU7CiAKJiM0MzsJaWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiBIWjsKJiM0MzsKIAl0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpOwogCiAJd3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTsKQEAgLTg0Miw2ICYjNDM7ODQ1LDIxIEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCkKIH0KIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApOwogCiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKHd4LSZndDtwdHBfdHhfc2tiKSB7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueSh3eC0mZ3Q7cHRwX3R4X3NrYik7CiYjNDM7CQl3eC0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CX0KJiM0MzsJY2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LSZndDtzdGF0ZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpOwomIzQzOwogLyoqCiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcAogICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKaW5kZXggNTBkYjkwYTZlM2VlNjYuLmFkMmY4MjQ4NzVkNTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKQEAgLTEwLDYgJiM0MzsxMCw3IEBAIHZvaWQgd3hfcHRwX3Jlc2V0KHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfaW5pdChzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpOwomIzQzO3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9yeF9od3RzdGFtcChzdHJ1Y3Qgd3ggKnd4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaAppbmRleCBjN2JlZmU0Y2RmZTkwOC4uYzJlZGI3NDg4MWYyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCkBAIC00NTAsNiAmIzQzOzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHsKICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4CiAjZGVmaW5lIFdYX1BYX1RSX0NGR19IRUFEX1dCICAgICAgICAgQklUKDI3KQogCiYjNDM7I2RlZmluZSBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFwKJiM0MzsJCShXWF9QWF9UUl9SUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKQomIzQzOyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcCiYjNDM7CQkoV1hfUFhfVFJfV1AoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgJiM0MzsgKHZmX3FfaW5kZXgpKSkKJiM0MzsKIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqLwogI2RlZmluZSBXWF9QWF9SUl9CQUwoX2kpICAgICAgICAgICAgICgweDAxMDAwICYjNDM7ICgoX2kpICogMHg0MCkpCiAjZGVmaW5lIFdYX1BYX1JSX0JBSChfaSkgICAgICAgICAgICAgKDB4MDEwMDQgJiM0MzsgKChfaSkgKiAweDQwKSkKQEAgLTEwMzksNiAmIzQzOzEwNDQsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMgewogc3RydWN0IHd4X3R4X3F1ZXVlX3N0YXRzIHsKIAl1NjQgcmVzdGFydF9xdWV1ZTsKIAl1NjQgdHhfYnVzeTsKJiM0MzsJdTMyIHR4X2RvbmVfb2xkOwogfTsKIAogc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHsKQEAgLTEwNTQsNiAmIzQzOzEwNjAsMTIgQEAgc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHsKICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXAogCWZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tJmd0O25leHQpCiAKJiM0MztlbnVtIHd4X3Jpbmdfc3RhdGUgewomIzQzOwlXWF9UWF9ERVRFQ1RfSEFORywKJiM0MzsJV1hfSEFOR19DSEVDS19BUk1FRCwKJiM0MzsJV1hfUklOR19TVEFURV9OQklUUwomIzQzO307CiYjNDM7CiBzdHJ1Y3Qgd3hfcmluZ19jb250YWluZXIgewogCXN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqLwogCXVuc2lnbmVkIGludCB0b3RhbF9ieXRlczsgICAgICAgLyogdG90YWwgYnl0ZXMgcHJvY2Vzc2VkIHRoaXMgaW50ICovCkBAIC0xMDczLDYgJiM0MzsxMDg1LDcgQEAgc3RydWN0IHd4X3JpbmcgewogCQlzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKIAkJc3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87CiAJfTsKJiM0MzsJREVDTEFSRV9CSVRNQVAoc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpOwogCXU4IF9faW9tZW0gKnRhaWw7CiAJZG1hX2FkZHJfdCBkbWE7ICAgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqLwogCWRtYV9hZGRyX3QgaGVhZHdiX2RtYTsKQEAgLTEyMDgsNiAmIzQzOzEyMjEsOCBAQCBlbnVtIHd4X3N0YXRlIHsKIAlXWF9TVEFURV9QVFBfUlVOTklORywKIAlXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsCiAJV1hfU1RBVEVfU0VSVklDRV9TQ0hFRCwKJiM0MzsJV1hfU1RBVEVfRElTQUJMRUQsCiYjNDM7CVdYX1NUQVRFX1JFU19GUkVFRCwKIAlXWF9TVEFURV9OQklUUwkJLyogbXVzdCBiZSBsYXN0ICovCiB9OwogCkBAIC0xMjc0LDYgJiM0MzsxMjg5LDggQEAgZW51bSB3eF9wZl9mbGFncyB7CiAJV1hfRkxBR19ORUVEX0RPX1JFU0VULAogCVdYX0ZMQUdfUlhfTUVSR0VfRU5BQkxFRCwKIAlXWF9GTEFHX1RYSEVBRF9XQl9FTkFCTEVELAomIzQzOwlXWF9GTEFHX05FRURfUEZfUkVTRVQsCiYjNDM7CVdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLAogCVdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovCiB9OwogCkBAIC0xMzk0LDcgJiM0MzsxNDExLDggQEAgc3RydWN0IHd4IHsKIAl2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTsKIAl2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpOwogCWludCAoKnNldHVwX3RjKShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCB0Yyk7Ci0Jdm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKJiM0MzsJdm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiYjNDM7CXZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpOwogCWludCAoKnB0cF9zZXR1cF9zZHApKHN0cnVjdCB3eCAqd3gpOwogCXZvaWQgKCpzZXRfbnVtX3F1ZXVlcykoc3RydWN0IHd4ICp3eCk7CiAKQEAgLTE0MjIsNiAmIzQzOzE0NDAsOCBAQCBzdHJ1Y3Qgd3ggewogCiAJc3RydWN0IHRpbWVyX2xpc3Qgc2VydmljZV90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzazsKJiM0MzsJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxOwogCXN0cnVjdCBtdXRleCByZXNldF9sb2NrOyAvKiBtdXRleCBmb3IgcmVzZXQgKi8KIH07CiAKQEAgLTE1MDQsNyAmIzQzOzE1MjQsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KQogCiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFwKIAlkZXZfZXJyKCZhbXA7KHd4KS0mZ3Q7cGRldi0mZ3Q7ZGV2LCBmbXQsICMjYXJnKQotCiYjNDM7I2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXAomIzQzOwlkZXZfd2FybigmYW1wOyh3eCktJmd0O3BkZXYtJmd0O2RldiwgZm10LCAjI2FyZykKICNkZWZpbmUgd3hfZGJnKHd4LCBmbXQsIGFyZy4uLikgXAogCWRldl9kYmcoJmFtcDsod3gpLSZndDtwZGV2LSZndDtkZXYsIGZtdCwgIyNhcmcpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwppbmRleCBiMmUxOTE5ODI4MDMyNi4uMTk2MGY3MTU0MTUxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMKQEAgLTU5LDcgJiM0Mzs1OSw2IEBAIHN0YXRpYyBpbnQgbmdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJd3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpOwogCWt2ZnJlZSh0ZW1wX3JpbmcpOwogCi0Jd3hfY29uZmlndXJlKHd4KTsKIAluZ2JlX3VwKHd4KTsKIAogY2xlYXJfcmVzZXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKaW5kZXggYTE2MjIxOTk1OTA5ZjkuLmNkYTIyMzEwMWNlZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF90eXBlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9ody5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X21ieC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaCYjMzQ7CkBAIC00Niw2ICYjNDM7NDcsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nYmVfcGNpX3RibFtdID0gewogCXsgfQogfTsKIAomIzQzO3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBoeWxpbmtfc3RvcCh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7CXBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtJmd0O3BoeWxpbmspOwomIzQzOwl3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpOwomIzQzOwl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwomIzQzOwl3eF9mcmVlX2lycSh3eCk7CiYjNDM7CXd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7CiYjNDM7CXd4X2ZyZWVfcmVzb3VyY2VzKHd4KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqICBuZ2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGUKICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC0xMzMsNiAmIzQzOzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpCiAKIAl3eC0mZ3Q7bWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTsKIAl3eC0mZ3Q7c2V0dXBfdGMgPSBuZ2JlX3NldHVwX3RjOwomIzQzOwl3eC0mZ3Q7ZG9fcmVzZXQgPSBuZ2JlX2RvX3Jlc2V0OwomIzQzOwl3eC0mZ3Q7ZG93bl9zdXNwZW5kID0gbmdiZV9kb3duX3N1c3BlbmQ7CiAJc2V0X2JpdCgwLCAmYW1wO3d4LSZndDtmd2RfYml0bWFzayk7CiAKIAlyZXR1cm4gMDsKQEAgLTE0Nyw2ICYjNDM7MTY0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spOwogCiAJd3hfdXBkYXRlX3N0YXRzKHd4KTsKJiM0MzsJd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTsKJiM0MzsJd3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpOwogCiAJd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7CiB9CkBAIC0zOTIsNiAmIzQzOzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eCkKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CiAKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKIAl0aW1lcl9kZWxldGVfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGFzayk7CiAKQEAgLTQwOCw2ICYjNDM7NDI4LDkgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpCiB7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAl3eF9mbHVzaF9zd19tYWNfdGFibGUod3gpOwogCXd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LSZndDttYWMuYWRkcik7CiAJaWYgKHRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC0mZ3Q7c3RhdGUpKQpAQCAtNDIzLDEzICYjNDM7NDQ2LDE0IEBAIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpCiAJd3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTsKIH0KIAotdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpCiYjNDM7c3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KQogewogCXd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTsKIAogCS8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqLwogCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCWNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpOwogCXd4X25hcGlfZW5hYmxlX2FsbCh3eCk7CiAJLyogZW5hYmxlIHRyYW5zbWl0cyAqLwogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtJmd0O25ldGRldik7CkBAIC00OTAsNyAmIzQzOzUxNCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAKIAl3eF9wdHBfaW5pdCh3eCk7CiAKLQluZ2JlX3VwKHd4KTsKJiM0MzsJbmdiZV91cF9jb21wbGV0ZSh3eCk7CiAKIAlyZXR1cm4gMDsKIGVycl9kaXNfcGh5OgpAQCAtNTAzLDYgJiM0Mzs1MjcsMTIgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7dm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl3eF9jb25maWd1cmUod3gpOwomIzQzOwluZ2JlX3VwX2NvbXBsZXRlKHd4KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlCiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCkBAIC01MTgsNiAmIzQzOzU0OCw5IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAl3eF9wdHBfc3RvcCh3eCk7CiAJbmdiZV9kb3duKHd4KTsKIAl3eF9mcmVlX2lycSh3eCk7CkBAIC01MjUsNyAmIzQzOzU1OCw3IEBAIHN0YXRpYyBpbnQgbmdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXd4X2ZyZWVfcmVzb3VyY2VzKHd4KTsKIAlwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LSZndDtwaHlsaW5rKTsKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7Ci0KJiM0MztvdXQ6CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1NSw3ICYjNDM7NTg4LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKQogCSplbmFibGVfd2FrZSA9ICEhd3VmYzsKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTU5MCw2ICYjNDM7NjI0LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJbmdiZV9jbG9zZShkZXYpOwomIzQzOwllbHNlCiYjNDM7CQluZ2JlX3Jlc2V0KHd4KTsKIAogCXd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpOwogCkBAIC02MDYsMTEgJiM0Mzs2NDIsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CW5ldGlmX3RyYW5zX3VwZGF0ZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0MzsJc2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CW5nYmVfZG93bih3eCk7CiYjNDM7CW5nYmVfdXAod3gpOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQomIzQzOwkJbmdiZV9yZWluaXRfbG9ja2VkKHd4KTsKJiM0MzsJZWxzZQomIzQzOwkJbmdiZV9yZXNldCh3eCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsCiYjNDM7CS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCwKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLAogCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLApAQCAtNzAwLDYgJiM0Mzs3NjEsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTsKIAluZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpOwogCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bmdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCiAJbmV0ZGV2LSZndDtmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAogCQkJICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfApAQCAtNzk2LDYgJiM0Mzs4NTgsMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCWV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAl3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAKJiM0MzsJZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlX21hY190YWJsZTsKJiM0MzsKIAluZ2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODEyLDYgJiM0Mzs4NzgsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODIzLDYgJiM0Mzs4OTAsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTg1NCw2ICYjNDM7OTIzLDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIAogCXBoeWxpbmtfZGVzdHJveSh3eC0mZ3Q7cGh5bGluayk7CiAJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LApAQCAtODYzLDcgJiM0Mzs5MzQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgaW50IG5nYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODkwLDYgJiM0Mzs5NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuJiMzNDspOwogCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWRldmljZV93YWtldXBfZGlzYWJsZSgmYW1wO3BkZXYtJmd0O2Rldik7CiAKQEAgLTkxNCw2ICYjNDM7OTg3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0gewogCS5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLAogCS5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oCkBAIC0xMjUsNSAmIzQzOzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTsKIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpOwogdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCmluZGV4IDIwYzVhMjk1YzZjMjk2Li5kODVlZTgzMTkyZTRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9tYnguaCYjMzQ7CkBAIC05Myw2ICYjNDM7OTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiB7CiAJaW50IGVycjsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTA2LDYgJiM0MzsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTIzLDYgJiM0MzsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7CiAJdHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7CiAJd3hfdXBkYXRlX3N0YXRzKHd4KTsKJiM0MzsJd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTsKJiM0MzsJd3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpOwogCiAJd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7CiB9CkBAIC0xNDQsNiAmIzQzOzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAogCXN3aXRjaCAod3gtJmd0O21hYy50eXBlKSB7CkBAIC0xODcsNiAmIzQzOzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpCiAJdTggb2xkX2FkZHJbRVRIX0FMRU5dOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTsKIAlpZiAoZXJyICE9IDApCiAJCXd4X2Vycih3eCwgJiMzNDtIYXJkd2FyZSBFcnJvcjogJWRcbiYjMzQ7LCBlcnIpOwpAQCAtMjI0LDYgJiM0MzsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCXd4X2lycV9kaXNhYmxlKHd4KTsKIAl3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtMjkyLDYgJiM0MzszMDgsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KQogCXR4Z2JlX3VwX2NvbXBsZXRlKHd4KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwaHlsaW5rX3N0b3Aod3gtJmd0O3BoeWxpbmspOwomIzQzOwl3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpOwomIzQzOwl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwomIzQzOwl3eF9mcmVlX2lycSh3eCk7CiYjNDM7CXR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtJmd0O3ByaXYpOwomIzQzOwl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiYjNDM7CXR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGUKICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC00MDgsNiAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KQogCiAJd3gtJmd0O3NldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7CiAJd3gtJmd0O2RvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7CiAJc2V0X2JpdCgwLCAmYW1wO3d4LSZndDtmd2RfYml0bWFzayk7CiAKIAlzd2l0Y2ggKHd4LSZndDttYWMudHlwZSkgewpAQCAtNTE4LDEyICYjNDM7NTQ5LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCXR4Z2JlX2Rvd24od3gpOwogCXd4X2ZyZWVfaXJxKHd4KTsKIAl0eGdiZV9mcmVlX21pc2NfaXJxKHd4LSZndDtwcml2KTsKIAl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiAJdHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7CiYjNDM7b3V0OgogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAogCXJldHVybiAwOwpAQCAtNTQ0LDcgJiM0Mzs1NzksOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC02MDYsMTEgJiM0Mzs2NDIsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KQogCW11dGV4X3VubG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKIH0KIAotdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpCiB7CiAJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQogCQl0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTsKIAllbHNlCiAJCXR4Z2JlX3Jlc2V0KHd4KTsKQEAgLTY1NCw2ICYjNDM7NjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0gewogCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LAogCS5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSwKJiM0MzsJLm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LAogCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsCiAJLm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsCkBAIC03NDUsNiAmIzQzOzc4Miw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7CiAJdHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDt0eGdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCW5ldGRldi0mZ3Q7dWRwX3R1bm5lbF9uaWNfaW5mbyA9ICZhbXA7dHhnYmVfdWRwX3R1bm5lbHM7CiAKIAkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KQEAgLTgxNCw2ICYjNDM7ODUyLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCXd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAomIzQzOwllcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlOwomIzQzOwogCXR4Z2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODg5LDYgJiM0Mzs5MzEsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlnb3RvIGVycl9yZW1vdmVfcGh5OwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIApAQCAtOTE2LDYgJiM0Mzs5NTksOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogZXJyX2NhbmNlbF9zZXJ2aWNlOgogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIGVycl9mcmVlX21hY190YWJsZToKIAlrZnJlZSh3eC0mZ3Q7cnNzX2tleSk7CiAJa2ZyZWUod3gtJmd0O21hY190YWJsZSk7CkBAIC05NDgsNiAmIzQzOzk5Myw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogCiAJdHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7CiAJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKQEAgLTk1OSw3ICYjNDM7MTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0gewpAQCAtOTY5LDYgJiM0MzsxMDE3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHsKIAkucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsCiAJLnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaAppbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCkBAIC0zMTMsNyAmIzQzOzMxMyw3IEBAIGV4dGVybiBjaGFyIHR4Z2JlX2RyaXZlcl9uYW1lW107CiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7CiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IHR4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTsKLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcCiAJdW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjQ3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBXYW5neHVuIGV0aGVybmV0IGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgYG5nYmVgIGFuZCBgdHhnYmVgIGRyaXZlcnMgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvYC4gVGhpcyBpcyBhZGRpbmcgc29tZSBjcnVjaWFsIGVycm9yIGhhbmRsaW5nIGFuZCB0aW1lb3V0IHJlY292ZXJ5IGZ1bmN0aW9uYWxpdHkg4oCTIGJhc2ljYWxseSwgcm9idXN0aWZ5aW5nIHRoZSBkcml2ZXJzLiBXZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgYWNyb3NzIGB3eF9lcnIuY2AsIGB3eF9lcnIuaGAsIGFuZCBtb2RpZmljYXRpb25zIHRvIHNldmVyYWwgY29yZSBmaWxlczogYHd4X2h3LmNgLCBgd3hfbGliLmNgLCBgd3hfcHRwLmNgLCBgd3hfdHlwZS5oYCwgYG5nYmVfbWFpbi5jYCwgYW5kIGB0eGdiZV9tYWluLmNgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYWRkaW5nIFBDSSBlcnJvciByZWNvdmVyeSwgaGFuZGxpbmcgVFggdGltZW91dHMsIGFuZCBpbXBsZW1lbnRpbmcgVFggaGFuZyBkZXRlY3Rpb24uCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgYWJvdXQgcmVhY2hhYmlsaXR5LCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZXNlIGFyZSBQQ0kgZHJpdmVycywgYW5kIFdhbmd4dW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBzcGVjaWZpY2FsbHkuIFR5cGljYWxseSwgd2l0aG91dCBhIHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdG9yLCBvciBhIHdheSB0byBpbmplY3QgZXJyb3JzIG9yIHRpbWVvdXRzIHRocm91Z2ggZ2VuZXJpYyBuZXRkZXYgaW50ZXJmYWNlcywgdGhlc2UgcGF0aHMgYXJlbiYjMzk7dCBkaXJlY3RseSByZWFjaGFibGUuCgpCdXQgd2FpdCwgc3l6a2FsbGVyISBJdCBjYW4gZnV6eiBuZXRkZXZzLCBjcmVhdGluZyBvciB1c2luZyBleGlzdGluZyBvbmVzLiBCdXQsIGZvciBQQ0kgZHJpdmVycywgd2UmIzM5O3JlIHN0aWxsIHN0dWNrIHVubGVzcyB0aGVyZSYjMzk7cyBhIHZpcnR1YWwgZGV2aWNlIHJlcHJlc2VudGluZyB0aGUgaGFyZHdhcmUuIENhbiBzeXprYWxsZXIgcmVnaXN0ZXIgYSBXYW5neHVuIG5ldGRldiB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW50PwoKTm8sIHRoYXQmIzM5O3Mgbm90IGdvaW5nIHRvIHdvcmsuIGBuZ2JlX3Byb2JlYCBhbmQgYHR4Z2JlX3Byb2JlYCBib3RoIHJlbHkgb24gdGhlIFBDSSBkZXZpY2UgYmVpbmcgcHJlc2VudC4gVGhleSYjMzk7cmUgZ29pbmcgdG8gZmFpbCBpZiB0aGUgaGFyZHdhcmUgaXMgbm90IHRoZXJlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGV4cGxvcmUgaWYgdGhlcmUmIzM5O3MgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgV2FuZ3h1biBkZXZpY2VzLiBJJiMzOTtsbCBzZWFyY2ggdGhyb3VnaCB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vYCBkaXJlY3RvcnkgZm9yIGFueSByZWZlcmVuY2VzIHRvIGBuZ2JlYCBvciBgdHhnYmVgIHdpdGhpbiB0aGUgY29kZWJhc2UsIGhvcGluZyBmb3IgYSBoaW50IG9mIHZpcnR1YWxpemF0aW9uIG9yIGVtdWxhdGlvbiBzdXBwb3J0LiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gZWZmZWN0aXZlIHRlc3Rpbmcgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZ2JlX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTY2OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5nYmVfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNjg4LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjY4OTogKiBuZ2JlX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTAtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTY5NC0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjY5NTogKiBuZ2JlX3Byb2JlIGluaXRpYWxpemVzIGFuIHd4IGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTYtICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgd3ggcHJpdmF0ZSBzdHJ1Y3R1cmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTY5OC0gKiovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Njk5OnN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03MDAtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz05ODE9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy05ODMtXHQuaWRfdGFibGUgPSBuZ2JlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTg0Olx0LnByb2JlICAgID0gbmdiZV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy05ODUtXHQucmVtb3ZlICAgPSBuZ2JlX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXYW5neHVuIFBDSSBEcml2ZXImIzM5O3MgVmlydHVhbGl6YXRpb24gTGltaXRhdGlvbnMqKgoKT2theSwgc28gdGhpcyBXYW5neHVuIGRyaXZlciBpcyAqZGVmaW5pdGVseSogYSBQQ0ktc3BlY2lmaWMgY3JlYXR1cmUuIEl0JiMzOTtzIGJ1aWx0IHRvIGludGVyZmFjZSB3aXRoIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggbWVhbnMgdGhlIHdob2xlIHByb2JlIGZ1bmN0aW9uLCB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQsIHdvbiYjMzk7dCBldmVuICpmaXJlKiB1bmxlc3MgdGhhdCBoYXJkd2FyZSBpcyBwcmVzZW50LiBUaGF0IGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDt1bnJlYWNoYWJsZSBjb2RlJiMzNDsgaW4gYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBHQ0UsIFFFTVUsIHRoZSB3aG9sZSBsb3Qg4oCTIHVubGVzcyB5b3UmIzM5O3JlIGRvaW5nIGZ1bGwgUENJIHBhc3N0aHJvdWdoIG9mIHRoZSBXYW5neHVuIGRldmljZS4gV2hpY2gsIGxldCYjMzk7cyBiZSBob25lc3QsIGlzIGEgcGFpbi4KCldhaXQgYSBzZWNvbmQsIHRob3VnaC4uLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGVyZSBhcmUgZW11bGF0b3JzIGZvciBvdGhlciBraW5kcyBvZiBkZXZpY2VzLCBzbyBtYXliZSBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLiBJIGtub3cgc3l6a2FsbGVyIGhhcyBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYW5kIGBuZXRkZXZzaW1gIHByb3ZpZGVzIHNvbWUgbmV0ZGV2IGZlYXR1cmVzLiBQZXJoYXBzIHRoZXJlJiMzOTtzIHNvbWUgb2JzY3VyZSBjb3JuZXIgb2YgdGhlIGtlcm5lbCwgc29tZSBoaWRkZW4gZ2VtLCB0aGF0IGVtdWxhdGVzIFdhbmd4dW4gUENJIGRldmljZXM/IEl0JiMzOTtzIHVubGlrZWx5LCBidXQgSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRvIGVuc3VyZSB0aGVyZSBpc24mIzM5O3Qgc29tZSBQQ0kgZW11bGF0aW9uIGZvciBXYW5neHVuIHRoYXQgSSYjMzk7dmUgb3Zlcmxvb2tlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZ1bGx5IGF3YXJlIG9mIHRoZSBmYWN0cyBiZWZvcmUgZGlzbWlzc2luZyB0aGUgcG9zc2liaWxpdHkgb2YgdmlydHVhbGl6ZWQgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOR0JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyODpjb25maWcgTkdCRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4NTpjb25maWcgTkdCRVZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODYtXHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX1RYR0JFVkYpICYjNDM7PSB0eGdiZXZmL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19OR0JFKSAmIzQzOz0gbmdiZS9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX05HQkVWRikgJiM0Mzs9IG5nYmV2Zi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvTWFrZWZpbGUtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19OR0JFKSAmIzQzOz0gbmdiZS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvTWFrZWZpbGUtOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmgtMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuaDo0OiNpZm5kZWYgX05HQkVfRVRIVE9PTF9IX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5oOjU6I2RlZmluZSBfTkdCRV9FVEhUT09MX0hfXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmgtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuaD03PXZvaWQgbmdiZV9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmgtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuaDo5OiNlbmRpZiAvKiBfTkdCRV9FVEhUT09MX0hfICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYz0xMz1pbnQgbmdiZV9lZXByb21fY2hrc3VtX2hvc3RpZihzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjE5Olx0YnVmZmVyLmhkci5yZXEuY21kID0gTkdCRV9GV19FRVBST01fQ0hFQ0tTVU1fQ01EO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy0yMC1cdGJ1ZmZlci5oZHIucmVxLmJ1Zl9sZW5oID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtMjEtXHRidWZmZXIuaGRyLnJlcS5idWZfbGVubCA9IDA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjIyOlx0YnVmZmVyLmhkci5yZXEuY2hlY2tzdW0gPSBOR0JFX0ZXX0NNRF9ERUZBVUxUX0NIRUNLU1VNO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy0yMy1cdC8qIGNvbnZlcnQgb2Zmc2V0IGZyb20gd29yZHMgdG8gYnl0ZXMgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTMzLVx0dG1wID0gcmQzMmEod3gsIFdYX01OR19NQk9YLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6MzQ6XHRpZiAodG1wID09IE5HQkVfRldfQ01EX1NUX1BBU1MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTM1LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jPTM5PXN0YXRpYyBpbnQgbmdiZV9yZXNldF9taXNjKHN0cnVjdCB3eCAqd3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy00My1cdFx0LyogZ3BpbzAgaXMgdXNlZCB0byBwb3dlciBvbi9vZmYgY29udHJvbCovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjQ0Olx0XHR3cjMyKHd4LCBOR0JFX0dQSU9fRERSLCAweDEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy00NS1cdFx0bmdiZV9zZnBfbW9kdWxlc190eHJ4X3Bvd2VyY3RsKHd4LCBmYWxzZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYz01MD12b2lkIG5nYmVfc2ZwX21vZHVsZXNfdHhyeF9wb3dlcmN0bChzdHJ1Y3Qgd3ggKnd4LCBib29sIHN3aSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTUyLVx0LyogZ3BpbzAgaXMgdXNlZCB0byBwb3dlciBvbiBjb250cm9sIC4gMCBpcyBvbiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYzo1MzpcdHdyMzIod3gsIE5HQkVfR1BJT19EUiwgc3dpID8gMCA6IE5HQkVfR1BJT19EUl8wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtNTQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM9NjQ9aW50IG5nYmVfcmVzZXRfaHcoc3RydWN0IHd4ICp3eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTkzLVx0LyogcmVzZXQgbnVtX3Jhcl9lbnRyaWVzIHRvIDEyOCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYzo5NDpcdHd4LVx1MDAzZW1hYy5udW1fcmFyX2VudHJpZXMgPSBOR0JFX1JBUl9FTlRSSUVTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy05NS1cdHd4X2luaXRfcnhfYWRkcnMod3gpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmgtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3Lmg6NzojaWZuZGVmIF9OR0JFX0hXX0hfXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5oOjg6I2RlZmluZSBfTkdCRV9IV19IX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuaC05LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3Lmg9MTI9aW50IG5nYmVfcmVzZXRfaHcoc3RydWN0IHd4ICp3eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5oOjEzOiNlbmRpZiAvKiBfTkdCRV9IV19IXyAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz0zMz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MzQ6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMX1cpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MzU6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEEyKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjM2Olx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBMlMpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Mzc6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEE0KSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjM4Olx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBNFMpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Mzk6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMMikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0MDpcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRV9ERVZfSURfRU1fV1gxODYwQUwyUykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0MTpcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRV9ERVZfSURfRU1fV1gxODYwQUw0KSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjQyOlx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBTDRTKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjQzOlx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBMQykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0NDpcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRV9ERVZfSURfRU1fV1gxODYwQTEpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NDU6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEExTCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy00Ni1cdC8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM9Njg9c3RhdGljIHZvaWQgbmdiZV9pbml0X3R5cGVfY29kZShzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03My1cdHd4LVx1MDAzZW1hYy50eXBlID0gd3hfbWFjX2VtO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjc0Olx0dHlwZV9tYXNrID0gKHUxNikod3gtXHUwMDNlc3Vic3lzdGVtX2RldmljZV9pZCBcdTAwMjYgTkdCRV9PRU1fTUFTSyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNzUtXHRuY3NpX21hc2sgPSB3eC1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlX2lkIFx1MDAyNiBXWF9OQ1NJX01BU0s7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg0LVx0d3gtXHUwMDNlbmNzaV9lbmFibGVkID0gKG5jc2lfbWFzayA9PSBXWF9OQ1NJX1NVUCB8fFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjg1Olx0XHRcdCAgIHR5cGVfbWFzayA9PSBOR0JFX1NVQklEX09DUF9DQVJEKSA/IDEgOiAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg3LVx0c3dpdGNoICh0eXBlX21hc2spIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4ODpcdGNhc2UgTkdCRV9TVUJJRF9MWV9ZVDg1MjFTX1NGUDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4OTpcdGNhc2UgTkdCRV9TVUJJRF9MWV9NODhFMTUxMl9TRlA6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTA6XHRjYXNlIE5HQkVfU1VCSURfWVQ4NTIxU19TRlBfR1BJTzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo5MTpcdGNhc2UgTkdCRV9TVUJJRF9JTlRFUk5BTF9ZVDg1MjFTX1NGUF9HUElPOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTkyLVx0XHR3eC1cdTAwM2VncGlvX2N0cmwgPSAxO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz0xMDQ9c3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTA5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExMDpcdHd4LVx1MDAzZW1hYy5udW1fcmFyX2VudHJpZXMgPSBOR0JFX1JBUl9FTlRSSUVTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExMTpcdHd4LVx1MDAzZW1hYy5tYXhfcnhfcXVldWVzID0gTkdCRV9NQVhfUlhfUVVFVUVTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExMjpcdHd4LVx1MDAzZW1hYy5tYXhfdHhfcXVldWVzID0gTkdCRV9NQVhfVFhfUVVFVUVTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExMzpcdHd4LVx1MDAzZW1hYy5tY2Z0X3NpemUgPSBOR0JFX01DX1RCTF9TSVpFO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExNDpcdHd4LVx1MDAzZW1hYy52ZnRfc2l6ZSA9IE5HQkVfU1BfVkZUX1RCTF9TSVpFO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExNTpcdHd4LVx1MDAzZW1hYy5yeF9wYl9zaXplID0gTkdCRV9SWF9QQl9TSVpFO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjExNjpcdHd4LVx1MDAzZW1hYy50eF9wYl9zaXplID0gTkdCRV9UREJfUEJfU1o7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTE3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMjYtXHQvKiBTZXQgY29tbW9uIGNhcGFiaWxpdHkgZmxhZ3MgYW5kIHNldHRpbmdzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTI3Olx0d3gtXHUwMDNlbWF4X3FfdmVjdG9ycyA9IE5HQkVfTUFYX01TSVhfVkVDVE9SUztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxMjg6XHRlcnIgPSB3eF9nZXRfcGNpZV9tc2l4X2NvdW50cyh3eCwgXHUwMDI2bXNpeF9jb3VudCwgTkdCRV9NQVhfTVNJWF9WRUNUT1JTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMjktXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTMzOlx0d3gtXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLmxpbWl0ID0gbWluX3QoaW50LCBOR0JFX01BWF9SU1NfSU5ESUNFUyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMzQtXHRcdFx0XHRcdFx0ICAgbnVtX29ubGluZV9jcHVzKCkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xNDEtXHQvKiBzZXQgZGVmYXVsdCByaW5nIHNpemVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTQyOlx0d3gtXHUwMDNldHhfcmluZ19jb3VudCA9IE5HQkVfREVGQVVMVF9UWEQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTQzOlx0d3gtXHUwMDNlcnhfcmluZ19jb3VudCA9IE5HQkVfREVGQVVMVF9SWEQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTE0NS1cdC8qIHNldCBkZWZhdWx0IHdvcmsgbGltaXRzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTQ2Olx0d3gtXHUwMDNldHhfd29ya19saW1pdCA9IE5HQkVfREVGQVVMVF9UWF9XT1JLO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE0NzpcdHd4LVx1MDAzZXJ4X3dvcmtfbGltaXQgPSBOR0JFX0RFRkFVTFRfUlhfV09SSztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xNDgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTE4NT1zdGF0aWMgdm9pZCBuZ2JlX2lycV9lbmFibGUoc3RydWN0IHd4ICp3eCwgYm9vbCBxdWV1ZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTE4OS1cdC8qIGVuYWJsZSBtaXNjIGludGVycnVwdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE5MDpcdG1hc2sgPSBOR0JFX1BYX01JU0NfSUVOX01BU0s7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTkxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yMDAtXHRpZiAocXVldWVzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjIwMTpcdFx0d3hfaW50cl9lbmFibGUod3gsIE5HQkVfSU5UUl9BTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTIwMi1cdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoyMDM6XHRcdHd4X2ludHJfZW5hYmxlKHd4LCBOR0JFX0lOVFJfTUlTQyh3eCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTIwNC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTIxMT1zdGF0aWMgaXJxcmV0dXJuX3QgbmdiZV9pbnRyKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yMzQtXHRlaWNyX21pc2MgPSB3eF9taXNjX2lzYih3eCwgV1hfSVNCX01JU0MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjIzNTpcdGlmICh1bmxpa2VseShlaWNyX21pc2MgXHUwMDI2IE5HQkVfUFhfTUlTQ19JQ19USU1FU1lOQykpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMjM2LVx0XHR3eF9wdHBfY2hlY2tfcHBzX2V2ZW50KHd4KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM9MjQ4PXN0YXRpYyBpcnFyZXR1cm5fdCBfX25nYmVfbXNpeF9taXNjKHN0cnVjdCB3eCAqd3gsIHUzMiBlaWNyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTI0OS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MjUwOlx0aWYgKGVpY3IgXHUwMDI2IE5HQkVfUFhfTUlTQ19JQ19WRl9NQk9YKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTI1MS1cdFx0d3hfbXNnX3Rhc2sod3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTI1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoyNTM6XHRpZiAodW5saWtlbHkoZWljciBcdTAwMjYgTkdCRV9QWF9NSVNDX0lDX1RJTUVTWU5DKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yNTQtXHRcdHd4X3B0cF9jaGVja19wcHNfZXZlbnQod3gpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz02OTk9c3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03MzQtXHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IHd4KSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo3MzU6XHRcdFx0XHRcdCBOR0JFX01BWF9UWF9RVUVVRVMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NzM2Olx0XHRcdFx0XHQgTkdCRV9NQVhfUlhfUVVFVUVTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03MzctXHRpZiAoIW5ldGRldikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03NTktXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo3NjA6XHRwY2lfc3Jpb3Zfc2V0X3RvdGFsdmZzKHBkZXYsIE5HQkVfTUFYX1ZGU19EUlZfTElNSVQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc2MS1cdHd4LVx1MDAzZWRyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNzkyLVx0LyogY2hlY2sgaWYgZmxhc2ggbG9hZCBpcyBkb25lIGFmdGVyIGh3IHBvd2VyIHVwICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NzkzOlx0ZXJyID0gd3hfY2hlY2tfZmxhc2hfbG9hZCh3eCwgTkdCRV9TUElfSUxEUl9TVEFUVVNfUEVSU1QpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc5NC1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNzk1LVx0XHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo3OTY6XHRlcnIgPSB3eF9jaGVja19mbGFzaF9sb2FkKHd4LCBOR0JFX1NQSV9JTERSX1NUQVRVU19QV1JSU1QpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc5Ny1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTgxMi1cdGlmICh3eC1cdTAwM2VidXMuZnVuYyA9PSAwKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6ODEzOlx0XHR3cjMyKHd4LCBOR0JFX0NBTFNVTV9DQVBfU1RBVFVTLCAweDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjgxNDpcdFx0d3IzMih3eCwgTkdCRV9FRVBST01fVkVSU0lPTl9TVE9SRV9SRUcsIDB4MCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODE1LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4MTY6XHRcdGUycm9tX2Nrc3VtX2NhcCA9IHJkMzIod3gsIE5HQkVfQ0FMU1VNX0NBUF9TVEFUVVMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjgxNzpcdFx0c2F2ZWRfdmVyID0gcmQzMih3eCwgTkdCRV9FRVBST01fVkVSU0lPTl9TVE9SRV9SRUcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTgxOC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODQ1LVx0XHR3eF9yZWFkX2VlX2hvc3RpZih3eCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4NDY6XHRcdFx0XHQgIHd4LVx1MDAzZWVlcHJvbS5zd19yZWdpb25fb2Zmc2V0ICYjNDM7IE5HQkVfRUVQUk9NX1ZFUlNJT05fSCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy04NDctXHRcdFx0XHQgIFx1MDAyNmUycm9tX3Zlcik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg0OS1cdFx0d3hfcmVhZF9lZV9ob3N0aWYod3gsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6ODUwOlx0XHRcdFx0ICB3eC1cdTAwM2VlZXByb20uc3dfcmVnaW9uX29mZnNldCAmIzQzOyBOR0JFX0VFUFJPTV9WRVJTSU9OX0wsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODUxLVx0XHRcdFx0ICBcdTAwMjZlMnJvbV92ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg1Mi1cdFx0ZXRyYWNrX2lkIHw9IGUycm9tX3ZlcjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4NTM6XHRcdHdyMzIod3gsIE5HQkVfRUVQUk9NX1ZFUlNJT05fU1RPUkVfUkVHLCBldHJhY2tfaWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg1NC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM9MTY9c3RhdGljIGludCBuZ2JlX3BoeV9yZWFkX3JlZ19pbnRlcm5hbChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdudW0pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTIxLVx0XHRyZXR1cm4gMHhmZmZmO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjIyOlx0cmV0dXJuICh1MTYpcmQzMih3eCwgTkdCRV9QSFlfQ09ORklHKHJlZ251bSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTIzLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM9MjU9c3RhdGljIGludCBuZ2JlX3BoeV93cml0ZV9yZWdfaW50ZXJuYWwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTI5LVx0aWYgKHBoeV9hZGRyID09IDApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MzA6XHRcdHdyMzIod3gsIE5HQkVfUEhZX0NPTkZJRyhyZWdudW0pLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmMtMzEtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM9Nzg9c3RhdGljIHZvaWQgbmdiZV9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmMtMTAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjEwMjpcdHdyMzJtKHd4LCBOR0JFX0NGR19MQU5fU1BFRUQsIDB4MywgbGFuX3NwZWVkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0xMDMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oLTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmg6NzojaWZuZGVmIF9OR0JFX01ESU9fSF9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uaDo4OiNkZWZpbmUgX05HQkVfTURJT19IX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oLTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmg9MTA9aW50IG5nYmVfbWRpb19pbml0KHN0cnVjdCB3eCAqd3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oOjExOiNlbmRpZiAvKiBfTkdCRV9NRElPX0hfICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NDojaWZuZGVmIF9OR0JFX1RZUEVfSF9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1OiNkZWZpbmUgX05HQkVfVFlQRV9IX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTA6LyoqKioqKioqKioqKiBOR0JFX3JlZ2lzdGVyLmggKioqKioqKioqKioqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTExLS8qIERldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMjojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMX1dcdFx0MHgwMTAwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTM6I2RlZmluZSBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBMlx0XHRcdDB4MDEwMVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjE0OiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwQTJTXHRcdDB4MDEwMlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjE1OiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwQTRcdFx0XHQweDAxMDNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxNjojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEE0U1x0XHQweDAxMDRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxNzojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMMlx0XHQweDAxMDVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxODojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMMlNcdFx0MHgwMTA2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTk6I2RlZmluZSBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBTDRcdFx0MHgwMTA3XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MjA6I2RlZmluZSBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBTDRTXHRcdDB4MDEwOFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjIxOiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwTENcdFx0XHQweDAxMDlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoyMjojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEExXHRcdFx0MHgwMTBhXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MjM6I2RlZmluZSBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBMUxcdFx0MHgwMTBiXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMjUtLyogU3Vic3lzdGVtIElEICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MjY6I2RlZmluZSBOR0JFX1NVQklEX004OEUxNTEyX1NGUFx0XHRcdDB4MDAwM1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjI3OiNkZWZpbmUgTkdCRV9TVUJJRF9PQ1BfQ0FSRFx0XHRcdDB4MDA0MFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjI4OiNkZWZpbmUgTkdCRV9TVUJJRF9MWV9NODhFMTUxMl9TRlBcdFx0MHgwMDUwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Mjk6I2RlZmluZSBOR0JFX1NVQklEX004OEUxNTEyX1JKNDVcdFx0MHgwMDUxXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MzA6I2RlZmluZSBOR0JFX1NVQklEX004OEUxNTEyX01JWFx0XHRcdDB4MDA1MlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjMxOiNkZWZpbmUgTkdCRV9TVUJJRF9ZVDg1MjFTX1NGUFx0XHRcdDB4MDA2MFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjMyOiNkZWZpbmUgTkdCRV9TVUJJRF9JTlRFUk5BTF9ZVDg1MjFTX1NGUFx0XHQweDAwNjFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDozMzojZGVmaW5lIE5HQkVfU1VCSURfWVQ4NTIxU19TRlBfR1BJT1x0XHQweDAwNjJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDozNDojZGVmaW5lIE5HQkVfU1VCSURfSU5URVJOQUxfWVQ4NTIxU19TRlBfR1BJT1x0MHgwMDY0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MzU6I2RlZmluZSBOR0JFX1NVQklEX0xZX1lUODUyMVNfU0ZQXHRcdDB4MDA3MFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjM2OiNkZWZpbmUgTkdCRV9TVUJJRF9SR01JSV9GUEdBXHRcdFx0MHgwMDgwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Mzg6I2RlZmluZSBOR0JFX09FTV9NQVNLXHRcdFx0XHQweDAwRkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0zOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNDEtLyogY2hpcCBjb250cm9sIFJlZ2lzdGVycyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjQyOiNkZWZpbmUgTkdCRV9NSVNfUFJCX0NUTFx0XHRcdDB4MTAwMTBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC00My0vKiBGTUdSIFJlZ2lzdGVycyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjQ0OiNkZWZpbmUgTkdCRV9TUElfSUxEUl9TVEFUVVNcdFx0XHQweDEwMTIwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NDU6I2RlZmluZSBOR0JFX1NQSV9JTERSX1NUQVRVU19QRVJTVFx0XHRCSVQoMCkgLyogUENJRV9QRVJTVCBpcyBkb25lICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NDY6I2RlZmluZSBOR0JFX1NQSV9JTERSX1NUQVRVU19QV1JSU1RcdFx0QklUKDEpIC8qIFBvd2VyIG9uIHJlc2V0IGlzIGRvbmUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC00Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC00OC0vKiBDaGVja3N1bSBhbmQgRUVQUk9NIHBvaW50ZXJzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NDk6I2RlZmluZSBOR0JFX0NBTFNVTV9DT01NQU5EXHRcdFx0MHhFOVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjUwOiNkZWZpbmUgTkdCRV9DQUxTVU1fQ0FQX1NUQVRVU1x0XHRcdDB4MTAyMjRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1MTojZGVmaW5lIE5HQkVfRUVQUk9NX1ZFUlNJT05fU1RPUkVfUkVHXHRcdDB4MTAyMkNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1MjojZGVmaW5lIE5HQkVfU0FOX01BQ19BRERSX1BUUlx0XHRcdDB4MThcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1MzojZGVmaW5lIE5HQkVfREVWSUNFX0NBUFNcdFx0XHQweDFDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NTQ6I2RlZmluZSBOR0JFX0VFUFJPTV9WRVJTSU9OX0xcdFx0XHQweDFEXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NTU6I2RlZmluZSBOR0JFX0VFUFJPTV9WRVJTSU9OX0hcdFx0XHQweDFFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNTctLyogR1BJTyBSZWdpc3RlcnMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1ODojZGVmaW5lIE5HQkVfR1BJT19EUlx0XHRcdFx0MHgxNDgwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjU5OiNkZWZpbmUgTkdCRV9HUElPX0REUlx0XHRcdFx0MHgxNDgwNFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTYwLS8qR1BJTyBiaXQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo2MTojZGVmaW5lIE5HQkVfR1BJT19EUl8wXHRcdFx0XHRCSVQoMCkgLyogU0RQMCBEYXRhIFZhbHVlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NjI6I2RlZmluZSBOR0JFX0dQSU9fRFJfMVx0XHRcdFx0QklUKDEpIC8qIFNEUDEgRGF0YSBWYWx1ZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjYzOiNkZWZpbmUgTkdCRV9HUElPX0REUl8wXHRcdFx0XHRCSVQoMCkgLyogU0RQMCBJTyBkaXJlY3Rpb24gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo2NDojZGVmaW5lIE5HQkVfR1BJT19ERFJfMVx0XHRcdFx0QklUKDEpIC8qIFNEUDEgSU8gZGlyZWN0aW9uICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNjYtLyogRXh0ZW5kZWQgSW50ZXJydXB0IEVuYWJsZSBTZXQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo2NzojZGVmaW5lIE5HQkVfUFhfTUlTQ19JRU5fREVWX1JTVFx0XHRCSVQoMTApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Njg6I2RlZmluZSBOR0JFX1BYX01JU0NfSUVOX1RJTUVTWU5DXHRcdEJJVCgxMSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo2OTojZGVmaW5lIE5HQkVfUFhfTUlTQ19JRU5fRVRIX0xLXHRcdFx0QklUKDE4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjcwOiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lFTl9JTlRfRVJSXHRcdEJJVCgyMClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo3MTojZGVmaW5lIE5HQkVfUFhfTUlTQ19JQ19WRl9NQk9YXHRcdFx0QklUKDIzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjcyOiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lFTl9HUElPXHRcdFx0QklUKDI2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjczOiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lFTl9NQVNLICggXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo3NDpcdFx0XHRcdE5HQkVfUFhfTUlTQ19JRU5fREVWX1JTVCB8IFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NzU6XHRcdFx0XHROR0JFX1BYX01JU0NfSUVOX1RJTUVTWU5DIHwgXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo3NjpcdFx0XHRcdE5HQkVfUFhfTUlTQ19JRU5fRVRIX0xLIHwgXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo3NzpcdFx0XHRcdE5HQkVfUFhfTUlTQ19JRU5fSU5UX0VSUiB8IFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Nzg6XHRcdFx0XHROR0JFX1BYX01JU0NfSUNfVkZfTUJPWCB8IFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Nzk6XHRcdFx0XHROR0JFX1BYX01JU0NfSUVOX0dQSU8pXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtODAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtODEtLyogRXh0ZW5kZWQgSW50ZXJydXB0IENhdXNlIFJlYWQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo4MjojZGVmaW5lIE5HQkVfUFhfTUlTQ19JQ19USU1FU1lOQ1x0XHRCSVQoMTEpIC8qIHRpbWUgc3luYyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjg0OiNkZWZpbmUgTkdCRV9JTlRSX0FMTFx0XHRcdFx0MHgxRkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo4NTojZGVmaW5lIE5HQkVfSU5UUl9NSVNDKEEpXHRcdFx0QklUKChBKS1cdTAwM2Vtc2l4X2VudHJ5LVx1MDAzZWVudHJ5KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTg2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjg3OiNkZWZpbmUgTkdCRV9QSFlfQ09ORklHKHJlZ19vZmZzZXQpXHRcdCgweDE0MDAwICYjNDM7ICgocmVnX29mZnNldCkgKiA0KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo4ODojZGVmaW5lIE5HQkVfQ0ZHX0xBTl9TUEVFRFx0XHRcdDB4MTQ0NDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo4OTojZGVmaW5lIE5HQkVfQ0ZHX1BPUlRfU1RcdFx0XHQweDE0NDA0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6OTE6I2RlZmluZSBOR0JFX0ZXX0VFUFJPTV9DSEVDS1NVTV9DTURcdFx0MHhFOVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjkyOiNkZWZpbmUgTkdCRV9GV19OVk1fREFUQV9PRkZTRVRcdFx0XHQzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6OTM6I2RlZmluZSBOR0JFX0ZXX0NNRF9ERUZBVUxUX0NIRUNLU1VNXHRcdDB4RkYgLyogY2hlY2tzdW0gYWx3YXlzIDB4RkYgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo5NDojZGVmaW5lIE5HQkVfRldfQ01EX1NUX1BBU1NcdFx0XHQweDgwNjU4MzgzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6OTU6I2RlZmluZSBOR0JFX0ZXX0NNRF9TVF9GQUlMXHRcdFx0MHg3MDY1NzM3NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTk2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjk3OiNkZWZpbmUgTkdCRV9NQVhfRkRJUl9JTkRJQ0VTXHRcdFx0N1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjk4OiNkZWZpbmUgTkdCRV9NQVhfUlNTX0lORElDRVNcdFx0XHQ4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtOTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTAwOiNkZWZpbmUgTkdCRV9NQVhfUlhfUVVFVUVTXHRcdFx0KE5HQkVfTUFYX0ZESVJfSU5ESUNFUyAmIzQzOyAxKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwMTojZGVmaW5lIE5HQkVfTUFYX1RYX1FVRVVFU1x0XHRcdChOR0JFX01BWF9GRElSX0lORElDRVMgJiM0MzsgMSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTAzOiNkZWZpbmUgTkdCRV9FVEhfTEVOR1RIX09GX0FERFJFU1NcdFx0NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwNDojZGVmaW5lIE5HQkVfTUFYX01TSVhfVkVDVE9SU1x0XHRcdDB4MDlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMDU6I2RlZmluZSBOR0JFX1JBUl9FTlRSSUVTXHRcdFx0MzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMDY6I2RlZmluZSBOR0JFX1JYX1BCX1NJWkVcdFx0XHRcdDQyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTA3OiNkZWZpbmUgTkdCRV9NQ19UQkxfU0laRVx0XHRcdDEyOFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwODojZGVmaW5lIE5HQkVfU1BfVkZUX1RCTF9TSVpFXHRcdFx0MTI4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTA5OiNkZWZpbmUgTkdCRV9UREJfUEJfU1pcdFx0XHRcdCgyMCAqIDEwMjQpIC8qIDE2MEtCIFBhY2tldCBCdWZmZXIgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTExLS8qIFRYL1JYIGRlc2NyaXB0b3IgZGVmaW5lcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExMjojZGVmaW5lIE5HQkVfREVGQVVMVF9UWERcdFx0XHQ1MTIgLyogZGVmYXVsdCByaW5nIHNpemUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMTM6I2RlZmluZSBOR0JFX0RFRkFVTFRfVFhfV09SS1x0XHRcdDI1NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExNDojZGVmaW5lIE5HQkVfTUFYX1RYRFx0XHRcdFx0ODE5MlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExNTojZGVmaW5lIE5HQkVfTUlOX1RYRFx0XHRcdFx0MTI4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExNzojZGVmaW5lIE5HQkVfREVGQVVMVF9SWERcdFx0XHQ1MTIgLyogZGVmYXVsdCByaW5nIHNpemUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMTg6I2RlZmluZSBOR0JFX0RFRkFVTFRfUlhfV09SS1x0XHRcdDI1NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExOTojZGVmaW5lIE5HQkVfTUFYX1JYRFx0XHRcdFx0ODE5MlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEyMDojZGVmaW5lIE5HQkVfTUlOX1JYRFx0XHRcdFx0MTI4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEyMjojZGVmaW5lIE5HQkVfTUFYX1ZGU19EUlZfTElNSVRcdFx0XHQ3XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTIzLWV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg9MTI4PXZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEzMDojZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL01ha2VmaWxlLTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19OR0JFKSAmIzQzOz0gbmdiZXZmLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL01ha2VmaWxlLTgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYz0yOD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZXZmX3BjaV90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6Mjk6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUxfVykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MzA6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTIpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjMxOlx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEEyUykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MzI6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTQpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjMzOlx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEE0UykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MzQ6XHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUwyKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzozNTpcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDJTKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzozNjpcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDQpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjM3Olx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMNFMpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjM4Olx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2ME5DU0kpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjM5Olx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEExKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzo0MDpcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDEpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTQxLVx0LyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM9NjA9c3RhdGljIGludCBuZ2JldmZfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtNzctXHR3eC1cdTAwM2VtYWMudHlwZSA9IHd4X21hY19lbTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6Nzg6XHR3eC1cdTAwM2VtYWMubWF4X21zaXhfdmVjdG9ycyA9IE5HQkVWRl9NQVhfTVNJWF9WRUNUT1JTO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy03OS1cdC8qIGxvY2sgdG8gcHJvdGVjdCBtYWlsYm94IGFjY2Vzc2VzICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0xMDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEwMTpcdHd4LVx1MDAzZW1hYy5tYXhfdHhfcXVldWVzID0gTkdCRVZGX01BWF9UWF9RVUVVRVM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEwMjpcdHd4LVx1MDAzZW1hYy5tYXhfcnhfcXVldWVzID0gTkdCRVZGX01BWF9SWF9RVUVVRVM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTEwMy1cdC8qIEVuYWJsZSBkeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGVzICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0xMDctXHQvKiBzZXQgZGVmYXVsdCByaW5nIHNpemVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEwODpcdHd4LVx1MDAzZXR4X3JpbmdfY291bnQgPSBOR0JFVkZfREVGQVVMVF9UWEQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEwOTpcdHd4LVx1MDAzZXJ4X3JpbmdfY291bnQgPSBOR0JFVkZfREVGQVVMVF9SWEQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTExMC1cdC8qIHNldCBkZWZhdWx0IHdvcmsgbGltaXRzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjExMTpcdHd4LVx1MDAzZXR4X3dvcmtfbGltaXQgPSBOR0JFVkZfREVGQVVMVF9UWF9XT1JLO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxMTI6XHR3eC1cdTAwM2VyeF93b3JrX2xpbWl0ID0gTkdCRVZGX0RFRkFVTFRfUlhfV09SSztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTEzLVx0d3gtXHUwMDNlc2V0X251bV9xdWV1ZXMgPSBuZ2JldmZfc2V0X251bV9xdWV1ZXM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYz0xMzY9c3RhdGljIGludCBuZ2JldmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0xNjYtXHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IHd4KSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTY3Olx0XHRcdFx0XHQgTkdCRVZGX01BWF9UWF9RVUVVRVMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjE2ODpcdFx0XHRcdFx0IE5HQkVWRl9NQVhfUlhfUVVFVUVTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTY5LVx0aWYgKCFuZXRkZXYpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oLTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjQ6I2lmbmRlZiBfTkdCRVZGX1RZUEVfSF9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6NTojZGVmaW5lIF9OR0JFVkZfVFlQRV9IX1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaC02LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaC03LS8qIERldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6ODojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUxfVyAgICAgICAgICAgICAweDAxMTBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6OTojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTIgICAgICAgICAgICAgICAweDAxMTFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTA6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEEyUyAgICAgICAgICAgICAgMHgwMTEyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjExOiNkZWZpbmUgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBNCAgICAgICAgICAgICAgIDB4MDExM1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxMjojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTRTICAgICAgICAgICAgICAweDAxMTRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTM6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMMiAgICAgICAgICAgICAgMHgwMTE1XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjE0OiNkZWZpbmUgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDJTICAgICAgICAgICAgIDB4MDExNlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxNTojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUw0ICAgICAgICAgICAgICAweDAxMTdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTY6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMNFMgICAgICAgICAgICAgMHgwMTE4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjE3OiNkZWZpbmUgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBOQ1NJICAgICAgICAgICAgIDB4MDExOVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxODojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTEgICAgICAgICAgICAgICAweDAxMWFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTk6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMMSAgICAgICAgICAgICAgMHgwMTFiXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyMTojZGVmaW5lIE5HQkVWRl9NQVhfTVNJWF9WRUNUT1JTICAgICAgICAgICAgICAgMVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyMjojZGVmaW5lIE5HQkVWRl9NQVhfUlhfUVVFVUVTICAgICAgICAgICAgICAgICAgMVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyMzojZGVmaW5lIE5HQkVWRl9NQVhfVFhfUVVFVUVTICAgICAgICAgICAgICAgICAgMVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyNDojZGVmaW5lIE5HQkVWRl9ERUZBVUxUX1RYRCAgICAgICAgICAgICAgICAgICAgMTI4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjI1OiNkZWZpbmUgTkdCRVZGX0RFRkFVTFRfUlhEICAgICAgICAgICAgICAgICAgICAxMjhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MjY6I2RlZmluZSBOR0JFVkZfREVGQVVMVF9UWF9XT1JLICAgICAgICAgICAgICAgIDI1NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyNzojZGVmaW5lIE5HQkVWRl9ERUZBVUxUX1JYX1dPUksgICAgICAgICAgICAgICAgMjU2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oLTI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyOTojZW5kaWYgLyogX05HQkVWRl9UWVBFX0hfICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2ODAKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBXb3JsZCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIFdhbmd4dW4gZHJpdmVycyDigJMgc3BlY2lmaWNhbGx5IHRoZSBgbmdiZWAgYW5kIGB0eGdiZWAgZHJpdmVycy4gVGhlc2UgYXJlLCBhcyBJIHN1c3BlY3RlZCwgZGVzaWduZWQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGVyZSYjMzk7cyBubyB2aXJ0dWFsIGRldmljZSBlbXVsYXRpb24gb3IgYW55dGhpbmcgbGlrZSB0aGF0IGJ1aWx0IGludG8gdGhlIGtlcm5lbCBmb3IgdGhlbS4gVGhpcyBtZWFucyB0aGUgY29kZSBiZWluZyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoIOKAkyB0aGUgZXJyb3IgaGFuZGxpbmcsIHRoZSBUWCB0aW1lb3V0IHJlY292ZXJ5LCBhbmQgdGhlIFRYIGhhbmcgZGV0ZWN0aW9uIOKAkyBpcyBzaW1wbHkgdW5yZWFjaGFibGUgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgZXZlbiBRRU1VLgoKTXkgaW5pdGlhbCBndXQgZmVlbGluZyB3YXMgcmlnaHQ7IHRoaXMgaXMgbm90IHdvcnRoIGZ1enppbmcuIEJ1dCBJIG5lZWRlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSB0cmFjZSBob3cgdGhpcyBjb2RlIGdldHMgY2FsbGVkLiBJdCYjMzk7cyBuZXN0bGVkIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jYC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRoZSBgd3hfdHhfdGltZW91dGAgZnVuY3Rpb24gaXMgdGhlIHBvaW50IG9mIGVudHJ5IGFuZCBpdCYjMzk7cyBob29rZWQgdXAgYXMgdGhlIGAubmRvX3R4X3RpbWVvdXRgIGhhbmRsZXIuIE5vdywgdG8gZ2V0IHRoYXQgcmVnaXN0ZXJlZCwgZWl0aGVyIGBuZ2JlX3Byb2JlYCBvciBgdHhnYmVfcHJvYmVgIGhhcyB0byBzdWNjZWVkLiBBbmQgdGhvc2UgcHJvYmUgZnVuY3Rpb25zIGFyZSAqdmVyeSogc3BlY2lmaWMuIFRoZXkmIzM5O3JlIHRpZWQgdG8gdGhlIFBDSSBkZXZpY2UmIzM5O3MgcHJlc2VuY2UgYW5kIGludm9sdmUgYWN0dWFsIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uOiByZWFkaW5nIEVFUFJPTSwgcmVzZXR0aW5nIHRoZSBNQUMsIGFsbCB0aGF0IHN0dWZmLgoKU28sIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUsIHRob3NlIHByb2JlcyB3aWxsIGVpdGhlciBmYWlsIGVhcmx5IG9uIG9yIHdvbiYjMzk7dCBldmVuIGJlIGludm9rZWQuIE5vIHByb2JlID0gbm8gbmV0ZGV2ID0gbm8gcmVnaXN0cmF0aW9uIG9mIGAubmRvX3R4X3RpbWVvdXRgLiBUaGF0JiMzOTtzIHRoYXQuIFRoZSBQQ0kgZXJyb3IgaGFuZGxlcnMgbGlrZSBgd3hfZXJyX2hhbmRsZXJgIGhhdmUgdGhlIHNhbWUgZGVwZW5kZW5jeSBvbiB0aGUgcGh5c2ljYWwgUENJIGRldmljZSBleGlzdGluZy4gVGhlIHdob2xlIHNldHVwIGlzIHJlbGlhbnQgb24gdGhlIHJlYWwgaGFyZHdhcmUuCgpUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGltZSB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSkgdG8gYWRkIFBDSSBlcnJvciByZWNvdmVyeSwgVFggdGltZW91dCBoYW5kbGluZywgYW5kIFRYIGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgZHJpdmVycyBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgUENJIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgV2FuZ3h1biBkZXZpY2VzIGluIHRoZSBrZXJuZWwsIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBub3Qgc3VjY2VlZCBhbmQgdGhlIG5ldGRldnMgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlcnMgKG5nYmUsIHR4Z2JlKSB0byBhZGQgUENJIGVycm9yIHJlY292ZXJ5LCBUWCB0aW1lb3V0IGhhbmRsaW5nLCBhbmQgVFggaGFuZyBkZXRlY3Rpb24uIFRoZXNlIGFyZSBkcml2ZXJzIGZvciBzcGVjaWZpYyBwaHlzaWNhbCBQQ0kgaGFyZHdhcmUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciBXYW5neHVuIGRldmljZXMgaW4gdGhlIGtlcm5lbCwgdGhlIHByb2JlIGZ1bmN0aW9ucyB3aWxsIG5vdCBzdWNjZWVkIGFuZCB0aGUgbmV0ZGV2cyB3aWxsIG5vdCBiZSByZWdpc3RlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA0OjA2OjUyLjY2NTk3NTU5MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDUxMTQ1NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSkgdG8gYWRkIFBDSSBlcnJvciByZWNvdmVyeSwgVFggdGltZW91dCBoYW5kbGluZywgYW5kIFRYIGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgZHJpdmVycyBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgUENJIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgV2FuZ3h1biBkZXZpY2VzIGluIHRoZSBrZXJuZWwsIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBub3Qgc3VjY2VlZCBhbmQgdGhlIG5ldGRldnMgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA0OjA2OjUyLjY2NTk4MTY3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwMDk5ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjE2MGE0MTRkMjQ2YWMzZmRmMzZkMjZmN2YxZGQ3NTZhZTg3NDA1NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAwNDowNjo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbmluZGV4IGE3MWIwYWQ3N2RlM2Y3Li5jODcyNGJiMTI5YWEwNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbkBAIC00LDUgKzQsNSBAQFxcbiBcXG4gb2JqLSQoQ09ORklHX0xJQldYKSArPSBsaWJ3eC5vXFxuIFxcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cXG4rbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vIHd4X2Vyci5vXFxuIGxpYnd4LW9ianMgKz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmMzNGM5NDA2YTVhZWRmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5AQCAtMCwwICsxLDMyMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLiAqL1xcbisvKiBDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDI2IEludGVsIENvcnBvcmF0aW9uLiAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hZXIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ3eF90eXBlLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X2Vyci5oXFxcIlxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxcbisgKlxcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmdcXG4rICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuXFxuKyAqL1xcbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcbitcXHRpZiAoIXd4KVxcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFxuK1xcdG5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuK1xcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcbitcXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKVxcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdC8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqL1xcbitcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICpcXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxcbisgKlxcbisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC5cXG4rICovXFxuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0cGNpX2Vyc19yZXN1bHRfdCByZXN1bHQ7XFxuK1xcbitcXHRpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7XFxuK1xcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBtYWtlIGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSBjbGVhcmluZyB0aGUgZmxhZyAqL1xcbitcXHRcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG4rXFx0XFx0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbitcXHRcXHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcXG4rXFx0XFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XFxuK1xcbitcXHRcXHRydG5sX2xvY2soKTtcXG4rXFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvd25fc3VzcGVuZClcXG4rXFx0XFx0XFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XFxuK1xcdFxcdGlmICh3eC1cXHUwMDNlZG9fcmVzZXQpXFxuK1xcdFxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldCh3eC1cXHUwMDNlbmV0ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdFxcdHJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcXG4rXFx0fVxcbitcXG4rXFx0cGNpX2Flcl9jbGVhcl9ub25mYXRhbF9zdGF0dXMocGRldik7XFxuK1xcbitcXHRyZXR1cm4gcmVzdWx0O1xcbit9XFxuK1xcbisvKipcXG4rICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxcbisgKlxcbisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxcbisgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdG5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuK1xcdFxcdGVyciA9IG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHR3eF9lcnIod3gsIFxcXCJGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcXG4rb3V0OlxcbitcXHRydG5sX3VubG9jaygpO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xcbitcXHQuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCxcXG4rXFx0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxcbitcXHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxcbit9O1xcbitFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3BmX3Jlc2V0X3N1YnRhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHd4X3dhcm4od3gsIFxcXCJSZXNldCBhZGFwdGVyLlxcXFxuXFxcIik7XFxuK1xcdGlmICh3eC1cXHUwMDNlZG9fcmVzZXQpXFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldCh3eC1cXHUwMDNlbmV0ZGV2LCB0cnVlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spO1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XFxuK1xcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXFx1MDAzZXN0YXRlKSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHd4X3BmX3Jlc2V0X3N1YnRhc2sod3gpO1xcbitcXG4rb3V0OlxcbitcXHRydG5sX3VubG9jaygpO1xcbit9XFxuK1xcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cXVldWVfd29yayh3eC1cXHUwMDNlcmVzZXRfd3EsIFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7XFxuK1xcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHd4LVxcdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwiJXNfcmVzZXRfd3FfJXhcXFwiLCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIDEsIHd4LVxcdTAwM2Vkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC1cXHUwMDNlcGRldikpO1xcbitcXHRpZiAoIXd4LVxcdTAwM2VyZXNldF93cSkge1xcbitcXHRcXHR3eF9lcnIod3gsIFxcXCJGYWlsZWQgdG8gY3JlYXRlIHd4X3Jlc2V0X3dxIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRJTklUX1dPUksoXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9pbml0X2Vycl90YXNrKTtcXG4rXFxuK3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHd4LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHd4X3JpbmcgKnR4X3JpbmcgPSB3eC1cXHUwMDNldHhfcmluZ1tpXTtcXG4rXFxuK1xcdFxcdGlmICh0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX2NsZWFuKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB3eF92Zl90eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0c3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9IFxcdTAwMjZ3eC1cXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9WTURRXTtcXG4rXFx0dTMyIHFfcGVyX3Bvb2wgPSBfX0FMSUdOX01BU0soMSwgfnZtZHEtXFx1MDAzZW1hc2spO1xcbitcXHR1MzIgaSwgajtcXG4rXFxuK1xcdGlmICghd3gtXFx1MDAzZW51bV92ZnMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3ZmczsgaSsrKSB7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBxX3Blcl9wb29sOyBqKyspIHtcXG4rXFx0XFx0XFx0dTMyIGgsIHQ7XFxuK1xcbitcXHRcXHRcXHRoID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xcbitcXHRcXHRcXHR0ID0gcmQzMih3eCwgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xcbitcXG4rXFx0XFx0XFx0aWYgKGggIT0gdClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cXHUwMDNlbmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcXG4rXFx0XFx0LyogV2UndmUgbG9zdCBsaW5rLCBzbyB0aGUgY29udHJvbGxlciBzdG9wcyBETUEsXFxuK1xcdFxcdCAqIGJ1dCB3ZSd2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCdzIG5ldmVyIGdvaW5nXFxuK1xcdFxcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxcbitcXHRcXHQgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0d3hfd2Fybih3eCwgXFxcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xcXFxuXFxcIik7XFxuK1xcdFxcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKiBJZiB3ZSdyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSB8fFxcbitcXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovXFxuK1xcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVxcdTAwM2VuZXRkZXYpKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRcXHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlc3RhdGUpO1xcbitcXHR9XFxuK31cXG4rXFxuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xcbitcXHR3eF9kZXRlY3RfdHhfaGFuZyh3eCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spO1xcbitcXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfcGNpZV9lcnJvcihzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHUxNiB2aWQsIHBjaV9jbWQ7XFxuK1xcbitcXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cXHUwMDNlcGRldiwgUENJX1ZFTkRPUl9JRCwgXFx1MDAyNnZpZCk7XFxuK1xcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVxcdTAwM2VwZGV2LCBQQ0lfQ09NTUFORCwgXFx1MDAyNnBjaV9jbWQpO1xcbitcXG4rXFx0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbid0IGFjY2VzcyAqL1xcbitcXHRpZiAodmlkID09IFUxNl9NQVggfHwgIShwY2lfY21kIFxcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIGEgUENJZSBoYXJkd2FyZSBlcnJvciBvY2N1cnMsIHRoZSBkcml2ZXIgc2hvdWxkIGluaXRpYXRlIGEgUENJZVxcbitcXHQgKiByZWNvdmVyeSBtZWNoYW5pc20uIEhvd2V2ZXIsIHRoaXMgcmVjb3ZlcnkgZmxvdyByZWxpZXMgb24gdGhlIEFFUlxcbitcXHQgKiBkcml2ZXIgZm9yIGN1cnJlbnQga2VybmVsIHBvbGljeS4gVGhlcmVmb3JlLCBhIHNlbGYtY29udGFpbmVkXFxuK1xcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LlxcbitcXHQgKi9cXG4rXFx0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0d3hfZXJyKHd4LCBcXFwiUENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxcXFxuXFxcIik7XFxuK1xcdHF1ZXVlX3dvcmsod3gtXFx1MDAzZXJlc2V0X3dxLCBcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR3eF93YXJuKHd4LCBcXFwiaW5pdGlhdGluZyByZXNldCBkdWUgdG8gdHggdGltZW91dFxcXFxuXFxcIik7XFxuK1xcdHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpO1xcbit9XFxuK1xcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXG4rXFx0aWYgKHd4X2NoZWNrX3BjaWVfZXJyb3Iod3gpKVxcbitcXHRcXHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpO1xcbitcXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KHR4X3JpbmctXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHR3eF93YXJuKHd4LFxcbitcXHRcXHRcXFwiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxcXG5cXFwiLFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCxcXG4rXFx0XFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cXHUwMDNlcmVnX2lkeCkpLFxcbitcXHRcXHRyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLVxcdTAwM2VyZWdfaWR4KSksXFxuK1xcdFxcdHR4X3JpbmctXFx1MDAzZW5leHRfdG9fdXNlLCBuZXh0LFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcXG4rXFxuK1xcdG5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy1cXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCk7XFxuK1xcbitcXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE2YTgyYTI2MzUyODQ5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcXG5AQCAtMCwwICsxLDE4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qXFxuKyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXJcXG4rICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9XWF9FUlJfSF9cXG4rI2RlZmluZSBfV1hfRVJSX0hfXFxuK1xcbitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjtcXG4rXFxuK3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XFxuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpO1xcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcXG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTtcXG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpO1xcbitcXG4rI2VuZGlmIC8qIF9XWF9FUlJfSF8gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbmluZGV4IDVkZjk3MWFjYTllMzVmLi5kMTM1NmZmNWQ2OWI1NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuQEAgLTM5NSw3ICszOTUsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHQvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi9cXG4gXFx0aWYgKG5lZWRfcmVzZXQgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIH1cXG4gXFxuIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXFxuaW5kZXggMjYwZTE0ZDVkNTQxMjEuLjEyMmM0OTUyZDIwM2YwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbkBAIC0xOTMyLDYgKzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxcbiBcXHRlbHNlXFxuIFxcdFxcdHJpbmctXFx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XFxuIFxcbitcXHRiaXRtYXBfemVybyhyaW5nLVxcdTAwM2VzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XFxuIFxcdC8qIHJlaW5pdGlhbGl6ZSB0eF9idWZmZXJfaW5mbyAqL1xcbiBcXHRtZW1zZXQocmluZy1cXHUwMDNldHhfYnVmZmVyX2luZm8sIDAsXFxuIFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3R4X2J1ZmZlcikgKiByaW5nLVxcdTAwM2Vjb3VudCk7XFxuQEAgLTI4NTEsMTYgKzI4NTIsMjYgQEAgRVhQT1JUX1NZTUJPTCh3eF9mY19lbmFibGUpO1xcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcXHUwMDI2d3gtXFx1MDAzZXN0YXRzO1xcbitcXHR1NjQgZGF0YTtcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRpZiAod3gtXFx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfZnVsbCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgd3gtXFx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmICh3eC1cXHUwMDNlbWFjLnR5cGUgXFx1MDAzZT0gd3hfbWFjX2FtbClcXG4tXFx0XFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnd4LVxcdTAwM2VsYXN0X3N0YXRzLmx4b2ZmcnhjKTtcXG4rXFx0XFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcXG4rXFx0XFx0XFx0XFx0IFxcdTAwMjZ3eC1cXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0aHdzdGF0cy1cXHUwMDNlbHhvZmZyeGMgKz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcXG4rXFx0XFx0ZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XFxuK1xcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IGRhdGE7XFxuK1xcbitcXHQvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqL1xcbitcXHRpZiAoIWRhdGEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXN0YXRlKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuaW5kZXggZDA0MjU2N2I4MTI4NGIuLmQzMzQwYjJiMDY4MjQzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ3eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X2Vyci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfcHRwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfdmZfbGliLmhcXFwiXFxuQEAgLTc0Miw2ICs3NDMsMzcgQEAgc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnd4X3R4cmluZ190eHEoY29uc3Qgc3RydWN0IHd4X3JpbmcgKnJpbmcpXFxuIFxcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXFx1MDAzZW5ldGRldiwgcmluZy1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbiB9XFxuIFxcbitzdGF0aWMgdTMyIHd4X2dldF90eF9wZW5kaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBoZWFkLCB0YWlsO1xcbitcXG4rXFx0aGVhZCA9IHJpbmctXFx1MDAzZW5leHRfdG9fY2xlYW47XFxuK1xcdHRhaWwgPSByaW5nLVxcdTAwM2VuZXh0X3RvX3VzZTtcXG4rXFxuK1xcdHJldHVybiAoKGhlYWQgXFx1MDAzYz0gdGFpbCkgPyB0YWlsIDogdGFpbCArIHJpbmctXFx1MDAzZWNvdW50KSAtIGhlYWQ7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHd4X2NoZWNrX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXFxuK3tcXG4rXFx0dTMyIHR4X2RvbmVfb2xkID0gcmluZy1cXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQ7XFxuK1xcdHUzMiB0eF9wZW5kaW5nID0gd3hfZ2V0X3R4X3BlbmRpbmcocmluZyk7XFxuK1xcdHUzMiB0eF9kb25lID0gcmluZy1cXHUwMDNlc3RhdHMucGFja2V0cztcXG4rXFxuK1xcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFxcdTAwMjZcXHUwMDI2IHR4X3BlbmRpbmcpXFxuK1xcdFxcdC8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovXFxuK1xcdFxcdHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdC8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovXFxuK1xcdHJpbmctXFx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTtcXG4rXFx0LyogcmVzZXQgdGhlIGNvdW50ZG93biAqL1xcbitcXHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKipcXG4gICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzXFxuICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uXFxuQEAgLTg2Niw2ICs4OTgsMTEgQEAgc3RhdGljIGJvb2wgd3hfY2xlYW5fdHhfaXJxKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IsXFxuIFxcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUod3hfdHhyaW5nX3R4cSh0eF9yaW5nKSxcXG4gXFx0XFx0XFx0XFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XFxuIFxcbitcXHRpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkge1xcbitcXHRcXHR3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMilcXG4gXFx0aWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgXFx1MDAyNlxcdTAwMjYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpIFxcdTAwM2U9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHtcXG5AQCAtMzExMSw3ICszMTQ4LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4gXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IGZlYXR1cmVzO1xcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG9fcmVzZXQpXFxuLVxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYpO1xcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcXG4gXFx0ZWxzZSBpZiAoY2hhbmdlZCBcXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXFxuIFxcdFxcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XFxuIFxcbkBAIC0zMTYxLDcgKzMxOTgsNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbiBcXG4gb3V0OlxcbiBcXHRpZiAobmVlZF9yZXNldCBcXHUwMDI2XFx1MDAyNiB3eC1cXHUwMDNlZG9fcmVzZXQpXFxuLVxcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYpO1xcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTMzNDUsNSArMzM4MiwyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcXG4gXFxuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpIHx8XFxuK1xcdCAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBjaV9jbGVhcl9tYXN0ZXIod3gtXFx1MDAzZXBkZXYpO1xcbitcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMod3gtXFx1MDAzZW5ldGRldik7XFxuK1xcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRuZXRpZl90eF9kaXNhYmxlKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcXG4rXFx0d3hfcHRwX3F1aWVzY2Uod3gpO1xcbitcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3NvZnRfcXVpZXNjZSk7XFxuK1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkNvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcXG5pbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcXG5AQCAtNDEsNSArNDEsNiBAQCB2b2lkIHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuICNlbmRpZiAvKiBfV1hfTElCX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuaW5kZXggNDRmM2U2NTA1MjQ2OGYuLjcwNjhjNjg0NWI2MjQ1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTtcXG4gXFx0aW50IHRzX2RvbmU7XFxuIFxcbitcXHRpZiAoIXRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm4gSFo7XFxuK1xcbiBcXHR0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpO1xcbiBcXG4gXFx0d3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTtcXG5AQCAtODQyLDYgKzg0NSwyMSBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XFxuIFxcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdGlmICh3eC1cXHUwMDNlcHRwX3R4X3NrYikge1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cXHUwMDNlcHRwX3R4X3NrYik7XFxuK1xcdFxcdHd4LVxcdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcXG4rXFx0fVxcbitcXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcXG4rXFxuIC8qKlxcbiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcFxcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuaW5kZXggNTBkYjkwYTZlM2VlNjYuLmFkMmY4MjQ4NzVkNTFiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuQEAgLTEwLDYgKzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbmluZGV4IGM3YmVmZTRjZGZlOTA4Li5jMmVkYjc0ODgxZjJiNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuQEAgLTQ1MCw2ICs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXFxuIFxcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfUlAoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfV1AoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbitcXG4gLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXFxuQEAgLTEwMzksNiArMTA0NCw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7XFxuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XFxuIFxcdHU2NCByZXN0YXJ0X3F1ZXVlO1xcbiBcXHR1NjQgdHhfYnVzeTtcXG4rXFx0dTMyIHR4X2RvbmVfb2xkO1xcbiB9O1xcbiBcXG4gc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcXG5AQCAtMTA1NCw2ICsxMDYwLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XFxuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcXFxcbiBcXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVxcdTAwM2VuZXh0KVxcbiBcXG4rZW51bSB3eF9yaW5nX3N0YXRlIHtcXG4rXFx0V1hfVFhfREVURUNUX0hBTkcsXFxuK1xcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXFxuK1xcdFdYX1JJTkdfU1RBVEVfTkJJVFNcXG4rfTtcXG4rXFxuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XFxuIFxcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xcbkBAIC0xMDczLDYgKzEwODUsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7XFxuIFxcdFxcdHN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvO1xcbiBcXHRcXHRzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbztcXG4gXFx0fTtcXG4rXFx0REVDTEFSRV9CSVRNQVAoc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xcbiBcXHR1OCBfX2lvbWVtICp0YWlsO1xcbiBcXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXFxuIFxcdGRtYV9hZGRyX3QgaGVhZHdiX2RtYTtcXG5AQCAtMTIwOCw2ICsxMjIxLDggQEAgZW51bSB3eF9zdGF0ZSB7XFxuIFxcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxcbiBcXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXFxuIFxcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXFxuK1xcdFdYX1NUQVRFX0RJU0FCTEVELFxcbitcXHRXWF9TVEFURV9SRVNfRlJFRUQsXFxuIFxcdFdYX1NUQVRFX05CSVRTXFx0XFx0LyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMjc0LDYgKzEyODksOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcXG4gXFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxcbiBcXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXFxuIFxcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXFxuK1xcdFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCxcXG4rXFx0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXFxuIFxcdFdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMzk0LDcgKzE0MTEsOCBAQCBzdHJ1Y3Qgd3gge1xcbiBcXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcXG4gXFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcXG4tXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4rXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuK1xcdHZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuQEAgLTE0MjIsNiArMTQ0MCw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxO1xcbiBcXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXFxuIH07XFxuIFxcbkBAIC0xNTA0LDcgKzE1MjQsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxcbiBcXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9lcnIoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4tXFxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4rXFx0ZGV2X3dhcm4oXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9kYmcoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG5AQCAtNTksNyArNTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XFxuIFxcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xcbiBcXG4tXFx0d3hfY29uZmlndXJlKHd4KTtcXG4gXFx0bmdiZV91cCh3eCk7XFxuIFxcbiBjbGVhcl9yZXNldDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLmNkYTIyMzEwMWNlZDcyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9lcnIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbkBAIC00Niw2ICs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XFxuIFxcdHsgfVxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBoeWxpbmtfc3RvcCh3eC1cXHUwMDNlcGh5bGluayk7XFxuK1xcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXFx1MDAzZXBoeWxpbmspO1xcbitcXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xcbitcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbitcXHR3eF9mcmVlX2lycSh3eCk7XFxuK1xcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XFxuK1xcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICBuZ2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtMTMzLDYgKzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHR3eC1cXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcXG4gXFx0d3gtXFx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcXG4rXFx0d3gtXFx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IG5nYmVfZG93bl9zdXNwZW5kO1xcbiBcXHRzZXRfYml0KDAsIFxcdTAwMjZ3eC1cXHUwMDNlZndkX2JpdG1hc2spO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE0Nyw2ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spO1xcbiBcXG4gXFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcXG4rXFx0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcXG4rXFx0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xcbiBcXG4gXFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XFxuIH1cXG5AQCAtMzkyLDYgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcXG4gXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiBcXG5AQCAtNDA4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFxuIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcXG4ge1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMuYWRkcik7XFxuIFxcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXFx1MDAzZXN0YXRlKSlcXG5AQCAtNDIzLDEzICs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcXG4gXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4gfVxcbiBcXG4tdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuK3N0YXRpYyB2b2lkIG5nYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHR3eF9jb25maWd1cmVfdmVjdG9ycyh3eCk7XFxuIFxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXHQvKiBlbmFibGUgdHJhbnNtaXRzICovXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXFx1MDAzZW5ldGRldik7XFxuQEAgLTQ5MCw3ICs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXG4gXFx0d3hfcHRwX2luaXQod3gpO1xcbiBcXG4tXFx0bmdiZV91cCh3eCk7XFxuK1xcdG5nYmVfdXBfY29tcGxldGUod3gpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIGVycl9kaXNfcGh5OlxcbkBAIC01MDMsNiArNTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHd4X2NvbmZpZ3VyZSh3eCk7XFxuK1xcdG5nYmVfdXBfY29tcGxldGUod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2VcXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxcbkBAIC01MTgsNiArNTQ4LDkgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbitcXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdHd4X3B0cF9zdG9wKHd4KTtcXG4gXFx0bmdiZV9kb3duKHd4KTtcXG4gXFx0d3hfZnJlZV9pcnEod3gpO1xcbkBAIC01MjUsNyArNTU4LDcgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcXG4gXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cXHUwMDNlcGh5bGluayk7XFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4tXFxuK291dDpcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTU1NSw3ICs1ODgsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpXFxuIFxcdCplbmFibGVfd2FrZSA9ICEhd3VmYztcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5AQCAtNTkwLDYgKzYyNCw4IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiBcXHQgKi9cXG4gXFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcXG4gXFx0XFx0bmdiZV9jbG9zZShkZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5nYmVfcmVzZXQod3gpO1xcbiBcXG4gXFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuIFxcbkBAIC02MDYsMTEgKzY0MiwzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdG5ldGlmX3RyYW5zX3VwZGF0ZSh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnd4LVxcdTAwM2VyZXNldF9sb2NrKTtcXG4rXFx0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRuZ2JlX2Rvd24od3gpO1xcbitcXHRuZ2JlX3VwKHd4KTtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbit9XFxuK1xcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4rXFx0XFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuZ2JlX3Jlc2V0KHd4KTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsXFxuIFxcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxcbitcXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXFxuIFxcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcXG5AQCAtNzAwLDYgKzc2MSw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0d3gtXFx1MDAzZWRyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTtcXG4gXFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNm5nYmVfbmV0ZGV2X29wcztcXG4rXFx0bmV0ZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcXG4gXFxuIFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcXG4gXFx0XFx0XFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxcbkBAIC03OTYsNiArODU4LDEwIEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXFx1MDAzZW1hYy5wZXJtX2FkZHIpO1xcbiBcXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcbitcXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XFxuK1xcbiBcXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XFxuIFxcbiBcXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xcbkBAIC04MTIsNiArODc4LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XFxuK1xcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC04MjMsNiArODkwLDggQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIGVycl9mcmVlX21hY190YWJsZTpcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZXJzc19rZXkpO1xcbiBcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG5AQCAtODU0LDYgKzkyMyw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXG4gXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBcXG4gXFx0cGh5bGlua19kZXN0cm95KHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxcbkBAIC04NjMsNyArOTM0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXFxuQEAgLTg5MCw2ICs5NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHR3eF9lcnIod3gsIFxcXCJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbiBcXHRkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbkBAIC05MTQsNiArOTg3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xcbiBcXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcXG4gXFx0LnNodXRkb3duID0gbmdiZV9zaHV0ZG93bixcXG4gXFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXFxuK1xcdC5lcnJfaGFuZGxlciA9IFxcdTAwMjZ3eF9lcnJfaGFuZGxlcixcXG4gfTtcXG4gXFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXFxuaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbkBAIC0xMjUsNSArMTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuIFxcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuaW5kZXggMjBjNWEyOTVjNmMyOTYuLmQ4NWVlODMxOTJlNGZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXJyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9tYnguaFxcXCJcXG5AQCAtOTMsNiArOTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTEwNiw2ICsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC0xMjMsNiArMTMyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcXG4gXFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XFxuIFxcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XFxuK1xcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XFxuK1xcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcXG4gXFxuIFxcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xcbiB9XFxuQEAgLTE0NCw2ICsxNTUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXG4gXFx0c3dpdGNoICh3eC1cXHUwMDNlbWFjLnR5cGUpIHtcXG5AQCAtMTg3LDYgKzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuIFxcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xcbiBcXHRpZiAoZXJyICE9IDApXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkhhcmR3YXJlIEVycm9yOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG5AQCAtMjI0LDYgKzIzOSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHd4X2lycV9kaXNhYmxlKHd4KTtcXG4gXFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XFxuIFxcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4gXFxuQEAgLTI5Miw2ICszMDgsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGh5bGlua19zdG9wKHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcXG4rXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4rXFx0d3hfZnJlZV9pcnEod3gpO1xcbitcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4rXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbitcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXFxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXFxuQEAgLTQwOCw2ICs0MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHd4LVxcdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xcbiBcXHR3eC1cXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcXG4gXFx0c2V0X2JpdCgwLCBcXHUwMDI2d3gtXFx1MDAzZWZ3ZF9iaXRtYXNrKTtcXG4gXFxuIFxcdHN3aXRjaCAod3gtXFx1MDAzZW1hYy50eXBlKSB7XFxuQEAgLTUxOCwxMiArNTQ5LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0d3hfcHRwX3N0b3Aod3gpO1xcbiBcXHR0eGdiZV9kb3duKHd4KTtcXG4gXFx0d3hfZnJlZV9pcnEod3gpO1xcbiBcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4gXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbiBcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rb3V0OlxcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTQ0LDcgKzU3OSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC02MDYsMTEgKzY0MiwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbiB9XFxuIFxcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4gXFx0XFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0dHhnYmVfcmVzZXQod3gpO1xcbkBAIC02NTQsNiArNjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxcbiBcXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXFxuIFxcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcXG4rXFx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxcbiBcXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXFxuQEAgLTc0NSw2ICs3ODIsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcXG4gXFx0dHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XFxuIFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xcbitcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xcbiBcXHRuZXRkZXYtXFx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBcXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XFxuIFxcbiBcXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cXG5AQCAtODE0LDYgKzg1MiwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFxuK1xcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG4rXFxuIFxcdHR4Z2JlX2luaXRfc2VydmljZSh3eCk7XFxuIFxcbiBcXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xcbkBAIC04ODksNiArOTMxLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0XFx0Z290byBlcnJfcmVtb3ZlX3BoeTtcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XFxuK1xcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXG4gXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcbkBAIC05MTYsNiArOTU5LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBlcnJfZnJlZV9tYWNfdGFibGU6XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2Vyc3Nfa2V5KTtcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuQEAgLTk0OCw2ICs5OTMsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIFxcbiBcXHR0eGdiZV9yZW1vdmVfcGh5KHR4Z2JlKTtcXG4gXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG5AQCAtOTU5LDcgKzEwMDYsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XFxuQEAgLTk2OSw2ICsxMDE3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcXG4gXFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxcbiBcXHQuc2h1dGRvd24gPSB0eGdiZV9zaHV0ZG93bixcXG4gXFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXFxuK1xcdC5lcnJfaGFuZGxlciA9IFxcdTAwMjZ3eF9lcnJfaGFuZGxlcixcXG4gfTtcXG4gXFxuIG1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG5pbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcXG4gdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4gXFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxcXFxuIFxcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNDowNjo1My40MzgwNDEyMzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNjc5MDY5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSkgdG8gYWRkIFBDSSBlcnJvciByZWNvdmVyeSwgVFggdGltZW91dCBoYW5kbGluZywgYW5kIFRYIGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgZHJpdmVycyBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgUENJIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgV2FuZ3h1biBkZXZpY2VzIGluIHRoZSBrZXJuZWwsIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBub3Qgc3VjY2VlZCBhbmQgdGhlIG5ldGRldnMgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjE2MGE0MTRkMjQ2YWMzZmRmMzZkMjZmN2YxZGQ3NTZhZTg3NDA1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDA0OjA2OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbmluZGV4IGE3MWIwYWQ3N2RlM2Y3Li5jODcyNGJiMTI5YWEwNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbkBAIC00LDUgKzQsNSBAQFxuIFxuIG9iai0kKENPTkZJR19MSUJXWCkgKz0gbGlid3gub1xuIFxuLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3Yub1xuK2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xuIGxpYnd4LW9ianMgKz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmMzNGM5NDA2YTVhZWRmXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXG5AQCAtMCwwICsxLDMyMSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cbisvKiBDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDI2IEludGVsIENvcnBvcmF0aW9uLiAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hZXIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwid3hfdHlwZS5oXCJcbisjaW5jbHVkZSBcInd4X2xpYi5oXCJcbisjaW5jbHVkZSBcInd4X2Vyci5oXCJcbitcbisvKipcbisgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlXG4rICpcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXG4rICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuXG4rICovXG4rc3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4rXHRcdFx0XHRcdCAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSlcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcbitcdGlmICghd3gpXG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1xuK1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuK1x0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChuZXRkZXYpKVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdGlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpXG4rXHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XG4rXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xuK1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHQvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi9cbitcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUO1xuK31cbitcbisvKipcbisgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbisgKlxuKyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbisgKlxuKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHBjaV9lcnNfcmVzdWx0X3QgcmVzdWx0O1xuK1xuK1x0aWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkge1xuK1x0XHR3eF9lcnIod3gsIFwiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxcblwiKTtcbitcdFx0cmVzdWx0ID0gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXG4rXHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuK1x0XHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKTtcbitcdFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuK1x0XHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcbitcdFx0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XG4rXG4rXHRcdHJ0bmxfbG9jaygpO1xuK1x0XHRpZiAobmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb3duX3N1c3BlbmQpXG4rXHRcdFx0d3gtXHUwMDNlZG93bl9zdXNwZW5kKHd4KTtcbitcdFx0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuK1x0XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgZmFsc2UpO1xuK1x0XHRydG5sX3VubG9jaygpO1xuK1x0XHRyZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7XG4rXHR9XG4rXG4rXHRwY2lfYWVyX2NsZWFyX25vbmZhdGFsX3N0YXR1cyhwZGV2KTtcbitcbitcdHJldHVybiByZXN1bHQ7XG4rfVxuK1xuKy8qKlxuKyAqIHd4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXG4rICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuKyAqXG4rICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXRcbisgKiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uXG4rICovXG4rc3RhdGljIHZvaWQgd3hfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuK1x0aW50IGVycjtcbitcbitcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbitcdHJ0bmxfbG9jaygpO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuK1x0XHRlcnIgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0d3hfZXJyKHd4LCBcIkZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxcblwiKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0fVxuK1x0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xuK291dDpcbitcdHJ0bmxfdW5sb2NrKCk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXIgPSB7XG4rXHQuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCxcbitcdC5zbG90X3Jlc2V0ID0gd3hfaW9fc2xvdF9yZXNldCxcbitcdC5yZXN1bWUgPSB3eF9pb19yZXN1bWUsXG4rfTtcbitFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcbitcbitzdGF0aWMgdm9pZCB3eF9wZl9yZXNldF9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbitcdHd4X3dhcm4od3gsIFwiUmVzZXQgYWRhcHRlci5cXG5cIik7XG4rXHRpZiAod3gtXHUwMDNlZG9fcmVzZXQpXG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KHd4LVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4rXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0d3hfcGZfcmVzZXRfc3VidGFzayh3eCk7XG4rXG4rb3V0OlxuK1x0cnRubF91bmxvY2soKTtcbit9XG4rXG4rdm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cXVldWVfd29yayh3eC1cdTAwM2VyZXNldF93cSwgXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spO1xuK1xuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0d3gtXHUwMDNlcmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoXCIlc19yZXNldF93cV8leFwiLCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSxcbitcdFx0XHRcdCAgICAgICAxLCB3eC1cdTAwM2Vkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC1cdTAwM2VwZGV2KSk7XG4rXHRpZiAoIXd4LVx1MDAzZXJlc2V0X3dxKSB7XG4rXHRcdHd4X2Vycih3eCwgXCJGYWlsZWQgdG8gY3JlYXRlIHd4X3Jlc2V0X3dxIHdvcmtxdWV1ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRJTklUX1dPUksoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9pbml0X2Vycl90YXNrKTtcbitcbitzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xuK1x0XHRzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZyA9IHd4LVx1MDAzZXR4X3JpbmdbaV07XG4rXG4rXHRcdGlmICh0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlICE9IHR4X3JpbmctXHUwMDNlbmV4dF90b19jbGVhbilcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcdTAwMjZ3eC1cdTAwM2VyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdO1xuK1x0dTMyIHFfcGVyX3Bvb2wgPSBfX0FMSUdOX01BU0soMSwgfnZtZHEtXHUwMDNlbWFzayk7XG4rXHR1MzIgaSwgajtcbitcbitcdGlmICghd3gtXHUwMDNlbnVtX3ZmcylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3ZmczsgaSsrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHFfcGVyX3Bvb2w7IGorKykge1xuK1x0XHRcdHUzMiBoLCB0O1xuK1xuK1x0XHRcdGggPSByZDMyKHd4LCBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7XG4rXHRcdFx0dCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcbitcbitcdFx0XHRpZiAoaCAhPSB0KVxuK1x0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfd2F0Y2hkb2dfZmx1c2hfdHgoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSlcbitcdFx0cmV0dXJuO1xuK1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHtcbitcdFx0LyogV2UndmUgbG9zdCBsaW5rLCBzbyB0aGUgY29udHJvbGxlciBzdG9wcyBETUEsXG4rXHRcdCAqIGJ1dCB3ZSd2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCdzIG5ldmVyIGdvaW5nXG4rXHRcdCAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LlxuK1x0XHQgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLlxuK1x0XHQgKi9cbitcdFx0d3hfd2Fybih3eCwgXCJpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcXG5cIik7XG4rXHRcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aW50IGk7XG4rXG4rXHQvKiBJZiB3ZSdyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovXG4rXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSB8fFxuK1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovXG4rXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbitcdFx0XHRzZXRfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbitcdH1cbit9XG4rXG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHd4KTtcbitcdHd4X2RldGVjdF90eF9oYW5nKHd4KTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spO1xuK1xuK3N0YXRpYyBib29sIHd4X2NoZWNrX3BjaWVfZXJyb3Ioc3RydWN0IHd4ICp3eClcbit7XG4rXHR1MTYgdmlkLCBwY2lfY21kO1xuK1xuK1x0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXHUwMDNlcGRldiwgUENJX1ZFTkRPUl9JRCwgXHUwMDI2dmlkKTtcbitcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHd4LVx1MDAzZXBkZXYsIFBDSV9DT01NQU5ELCBcdTAwMjZwY2lfY21kKTtcbitcbitcdC8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4ndCBhY2Nlc3MgKi9cbitcdGlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgXHUwMDI2IFBDSV9DT01NQU5EX01FTU9SWSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3JlY292ZXJ5KHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0LypcbitcdCAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llXG4rXHQgKiByZWNvdmVyeSBtZWNoYW5pc20uIEhvd2V2ZXIsIHRoaXMgcmVjb3ZlcnkgZmxvdyByZWxpZXMgb24gdGhlIEFFUlxuK1x0ICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZFxuK1x0ICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuXG4rXHQgKi9cbitcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKTtcbitcdHd4X2Vycih3eCwgXCJQQ0llIGVycm9yIGRldGVjdGVkIGR1cmluZyB0eCB0aW1lb3V0XFxuXCIpO1xuK1x0cXVldWVfd29yayh3eC1cdTAwM2VyZXNldF93cSwgXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0d3hfd2Fybih3eCwgXCJpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XFxuXCIpO1xuK1x0d3hfc2VydmljZV9ldmVudF9zY2hlZHVsZSh3eCk7XG4rfVxuK1xuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgX19hbHdheXNfdW51c2VkIHR4cXVldWUpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXG4rXHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXG4rXHRcdHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpO1xuK1x0ZWxzZVxuK1x0XHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTtcbitcbit2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dClcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuK1xuK1x0d3hfd2Fybih3eCxcbitcdFx0XCJEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcXG5cIixcbitcdFx0dHhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCxcbitcdFx0cmQzMih3eCwgV1hfUFhfVFJfUlAodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4rXHRcdHJkMzIod3gsIFdYX1BYX1RSX1dQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuK1x0XHR0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlLCBuZXh0LFxuK1x0XHR0eF9yaW5nLVx1MDAzZXR4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpO1xuK1xuK1x0bmV0aWZfc3RvcF9zdWJxdWV1ZSh0eF9yaW5nLVx1MDAzZW5ldGRldiwgdHhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4rXG4rXHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NDlcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcbkBAIC0wLDAgKzEsMTggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogV2FuZ1h1biBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlclxuKyAqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuXG4rICovXG4rXG4rI2lmbmRlZiBfV1hfRVJSX0hfXG4rI2RlZmluZSBfV1hfRVJSX0hfXG4rXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXI7XG4rXG4rdm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbit2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IHR4cXVldWUpO1xuK3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KTtcbitcbisjZW5kaWYgLyogX1dYX0VSUl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbmluZGV4IDVkZjk3MWFjYTllMzVmLi5kMTM1NmZmNWQ2OWI1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuQEAgLTM5NSw3ICszOTUsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpXG4gXG4gXHQvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi9cbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiB9XG4gXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMjYwZTE0ZDVkNTQxMjEuLjEyMmM0OTUyZDIwM2YwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbkBAIC0xOTMyLDYgKzE5MzIsNyBAQCBzdGF0aWMgdm9pZCB3eF9jb25maWd1cmVfdHhfcmluZyhzdHJ1Y3Qgd3ggKnd4LFxuIFx0ZWxzZVxuIFx0XHRyaW5nLVx1MDAzZWF0cl9zYW1wbGVfcmF0ZSA9IDA7XG4gXG4rXHRiaXRtYXBfemVybyhyaW5nLVx1MDAzZXN0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTtcbiBcdC8qIHJlaW5pdGlhbGl6ZSB0eF9idWZmZXJfaW5mbyAqL1xuIFx0bWVtc2V0KHJpbmctXHUwMDNldHhfYnVmZmVyX2luZm8sIDAsXG4gXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF90eF9idWZmZXIpICogcmluZy1cdTAwM2Vjb3VudCk7XG5AQCAtMjg1MSwxNiArMjg1MiwyNiBAQCBFWFBPUlRfU1lNQk9MKHd4X2ZjX2VuYWJsZSk7XG4gc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0c3RydWN0IHd4X2h3X3N0YXRzICpod3N0YXRzID0gXHUwMDI2d3gtXHUwMDNlc3RhdHM7XG4rXHR1NjQgZGF0YTtcbitcdGludCBpO1xuIFxuIFx0aWYgKHd4LVx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfZnVsbCBcdTAwMjZcdTAwMjZcbiBcdCAgICB3eC1cdTAwM2VmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAod3gtXHUwMDNlbWFjLnR5cGUgXHUwMDNlPSB3eF9tYWNfYW1sKVxuLVx0XHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICs9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbi1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNnd4LVx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xuK1x0XHRkYXRhID0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuK1x0XHRcdFx0IFx1MDAyNnd4LVx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xuIFx0ZWxzZVxuLVx0XHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICs9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XG4rXHRcdGRhdGEgPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xuK1x0aHdzdGF0cy1cdTAwM2VseG9mZnJ4YyArPSBkYXRhO1xuK1xuK1x0LyogcmVmaWxsIGNyZWRpdHMgKG5vIHR4IGhhbmcpIGlmIHdlIHJlY2VpdmVkIHhvZmYgKi9cbitcdGlmICghZGF0YSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuK1x0XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5pbmRleCBkMDQyNTY3YjgxMjg0Yi4uZDMzNDBiMmIwNjgyNDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuIFxuICNpbmNsdWRlIFwid3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcInd4X2xpYi5oXCJcbisjaW5jbHVkZSBcInd4X2Vyci5oXCJcbiAjaW5jbHVkZSBcInd4X3B0cC5oXCJcbiAjaW5jbHVkZSBcInd4X2h3LmhcIlxuICNpbmNsdWRlIFwid3hfdmZfbGliLmhcIlxuQEAgLTc0Miw2ICs3NDMsMzcgQEAgc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnd4X3R4cmluZ190eHEoY29uc3Qgc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4gXHRyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShyaW5nLVx1MDAzZW5ldGRldiwgcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4gfVxuIFxuK3N0YXRpYyB1MzIgd3hfZ2V0X3R4X3BlbmRpbmcoc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4re1xuK1x0dW5zaWduZWQgaW50IGhlYWQsIHRhaWw7XG4rXG4rXHRoZWFkID0gcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuO1xuK1x0dGFpbCA9IHJpbmctXHUwMDNlbmV4dF90b191c2U7XG4rXG4rXHRyZXR1cm4gKChoZWFkIFx1MDAzYz0gdGFpbCkgPyB0YWlsIDogdGFpbCArIHJpbmctXHUwMDNlY291bnQpIC0gaGVhZDtcbit9XG4rXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbit7XG4rXHR1MzIgdHhfZG9uZV9vbGQgPSByaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkO1xuK1x0dTMyIHR4X3BlbmRpbmcgPSB3eF9nZXRfdHhfcGVuZGluZyhyaW5nKTtcbitcdHUzMiB0eF9kb25lID0gcmluZy1cdTAwM2VzdGF0cy5wYWNrZXRzO1xuK1xuK1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHJpbmctXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAodHhfZG9uZV9vbGQgPT0gdHhfZG9uZSBcdTAwMjZcdTAwMjYgdHhfcGVuZGluZylcbitcdFx0LyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi9cbitcdFx0cmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4rXG4rXHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xuK1x0cmluZy1cdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZCA9IHR4X2RvbmU7XG4rXHQvKiByZXNldCB0aGUgY291bnRkb3duICovXG4rXHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qKlxuICAqIHd4X2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlc1xuICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uXG5AQCAtODY2LDYgKzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvcixcbiBcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUod3hfdHhyaW5nX3R4cSh0eF9yaW5nKSxcbiBcdFx0XHRcdCAgdG90YWxfcGFja2V0cywgdG90YWxfYnl0ZXMpO1xuIFxuK1x0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcbitcdFx0d3hfaGFuZGxlX3R4X2hhbmcodHhfcmluZywgaSk7XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMilcbiBcdGlmICh1bmxpa2VseSh0b3RhbF9wYWNrZXRzIFx1MDAyNlx1MDAyNiBuZXRpZl9jYXJyaWVyX29rKHR4X3JpbmctXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAod3hfZGVzY191bnVzZWQodHhfcmluZykgXHUwMDNlPSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7XG5AQCAtMzExMSw3ICszMTQ4LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IGZlYXR1cmVzO1xuIFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcdGVsc2UgaWYgKGNoYW5nZWQgXHUwMDI2IChORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXG4gXHRcdHd4X3NldF9yeF9tb2RlKG5ldGRldik7XG4gXG5AQCAtMzE2MSw3ICszMTk4LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiBcbiBvdXQ6XG4gXHRpZiAobmVlZF9yZXNldCBcdTAwMjZcdTAwMjYgd3gtXHUwMDNlZG9fcmVzZXQpXG4tXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XG4rXHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzM0NSw1ICszMzgyLDIzIEBAIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9zZXJ2aWNlX3RpbWVyKTtcbiBcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4rXHQgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHBjaV9jbGVhcl9tYXN0ZXIod3gtXHUwMDNlcGRldik7XG4rXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbitcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVx1MDAzZW5ldGRldik7XG4rXHRuZXRpZl90eF9kaXNhYmxlKHd4LVx1MDAzZW5ldGRldik7XG4rXHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbitcdHd4X3B0cF9xdWllc2NlKHd4KTtcbitcbitcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X3NvZnRfcXVpZXNjZSk7XG4rXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiQ29tbW9uIGxpYnJhcnkgZm9yIFdhbmd4dW4oUikgRXRoZXJuZXQgZHJpdmVycy5cIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbmluZGV4IGFlZDZlYThjZjBkNjRhLi4xMWJkNzk5ODVlMTcxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbkBAIC00MSw1ICs0MSw2IEBAIHZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gXG4gI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuaW5kZXggNDRmM2U2NTA1MjQ2OGYuLjcwNjhjNjg0NWI2MjQ1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xuQEAgLTMyMSw2ICszMjEsOSBAQCBzdGF0aWMgbG9uZyB3eF9wdHBfZG9fYXV4X3dvcmsoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHApXG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XG4gXHRpbnQgdHNfZG9uZTtcbiBcbitcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuIEhaO1xuK1xuIFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcbiBcbiBcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XG5AQCAtODQyLDYgKzg0NSwyMSBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xuIFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbitcbitcdGlmICh3eC1cdTAwM2VwdHBfdHhfc2tiKSB7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuK1x0XHR3eC1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdH1cbitcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfcHRwX3F1aWVzY2UpO1xuK1xuIC8qKlxuICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wXG4gICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5pbmRleCA1MGRiOTBhNmUzZWU2Ni4uYWQyZjgyNDg3NWQ1MWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5AQCAtMTAsNiArMTAsNyBAQCB2b2lkIHd4X3B0cF9yZXNldChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KTtcbit2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCB3eF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbmluZGV4IGM3YmVmZTRjZGZlOTA4Li5jMmVkYjc0ODgxZjJiNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuQEAgLTQ1MCw2ICs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDhcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19IRUFEX1dCICAgICAgICAgQklUKDI3KVxuIFxuKyNkZWZpbmUgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuK1x0XHQoV1hfUFhfVFJfUlAoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxuKyNkZWZpbmUgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgdmZfbnVtYmVyLCB2Zl9xX2luZGV4KSBcXFxuK1x0XHQoV1hfUFhfVFJfV1AoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxuK1xuIC8qIFJlY2VpdmUgRE1BIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpXG4gI2RlZmluZSBXWF9QWF9SUl9CQUgoX2kpICAgICAgICAgICAgICgweDAxMDA0ICsgKChfaSkgKiAweDQwKSlcbkBAIC0xMDM5LDYgKzEwNDQsNyBAQCBzdHJ1Y3Qgd3hfcXVldWVfc3RhdHMge1xuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XG4gXHR1NjQgcmVzdGFydF9xdWV1ZTtcbiBcdHU2NCB0eF9idXN5O1xuK1x0dTMyIHR4X2RvbmVfb2xkO1xuIH07XG4gXG4gc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcbkBAIC0xMDU0LDYgKzEwNjAsMTIgQEAgc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcbiAjZGVmaW5lIHd4X2Zvcl9lYWNoX3JpbmcocG9zbSwgaGVhZG0pIFxcXG4gXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVx1MDAzZW5leHQpXG4gXG4rZW51bSB3eF9yaW5nX3N0YXRlIHtcbitcdFdYX1RYX0RFVEVDVF9IQU5HLFxuK1x0V1hfSEFOR19DSEVDS19BUk1FRCxcbitcdFdYX1JJTkdfU1RBVEVfTkJJVFNcbit9O1xuK1xuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XG4gXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZzsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbGlua2VkIGxpc3Qgb2YgcmluZ3MgKi9cbiBcdHVuc2lnbmVkIGludCB0b3RhbF9ieXRlczsgICAgICAgLyogdG90YWwgYnl0ZXMgcHJvY2Vzc2VkIHRoaXMgaW50ICovXG5AQCAtMTA3Myw2ICsxMDg1LDcgQEAgc3RydWN0IHd4X3Jpbmcge1xuIFx0XHRzdHJ1Y3Qgd3hfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbztcbiBcdFx0c3RydWN0IHd4X3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm87XG4gXHR9O1xuK1x0REVDTEFSRV9CSVRNQVAoc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xuIFx0dTggX19pb21lbSAqdGFpbDtcbiBcdGRtYV9hZGRyX3QgZG1hOyAgICAgICAgICAgICAgICAgLyogcGh5cy4gYWRkcmVzcyBvZiBkZXNjcmlwdG9yIHJpbmcgKi9cbiBcdGRtYV9hZGRyX3QgaGVhZHdiX2RtYTtcbkBAIC0xMjA4LDYgKzEyMjEsOCBAQCBlbnVtIHd4X3N0YXRlIHtcbiBcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxuIFx0V1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLFxuIFx0V1hfU1RBVEVfU0VSVklDRV9TQ0hFRCxcbitcdFdYX1NUQVRFX0RJU0FCTEVELFxuK1x0V1hfU1RBVEVfUkVTX0ZSRUVELFxuIFx0V1hfU1RBVEVfTkJJVFNcdFx0LyogbXVzdCBiZSBsYXN0ICovXG4gfTtcbiBcbkBAIC0xMjc0LDYgKzEyODksOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcbiBcdFdYX0ZMQUdfTkVFRF9ET19SRVNFVCxcbiBcdFdYX0ZMQUdfUlhfTUVSR0VfRU5BQkxFRCxcbiBcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXG4rXHRXWF9GTEFHX05FRURfUEZfUkVTRVQsXG4rXHRXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSxcbiBcdFdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovXG4gfTtcbiBcbkBAIC0xMzk0LDcgKzE0MTEsOCBAQCBzdHJ1Y3Qgd3gge1xuIFx0dm9pZCAoKmF0cikoc3RydWN0IHd4X3JpbmcgKnJpbmcsIHN0cnVjdCB3eF90eF9idWZmZXIgKmZpcnN0LCB1OCBwdHlwZSk7XG4gXHR2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpO1xuIFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcbi1cdHZvaWQgKCpkb19yZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4rXHR2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcbitcdHZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpO1xuIFx0aW50ICgqcHRwX3NldHVwX3NkcCkoc3RydWN0IHd4ICp3eCk7XG4gXHR2b2lkICgqc2V0X251bV9xdWV1ZXMpKHN0cnVjdCB3eCAqd3gpO1xuIFxuQEAgLTE0MjIsNiArMTQ0MCw4IEBAIHN0cnVjdCB3eCB7XG4gXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHNlcnZpY2VfdGFzaztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrO1xuK1x0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxO1xuIFx0c3RydWN0IG11dGV4IHJlc2V0X2xvY2s7IC8qIG11dGV4IGZvciByZXNldCAqL1xuIH07XG4gXG5AQCAtMTUwNCw3ICsxNTI0LDggQEAgcmQzMl93cmFwKHN0cnVjdCB3eCAqd3gsIHUzMiByZWcsIHUzMiAqbGFzdClcbiBcbiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZXJyKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4tXG4rI2RlZmluZSB3eF93YXJuKHd4LCBmbXQsIGFyZy4uLikgXFxcbitcdGRldl93YXJuKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4gI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcXFxuIFx0ZGV2X2RiZyhcdTAwMjYod3gpLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBmbXQsICMjYXJnKVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuaW5kZXggYjJlMTkxOTgyODAzMjYuLjE5NjBmNzE1NDE1MWRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbkBAIC01OSw3ICs1OSw2IEBAIHN0YXRpYyBpbnQgbmdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XG4gXHRrdmZyZWUodGVtcF9yaW5nKTtcbiBcbi1cdHd4X2NvbmZpZ3VyZSh3eCk7XG4gXHRuZ2JlX3VwKHd4KTtcbiBcbiBjbGVhcl9yZXNldDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbmluZGV4IGExNjIyMTk5NTkwOWY5Li5jZGEyMjMxMDFjZWQ3MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbGliLmhcIlxuKyNpbmNsdWRlIFwiLi4vbGlid3gvd3hfZXJyLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfcHRwLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfc3Jpb3YuaFwiXG5AQCAtNDYsNiArNDcsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nYmVfcGNpX3RibFtdID0ge1xuIFx0eyB9XG4gfTtcbiBcbitzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4rXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuK1x0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcbitcdHd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7XG4rXHR3eF9mcmVlX2lycSh3eCk7XG4rXHR3eF9mcmVlX2lzYl9yZXNvdXJjZXMod3gpO1xuK1x0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xuK31cbitcbiAvKipcbiAgKiAgbmdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC0xMzMsNiArMTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZW1ieC5zaXplID0gV1hfVlhNQUlMQk9YX1NJWkU7XG4gXHR3eC1cdTAwM2VzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7XG4rXHR3eC1cdTAwM2Vkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7XG4rXHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDtcbiBcdHNldF9iaXQoMCwgXHUwMDI2d3gtXHUwMDNlZndkX2JpdG1hc2spO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ3LDYgKzE2NCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spO1xuIFxuIFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcbitcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4rXHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMzkyLDYgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFxuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtNDA4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4ge1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbiBcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbkBAIC00MjMsMTMgKzQ0NiwxNCBAQCB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbiB9XG4gXG4tdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4rc3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcbiBcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcdC8qIGVuYWJsZSB0cmFuc21pdHMgKi9cbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC00OTAsNyArNTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcbiBcdHd4X3B0cF9pbml0KHd4KTtcbiBcbi1cdG5nYmVfdXAod3gpO1xuK1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBlcnJfZGlzX3BoeTpcbkBAIC01MDMsNiArNTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbit2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbit7XG4rXHR3eF9jb25maWd1cmUod3gpO1xuK1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4rfVxuK1xuIC8qKlxuICAqIG5nYmVfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTUxOCw2ICs1NDgsOSBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHR3eF9wdHBfc3RvcCh3eCk7XG4gXHRuZ2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuQEAgLTUyNSw3ICs1NTgsNyBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4tXG4rb3V0OlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTU1NSw3ICs1ODgsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpXG4gXHQqZW5hYmxlX3dha2UgPSAhIXd1ZmM7XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICs2MjQsOCBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdCAqL1xuIFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbiBcdFx0bmdiZV9jbG9zZShkZXYpO1xuK1x0ZWxzZVxuK1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSArNjQyLDM2IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdG5ldGlmX3RyYW5zX3VwZGF0ZSh3eC1cdTAwM2VuZXRkZXYpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbitcdHNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRuZ2JlX2Rvd24od3gpO1xuK1x0bmdiZV91cCh3eCk7XG4rXG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4rfVxuK1xuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbitcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbitcdGVsc2VcbitcdFx0bmdiZV9yZXNldCh3eCk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sXG4gXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4rXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03MDAsNiArNzYxLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuK1x0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuIFxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8XG4gXHRcdFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxuQEAgLTc5Niw2ICs4NTgsMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbitcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4rXG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICs4NzgsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbitcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtODIzLDYgKzg5MCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTg1NCw2ICs5MjMsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0cGh5bGlua19kZXN0cm95KHd4LVx1MDAzZXBoeWxpbmspO1xuIFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxuQEAgLTg2Myw3ICs5MzQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXG5AQCAtODkwLDYgKzk2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXFxuXCIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgKzk4Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZ2JlX2RyaXZlciA9IHtcbiBcdC5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLFxuIFx0LnNodXRkb3duID0gbmdiZV9zaHV0ZG93bixcbiBcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxuK1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5pbmRleCA3MDc3YTBkYTRjOTg2YS4uYzkyMzNkYzdhZTUwNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuaW5kZXggMjBjNWEyOTVjNmMyOTYuLmQ4NWVlODMxOTJlNGZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuIFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2xpYi5oXCJcbisjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2Vyci5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3B0cC5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuQEAgLTkzLDYgKzk0LDEwIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTEwNiw2ICsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMjMsNiArMTMyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7XG4gXHR0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHd4KTtcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4rXHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xuK1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTE0NCw2ICsxNTUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTE4Nyw2ICsxOTksOSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xuIFx0aW50IGVycjtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRlcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7XG4gXHRpZiAoZXJyICE9IDApXG4gXHRcdHd4X2Vycih3eCwgXCJIYXJkd2FyZSBFcnJvcjogJWRcXG5cIiwgZXJyKTtcbkBAIC0yMjQsNiArMjM5LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdHd4X2lycV9kaXNhYmxlKHd4KTtcbiBcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuIFxuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtMjkyLDYgKzMwOCwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4gXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4rXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xuK1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbitcdHd4X2ZyZWVfaXJxKHd4KTtcbitcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4rXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4rXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbit9XG4rXG4gLyoqXG4gICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuQEAgLTQwOCw2ICs0MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XG4gXHR3eC1cdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xuK1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kO1xuIFx0c2V0X2JpdCgwLCBcdTAwMjZ3eC1cdTAwM2Vmd2RfYml0bWFzayk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtNTE4LDEyICs1NDksMTYgQEAgc3RhdGljIGludCB0eGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdHd4X3B0cF9zdG9wKHd4KTtcbiBcdHR4Z2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0dHhnYmVfZnJlZV9taXNjX2lycSh3eC1cdTAwM2Vwcml2KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuK291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU0NCw3ICs1NzksOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC02MDYsMTEgKzY0MiwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4gfVxuIFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiBcdFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4gXHRlbHNlXG4gXHRcdHR4Z2JlX3Jlc2V0KHd4KTtcbkBAIC02NTQsNiArNjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSB0eGdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbitcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTc0NSw2ICs3ODIsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcbiBcdHR4Z2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xuK1x0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuIFx0bmV0ZGV2LVx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBcdTAwMjZ0eGdiZV91ZHBfdHVubmVscztcbiBcbiBcdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xuQEAgLTgxNCw2ICs4NTIsMTAgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXG4rXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlO1xuK1xuIFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODg5LDYgKzkzMSw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdGdvdG8gZXJyX3JlbW92ZV9waHk7XG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuK1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcbkBAIC05MTYsNiArOTU5LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTk0OCw2ICs5OTMsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbkBAIC05NTksNyArMTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG5AQCAtOTY5LDYgKzEwMTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xuIFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxuIFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbitcdC5lcnJfaGFuZGxlciA9IFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxuIH07XG4gXG4gbW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG5pbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXG4gXHR1bnNpZ25lZCBsb25nIG5hbWVbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF0gPSB7IDAsIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA0OjA2OjUzLjQzODA0Mjk3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMjA3ODQ1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXYW5neHVuIEV0aGVybmV0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBXYW5neHVuIGV0aGVybmV0IGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgYG5nYmVgIGFuZCBgdHhnYmVgIGRyaXZlcnMgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvYC4gVGhpcyBpcyBhZGRpbmcgc29tZSBjcnVjaWFsIGVycm9yIGhhbmRsaW5nIGFuZCB0aW1lb3V0IHJlY292ZXJ5IGZ1bmN0aW9uYWxpdHkg4oCTIGJhc2ljYWxseSwgcm9idXN0aWZ5aW5nIHRoZSBkcml2ZXJzLiBXZSdyZSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYHd4X2Vyci5jYCwgYHd4X2Vyci5oYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBjb3JlIGZpbGVzOiBgd3hfaHcuY2AsIGB3eF9saWIuY2AsIGB3eF9wdHAuY2AsIGB3eF90eXBlLmhgLCBgbmdiZV9tYWluLmNgLCBhbmQgYHR4Z2JlX21haW4uY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhZGRpbmcgUENJIGVycm9yIHJlY292ZXJ5LCBoYW5kbGluZyBUWCB0aW1lb3V0cywgYW5kIGltcGxlbWVudGluZyBUWCBoYW5nIGRldGVjdGlvbi5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIGFib3V0IHJlYWNoYWJpbGl0eSwgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGVzZSBhcmUgUENJIGRyaXZlcnMsIGFuZCBXYW5neHVuIEdpZ2FiaXQgUENJIEV4cHJlc3Mgc3BlY2lmaWNhbGx5LiBUeXBpY2FsbHksIHdpdGhvdXQgYSBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRvciwgb3IgYSB3YXkgdG8gaW5qZWN0IGVycm9ycyBvciB0aW1lb3V0cyB0aHJvdWdoIGdlbmVyaWMgbmV0ZGV2IGludGVyZmFjZXMsIHRoZXNlIHBhdGhzIGFyZW4ndCBkaXJlY3RseSByZWFjaGFibGUuXG5cbkJ1dCB3YWl0LCBzeXprYWxsZXIhIEl0IGNhbiBmdXp6IG5ldGRldnMsIGNyZWF0aW5nIG9yIHVzaW5nIGV4aXN0aW5nIG9uZXMuIEJ1dCwgZm9yIFBDSSBkcml2ZXJzLCB3ZSdyZSBzdGlsbCBzdHVjayB1bmxlc3MgdGhlcmUncyBhIHZpcnR1YWwgZGV2aWNlIHJlcHJlc2VudGluZyB0aGUgaGFyZHdhcmUuIENhbiBzeXprYWxsZXIgcmVnaXN0ZXIgYSBXYW5neHVuIG5ldGRldiB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW50P1xuXG5ObywgdGhhdCdzIG5vdCBnb2luZyB0byB3b3JrLiBgbmdiZV9wcm9iZWAgYW5kIGB0eGdiZV9wcm9iZWAgYm90aCByZWx5IG9uIHRoZSBQQ0kgZGV2aWNlIGJlaW5nIHByZXNlbnQuIFRoZXkncmUgZ29pbmcgdG8gZmFpbCBpZiB0aGUgaGFyZHdhcmUgaXMgbm90IHRoZXJlLlxuXG5BbHJpZ2h0LCBsZXQncyBleHBsb3JlIGlmIHRoZXJlJ3MgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgV2FuZ3h1biBkZXZpY2VzLiBJJ2xsIHNlYXJjaCB0aHJvdWdoIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9gIGRpcmVjdG9yeSBmb3IgYW55IHJlZmVyZW5jZXMgdG8gYG5nYmVgIG9yIGB0eGdiZWAgd2l0aGluIHRoZSBjb2RlYmFzZSwgaG9waW5nIGZvciBhIGhpbnQgb2YgdmlydHVhbGl6YXRpb24gb3IgZW11bGF0aW9uIHN1cHBvcnQuIFRoYXQncyB0aGUga2V5IHRvIGVmZmVjdGl2ZSB0ZXN0aW5nIG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDQ6MDc6MDAuNTU4ODMwMjg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTc4NzI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZ2JlX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz02Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNjg4LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo2ODk6ICogbmdiZV9wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTY5MC0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTQtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Njk1OiAqIG5nYmVfcHJvYmUgaW5pdGlhbGl6ZXMgYW4gd3ggaWRlbnRpZmllZCBieSBhIHBjaV9kZXYgc3RydWN0dXJlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy02OTYtICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgd3ggcHJpdmF0ZSBzdHJ1Y3R1cmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNjk4LSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Njk5OnN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNzAwLVxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTk4MT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtOTgzLVxcdC5pZF90YWJsZSA9IG5nYmVfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTg0OlxcdC5wcm9iZSAgICA9IG5nYmVfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTk4NS1cXHQucmVtb3ZlICAgPSBuZ2JlX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDQ6MDc6MDAuNzEwNjI0NDk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUzNDAyNDQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXYW5neHVuIFBDSSBEcml2ZXIncyBWaXJ0dWFsaXphdGlvbiBMaW1pdGF0aW9ucyoqXG5cbk9rYXksIHNvIHRoaXMgV2FuZ3h1biBkcml2ZXIgaXMgKmRlZmluaXRlbHkqIGEgUENJLXNwZWNpZmljIGNyZWF0dXJlLiBJdCdzIGJ1aWx0IHRvIGludGVyZmFjZSB3aXRoIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggbWVhbnMgdGhlIHdob2xlIHByb2JlIGZ1bmN0aW9uLCB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQsIHdvbid0IGV2ZW4gKmZpcmUqIHVubGVzcyB0aGF0IGhhcmR3YXJlIGlzIHByZXNlbnQuIFRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyBcInVucmVhY2hhYmxlIGNvZGVcIiBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIEdDRSwgUUVNVSwgdGhlIHdob2xlIGxvdCDigJMgdW5sZXNzIHlvdSdyZSBkb2luZyBmdWxsIFBDSSBwYXNzdGhyb3VnaCBvZiB0aGUgV2FuZ3h1biBkZXZpY2UuIFdoaWNoLCBsZXQncyBiZSBob25lc3QsIGlzIGEgcGFpbi5cblxuV2FpdCBhIHNlY29uZCwgdGhvdWdoLi4uIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXJlIGFyZSBlbXVsYXRvcnMgZm9yIG90aGVyIGtpbmRzIG9mIGRldmljZXMsIHNvIG1heWJlIEknbSBtaXNzaW5nIHNvbWV0aGluZy4gSSBrbm93IHN5emthbGxlciBoYXMgYHZoY2lgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmksIGFuZCBgbmV0ZGV2c2ltYCBwcm92aWRlcyBzb21lIG5ldGRldiBmZWF0dXJlcy4gUGVyaGFwcyB0aGVyZSdzIHNvbWUgb2JzY3VyZSBjb3JuZXIgb2YgdGhlIGtlcm5lbCwgc29tZSBoaWRkZW4gZ2VtLCB0aGF0IGVtdWxhdGVzIFdhbmd4dW4gUENJIGRldmljZXM/IEl0J3MgdW5saWtlbHksIGJ1dCBJJ2xsIGRvdWJsZSBjaGVjayB0byBlbnN1cmUgdGhlcmUgaXNuJ3Qgc29tZSBQQ0kgZW11bGF0aW9uIGZvciBXYW5neHVuIHRoYXQgSSd2ZSBvdmVybG9va2VkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgdGhlIGZhY3RzIGJlZm9yZSBkaXNtaXNzaW5nIHRoZSBwb3NzaWJpbGl0eSBvZiB2aXJ0dWFsaXplZCB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNDowNzowNi4yNDQ2NTE5NzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NTk4NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5HQkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyODpjb25maWcgTkdCRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4NTpjb25maWcgTkdCRVZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTg2LVxcdHRyaXN0YXRlIFxcXCJXYW5neHVuKFIpIEdiRSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX1RYR0JFVkYpICs9IHR4Z2JldmYvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19OR0JFKSArPSBuZ2JlL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX05HQkVWRikgKz0gbmdiZXZmL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL01ha2VmaWxlLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX05HQkUpICs9IG5nYmUub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9NYWtlZmlsZS04LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5oLTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5oOjQ6I2lmbmRlZiBfTkdCRV9FVEhUT09MX0hfXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5oOjU6I2RlZmluZSBfTkdCRV9FVEhUT09MX0hfXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5oLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5oPTc9dm9pZCBuZ2JlX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmgtOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmg6OTojZW5kaWYgLyogX05HQkVfRVRIVE9PTF9IXyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYz0xMz1pbnQgbmdiZV9lZXByb21fY2hrc3VtX2hvc3RpZihzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy0xOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjE5OlxcdGJ1ZmZlci5oZHIucmVxLmNtZCA9IE5HQkVfRldfRUVQUk9NX0NIRUNLU1VNX0NNRDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTIwLVxcdGJ1ZmZlci5oZHIucmVxLmJ1Zl9sZW5oID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTIxLVxcdGJ1ZmZlci5oZHIucmVxLmJ1Zl9sZW5sID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjIyOlxcdGJ1ZmZlci5oZHIucmVxLmNoZWNrc3VtID0gTkdCRV9GV19DTURfREVGQVVMVF9DSEVDS1NVTTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTIzLVxcdC8qIGNvbnZlcnQgb2Zmc2V0IGZyb20gd29yZHMgdG8gYnl0ZXMgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtMzMtXFx0dG1wID0gcmQzMmEod3gsIFdYX01OR19NQk9YLCAxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjM0OlxcdGlmICh0bXAgPT0gTkdCRV9GV19DTURfU1RfUEFTUylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTM1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYz0zOT1zdGF0aWMgaW50IG5nYmVfcmVzZXRfbWlzYyhzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy00My1cXHRcXHQvKiBncGlvMCBpcyB1c2VkIHRvIHBvd2VyIG9uL29mZiBjb250cm9sKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjQ0OlxcdFxcdHdyMzIod3gsIE5HQkVfR1BJT19ERFIsIDB4MSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy00NS1cXHRcXHRuZ2JlX3NmcF9tb2R1bGVzX3R4cnhfcG93ZXJjdGwod3gsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM9NTA9dm9pZCBuZ2JlX3NmcF9tb2R1bGVzX3R4cnhfcG93ZXJjdGwoc3RydWN0IHd4ICp3eCwgYm9vbCBzd2kpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTUyLVxcdC8qIGdwaW8wIGlzIHVzZWQgdG8gcG93ZXIgb24gY29udHJvbCAuIDAgaXMgb24gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjUzOlxcdHdyMzIod3gsIE5HQkVfR1BJT19EUiwgc3dpID8gMCA6IE5HQkVfR1BJT19EUl8wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTU0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM9NjQ9aW50IG5nYmVfcmVzZXRfaHcoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtOTMtXFx0LyogcmVzZXQgbnVtX3Jhcl9lbnRyaWVzIHRvIDEyOCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6OTQ6XFx0d3gtXFx1MDAzZW1hYy5udW1fcmFyX2VudHJpZXMgPSBOR0JFX1JBUl9FTlRSSUVTO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtOTUtXFx0d3hfaW5pdF9yeF9hZGRycyh3eCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5oLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuaDo3OiNpZm5kZWYgX05HQkVfSFdfSF9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5oOjg6I2RlZmluZSBfTkdCRV9IV19IX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmgtOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3Lmg9MTI9aW50IG5nYmVfcmVzZXRfaHcoc3RydWN0IHd4ICp3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuaDoxMzojZW5kaWYgLyogX05HQkVfSFdfSF8gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz0zMz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjM0OlxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRV9ERVZfSURfRU1fV1gxODYwQUxfVykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MzU6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBMikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MzY6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBMlMpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjM3OlxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRV9ERVZfSURfRU1fV1gxODYwQTQpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjM4OlxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRV9ERVZfSURfRU1fV1gxODYwQTRTKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzozOTpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMMikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NDA6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBTDJTKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0MTpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMNCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NDI6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBTDRTKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0MzpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MExDKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0NDpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEExKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo0NTpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVfREVWX0lEX0VNX1dYMTg2MEExTCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNDYtXFx0LyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTY4PXN0YXRpYyB2b2lkIG5nYmVfaW5pdF90eXBlX2NvZGUoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy03My1cXHR3eC1cXHUwMDNlbWFjLnR5cGUgPSB3eF9tYWNfZW07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjc0OlxcdHR5cGVfbWFzayA9ICh1MTYpKHd4LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlX2lkIFxcdTAwMjYgTkdCRV9PRU1fTUFTSyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc1LVxcdG5jc2lfbWFzayA9IHd4LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlX2lkIFxcdTAwMjYgV1hfTkNTSV9NQVNLO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg0LVxcdHd4LVxcdTAwM2VuY3NpX2VuYWJsZWQgPSAobmNzaV9tYXNrID09IFdYX05DU0lfU1VQIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjg1OlxcdFxcdFxcdCAgIHR5cGVfbWFzayA9PSBOR0JFX1NVQklEX09DUF9DQVJEKSA/IDEgOiAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy04Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODctXFx0c3dpdGNoICh0eXBlX21hc2spIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6ODg6XFx0Y2FzZSBOR0JFX1NVQklEX0xZX1lUODUyMVNfU0ZQOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4OTpcXHRjYXNlIE5HQkVfU1VCSURfTFlfTTg4RTE1MTJfU0ZQOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo5MDpcXHRjYXNlIE5HQkVfU1VCSURfWVQ4NTIxU19TRlBfR1BJTzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6OTE6XFx0Y2FzZSBOR0JFX1NVQklEX0lOVEVSTkFMX1lUODUyMVNfU0ZQX0dQSU86XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTkyLVxcdFxcdHd4LVxcdTAwM2VncGlvX2N0cmwgPSAxO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTEwND1zdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTEwOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTEwOlxcdHd4LVxcdTAwM2VtYWMubnVtX3Jhcl9lbnRyaWVzID0gTkdCRV9SQVJfRU5UUklFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTExOlxcdHd4LVxcdTAwM2VtYWMubWF4X3J4X3F1ZXVlcyA9IE5HQkVfTUFYX1JYX1FVRVVFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTEyOlxcdHd4LVxcdTAwM2VtYWMubWF4X3R4X3F1ZXVlcyA9IE5HQkVfTUFYX1RYX1FVRVVFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTEzOlxcdHd4LVxcdTAwM2VtYWMubWNmdF9zaXplID0gTkdCRV9NQ19UQkxfU0laRTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTE0OlxcdHd4LVxcdTAwM2VtYWMudmZ0X3NpemUgPSBOR0JFX1NQX1ZGVF9UQkxfU0laRTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTE1OlxcdHd4LVxcdTAwM2VtYWMucnhfcGJfc2l6ZSA9IE5HQkVfUlhfUEJfU0laRTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTE2OlxcdHd4LVxcdTAwM2VtYWMudHhfcGJfc2l6ZSA9IE5HQkVfVERCX1BCX1NaO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMTctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTI2LVxcdC8qIFNldCBjb21tb24gY2FwYWJpbGl0eSBmbGFncyBhbmQgc2V0dGluZ3MgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTI3OlxcdHd4LVxcdTAwM2VtYXhfcV92ZWN0b3JzID0gTkdCRV9NQVhfTVNJWF9WRUNUT1JTO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxMjg6XFx0ZXJyID0gd3hfZ2V0X3BjaWVfbXNpeF9jb3VudHMod3gsIFxcdTAwMjZtc2l4X2NvdW50LCBOR0JFX01BWF9NU0lYX1ZFQ1RPUlMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMjktXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjEzMzpcXHR3eC1cXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLmxpbWl0ID0gbWluX3QoaW50LCBOR0JFX01BWF9SU1NfSU5ESUNFUyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgIG51bV9vbmxpbmVfY3B1cygpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xNDEtXFx0Lyogc2V0IGRlZmF1bHQgcmluZyBzaXplcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxNDI6XFx0d3gtXFx1MDAzZXR4X3JpbmdfY291bnQgPSBOR0JFX0RFRkFVTFRfVFhEO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxNDM6XFx0d3gtXFx1MDAzZXJ4X3JpbmdfY291bnQgPSBOR0JFX0RFRkFVTFRfUlhEO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0xNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTE0NS1cXHQvKiBzZXQgZGVmYXVsdCB3b3JrIGxpbWl0cyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxNDY6XFx0d3gtXFx1MDAzZXR4X3dvcmtfbGltaXQgPSBOR0JFX0RFRkFVTFRfVFhfV09SSztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTQ3OlxcdHd4LVxcdTAwM2VyeF93b3JrX2xpbWl0ID0gTkdCRV9ERUZBVUxUX1JYX1dPUks7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTE0OC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz0xODU9c3RhdGljIHZvaWQgbmdiZV9pcnFfZW5hYmxlKHN0cnVjdCB3eCAqd3gsIGJvb2wgcXVldWVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTE4OS1cXHQvKiBlbmFibGUgbWlzYyBpbnRlcnJ1cHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTkwOlxcdG1hc2sgPSBOR0JFX1BYX01JU0NfSUVOX01BU0s7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTE5MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yMDAtXFx0aWYgKHF1ZXVlcylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MjAxOlxcdFxcdHd4X2ludHJfZW5hYmxlKHd4LCBOR0JFX0lOVFJfQUxMKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMjAyLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MjAzOlxcdFxcdHd4X2ludHJfZW5hYmxlKHd4LCBOR0JFX0lOVFJfTUlTQyh3eCkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yMDQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTIxMT1zdGF0aWMgaXJxcmV0dXJuX3QgbmdiZV9pbnRyKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTIzNC1cXHRlaWNyX21pc2MgPSB3eF9taXNjX2lzYih3eCwgV1hfSVNCX01JU0MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoyMzU6XFx0aWYgKHVubGlrZWx5KGVpY3JfbWlzYyBcXHUwMDI2IE5HQkVfUFhfTUlTQ19JQ19USU1FU1lOQykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTIzNi1cXHRcXHR3eF9wdHBfY2hlY2tfcHBzX2V2ZW50KHd4KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz0yNDg9c3RhdGljIGlycXJldHVybl90IF9fbmdiZV9tc2l4X21pc2Moc3RydWN0IHd4ICp3eCwgdTMyIGVpY3IpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTI0OS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjI1MDpcXHRpZiAoZWljciBcXHUwMDI2IE5HQkVfUFhfTUlTQ19JQ19WRl9NQk9YKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yNTEtXFx0XFx0d3hfbXNnX3Rhc2sod3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy0yNTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjI1MzpcXHRpZiAodW5saWtlbHkoZWljciBcXHUwMDI2IE5HQkVfUFhfTUlTQ19JQ19USU1FU1lOQykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTI1NC1cXHRcXHR3eF9wdHBfY2hlY2tfcHBzX2V2ZW50KHd4KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYz02OTk9c3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTczNC1cXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCB3eCksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjczNTpcXHRcXHRcXHRcXHRcXHQgTkdCRV9NQVhfVFhfUVVFVUVTLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo3MzY6XFx0XFx0XFx0XFx0XFx0IE5HQkVfTUFYX1JYX1FVRVVFUyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTczNy1cXHRpZiAoIW5ldGRldikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc1OS1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NzYwOlxcdHBjaV9zcmlvdl9zZXRfdG90YWx2ZnMocGRldiwgTkdCRV9NQVhfVkZTX0RSVl9MSU1JVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc2MS1cXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc5Mi1cXHQvKiBjaGVjayBpZiBmbGFzaCBsb2FkIGlzIGRvbmUgYWZ0ZXIgaHcgcG93ZXIgdXAgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6NzkzOlxcdGVyciA9IHd4X2NoZWNrX2ZsYXNoX2xvYWQod3gsIE5HQkVfU1BJX0lMRFJfU1RBVFVTX1BFUlNUKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtNzk0LVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc5NS1cXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6Nzk2OlxcdGVyciA9IHd4X2NoZWNrX2ZsYXNoX2xvYWQod3gsIE5HQkVfU1BJX0lMRFJfU1RBVFVTX1BXUlJTVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTc5Ny1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTgxMi1cXHRpZiAod3gtXFx1MDAzZWJ1cy5mdW5jID09IDApIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6ODEzOlxcdFxcdHdyMzIod3gsIE5HQkVfQ0FMU1VNX0NBUF9TVEFUVVMsIDB4MCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjgxNDpcXHRcXHR3cjMyKHd4LCBOR0JFX0VFUFJPTV9WRVJTSU9OX1NUT1JFX1JFRywgMHgwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODE1LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjgxNjpcXHRcXHRlMnJvbV9ja3N1bV9jYXAgPSByZDMyKHd4LCBOR0JFX0NBTFNVTV9DQVBfU1RBVFVTKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6ODE3OlxcdFxcdHNhdmVkX3ZlciA9IHJkMzIod3gsIE5HQkVfRUVQUk9NX1ZFUlNJT05fU1RPUkVfUkVHKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODE4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy04NDUtXFx0XFx0d3hfcmVhZF9lZV9ob3N0aWYod3gsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjg0NjpcXHRcXHRcXHRcXHQgIHd4LVxcdTAwM2VlZXByb20uc3dfcmVnaW9uX29mZnNldCArIE5HQkVfRUVQUk9NX1ZFUlNJT05fSCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODQ3LVxcdFxcdFxcdFxcdCAgXFx1MDAyNmUycm9tX3Zlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtODQ5LVxcdFxcdHd4X3JlYWRfZWVfaG9zdGlmKHd4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo4NTA6XFx0XFx0XFx0XFx0ICB3eC1cXHUwMDNlZWVwcm9tLnN3X3JlZ2lvbl9vZmZzZXQgKyBOR0JFX0VFUFJPTV9WRVJTSU9OX0wsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTg1MS1cXHRcXHRcXHRcXHQgIFxcdTAwMjZlMnJvbV92ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy04NTItXFx0XFx0ZXRyYWNrX2lkIHw9IGUycm9tX3ZlcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6ODUzOlxcdFxcdHdyMzIod3gsIE5HQkVfRUVQUk9NX1ZFUlNJT05fU1RPUkVfUkVHLCBldHJhY2tfaWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy04NTQtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jPTE2PXN0YXRpYyBpbnQgbmdiZV9waHlfcmVhZF9yZWdfaW50ZXJuYWwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTIxLVxcdFxcdHJldHVybiAweGZmZmY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjIyOlxcdHJldHVybiAodTE2KXJkMzIod3gsIE5HQkVfUEhZX0NPTkZJRyhyZWdudW0pKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmMtMjMtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jPTI1PXN0YXRpYyBpbnQgbmdiZV9waHlfd3JpdGVfcmVnX2ludGVybmFsKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTI5LVxcdGlmIChwaHlfYWRkciA9PSAwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzozMDpcXHRcXHR3cjMyKHd4LCBOR0JFX1BIWV9DT05GSUcocmVnbnVtKSwgdmFsdWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0zMS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYz03OD1zdGF0aWMgdm9pZCBuZ2JlX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTEwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTAyOlxcdHdyMzJtKHd4LCBOR0JFX0NGR19MQU5fU1BFRUQsIDB4MywgbGFuX3NwZWVkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmMtMTAzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oOjc6I2lmbmRlZiBfTkdCRV9NRElPX0hfXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oOjg6I2RlZmluZSBfTkdCRV9NRElPX0hfXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oLTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5oPTEwPWludCBuZ2JlX21kaW9faW5pdChzdHJ1Y3Qgd3ggKnd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmg6MTE6I2VuZGlmIC8qIF9OR0JFX01ESU9fSF8gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0zLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo0OiNpZm5kZWYgX05HQkVfVFlQRV9IX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1OiNkZWZpbmUgX05HQkVfVFlQRV9IX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC02LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwOi8qKioqKioqKioqKiogTkdCRV9yZWdpc3Rlci5oICoqKioqKioqKioqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTEtLyogRGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMjojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMX1dcXHRcXHQweDAxMDBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTM6I2RlZmluZSBOR0JFX0RFVl9JRF9FTV9XWDE4NjBBMlxcdFxcdFxcdDB4MDEwMVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxNDojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEEyU1xcdFxcdDB4MDEwMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxNTojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEE0XFx0XFx0XFx0MHgwMTAzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjE2OiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwQTRTXFx0XFx0MHgwMTA0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjE3OiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwQUwyXFx0XFx0MHgwMTA1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjE4OiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwQUwyU1xcdFxcdDB4MDEwNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxOTojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMNFxcdFxcdDB4MDEwN1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoyMDojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEFMNFNcXHRcXHQweDAxMDhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MjE6I2RlZmluZSBOR0JFX0RFVl9JRF9FTV9XWDE4NjBMQ1xcdFxcdFxcdDB4MDEwOVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoyMjojZGVmaW5lIE5HQkVfREVWX0lEX0VNX1dYMTg2MEExXFx0XFx0XFx0MHgwMTBhXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjIzOiNkZWZpbmUgTkdCRV9ERVZfSURfRU1fV1gxODYwQTFMXFx0XFx0MHgwMTBiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0yNS0vKiBTdWJzeXN0ZW0gSUQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MjY6I2RlZmluZSBOR0JFX1NVQklEX004OEUxNTEyX1NGUFxcdFxcdFxcdDB4MDAwM1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoyNzojZGVmaW5lIE5HQkVfU1VCSURfT0NQX0NBUkRcXHRcXHRcXHQweDAwNDBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Mjg6I2RlZmluZSBOR0JFX1NVQklEX0xZX004OEUxNTEyX1NGUFxcdFxcdDB4MDA1MFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoyOTojZGVmaW5lIE5HQkVfU1VCSURfTTg4RTE1MTJfUko0NVxcdFxcdDB4MDA1MVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDozMDojZGVmaW5lIE5HQkVfU1VCSURfTTg4RTE1MTJfTUlYXFx0XFx0XFx0MHgwMDUyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjMxOiNkZWZpbmUgTkdCRV9TVUJJRF9ZVDg1MjFTX1NGUFxcdFxcdFxcdDB4MDA2MFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDozMjojZGVmaW5lIE5HQkVfU1VCSURfSU5URVJOQUxfWVQ4NTIxU19TRlBcXHRcXHQweDAwNjFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MzM6I2RlZmluZSBOR0JFX1NVQklEX1lUODUyMVNfU0ZQX0dQSU9cXHRcXHQweDAwNjJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MzQ6I2RlZmluZSBOR0JFX1NVQklEX0lOVEVSTkFMX1lUODUyMVNfU0ZQX0dQSU9cXHQweDAwNjRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MzU6I2RlZmluZSBOR0JFX1NVQklEX0xZX1lUODUyMVNfU0ZQXFx0XFx0MHgwMDcwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjM2OiNkZWZpbmUgTkdCRV9TVUJJRF9SR01JSV9GUEdBXFx0XFx0XFx0MHgwMDgwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDozODojZGVmaW5lIE5HQkVfT0VNX01BU0tcXHRcXHRcXHRcXHQweDAwRkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMzktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNDEtLyogY2hpcCBjb250cm9sIFJlZ2lzdGVycyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo0MjojZGVmaW5lIE5HQkVfTUlTX1BSQl9DVExcXHRcXHRcXHQweDEwMDEwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTQzLS8qIEZNR1IgUmVnaXN0ZXJzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjQ0OiNkZWZpbmUgTkdCRV9TUElfSUxEUl9TVEFUVVNcXHRcXHRcXHQweDEwMTIwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjQ1OiNkZWZpbmUgTkdCRV9TUElfSUxEUl9TVEFUVVNfUEVSU1RcXHRcXHRCSVQoMCkgLyogUENJRV9QRVJTVCBpcyBkb25lICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjQ2OiNkZWZpbmUgTkdCRV9TUElfSUxEUl9TVEFUVVNfUFdSUlNUXFx0XFx0QklUKDEpIC8qIFBvd2VyIG9uIHJlc2V0IGlzIGRvbmUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTQ4LS8qIENoZWNrc3VtIGFuZCBFRVBST00gcG9pbnRlcnMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NDk6I2RlZmluZSBOR0JFX0NBTFNVTV9DT01NQU5EXFx0XFx0XFx0MHhFOVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1MDojZGVmaW5lIE5HQkVfQ0FMU1VNX0NBUF9TVEFUVVNcXHRcXHRcXHQweDEwMjI0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjUxOiNkZWZpbmUgTkdCRV9FRVBST01fVkVSU0lPTl9TVE9SRV9SRUdcXHRcXHQweDEwMjJDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjUyOiNkZWZpbmUgTkdCRV9TQU5fTUFDX0FERFJfUFRSXFx0XFx0XFx0MHgxOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1MzojZGVmaW5lIE5HQkVfREVWSUNFX0NBUFNcXHRcXHRcXHQweDFDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjU0OiNkZWZpbmUgTkdCRV9FRVBST01fVkVSU0lPTl9MXFx0XFx0XFx0MHgxRFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1NTojZGVmaW5lIE5HQkVfRUVQUk9NX1ZFUlNJT05fSFxcdFxcdFxcdDB4MUVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTU3LS8qIEdQSU8gUmVnaXN0ZXJzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjU4OiNkZWZpbmUgTkdCRV9HUElPX0RSXFx0XFx0XFx0XFx0MHgxNDgwMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo1OTojZGVmaW5lIE5HQkVfR1BJT19ERFJcXHRcXHRcXHRcXHQweDE0ODA0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTYwLS8qR1BJTyBiaXQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NjE6I2RlZmluZSBOR0JFX0dQSU9fRFJfMFxcdFxcdFxcdFxcdEJJVCgwKSAvKiBTRFAwIERhdGEgVmFsdWUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NjI6I2RlZmluZSBOR0JFX0dQSU9fRFJfMVxcdFxcdFxcdFxcdEJJVCgxKSAvKiBTRFAxIERhdGEgVmFsdWUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NjM6I2RlZmluZSBOR0JFX0dQSU9fRERSXzBcXHRcXHRcXHRcXHRCSVQoMCkgLyogU0RQMCBJTyBkaXJlY3Rpb24gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NjQ6I2RlZmluZSBOR0JFX0dQSU9fRERSXzFcXHRcXHRcXHRcXHRCSVQoMSkgLyogU0RQMSBJTyBkaXJlY3Rpb24gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtNjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTY2LS8qIEV4dGVuZGVkIEludGVycnVwdCBFbmFibGUgU2V0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjY3OiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lFTl9ERVZfUlNUXFx0XFx0QklUKDEwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo2ODojZGVmaW5lIE5HQkVfUFhfTUlTQ19JRU5fVElNRVNZTkNcXHRcXHRCSVQoMTEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjY5OiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lFTl9FVEhfTEtcXHRcXHRcXHRCSVQoMTgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjcwOiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lFTl9JTlRfRVJSXFx0XFx0QklUKDIwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo3MTojZGVmaW5lIE5HQkVfUFhfTUlTQ19JQ19WRl9NQk9YXFx0XFx0XFx0QklUKDIzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo3MjojZGVmaW5lIE5HQkVfUFhfTUlTQ19JRU5fR1BJT1xcdFxcdFxcdEJJVCgyNilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NzM6I2RlZmluZSBOR0JFX1BYX01JU0NfSUVOX01BU0sgKCBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjc0OlxcdFxcdFxcdFxcdE5HQkVfUFhfTUlTQ19JRU5fREVWX1JTVCB8IFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NzU6XFx0XFx0XFx0XFx0TkdCRV9QWF9NSVNDX0lFTl9USU1FU1lOQyB8IFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6NzY6XFx0XFx0XFx0XFx0TkdCRV9QWF9NSVNDX0lFTl9FVEhfTEsgfCBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjc3OlxcdFxcdFxcdFxcdE5HQkVfUFhfTUlTQ19JRU5fSU5UX0VSUiB8IFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6Nzg6XFx0XFx0XFx0XFx0TkdCRV9QWF9NSVNDX0lDX1ZGX01CT1ggfCBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjc5OlxcdFxcdFxcdFxcdE5HQkVfUFhfTUlTQ19JRU5fR1BJTylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtODAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTgxLS8qIEV4dGVuZGVkIEludGVycnVwdCBDYXVzZSBSZWFkICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjgyOiNkZWZpbmUgTkdCRV9QWF9NSVNDX0lDX1RJTUVTWU5DXFx0XFx0QklUKDExKSAvKiB0aW1lIHN5bmMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjg0OiNkZWZpbmUgTkdCRV9JTlRSX0FMTFxcdFxcdFxcdFxcdDB4MUZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjg1OiNkZWZpbmUgTkdCRV9JTlRSX01JU0MoQSlcXHRcXHRcXHRCSVQoKEEpLVxcdTAwM2Vtc2l4X2VudHJ5LVxcdTAwM2VlbnRyeSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtODYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjg3OiNkZWZpbmUgTkdCRV9QSFlfQ09ORklHKHJlZ19vZmZzZXQpXFx0XFx0KDB4MTQwMDAgKyAoKHJlZ19vZmZzZXQpICogNCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjg4OiNkZWZpbmUgTkdCRV9DRkdfTEFOX1NQRUVEXFx0XFx0XFx0MHgxNDQ0MFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo4OTojZGVmaW5lIE5HQkVfQ0ZHX1BPUlRfU1RcXHRcXHRcXHQweDE0NDA0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo5MTojZGVmaW5lIE5HQkVfRldfRUVQUk9NX0NIRUNLU1VNX0NNRFxcdFxcdDB4RTlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6OTI6I2RlZmluZSBOR0JFX0ZXX05WTV9EQVRBX09GRlNFVFxcdFxcdFxcdDNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6OTM6I2RlZmluZSBOR0JFX0ZXX0NNRF9ERUZBVUxUX0NIRUNLU1VNXFx0XFx0MHhGRiAvKiBjaGVja3N1bSBhbHdheXMgMHhGRiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo5NDojZGVmaW5lIE5HQkVfRldfQ01EX1NUX1BBU1NcXHRcXHRcXHQweDgwNjU4MzgzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjk1OiNkZWZpbmUgTkdCRV9GV19DTURfU1RfRkFJTFxcdFxcdFxcdDB4NzA2NTczNzZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtOTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjk3OiNkZWZpbmUgTkdCRV9NQVhfRkRJUl9JTkRJQ0VTXFx0XFx0XFx0N1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDo5ODojZGVmaW5lIE5HQkVfTUFYX1JTU19JTkRJQ0VTXFx0XFx0XFx0OFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC05OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTAwOiNkZWZpbmUgTkdCRV9NQVhfUlhfUVVFVUVTXFx0XFx0XFx0KE5HQkVfTUFYX0ZESVJfSU5ESUNFUyArIDEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwMTojZGVmaW5lIE5HQkVfTUFYX1RYX1FVRVVFU1xcdFxcdFxcdChOR0JFX01BWF9GRElSX0lORElDRVMgKyAxKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwMzojZGVmaW5lIE5HQkVfRVRIX0xFTkdUSF9PRl9BRERSRVNTXFx0XFx0NlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMDQ6I2RlZmluZSBOR0JFX01BWF9NU0lYX1ZFQ1RPUlNcXHRcXHRcXHQweDA5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwNTojZGVmaW5lIE5HQkVfUkFSX0VOVFJJRVNcXHRcXHRcXHQzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMDY6I2RlZmluZSBOR0JFX1JYX1BCX1NJWkVcXHRcXHRcXHRcXHQ0MlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMDc6I2RlZmluZSBOR0JFX01DX1RCTF9TSVpFXFx0XFx0XFx0MTI4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwODojZGVmaW5lIE5HQkVfU1BfVkZUX1RCTF9TSVpFXFx0XFx0XFx0MTI4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEwOTojZGVmaW5lIE5HQkVfVERCX1BCX1NaXFx0XFx0XFx0XFx0KDIwICogMTAyNCkgLyogMTYwS0IgUGFja2V0IEJ1ZmZlciAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oLTExMS0vKiBUWC9SWCBkZXNjcmlwdG9yIGRlZmluZXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTEyOiNkZWZpbmUgTkdCRV9ERUZBVUxUX1RYRFxcdFxcdFxcdDUxMiAvKiBkZWZhdWx0IHJpbmcgc2l6ZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMTM6I2RlZmluZSBOR0JFX0RFRkFVTFRfVFhfV09SS1xcdFxcdFxcdDI1NlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMTQ6I2RlZmluZSBOR0JFX01BWF9UWERcXHRcXHRcXHRcXHQ4MTkyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExNTojZGVmaW5lIE5HQkVfTUlOX1RYRFxcdFxcdFxcdFxcdDEyOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjExNzojZGVmaW5lIE5HQkVfREVGQVVMVF9SWERcXHRcXHRcXHQ1MTIgLyogZGVmYXVsdCByaW5nIHNpemUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTE4OiNkZWZpbmUgTkdCRV9ERUZBVUxUX1JYX1dPUktcXHRcXHRcXHQyNTZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmg6MTE5OiNkZWZpbmUgTkdCRV9NQVhfUlhEXFx0XFx0XFx0XFx0ODE5MlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMjA6I2RlZmluZSBOR0JFX01JTl9SWERcXHRcXHRcXHRcXHQxMjhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgtMTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaDoxMjI6I2RlZmluZSBOR0JFX01BWF9WRlNfRFJWX0xJTUlUXFx0XFx0XFx0N1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMjMtZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oPTEyOD12b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaC0xMjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oOjEzMDojZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvTWFrZWZpbGUtNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19OR0JFKSArPSBuZ2JldmYub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL01ha2VmaWxlLTgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jPTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZ2JldmZfcGNpX3RibFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6Mjk6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMX1cpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzozMDpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTIpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzozMTpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTJTKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MzI6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEE0KSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MzM6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEE0UykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjM0OlxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDIpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzozNTpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUwyUykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjM2OlxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDQpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzozNzpcXHR7IFBDSV9WREVWSUNFKFdBTkdYVU4sIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUw0UykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjM4OlxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBOQ1NJKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6Mzk6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEExKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6NDA6XFx0eyBQQ0lfVkRFVklDRShXQU5HWFVOLCBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMMSkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTQxLVxcdC8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM9NjA9c3RhdGljIGludCBuZ2JldmZfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy03Ny1cXHR3eC1cXHUwMDNlbWFjLnR5cGUgPSB3eF9tYWNfZW07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzo3ODpcXHR3eC1cXHUwMDNlbWFjLm1heF9tc2l4X3ZlY3RvcnMgPSBOR0JFVkZfTUFYX01TSVhfVkVDVE9SUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTc5LVxcdC8qIGxvY2sgdG8gcHJvdGVjdCBtYWlsYm94IGFjY2Vzc2VzICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTEwMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEwMTpcXHR3eC1cXHUwMDNlbWFjLm1heF90eF9xdWV1ZXMgPSBOR0JFVkZfTUFYX1RYX1FVRVVFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEwMjpcXHR3eC1cXHUwMDNlbWFjLm1heF9yeF9xdWV1ZXMgPSBOR0JFVkZfTUFYX1JYX1FVRVVFUztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTEwMy1cXHQvKiBFbmFibGUgZHluYW1pYyBpbnRlcnJ1cHQgdGhyb3R0bGluZyByYXRlcyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0xMDctXFx0Lyogc2V0IGRlZmF1bHQgcmluZyBzaXplcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTA4OlxcdHd4LVxcdTAwM2V0eF9yaW5nX2NvdW50ID0gTkdCRVZGX0RFRkFVTFRfVFhEO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTA5OlxcdHd4LVxcdTAwM2VyeF9yaW5nX2NvdW50ID0gTkdCRVZGX0RFRkFVTFRfUlhEO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTEwLVxcdC8qIHNldCBkZWZhdWx0IHdvcmsgbGltaXRzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxMTE6XFx0d3gtXFx1MDAzZXR4X3dvcmtfbGltaXQgPSBOR0JFVkZfREVGQVVMVF9UWF9XT1JLO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTEyOlxcdHd4LVxcdTAwM2VyeF93b3JrX2xpbWl0ID0gTkdCRVZGX0RFRkFVTFRfUlhfV09SSztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTExMy1cXHR3eC1cXHUwMDNlc2V0X251bV9xdWV1ZXMgPSBuZ2JldmZfc2V0X251bV9xdWV1ZXM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jPTEzNj1zdGF0aWMgaW50IG5nYmV2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTY2LVxcdFxcdFxcdFxcdFxcdCBzaXplb2Yoc3RydWN0IHd4KSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjE2NzpcXHRcXHRcXHRcXHRcXHQgTkdCRVZGX01BWF9UWF9RVUVVRVMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNjg6XFx0XFx0XFx0XFx0XFx0IE5HQkVWRl9NQVhfUlhfUVVFVUVTKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTE2OS1cXHRpZiAoIW5ldGRldikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaC0zLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6NDojaWZuZGVmIF9OR0JFVkZfVFlQRV9IX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6NTojZGVmaW5lIF9OR0JFVkZfVFlQRV9IX1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmgtNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oLTctLyogRGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6ODojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUxfVyAgICAgICAgICAgICAweDAxMTBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjk6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEEyICAgICAgICAgICAgICAgMHgwMTExXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxMDojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQTJTICAgICAgICAgICAgICAweDAxMTJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjExOiNkZWZpbmUgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBNCAgICAgICAgICAgICAgIDB4MDExM1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTI6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEE0UyAgICAgICAgICAgICAgMHgwMTE0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxMzojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUwyICAgICAgICAgICAgICAweDAxMTVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjE0OiNkZWZpbmUgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBBTDJTICAgICAgICAgICAgIDB4MDExNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTU6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEFMNCAgICAgICAgICAgICAgMHgwMTE3XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxNjojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUw0UyAgICAgICAgICAgICAweDAxMThcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjE3OiNkZWZpbmUgTkdCRVZGX0RFVl9JRF9FTV9XWDE4NjBOQ1NJICAgICAgICAgICAgIDB4MDExOVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MTg6I2RlZmluZSBOR0JFVkZfREVWX0lEX0VNX1dYMTg2MEExICAgICAgICAgICAgICAgMHgwMTFhXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoxOTojZGVmaW5lIE5HQkVWRl9ERVZfSURfRU1fV1gxODYwQUwxICAgICAgICAgICAgICAweDAxMWJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oLTIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MjE6I2RlZmluZSBOR0JFVkZfTUFYX01TSVhfVkVDVE9SUyAgICAgICAgICAgICAgIDFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfdHlwZS5oOjIyOiNkZWZpbmUgTkdCRVZGX01BWF9SWF9RVUVVRVMgICAgICAgICAgICAgICAgICAxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyMzojZGVmaW5lIE5HQkVWRl9NQVhfVFhfUVVFVUVTICAgICAgICAgICAgICAgICAgMVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MjQ6I2RlZmluZSBOR0JFVkZfREVGQVVMVF9UWEQgICAgICAgICAgICAgICAgICAgIDEyOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MjU6I2RlZmluZSBOR0JFVkZfREVGQVVMVF9SWEQgICAgICAgICAgICAgICAgICAgIDEyOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6MjY6I2RlZmluZSBOR0JFVkZfREVGQVVMVF9UWF9XT1JLICAgICAgICAgICAgICAgIDI1NlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmg6Mjc6I2RlZmluZSBOR0JFVkZfREVGQVVMVF9SWF9XT1JLICAgICAgICAgICAgICAgIDI1NlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl90eXBlLmgtMjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX3R5cGUuaDoyOTojZW5kaWYgLyogX05HQkVWRl9UWVBFX0hfICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA0OjA3OjA2LjQ5MTI2MDM4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MjU3ODYzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIFZpcnR1YWxpemVkIFdvcmxkKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgdGhlIFdhbmd4dW4gZHJpdmVycyDigJMgc3BlY2lmaWNhbGx5IHRoZSBgbmdiZWAgYW5kIGB0eGdiZWAgZHJpdmVycy4gVGhlc2UgYXJlLCBhcyBJIHN1c3BlY3RlZCwgZGVzaWduZWQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGVyZSdzIG5vIHZpcnR1YWwgZGV2aWNlIGVtdWxhdGlvbiBvciBhbnl0aGluZyBsaWtlIHRoYXQgYnVpbHQgaW50byB0aGUga2VybmVsIGZvciB0aGVtLiBUaGlzIG1lYW5zIHRoZSBjb2RlIGJlaW5nIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2gg4oCTIHRoZSBlcnJvciBoYW5kbGluZywgdGhlIFRYIHRpbWVvdXQgcmVjb3ZlcnksIGFuZCB0aGUgVFggaGFuZyBkZXRlY3Rpb24g4oCTIGlzIHNpbXBseSB1bnJlYWNoYWJsZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBldmVuIFFFTVUuXG5cbk15IGluaXRpYWwgZ3V0IGZlZWxpbmcgd2FzIHJpZ2h0OyB0aGlzIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBCdXQgSSBuZWVkZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQgbWUgdHJhY2UgaG93IHRoaXMgY29kZSBnZXRzIGNhbGxlZC4gSXQncyBuZXN0bGVkIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jYC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRoZSBgd3hfdHhfdGltZW91dGAgZnVuY3Rpb24gaXMgdGhlIHBvaW50IG9mIGVudHJ5IGFuZCBpdCdzIGhvb2tlZCB1cCBhcyB0aGUgYC5uZG9fdHhfdGltZW91dGAgaGFuZGxlci4gTm93LCB0byBnZXQgdGhhdCByZWdpc3RlcmVkLCBlaXRoZXIgYG5nYmVfcHJvYmVgIG9yIGB0eGdiZV9wcm9iZWAgaGFzIHRvIHN1Y2NlZWQuIEFuZCB0aG9zZSBwcm9iZSBmdW5jdGlvbnMgYXJlICp2ZXJ5KiBzcGVjaWZpYy4gVGhleSdyZSB0aWVkIHRvIHRoZSBQQ0kgZGV2aWNlJ3MgcHJlc2VuY2UgYW5kIGludm9sdmUgYWN0dWFsIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uOiByZWFkaW5nIEVFUFJPTSwgcmVzZXR0aW5nIHRoZSBNQUMsIGFsbCB0aGF0IHN0dWZmLlxuXG5Tbywgd2l0aG91dCB0aGUgcmVhbCBoYXJkd2FyZSwgdGhvc2UgcHJvYmVzIHdpbGwgZWl0aGVyIGZhaWwgZWFybHkgb24gb3Igd29uJ3QgZXZlbiBiZSBpbnZva2VkLiBObyBwcm9iZSA9IG5vIG5ldGRldiA9IG5vIHJlZ2lzdHJhdGlvbiBvZiBgLm5kb190eF90aW1lb3V0YC4gVGhhdCdzIHRoYXQuIFRoZSBQQ0kgZXJyb3IgaGFuZGxlcnMgbGlrZSBgd3hfZXJyX2hhbmRsZXJgIGhhdmUgdGhlIHNhbWUgZGVwZW5kZW5jeSBvbiB0aGUgcGh5c2ljYWwgUENJIGRldmljZSBleGlzdGluZy4gVGhlIHdob2xlIHNldHVwIGlzIHJlbGlhbnQgb24gdGhlIHJlYWwgaGFyZHdhcmUuXG5cblRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaW1lIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2ODAsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA0OjA3OjE0LjExNzA0ODY5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUpIHRvIGFkZCBQQ0kgZXJyb3IgcmVjb3ZlcnksIFRYIHRpbWVvdXQgaGFuZGxpbmcsIGFuZCBUWCBoYW5nIGRldGVjdGlvbi4gVGhlc2UgYXJlIGRyaXZlcnMgZm9yIHNwZWNpZmljIHBoeXNpY2FsIFBDSSBoYXJkd2FyZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIFdhbmd4dW4gZGV2aWNlcyBpbiB0aGUga2VybmVsLCB0aGUgcHJvYmUgZnVuY3Rpb25zIHdpbGwgbm90IHN1Y2NlZWQgYW5kIHRoZSBuZXRkZXZzIHdpbGwgbm90IGJlIHJlZ2lzdGVyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSkgdG8gYWRkIFBDSSBlcnJvciByZWNvdmVyeSwgVFggdGltZW91dCBoYW5kbGluZywgYW5kIFRYIGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgZHJpdmVycyBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgUENJIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgV2FuZ3h1biBkZXZpY2VzIGluIHRoZSBrZXJuZWwsIHRoZSBwcm9iZSBmdW5jdGlvbnMgd2lsbCBub3Qgc3VjY2VlZCBhbmQgdGhlIG5ldGRldnMgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow476kg[1] Phase: Running StartedAt: 2026-06-30 04:08:18 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow476kg[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-30 04:08:19 +0000 UTC FinishedAt: 2026-06-30 04:08:47 +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,}