Name: series-workflownvk9f Phase: Failed StartedAt: 2026-09-02 23:16:40 +0000 UTC FinishedAt: 2026-09-02 23:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflownvk9f[0] Phase: Succeeded StartedAt: 2026-09-02 23:16:40 +0000 UTC FinishedAt: 2026-09-02 23:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflownvk9f[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 23:16:40 +0000 UTC FinishedAt: 2026-09-02 23:59:14 +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+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UgaW4gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZSgpIHdpdGhpbiB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMpLiBUaGlzIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBTb0MgZXRoZXJuZXQgY29udHJvbGxlcnMgKGZvdW5kIG9uIEF0bWVsL01pY3JvY2hpcCBBVDkxL1NBTUE1LCBYaWxpbnggWnlucSwgZXRjLikgYW5kIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgeDg2L3ZpcnQgb3IgR0NFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MGFkOTY3MTYyMDZlNGRlMWQyNjg2NzdkMmFlYTNhZmE1Yzk3NGFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMzo1ODoxNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuaW5kZXggNzZlZTRmNTA2MDMzNS4uODE1MzBiOTI1N2IyMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbkBAIC00Mjk3LDcgJiM0Mzs0Mjk3LDcgQEAgc3RhdGljIGludCBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRzdHJ1Y3QgbWFjYl9xdWV1ZV9lbnN0X2NvbmZpZyAqZW5zdF9xdWV1ZTtcbiBcdHN0cnVjdCB0Y190YXByaW9fc2NoZWRfZW50cnkgKmVudHJ5O1xuIFx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQ7XG4mIzQzO1x0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3Mga3NldCA9IHt9O1xuIFx0c3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlO1xuIFx0dTMyIHF1ZXVlX21hc2s7XG4gXHR1OCBxdWV1ZV9pZDtcbkBAIC00MzI0LDcgJiM0Mzs0MzI0LDcgQEAgc3RhdGljIGludCBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR9XG4gXG4gXHRzcGVlZCA9IGtzZXQuYmFzZS5zcGVlZDtcbi1cdGlmICh1bmxpa2VseShzcGVlZCBcdTAwM2M9IDApKSB7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHNwZWVkID09IFNQRUVEX1VOS05PV04gfHwgIXNwZWVkKSkge1xuIFx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7SW52YWxpZCBzcGVlZDogJWRcXG5cJiMzNDssIHNwZWVkKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UgaW4gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZSgpIHdpdGhpbiB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMpLiBUaGlzIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBTb0MgZXRoZXJuZXQgY29udHJvbGxlcnMgKGZvdW5kIG9uIEF0bWVsL01pY3JvY2hpcCBBVDkxL1NBTUE1LCBYaWxpbnggWnlucSwgZXRjLikgYW5kIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgeDg2L3ZpcnQgb3IgR0NFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MGFkOTY3MTYyMDZlNGRlMWQyNjg2NzdkMmFlYTNhZmE1Yzk3NGFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMzo1ODoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCmluZGV4IDc2ZWU0ZjUwNjAzMzUuLjgxNTMwYjkyNTdiMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwpAQCAtNDI5Nyw3ICYjNDM7NDI5Nyw3IEBAIHN0YXRpYyBpbnQgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXN0cnVjdCBtYWNiX3F1ZXVlX2Vuc3RfY29uZmlnICplbnN0X3F1ZXVlOwogCXN0cnVjdCB0Y190YXByaW9fc2NoZWRfZW50cnkgKmVudHJ5OwogCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3Mga3NldDsKJiM0MzsJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3Mga3NldCA9IHt9OwogCXN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZTsKIAl1MzIgcXVldWVfbWFzazsKIAl1OCBxdWV1ZV9pZDsKQEAgLTQzMjQsNyAmIzQzOzQzMjQsNyBAQCBzdGF0aWMgaW50IG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl9CiAKIAlzcGVlZCA9IGtzZXQuYmFzZS5zcGVlZDsKLQlpZiAodW5saWtlbHkoc3BlZWQgJmx0Oz0gMCkpIHsKJiM0MzsJaWYgKHVubGlrZWx5KHNwZWVkID09IFNQRUVEX1VOS05PV04gfHwgIXNwZWVkKSkgewogCQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtJbnZhbGlkIHNwZWVkOiAlZFxuJiMzNDssIHNwZWVkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ2FkZW5jZSBNQUNCIFBhdGNoKioKCk9rYXksIHNvIHRoZSBkaWZmIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGlzIGRyaXZlciBldmVuIGlzIOKAkyBpdCYjMzk7cyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBldGhlcm5ldCBjb250cm9sbGVyIGRyaXZlci4gR2l2ZW4gdGhhdCwgdGhlIG5leHQgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB3aGV0aGVyIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgZXZlbiAqYWNjZXNzaWJsZSogd2l0aGluIGEgdHlwaWNhbCBRRU1VIGVudmlyb25tZW50LiBJcyBDYWRlbmNlIE1BQ0IgZW11bGF0ZWQsIG9yIGlzIHRoaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIHBvc3NpYmx5IFNvQy1zcGVjaWZpYz8gQ2FuIEkgdHJpZ2dlciB0aGlzIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgcGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgY2FkZW5jZV9nZW1gIG9uIEFSTSwgTWljcm9ibGF6ZSwgb3IgUklTQy1WPyBBbHRlcm5hdGl2ZWx5LCBpcyBzeXprYWxsZXIgcnVubmluZyBvbiB4ODYvR0NFLCB3aGljaCB3b3VsZCBvYnZpb3VzbHkgYWZmZWN0IGhvdyBJIGludGVycHJldCB0aGUgcGF0Y2gmIzM5O3MgcmVhY2hhYmlsaXR5PwoKTGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBzdGFuZGFyZCBndWlkZWxpbmVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IHNvbWV0aGluZyB0aGF0JiMzOTtzIGF1dG9tYXRpY2FsbHkgZGlzcXVhbGlmaWVkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBydWxlIG91dDogY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZSBsaWtlIFVTQiBnYWRnZXQgb3IgbWFjODAyMTFfaHdzaW0pLCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gvU21hcnROSUMvR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlICpwaHlzaWNhbCogaGFyZHdhcmUgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSwgb3IgZHJpdmVyIHRlYXItZG93biBjYWxsYmFja3MgKGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgKSB0aGF0IG9ubHkgcnVuIGR1cmluZyBob3QtdW5wbHVnIG9yIGRyaXZlciB1bmJpbmRpbmcuCgpSaWdodCwgc28gdG8gbWFrZSBhIGJldHRlciBqdWRnZW1lbnQgY2FsbCwgSSB3aWxsIGNoZWNrIHRoZSBgS2NvbmZpZ2AgYW5kIHRoZSBgbWFjYl9tYWluLmNgIGZpbGUgaXRzZWxmLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfQ0FERU5DRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjIyOmNvbmZpZyBNQUNCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6Mzc6Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zOC1cdGJvb2wgXCYjMzQ7VXNlIElFRUUgMTU4OCBod3N0YW1wXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ1OmNvbmZpZyBNQUNCX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIENhZGVuY2UgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIENhZGVuY2UgRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ2AuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQsIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZSBkZXBlbmRlbmNpZXMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBsYXJnZXIgYnVpbGQgc3lzdGVtLiBJJiMzOTttIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgdGhpcyBpcyB1c2luZyB0aGUgc3RhbmRhcmQgS2NvbmZpZyBmb3JtYXQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBmZWF0dXJlcy4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlbHBzIGluIGRlYnVnZ2luZyBhbmQgY3VzdG9taXppbmcgZHJpdmVyIGJlaGF2aW91ci4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugc3VwcG9ydCBmb3IgZGlmZmVyZW50IFBIWXMsIHNwZWVkIHNldHRpbmdzLCBpbnRlcnJ1cHQgbWVjaGFuaXNtcywgYW5kIGFueSByZWxldmFudCBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgZHJpdmVyIG9yIHVuZGVyc3RhbmQgaG93IGEgbmV3IGZlYXR1cmUgaXMgaW50ZWdyYXRlZCB3aXRoaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDYWRlbmNlIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX0NBREVOQ0VcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7Q2FkZW5jZSBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTVxuICAgOTpcdFx0ZGVmYXVsdCB5XG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAxMjpcdFxuICAxMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAxNDpcdFxuICAxNTpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTY6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcbiAgMTc6XHRcdCAgcmVtYWluaW5nIENhZGVuY2UgbmV0d29yayBjYXJkIHF1ZXN0aW9ucy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxOTpcdFxuICAyMDpcdGlmIE5FVF9WRU5ET1JfQ0FERU5DRVxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBNQUNCXG4gIDIzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gSEFTX0RNQSBcdTAwMjZcdTAwMjYgQ09NTU9OX0NMS1xuICAyNTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyNjpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMjc6XHRcdHNlbGVjdCBDUkMzMlxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGludGVyZmFjZSBpcyBmb3VuZCBvbiBtYW55IEF0bWVsIEFUMzIgYW5kXG4gIDMwOlx0XHQgIEFUOTEgcGFydHMuICBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBDYWRlbmNlIEdFTSAoR2lnYWJpdFxuICAzMTpcdFx0ICBFdGhlcm5ldCBNQUMgZm91bmQgaW4gc29tZSBBUk0gU29DIGRldmljZXMpLiAgU2F5IFkgdG8gaW5jbHVkZVxuICAzMjpcdFx0ICBzdXBwb3J0IGZvciB0aGUgTUFDQi9HRU0gY2hpcC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAzNTpcdFx0ICB3aWxsIGJlIG1hY2IuXG4gIDM2Olx0XG4gIDM3Olx0Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcbiAgMzg6XHRcdGJvb2wgXCYjMzQ7VXNlIElFRUUgMTU4OCBod3N0YW1wXCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIE1BQ0JcbiAgNDA6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbiAgNDE6XHRcdGRlZmF1bHQgeVxuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIE1BQ0JfUENJXG4gIDQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIE1BQ0IgXHUwMDI2XHUwMDI2IFBDSVxuICA0ODpcdFx0aGVscFxuICA0OTpcdFx0ICBUaGlzIGlzIFBDSSB3cmFwcGVyIGZvciBNQUNCIGRyaXZlci5cbiAgNTA6XHRcbiAgNTE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA1MjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBtYWNiX3BjaS5cbiAgNTM6XHRcbiAgNTQ6XHRlbmRpZiAjIE5FVF9WRU5ET1JfQ0FERU5DRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUUVNVSBhbmQgTUFDQiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGBNQUNCYC4gUmlnaHQsIHRoYXQmIzM5O3MgQ2FkZW5jZSYjMzk7cyBNQUNCL0dFTSBzdXBwb3J0LCBhcyBJIHVuZGVyc3RhbmQgaXQuIE5vdywgaW4gUUVNVSwgdGhlIENhZGVuY2UgR0VNIGltcGxlbWVudGF0aW9uIChgY2FkZW5jZV9nZW0uY2AgdW5kZXIgYGh3L25ldC9gKSBpcyBwcmltYXJpbHkgdXNlZCBmb3IgdGFyZ2V0cyBsaWtlIFhpbGlueCBaeW5xIGFuZCBaeW5xTVAgYm9hcmRzLCBQb2xhckZpcmUsIHRoYXQgc29ydCBvZiB0aGluZy4gQnV0IG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgc3RhbmRhcmQgUUVNVSDigJMgdGhlIHg4NiBvciBHQ0UgZW52aXJvbm1lbnRzLCBmb3IgZXhhbXBsZSDigJMgZG9lc27igJl0IGp1c3QgKm5hdGl2ZWx5KiBlbXVsYXRlIHRoZSBDYWRlbmNlIEdFTSB1bmxlc3MgeW91JiMzOTtyZSB0YXJnZXRpbmcgYSBzcGVjaWZpYyBib2FyZCBpbWFnZSwgbGlrZSBhIFp5bnEgcGxhdGZvcm0sIG9yIG1heWJlIGlmIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBQQ0kgd3JhcHBlciBmb3IgTUFDQl9QQ0kuCgpIbW0sIHRoYXQgbGFzdCBiaXQgaXMgYnVnZ2luZyBtZS4gRG9lcyBzdGFuZGFyZCBRRU1VIGV2ZW4gKmhhdmUqIGEgbWFjYiBQQ0kgZGV2aWNlIGVtdWxhdGlvbj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhpcy4gUmlnaHQsIHRoZSBtb3N0IGxvZ2ljYWwgdGhpbmcgdG8gZG8gaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gSSYjMzk7bGwgb3BlbiB1cCBgbWFjYl9wY2kuY2AgYW5kIGNoZWNrIHdoYXQgUENJIGRldmljZSBJRHMgaXQmIzM5O3MgYWN0dWFsbHkgZGVzaWduZWQgdG8gc3VwcG9ydC4gVGhhdCB3aWxsIHF1aWNrbHkgdGVsbCBtZSBpZiBpdCYjMzk7cyBldmVuIHJlbGV2YW50IGluIHRoZXNlIG1vcmUgZ2VuZXJpYyBlbnZpcm9ubWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RldmljZV9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjI3OnN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYz0xMDg9c3RhdGljIHZvaWQgbWFjYl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjEyMDpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTIxLVx0eyBQQ0lfVkRFVklDRShDRE5TLCBQQ0lfREVWSUNFX0lEX0NETlNfTUFDQikgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTEzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2VgIGluIHRoZSBNQUNCIERyaXZlcioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZWAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIFRBUFJJTyAoVGltZS1Bd2FyZSBQcmlvcml0eSBTY2hlZHVsaW5nKSBzZXR1cCBmb3IgdGhpcyBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgdXNlZCBhcyBhIHJlcGxhY2VtZW50IGZvciBzb21ldGhpbmcsIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGFuZCB3aGF0IGNoYW5nZSBpcyBiZWluZyBhZGRyZXNzZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgY29udGV4dCB3aWxsIHByb3ZpZGUgc2lnbmlmaWNhbnQgZGV0YWlsIGluIHVuZGVyc3RhbmRpbmcgd2hhdCBwcm9ibGVtIHRoaXMgZnVuY3Rpb24gc29sdmVzLCBvciB3aGF0IG9wdGltaXphdGlvbiBpdCBicmluZ3MsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgZHJpdmVyLiBMZXQmIzM5O3MgdHJhY2UgdGhvc2UgY2FsbHMgYW5kIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgaGF2ZSBhIGZlZWxpbmcgdGhpcyB3aWxsIGludm9sdmUgY2FyZWZ1bCBzY3J1dGlueSBvZiB0aGUgVEFQUklPLXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhleSYjMzk7cmUgYmVpbmcgbWFuaXB1bGF0ZWQgd2l0aGluIHRoZSBkcml2ZXImIzM5O3MgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz00MjczPXN0YXRpYyB2b2lkIG1hY2JfcmVzdG9yZV9mZWF0dXJlcyhzdHJ1Y3QgbWFjYiAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00MjkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo0MjkyOnN0YXRpYyBpbnQgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00MjkzLVx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqY29uZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTQ0NzE9c3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDQ4Ny1cdGNhc2UgVEFQUklPX0NNRF9SRVBMQUNFOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo0NDg4Olx0XHRlcnIgPSBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKG5ldGRldiwgdGFwcmlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDQ4OS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNQUNCIFRBUFJJTyBTZXR1cCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZWAgYW5kIGBtYWNiX3NldHVwX3RhcHJpb2AgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgdGhlIGNvcmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtIOKAkyBhcmUgd2UgdGFsa2luZyBhIGZ1bGwgcmVwbGFjZW1lbnQgb2YgdGhlIFRBUFJJTyBjb25maWd1cmF0aW9uLCBvciBqdXN0IGluY3JlbWVudGFsIG1vZGlmaWNhdGlvbnM/IFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyB0aGUgZm9ybWVyLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Iga2V5IGluZGljYXRvcnM6CgoqICAgKipSZXNvdXJjZSBIYW5kbGluZzoqKiBXaGF0IGFyZSB0aGUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcGF0dGVybnM/IFNwZWNpZmljYWxseSwgYXJlIHdlIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgVEFQUklPIHF1ZXVlIHJlc291cmNlcyB3aXRoaW4gdGhlIE1BQ0IgZHJpdmVyPyBJ4oCZbGwgYmUgd2F0Y2hpbmcgZm9yIHByb3BlciB1c2FnZSBvZiBgc3RydWN0IHRhcHJpb19uZXRkZXZfc2NoZWRgIGRhdGEgc3RydWN0dXJlIG9yIGFueSBvdGhlciBwcm9wcmlldGFyeSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB3aXRoaW4gdGhlIGRyaXZlci4KKiAgICoqSW5pdGlhbGl6YXRpb24gU2VxdWVuY2U6KiogSSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBzdGVwcyBpbiBgbWFjYl9zZXR1cF90YXByaW9gLiBIb3cgaXMgdGhlIFRBUFJJTyBzY2hlZHVsZXIgaW50ZWdyYXRlZCB3aXRoIHRoZSBNQUNCJiMzOTtzIERNQSBlbmdpbmU/IEkmIzM5O2xsIGJlIGNoZWNraW5nIHRvIHNlZSB3aGF0IHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGlmIGFueSBzcGVjaWZpYyBzZXF1ZW5jZXMgYXJlIG5lY2Vzc2FyeS4KKiAgICoqUmVwbGFjZW1lbnQgTG9naWM6KiogYG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2VgIGlzIGludHJpZ3VpbmcuIEhvdyBkb2VzIGl0IGVuc3VyZSBhdG9taWNpdHk/IERvZXMgaXQgaW52b2x2ZSBkaXNhYmxpbmcgdGhlIE1BQ0IsIHVwZGF0aW5nIHRoZSBjb25maWd1cmF0aW9uLCBhbmQgcmUtZW5hYmxpbmcgaXQsIG9yIGlzIHRoZXJlIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGFwcHJvYWNoPyBJIGV4cGVjdCB0byBsb29rIGZvciB0aGUgdXNlIG9mIG11dGV4ZXMgb3Igc3BpbmxvY2tzIHRvIHByb3RlY3Qgc2hhcmVkIHJlc291cmNlcywgZXNwZWNpYWxseSByZWdhcmRpbmcgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzIG9mIHRoZSBoYXJkd2FyZS4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCYjMzk7cyB0aGUgZXJyb3ItaGFuZGxpbmcgc3RyYXRlZ3k/IEFyZSB0aGVyZSBjaGVja3MgZm9yIGludmFsaWQgcGFyYW1ldGVycyAoZS5nLiwgaW5jb3JyZWN0IHF1ZXVlIGNvbmZpZ3VyYXRpb25zLCBzY2hlZHVsaW5nIHBvbGljaWVzKSBiZWZvcmUgYXBwbHlpbmcgY2hhbmdlcz8gSG93IGRvZXMgdGhlIGRyaXZlciBzaWduYWwgZmFpbHVyZXMgYmFjayB0byB0aGUgdXBwZXIgbGF5ZXJzIChlLmcuLCB2aWEgcmV0dXJuIGNvZGVzIG9yIGVycm9yIG1lc3NhZ2VzKT8KKiAgICoqQ29uY3VycmVuY3k6KiogR2l2ZW4gdGhhdCBUQVBSSU8gaW52b2x2ZXMgc2NoZWR1bGluZyBtdWx0aXBsZSB0cmFmZmljIGNsYXNzZXMsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgTUFDQiBoYXJkd2FyZS4gQXJlIHRoZXJlIHByb3BlciBsb2NraW5nIG1lY2hhbmlzbXMgaW4gcGxhY2UsIGFuZCBkbyB0aGV5IGludGVyYWN0IHNhZmVseSB3aXRoIGludGVycnVwdCBoYW5kbGVycyBpZiB0aGV5IGV4aXN0PwoKSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGZvY3VzZWQgb24gYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIGhlYXZ5IG5ldHdvcmsgbG9hZCwgb3IgYW55IGFyZWFzIHdoZXJlIHRoZSBhYnN0cmFjdGlvbiBvZiBUQVBSSU8gbWlnaHQgYmUgbGVha2luZyBpbnRvIHRoZSBNQUNCIGRyaXZlci4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW50cm9kdWNlZCBieSB0aGVzZSBmdW5jdGlvbnMg4oCTIGFyZSB0aGV5IG9wdGltaXplZCBmb3IgZmFzdCByZWNvbmZpZ3VyYXRpb24sIG9yIGNvdWxkIHRoZXkgYmVjb21lIGEgcG9pbnQgb2YgY29udGVudGlvbiBpbiBhIHRpbWUtY3JpdGljYWwgbmV0d29yayBzY2VuYXJpbz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjkwOlx0fVxuNDI5MTpcdFxuNDI5MjpcdHN0YXRpYyBpbnQgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuNDI5MzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqY29uZilcbjQyOTQ6XHR7XG40Mjk1Olx0XHR1NjQgdG90YWxfb25fdGltZSA9IDAsIHN0YXJ0X3RpbWVfc2VjID0gMCwgc3RhcnRfdGltZSA9IGNvbmYtXHUwMDNlYmFzZV90aW1lO1xuNDI5NjpcdFx0dTMyIGNvbmZpZ3VyZWRfcXVldWVzID0gMCwgc3BlZWQgPSAwLCBzdGFydF90aW1lX25zZWM7XG40Mjk3Olx0XHRzdHJ1Y3QgbWFjYl9xdWV1ZV9lbnN0X2NvbmZpZyAqZW5zdF9xdWV1ZTtcbjQyOTg6XHRcdHN0cnVjdCB0Y190YXByaW9fc2NoZWRfZW50cnkgKmVudHJ5O1xuNDI5OTpcdFx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbjQzMDA6XHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQgPSB7fTtcbjQzMDE6XHRcdHN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZTtcbjQzMDI6XHRcdHUzMiBxdWV1ZV9tYXNrO1xuNDMwMzpcdFx0dTggcXVldWVfaWQ7XG40MzA0Olx0XHRzaXplX3QgaTtcbjQzMDU6XHRcdGludCBlcnI7XG40MzA2Olx0XG40MzA3Olx0XHRpZiAoY29uZi1cdTAwM2VudW1fZW50cmllcyBcdTAwM2UgYnAtXHUwMDNlbnVtX3F1ZXVlcykge1xuNDMwODpcdFx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7VG9vIG1hbnkgVEFQUklPIGVudHJpZXM6ICV6dSBcdTAwM2UgJWQgcXVldWVzXFxuXCYjMzQ7LFxuNDMwOTpcdFx0XHRcdCAgIGNvbmYtXHUwMDNlbnVtX2VudHJpZXMsIGJwLVx1MDAzZW51bV9xdWV1ZXMpO1xuNDMxMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQzMTE6XHRcdH1cbjQzMTI6XHRcbjQzMTM6XHRcdGlmIChjb25mLVx1MDAzZWJhc2VfdGltZSBcdTAwM2MgMCkge1xuNDMxNDpcdFx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7SW52YWxpZCBiYXNlX3RpbWU6IG11c3QgYmUgMCBvciBwb3NpdGl2ZSwgZ290ICVsbGRcXG5cJiMzNDssXG40MzE1Olx0XHRcdFx0ICAgY29uZi1cdTAwM2ViYXNlX3RpbWUpO1xuNDMxNjpcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbjQzMTc6XHRcdH1cbjQzMTg6XHRcbjQzMTk6XHRcdC8qIEdldCB0aGUgY3VycmVudCBsaW5rIHNwZWVkICovXG40MzIwOlx0XHRlcnIgPSBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldChicC1cdTAwM2VwaHlsaW5rLCBcdTAwMjZrc2V0KTtcbjQzMjE6XHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG40MzIyOlx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGxpbmsgc2V0dGluZ3M6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuNDMyMzpcdFx0XHRyZXR1cm4gZXJyO1xuNDMyNDpcdFx0fVxuNDMyNTpcdFxuNDMyNjpcdFx0c3BlZWQgPSBrc2V0LmJhc2Uuc3BlZWQ7XG40MzI3Olx0XHRpZiAodW5saWtlbHkoc3BlZWQgPT0gU1BFRURfVU5LTk9XTiB8fCAhc3BlZWQpKSB7XG40MzI4Olx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtJbnZhbGlkIHNwZWVkOiAlZFxcblwmIzM0Oywgc3BlZWQpO1xuNDMyOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQzMzA6XHRcdH1cbjQzMzE6XHRcbjQzMzI6XHRcdGVuc3RfcXVldWUgPSBrY2FsbG9jKGNvbmYtXHUwMDNlbnVtX2VudHJpZXMsIHNpemVvZigqZW5zdF9xdWV1ZSksIEdGUF9LRVJORUwpO1xuNDMzMzpcdFx0aWYgKHVubGlrZWx5KCFlbnN0X3F1ZXVlKSlcbjQzMzQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40MzM1Olx0XG40MzM2Olx0XHQvKiBQcmUtdmFsaWRhdGUgYWxsIGVudHJpZXMgYmVmb3JlIG1ha2luZyBhbnkgaGFyZHdhcmUgY2hhbmdlcyAqL1xuNDMzNzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZi1cdTAwM2VudW1fZW50cmllczsgaSYjNDM7JiM0MzspIHtcbjQzMzg6XHRcdFx0ZW50cnkgPSBcdTAwMjZjb25mLVx1MDAzZWVudHJpZXNbaV07XG40MzM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBub3RpY2VkIGEgcG90ZW50aWFsIGJ1ZyBpbiB0aGUgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0YCBmdW5jdGlvbiByZWxhdGVkIHRvIGhvdyBzcGVlZCBpcyBoYW5kbGVkLiBUaGUgY29kZSB3YXMgY2hlY2tpbmcgaWYgYHNwZWVkICZsdDs9IDBgLCBidXQgdGhlIGBTUEVFRF9VTktOT1dOYCB2YWx1ZSBpcyBhY3R1YWxseSBgKHUzMiktMWAuIFRoaXMgbWVhbnMgdGhlIGluaXRpYWwgY2hlY2sgdXNpbmcgYHNwZWVkICZsdDs9IDBgIHdvdWxkbiYjMzk7dCBjYXRjaCB0aGUgYFNQRUVEX1VOS05PV05gIGNhc2UgYmVjYXVzZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBgLTFgIGJlY29tZXMgYSBsYXJnZSBwb3NpdGl2ZSBudW1iZXIuIFNvLCBpbml0aWFsaXppbmcgYGtzZXQgPSB7fWAgYW5kIHRoZW4gY2hlY2tpbmcgZXhwbGljaXRseSBmb3IgYHNwZWVkID09IFNQRUVEX1VOS05PV04gfHwgIXNwZWVkYCBpcyB0aGUgY29ycmVjdCBmaXggZm9yIGJvdGggemVybyBhbmQgdW5rbm93biBzcGVlZHMuCgpOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQ6IGRldGVybWluaW5nIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZywgYmFzZWQgb24gdGhlIHJlYWNoYWJpbGl0eSBydWxlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgcGF0aCBpbiBgY2FkZW5jZS9tYWNiX21haW4uY2AgaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFRoYXQmIzM5O3MgdGhlIGtleS4gVGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IHN0YXRlIHdlIHNob3VsZG4mIzM5O3QgY29uc2lkZXIgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gVGhlIHJ1bGVzIGFyZSBzdHJpY3Q6IERvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBudW1lcmljIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24sIGNvZGUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBRRU1VLCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gvU21hcnROSUMvR1BVIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCBvciB0ZWFyZG93biBjYWxsYmFja3MuCgpTbywgaXMgYGNhZGVuY2UvbWFjYl9tYWluLmNgIHNvbWV0aGluZyBJIGNhbiBhY3R1YWxseSBoaXQ/IERvZXMgTUFDQiB3b3JrIGluIFFFTVU/IEkgbmVlZCB0byBjaGVjayB0aGUgcGxhdGZvcm0gc3VwcG9ydCBhbmQgaG93IE1BQ0IgaXMgaW5zdGFudGlhdGVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gY2hlY2sgdGhlIGNvZGU6IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBgZ3JlcGAgZm9yIGBtYWNiX3Byb2JlYCBvciBgb2ZfbWF0Y2hfdGFibGVgIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kIGlmIGl0JiMzOTtzIGdvdCBhIHBhdGggaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgaXMgdGhlIGNydWNpYWwgc3RlcDsgdGhlIHJlc3QgaGluZ2VzIG9uIHRoaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY2JfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDU0NT1zdGF0aWMgdm9pZCBtYWNiX2NvbmZpZ3VyZV9jYXBzKHN0cnVjdCBtYWNiICpicCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ1ODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjQ1ODk6c3RhdGljIGludCBtYWNiX3Byb2JlX3F1ZXVlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqbWVtLCBib29sIG5hdGl2ZV9pbylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDU5MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NzU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgZGVmYXVsdF9nZW1fY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTc2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTc2NjpzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTc2Ny17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1ODAyOlx0bnVtX3F1ZXVlcyA9IG1hY2JfcHJvYmVfcXVldWVzKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBtZW0sIG5hdGl2ZV9pbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4MDMtXHRpZiAobnVtX3F1ZXVlcyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NjI2Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNiX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI2NDpcdC5wcm9iZVx0XHQ9IG1hY2JfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYyNjUtXHQucmVtb3ZlXHRcdD0gbWFjYl9yZW1vdmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjI3OnN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYz0xMjU9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1hY2JfcGNpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI3LVx0LmlkX3RhYmxlID0gZGV2X2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjEyODpcdC5wcm9iZSAgICA9IG1hY2JfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI5LVx0LnJlbW92ZVx0ICA9IG1hY2JfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjQ3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiB0aGUgYG1hY2JgIERyaXZlciBpbiBGdXp6aW5nIEVudmlyb25tZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgbWFjYmAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYG1hY2JfcGNpLmNgIGFuZCBgbWFjYl9tYWluLmNgLiBUaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBhY2Nlc3NpYmxlIHdpdGhpbiBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcywgcGFydGljdWxhcmx5IFFFTVUgYW5kIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSwgdGhlIHByaW1hcnkgdGFyZ2V0cyBmb3Igc3l6a2FsbGVyLgoKRmlyc3QsIEkgc2VlIGBQQ0lfREVWSUNFX0lEX0NETlNfTUFDQmAgKDB4ZWQwMCkgZm9yIHRoZSBDYWRlbmNlIFBDSSBNQUNCL0dFTS4gTm93LCBJIHJlY2FsbCBgY2FkZW5jZV9nZW1gIGlzIGVtdWxhdGVkIGluIFFFTVUsIGJ1dCBpdCYjMzk7cyAqbm90KiBhIHN0YW5kYXJkIFBDSSBkZXZpY2UgZm9yIHg4Ni94ODZfNjQgb3IgR0NFLiBJdCYjMzk7cyBhIHN5c2J1cyBkZXZpY2UsIHVzZWQgZm9yIHNwZWNpZmljIGJvYXJkcyBsaWtlIFhpbGlueCBaeW5xLiAgTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGluIHRoZSB4ODYgb3IgYWFyY2g2NCBzZXR1cHMgdXNlZCBmb3Igc3l6a2FsbGVyLCBgY2FkZW5jZV9nZW1gIGlzIG5vdCBwcmVzZW50IGFzIGEgc3RhbmRhcmQgUENJIGRldmljZS4KCkxldCYjMzk7cyBjaGVjayBzeXprYWxsZXImIzM5O3MgZXhwbGljaXQgY3JpdGVyaWE6IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFL1FFTVUsIGVzcGVjaWFsbHkgd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gVGhpcyBpbmNsdWRlcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggZHJpdmVycy4gIFRoZSBrZXkgaXMsIGlmIHRoZSBkcml2ZXIgbmVlZHMgcmVhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgaXQmIzM5O3Mgb3V0LgoKSSBxdWlja2x5IHJldmlldyB0aGUgY29tbW9uIFFFTVUgZW11bGF0ZWQgZXRoZXJuZXQgZHJpdmVyczogZTEwMDAsIGlnYiwgdmlydGlvLW5ldCwgZXRjLiAgQ2FkZW5jZSBNQUNCIGlzbiYjMzk7dCBvbiB0aGF0IGxpc3QuIEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBBdG1lbCwgTWljcm9jaGlwLCBYaWxpbngsIGFuZCBTaUZpdmUgU29DcywgYWxvbmcgd2l0aCBhIFBDSSB3cmFwcGVyLiBJbiB4ODYgUUVNVS9HQ0UsIHRoZXJlJiMzOTtzIG5vIENhZGVuY2UgTUFDQiBkZXZpY2UuIEV2ZW4gb24gdGhlIHN0YW5kYXJkIGBxZW11LXN5c3RlbS1hYXJjaDY0IC1NIHZpcnRgIHRoZSBOSUNzIGFyZSB2aXJ0aW8tbmV0LCBlMTAwMCwgb3IgcGNpLiBgY2FkZW5jZV9nZW1gIGlzICpvbmx5KiBvbiBzcGVjaWZpYyBTb0MgYm9hcmRzLCBub3QgdGhlIGdlbmVyYWwtcHVycG9zZSB2aXJ0dWFsIG1hY2hpbmVzIHN5emthbGxlciB1c2VzLgoKU28sIEkgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIGl0JiMzOTtzIHBsYXRmb3JtIG9yIGhhcmR3YXJlLWRlcGVuZGVudC4gVGhlIGBtYWNiYCBpcyBhbiBldGhlcm5ldCBkcml2ZXIgZm9yIENhZGVuY2UgTUFDQi9HRU0gaGFyZHdhcmUsIHNvIEkmIzM5O20gbGVhbmluZyBoZWF2aWx5IHRvd2FyZHMgJiMzNDt5ZXMmIzM0Oy4gSXQgcmVsaWVzIG9uIHNwZWNpZmljIFNvQyBoYXJkd2FyZSBvciBzcGVjaWFsaXplZCBib2FyZCBjb25maWd1cmF0aW9ucy4gIFRoZXNlIGFyZW4mIzM5O3QgcHJlc2VudCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4KCk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmICh0aGUgYG1hY2JfbWFpbi5jYCBkaWZmKSwgSSYjMzk7bSB2ZXJpZnlpbmcgdGhlIHBvdGVudGlhbCByZWFjaCBvZiB0aGUgY29kZS4gVGhlIGNoYW5nZSBpcyBpbiB0aGUgYG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2VgIGZ1bmN0aW9uLCBhbmQgaXQgcmVsYXRlcyB0byB0aGUgc3BlZWQgY2hlY2sgd2l0aGluIHRoZSBUYXByaW8gc2V0dXAuCgpUaGUgcmVhc29uIGZvciB0aGUgY2hhbmdlLCBgc3BlZWQgPT0gU1BFRURfVU5LTk9XTiB8fCAhc3BlZWRgIHNlZW1zIHRvIGltcHJvdmUgdGhlIGludmFsaWQgc3BlZWQgZGV0ZWN0aW9uLgoKVGhlcmVmb3JlLCB0aGUgbWFpbiByZWFzb24gd2h5IHRoZSBwYXRjaCBpc24mIzM5O3QgYXBwbGljYWJsZSBpcyB0aGUgaGFyZHdhcmUgZHJpdmVyIGZvciBDYWRlbmNlIE1BQ0IvR0VNIGV0aGVybmV0IGNvbnRyb2xsZXJzIChmb3VuZCBvbiBBdG1lbC9NaWNyb2NoaXAgQVQ5MS9TQU1BNSwgWGlsaW54IFp5bnEsIGV0Yy4pIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBvciBzcGVjaWFsaXplZCBub24tc3RhbmRhcmQgYm9hcmQgY29uZmlndXJhdGlvbnMgd2hpY2ggYXJlIG5vdCBwcmVzZW50L3JlYWNoYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVSB4ODYvdmlydCBvciBHQ0UpLiBUaGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gSSB3aWxsIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nLCBlc3BlY2lhbGx5IGBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXJgIGFuZCBgbWFjYl9kcml2ZXJgIHRvIGNvbmZpcm0gbm8gb3RoZXIgdmlydHVhbCBpbnN0YW50aWF0aW9uIG9mIHRoZSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY2JfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTYyNTg9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG1hY2JfcG1fb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI2Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI2MzpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNiX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI2NC1cdC5wcm9iZVx0XHQ9IG1hY2JfcHJvYmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02MjczLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo2Mjc0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobWFjYl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02Mjc1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA1NAoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0JiMzOTtzIGNsZWFyIHRoZSB0YXJnZXQsIGBtYWNiX2RyaXZlcmAsIGFuZCBieSBleHRlbnNpb24gYG1hY2JfcGNpX2RyaXZlcmAsIGlzIGEgcGxhdGZvcm0gZHJpdmVyLiBJdCByZWxpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUg4oCTIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGNvbnRyb2xsZXIsIHdoaWNoIGlzIGZvdW5kIG9uIHRoaW5ncyBsaWtlIE1pY3JvY2hpcC9BdG1lbCBvciBYaWxpbnggU29Dcy4gSSBrbm93IHRoYXQga2luZCBvZiBoYXJkd2FyZSBpcyBqdXN0IG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgdGhlIG9uZXMgSSB0eXBpY2FsbHkgdXNlIOKAkyB0aGUgeDg2XzY0IFFFTVUgc2V0dXAgb3IgdGhlIEFSTTY0IHZpcnQuIFRoYXQgbWVhbnMgZnV6emluZyB0aGlzIGNvZGUgZGlyZWN0bHkgd2l0aGluIG15IG5vcm1hbCBpbmZyYXN0cnVjdHVyZSBqdXN0IGlzbiYjMzk7dCBmZWFzaWJsZS4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaGFzIHRvIGJlIGBmYWxzZWAgaW4gdGhpcyBpbnN0YW5jZS4gTm8gcG9pbnQgd2FzdGluZyBjeWNsZXMgb24gc29tZXRoaW5nIHRoYXQgY2FuJiMzOTt0IGJlIHJlYWNoZWQuCgpTbywgbGV0JiMzOTtzIGdldCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsIHByZXBhcmVkLiBJJiMzOTtsbCBmbGFnIGl0IGFjY29yZGluZ2x5OgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgIOKAkyBubyBxdWVzdGlvbiBhYm91dCBpdC4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gIOKAkyB0aGVyZSBhcmUgbm8gc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGNhbGwgb3V0IGFzIHByaW9yaXRpZXMgaW4gdGhpcyBjYXNlLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIOKAkyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5LgoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZWAgd2l0aGluIHRoZSBgbWFjYl9tYWluLmNgIGZpbGUgd2hpY2ggaXMgcGFydCBvZiB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlci4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBoYXJkd2FyZSBmb3VuZCBpbiBlbWJlZGRlZCBzeXN0ZW1zLCBzcGVjaWZpY2FsbHkgdGhvc2UgdXNpbmcgdGhlIENhZGVuY2UgTUFDQi9HRU0gSVAgY29yZSwgbGlrZSB0aGUgTWljcm9jaGlwL0F0bWVsIEFUOTEgYW5kIFhpbGlueCBaeW5xIHBsYXRmb3Jtcy4gVGhpcyBraW5kIG9mIGhhcmR3YXJlIGlzIG5vdCBhY2Nlc3NpYmxlIHdpdGhpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHg4Ni92aXJ0KSBvciBHQ0UuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHRoYXQuIE1vdmluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSBpbiBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKCkgd2l0aGluIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYykuIFRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciBDYWRlbmNlIE1BQ0IvR0VNIFNvQyBldGhlcm5ldCBjb250cm9sbGVycyAoZm91bmQgb24gQXRtZWwvTWljcm9jaGlwIEFUOTEvU0FNQTUsIFhpbGlueCBaeW5xLCBldGMuKSBhbmQgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSB4ODYvdmlydCBvciBHQ0UpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UgaW4gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZSgpIHdpdGhpbiB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMpLiBUaGlzIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBTb0MgZXRoZXJuZXQgY29udHJvbGxlcnMgKGZvdW5kIG9uIEF0bWVsL01pY3JvY2hpcCBBVDkxL1NBTUE1LCBYaWxpbnggWnlucSwgZXRjLikgYW5kIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgeDg2L3ZpcnQgb3IgR0NFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODoxOC4yMTA5NDc4ODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQxNDcwOTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlIGluIG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2UoKSB3aXRoaW4gdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jKS4gVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIENhZGVuY2UgTUFDQi9HRU0gU29DIGV0aGVybmV0IGNvbnRyb2xsZXJzIChmb3VuZCBvbiBBdG1lbC9NaWNyb2NoaXAgQVQ5MS9TQU1BNSwgWGlsaW54IFp5bnEsIGV0Yy4pIGFuZCBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIHg4Ni92aXJ0IG9yIEdDRSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODoxOC4yMTA5NTM1NjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzQ4OTUxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MGFkOTY3MTYyMDZlNGRlMWQyNjg2NzdkMmFlYTNhZmE1Yzk3NGFhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMjM6NTg6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG5pbmRleCA3NmVlNGY1MDYwMzM1Li44MTUzMGI5MjU3YjIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuQEAgLTQyOTcsNyArNDI5Nyw3IEBAIHN0YXRpYyBpbnQgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRzdHJ1Y3QgbWFjYl9xdWV1ZV9lbnN0X2NvbmZpZyAqZW5zdF9xdWV1ZTtcXG4gXFx0c3RydWN0IHRjX3RhcHJpb19zY2hlZF9lbnRyeSAqZW50cnk7XFxuIFxcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQ7XFxuK1xcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQgPSB7fTtcXG4gXFx0c3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlO1xcbiBcXHR1MzIgcXVldWVfbWFzaztcXG4gXFx0dTggcXVldWVfaWQ7XFxuQEAgLTQzMjQsNyArNDMyNCw3IEBAIHN0YXRpYyBpbnQgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR9XFxuIFxcbiBcXHRzcGVlZCA9IGtzZXQuYmFzZS5zcGVlZDtcXG4tXFx0aWYgKHVubGlrZWx5KHNwZWVkIFxcdTAwM2M9IDApKSB7XFxuK1xcdGlmICh1bmxpa2VseShzcGVlZCA9PSBTUEVFRF9VTktOT1dOIHx8ICFzcGVlZCkpIHtcXG4gXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJJbnZhbGlkIHNwZWVkOiAlZFxcXFxuXFxcIiwgc3BlZWQpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODoxOS40NDY1NjUzMjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ0MTc5MDc5MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSBpbiBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKCkgd2l0aGluIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYykuIFRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciBDYWRlbmNlIE1BQ0IvR0VNIFNvQyBldGhlcm5ldCBjb250cm9sbGVycyAoZm91bmQgb24gQXRtZWwvTWljcm9jaGlwIEFUOTEvU0FNQTUsIFhpbGlueCBaeW5xLCBldGMuKSBhbmQgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSB4ODYvdmlydCBvciBHQ0UpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzBhZDk2NzE2MjA2ZTRkZTFkMjY4Njc3ZDJhZWEzYWZhNWM5NzRhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMjM6NTg6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuaW5kZXggNzZlZTRmNTA2MDMzNS4uODE1MzBiOTI1N2IyMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbkBAIC00Mjk3LDcgKzQyOTcsNyBAQCBzdGF0aWMgaW50IG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHN0cnVjdCBtYWNiX3F1ZXVlX2Vuc3RfY29uZmlnICplbnN0X3F1ZXVlO1xuIFx0c3RydWN0IHRjX3RhcHJpb19zY2hlZF9lbnRyeSAqZW50cnk7XG4gXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3Mga3NldDtcbitcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQgPSB7fTtcbiBcdHN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZTtcbiBcdHUzMiBxdWV1ZV9tYXNrO1xuIFx0dTggcXVldWVfaWQ7XG5AQCAtNDMyNCw3ICs0MzI0LDcgQEAgc3RhdGljIGludCBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR9XG4gXG4gXHRzcGVlZCA9IGtzZXQuYmFzZS5zcGVlZDtcbi1cdGlmICh1bmxpa2VseShzcGVlZCBcdTAwM2M9IDApKSB7XG4rXHRpZiAodW5saWtlbHkoc3BlZWQgPT0gU1BFRURfVU5LTk9XTiB8fCAhc3BlZWQpKSB7XG4gXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkludmFsaWQgc3BlZWQ6ICVkXFxuXCIsIHNwZWVkKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODoxOS40NDY1NjY5NzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDYxOTk4NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ2FkZW5jZSBNQUNCIFBhdGNoKipcblxuT2theSwgc28gdGhlIGRpZmYgaXMgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoaXMgZHJpdmVyIGV2ZW4gaXMg4oCTIGl0J3MgdGhlIENhZGVuY2UgTUFDQi9HRU0gZXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIuIEdpdmVuIHRoYXQsIHRoZSBuZXh0IHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB0aGF0J3MgZXZlbiAqYWNjZXNzaWJsZSogd2l0aGluIGEgdHlwaWNhbCBRRU1VIGVudmlyb25tZW50LiBJcyBDYWRlbmNlIE1BQ0IgZW11bGF0ZWQsIG9yIGlzIHRoaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIHBvc3NpYmx5IFNvQy1zcGVjaWZpYz8gQ2FuIEkgdHJpZ2dlciB0aGlzIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgcGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgY2FkZW5jZV9nZW1gIG9uIEFSTSwgTWljcm9ibGF6ZSwgb3IgUklTQy1WPyBBbHRlcm5hdGl2ZWx5LCBpcyBzeXprYWxsZXIgcnVubmluZyBvbiB4ODYvR0NFLCB3aGljaCB3b3VsZCBvYnZpb3VzbHkgYWZmZWN0IGhvdyBJIGludGVycHJldCB0aGUgcGF0Y2gncyByZWFjaGFiaWxpdHk/XG5cbkxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgc3RhbmRhcmQgZ3VpZGVsaW5lcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IHNvbWV0aGluZyB0aGF0J3MgYXV0b21hdGljYWxseSBkaXNxdWFsaWZpZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHJ1bGUgb3V0OiBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlIGxpa2UgVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbSksIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaC9TbWFydE5JQy9HUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgKnBoeXNpY2FsKiBoYXJkd2FyZSAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpLCBvciBkcml2ZXIgdGVhci1kb3duIGNhbGxiYWNrcyAoYC5yZW1vdmVgLCBgLnNodXRkb3duYCwgYHBjaV91bnJlZ2lzdGVyX2RyaXZlcmApIHRoYXQgb25seSBydW4gZHVyaW5nIGhvdC11bnBsdWcgb3IgZHJpdmVyIHVuYmluZGluZy5cblxuUmlnaHQsIHNvIHRvIG1ha2UgYSBiZXR0ZXIganVkZ2VtZW50IGNhbGwsIEkgd2lsbCBjaGVjayB0aGUgYEtjb25maWdgIGFuZCB0aGUgYG1hY2JfbWFpbi5jYCBmaWxlIGl0c2VsZi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODoyNy41MDg1Njc0MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NjAwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQ0JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzozNzpjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zOC1cXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ1OmNvbmZpZyBNQUNCX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTg6MjcuNTU0MjI5ODQ2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg4MDI4Mjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBDYWRlbmNlIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDYWRlbmNlIEV0aGVybmV0IGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ2AuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQsIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZSBkZXBlbmRlbmNpZXMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBsYXJnZXIgYnVpbGQgc3lzdGVtLiBJJ20gYXNzdW1pbmcsIG9mIGNvdXJzZSwgdGhhdCB0aGlzIGlzIHVzaW5nIHRoZSBzdGFuZGFyZCBLY29uZmlnIGZvcm1hdC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGZlYXR1cmVzLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVscHMgaW4gZGVidWdnaW5nIGFuZCBjdXN0b21pemluZyBkcml2ZXIgYmVoYXZpb3VyLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBQSFlzLCBzcGVlZCBzZXR0aW5ncywgaW50ZXJydXB0IG1lY2hhbmlzbXMsIGFuZCBhbnkgcmVsZXZhbnQgcGxhdGZvcm0tc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIGRyaXZlciBvciB1bmRlcnN0YW5kIGhvdyBhIG5ldyBmZWF0dXJlIGlzIGludGVncmF0ZWQgd2l0aGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQ0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTg6MjkuNDM0NTE1MjM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENhZGVuY2UgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfQ0FERU5DRVxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiQ2FkZW5jZSBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG4gICA5OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxNjpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxNzpcXHRcXHQgIHJlbWFpbmluZyBDYWRlbmNlIG5ldHdvcmsgY2FyZCBxdWVzdGlvbnMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcXG4gIDE4OlxcdFxcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBNQUNCXFxuICAyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfRE1BIFxcdTAwMjZcXHUwMDI2IENPTU1PTl9DTEtcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDI2OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAyNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDI4OlxcdFxcdGhlbHBcXG4gIDI5OlxcdFxcdCAgVGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBpbnRlcmZhY2UgaXMgZm91bmQgb24gbWFueSBBdG1lbCBBVDMyIGFuZFxcbiAgMzA6XFx0XFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcXG4gIDMxOlxcdFxcdCAgRXRoZXJuZXQgTUFDIGZvdW5kIGluIHNvbWUgQVJNIFNvQyBkZXZpY2VzKS4gIFNheSBZIHRvIGluY2x1ZGVcXG4gIDMyOlxcdFxcdCAgc3VwcG9ydCBmb3IgdGhlIE1BQ0IvR0VNIGNoaXAuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzU6XFx0XFx0ICB3aWxsIGJlIG1hY2IuXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuICAzODpcXHRcXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1BQ0JcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBNQUNCX1BDSVxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDUyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbWFjYl9wY2kuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGVuZGlmICMgTkVUX1ZFTkRPUl9DQURFTkNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjU4OjI5LjQzNDU3NTEyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTMwMTM3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUUVNVSBhbmQgTUFDQiBNdXNpbmdzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBgTUFDQmAuIFJpZ2h0LCB0aGF0J3MgQ2FkZW5jZSdzIE1BQ0IvR0VNIHN1cHBvcnQsIGFzIEkgdW5kZXJzdGFuZCBpdC4gTm93LCBpbiBRRU1VLCB0aGUgQ2FkZW5jZSBHRU0gaW1wbGVtZW50YXRpb24gKGBjYWRlbmNlX2dlbS5jYCB1bmRlciBgaHcvbmV0L2ApIGlzIHByaW1hcmlseSB1c2VkIGZvciB0YXJnZXRzIGxpa2UgWGlsaW54IFp5bnEgYW5kIFp5bnFNUCBib2FyZHMsIFBvbGFyRmlyZSwgdGhhdCBzb3J0IG9mIHRoaW5nLiBCdXQgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzdGFuZGFyZCBRRU1VIOKAkyB0aGUgeDg2IG9yIEdDRSBlbnZpcm9ubWVudHMsIGZvciBleGFtcGxlIOKAkyBkb2VzbuKAmXQganVzdCAqbmF0aXZlbHkqIGVtdWxhdGUgdGhlIENhZGVuY2UgR0VNIHVubGVzcyB5b3UncmUgdGFyZ2V0aW5nIGEgc3BlY2lmaWMgYm9hcmQgaW1hZ2UsIGxpa2UgYSBaeW5xIHBsYXRmb3JtLCBvciBtYXliZSBpZiB0aGVyZSdzIHNvbWUga2luZCBvZiBQQ0kgd3JhcHBlciBmb3IgTUFDQl9QQ0kuXG5cbkhtbSwgdGhhdCBsYXN0IGJpdCBpcyBidWdnaW5nIG1lLiBEb2VzIHN0YW5kYXJkIFFFTVUgZXZlbiAqaGF2ZSogYSBtYWNiIFBDSSBkZXZpY2UgZW11bGF0aW9uPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGlzLiBSaWdodCwgdGhlIG1vc3QgbG9naWNhbCB0aGluZyB0byBkbyBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBJJ2xsIG9wZW4gdXAgYG1hY2JfcGNpLmNgIGFuZCBjaGVjayB3aGF0IFBDSSBkZXZpY2UgSURzIGl0J3MgYWN0dWFsbHkgZGVzaWduZWQgdG8gc3VwcG9ydC4gVGhhdCB3aWxsIHF1aWNrbHkgdGVsbCBtZSBpZiBpdCdzIGV2ZW4gcmVsZXZhbnQgaW4gdGhlc2UgbW9yZSBnZW5lcmljIGVudmlyb25tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjU4OjMxLjk4NzU5MTE0NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDUwODQxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX2RldmljZV9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6Mjc6c3RhdGljIGludCBtYWNiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEwOD1zdGF0aWMgdm9pZCBtYWNiX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTExOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTIwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkZXZfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTIxLVxcdHsgUENJX1ZERVZJQ0UoQ0ROUywgUENJX0RFVklDRV9JRF9DRE5TX01BQ0IpIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjU4OjMyLjIzMjY4MDU2MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczOTI1NDY3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlYCBpbiB0aGUgTUFDQiBEcml2ZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZWAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIFRBUFJJTyAoVGltZS1Bd2FyZSBQcmlvcml0eSBTY2hlZHVsaW5nKSBzZXR1cCBmb3IgdGhpcyBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgdXNlZCBhcyBhIHJlcGxhY2VtZW50IGZvciBzb21ldGhpbmcsIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0J3MgY2FsbGVkIGZyb20gYW5kIHdoYXQgY2hhbmdlIGlzIGJlaW5nIGFkZHJlc3NlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjb250ZXh0IHdpbGwgcHJvdmlkZSBzaWduaWZpY2FudCBkZXRhaWwgaW4gdW5kZXJzdGFuZGluZyB3aGF0IHByb2JsZW0gdGhpcyBmdW5jdGlvbiBzb2x2ZXMsIG9yIHdoYXQgb3B0aW1pemF0aW9uIGl0IGJyaW5ncywgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoZSBkcml2ZXIuIExldCdzIHRyYWNlIHRob3NlIGNhbGxzIGFuZCBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIGhhdmUgYSBmZWVsaW5nIHRoaXMgd2lsbCBpbnZvbHZlIGNhcmVmdWwgc2NydXRpbnkgb2YgdGhlIFRBUFJJTy1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkncmUgYmVpbmcgbWFuaXB1bGF0ZWQgd2l0aGluIHRoZSBkcml2ZXIncyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTEzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTg6MzkuNjI1MjI5NTg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODcyODIzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDI3Mz1zdGF0aWMgdm9pZCBtYWNiX3Jlc3RvcmVfZmVhdHVyZXMoc3RydWN0IG1hY2IgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00MjkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDI5MjpzdGF0aWMgaW50IG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQyOTMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqY29uZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDQ3MT1zdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ0ODctXFx0Y2FzZSBUQVBSSU9fQ01EX1JFUExBQ0U6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo0NDg4OlxcdFxcdGVyciA9IG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2UobmV0ZGV2LCB0YXByaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDQ4OS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTg6MzkuOTEyNTE4NzYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNTQ4ODQ1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE1BQ0IgVEFQUklPIFNldHVwIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSBgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZWAgYW5kIGBtYWNiX3NldHVwX3RhcHJpb2AgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgdGhlIGNvcmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtIOKAkyBhcmUgd2UgdGFsa2luZyBhIGZ1bGwgcmVwbGFjZW1lbnQgb2YgdGhlIFRBUFJJTyBjb25maWd1cmF0aW9uLCBvciBqdXN0IGluY3JlbWVudGFsIG1vZGlmaWNhdGlvbnM/IFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyB0aGUgZm9ybWVyLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gSSdsbCBiZSBsb29raW5nIGZvciBrZXkgaW5kaWNhdG9yczpcblxuKiAgICoqUmVzb3VyY2UgSGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHBhdHRlcm5zPyBTcGVjaWZpY2FsbHksIGFyZSB3ZSBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIFRBUFJJTyBxdWV1ZSByZXNvdXJjZXMgd2l0aGluIHRoZSBNQUNCIGRyaXZlcj8gSeKAmWxsIGJlIHdhdGNoaW5nIGZvciBwcm9wZXIgdXNhZ2Ugb2YgYHN0cnVjdCB0YXByaW9fbmV0ZGV2X3NjaGVkYCBkYXRhIHN0cnVjdHVyZSBvciBhbnkgb3RoZXIgcHJvcHJpZXRhcnkgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgd2l0aGluIHRoZSBkcml2ZXIuXG4qICAgKipJbml0aWFsaXphdGlvbiBTZXF1ZW5jZToqKiBJIG5lZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHN0ZXBzIGluIGBtYWNiX3NldHVwX3RhcHJpb2AuIEhvdyBpcyB0aGUgVEFQUklPIHNjaGVkdWxlciBpbnRlZ3JhdGVkIHdpdGggdGhlIE1BQ0IncyBETUEgZW5naW5lPyBJJ2xsIGJlIGNoZWNraW5nIHRvIHNlZSB3aGF0IHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGlmIGFueSBzcGVjaWZpYyBzZXF1ZW5jZXMgYXJlIG5lY2Vzc2FyeS5cbiogICAqKlJlcGxhY2VtZW50IExvZ2ljOioqIGBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlYCBpcyBpbnRyaWd1aW5nLiBIb3cgZG9lcyBpdCBlbnN1cmUgYXRvbWljaXR5PyBEb2VzIGl0IGludm9sdmUgZGlzYWJsaW5nIHRoZSBNQUNCLCB1cGRhdGluZyB0aGUgY29uZmlndXJhdGlvbiwgYW5kIHJlLWVuYWJsaW5nIGl0LCBvciBpcyB0aGVyZSBhIG1vcmUgc29waGlzdGljYXRlZCBhcHByb2FjaD8gSSBleHBlY3QgdG8gbG9vayBmb3IgdGhlIHVzZSBvZiBtdXRleGVzIG9yIHNwaW5sb2NrcyB0byBwcm90ZWN0IHNoYXJlZCByZXNvdXJjZXMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHRoZSBjb250cm9sIHJlZ2lzdGVycyBvZiB0aGUgaGFyZHdhcmUuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0J3MgdGhlIGVycm9yLWhhbmRsaW5nIHN0cmF0ZWd5PyBBcmUgdGhlcmUgY2hlY2tzIGZvciBpbnZhbGlkIHBhcmFtZXRlcnMgKGUuZy4sIGluY29ycmVjdCBxdWV1ZSBjb25maWd1cmF0aW9ucywgc2NoZWR1bGluZyBwb2xpY2llcykgYmVmb3JlIGFwcGx5aW5nIGNoYW5nZXM/IEhvdyBkb2VzIHRoZSBkcml2ZXIgc2lnbmFsIGZhaWx1cmVzIGJhY2sgdG8gdGhlIHVwcGVyIGxheWVycyAoZS5nLiwgdmlhIHJldHVybiBjb2RlcyBvciBlcnJvciBtZXNzYWdlcyk/XG4qICAgKipDb25jdXJyZW5jeToqKiBHaXZlbiB0aGF0IFRBUFJJTyBpbnZvbHZlcyBzY2hlZHVsaW5nIG11bHRpcGxlIHRyYWZmaWMgY2xhc3NlcywgSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIE1BQ0IgaGFyZHdhcmUuIEFyZSB0aGVyZSBwcm9wZXIgbG9ja2luZyBtZWNoYW5pc21zIGluIHBsYWNlLCBhbmQgZG8gdGhleSBpbnRlcmFjdCBzYWZlbHkgd2l0aCBpbnRlcnJ1cHQgaGFuZGxlcnMgaWYgdGhleSBleGlzdD9cblxuSSdsbCBiZSBwYXJ0aWN1bGFybHkgZm9jdXNlZCBvbiBhbnl0aGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgdW5kZXIgaGVhdnkgbmV0d29yayBsb2FkLCBvciBhbnkgYXJlYXMgd2hlcmUgdGhlIGFic3RyYWN0aW9uIG9mIFRBUFJJTyBtaWdodCBiZSBsZWFraW5nIGludG8gdGhlIE1BQ0IgZHJpdmVyLiBJJ20gYWxzbyBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGludHJvZHVjZWQgYnkgdGhlc2UgZnVuY3Rpb25zIOKAkyBhcmUgdGhleSBvcHRpbWl6ZWQgZm9yIGZhc3QgcmVjb25maWd1cmF0aW9uLCBvciBjb3VsZCB0aGV5IGJlY29tZSBhIHBvaW50IG9mIGNvbnRlbnRpb24gaW4gYSB0aW1lLWNyaXRpY2FsIG5ldHdvcmsgc2NlbmFyaW8/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjcsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODo0NC4xNjc0MDU3MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDI5MDpcXHR9XFxuNDI5MTpcXHRcXG40MjkyOlxcdHN0YXRpYyBpbnQgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbjQyOTM6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqY29uZilcXG40Mjk0OlxcdHtcXG40Mjk1OlxcdFxcdHU2NCB0b3RhbF9vbl90aW1lID0gMCwgc3RhcnRfdGltZV9zZWMgPSAwLCBzdGFydF90aW1lID0gY29uZi1cXHUwMDNlYmFzZV90aW1lO1xcbjQyOTY6XFx0XFx0dTMyIGNvbmZpZ3VyZWRfcXVldWVzID0gMCwgc3BlZWQgPSAwLCBzdGFydF90aW1lX25zZWM7XFxuNDI5NzpcXHRcXHRzdHJ1Y3QgbWFjYl9xdWV1ZV9lbnN0X2NvbmZpZyAqZW5zdF9xdWV1ZTtcXG40Mjk4OlxcdFxcdHN0cnVjdCB0Y190YXByaW9fc2NoZWRfZW50cnkgKmVudHJ5O1xcbjQyOTk6XFx0XFx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG40MzAwOlxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQgPSB7fTtcXG40MzAxOlxcdFxcdHN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZTtcXG40MzAyOlxcdFxcdHUzMiBxdWV1ZV9tYXNrO1xcbjQzMDM6XFx0XFx0dTggcXVldWVfaWQ7XFxuNDMwNDpcXHRcXHRzaXplX3QgaTtcXG40MzA1OlxcdFxcdGludCBlcnI7XFxuNDMwNjpcXHRcXG40MzA3OlxcdFxcdGlmIChjb25mLVxcdTAwM2VudW1fZW50cmllcyBcXHUwMDNlIGJwLVxcdTAwM2VudW1fcXVldWVzKSB7XFxuNDMwODpcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIlRvbyBtYW55IFRBUFJJTyBlbnRyaWVzOiAlenUgXFx1MDAzZSAlZCBxdWV1ZXNcXFxcblxcXCIsXFxuNDMwOTpcXHRcXHRcXHRcXHQgICBjb25mLVxcdTAwM2VudW1fZW50cmllcywgYnAtXFx1MDAzZW51bV9xdWV1ZXMpO1xcbjQzMTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDMxMTpcXHRcXHR9XFxuNDMxMjpcXHRcXG40MzEzOlxcdFxcdGlmIChjb25mLVxcdTAwM2ViYXNlX3RpbWUgXFx1MDAzYyAwKSB7XFxuNDMxNDpcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkludmFsaWQgYmFzZV90aW1lOiBtdXN0IGJlIDAgb3IgcG9zaXRpdmUsIGdvdCAlbGxkXFxcXG5cXFwiLFxcbjQzMTU6XFx0XFx0XFx0XFx0ICAgY29uZi1cXHUwMDNlYmFzZV90aW1lKTtcXG40MzE2OlxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbjQzMTc6XFx0XFx0fVxcbjQzMTg6XFx0XFxuNDMxOTpcXHRcXHQvKiBHZXQgdGhlIGN1cnJlbnQgbGluayBzcGVlZCAqL1xcbjQzMjA6XFx0XFx0ZXJyID0gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoYnAtXFx1MDAzZXBoeWxpbmssIFxcdTAwMjZrc2V0KTtcXG40MzIxOlxcdFxcdGlmICh1bmxpa2VseShlcnIpKSB7XFxuNDMyMjpcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkZhaWxlZCB0byBnZXQgbGluayBzZXR0aW5nczogJWRcXFxcblxcXCIsIGVycik7XFxuNDMyMzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjQzMjQ6XFx0XFx0fVxcbjQzMjU6XFx0XFxuNDMyNjpcXHRcXHRzcGVlZCA9IGtzZXQuYmFzZS5zcGVlZDtcXG40MzI3OlxcdFxcdGlmICh1bmxpa2VseShzcGVlZCA9PSBTUEVFRF9VTktOT1dOIHx8ICFzcGVlZCkpIHtcXG40MzI4OlxcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiSW52YWxpZCBzcGVlZDogJWRcXFxcblxcXCIsIHNwZWVkKTtcXG40MzI5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQzMzA6XFx0XFx0fVxcbjQzMzE6XFx0XFxuNDMzMjpcXHRcXHRlbnN0X3F1ZXVlID0ga2NhbGxvYyhjb25mLVxcdTAwM2VudW1fZW50cmllcywgc2l6ZW9mKCplbnN0X3F1ZXVlKSwgR0ZQX0tFUk5FTCk7XFxuNDMzMzpcXHRcXHRpZiAodW5saWtlbHkoIWVuc3RfcXVldWUpKVxcbjQzMzQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNDMzNTpcXHRcXG40MzM2OlxcdFxcdC8qIFByZS12YWxpZGF0ZSBhbGwgZW50cmllcyBiZWZvcmUgbWFraW5nIGFueSBoYXJkd2FyZSBjaGFuZ2VzICovXFxuNDMzNzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY29uZi1cXHUwMDNlbnVtX2VudHJpZXM7IGkrKykge1xcbjQzMzg6XFx0XFx0XFx0ZW50cnkgPSBcXHUwMDI2Y29uZi1cXHUwMDNlZW50cmllc1tpXTtcXG40MzM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODo0NC4xNjc2MTEwODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDgzMjAyNjY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JraW5nIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBub3RpY2VkIGEgcG90ZW50aWFsIGJ1ZyBpbiB0aGUgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0YCBmdW5jdGlvbiByZWxhdGVkIHRvIGhvdyBzcGVlZCBpcyBoYW5kbGVkLiBUaGUgY29kZSB3YXMgY2hlY2tpbmcgaWYgYHNwZWVkIFx1MDAzYz0gMGAsIGJ1dCB0aGUgYFNQRUVEX1VOS05PV05gIHZhbHVlIGlzIGFjdHVhbGx5IGAodTMyKS0xYC4gVGhpcyBtZWFucyB0aGUgaW5pdGlhbCBjaGVjayB1c2luZyBgc3BlZWQgXHUwMDNjPSAwYCB3b3VsZG4ndCBjYXRjaCB0aGUgYFNQRUVEX1VOS05PV05gIGNhc2UgYmVjYXVzZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBgLTFgIGJlY29tZXMgYSBsYXJnZSBwb3NpdGl2ZSBudW1iZXIuIFNvLCBpbml0aWFsaXppbmcgYGtzZXQgPSB7fWAgYW5kIHRoZW4gY2hlY2tpbmcgZXhwbGljaXRseSBmb3IgYHNwZWVkID09IFNQRUVEX1VOS05PV04gfHwgIXNwZWVkYCBpcyB0aGUgY29ycmVjdCBmaXggZm9yIGJvdGggemVybyBhbmQgdW5rbm93biBzcGVlZHMuXG5cbk5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydDogZGV0ZXJtaW5pbmcgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgcmVhY2hhYmlsaXR5IHJ1bGVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGluIGBjYWRlbmNlL21hY2JfbWFpbi5jYCBpcyBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVS4gVGhhdCdzIHRoZSBrZXkuIFRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSB3ZSBzaG91bGRuJ3QgY29uc2lkZXIgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gVGhlIHJ1bGVzIGFyZSBzdHJpY3Q6IERvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBudW1lcmljIGNvbnN0YW50cyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiwgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIFFFTVUsIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaC9TbWFydE5JQy9HUFUgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUsIG9yIHRlYXJkb3duIGNhbGxiYWNrcy5cblxuU28sIGlzIGBjYWRlbmNlL21hY2JfbWFpbi5jYCBzb21ldGhpbmcgSSBjYW4gYWN0dWFsbHkgaGl0PyBEb2VzIE1BQ0Igd29yayBpbiBRRU1VPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHBsYXRmb3JtIHN1cHBvcnQgYW5kIGhvdyBNQUNCIGlzIGluc3RhbnRpYXRlZCB0byBiZSBzdXJlLiBUaW1lIHRvIGNoZWNrIHRoZSBjb2RlOiBJJ20gZ29pbmcgdG8gcXVpY2tseSBgZ3JlcGAgZm9yIGBtYWNiX3Byb2JlYCBvciBgb2ZfbWF0Y2hfdGFibGVgIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZCBhbmQgaWYgaXQncyBnb3QgYSBwYXRoIGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBUaGlzIGlzIHRoZSBjcnVjaWFsIHN0ZXA7IHRoZSByZXN0IGhpbmdlcyBvbiB0aGlzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTU1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTg6NDguOTk5NjM5NzM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ0MDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz00NTQ1PXN0YXRpYyB2b2lkIG1hY2JfY29uZmlndXJlX2NhcHMoc3RydWN0IG1hY2IgKmJwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00NTg4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDU4OTpzdGF0aWMgaW50IG1hY2JfcHJvYmVfcXVldWVzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICptZW0sIGJvb2wgbmF0aXZlX2lvKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDU5MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU3NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyBkZWZhdWx0X2dlbV9jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3NjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NzY2OnN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTc2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4MDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1ODAyOlxcdG51bV9xdWV1ZXMgPSBtYWNiX3Byb2JlX3F1ZXVlcyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBtZW0sIG5hdGl2ZV9pbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODAzLVxcdGlmIChudW1fcXVldWVzIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02MjYzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1hY2JfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI2NDpcXHQucHJvYmVcXHRcXHQ9IG1hY2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02MjY1LVxcdC5yZW1vdmVcXHRcXHQ9IG1hY2JfcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoyNzpzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM9MTI1PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYWNiX3BjaV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI3LVxcdC5pZF90YWJsZSA9IGRldl9pZF90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTI4OlxcdC5wcm9iZSAgICA9IG1hY2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyOS1cXHQucmVtb3ZlXFx0ICA9IG1hY2JfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODo0OS4wNTAwOTYyNzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTY1ODYyMjMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiB0aGUgYG1hY2JgIERyaXZlciBpbiBGdXp6aW5nIEVudmlyb25tZW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG1hY2JgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBtYWNiX3BjaS5jYCBhbmQgYG1hY2JfbWFpbi5jYC4gVGhlIGNvcmUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgYWNjZXNzaWJsZSB3aXRoaW4gc3RhbmRhcmQgZnV6emluZyBzZXR1cHMsIHBhcnRpY3VsYXJseSBRRU1VIGFuZCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSksIHRoZSBwcmltYXJ5IHRhcmdldHMgZm9yIHN5emthbGxlci5cblxuRmlyc3QsIEkgc2VlIGBQQ0lfREVWSUNFX0lEX0NETlNfTUFDQmAgKDB4ZWQwMCkgZm9yIHRoZSBDYWRlbmNlIFBDSSBNQUNCL0dFTS4gTm93LCBJIHJlY2FsbCBgY2FkZW5jZV9nZW1gIGlzIGVtdWxhdGVkIGluIFFFTVUsIGJ1dCBpdCdzICpub3QqIGEgc3RhbmRhcmQgUENJIGRldmljZSBmb3IgeDg2L3g4Nl82NCBvciBHQ0UuIEl0J3MgYSBzeXNidXMgZGV2aWNlLCB1c2VkIGZvciBzcGVjaWZpYyBib2FyZHMgbGlrZSBYaWxpbnggWnlucS4gIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpbiB0aGUgeDg2IG9yIGFhcmNoNjQgc2V0dXBzIHVzZWQgZm9yIHN5emthbGxlciwgYGNhZGVuY2VfZ2VtYCBpcyBub3QgcHJlc2VudCBhcyBhIHN0YW5kYXJkIFBDSSBkZXZpY2UuXG5cbkxldCdzIGNoZWNrIHN5emthbGxlcidzIGV4cGxpY2l0IGNyaXRlcmlhOiBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRS9RRU1VLCBlc3BlY2lhbGx5IHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFRoaXMgaW5jbHVkZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMuICBUaGUga2V5IGlzLCBpZiB0aGUgZHJpdmVyIG5lZWRzIHJlYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIGl0J3Mgb3V0LlxuXG5JIHF1aWNrbHkgcmV2aWV3IHRoZSBjb21tb24gUUVNVSBlbXVsYXRlZCBldGhlcm5ldCBkcml2ZXJzOiBlMTAwMCwgaWdiLCB2aXJ0aW8tbmV0LCBldGMuICBDYWRlbmNlIE1BQ0IgaXNuJ3Qgb24gdGhhdCBsaXN0LiBJdCdzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBBdG1lbCwgTWljcm9jaGlwLCBYaWxpbngsIGFuZCBTaUZpdmUgU29DcywgYWxvbmcgd2l0aCBhIFBDSSB3cmFwcGVyLiBJbiB4ODYgUUVNVS9HQ0UsIHRoZXJlJ3Mgbm8gQ2FkZW5jZSBNQUNCIGRldmljZS4gRXZlbiBvbiB0aGUgc3RhbmRhcmQgYHFlbXUtc3lzdGVtLWFhcmNoNjQgLU0gdmlydGAgdGhlIE5JQ3MgYXJlIHZpcnRpby1uZXQsIGUxMDAwLCBvciBwY2kuIGBjYWRlbmNlX2dlbWAgaXMgKm9ubHkqIG9uIHNwZWNpZmljIFNvQyBib2FyZHMsIG5vdCB0aGUgZ2VuZXJhbC1wdXJwb3NlIHZpcnR1YWwgbWFjaGluZXMgc3l6a2FsbGVyIHVzZXMuXG5cblNvLCBJIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIHBsYXRmb3JtIG9yIGhhcmR3YXJlLWRlcGVuZGVudC4gVGhlIGBtYWNiYCBpcyBhbiBldGhlcm5ldCBkcml2ZXIgZm9yIENhZGVuY2UgTUFDQi9HRU0gaGFyZHdhcmUsIHNvIEknbSBsZWFuaW5nIGhlYXZpbHkgdG93YXJkcyBcInllc1wiLiBJdCByZWxpZXMgb24gc3BlY2lmaWMgU29DIGhhcmR3YXJlIG9yIHNwZWNpYWxpemVkIGJvYXJkIGNvbmZpZ3VyYXRpb25zLiAgVGhlc2UgYXJlbid0IHByZXNlbnQgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmICh0aGUgYG1hY2JfbWFpbi5jYCBkaWZmKSwgSSdtIHZlcmlmeWluZyB0aGUgcG90ZW50aWFsIHJlYWNoIG9mIHRoZSBjb2RlLiBUaGUgY2hhbmdlIGlzIGluIHRoZSBgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZWAgZnVuY3Rpb24sIGFuZCBpdCByZWxhdGVzIHRvIHRoZSBzcGVlZCBjaGVjayB3aXRoaW4gdGhlIFRhcHJpbyBzZXR1cC5cblxuVGhlIHJlYXNvbiBmb3IgdGhlIGNoYW5nZSwgYHNwZWVkID09IFNQRUVEX1VOS05PV04gfHwgIXNwZWVkYCBzZWVtcyB0byBpbXByb3ZlIHRoZSBpbnZhbGlkIHNwZWVkIGRldGVjdGlvbi5cblxuVGhlcmVmb3JlLCB0aGUgbWFpbiByZWFzb24gd2h5IHRoZSBwYXRjaCBpc24ndCBhcHBsaWNhYmxlIGlzIHRoZSBoYXJkd2FyZSBkcml2ZXIgZm9yIENhZGVuY2UgTUFDQi9HRU0gZXRoZXJuZXQgY29udHJvbGxlcnMgKGZvdW5kIG9uIEF0bWVsL01pY3JvY2hpcCBBVDkxL1NBTUE1LCBYaWxpbnggWnlucSwgZXRjLikgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG9yIHNwZWNpYWxpemVkIG5vbi1zdGFuZGFyZCBib2FyZCBjb25maWd1cmF0aW9ucyB3aGljaCBhcmUgbm90IHByZXNlbnQvcmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VIHg4Ni92aXJ0IG9yIEdDRSkuIFRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBJIHdpbGwgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIGVzcGVjaWFsbHkgYHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcmAgYW5kIGBtYWNiX2RyaXZlcmAgdG8gY29uZmlybSBubyBvdGhlciB2aXJ0dWFsIGluc3RhbnRpYXRpb24gb2YgdGhlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY0NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTg6NTguNzA4NzIwNzA2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDA3NjM3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTYyNTg9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG1hY2JfcG1fb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02MjYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI2MzpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNiX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYyNjQtXFx0LnByb2JlXFx0XFx0PSBtYWNiX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02MjczLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI3NDptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1hY2JfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYyNzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjU4OjU5LjQwOTQ4OTE5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjE2MTMzODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0J3MgY2xlYXIgdGhlIHRhcmdldCwgYG1hY2JfZHJpdmVyYCwgYW5kIGJ5IGV4dGVuc2lvbiBgbWFjYl9wY2lfZHJpdmVyYCwgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEl0IHJlbGllcyBvbiBzcGVjaWZpYyBoYXJkd2FyZSDigJMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgY29udHJvbGxlciwgd2hpY2ggaXMgZm91bmQgb24gdGhpbmdzIGxpa2UgTWljcm9jaGlwL0F0bWVsIG9yIFhpbGlueCBTb0NzLiBJIGtub3cgdGhhdCBraW5kIG9mIGhhcmR3YXJlIGlzIGp1c3Qgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSB0aGUgb25lcyBJIHR5cGljYWxseSB1c2Ug4oCTIHRoZSB4ODZfNjQgUUVNVSBzZXR1cCBvciB0aGUgQVJNNjQgdmlydC4gVGhhdCBtZWFucyBmdXp6aW5nIHRoaXMgY29kZSBkaXJlY3RseSB3aXRoaW4gbXkgbm9ybWFsIGluZnJhc3RydWN0dXJlIGp1c3QgaXNuJ3QgZmVhc2libGUuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaGFzIHRvIGJlIGBmYWxzZWAgaW4gdGhpcyBpbnN0YW5jZS4gTm8gcG9pbnQgd2FzdGluZyBjeWNsZXMgb24gc29tZXRoaW5nIHRoYXQgY2FuJ3QgYmUgcmVhY2hlZC5cblxuU28sIGxldCdzIGdldCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsIHByZXBhcmVkLiBJJ2xsIGZsYWcgaXQgYWNjb3JkaW5nbHk6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYCDigJMgbm8gcXVlc3Rpb24gYWJvdXQgaXQuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAg4oCTIHRoZXJlIGFyZSBubyBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gY2FsbCBvdXQgYXMgcHJpb3JpdGllcyBpbiB0aGlzIGNhc2UuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIOKAkyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5LlxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2VgIHdpdGhpbiB0aGUgYG1hY2JfbWFpbi5jYCBmaWxlIHdoaWNoIGlzIHBhcnQgb2YgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIuIFRoaXMgZHJpdmVyIHRhcmdldHMgaGFyZHdhcmUgZm91bmQgaW4gZW1iZWRkZWQgc3lzdGVtcywgc3BlY2lmaWNhbGx5IHRob3NlIHVzaW5nIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIElQIGNvcmUsIGxpa2UgdGhlIE1pY3JvY2hpcC9BdG1lbCBBVDkxIGFuZCBYaWxpbnggWnlucSBwbGF0Zm9ybXMuIFRoaXMga2luZCBvZiBoYXJkd2FyZSBpcyBub3QgYWNjZXNzaWJsZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VICh4ODYvdmlydCkgb3IgR0NFLlxuXG5BbHJpZ2h0LCB0aGF0J3MgdGhhdC4gTW92aW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA1NCwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTk6MDMuNjI1NjI1MTcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UgaW4gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZSgpIHdpdGhpbiB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMpLiBUaGlzIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBTb0MgZXRoZXJuZXQgY29udHJvbGxlcnMgKGZvdW5kIG9uIEF0bWVsL01pY3JvY2hpcCBBVDkxL1NBTUE1LCBYaWxpbnggWnlucSwgZXRjLikgYW5kIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgeDg2L3ZpcnQgb3IgR0NFKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlIGluIG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2UoKSB3aXRoaW4gdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jKS4gVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIENhZGVuY2UgTUFDQi9HRU0gU29DIGV0aGVybmV0IGNvbnRyb2xsZXJzIChmb3VuZCBvbiBBdG1lbC9NaWNyb2NoaXAgQVQ5MS9TQU1BNSwgWGlsaW54IFp5bnEsIGV0Yy4pIGFuZCBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIHg4Ni92aXJ0IG9yIEdDRSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1OTowMy42MjU2NDY4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownvk9f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 23:16:40 +0000 UTC FinishedAt: 2026-09-02 23:59:04 +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+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UgaW4gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZSgpIHdpdGhpbiB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMpLiBUaGlzIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBTb0MgZXRoZXJuZXQgY29udHJvbGxlcnMgKGZvdW5kIG9uIEF0bWVsL01pY3JvY2hpcCBBVDkxL1NBTUE1LCBYaWxpbnggWnlucSwgZXRjLikgYW5kIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgeDg2L3ZpcnQgb3IgR0NFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MGFkOTY3MTYyMDZlNGRlMWQyNjg2NzdkMmFlYTNhZmE1Yzk3NGFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMzo1ODoxNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuaW5kZXggNzZlZTRmNTA2MDMzNS4uODE1MzBiOTI1N2IyMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbkBAIC00Mjk3LDcgJiM0Mzs0Mjk3LDcgQEAgc3RhdGljIGludCBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRzdHJ1Y3QgbWFjYl9xdWV1ZV9lbnN0X2NvbmZpZyAqZW5zdF9xdWV1ZTtcbiBcdHN0cnVjdCB0Y190YXByaW9fc2NoZWRfZW50cnkgKmVudHJ5O1xuIFx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQ7XG4mIzQzO1x0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3Mga3NldCA9IHt9O1xuIFx0c3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlO1xuIFx0dTMyIHF1ZXVlX21hc2s7XG4gXHR1OCBxdWV1ZV9pZDtcbkBAIC00MzI0LDcgJiM0Mzs0MzI0LDcgQEAgc3RhdGljIGludCBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR9XG4gXG4gXHRzcGVlZCA9IGtzZXQuYmFzZS5zcGVlZDtcbi1cdGlmICh1bmxpa2VseShzcGVlZCBcdTAwM2M9IDApKSB7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHNwZWVkID09IFNQRUVEX1VOS05PV04gfHwgIXNwZWVkKSkge1xuIFx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7SW52YWxpZCBzcGVlZDogJWRcXG5cJiMzNDssIHNwZWVkKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UgaW4gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZSgpIHdpdGhpbiB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMpLiBUaGlzIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBTb0MgZXRoZXJuZXQgY29udHJvbGxlcnMgKGZvdW5kIG9uIEF0bWVsL01pY3JvY2hpcCBBVDkxL1NBTUE1LCBYaWxpbnggWnlucSwgZXRjLikgYW5kIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgeDg2L3ZpcnQgb3IgR0NFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MGFkOTY3MTYyMDZlNGRlMWQyNjg2NzdkMmFlYTNhZmE1Yzk3NGFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMzo1ODoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCmluZGV4IDc2ZWU0ZjUwNjAzMzUuLjgxNTMwYjkyNTdiMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwpAQCAtNDI5Nyw3ICYjNDM7NDI5Nyw3IEBAIHN0YXRpYyBpbnQgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXN0cnVjdCBtYWNiX3F1ZXVlX2Vuc3RfY29uZmlnICplbnN0X3F1ZXVlOwogCXN0cnVjdCB0Y190YXByaW9fc2NoZWRfZW50cnkgKmVudHJ5OwogCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3Mga3NldDsKJiM0MzsJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3Mga3NldCA9IHt9OwogCXN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZTsKIAl1MzIgcXVldWVfbWFzazsKIAl1OCBxdWV1ZV9pZDsKQEAgLTQzMjQsNyAmIzQzOzQzMjQsNyBAQCBzdGF0aWMgaW50IG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl9CiAKIAlzcGVlZCA9IGtzZXQuYmFzZS5zcGVlZDsKLQlpZiAodW5saWtlbHkoc3BlZWQgJmx0Oz0gMCkpIHsKJiM0MzsJaWYgKHVubGlrZWx5KHNwZWVkID09IFNQRUVEX1VOS05PV04gfHwgIXNwZWVkKSkgewogCQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtJbnZhbGlkIHNwZWVkOiAlZFxuJiMzNDssIHNwZWVkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ2FkZW5jZSBNQUNCIFBhdGNoKioKCk9rYXksIHNvIHRoZSBkaWZmIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGlzIGRyaXZlciBldmVuIGlzIOKAkyBpdCYjMzk7cyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBldGhlcm5ldCBjb250cm9sbGVyIGRyaXZlci4gR2l2ZW4gdGhhdCwgdGhlIG5leHQgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB3aGV0aGVyIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgZXZlbiAqYWNjZXNzaWJsZSogd2l0aGluIGEgdHlwaWNhbCBRRU1VIGVudmlyb25tZW50LiBJcyBDYWRlbmNlIE1BQ0IgZW11bGF0ZWQsIG9yIGlzIHRoaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIHBvc3NpYmx5IFNvQy1zcGVjaWZpYz8gQ2FuIEkgdHJpZ2dlciB0aGlzIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgcGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgY2FkZW5jZV9nZW1gIG9uIEFSTSwgTWljcm9ibGF6ZSwgb3IgUklTQy1WPyBBbHRlcm5hdGl2ZWx5LCBpcyBzeXprYWxsZXIgcnVubmluZyBvbiB4ODYvR0NFLCB3aGljaCB3b3VsZCBvYnZpb3VzbHkgYWZmZWN0IGhvdyBJIGludGVycHJldCB0aGUgcGF0Y2gmIzM5O3MgcmVhY2hhYmlsaXR5PwoKTGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBzdGFuZGFyZCBndWlkZWxpbmVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IHNvbWV0aGluZyB0aGF0JiMzOTtzIGF1dG9tYXRpY2FsbHkgZGlzcXVhbGlmaWVkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBydWxlIG91dDogY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZSBsaWtlIFVTQiBnYWRnZXQgb3IgbWFjODAyMTFfaHdzaW0pLCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gvU21hcnROSUMvR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlICpwaHlzaWNhbCogaGFyZHdhcmUgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSwgb3IgZHJpdmVyIHRlYXItZG93biBjYWxsYmFja3MgKGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgKSB0aGF0IG9ubHkgcnVuIGR1cmluZyBob3QtdW5wbHVnIG9yIGRyaXZlciB1bmJpbmRpbmcuCgpSaWdodCwgc28gdG8gbWFrZSBhIGJldHRlciBqdWRnZW1lbnQgY2FsbCwgSSB3aWxsIGNoZWNrIHRoZSBgS2NvbmZpZ2AgYW5kIHRoZSBgbWFjYl9tYWluLmNgIGZpbGUgaXRzZWxmLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfQ0FERU5DRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjIyOmNvbmZpZyBNQUNCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6Mzc6Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zOC1cdGJvb2wgXCYjMzQ7VXNlIElFRUUgMTU4OCBod3N0YW1wXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ1OmNvbmZpZyBNQUNCX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIENhZGVuY2UgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIENhZGVuY2UgRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ2AuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQsIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZSBkZXBlbmRlbmNpZXMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBsYXJnZXIgYnVpbGQgc3lzdGVtLiBJJiMzOTttIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgdGhpcyBpcyB1c2luZyB0aGUgc3RhbmRhcmQgS2NvbmZpZyBmb3JtYXQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBmZWF0dXJlcy4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlbHBzIGluIGRlYnVnZ2luZyBhbmQgY3VzdG9taXppbmcgZHJpdmVyIGJlaGF2aW91ci4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugc3VwcG9ydCBmb3IgZGlmZmVyZW50IFBIWXMsIHNwZWVkIHNldHRpbmdzLCBpbnRlcnJ1cHQgbWVjaGFuaXNtcywgYW5kIGFueSByZWxldmFudCBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgZHJpdmVyIG9yIHVuZGVyc3RhbmQgaG93IGEgbmV3IGZlYXR1cmUgaXMgaW50ZWdyYXRlZCB3aXRoaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDYWRlbmNlIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX0NBREVOQ0VcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7Q2FkZW5jZSBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTVxuICAgOTpcdFx0ZGVmYXVsdCB5XG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAxMjpcdFxuICAxMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAxNDpcdFxuICAxNTpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTY6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcbiAgMTc6XHRcdCAgcmVtYWluaW5nIENhZGVuY2UgbmV0d29yayBjYXJkIHF1ZXN0aW9ucy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxOTpcdFxuICAyMDpcdGlmIE5FVF9WRU5ET1JfQ0FERU5DRVxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBNQUNCXG4gIDIzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gSEFTX0RNQSBcdTAwMjZcdTAwMjYgQ09NTU9OX0NMS1xuICAyNTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyNjpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMjc6XHRcdHNlbGVjdCBDUkMzMlxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGludGVyZmFjZSBpcyBmb3VuZCBvbiBtYW55IEF0bWVsIEFUMzIgYW5kXG4gIDMwOlx0XHQgIEFUOTEgcGFydHMuICBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBDYWRlbmNlIEdFTSAoR2lnYWJpdFxuICAzMTpcdFx0ICBFdGhlcm5ldCBNQUMgZm91bmQgaW4gc29tZSBBUk0gU29DIGRldmljZXMpLiAgU2F5IFkgdG8gaW5jbHVkZVxuICAzMjpcdFx0ICBzdXBwb3J0IGZvciB0aGUgTUFDQi9HRU0gY2hpcC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAzNTpcdFx0ICB3aWxsIGJlIG1hY2IuXG4gIDM2Olx0XG4gIDM3Olx0Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcbiAgMzg6XHRcdGJvb2wgXCYjMzQ7VXNlIElFRUUgMTU4OCBod3N0YW1wXCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIE1BQ0JcbiAgNDA6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbiAgNDE6XHRcdGRlZmF1bHQgeVxuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIE1BQ0JfUENJXG4gIDQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIE1BQ0IgXHUwMDI2XHUwMDI2IFBDSVxuICA0ODpcdFx0aGVscFxuICA0OTpcdFx0ICBUaGlzIGlzIFBDSSB3cmFwcGVyIGZvciBNQUNCIGRyaXZlci5cbiAgNTA6XHRcbiAgNTE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA1MjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBtYWNiX3BjaS5cbiAgNTM6XHRcbiAgNTQ6XHRlbmRpZiAjIE5FVF9WRU5ET1JfQ0FERU5DRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUUVNVSBhbmQgTUFDQiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGBNQUNCYC4gUmlnaHQsIHRoYXQmIzM5O3MgQ2FkZW5jZSYjMzk7cyBNQUNCL0dFTSBzdXBwb3J0LCBhcyBJIHVuZGVyc3RhbmQgaXQuIE5vdywgaW4gUUVNVSwgdGhlIENhZGVuY2UgR0VNIGltcGxlbWVudGF0aW9uIChgY2FkZW5jZV9nZW0uY2AgdW5kZXIgYGh3L25ldC9gKSBpcyBwcmltYXJpbHkgdXNlZCBmb3IgdGFyZ2V0cyBsaWtlIFhpbGlueCBaeW5xIGFuZCBaeW5xTVAgYm9hcmRzLCBQb2xhckZpcmUsIHRoYXQgc29ydCBvZiB0aGluZy4gQnV0IG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgc3RhbmRhcmQgUUVNVSDigJMgdGhlIHg4NiBvciBHQ0UgZW52aXJvbm1lbnRzLCBmb3IgZXhhbXBsZSDigJMgZG9lc27igJl0IGp1c3QgKm5hdGl2ZWx5KiBlbXVsYXRlIHRoZSBDYWRlbmNlIEdFTSB1bmxlc3MgeW91JiMzOTtyZSB0YXJnZXRpbmcgYSBzcGVjaWZpYyBib2FyZCBpbWFnZSwgbGlrZSBhIFp5bnEgcGxhdGZvcm0sIG9yIG1heWJlIGlmIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBQQ0kgd3JhcHBlciBmb3IgTUFDQl9QQ0kuCgpIbW0sIHRoYXQgbGFzdCBiaXQgaXMgYnVnZ2luZyBtZS4gRG9lcyBzdGFuZGFyZCBRRU1VIGV2ZW4gKmhhdmUqIGEgbWFjYiBQQ0kgZGV2aWNlIGVtdWxhdGlvbj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhpcy4gUmlnaHQsIHRoZSBtb3N0IGxvZ2ljYWwgdGhpbmcgdG8gZG8gaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gSSYjMzk7bGwgb3BlbiB1cCBgbWFjYl9wY2kuY2AgYW5kIGNoZWNrIHdoYXQgUENJIGRldmljZSBJRHMgaXQmIzM5O3MgYWN0dWFsbHkgZGVzaWduZWQgdG8gc3VwcG9ydC4gVGhhdCB3aWxsIHF1aWNrbHkgdGVsbCBtZSBpZiBpdCYjMzk7cyBldmVuIHJlbGV2YW50IGluIHRoZXNlIG1vcmUgZ2VuZXJpYyBlbnZpcm9ubWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RldmljZV9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjI3OnN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYz0xMDg9c3RhdGljIHZvaWQgbWFjYl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjEyMDpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTIxLVx0eyBQQ0lfVkRFVklDRShDRE5TLCBQQ0lfREVWSUNFX0lEX0NETlNfTUFDQikgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTEzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2VgIGluIHRoZSBNQUNCIERyaXZlcioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZWAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIFRBUFJJTyAoVGltZS1Bd2FyZSBQcmlvcml0eSBTY2hlZHVsaW5nKSBzZXR1cCBmb3IgdGhpcyBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgdXNlZCBhcyBhIHJlcGxhY2VtZW50IGZvciBzb21ldGhpbmcsIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGFuZCB3aGF0IGNoYW5nZSBpcyBiZWluZyBhZGRyZXNzZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgY29udGV4dCB3aWxsIHByb3ZpZGUgc2lnbmlmaWNhbnQgZGV0YWlsIGluIHVuZGVyc3RhbmRpbmcgd2hhdCBwcm9ibGVtIHRoaXMgZnVuY3Rpb24gc29sdmVzLCBvciB3aGF0IG9wdGltaXphdGlvbiBpdCBicmluZ3MsIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgZHJpdmVyLiBMZXQmIzM5O3MgdHJhY2UgdGhvc2UgY2FsbHMgYW5kIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgaGF2ZSBhIGZlZWxpbmcgdGhpcyB3aWxsIGludm9sdmUgY2FyZWZ1bCBzY3J1dGlueSBvZiB0aGUgVEFQUklPLXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhleSYjMzk7cmUgYmVpbmcgbWFuaXB1bGF0ZWQgd2l0aGluIHRoZSBkcml2ZXImIzM5O3MgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz00MjczPXN0YXRpYyB2b2lkIG1hY2JfcmVzdG9yZV9mZWF0dXJlcyhzdHJ1Y3QgbWFjYiAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00MjkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo0MjkyOnN0YXRpYyBpbnQgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00MjkzLVx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqY29uZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTQ0NzE9c3RhdGljIGludCBtYWNiX3NldHVwX3RhcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDQ4Ny1cdGNhc2UgVEFQUklPX0NNRF9SRVBMQUNFOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo0NDg4Olx0XHRlcnIgPSBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKG5ldGRldiwgdGFwcmlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDQ4OS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNQUNCIFRBUFJJTyBTZXR1cCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZWAgYW5kIGBtYWNiX3NldHVwX3RhcHJpb2AgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgdGhlIGNvcmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtIOKAkyBhcmUgd2UgdGFsa2luZyBhIGZ1bGwgcmVwbGFjZW1lbnQgb2YgdGhlIFRBUFJJTyBjb25maWd1cmF0aW9uLCBvciBqdXN0IGluY3JlbWVudGFsIG1vZGlmaWNhdGlvbnM/IFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyB0aGUgZm9ybWVyLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Iga2V5IGluZGljYXRvcnM6CgoqICAgKipSZXNvdXJjZSBIYW5kbGluZzoqKiBXaGF0IGFyZSB0aGUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcGF0dGVybnM/IFNwZWNpZmljYWxseSwgYXJlIHdlIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgVEFQUklPIHF1ZXVlIHJlc291cmNlcyB3aXRoaW4gdGhlIE1BQ0IgZHJpdmVyPyBJ4oCZbGwgYmUgd2F0Y2hpbmcgZm9yIHByb3BlciB1c2FnZSBvZiBgc3RydWN0IHRhcHJpb19uZXRkZXZfc2NoZWRgIGRhdGEgc3RydWN0dXJlIG9yIGFueSBvdGhlciBwcm9wcmlldGFyeSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB3aXRoaW4gdGhlIGRyaXZlci4KKiAgICoqSW5pdGlhbGl6YXRpb24gU2VxdWVuY2U6KiogSSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBzdGVwcyBpbiBgbWFjYl9zZXR1cF90YXByaW9gLiBIb3cgaXMgdGhlIFRBUFJJTyBzY2hlZHVsZXIgaW50ZWdyYXRlZCB3aXRoIHRoZSBNQUNCJiMzOTtzIERNQSBlbmdpbmU/IEkmIzM5O2xsIGJlIGNoZWNraW5nIHRvIHNlZSB3aGF0IHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGlmIGFueSBzcGVjaWZpYyBzZXF1ZW5jZXMgYXJlIG5lY2Vzc2FyeS4KKiAgICoqUmVwbGFjZW1lbnQgTG9naWM6KiogYG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2VgIGlzIGludHJpZ3VpbmcuIEhvdyBkb2VzIGl0IGVuc3VyZSBhdG9taWNpdHk/IERvZXMgaXQgaW52b2x2ZSBkaXNhYmxpbmcgdGhlIE1BQ0IsIHVwZGF0aW5nIHRoZSBjb25maWd1cmF0aW9uLCBhbmQgcmUtZW5hYmxpbmcgaXQsIG9yIGlzIHRoZXJlIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGFwcHJvYWNoPyBJIGV4cGVjdCB0byBsb29rIGZvciB0aGUgdXNlIG9mIG11dGV4ZXMgb3Igc3BpbmxvY2tzIHRvIHByb3RlY3Qgc2hhcmVkIHJlc291cmNlcywgZXNwZWNpYWxseSByZWdhcmRpbmcgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzIG9mIHRoZSBoYXJkd2FyZS4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCYjMzk7cyB0aGUgZXJyb3ItaGFuZGxpbmcgc3RyYXRlZ3k/IEFyZSB0aGVyZSBjaGVja3MgZm9yIGludmFsaWQgcGFyYW1ldGVycyAoZS5nLiwgaW5jb3JyZWN0IHF1ZXVlIGNvbmZpZ3VyYXRpb25zLCBzY2hlZHVsaW5nIHBvbGljaWVzKSBiZWZvcmUgYXBwbHlpbmcgY2hhbmdlcz8gSG93IGRvZXMgdGhlIGRyaXZlciBzaWduYWwgZmFpbHVyZXMgYmFjayB0byB0aGUgdXBwZXIgbGF5ZXJzIChlLmcuLCB2aWEgcmV0dXJuIGNvZGVzIG9yIGVycm9yIG1lc3NhZ2VzKT8KKiAgICoqQ29uY3VycmVuY3k6KiogR2l2ZW4gdGhhdCBUQVBSSU8gaW52b2x2ZXMgc2NoZWR1bGluZyBtdWx0aXBsZSB0cmFmZmljIGNsYXNzZXMsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgTUFDQiBoYXJkd2FyZS4gQXJlIHRoZXJlIHByb3BlciBsb2NraW5nIG1lY2hhbmlzbXMgaW4gcGxhY2UsIGFuZCBkbyB0aGV5IGludGVyYWN0IHNhZmVseSB3aXRoIGludGVycnVwdCBoYW5kbGVycyBpZiB0aGV5IGV4aXN0PwoKSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGZvY3VzZWQgb24gYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIGhlYXZ5IG5ldHdvcmsgbG9hZCwgb3IgYW55IGFyZWFzIHdoZXJlIHRoZSBhYnN0cmFjdGlvbiBvZiBUQVBSSU8gbWlnaHQgYmUgbGVha2luZyBpbnRvIHRoZSBNQUNCIGRyaXZlci4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW50cm9kdWNlZCBieSB0aGVzZSBmdW5jdGlvbnMg4oCTIGFyZSB0aGV5IG9wdGltaXplZCBmb3IgZmFzdCByZWNvbmZpZ3VyYXRpb24sIG9yIGNvdWxkIHRoZXkgYmVjb21lIGEgcG9pbnQgb2YgY29udGVudGlvbiBpbiBhIHRpbWUtY3JpdGljYWwgbmV0d29yayBzY2VuYXJpbz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjkwOlx0fVxuNDI5MTpcdFxuNDI5MjpcdHN0YXRpYyBpbnQgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuNDI5MzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqY29uZilcbjQyOTQ6XHR7XG40Mjk1Olx0XHR1NjQgdG90YWxfb25fdGltZSA9IDAsIHN0YXJ0X3RpbWVfc2VjID0gMCwgc3RhcnRfdGltZSA9IGNvbmYtXHUwMDNlYmFzZV90aW1lO1xuNDI5NjpcdFx0dTMyIGNvbmZpZ3VyZWRfcXVldWVzID0gMCwgc3BlZWQgPSAwLCBzdGFydF90aW1lX25zZWM7XG40Mjk3Olx0XHRzdHJ1Y3QgbWFjYl9xdWV1ZV9lbnN0X2NvbmZpZyAqZW5zdF9xdWV1ZTtcbjQyOTg6XHRcdHN0cnVjdCB0Y190YXByaW9fc2NoZWRfZW50cnkgKmVudHJ5O1xuNDI5OTpcdFx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbjQzMDA6XHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQgPSB7fTtcbjQzMDE6XHRcdHN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZTtcbjQzMDI6XHRcdHUzMiBxdWV1ZV9tYXNrO1xuNDMwMzpcdFx0dTggcXVldWVfaWQ7XG40MzA0Olx0XHRzaXplX3QgaTtcbjQzMDU6XHRcdGludCBlcnI7XG40MzA2Olx0XG40MzA3Olx0XHRpZiAoY29uZi1cdTAwM2VudW1fZW50cmllcyBcdTAwM2UgYnAtXHUwMDNlbnVtX3F1ZXVlcykge1xuNDMwODpcdFx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7VG9vIG1hbnkgVEFQUklPIGVudHJpZXM6ICV6dSBcdTAwM2UgJWQgcXVldWVzXFxuXCYjMzQ7LFxuNDMwOTpcdFx0XHRcdCAgIGNvbmYtXHUwMDNlbnVtX2VudHJpZXMsIGJwLVx1MDAzZW51bV9xdWV1ZXMpO1xuNDMxMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQzMTE6XHRcdH1cbjQzMTI6XHRcbjQzMTM6XHRcdGlmIChjb25mLVx1MDAzZWJhc2VfdGltZSBcdTAwM2MgMCkge1xuNDMxNDpcdFx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7SW52YWxpZCBiYXNlX3RpbWU6IG11c3QgYmUgMCBvciBwb3NpdGl2ZSwgZ290ICVsbGRcXG5cJiMzNDssXG40MzE1Olx0XHRcdFx0ICAgY29uZi1cdTAwM2ViYXNlX3RpbWUpO1xuNDMxNjpcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbjQzMTc6XHRcdH1cbjQzMTg6XHRcbjQzMTk6XHRcdC8qIEdldCB0aGUgY3VycmVudCBsaW5rIHNwZWVkICovXG40MzIwOlx0XHRlcnIgPSBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldChicC1cdTAwM2VwaHlsaW5rLCBcdTAwMjZrc2V0KTtcbjQzMjE6XHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG40MzIyOlx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGxpbmsgc2V0dGluZ3M6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuNDMyMzpcdFx0XHRyZXR1cm4gZXJyO1xuNDMyNDpcdFx0fVxuNDMyNTpcdFxuNDMyNjpcdFx0c3BlZWQgPSBrc2V0LmJhc2Uuc3BlZWQ7XG40MzI3Olx0XHRpZiAodW5saWtlbHkoc3BlZWQgPT0gU1BFRURfVU5LTk9XTiB8fCAhc3BlZWQpKSB7XG40MzI4Olx0XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtJbnZhbGlkIHNwZWVkOiAlZFxcblwmIzM0Oywgc3BlZWQpO1xuNDMyOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQzMzA6XHRcdH1cbjQzMzE6XHRcbjQzMzI6XHRcdGVuc3RfcXVldWUgPSBrY2FsbG9jKGNvbmYtXHUwMDNlbnVtX2VudHJpZXMsIHNpemVvZigqZW5zdF9xdWV1ZSksIEdGUF9LRVJORUwpO1xuNDMzMzpcdFx0aWYgKHVubGlrZWx5KCFlbnN0X3F1ZXVlKSlcbjQzMzQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40MzM1Olx0XG40MzM2Olx0XHQvKiBQcmUtdmFsaWRhdGUgYWxsIGVudHJpZXMgYmVmb3JlIG1ha2luZyBhbnkgaGFyZHdhcmUgY2hhbmdlcyAqL1xuNDMzNzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29uZi1cdTAwM2VudW1fZW50cmllczsgaSYjNDM7JiM0MzspIHtcbjQzMzg6XHRcdFx0ZW50cnkgPSBcdTAwMjZjb25mLVx1MDAzZWVudHJpZXNbaV07XG40MzM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBub3RpY2VkIGEgcG90ZW50aWFsIGJ1ZyBpbiB0aGUgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0YCBmdW5jdGlvbiByZWxhdGVkIHRvIGhvdyBzcGVlZCBpcyBoYW5kbGVkLiBUaGUgY29kZSB3YXMgY2hlY2tpbmcgaWYgYHNwZWVkICZsdDs9IDBgLCBidXQgdGhlIGBTUEVFRF9VTktOT1dOYCB2YWx1ZSBpcyBhY3R1YWxseSBgKHUzMiktMWAuIFRoaXMgbWVhbnMgdGhlIGluaXRpYWwgY2hlY2sgdXNpbmcgYHNwZWVkICZsdDs9IDBgIHdvdWxkbiYjMzk7dCBjYXRjaCB0aGUgYFNQRUVEX1VOS05PV05gIGNhc2UgYmVjYXVzZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBgLTFgIGJlY29tZXMgYSBsYXJnZSBwb3NpdGl2ZSBudW1iZXIuIFNvLCBpbml0aWFsaXppbmcgYGtzZXQgPSB7fWAgYW5kIHRoZW4gY2hlY2tpbmcgZXhwbGljaXRseSBmb3IgYHNwZWVkID09IFNQRUVEX1VOS05PV04gfHwgIXNwZWVkYCBpcyB0aGUgY29ycmVjdCBmaXggZm9yIGJvdGggemVybyBhbmQgdW5rbm93biBzcGVlZHMuCgpOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQ6IGRldGVybWluaW5nIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZywgYmFzZWQgb24gdGhlIHJlYWNoYWJpbGl0eSBydWxlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgcGF0aCBpbiBgY2FkZW5jZS9tYWNiX21haW4uY2AgaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFRoYXQmIzM5O3MgdGhlIGtleS4gVGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IHN0YXRlIHdlIHNob3VsZG4mIzM5O3QgY29uc2lkZXIgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gVGhlIHJ1bGVzIGFyZSBzdHJpY3Q6IERvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBudW1lcmljIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24sIGNvZGUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBRRU1VLCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gvU21hcnROSUMvR1BVIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCBvciB0ZWFyZG93biBjYWxsYmFja3MuCgpTbywgaXMgYGNhZGVuY2UvbWFjYl9tYWluLmNgIHNvbWV0aGluZyBJIGNhbiBhY3R1YWxseSBoaXQ/IERvZXMgTUFDQiB3b3JrIGluIFFFTVU/IEkgbmVlZCB0byBjaGVjayB0aGUgcGxhdGZvcm0gc3VwcG9ydCBhbmQgaG93IE1BQ0IgaXMgaW5zdGFudGlhdGVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gY2hlY2sgdGhlIGNvZGU6IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBgZ3JlcGAgZm9yIGBtYWNiX3Byb2JlYCBvciBgb2ZfbWF0Y2hfdGFibGVgIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kIGlmIGl0JiMzOTtzIGdvdCBhIHBhdGggaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgaXMgdGhlIGNydWNpYWwgc3RlcDsgdGhlIHJlc3QgaGluZ2VzIG9uIHRoaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY2JfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDU0NT1zdGF0aWMgdm9pZCBtYWNiX2NvbmZpZ3VyZV9jYXBzKHN0cnVjdCBtYWNiICpicCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ1ODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjQ1ODk6c3RhdGljIGludCBtYWNiX3Byb2JlX3F1ZXVlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqbWVtLCBib29sIG5hdGl2ZV9pbylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDU5MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NzU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgZGVmYXVsdF9nZW1fY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTc2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTc2NjpzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTc2Ny17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1ODAyOlx0bnVtX3F1ZXVlcyA9IG1hY2JfcHJvYmVfcXVldWVzKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBtZW0sIG5hdGl2ZV9pbyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4MDMtXHRpZiAobnVtX3F1ZXVlcyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NjI2Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNiX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI2NDpcdC5wcm9iZVx0XHQ9IG1hY2JfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYyNjUtXHQucmVtb3ZlXHRcdD0gbWFjYl9yZW1vdmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjI3OnN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYz0xMjU9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1hY2JfcGNpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI3LVx0LmlkX3RhYmxlID0gZGV2X2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjEyODpcdC5wcm9iZSAgICA9IG1hY2JfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI5LVx0LnJlbW92ZVx0ICA9IG1hY2JfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjQ3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiB0aGUgYG1hY2JgIERyaXZlciBpbiBGdXp6aW5nIEVudmlyb25tZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgbWFjYmAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYG1hY2JfcGNpLmNgIGFuZCBgbWFjYl9tYWluLmNgLiBUaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBhY2Nlc3NpYmxlIHdpdGhpbiBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcywgcGFydGljdWxhcmx5IFFFTVUgYW5kIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSwgdGhlIHByaW1hcnkgdGFyZ2V0cyBmb3Igc3l6a2FsbGVyLgoKRmlyc3QsIEkgc2VlIGBQQ0lfREVWSUNFX0lEX0NETlNfTUFDQmAgKDB4ZWQwMCkgZm9yIHRoZSBDYWRlbmNlIFBDSSBNQUNCL0dFTS4gTm93LCBJIHJlY2FsbCBgY2FkZW5jZV9nZW1gIGlzIGVtdWxhdGVkIGluIFFFTVUsIGJ1dCBpdCYjMzk7cyAqbm90KiBhIHN0YW5kYXJkIFBDSSBkZXZpY2UgZm9yIHg4Ni94ODZfNjQgb3IgR0NFLiBJdCYjMzk7cyBhIHN5c2J1cyBkZXZpY2UsIHVzZWQgZm9yIHNwZWNpZmljIGJvYXJkcyBsaWtlIFhpbGlueCBaeW5xLiAgTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGluIHRoZSB4ODYgb3IgYWFyY2g2NCBzZXR1cHMgdXNlZCBmb3Igc3l6a2FsbGVyLCBgY2FkZW5jZV9nZW1gIGlzIG5vdCBwcmVzZW50IGFzIGEgc3RhbmRhcmQgUENJIGRldmljZS4KCkxldCYjMzk7cyBjaGVjayBzeXprYWxsZXImIzM5O3MgZXhwbGljaXQgY3JpdGVyaWE6IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFL1FFTVUsIGVzcGVjaWFsbHkgd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gVGhpcyBpbmNsdWRlcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggZHJpdmVycy4gIFRoZSBrZXkgaXMsIGlmIHRoZSBkcml2ZXIgbmVlZHMgcmVhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgaXQmIzM5O3Mgb3V0LgoKSSBxdWlja2x5IHJldmlldyB0aGUgY29tbW9uIFFFTVUgZW11bGF0ZWQgZXRoZXJuZXQgZHJpdmVyczogZTEwMDAsIGlnYiwgdmlydGlvLW5ldCwgZXRjLiAgQ2FkZW5jZSBNQUNCIGlzbiYjMzk7dCBvbiB0aGF0IGxpc3QuIEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBBdG1lbCwgTWljcm9jaGlwLCBYaWxpbngsIGFuZCBTaUZpdmUgU29DcywgYWxvbmcgd2l0aCBhIFBDSSB3cmFwcGVyLiBJbiB4ODYgUUVNVS9HQ0UsIHRoZXJlJiMzOTtzIG5vIENhZGVuY2UgTUFDQiBkZXZpY2UuIEV2ZW4gb24gdGhlIHN0YW5kYXJkIGBxZW11LXN5c3RlbS1hYXJjaDY0IC1NIHZpcnRgIHRoZSBOSUNzIGFyZSB2aXJ0aW8tbmV0LCBlMTAwMCwgb3IgcGNpLiBgY2FkZW5jZV9nZW1gIGlzICpvbmx5KiBvbiBzcGVjaWZpYyBTb0MgYm9hcmRzLCBub3QgdGhlIGdlbmVyYWwtcHVycG9zZSB2aXJ0dWFsIG1hY2hpbmVzIHN5emthbGxlciB1c2VzLgoKU28sIEkgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIGl0JiMzOTtzIHBsYXRmb3JtIG9yIGhhcmR3YXJlLWRlcGVuZGVudC4gVGhlIGBtYWNiYCBpcyBhbiBldGhlcm5ldCBkcml2ZXIgZm9yIENhZGVuY2UgTUFDQi9HRU0gaGFyZHdhcmUsIHNvIEkmIzM5O20gbGVhbmluZyBoZWF2aWx5IHRvd2FyZHMgJiMzNDt5ZXMmIzM0Oy4gSXQgcmVsaWVzIG9uIHNwZWNpZmljIFNvQyBoYXJkd2FyZSBvciBzcGVjaWFsaXplZCBib2FyZCBjb25maWd1cmF0aW9ucy4gIFRoZXNlIGFyZW4mIzM5O3QgcHJlc2VudCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4KCk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmICh0aGUgYG1hY2JfbWFpbi5jYCBkaWZmKSwgSSYjMzk7bSB2ZXJpZnlpbmcgdGhlIHBvdGVudGlhbCByZWFjaCBvZiB0aGUgY29kZS4gVGhlIGNoYW5nZSBpcyBpbiB0aGUgYG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2VgIGZ1bmN0aW9uLCBhbmQgaXQgcmVsYXRlcyB0byB0aGUgc3BlZWQgY2hlY2sgd2l0aGluIHRoZSBUYXByaW8gc2V0dXAuCgpUaGUgcmVhc29uIGZvciB0aGUgY2hhbmdlLCBgc3BlZWQgPT0gU1BFRURfVU5LTk9XTiB8fCAhc3BlZWRgIHNlZW1zIHRvIGltcHJvdmUgdGhlIGludmFsaWQgc3BlZWQgZGV0ZWN0aW9uLgoKVGhlcmVmb3JlLCB0aGUgbWFpbiByZWFzb24gd2h5IHRoZSBwYXRjaCBpc24mIzM5O3QgYXBwbGljYWJsZSBpcyB0aGUgaGFyZHdhcmUgZHJpdmVyIGZvciBDYWRlbmNlIE1BQ0IvR0VNIGV0aGVybmV0IGNvbnRyb2xsZXJzIChmb3VuZCBvbiBBdG1lbC9NaWNyb2NoaXAgQVQ5MS9TQU1BNSwgWGlsaW54IFp5bnEsIGV0Yy4pIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBvciBzcGVjaWFsaXplZCBub24tc3RhbmRhcmQgYm9hcmQgY29uZmlndXJhdGlvbnMgd2hpY2ggYXJlIG5vdCBwcmVzZW50L3JlYWNoYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVSB4ODYvdmlydCBvciBHQ0UpLiBUaGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gSSB3aWxsIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nLCBlc3BlY2lhbGx5IGBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXJgIGFuZCBgbWFjYl9kcml2ZXJgIHRvIGNvbmZpcm0gbm8gb3RoZXIgdmlydHVhbCBpbnN0YW50aWF0aW9uIG9mIHRoZSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY2JfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTYyNTg9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG1hY2JfcG1fb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI2Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI2MzpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNiX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI2NC1cdC5wcm9iZVx0XHQ9IG1hY2JfcHJvYmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02MjczLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo2Mjc0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobWFjYl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02Mjc1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA1NAoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0JiMzOTtzIGNsZWFyIHRoZSB0YXJnZXQsIGBtYWNiX2RyaXZlcmAsIGFuZCBieSBleHRlbnNpb24gYG1hY2JfcGNpX2RyaXZlcmAsIGlzIGEgcGxhdGZvcm0gZHJpdmVyLiBJdCByZWxpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUg4oCTIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGNvbnRyb2xsZXIsIHdoaWNoIGlzIGZvdW5kIG9uIHRoaW5ncyBsaWtlIE1pY3JvY2hpcC9BdG1lbCBvciBYaWxpbnggU29Dcy4gSSBrbm93IHRoYXQga2luZCBvZiBoYXJkd2FyZSBpcyBqdXN0IG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgdGhlIG9uZXMgSSB0eXBpY2FsbHkgdXNlIOKAkyB0aGUgeDg2XzY0IFFFTVUgc2V0dXAgb3IgdGhlIEFSTTY0IHZpcnQuIFRoYXQgbWVhbnMgZnV6emluZyB0aGlzIGNvZGUgZGlyZWN0bHkgd2l0aGluIG15IG5vcm1hbCBpbmZyYXN0cnVjdHVyZSBqdXN0IGlzbiYjMzk7dCBmZWFzaWJsZS4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaGFzIHRvIGJlIGBmYWxzZWAgaW4gdGhpcyBpbnN0YW5jZS4gTm8gcG9pbnQgd2FzdGluZyBjeWNsZXMgb24gc29tZXRoaW5nIHRoYXQgY2FuJiMzOTt0IGJlIHJlYWNoZWQuCgpTbywgbGV0JiMzOTtzIGdldCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsIHByZXBhcmVkLiBJJiMzOTtsbCBmbGFnIGl0IGFjY29yZGluZ2x5OgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgIOKAkyBubyBxdWVzdGlvbiBhYm91dCBpdC4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gIOKAkyB0aGVyZSBhcmUgbm8gc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGNhbGwgb3V0IGFzIHByaW9yaXRpZXMgaW4gdGhpcyBjYXNlLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIOKAkyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5LgoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZWAgd2l0aGluIHRoZSBgbWFjYl9tYWluLmNgIGZpbGUgd2hpY2ggaXMgcGFydCBvZiB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlci4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBoYXJkd2FyZSBmb3VuZCBpbiBlbWJlZGRlZCBzeXN0ZW1zLCBzcGVjaWZpY2FsbHkgdGhvc2UgdXNpbmcgdGhlIENhZGVuY2UgTUFDQi9HRU0gSVAgY29yZSwgbGlrZSB0aGUgTWljcm9jaGlwL0F0bWVsIEFUOTEgYW5kIFhpbGlueCBaeW5xIHBsYXRmb3Jtcy4gVGhpcyBraW5kIG9mIGhhcmR3YXJlIGlzIG5vdCBhY2Nlc3NpYmxlIHdpdGhpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHg4Ni92aXJ0KSBvciBHQ0UuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHRoYXQuIE1vdmluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSBpbiBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKCkgd2l0aGluIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYykuIFRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciBDYWRlbmNlIE1BQ0IvR0VNIFNvQyBldGhlcm5ldCBjb250cm9sbGVycyAoZm91bmQgb24gQXRtZWwvTWljcm9jaGlwIEFUOTEvU0FNQTUsIFhpbGlueCBaeW5xLCBldGMuKSBhbmQgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSB4ODYvdmlydCBvciBHQ0UpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UgaW4gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZSgpIHdpdGhpbiB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMpLiBUaGlzIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBTb0MgZXRoZXJuZXQgY29udHJvbGxlcnMgKGZvdW5kIG9uIEF0bWVsL01pY3JvY2hpcCBBVDkxL1NBTUE1LCBYaWxpbnggWnlucSwgZXRjLikgYW5kIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgeDg2L3ZpcnQgb3IgR0NFKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIzOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODoxOC4yMTA5NDc4ODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQxNDcwOTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlIGluIG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2UoKSB3aXRoaW4gdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jKS4gVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIENhZGVuY2UgTUFDQi9HRU0gU29DIGV0aGVybmV0IGNvbnRyb2xsZXJzIChmb3VuZCBvbiBBdG1lbC9NaWNyb2NoaXAgQVQ5MS9TQU1BNSwgWGlsaW54IFp5bnEsIGV0Yy4pIGFuZCBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIHg4Ni92aXJ0IG9yIEdDRSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODoxOC4yMTA5NTM1NjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzQ4OTUxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MGFkOTY3MTYyMDZlNGRlMWQyNjg2NzdkMmFlYTNhZmE1Yzk3NGFhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMjM6NTg6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG5pbmRleCA3NmVlNGY1MDYwMzM1Li44MTUzMGI5MjU3YjIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuQEAgLTQyOTcsNyArNDI5Nyw3IEBAIHN0YXRpYyBpbnQgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRzdHJ1Y3QgbWFjYl9xdWV1ZV9lbnN0X2NvbmZpZyAqZW5zdF9xdWV1ZTtcXG4gXFx0c3RydWN0IHRjX3RhcHJpb19zY2hlZF9lbnRyeSAqZW50cnk7XFxuIFxcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQ7XFxuK1xcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQgPSB7fTtcXG4gXFx0c3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlO1xcbiBcXHR1MzIgcXVldWVfbWFzaztcXG4gXFx0dTggcXVldWVfaWQ7XFxuQEAgLTQzMjQsNyArNDMyNCw3IEBAIHN0YXRpYyBpbnQgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR9XFxuIFxcbiBcXHRzcGVlZCA9IGtzZXQuYmFzZS5zcGVlZDtcXG4tXFx0aWYgKHVubGlrZWx5KHNwZWVkIFxcdTAwM2M9IDApKSB7XFxuK1xcdGlmICh1bmxpa2VseShzcGVlZCA9PSBTUEVFRF9VTktOT1dOIHx8ICFzcGVlZCkpIHtcXG4gXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJJbnZhbGlkIHNwZWVkOiAlZFxcXFxuXFxcIiwgc3BlZWQpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODoxOS40NDY1NjUzMjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ0MTc5MDc5MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSBpbiBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKCkgd2l0aGluIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYykuIFRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciBDYWRlbmNlIE1BQ0IvR0VNIFNvQyBldGhlcm5ldCBjb250cm9sbGVycyAoZm91bmQgb24gQXRtZWwvTWljcm9jaGlwIEFUOTEvU0FNQTUsIFhpbGlueCBaeW5xLCBldGMuKSBhbmQgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSB4ODYvdmlydCBvciBHQ0UpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzBhZDk2NzE2MjA2ZTRkZTFkMjY4Njc3ZDJhZWEzYWZhNWM5NzRhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMjM6NTg6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuaW5kZXggNzZlZTRmNTA2MDMzNS4uODE1MzBiOTI1N2IyMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbkBAIC00Mjk3LDcgKzQyOTcsNyBAQCBzdGF0aWMgaW50IG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHN0cnVjdCBtYWNiX3F1ZXVlX2Vuc3RfY29uZmlnICplbnN0X3F1ZXVlO1xuIFx0c3RydWN0IHRjX3RhcHJpb19zY2hlZF9lbnRyeSAqZW50cnk7XG4gXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3Mga3NldDtcbitcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQgPSB7fTtcbiBcdHN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZTtcbiBcdHUzMiBxdWV1ZV9tYXNrO1xuIFx0dTggcXVldWVfaWQ7XG5AQCAtNDMyNCw3ICs0MzI0LDcgQEAgc3RhdGljIGludCBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR9XG4gXG4gXHRzcGVlZCA9IGtzZXQuYmFzZS5zcGVlZDtcbi1cdGlmICh1bmxpa2VseShzcGVlZCBcdTAwM2M9IDApKSB7XG4rXHRpZiAodW5saWtlbHkoc3BlZWQgPT0gU1BFRURfVU5LTk9XTiB8fCAhc3BlZWQpKSB7XG4gXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkludmFsaWQgc3BlZWQ6ICVkXFxuXCIsIHNwZWVkKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODoxOS40NDY1NjY5NzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDYxOTk4NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ2FkZW5jZSBNQUNCIFBhdGNoKipcblxuT2theSwgc28gdGhlIGRpZmYgaXMgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoaXMgZHJpdmVyIGV2ZW4gaXMg4oCTIGl0J3MgdGhlIENhZGVuY2UgTUFDQi9HRU0gZXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIuIEdpdmVuIHRoYXQsIHRoZSBuZXh0IHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB0aGF0J3MgZXZlbiAqYWNjZXNzaWJsZSogd2l0aGluIGEgdHlwaWNhbCBRRU1VIGVudmlyb25tZW50LiBJcyBDYWRlbmNlIE1BQ0IgZW11bGF0ZWQsIG9yIGlzIHRoaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIHBvc3NpYmx5IFNvQy1zcGVjaWZpYz8gQ2FuIEkgdHJpZ2dlciB0aGlzIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgcGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgY2FkZW5jZV9nZW1gIG9uIEFSTSwgTWljcm9ibGF6ZSwgb3IgUklTQy1WPyBBbHRlcm5hdGl2ZWx5LCBpcyBzeXprYWxsZXIgcnVubmluZyBvbiB4ODYvR0NFLCB3aGljaCB3b3VsZCBvYnZpb3VzbHkgYWZmZWN0IGhvdyBJIGludGVycHJldCB0aGUgcGF0Y2gncyByZWFjaGFiaWxpdHk/XG5cbkxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgc3RhbmRhcmQgZ3VpZGVsaW5lcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IHNvbWV0aGluZyB0aGF0J3MgYXV0b21hdGljYWxseSBkaXNxdWFsaWZpZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHJ1bGUgb3V0OiBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlIGxpa2UgVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbSksIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaC9TbWFydE5JQy9HUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgKnBoeXNpY2FsKiBoYXJkd2FyZSAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpLCBvciBkcml2ZXIgdGVhci1kb3duIGNhbGxiYWNrcyAoYC5yZW1vdmVgLCBgLnNodXRkb3duYCwgYHBjaV91bnJlZ2lzdGVyX2RyaXZlcmApIHRoYXQgb25seSBydW4gZHVyaW5nIGhvdC11bnBsdWcgb3IgZHJpdmVyIHVuYmluZGluZy5cblxuUmlnaHQsIHNvIHRvIG1ha2UgYSBiZXR0ZXIganVkZ2VtZW50IGNhbGwsIEkgd2lsbCBjaGVjayB0aGUgYEtjb25maWdgIGFuZCB0aGUgYG1hY2JfbWFpbi5jYCBmaWxlIGl0c2VsZi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODoyNy41MDg1Njc0MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NjAwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQ0JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzozNzpjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zOC1cXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ1OmNvbmZpZyBNQUNCX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTg6MjcuNTU0MjI5ODQ2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg4MDI4Mjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBDYWRlbmNlIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDYWRlbmNlIEV0aGVybmV0IGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ2AuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQsIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgaG93IHRoZSBkZXBlbmRlbmNpZXMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBsYXJnZXIgYnVpbGQgc3lzdGVtLiBJJ20gYXNzdW1pbmcsIG9mIGNvdXJzZSwgdGhhdCB0aGlzIGlzIHVzaW5nIHRoZSBzdGFuZGFyZCBLY29uZmlnIGZvcm1hdC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGZlYXR1cmVzLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVscHMgaW4gZGVidWdnaW5nIGFuZCBjdXN0b21pemluZyBkcml2ZXIgYmVoYXZpb3VyLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBQSFlzLCBzcGVlZCBzZXR0aW5ncywgaW50ZXJydXB0IG1lY2hhbmlzbXMsIGFuZCBhbnkgcmVsZXZhbnQgcGxhdGZvcm0tc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIGRyaXZlciBvciB1bmRlcnN0YW5kIGhvdyBhIG5ldyBmZWF0dXJlIGlzIGludGVncmF0ZWQgd2l0aGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQ0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTg6MjkuNDM0NTE1MjM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENhZGVuY2UgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfQ0FERU5DRVxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiQ2FkZW5jZSBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG4gICA5OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxNjpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxNzpcXHRcXHQgIHJlbWFpbmluZyBDYWRlbmNlIG5ldHdvcmsgY2FyZCBxdWVzdGlvbnMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcXG4gIDE4OlxcdFxcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBNQUNCXFxuICAyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfRE1BIFxcdTAwMjZcXHUwMDI2IENPTU1PTl9DTEtcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDI2OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAyNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDI4OlxcdFxcdGhlbHBcXG4gIDI5OlxcdFxcdCAgVGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBpbnRlcmZhY2UgaXMgZm91bmQgb24gbWFueSBBdG1lbCBBVDMyIGFuZFxcbiAgMzA6XFx0XFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcXG4gIDMxOlxcdFxcdCAgRXRoZXJuZXQgTUFDIGZvdW5kIGluIHNvbWUgQVJNIFNvQyBkZXZpY2VzKS4gIFNheSBZIHRvIGluY2x1ZGVcXG4gIDMyOlxcdFxcdCAgc3VwcG9ydCBmb3IgdGhlIE1BQ0IvR0VNIGNoaXAuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzU6XFx0XFx0ICB3aWxsIGJlIG1hY2IuXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuICAzODpcXHRcXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1BQ0JcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBNQUNCX1BDSVxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDUyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbWFjYl9wY2kuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGVuZGlmICMgTkVUX1ZFTkRPUl9DQURFTkNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjU4OjI5LjQzNDU3NTEyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTMwMTM3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUUVNVSBhbmQgTUFDQiBNdXNpbmdzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBgTUFDQmAuIFJpZ2h0LCB0aGF0J3MgQ2FkZW5jZSdzIE1BQ0IvR0VNIHN1cHBvcnQsIGFzIEkgdW5kZXJzdGFuZCBpdC4gTm93LCBpbiBRRU1VLCB0aGUgQ2FkZW5jZSBHRU0gaW1wbGVtZW50YXRpb24gKGBjYWRlbmNlX2dlbS5jYCB1bmRlciBgaHcvbmV0L2ApIGlzIHByaW1hcmlseSB1c2VkIGZvciB0YXJnZXRzIGxpa2UgWGlsaW54IFp5bnEgYW5kIFp5bnFNUCBib2FyZHMsIFBvbGFyRmlyZSwgdGhhdCBzb3J0IG9mIHRoaW5nLiBCdXQgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzdGFuZGFyZCBRRU1VIOKAkyB0aGUgeDg2IG9yIEdDRSBlbnZpcm9ubWVudHMsIGZvciBleGFtcGxlIOKAkyBkb2VzbuKAmXQganVzdCAqbmF0aXZlbHkqIGVtdWxhdGUgdGhlIENhZGVuY2UgR0VNIHVubGVzcyB5b3UncmUgdGFyZ2V0aW5nIGEgc3BlY2lmaWMgYm9hcmQgaW1hZ2UsIGxpa2UgYSBaeW5xIHBsYXRmb3JtLCBvciBtYXliZSBpZiB0aGVyZSdzIHNvbWUga2luZCBvZiBQQ0kgd3JhcHBlciBmb3IgTUFDQl9QQ0kuXG5cbkhtbSwgdGhhdCBsYXN0IGJpdCBpcyBidWdnaW5nIG1lLiBEb2VzIHN0YW5kYXJkIFFFTVUgZXZlbiAqaGF2ZSogYSBtYWNiIFBDSSBkZXZpY2UgZW11bGF0aW9uPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGlzLiBSaWdodCwgdGhlIG1vc3QgbG9naWNhbCB0aGluZyB0byBkbyBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBJJ2xsIG9wZW4gdXAgYG1hY2JfcGNpLmNgIGFuZCBjaGVjayB3aGF0IFBDSSBkZXZpY2UgSURzIGl0J3MgYWN0dWFsbHkgZGVzaWduZWQgdG8gc3VwcG9ydC4gVGhhdCB3aWxsIHF1aWNrbHkgdGVsbCBtZSBpZiBpdCdzIGV2ZW4gcmVsZXZhbnQgaW4gdGhlc2UgbW9yZSBnZW5lcmljIGVudmlyb25tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjU4OjMxLjk4NzU5MTE0NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDUwODQxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX2RldmljZV9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6Mjc6c3RhdGljIGludCBtYWNiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEwOD1zdGF0aWMgdm9pZCBtYWNiX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTExOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTIwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkZXZfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTIxLVxcdHsgUENJX1ZERVZJQ0UoQ0ROUywgUENJX0RFVklDRV9JRF9DRE5TX01BQ0IpIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjU4OjMyLjIzMjY4MDU2MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczOTI1NDY3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlYCBpbiB0aGUgTUFDQiBEcml2ZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZWAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIFRBUFJJTyAoVGltZS1Bd2FyZSBQcmlvcml0eSBTY2hlZHVsaW5nKSBzZXR1cCBmb3IgdGhpcyBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgdXNlZCBhcyBhIHJlcGxhY2VtZW50IGZvciBzb21ldGhpbmcsIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0J3MgY2FsbGVkIGZyb20gYW5kIHdoYXQgY2hhbmdlIGlzIGJlaW5nIGFkZHJlc3NlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjb250ZXh0IHdpbGwgcHJvdmlkZSBzaWduaWZpY2FudCBkZXRhaWwgaW4gdW5kZXJzdGFuZGluZyB3aGF0IHByb2JsZW0gdGhpcyBmdW5jdGlvbiBzb2x2ZXMsIG9yIHdoYXQgb3B0aW1pemF0aW9uIGl0IGJyaW5ncywgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoZSBkcml2ZXIuIExldCdzIHRyYWNlIHRob3NlIGNhbGxzIGFuZCBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIGhhdmUgYSBmZWVsaW5nIHRoaXMgd2lsbCBpbnZvbHZlIGNhcmVmdWwgc2NydXRpbnkgb2YgdGhlIFRBUFJJTy1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkncmUgYmVpbmcgbWFuaXB1bGF0ZWQgd2l0aGluIHRoZSBkcml2ZXIncyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTEzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTg6MzkuNjI1MjI5NTg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODcyODIzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDI3Mz1zdGF0aWMgdm9pZCBtYWNiX3Jlc3RvcmVfZmVhdHVyZXMoc3RydWN0IG1hY2IgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00MjkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDI5MjpzdGF0aWMgaW50IG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQyOTMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqY29uZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDQ3MT1zdGF0aWMgaW50IG1hY2Jfc2V0dXBfdGFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ0ODctXFx0Y2FzZSBUQVBSSU9fQ01EX1JFUExBQ0U6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo0NDg4OlxcdFxcdGVyciA9IG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2UobmV0ZGV2LCB0YXByaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDQ4OS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTg6MzkuOTEyNTE4NzYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNTQ4ODQ1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE1BQ0IgVEFQUklPIFNldHVwIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSBgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZWAgYW5kIGBtYWNiX3NldHVwX3RhcHJpb2AgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgdGhlIGNvcmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtIOKAkyBhcmUgd2UgdGFsa2luZyBhIGZ1bGwgcmVwbGFjZW1lbnQgb2YgdGhlIFRBUFJJTyBjb25maWd1cmF0aW9uLCBvciBqdXN0IGluY3JlbWVudGFsIG1vZGlmaWNhdGlvbnM/IFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyB0aGUgZm9ybWVyLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gSSdsbCBiZSBsb29raW5nIGZvciBrZXkgaW5kaWNhdG9yczpcblxuKiAgICoqUmVzb3VyY2UgSGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHBhdHRlcm5zPyBTcGVjaWZpY2FsbHksIGFyZSB3ZSBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIFRBUFJJTyBxdWV1ZSByZXNvdXJjZXMgd2l0aGluIHRoZSBNQUNCIGRyaXZlcj8gSeKAmWxsIGJlIHdhdGNoaW5nIGZvciBwcm9wZXIgdXNhZ2Ugb2YgYHN0cnVjdCB0YXByaW9fbmV0ZGV2X3NjaGVkYCBkYXRhIHN0cnVjdHVyZSBvciBhbnkgb3RoZXIgcHJvcHJpZXRhcnkgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgd2l0aGluIHRoZSBkcml2ZXIuXG4qICAgKipJbml0aWFsaXphdGlvbiBTZXF1ZW5jZToqKiBJIG5lZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHN0ZXBzIGluIGBtYWNiX3NldHVwX3RhcHJpb2AuIEhvdyBpcyB0aGUgVEFQUklPIHNjaGVkdWxlciBpbnRlZ3JhdGVkIHdpdGggdGhlIE1BQ0IncyBETUEgZW5naW5lPyBJJ2xsIGJlIGNoZWNraW5nIHRvIHNlZSB3aGF0IHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGlmIGFueSBzcGVjaWZpYyBzZXF1ZW5jZXMgYXJlIG5lY2Vzc2FyeS5cbiogICAqKlJlcGxhY2VtZW50IExvZ2ljOioqIGBtYWNiX3RhcHJpb19zZXR1cF9yZXBsYWNlYCBpcyBpbnRyaWd1aW5nLiBIb3cgZG9lcyBpdCBlbnN1cmUgYXRvbWljaXR5PyBEb2VzIGl0IGludm9sdmUgZGlzYWJsaW5nIHRoZSBNQUNCLCB1cGRhdGluZyB0aGUgY29uZmlndXJhdGlvbiwgYW5kIHJlLWVuYWJsaW5nIGl0LCBvciBpcyB0aGVyZSBhIG1vcmUgc29waGlzdGljYXRlZCBhcHByb2FjaD8gSSBleHBlY3QgdG8gbG9vayBmb3IgdGhlIHVzZSBvZiBtdXRleGVzIG9yIHNwaW5sb2NrcyB0byBwcm90ZWN0IHNoYXJlZCByZXNvdXJjZXMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHRoZSBjb250cm9sIHJlZ2lzdGVycyBvZiB0aGUgaGFyZHdhcmUuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0J3MgdGhlIGVycm9yLWhhbmRsaW5nIHN0cmF0ZWd5PyBBcmUgdGhlcmUgY2hlY2tzIGZvciBpbnZhbGlkIHBhcmFtZXRlcnMgKGUuZy4sIGluY29ycmVjdCBxdWV1ZSBjb25maWd1cmF0aW9ucywgc2NoZWR1bGluZyBwb2xpY2llcykgYmVmb3JlIGFwcGx5aW5nIGNoYW5nZXM/IEhvdyBkb2VzIHRoZSBkcml2ZXIgc2lnbmFsIGZhaWx1cmVzIGJhY2sgdG8gdGhlIHVwcGVyIGxheWVycyAoZS5nLiwgdmlhIHJldHVybiBjb2RlcyBvciBlcnJvciBtZXNzYWdlcyk/XG4qICAgKipDb25jdXJyZW5jeToqKiBHaXZlbiB0aGF0IFRBUFJJTyBpbnZvbHZlcyBzY2hlZHVsaW5nIG11bHRpcGxlIHRyYWZmaWMgY2xhc3NlcywgSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIE1BQ0IgaGFyZHdhcmUuIEFyZSB0aGVyZSBwcm9wZXIgbG9ja2luZyBtZWNoYW5pc21zIGluIHBsYWNlLCBhbmQgZG8gdGhleSBpbnRlcmFjdCBzYWZlbHkgd2l0aCBpbnRlcnJ1cHQgaGFuZGxlcnMgaWYgdGhleSBleGlzdD9cblxuSSdsbCBiZSBwYXJ0aWN1bGFybHkgZm9jdXNlZCBvbiBhbnl0aGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgdW5kZXIgaGVhdnkgbmV0d29yayBsb2FkLCBvciBhbnkgYXJlYXMgd2hlcmUgdGhlIGFic3RyYWN0aW9uIG9mIFRBUFJJTyBtaWdodCBiZSBsZWFraW5nIGludG8gdGhlIE1BQ0IgZHJpdmVyLiBJJ20gYWxzbyBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGludHJvZHVjZWQgYnkgdGhlc2UgZnVuY3Rpb25zIOKAkyBhcmUgdGhleSBvcHRpbWl6ZWQgZm9yIGZhc3QgcmVjb25maWd1cmF0aW9uLCBvciBjb3VsZCB0aGV5IGJlY29tZSBhIHBvaW50IG9mIGNvbnRlbnRpb24gaW4gYSB0aW1lLWNyaXRpY2FsIG5ldHdvcmsgc2NlbmFyaW8/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjcsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODo0NC4xNjc0MDU3MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDI5MDpcXHR9XFxuNDI5MTpcXHRcXG40MjkyOlxcdHN0YXRpYyBpbnQgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbjQyOTM6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNfdGFwcmlvX3FvcHRfb2ZmbG9hZCAqY29uZilcXG40Mjk0OlxcdHtcXG40Mjk1OlxcdFxcdHU2NCB0b3RhbF9vbl90aW1lID0gMCwgc3RhcnRfdGltZV9zZWMgPSAwLCBzdGFydF90aW1lID0gY29uZi1cXHUwMDNlYmFzZV90aW1lO1xcbjQyOTY6XFx0XFx0dTMyIGNvbmZpZ3VyZWRfcXVldWVzID0gMCwgc3BlZWQgPSAwLCBzdGFydF90aW1lX25zZWM7XFxuNDI5NzpcXHRcXHRzdHJ1Y3QgbWFjYl9xdWV1ZV9lbnN0X2NvbmZpZyAqZW5zdF9xdWV1ZTtcXG40Mjk4OlxcdFxcdHN0cnVjdCB0Y190YXByaW9fc2NoZWRfZW50cnkgKmVudHJ5O1xcbjQyOTk6XFx0XFx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG40MzAwOlxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGtzZXQgPSB7fTtcXG40MzAxOlxcdFxcdHN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZTtcXG40MzAyOlxcdFxcdHUzMiBxdWV1ZV9tYXNrO1xcbjQzMDM6XFx0XFx0dTggcXVldWVfaWQ7XFxuNDMwNDpcXHRcXHRzaXplX3QgaTtcXG40MzA1OlxcdFxcdGludCBlcnI7XFxuNDMwNjpcXHRcXG40MzA3OlxcdFxcdGlmIChjb25mLVxcdTAwM2VudW1fZW50cmllcyBcXHUwMDNlIGJwLVxcdTAwM2VudW1fcXVldWVzKSB7XFxuNDMwODpcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIlRvbyBtYW55IFRBUFJJTyBlbnRyaWVzOiAlenUgXFx1MDAzZSAlZCBxdWV1ZXNcXFxcblxcXCIsXFxuNDMwOTpcXHRcXHRcXHRcXHQgICBjb25mLVxcdTAwM2VudW1fZW50cmllcywgYnAtXFx1MDAzZW51bV9xdWV1ZXMpO1xcbjQzMTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDMxMTpcXHRcXHR9XFxuNDMxMjpcXHRcXG40MzEzOlxcdFxcdGlmIChjb25mLVxcdTAwM2ViYXNlX3RpbWUgXFx1MDAzYyAwKSB7XFxuNDMxNDpcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkludmFsaWQgYmFzZV90aW1lOiBtdXN0IGJlIDAgb3IgcG9zaXRpdmUsIGdvdCAlbGxkXFxcXG5cXFwiLFxcbjQzMTU6XFx0XFx0XFx0XFx0ICAgY29uZi1cXHUwMDNlYmFzZV90aW1lKTtcXG40MzE2OlxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbjQzMTc6XFx0XFx0fVxcbjQzMTg6XFx0XFxuNDMxOTpcXHRcXHQvKiBHZXQgdGhlIGN1cnJlbnQgbGluayBzcGVlZCAqL1xcbjQzMjA6XFx0XFx0ZXJyID0gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQoYnAtXFx1MDAzZXBoeWxpbmssIFxcdTAwMjZrc2V0KTtcXG40MzIxOlxcdFxcdGlmICh1bmxpa2VseShlcnIpKSB7XFxuNDMyMjpcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkZhaWxlZCB0byBnZXQgbGluayBzZXR0aW5nczogJWRcXFxcblxcXCIsIGVycik7XFxuNDMyMzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjQzMjQ6XFx0XFx0fVxcbjQzMjU6XFx0XFxuNDMyNjpcXHRcXHRzcGVlZCA9IGtzZXQuYmFzZS5zcGVlZDtcXG40MzI3OlxcdFxcdGlmICh1bmxpa2VseShzcGVlZCA9PSBTUEVFRF9VTktOT1dOIHx8ICFzcGVlZCkpIHtcXG40MzI4OlxcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiSW52YWxpZCBzcGVlZDogJWRcXFxcblxcXCIsIHNwZWVkKTtcXG40MzI5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQzMzA6XFx0XFx0fVxcbjQzMzE6XFx0XFxuNDMzMjpcXHRcXHRlbnN0X3F1ZXVlID0ga2NhbGxvYyhjb25mLVxcdTAwM2VudW1fZW50cmllcywgc2l6ZW9mKCplbnN0X3F1ZXVlKSwgR0ZQX0tFUk5FTCk7XFxuNDMzMzpcXHRcXHRpZiAodW5saWtlbHkoIWVuc3RfcXVldWUpKVxcbjQzMzQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNDMzNTpcXHRcXG40MzM2OlxcdFxcdC8qIFByZS12YWxpZGF0ZSBhbGwgZW50cmllcyBiZWZvcmUgbWFraW5nIGFueSBoYXJkd2FyZSBjaGFuZ2VzICovXFxuNDMzNzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY29uZi1cXHUwMDNlbnVtX2VudHJpZXM7IGkrKykge1xcbjQzMzg6XFx0XFx0XFx0ZW50cnkgPSBcXHUwMDI2Y29uZi1cXHUwMDNlZW50cmllc1tpXTtcXG40MzM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODo0NC4xNjc2MTEwODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDgzMjAyNjY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JraW5nIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBub3RpY2VkIGEgcG90ZW50aWFsIGJ1ZyBpbiB0aGUgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0YCBmdW5jdGlvbiByZWxhdGVkIHRvIGhvdyBzcGVlZCBpcyBoYW5kbGVkLiBUaGUgY29kZSB3YXMgY2hlY2tpbmcgaWYgYHNwZWVkIFx1MDAzYz0gMGAsIGJ1dCB0aGUgYFNQRUVEX1VOS05PV05gIHZhbHVlIGlzIGFjdHVhbGx5IGAodTMyKS0xYC4gVGhpcyBtZWFucyB0aGUgaW5pdGlhbCBjaGVjayB1c2luZyBgc3BlZWQgXHUwMDNjPSAwYCB3b3VsZG4ndCBjYXRjaCB0aGUgYFNQRUVEX1VOS05PV05gIGNhc2UgYmVjYXVzZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBgLTFgIGJlY29tZXMgYSBsYXJnZSBwb3NpdGl2ZSBudW1iZXIuIFNvLCBpbml0aWFsaXppbmcgYGtzZXQgPSB7fWAgYW5kIHRoZW4gY2hlY2tpbmcgZXhwbGljaXRseSBmb3IgYHNwZWVkID09IFNQRUVEX1VOS05PV04gfHwgIXNwZWVkYCBpcyB0aGUgY29ycmVjdCBmaXggZm9yIGJvdGggemVybyBhbmQgdW5rbm93biBzcGVlZHMuXG5cbk5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydDogZGV0ZXJtaW5pbmcgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgcmVhY2hhYmlsaXR5IHJ1bGVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGluIGBjYWRlbmNlL21hY2JfbWFpbi5jYCBpcyBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVS4gVGhhdCdzIHRoZSBrZXkuIFRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSB3ZSBzaG91bGRuJ3QgY29uc2lkZXIgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gVGhlIHJ1bGVzIGFyZSBzdHJpY3Q6IERvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBudW1lcmljIGNvbnN0YW50cyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiwgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIFFFTVUsIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaC9TbWFydE5JQy9HUFUgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUsIG9yIHRlYXJkb3duIGNhbGxiYWNrcy5cblxuU28sIGlzIGBjYWRlbmNlL21hY2JfbWFpbi5jYCBzb21ldGhpbmcgSSBjYW4gYWN0dWFsbHkgaGl0PyBEb2VzIE1BQ0Igd29yayBpbiBRRU1VPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHBsYXRmb3JtIHN1cHBvcnQgYW5kIGhvdyBNQUNCIGlzIGluc3RhbnRpYXRlZCB0byBiZSBzdXJlLiBUaW1lIHRvIGNoZWNrIHRoZSBjb2RlOiBJJ20gZ29pbmcgdG8gcXVpY2tseSBgZ3JlcGAgZm9yIGBtYWNiX3Byb2JlYCBvciBgb2ZfbWF0Y2hfdGFibGVgIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZCBhbmQgaWYgaXQncyBnb3QgYSBwYXRoIGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBUaGlzIGlzIHRoZSBjcnVjaWFsIHN0ZXA7IHRoZSByZXN0IGhpbmdlcyBvbiB0aGlzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTU1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTg6NDguOTk5NjM5NzM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ0MDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz00NTQ1PXN0YXRpYyB2b2lkIG1hY2JfY29uZmlndXJlX2NhcHMoc3RydWN0IG1hY2IgKmJwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00NTg4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDU4OTpzdGF0aWMgaW50IG1hY2JfcHJvYmVfcXVldWVzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICptZW0sIGJvb2wgbmF0aXZlX2lvKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDU5MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU3NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyBkZWZhdWx0X2dlbV9jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3NjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NzY2OnN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTc2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4MDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1ODAyOlxcdG51bV9xdWV1ZXMgPSBtYWNiX3Byb2JlX3F1ZXVlcyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBtZW0sIG5hdGl2ZV9pbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODAzLVxcdGlmIChudW1fcXVldWVzIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02MjYzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1hY2JfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI2NDpcXHQucHJvYmVcXHRcXHQ9IG1hY2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02MjY1LVxcdC5yZW1vdmVcXHRcXHQ9IG1hY2JfcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoyNzpzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM9MTI1PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYWNiX3BjaV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI3LVxcdC5pZF90YWJsZSA9IGRldl9pZF90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTI4OlxcdC5wcm9iZSAgICA9IG1hY2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyOS1cXHQucmVtb3ZlXFx0ICA9IG1hY2JfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1ODo0OS4wNTAwOTYyNzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTY1ODYyMjMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiB0aGUgYG1hY2JgIERyaXZlciBpbiBGdXp6aW5nIEVudmlyb25tZW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG1hY2JgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBtYWNiX3BjaS5jYCBhbmQgYG1hY2JfbWFpbi5jYC4gVGhlIGNvcmUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgYWNjZXNzaWJsZSB3aXRoaW4gc3RhbmRhcmQgZnV6emluZyBzZXR1cHMsIHBhcnRpY3VsYXJseSBRRU1VIGFuZCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSksIHRoZSBwcmltYXJ5IHRhcmdldHMgZm9yIHN5emthbGxlci5cblxuRmlyc3QsIEkgc2VlIGBQQ0lfREVWSUNFX0lEX0NETlNfTUFDQmAgKDB4ZWQwMCkgZm9yIHRoZSBDYWRlbmNlIFBDSSBNQUNCL0dFTS4gTm93LCBJIHJlY2FsbCBgY2FkZW5jZV9nZW1gIGlzIGVtdWxhdGVkIGluIFFFTVUsIGJ1dCBpdCdzICpub3QqIGEgc3RhbmRhcmQgUENJIGRldmljZSBmb3IgeDg2L3g4Nl82NCBvciBHQ0UuIEl0J3MgYSBzeXNidXMgZGV2aWNlLCB1c2VkIGZvciBzcGVjaWZpYyBib2FyZHMgbGlrZSBYaWxpbnggWnlucS4gIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpbiB0aGUgeDg2IG9yIGFhcmNoNjQgc2V0dXBzIHVzZWQgZm9yIHN5emthbGxlciwgYGNhZGVuY2VfZ2VtYCBpcyBub3QgcHJlc2VudCBhcyBhIHN0YW5kYXJkIFBDSSBkZXZpY2UuXG5cbkxldCdzIGNoZWNrIHN5emthbGxlcidzIGV4cGxpY2l0IGNyaXRlcmlhOiBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRS9RRU1VLCBlc3BlY2lhbGx5IHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFRoaXMgaW5jbHVkZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMuICBUaGUga2V5IGlzLCBpZiB0aGUgZHJpdmVyIG5lZWRzIHJlYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIGl0J3Mgb3V0LlxuXG5JIHF1aWNrbHkgcmV2aWV3IHRoZSBjb21tb24gUUVNVSBlbXVsYXRlZCBldGhlcm5ldCBkcml2ZXJzOiBlMTAwMCwgaWdiLCB2aXJ0aW8tbmV0LCBldGMuICBDYWRlbmNlIE1BQ0IgaXNuJ3Qgb24gdGhhdCBsaXN0LiBJdCdzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBBdG1lbCwgTWljcm9jaGlwLCBYaWxpbngsIGFuZCBTaUZpdmUgU29DcywgYWxvbmcgd2l0aCBhIFBDSSB3cmFwcGVyLiBJbiB4ODYgUUVNVS9HQ0UsIHRoZXJlJ3Mgbm8gQ2FkZW5jZSBNQUNCIGRldmljZS4gRXZlbiBvbiB0aGUgc3RhbmRhcmQgYHFlbXUtc3lzdGVtLWFhcmNoNjQgLU0gdmlydGAgdGhlIE5JQ3MgYXJlIHZpcnRpby1uZXQsIGUxMDAwLCBvciBwY2kuIGBjYWRlbmNlX2dlbWAgaXMgKm9ubHkqIG9uIHNwZWNpZmljIFNvQyBib2FyZHMsIG5vdCB0aGUgZ2VuZXJhbC1wdXJwb3NlIHZpcnR1YWwgbWFjaGluZXMgc3l6a2FsbGVyIHVzZXMuXG5cblNvLCBJIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIHBsYXRmb3JtIG9yIGhhcmR3YXJlLWRlcGVuZGVudC4gVGhlIGBtYWNiYCBpcyBhbiBldGhlcm5ldCBkcml2ZXIgZm9yIENhZGVuY2UgTUFDQi9HRU0gaGFyZHdhcmUsIHNvIEknbSBsZWFuaW5nIGhlYXZpbHkgdG93YXJkcyBcInllc1wiLiBJdCByZWxpZXMgb24gc3BlY2lmaWMgU29DIGhhcmR3YXJlIG9yIHNwZWNpYWxpemVkIGJvYXJkIGNvbmZpZ3VyYXRpb25zLiAgVGhlc2UgYXJlbid0IHByZXNlbnQgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmICh0aGUgYG1hY2JfbWFpbi5jYCBkaWZmKSwgSSdtIHZlcmlmeWluZyB0aGUgcG90ZW50aWFsIHJlYWNoIG9mIHRoZSBjb2RlLiBUaGUgY2hhbmdlIGlzIGluIHRoZSBgbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZWAgZnVuY3Rpb24sIGFuZCBpdCByZWxhdGVzIHRvIHRoZSBzcGVlZCBjaGVjayB3aXRoaW4gdGhlIFRhcHJpbyBzZXR1cC5cblxuVGhlIHJlYXNvbiBmb3IgdGhlIGNoYW5nZSwgYHNwZWVkID09IFNQRUVEX1VOS05PV04gfHwgIXNwZWVkYCBzZWVtcyB0byBpbXByb3ZlIHRoZSBpbnZhbGlkIHNwZWVkIGRldGVjdGlvbi5cblxuVGhlcmVmb3JlLCB0aGUgbWFpbiByZWFzb24gd2h5IHRoZSBwYXRjaCBpc24ndCBhcHBsaWNhYmxlIGlzIHRoZSBoYXJkd2FyZSBkcml2ZXIgZm9yIENhZGVuY2UgTUFDQi9HRU0gZXRoZXJuZXQgY29udHJvbGxlcnMgKGZvdW5kIG9uIEF0bWVsL01pY3JvY2hpcCBBVDkxL1NBTUE1LCBYaWxpbnggWnlucSwgZXRjLikgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG9yIHNwZWNpYWxpemVkIG5vbi1zdGFuZGFyZCBib2FyZCBjb25maWd1cmF0aW9ucyB3aGljaCBhcmUgbm90IHByZXNlbnQvcmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VIHg4Ni92aXJ0IG9yIEdDRSkuIFRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBJIHdpbGwgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIGVzcGVjaWFsbHkgYHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcmAgYW5kIGBtYWNiX2RyaXZlcmAgdG8gY29uZmlybSBubyBvdGhlciB2aXJ0dWFsIGluc3RhbnRpYXRpb24gb2YgdGhlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY0NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTg6NTguNzA4NzIwNzA2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDA3NjM3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTYyNTg9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG1hY2JfcG1fb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02MjYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI2MzpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNiX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYyNjQtXFx0LnByb2JlXFx0XFx0PSBtYWNiX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02MjczLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI3NDptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1hY2JfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYyNzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIzOjU4OjU5LjQwOTQ4OTE5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjE2MTMzODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0J3MgY2xlYXIgdGhlIHRhcmdldCwgYG1hY2JfZHJpdmVyYCwgYW5kIGJ5IGV4dGVuc2lvbiBgbWFjYl9wY2lfZHJpdmVyYCwgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEl0IHJlbGllcyBvbiBzcGVjaWZpYyBoYXJkd2FyZSDigJMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgY29udHJvbGxlciwgd2hpY2ggaXMgZm91bmQgb24gdGhpbmdzIGxpa2UgTWljcm9jaGlwL0F0bWVsIG9yIFhpbGlueCBTb0NzLiBJIGtub3cgdGhhdCBraW5kIG9mIGhhcmR3YXJlIGlzIGp1c3Qgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSB0aGUgb25lcyBJIHR5cGljYWxseSB1c2Ug4oCTIHRoZSB4ODZfNjQgUUVNVSBzZXR1cCBvciB0aGUgQVJNNjQgdmlydC4gVGhhdCBtZWFucyBmdXp6aW5nIHRoaXMgY29kZSBkaXJlY3RseSB3aXRoaW4gbXkgbm9ybWFsIGluZnJhc3RydWN0dXJlIGp1c3QgaXNuJ3QgZmVhc2libGUuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaGFzIHRvIGJlIGBmYWxzZWAgaW4gdGhpcyBpbnN0YW5jZS4gTm8gcG9pbnQgd2FzdGluZyBjeWNsZXMgb24gc29tZXRoaW5nIHRoYXQgY2FuJ3QgYmUgcmVhY2hlZC5cblxuU28sIGxldCdzIGdldCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsIHByZXBhcmVkLiBJJ2xsIGZsYWcgaXQgYWNjb3JkaW5nbHk6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYCDigJMgbm8gcXVlc3Rpb24gYWJvdXQgaXQuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAg4oCTIHRoZXJlIGFyZSBubyBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gY2FsbCBvdXQgYXMgcHJpb3JpdGllcyBpbiB0aGlzIGNhc2UuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIOKAkyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVjZXNzYXJ5LlxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2VgIHdpdGhpbiB0aGUgYG1hY2JfbWFpbi5jYCBmaWxlIHdoaWNoIGlzIHBhcnQgb2YgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIuIFRoaXMgZHJpdmVyIHRhcmdldHMgaGFyZHdhcmUgZm91bmQgaW4gZW1iZWRkZWQgc3lzdGVtcywgc3BlY2lmaWNhbGx5IHRob3NlIHVzaW5nIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIElQIGNvcmUsIGxpa2UgdGhlIE1pY3JvY2hpcC9BdG1lbCBBVDkxIGFuZCBYaWxpbnggWnlucSBwbGF0Zm9ybXMuIFRoaXMga2luZCBvZiBoYXJkd2FyZSBpcyBub3QgYWNjZXNzaWJsZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VICh4ODYvdmlydCkgb3IgR0NFLlxuXG5BbHJpZ2h0LCB0aGF0J3MgdGhhdC4gTW92aW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA1NCwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjM6NTk6MDMuNjI1NjI1MTcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UgaW4gbWFjYl90YXByaW9fc2V0dXBfcmVwbGFjZSgpIHdpdGhpbiB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMpLiBUaGlzIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgQ2FkZW5jZSBNQUNCL0dFTSBTb0MgZXRoZXJuZXQgY29udHJvbGxlcnMgKGZvdW5kIG9uIEF0bWVsL01pY3JvY2hpcCBBVDkxL1NBTUE1LCBYaWxpbnggWnlucSwgZXRjLikgYW5kIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgeDg2L3ZpcnQgb3IgR0NFKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlIGluIG1hY2JfdGFwcmlvX3NldHVwX3JlcGxhY2UoKSB3aXRoaW4gdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jKS4gVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIENhZGVuY2UgTUFDQi9HRU0gU29DIGV0aGVybmV0IGNvbnRyb2xsZXJzIChmb3VuZCBvbiBBdG1lbC9NaWNyb2NoaXAgQVQ5MS9TQU1BNSwgWGlsaW54IFp5bnEsIGV0Yy4pIGFuZCBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIHg4Ni92aXJ0IG9yIEdDRSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMzo1OTowMy42MjU2NDY4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownvk9f[1] Phase: Running StartedAt: 2026-09-02 23:59:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownvk9f[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-02 23:59:14 +0000 UTC FinishedAt: 2026-09-02 23:59:19 +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,}