Name: series-workflowdnqwk Phase: Failed StartedAt: 2026-09-07 06:06:52 +0000 UTC FinishedAt: 2026-09-07 06:36:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnqwk[0] Phase: Succeeded StartedAt: 2026-09-07 06:06:52 +0000 UTC FinishedAt: 2026-09-07 06:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnqwk[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 06:06:52 +0000 UTC FinishedAt: 2026-09-07 06:36:31 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIC8gQU44ODExSEIgRXRoZXJuZXQgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMpIHRvIGhhbmRsZSBwYWNrYWdlIHZhcmlhbnQgZGV0ZWN0aW9uIGFuZCBMRUQgR1BJTyBjb25maWd1cmF0aW9uLiBUaGlzIGNvZGUgcmVxdWlyZXMgZGVkaWNhdGVkIHBoeXNpY2FsIEFpcm9oYSBQSFkgaGFyZHdhcmUgb24gYW4gTURJTyBidXMgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIGl0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYWI2MTI3Y2NlZjlkZTFlNjNlNzM3MDFhNjdjZDZmY2I3NmJlNTlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNjozNToyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG5pbmRleCAzOGViMThmMGU5YmI0Li5hZTI0YzQxZjUzOGFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG5AQCAtMTQ1LDEwICYjNDM7MTQ1LDIyIEBAXG4gXG4gI2RlZmluZSBBTjg4MTFIQl9HUElPX09VVFBVVFx0XHQweDVjZjhiOFxuICNkZWZpbmUgICBBTjg4MTFIQl9HUElPX09VVFBVVF8zNDVcdFx0KEJJVCgzKSB8IEJJVCg0KSB8IEJJVCg1KSlcbiYjNDM7I2RlZmluZSAgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzAxMTVcdFx0KEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgxNSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFOODgxMUhCX0dQSU9fU0VMMVx0XHQweDVjZjhiY1xuJiM0MzsjZGVmaW5lICAgQU44ODExSEJfR1BJT19TRUwxXzBfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMV9NQVNLXHRcdEdFTk1BU0soNywgNClcbiYjNDM7I2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMV8wXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMVx0XHRcdDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQU44ODExSEJfR1BJT19TRUwyXHRcdDB4NWNmOGMwXG4mIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDJfMTVfTUFTS1x0XHRHRU5NQVNLKDMxLCAyOClcbiYjNDM7I2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMl8xNVx0XHRcdEJJVCgyOSlcbiBcbiAjZGVmaW5lIEFOODgxMUhCX0hXVFJBUDFcdFx0MHg1Y2Y5MTBcbiAjZGVmaW5lIEFOODgxMUhCX0hXVFJBUDJcdFx0MHg1Y2Y5MTRcbiAjZGVmaW5lICAgQU44ODExSEJfSFdUUkFQMl9DS09cdFx0XHRCSVQoMjgpXG4mIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9IV1RSQVAyX1BLR1x0XHRcdEdFTk1BU0soMTQsIDEyKVxuIFxuICNkZWZpbmUgQU44ODExSEJfQ0xLX0RSVlx0XHQweDVjZjllNFxuICNkZWZpbmUgQU44ODExSEJfQ0xLX0RSVl9DS09fTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbkBAIC0yMDIsNiAmIzQzOzIxNCw3IEBAIHN0cnVjdCBlbjg4MTFoX3ByaXYge1xuIFx0c3RydWN0IHBoeV9kZXZpY2VcdCpwaHlkZXY7XG4gXHR1bnNpZ25lZCBpbnRcdFx0Y2tvX2lzX2VuYWJsZWQ7XG4gXHRzdHJ1Y3QgbWRpb19kZXZpY2VcdCpwYnVzZGV2O1xuJiM0MztcdGJvb2xcdFx0XHRpc19hbjg4MTFoYmNuO1xuIH07XG4gXG4gZW51bSB7XG5AQCAtMTA3MSwxMCAmIzQzOzEwODQsNDkgQEAgc3RhdGljIGludCBlbjg4MTFoX2xlZHNfc2V0dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGFuODgxMWhiX2xlZF9ncGlvX3NldHVwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYW44ODExaGJjbikge1xuJiM0MztcdFx0LyogQU44ODExSEJDTjogTEVEIEdQSU9zIGFyZSAwLCAxLCAxNSAqL1xuJiM0MztcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19PVVRQVVQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMDExNSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBBTjg4MTFIQl9HUElPX09VVFBVVF8wMTE1KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19TRUwxLFxuJiM0MztcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMV8wX01BU0sgfFxuJiM0MztcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMV8xX01BU0ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19TRUwxXzAgfFxuJiM0MztcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMV8xKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19TRUwyLFxuJiM0MztcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMl8xNV9NQVNLLFxuJiM0MztcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMl8xNSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBBTjg4MTFIQk46IExFRCBHUElPcyBhcmUgMywgNCwgNSAqL1xuJiM0MztcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19PVVRQVVQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1LFxuJiM0MztcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhbjg4MTFoYl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbiBcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXY7XG4mIzQzO1x0dTMyIHJlZ192YWw7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcbkBAIC0xMTE1LDYgJiM0MzsxMTY3LDEyIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cbiBcdHBoeWRldi1cdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xuIFxuJiM0MztcdC8qIERldGVjdCBwYWNrYWdlIHZhcmlhbnQgKi9cbiYjNDM7XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgQU44ODExSEJfSFdUUkFQMiwgXHUwMDI2cmVnX3ZhbCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rldl9jcmVhdGU7XG4mIzQzO1x0cHJpdi1cdTAwM2Vpc19hbjg4MTFoYmNuID0gRklFTERfR0VUKEFOODgxMUhCX0hXVFJBUDJfUEtHLCByZWdfdmFsKTtcbiYjNDM7XG4gXHRyZXQgPSBlbjg4MTFoX2xlZHNfc2V0dXAocGh5ZGV2KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX2Rldl9jcmVhdGU7XG5AQCAtMTI2MywxMCAmIzQzOzEzMjEsMTEgQEAgc3RhdGljIGludCBhbjg4MTFoYl9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0LyogUmVzdG9yZSBMRUQgR1BJTyBvdXRwdXQgZW5hYmxlcyBhZnRlciBNQ1UgaW5pdGlhbGl6YXRpb24uICovXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX09VVFBVVCxcbi1cdFx0XHRcdFx0ICBBTjg4MTFIQl9HUElPX09VVFBVVF8zNDUsXG4tXHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1KTtcbiYjNDM7XHRyZXQgPSBhbjg4MTFoYl9sZWRfZ3Bpb19zZXR1cChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0IHVwIExFRCBHUElPOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIC8gQU44ODExSEIgRXRoZXJuZXQgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMpIHRvIGhhbmRsZSBwYWNrYWdlIHZhcmlhbnQgZGV0ZWN0aW9uIGFuZCBMRUQgR1BJTyBjb25maWd1cmF0aW9uLiBUaGlzIGNvZGUgcmVxdWlyZXMgZGVkaWNhdGVkIHBoeXNpY2FsIEFpcm9oYSBQSFkgaGFyZHdhcmUgb24gYW4gTURJTyBidXMgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIGl0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYWI2MTI3Y2NlZjlkZTFlNjNlNzM3MDFhNjdjZDZmY2I3NmJlNTlkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwNjozNToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKaW5kZXggMzhlYjE4ZjBlOWJiNC4uYWUyNGM0MWY1MzhhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKQEAgLTE0NSwxMCAmIzQzOzE0NSwyMiBAQAogCiAjZGVmaW5lIEFOODgxMUhCX0dQSU9fT1VUUFVUCQkweDVjZjhiOAogI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NQkJKEJJVCgzKSB8IEJJVCg0KSB8IEJJVCg1KSkKJiM0MzsjZGVmaW5lICAgQU44ODExSEJfR1BJT19PVVRQVVRfMDExNQkJKEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgxNSkpCiYjNDM7CiYjNDM7I2RlZmluZSBBTjg4MTFIQl9HUElPX1NFTDEJCTB4NWNmOGJjCiYjNDM7I2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMV8wX01BU0sJCUdFTk1BU0soMywgMCkKJiM0MzsjZGVmaW5lICAgQU44ODExSEJfR1BJT19TRUwxXzFfTUFTSwkJR0VOTUFTSyg3LCA0KQomIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMAkJCUJJVCgwKQomIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMQkJCTAKJiM0MzsKJiM0MzsjZGVmaW5lIEFOODgxMUhCX0dQSU9fU0VMMgkJMHg1Y2Y4YzAKJiM0MzsjZGVmaW5lICAgQU44ODExSEJfR1BJT19TRUwyXzE1X01BU0sJCUdFTk1BU0soMzEsIDI4KQomIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDJfMTUJCQlCSVQoMjkpCiAKICNkZWZpbmUgQU44ODExSEJfSFdUUkFQMQkJMHg1Y2Y5MTAKICNkZWZpbmUgQU44ODExSEJfSFdUUkFQMgkJMHg1Y2Y5MTQKICNkZWZpbmUgICBBTjg4MTFIQl9IV1RSQVAyX0NLTwkJCUJJVCgyOCkKJiM0MzsjZGVmaW5lICAgQU44ODExSEJfSFdUUkFQMl9QS0cJCQlHRU5NQVNLKDE0LCAxMikKIAogI2RlZmluZSBBTjg4MTFIQl9DTEtfRFJWCQkweDVjZjllNAogI2RlZmluZSBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLCQlHRU5NQVNLKDE0LCAxMikKQEAgLTIwMiw2ICYjNDM7MjE0LDcgQEAgc3RydWN0IGVuODgxMWhfcHJpdiB7CiAJc3RydWN0IHBoeV9kZXZpY2UJKnBoeWRldjsKIAl1bnNpZ25lZCBpbnQJCWNrb19pc19lbmFibGVkOwogCXN0cnVjdCBtZGlvX2RldmljZQkqcGJ1c2RldjsKJiM0MzsJYm9vbAkJCWlzX2FuODgxMWhiY247CiB9OwogCiBlbnVtIHsKQEAgLTEwNzEsMTAgJiM0MzsxMDg0LDQ5IEBAIHN0YXRpYyBpbnQgZW44ODExaF9sZWRzX3NldHVwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYW44ODExaGJfbGVkX2dwaW9fc2V0dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpc19hbjg4MTFoYmNuKSB7CiYjNDM7CQkvKiBBTjg4MTFIQkNOOiBMRUQgR1BJT3MgYXJlIDAsIDEsIDE1ICovCiYjNDM7CQlyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX09VVFBVVCwKJiM0MzsJCQkJCQkgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzAxMTUsCiYjNDM7CQkJCQkJICBBTjg4MTFIQl9HUElPX09VVFBVVF8wMTE1KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX1NFTDEsCiYjNDM7CQkJCQkJICBBTjg4MTFIQl9HUElPX1NFTDFfMF9NQVNLIHwKJiM0MzsJCQkJCQkgIEFOODgxMUhCX0dQSU9fU0VMMV8xX01BU0ssCiYjNDM7CQkJCQkJICBBTjg4MTFIQl9HUElPX1NFTDFfMCB8CiYjNDM7CQkJCQkJICBBTjg4MTFIQl9HUElPX1NFTDFfMSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19TRUwyLAomIzQzOwkJCQkJCSAgQU44ODExSEJfR1BJT19TRUwyXzE1X01BU0ssCiYjNDM7CQkJCQkJICBBTjg4MTFIQl9HUElPX1NFTDJfMTUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEFOODgxMUhCTjogTEVEIEdQSU9zIGFyZSAzLCA0LCA1ICovCiYjNDM7CQlyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX09VVFBVVCwKJiM0MzsJCQkJCQkgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSwKJiM0MzsJCQkJCQkgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7CiAJc3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdjsKJiM0MzsJdTMyIHJlZ192YWw7CiAJaW50IHJldDsKIAogCXByaXYgPSBkZXZtX2t6YWxsb2MoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LCBzaXplb2Yoc3RydWN0IGVuODgxMWhfcHJpdiksCkBAIC0xMTE1LDYgJiM0MzsxMTY3LDEyIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAkvKiBNRElPX0RFVlMxLzIgZW1wdHksIHNvIHNldCBtbWRzX3ByZXNlbnQgYml0cyBoZXJlICovCiAJcGh5ZGV2LSZndDtjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOOwogCiYjNDM7CS8qIERldGVjdCBwYWNrYWdlIHZhcmlhbnQgKi8KJiM0MzsJcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIEFOODgxMUhCX0hXVFJBUDIsICZhbXA7cmVnX3ZhbCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfZGV2X2NyZWF0ZTsKJiM0MzsJcHJpdi0mZ3Q7aXNfYW44ODExaGJjbiA9IEZJRUxEX0dFVChBTjg4MTFIQl9IV1RSQVAyX1BLRywgcmVnX3ZhbCk7CiYjNDM7CiAJcmV0ID0gZW44ODExaF9sZWRzX3NldHVwKHBoeWRldik7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyX2Rldl9jcmVhdGU7CkBAIC0xMjYzLDEwICYjNDM7MTMyMSwxMSBAQCBzdGF0aWMgaW50IGFuODgxMWhiX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJCXJldHVybiByZXQ7CiAJfQogCi0JLyogUmVzdG9yZSBMRUQgR1BJTyBvdXRwdXQgZW5hYmxlcyBhZnRlciBNQ1UgaW5pdGlhbGl6YXRpb24uICovCi0JcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19PVVRQVVQsCi0JCQkJCSAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1LAotCQkJCQkgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSk7CiYjNDM7CXJldCA9IGFuODgxMWhiX2xlZF9ncGlvX3NldHVwKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtGYWlsZWQgdG8gc2V0IHVwIExFRCBHUElPOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAJcmV0dXJuIHJldDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDU4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgZGVjaWRlIGlmIGl0JiMzOTtzIHdvcnRoIG91ciB0aW1lIHRvIHRocm93IGl0IGludG8gdGhlIHN5emthbGxlciBmdXp6aW5nIGdyaW5kZXIuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LgoKUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgLiBIbW0sIGFuIEV0aGVybmV0IFBIWSBkcml2ZXIg4oCTIHRoZSBBaXJvaGEgRU44ODExSC9BTjg4MTFIQiBHaWdhYml0IEV0aGVybmV0IFBIWSBkcml2ZXIsIHRvIGJlIHByZWNpc2UuIFRoYXQgZ2l2ZXMgbWUgYSBnZW5lcmFsIGlkZWEuCgpOb3csIHRvIHJlYWxseSBkZXRlcm1pbmUgaXRzIGZ1enppbmcgdmFsdWUsIEkgbmVlZCB0byBjaGVjayBpdHMgcmVhY2hhYmlsaXR5IHdpdGhpbiB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIEtjb25maWcsIHRoZSBkcml2ZXImIzM5O3MgZGVwZW5kZW5jaWVzLCBhbmQgaWYgaXQmIzM5O3Mgb24gdGhlIE1ESU8gYnVzLCBhbGwgaGF2ZSBhIGJlYXJpbmcgb24gdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGFuZCBrZXJuZWwgY29uZmlndXJhdGlvbiB0byBzZWUgaWYgd2UgY2FuIGdldCB0byBpdCBpbiBRRU1VIG9yIEdDRS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZXZlbiBjb21waWxlZCBhbmQgbGlua2VkLgoKVGltZSB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIG9yIGxvb2sgYXQgZXhpc3Rpbmcgc3l6a2FsbGVyIGNvbmZpZ3MsIHRvIHNlZSB3aGVyZSBgYWlyX2VuODgxMWguY2Agb3IsIG1vcmUgYnJvYWRseSwgRXRoZXJuZXQgUEhZIGRyaXZlcnMsIGFyZSB1c2VkIGFuZCBjb25maWd1cmVkLiBLbm93aW5nIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBicm91Z2h0IGludG8gcGxheSB3aWxsIHRlbGwgbWUgaWYgdGhlIGF0dGFjayBzdXJmYWNlIGlzIGV4cG9zZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgcGF0aCB0byBleHBsb2l0YXRpb24sIGFuZCB3aGV0aGVyIGEgZnV6emluZyB0YXJnZXQgaXMganVzdGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fpcl9lbjg4MTFoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQUlSX0FOODgwMV9QSFkpXHQmIzQzOz0gYWlyX2FuODgwMS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0FJUl9FTjg4MTFIX1BIWSkgICAmIzQzOz0gYWlyX2VuODgxMWgub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTM1LW9iai0kKENPTkZJR19BSVJfTkVUX1BIWUxJQilcdCYjNDM7PSBhaXJfcGh5X2xpYi5vXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjQtLyogTEVEIGJhc2ljIGNvbnRyb2wgcmVnaXN0ZXIsIHBhcnQgb2YgdGhlIHNhbWUgTEVEIGJsb2NrIGFzIHRoZSBMRUQwL0xFRDFcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM6MzI1OiAqIGNvbnRyb2wgcmVnaXN0ZXJzIGFib3ZlLiBUaGUgYWlyX2VuODgxMWggZHJpdmVyIGRlc2NyaWJlcyB0aGUgc2FtZVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjYtICogcmVnaXN0ZXIgYXMgQUlSX1BIWV9MRURfQkNSLlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM9MTQ4Mj1zdGF0aWMgaW50IGVuNzUyOF9waHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE0ODYtXHQgKiBwcm9ncmFtbWVkIGludG8gdGhlIExFRCBjb250cm9sIHJlZ2lzdGVycy4gSGFuZCB0aGUgcGlucyBvdmVyIHRvXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjE0ODc6XHQgKiB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXJzIHRoZSBzYW1lIHdheSB0aGUgYWlyX2VuODgxMWggZHJpdmVyXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE0ODgtXHQgKiBkb2VzOyB0aGUgbW9kZSBmaWVsZCBvZiB0aGlzIHJlZ2lzdGVyIGlzIGFscmVhZHkgc2V0IG91dCBvZiByZXNldC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzc2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXM6CgoqKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIEFpci1FTjg4MTFIIFBIWSBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEFpci1FTjg4MTFIIFBIWS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBkcml2ZXImIzM5O3MgbmV0d29yayBQSFkgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBkZWZpbmVkIGFuZCBjb250cm9sbGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXJvdW5kIHRoZSBgQ09ORklHX0FJUl9FTjg4MTFIX1BIWWAgc3ltYm9sLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgZHJpdmVyJiMzOTtzIGJlaGF2aW9yIGlzIGxpa2VseSBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBjb25kaXRpb25zIGVuYWJsZSB0aGlzIGRldmljZSwgd2hpY2ggbWlnaHQgaW52b2x2ZSBkZXBlbmRlbmN5IGNoZWNrcyBvbiBvdGhlciBoYXJkd2FyZSBvciBzb2Z0d2FyZSBmZWF0dXJlcywgYW5kIGFueSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBzZWUgaWYgdGhpcyBoYXMgYmVlbiBjb25maWd1cmVkIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FJUl9FTjg4MTFIX1BIWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz05Mz1jb25maWcgQUlSX0FOODgwMV9QSFlcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy05OC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk5OmNvbmZpZyBBSVJfRU44ODExSF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwMC1cdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBFTjg4MTFIIDIuNSBHaWdhYml0IFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQUlSX0FOODgwMV9QSFkpXHQmIzQzOz0gYWlyX2FuODgwMS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0FJUl9FTjg4MTFIX1BIWSkgICAmIzQzOz0gYWlyX2VuODgxMWgub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTM1LW9iai0kKENPTkZJR19BSVJfTkVUX1BIWUxJQilcdCYjNDM7PSBhaXJfcGh5X2xpYi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg0NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBhaXJfZW44ODExaC5jYCBkcml2ZXIgaG9va3MgaW50byB0aGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBpdHMgUEhZIGRyaXZlciByZWdpc3RyYXRpb24uIE15IGdvYWwgaXMgdG8gZmlndXJlIG91dCB0aGUgZGV2aWNlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJpbmQgdG8uIEkmIzM5O2xsIHplcm8gaW4gb24gdGhlIGBwaHlfZHJpdmVyYCByZWdpc3RyYXRpb24gc2VjdGlvbiB3aXRoaW4gdGhlIGNvZGUuIFRoYXQmIzM5O3MgdGhlIGtleS4gQnkgYW5hbHl6aW5nIGhvdyBgcGh5X2RyaXZlcmAgaXMgaGFuZGxlZCwgSSBzaG91bGQgYmUgYWJsZSB0byBkZWR1Y2UgdGhlIGludGVuZGVkIHRhcmdldCBoYXJkd2FyZS4gVGhpcyBpcyByb3V0aW5lLCBidXQgZXNzZW50aWFsIHdoZW4gYXNzZXNzaW5nIGEgbmV3IGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzAwOlx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4xMzAxOlx0XHRpbnQgcmV0O1xuMTMwMjpcdFxuMTMwMzpcdFx0LyogSWYgcmVzdGFydCBoYXBwZW5lZCBpbiAucHJvYmUoKSwgbm8gbmVlZCB0byByZXN0YXJ0IG5vdyAqL1xuMTMwNDpcdFx0aWYgKHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQpIHtcbjEzMDU6XHRcdFx0cmV0ID0gZW44ODExaF9yZXN0YXJ0X21jdShwaHlkZXYpO1xuMTMwNjpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTMwNzpcdFx0XHRcdHJldHVybiByZXQ7XG4xMzA4Olx0XHR9IGVsc2Uge1xuMTMwOTpcdFx0XHQvKiBOZXh0IGNhbGxzIHRvIC5jb25maWdfaW5pdCgpIG1jdSBuZWVkcyB0byByZXN0YXJ0ICovXG4xMzEwOlx0XHRcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSB0cnVlO1xuMTMxMTpcdFx0fVxuMTMxMjpcdFxuMTMxMzpcdFx0cmV0ID0gYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShwaHlkZXYpO1xuMTMxNDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzMTU6XHRcdFx0cmV0dXJuIHJldDtcbjEzMTY6XHRcbjEzMTc6XHRcdHJldCA9IGFpcl9sZWRzX2luaXQocGh5ZGV2LCBFTjg4MTFIX0xFRF9DT1VOVCwgQUlSX1BIWV9MRURfRFVSLFxuMTMxODpcdFx0XHRcdCAgICBBSVJfTEVEX01PREVfVVNFUl9ERUZJTkUpO1xuMTMxOTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTMyMDpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbGVkczogJWRcXG5cJiMzNDssIHJldCk7XG4xMzIxOlx0XHRcdHJldHVybiByZXQ7XG4xMzIyOlx0XHR9XG4xMzIzOlx0XG4xMzI0Olx0XHRyZXQgPSBhbjg4MTFoYl9sZWRfZ3Bpb19zZXR1cChwaHlkZXYpO1xuMTMyNTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTMyNjpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmFpbGVkIHRvIHNldCB1cCBMRUQgR1BJTzogJWRcXG5cJiMzNDssIHJldCk7XG4xMzI3Olx0XHRcdHJldHVybiByZXQ7XG4xMzI4Olx0XHR9XG4xMzI5Olx0XHRyZXR1cm4gcmV0O1xuMTMzMDpcdH1cbjEzMzE6XHRcbjEzMzI6XHRzdGF0aWMgaW50IGVuODgxMWhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjEzMzM6XHR7XG4xMzM0Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4xMzM1Olx0XHRpbnQgcmV0O1xuMTMzNjpcdFxuMTMzNzpcdFx0LyogSWYgcmVzdGFydCBoYXBwZW5lZCBpbiAucHJvYmUoKSwgbm8gbmVlZCB0byByZXN0YXJ0IG5vdyAqL1xuMTMzODpcdFx0aWYgKHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQpIHtcbjEzMzk6XHRcdFx0cmV0ID0gZW44ODExaF9yZXN0YXJ0X21jdShwaHlkZXYpO1xuMTM0MDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM0MTpcdFx0XHRcdHJldHVybiByZXQ7XG4xMzQyOlx0XHR9IGVsc2Uge1xuMTM0MzpcdFx0XHQvKiBOZXh0IGNhbGxzIHRvIC5jb25maWdfaW5pdCgpIG1jdSBuZWVkcyB0byByZXN0YXJ0ICovXG4xMzQ0Olx0XHRcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSB0cnVlO1xuMTM0NTpcdFx0fVxuMTM0NjpcdFxuMTM0NzpcdFx0LyogU2VsZWN0IG1vZGUgMSwgdGhlIG9ubHkgbW9kZSBzdXBwb3J0ZWQuXG4xMzQ4Olx0XHQgKiBDb25maWd1cmVzIHRoZSBTZXJEZXMgZm9yIDI1MDBCYXNlLVggd2l0aCByYXRlIGFkYXB0YXRpb25cbjEzNDk6XHRcdCAqL1xuMTM1MDpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMSxcbjEzNTE6XHRcdFx0XHQgICAgQUlSX1BIWV9NQ1VfQ01EXzFfTU9ERTEpO1xuMTM1MjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzNTM6XHRcdFx0cmV0dXJuIHJldDtcbjEzNTQ6XHRcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzIsXG4xMzU1Olx0XHRcdFx0ICAgIEFJUl9QSFlfTUNVX0NNRF8yX01PREUxKTtcbjEzNTY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMzU3Olx0XHRcdHJldHVybiByZXQ7XG4xMzU4Olx0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF8zLFxuMTM1OTpcdFx0XHRcdCAgICBBSVJfUEhZX01DVV9DTURfM19NT0RFMSk7XG4xMzYwOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM2MTpcdFx0XHRyZXR1cm4gcmV0O1xuMTM2MjpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfNCxcbjEzNjM6XHRcdFx0XHQgICAgQUlSX1BIWV9NQ1VfQ01EXzRfTU9ERTEpO1xuMTM2NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzNjU6XHRcdFx0cmV0dXJuIHJldDtcbjEzNjY6XHRcbjEzNjc6XHRcdHJldCA9IGVuODgxMWhfY29uZmlnX3NlcmRlc19wb2xhcml0eShwaHlkZXYpO1xuMTM2ODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzNjk6XHRcdFx0cmV0dXJuIHJldDtcbjEzNzA6XHRcbjEzNzE6XHRcdHJldCA9IGFpcl9sZWRzX2luaXQocGh5ZGV2LCBFTjg4MTFIX0xFRF9DT1VOVCwgQUlSX1BIWV9MRURfRFVSLFxuMTM3MjpcdFx0XHRcdCAgICBBSVJfTEVEX01PREVfVVNFUl9ERUZJTkUpO1xuMTM3MzpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTM3NDpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbGVkczogJWRcXG5cJiMzNDssIHJldCk7XG4xMzc1Olx0XHRcdHJldHVybiByZXQ7XG4xMzc2Olx0XHR9XG4xMzc3Olx0XG4xMzc4Olx0XHQvKiBDb25maWd1cmUgbGVkIGdwaW8gcGlucyBhcyBvdXRwdXQuIE11c3QgYmUgcmVkb25lIG9uIGV2ZXJ5XG4xMzc5Olx0XHQgKiAuY29uZmlnX2luaXQoKSwgbm90IGp1c3Qgb25jZSBpbiAucHJvYmUoKTogZW44ODExaF9yZXN0YXJ0X21jdSgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwNgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgUEhZIGRldmljZSBtYXRjaGluZyBhbmQgcHJvYmluZyB3b3JrcywgYmFzZWQgb24gdGhlIGZpbGUgbmFtZSBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgOgoKKipQcm9iaW5nIHRoZSBBaXItRU44ODExSCBQSFkqKgoKUmlnaHQsIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgYW5kIGluaXRpYWxpemVzIHRoaXMgcGFydGljdWxhciBQSFkg4oCTIHRoZSBBaXItRU44ODExSC4gR2l2ZW4gdGhlIGZpbGUgcGF0aCwgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCwgbXkgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29udGVudHMgb2YgdGhhdCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHBvcmUgb3ZlciBpdCB0byB1bmRlcnN0YW5kIHRoZSBtYXRjaGluZyBwcm9jZXNzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29ubmVjdGVkIFBIWSBpcyAqYWN0dWFsbHkqIGFuIEFpci1FTjg4MTFIIGFuZCB0aGVuIGhvdyBpdCYjMzk7cyBicm91Z2h0IG9ubGluZSwgYmFzaWNhbGx5IHByb2JpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkZXZpY2UmIzM5O3MgaWRlbnRpZmljYXRpb24gZGF0YSwgaG93IGl0JiMzOTtzIGhhbmRsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiwgYW5kIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgbmVlZGVkLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgc3RhbmRhcmQgUEhZIGRyaXZlciBmcmFtZXdvcmsgZWxlbWVudHMsIGJ1dCB0aGUgY3J1Y2lhbCBiaXRzIHdpbGwgYmUgdGhlIHNwZWNpZmljcyByZWxhdGVkIHRvICp0aGlzKiBwYXJ0aWN1bGFyIFBIWSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JrIHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4gYW5kIGdldCBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxMDpcdFx0aW50IHJldDtcbjE0MTE6XHRcdHUzMiBhZHY7XG4xNDEyOlx0XG4xNDEzOlx0XHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7XG4xNDE0Olx0XHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCYjMzQ7RGlzYWJsaW5nIGF1dG9uZWcgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4xNDE1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQxNjpcdFx0fVxuMTQxNzpcdFxuMTQxODpcdFx0YWR2ID0gbGlua21vZGVfYWR2X3RvX21paV8xMGdidF9hZHZfdChwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuMTQxOTpcdFxuMTQyMDpcdFx0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXG4xNDIxOlx0XHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLCBhZHYpO1xuMTQyMjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0MjM6XHRcdFx0cmV0dXJuIHJldDtcbjE0MjQ6XHRcdGlmIChyZXQgXHUwMDNlIDApXG4xNDI1Olx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuMTQyNjpcdFxuMTQyNzpcdFx0cmV0dXJuIF9fZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldiwgY2hhbmdlZCk7XG4xNDI4Olx0fVxuMTQyOTpcdFxuMTQzMDpcdHN0YXRpYyBpbnQgZW44ODExaF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTQzMTpcdHtcbjE0MzI6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbjE0MzM6XHRcdHUzMiBwYnVzX3ZhbHVlO1xuMTQzNDpcdFx0aW50IHJldCwgdmFsO1xuMTQzNTpcdFxuMTQzNjpcdFx0cmV0ID0gZ2VucGh5X3VwZGF0ZV9saW5rKHBoeWRldik7XG4xNDM3Olx0XHRpZiAocmV0KVxuMTQzODpcdFx0XHRyZXR1cm4gcmV0O1xuMTQzOTpcdFxuMTQ0MDpcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1VOU1VQUE9SVEVEO1xuMTQ0MTpcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTlNVUFBPUlRFRDtcbjE0NDI6XHRcdHBoeWRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4xNDQzOlx0XHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XG4xNDQ0Olx0XHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAwO1xuMTQ0NTpcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAwO1xuMTQ0NjpcdFx0cGh5ZGV2LVx1MDAzZXJhdGVfbWF0Y2hpbmcgPSBSQVRFX01BVENIX1BBVVNFO1xuMTQ0NzpcdFxuMTQ0ODpcdFx0cmV0ID0gZ2VucGh5X3JlYWRfbWFzdGVyX3NsYXZlKHBoeWRldik7XG4xNDQ5Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTQ1MDpcdFx0XHRyZXR1cm4gcmV0O1xuMTQ1MTpcdFxuMTQ1MjpcdFx0cmV0ID0gZ2VucGh5X3JlYWRfbHBhKHBoeWRldik7XG4xNDUzOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTQ1NDpcdFx0XHRyZXR1cm4gcmV0O1xuMTQ1NTpcdFxuMTQ1NjpcdFx0aWYgKHBoeV9pZF9jb21wYXJlX21vZGVsKHBoeWRldi1cdTAwM2VwaHlfaWQsIEFOODgxMUhCX1BIWV9JRCkpIHtcbjE0NTc6XHRcdFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XG4xNDU4Olx0XHRcdGlmICh2YWwgXHUwMDNjIDApXG4xNDU5Olx0XHRcdFx0cmV0dXJuIHZhbDtcbjE0NjA6XHRcdFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4xNDYxOlx0XHRcdFx0XHQgcGh5ZGV2LVx1MDAzZWxwX2FkdmVydGlzaW5nLFxuMTQ2MjpcdFx0XHRcdFx0IHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81Ryk7XG4xNDYzOlx0XHR9IGVsc2Uge1xuMTQ2NDpcdFx0XHQvKiBHZXQgbGluayBwYXJ0bmVyIDIuNUdCQVNFLVQgYWJpbGl0eSBmcm9tIHZlbmRvciByZWdpc3RlciAqL1xuMTQ2NTpcdFx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgRU44ODExSF8yUDVHX0xQQSxcbjE0NjY6XHRcdFx0XHRcdFx0XHRcdTAwMjZwYnVzX3ZhbHVlKTtcbjE0Njc6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0Njg6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQ2OTpcdFx0XHRsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbjE0NzA6XHRcdFx0XHRcdCBwaHlkZXYtXHUwMDNlbHBfYWR2ZXJ0aXNpbmcsXG4xNDcxOlx0XHRcdFx0XHQgcGJ1c192YWx1ZSBcdTAwMjYgRU44ODExSF8yUDVHX0xQQV8yUDVHKTtcbjE0NzI6XHRcdH1cbjE0NzM6XHRcbjE0NzQ6XHRcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZ19jb21wbGV0ZSlcbjE0NzU6XHRcdFx0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuMTQ3NjpcdFxuMTQ3NzpcdFx0aWYgKCFwaHlkZXYtXHUwMDNlbGluaylcbjE0Nzg6XHRcdFx0cmV0dXJuIDA7XG4xNDc5Olx0XG4xNDgwOlx0XHQvKiBHZXQgcmVhbCBzcGVlZCBmcm9tIHZlbmRvciByZWdpc3RlciAqL1xuMTQ4MTpcdFx0dmFsID0gcGh5X3JlYWQocGh5ZGV2LCBBSVJfQVVYX0NUUkxfU1RBVFVTKTtcbjE0ODI6XHRcdGlmICh2YWwgXHUwMDNjIDApXG4xNDgzOlx0XHRcdHJldHVybiB2YWw7XG4xNDg0Olx0XHRzd2l0Y2ggKHZhbCBcdTAwMjYgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF9NQVNLKSB7XG4xNDg1Olx0XHRjYXNlIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMDpcbjE0ODY6XHRcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMjUwMDtcbjE0ODc6XHRcdFx0YnJlYWs7XG4xNDg4Olx0XHRjYXNlIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMTAwMDpcbjE0ODk6XHRcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA5MAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBBaXItRU44ODExSCBQSFkgRHJpdmVyKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoaXMgYGFpcl9lbjg4MTFoLmNgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcGh5YCBkaXJlY3RvcnkuIEkgbmVlZCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgaGVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbW9kdWxlIGRlZmluaXRpb24gYW5kIHRoZSBhbGwtaW1wb3J0YW50IGBwaHlfZHJpdmVyYCBzdHJ1Y3QuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIGRyaXZlciYjMzk7cyBpbnRlcmZhY2UgaXMgZGVmaW5lZCDigJMgaG93IGl0IHByZXNlbnRzIGl0c2VsZiB0byB0aGUgc3lzdGVtLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFBIWSwgYW5kIHdoYXQgY2FwYWJpbGl0aWVzIGl0IGV4cG9zZXMuIEdvdHRhIHZlcmlmeSB0aGUgbW9kdWxlJiMzOTtzIHN0cnVjdHVyZSBhbmQgdGhlbiB0aGUgbWVhdCBvZiBpdHMgb3BlcmF0aW9uYWwgZGV0YWlscyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFBIWSBpcyBhY3R1YWxseSBtYW5hZ2VkLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDkwOlx0XHRcdGJyZWFrO1xuMTQ5MTpcdFx0Y2FzZSBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEXzEwMDpcbjE0OTI6XHRcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwO1xuMTQ5MzpcdFx0XHRicmVhaztcbjE0OTQ6XHRcdGNhc2UgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8xMDpcbjE0OTU6XHRcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTA7XG4xNDk2Olx0XHRcdGJyZWFrO1xuMTQ5NzpcdFx0fVxuMTQ5ODpcdFxuMTQ5OTpcdFx0LyogRmlybXdhcmUgYmVmb3JlIHZlcnNpb24gMjQwMTEyMDIgaGFzIG5vIHZlbmRvciByZWdpc3RlciAyUDVHX0xQQS5cbjE1MDA6XHRcdCAqIEFzc3VtZSBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNlZCBpdCBpZiBjb25uZWN0ZWQgYXQgMjUwME1icHMuXG4xNTAxOlx0XHQgKi9cbjE1MDI6XHRcdGlmIChwcml2LVx1MDAzZWZpcm13YXJlX3ZlcnNpb24gXHUwMDNjIDB4MjQwMTEyMDIpIHtcbjE1MDM6XHRcdFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4xNTA0Olx0XHRcdFx0XHQgcGh5ZGV2LVx1MDAzZWxwX2FkdmVydGlzaW5nLFxuMTUwNTpcdFx0XHRcdFx0IHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8yNTAwKTtcbjE1MDY6XHRcdH1cbjE1MDc6XHRcbjE1MDg6XHRcdC8qIE9ubHkgc3VwcG9ydHMgZnVsbCBkdXBsZXggKi9cbjE1MDk6XHRcdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfRlVMTDtcbjE1MTA6XHRcbjE1MTE6XHRcdHJldHVybiAwO1xuMTUxMjpcdH1cbjE1MTM6XHRcbjE1MTQ6XHRzdGF0aWMgaW50IGVuODgxMWhfY2xlYXJfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTUxNTpcdHtcbjE1MTY6XHRcdGludCByZXQ7XG4xNTE3Olx0XG4xNTE4Olx0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF8zLFxuMTUxOTpcdFx0XHRcdCAgICBBSVJfUEhZX01DVV9DTURfM19ET0NNRCk7XG4xNTIwOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTUyMTpcdFx0XHRyZXR1cm4gcmV0O1xuMTUyMjpcdFxuMTUyMzpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfNCxcbjE1MjQ6XHRcdFx0XHQgICAgQUlSX1BIWV9NQ1VfQ01EXzRfSU5UQ0xSKTtcbjE1MjU6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNTI2Olx0XHRcdHJldHVybiByZXQ7XG4xNTI3Olx0XG4xNTI4Olx0XHRyZXR1cm4gMDtcbjE1Mjk6XHR9XG4xNTMwOlx0XG4xNTMxOlx0c3RhdGljIGlycXJldHVybl90IGVuODgxMWhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTUzMjpcdHtcbjE1MzM6XHRcdGludCByZXQ7XG4xNTM0Olx0XG4xNTM1Olx0XHRyZXQgPSBlbjg4MTFoX2NsZWFyX2ludHIocGh5ZGV2KTtcbjE1MzY6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjE1Mzc6XHRcdFx0cGh5X2Vycm9yKHBoeWRldik7XG4xNTM4Olx0XHRcdHJldHVybiBJUlFfTk9ORTtcbjE1Mzk6XHRcdH1cbjE1NDA6XHRcbjE1NDE6XHRcdHBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTtcbjE1NDI6XHRcbjE1NDM6XHRcdHJldHVybiBJUlFfSEFORExFRDtcbjE1NDQ6XHR9XG4xNTQ1Olx0XG4xNTQ2Olx0c3RhdGljIGludCBlbjg4MTFoX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTU0NzpcdHtcbjE1NDg6XHRcdGNsa19yZXN0b3JlX2NvbnRleHQoKTtcbjE1NDk6XHRcbjE1NTA6XHRcdHJldHVybiBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4xNTUxOlx0fVxuMTU1MjpcdFxuMTU1MzpcdHN0YXRpYyBpbnQgZW44ODExaF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xNTU0Olx0e1xuMTU1NTpcdFx0Y2xrX3NhdmVfY29udGV4dCgpO1xuMTU1NjpcdFxuMTU1NzpcdFx0cmV0dXJuIGdlbnBoeV9zdXNwZW5kKHBoeWRldik7XG4xNTU4Olx0fVxuMTU1OTpcdFxuMTU2MDpcdHN0YXRpYyB2b2lkIGFuODgxMWhiX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTU2MTpcdHtcbjE1NjI6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbjE1NjM6XHRcbjE1NjQ6XHRcdGlmIChwcml2LVx1MDAzZXBidXNkZXYpIHtcbjE1NjU6XHRcdFx0bWRpb19kZXZpY2VfcmVtb3ZlKHByaXYtXHUwMDNlcGJ1c2Rldik7XG4xNTY2Olx0XHRcdG1kaW9fZGV2aWNlX2ZyZWUocHJpdi1cdTAwM2VwYnVzZGV2KTtcbjE1Njc6XHRcdH1cbjE1Njg6XHR9XG4xNTY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDcxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyBmcm9tIGxpbmUgMTU3MCBvbndhcmRzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBwaWVjZSBpcywgd2hlcmUgdGhlIGFuYWx5c2lzIGlzIHRha2luZyBwbGFjZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiBteSB1bmRlcnN0YW5kaW5nIGlzIGVpdGhlciBnb2luZyB0byBkZWVwZW4gb3IgYnJlYWssIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmb2N1c2VkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU3MDpcdHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBlbjg4MTFoX2RyaXZlcltdID0ge1xuMTU3MTpcdHtcbjE1NzI6XHRcdFBIWV9JRF9NQVRDSF9NT0RFTChFTjg4MTFIX1BIWV9JRCksXG4xNTczOlx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7QWlyb2hhIEVOODgxMUhcJiMzNDssXG4xNTc0Olx0XHQucHJvYmVcdFx0XHQ9IGVuODgxMWhfcHJvYmUsXG4xNTc1Olx0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0gZW44ODExaF9nZXRfZmVhdHVyZXMsXG4xNTc2Olx0XHQuY29uZmlnX2luaXRcdFx0PSBlbjg4MTFoX2NvbmZpZ19pbml0LFxuMTU3NzpcdFx0LmdldF9yYXRlX21hdGNoaW5nXHQ9IGVuODgxMWhfZ2V0X3JhdGVfbWF0Y2hpbmcsXG4xNTc4Olx0XHQuY29uZmlnX2FuZWdcdFx0PSBlbjg4MTFoX2NvbmZpZ19hbmVnLFxuMTU3OTpcdFx0LnJlYWRfc3RhdHVzXHRcdD0gZW44ODExaF9yZWFkX3N0YXR1cyxcbjE1ODA6XHRcdC5yZXN1bWVcdFx0XHQ9IGVuODgxMWhfcmVzdW1lLFxuMTU4MTpcdFx0LnN1c3BlbmRcdFx0PSBlbjg4MTFoX3N1c3BlbmQsXG4xNTgyOlx0XHQuY29uZmlnX2ludHJcdFx0PSBlbjg4MTFoX2NsZWFyX2ludHIsXG4xNTgzOlx0XHQuaGFuZGxlX2ludGVycnVwdFx0PSBlbjg4MTFoX2hhbmRsZV9pbnRlcnJ1cHQsXG4xNTg0Olx0XHQubGVkX2h3X2lzX3N1cHBvcnRlZFx0PSBlbjg4MTFoX2xlZF9od19pc19zdXBwb3J0ZWQsXG4xNTg1Olx0XHQucmVhZF9wYWdlXHRcdD0gYWlyX3BoeV9yZWFkX3BhZ2UsXG4xNTg2Olx0XHQud3JpdGVfcGFnZVx0XHQ9IGFpcl9waHlfd3JpdGVfcGFnZSxcbjE1ODc6XHRcdC5sZWRfYmxpbmtfc2V0XHRcdD0gYWlyX2xlZF9ibGlua19zZXQsXG4xNTg4Olx0XHQubGVkX2JyaWdodG5lc3Nfc2V0XHQ9IGFpcl9sZWRfYnJpZ2h0bmVzc19zZXQsXG4xNTg5Olx0XHQubGVkX2h3X2NvbnRyb2xfc2V0XHQ9IGFpcl9sZWRfaHdfY29udHJvbF9zZXQsXG4xNTkwOlx0XHQubGVkX2h3X2NvbnRyb2xfZ2V0XHQ9IGFpcl9sZWRfaHdfY29udHJvbF9nZXQsXG4xNTkxOlx0fSxcbjE1OTI6XHR7XG4xNTkzOlx0XHRQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODExSEJfUEhZX0lEKSxcbjE1OTQ6XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtBaXJvaGEgQU44ODExSEJcJiMzNDssXG4xNTk1Olx0XHQucHJvYmVcdFx0XHQ9IGFuODgxMWhiX3Byb2JlLFxuMTU5NjpcdFx0LnJlbW92ZVx0XHRcdD0gYW44ODExaGJfcmVtb3ZlLFxuMTU5NzpcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IGVuODgxMWhfZ2V0X2ZlYXR1cmVzLFxuMTU5ODpcdFx0LmNvbmZpZ19pbml0XHRcdD0gYW44ODExaGJfY29uZmlnX2luaXQsXG4xNTk5Olx0XHQuZ2V0X3JhdGVfbWF0Y2hpbmdcdD0gZW44ODExaF9nZXRfcmF0ZV9tYXRjaGluZyxcbjE2MDA6XHRcdC5jb25maWdfYW5lZ1x0XHQ9IGVuODgxMWhfY29uZmlnX2FuZWcsXG4xNjAxOlx0XHQucmVhZF9zdGF0dXNcdFx0PSBlbjg4MTFoX3JlYWRfc3RhdHVzLFxuMTYwMjpcdFx0LnJlc3VtZVx0XHRcdD0gZW44ODExaF9yZXN1bWUsXG4xNjAzOlx0XHQuc3VzcGVuZFx0XHQ9IGVuODgxMWhfc3VzcGVuZCxcbjE2MDQ6XHRcdC5jb25maWdfaW50clx0XHQ9IGVuODgxMWhfY2xlYXJfaW50cixcbjE2MDU6XHRcdC5oYW5kbGVfaW50ZXJydXB0XHQ9IGVuODgxMWhfaGFuZGxlX2ludGVycnVwdCxcbjE2MDY6XHRcdC5sZWRfaHdfaXNfc3VwcG9ydGVkXHQ9IGVuODgxMWhfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbjE2MDc6XHRcdC5yZWFkX3BhZ2VcdFx0PSBhaXJfcGh5X3JlYWRfcGFnZSxcbjE2MDg6XHRcdC53cml0ZV9wYWdlXHRcdD0gYWlyX3BoeV93cml0ZV9wYWdlLFxuMTYwOTpcdFx0LmxlZF9ibGlua19zZXRcdFx0PSBhaXJfbGVkX2JsaW5rX3NldCxcbjE2MTA6XHRcdC5sZWRfYnJpZ2h0bmVzc19zZXRcdD0gYWlyX2xlZF9icmlnaHRuZXNzX3NldCxcbjE2MTE6XHRcdC5sZWRfaHdfY29udHJvbF9zZXRcdD0gYWlyX2xlZF9od19jb250cm9sX3NldCxcbjE2MTI6XHRcdC5sZWRfaHdfY29udHJvbF9nZXRcdD0gYWlyX2xlZF9od19jb250cm9sX2dldCxcbjE2MTM6XHR9IH07XG4xNjE0Olx0XG4xNjE1Olx0bW9kdWxlX3BoeV9kcml2ZXIoZW44ODExaF9kcml2ZXIpO1xuMTYxNjpcdFxuMTYxNzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgZW44ODExaF90YmxbXSA9IHtcbjE2MTg6XHRcdHsgUEhZX0lEX01BVENIX01PREVMKEVOODgxMUhfUEhZX0lEKSB9LFxuMTYxOTpcdFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODExSEJfUEhZX0lEKSB9LFxuMTYyMDpcdFx0eyB9XG4xNjIxOlx0fTtcbjE2MjI6XHRcbjE2MjM6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGVuODgxMWhfdGJsKTtcbjE2MjQ6XHRNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTtcbjE2MjU6XHRNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RTUCk7XG4xNjI2Olx0TU9EVUxFX0ZJUk1XQVJFKEFOODgxMUhCX01EMzJfRE0pO1xuMTYyNzpcdE1PRFVMRV9GSVJNV0FSRShBTjg4MTFIQl9NRDMyX0RTUCk7XG4xNjI4Olx0XG4xNjI5Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0Fpcm9oYSBFTjg4MTFIIGFuZCBBTjg4MTFIQiBQSFkgZHJpdmVyc1wmIzM0Oyk7XG4xNjMwOlx0TU9EVUxFX0FVVEhPUihcJiMzNDtBaXJvaGFcJiMzNDspO1xuMTYzMTpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7RXJpYyBXb3Vkc3RyYSBcdTAwM2Nlcmljd291ZHNAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbjE2MzI6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk4MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBNRElPL1BIWSBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgcmVhY2hhYmxlIE1ESU8gUEhZIGRldmljZXMgYXJlIHdoZW4gaXQgY29tZXMgdG8gZnV6emluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuIFRoZSBxdWVzdGlvbiBJJiMzOTttIHRyeWluZyB0byBhbnN3ZXIgaXM6IGNhbiB3ZSBhY3R1YWxseSAqZ2V0IHRvKiB0aGVzZSB0aGluZ3M/CgpGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gQ2FuIHdlIHByb2JlIHRoZW0sIGVtdWxhdGUgdGhlbSwgb3IgaW5zdGFudGlhdGUgdGhlbSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBJIGtub3cgYSBNQUMgZHJpdmVyIHVzdWFsbHkgY3JlYXRlcyBhbiBNRElPIGJ1cyBhbmQgc2NhbnMsIG9yIGl0IGNvbWVzIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLCBBQ1BJLCBwbGF0Zm9ybSBkZXZpY2VzIG9yIE1ESU8gbmV0bGluay4gVGhlIHJlYWwgdHJpY2sgaXM6IGNhbiAqdXNlciBzcGFjZSogZG8gdGhpcz8gT3IsIGRvIHdlIGhhdmUgTURJTyBQSFkgZHJpdmVycyBpbiBzdGFuZGFyZCBRRU1VIC8gdmlydGlvIGNvbmZpZ3VyYXRpb25zPwoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIE1ESU8gYnVzZXMgYW5kIFBIWSBkcml2ZXJzIGRpcmVjdGx5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBmZWFzaWJpbGl0eSBvZiBpbnN0YW50aWF0aW5nIGEgc3BlY2lmaWMgUEhZIGRldmljZSB3aXRoIGEgdGFyZ2V0IFBIWSBJRCBsaWtlIGBBTjg4MTFIQl9QSFlfSURgIHdpdGhvdXQgbmVlZGluZyBhY3R1YWwgaGFyZHdhcmUuCgpGaW5hbGx5LCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYW55IHZpcnR1YWwgTURJTyBidXNlcyBvciBzb2Z0d2FyZSBNRElPIGRyaXZlcnMgY2FuIHByb3ZpZGUgYSB3YXkgaW4/IFRoaXMgbWVhbnMgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYG1kaW8tZ3Bpb2AsIGBtZGlvLWJpdGJhbmdgLCBgbWRpby1kdW1teWAsIGFuZCBzbyBvbi4gSSYjMzk7bGwgbmVlZCB0byBhbHNvIGNoZWNrIHRoZSBzeXNmcyBhbmQgbmV0bGluayBpbnRlcmZhY2VzIGZvciBhbnkgTURJTyByZWxhdGVkIGVudHJ5cG9pbnRzLiBUaGlzIGlzIG15IGJlc3QgYmV0IGZvciBhIHNvZnR3YXJlIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9fYnVzX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NjgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNRElPYnVzIFJlZ2lzdHJhdGlvbiAtIFdoZXJlIHRvIFN0YXJ0PyoqCgpBbHJpZ2h0LCB0aGUgdGFzayBhdCBoYW5kIGlzIGRlZmluaXRlbHkgcmVsYXRlZCB0byBNRElPIGJ1cyByZWdpc3RyYXRpb24uIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHN5c3RlbSBpbml0aWFsaXplcyBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIE1ESU8gYnVzLiBTbywgaW5zdGVhZCBvZiByYW5kb21seSBkaXZpbmcgaW4sIEkgbmVlZCB0byBrbm93IHRoZSBlbnRyeSBwb2ludHMuIExldCYjMzk7cyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IGZ1bmN0aW9uIG5hbWUgdG8gc3RhcnQgd2l0aCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgYG1kaW9idXNfcmVnaXN0ZXJgLiBJdOKAmXMgdXN1YWxseSBhIHByZXR0eSByZWxpYWJsZSBpbmRpY2F0b3IuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoIGZvciB0aGF0LiBEZXBlbmRpbmcgb24gdGhlIHJlc3VsdHMsIEkmIzM5O2xsIGtub3cgd2hldGhlciB0aGlzIHdpbGwgaW52b2x2ZSBzb21lIGRyaXZlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgYnVzIGxheWVyIG1hbmlwdWxhdGlvbiwgb3Igb3ZlcmFsbCBib2FyZCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMzggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdD0zNDk9TURJT1xuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdC0zNTEtICBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZSgpXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3Q6MzUyOiAgZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKClcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTM6ICBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoKVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0LTM1NC1cbi0tXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdD0xMj1kZXZpY2UgKHRoZSBzYW1lIG9iamVjdHMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB2aWFcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0OjEzOmBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KClgYCkuIE1BQy1zaWRlIGNvbm5lY3Rpb24gcHJvcGVydGllcyBzdWNoIGFzXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdC0xNC1gYHBoeS1oYW5kbGVgYCBhbmQgYGBwaHktbW9kZWBgIGFyZSBkb2N1bWVudGVkIGluIFthY3BpLW1kaW8tcGh5XV8uXG4tLVxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0PTc9VGhlIFBIWXMgb24gYW4gTURJTyBidXMgW3BoeV0gYXJlIHByb2JlZCBhbmQgcmVnaXN0ZXJlZCB1c2luZ1xuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0Ojg6Zndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KCkuXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3QtOS1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD00MD1yZWdpc3RlcmVkIGFzIGEgZGlzdGluY3QgZGV2aWNlLlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTU2LSAgIGRyaXZlciBuZWVkcywgc2V0dXAgdGhlIG1paV9idXMgc3RydWN0dXJlLCBhbmQgcmVnaXN0ZXIgd2l0aCB0aGUgUEFMIHVzaW5nXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDo1NzogICBtZGlvYnVzX3JlZ2lzdGVyLiAgU2ltaWxhcmx5LCB0aGVyZSYjMzk7cyBhIHJlbW92ZSBmdW5jdGlvbiB0byB1bmRvIGFsbCBvZlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNTgtICAgdGhhdCAodXNlIG1kaW9idXNfdW5yZWdpc3RlcikuXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYz0xMDk9c3RhdGljIGludCBlcDgyNDhlX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzItXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jOjEzMzpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jLTEzNC1cdGlmIChyZXQpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmM9MjA3PXN0YXRpYyBpbnQgZ3Bpb19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jLTI0My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jOjI0NDpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQ1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4My1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0Olx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM9MTg3PXN0YXRpYyBpbnQgZ3N3aXBfbWRpbyhzdHJ1Y3QgZ3N3aXBfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTMtXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYzoyMTQ6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0MjpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlZGV2LCBidXMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yMzIxPWludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTItXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMzkzOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz02ODU9c3RhdGljIGludCBsYW45Mzd4X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1NS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6NzU2Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zODk9eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MDYtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MDc6XHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDA4LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01MjA9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MzctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1Mzg6XHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM5LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjMzNz1tdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIzNzItXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjM3MzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMzc0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz0yNDI9c3RhdGljIGludCBtdDc2Mjhfc2V0dXBfaW50ZXJuYWxfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTI2MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzoyNjI6XHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy0yNjMtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM4MzQ9c3RhdGljIGludCBtdjg4ZTZ4eHhfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM4ODg6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTItXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjk0LVx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MTQ5PXN0YXRpYyBpbnQgbmV0Y19wb3J0X2NyZWF0ZV9lbWRpb19idXMoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTc5LVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6MTgwOlx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE4MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9OTU3PXN0YXRpYyBpbnQgdnNjOTk1OV9tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTAxNDpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxNS1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM9ODc4PXN0YXRpYyBpbnQgdnNjOTk1M19tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDMtXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0Olx0cmMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDUtXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODMtXHRvZl9ub2RlX3B1dChtbnApO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTk0Nz1xY2E4a19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4Ni1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk4NzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc1PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTEwMC1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoxMDE6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMTAyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM9MTExNz1zdGF0aWMgaW50IGE1cHN3X3Byb2JlX21kaW8oc3RydWN0IGE1cHN3ICphNXBzdywgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0My1cbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM6MTE0NDpcdHJldHVybiBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQ1LX1cbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg9MzA3PXZvaWQgc2phMTEwNV9mcmFtZV9tZW1vcnlfcGFydGl0aW9uaW5nKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMDktLyogRnJvbSBzamExMTA1X21kaW8uYyAqL1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oOjMxMDppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMzExLXZvaWQgc2phMTEwNV9tZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0zMDI2PXN0YXRpYyBpbnQgc2phMTEwNV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMzA2Ny1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjMwNjg6XHRyYyA9IHNqYTExMDVfbWRpb2J1c19yZWdpc3Rlcihkcyk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY5LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MjU4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdHhfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0yODctXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzoyODg6XHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0yODktXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0zMTI9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90MV9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM0My1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM0NDpcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM0NS1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTM2OD1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19wY3NfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zOTUtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzozOTY6XHRyYyA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5Ny1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTQzOT1zdGF0aWMgdm9pZCBzamExMTA1X21kaW9idXNfcGNzX3VucmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00NTgtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzo0NTk6aW50IHNqYTExMDVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00NjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jPTQ1OT1zdGF0aWMgaW50IGF4X21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmMtNDc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM6NDc5Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihheC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ4MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jPTEzMjE9c3RhdGljIGludCBvd2xfZW1hY19tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYzoxMzQ2Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cdTAwM2VtaWksIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0Ny1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYz01MDk9c3RhdGljIGludCBhZGluMTExMF9yZWdpc3Rlcl9tZGlvYnVzKHN0cnVjdCBhZGluMTExMF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jOjUzMDpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmMtNTMxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYz02MTc9c3RhdGljIGludCBhZGluMTE0MF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBhZGluMTE0MF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jOjYzNzpcdHJldHVybiBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpZGV2LVx1MDAzZWRldiwgcHJpdi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzOC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYz0xMjkwPXN0YXRpYyBpbnQgZ3JldGhfbWRpb19pbml0KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jOjEzMDc6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGdyZXRoLVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jPTM5MzE9c3RhdGljIGludCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYzo0MDI3Olx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI4LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jPTEyMT1zdGF0aWMgaW50IGFsdGVyYV90c2VfbWRpb19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6MTU4Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1OS1cdGlmIChyZXQgIT0gMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM9MTA2MT1zdGF0aWMgaW50IGF1MTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM6MTIyMjpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXVwLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9MzQyOD1zdGF0aWMgaW50IHhnYmVfcGh5X2luaXQoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxNy1cdHNucHJpbnRmKG1paS1cdTAwM2VpZCwgc2l6ZW9mKG1paS1cdTAwM2VpZCksIFwmIzM0OyVzXCYjMzQ7LCBkZXZfbmFtZShwZGF0YS1cdTAwM2VkZXYpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcxODpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxOS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcyMDpcdFx0ZGV2X2VycihwZGF0YS1cdTAwM2VkZXYsIFwmIzM0O21kaW9idXNfcmVnaXN0ZXIgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcyMS1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jPTk4PWludCB4Z2VfbWRpb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMTgtXHRtZGlvX2J1cy1cdTAwM2VwaHlfbWFzayA9IDB4MTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM6MTE5Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTEyMC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz04Mzc9aW50IHhnZW5lX2VuZXRfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjg4ODpzdGF0aWMgaW50IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODktXHRcdFx0XHQgIHN0cnVjdCBtaWlfYnVzICptZGlvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTEyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MTM6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxNC1cdFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjEtXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTIyOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTkzOT1pbnQgeGdlbmVfZW5ldF9tZGlvX2NvbmZpZyhzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjk1ODpcdHJldCA9IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIocGRhdGEsIG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYz0xMzE9aW50IGFyY19tZGlvX3Byb2JlKHN0cnVjdCBhcmNfZW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM6MTczOlx0ZXJyb3IgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbWRpb19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzQtXHRvZl9ub2RlX3B1dChtZGlvX25vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jPTk2Nj1zdGF0aWMgaW50IGF4ODg3OTZjX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jOjEwMTE6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpLVx1MDAzZWRldiwgYXhfbG9jYWwtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEyLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM9Njg3PXN0YXRpYyBpbnQgYWc3MXh4X21kaW9fcHJvYmUoc3RydWN0IGFnNzF4eCAqYWcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjctXHRtbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjcyODpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyOS1cdG9mX25vZGVfcHV0KG1ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjYwOlx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNjEtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM9MTcxMz1zdGF0aWMgaW50IGJjbV9lbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jOjE4MzA6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MzEtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYz0yMTE9c3RydWN0IG1paV9idXMgKmJjbWFfbWRpb19taWlfcmVnaXN0ZXIoc3RydWN0IGJnbWFjICpiZ21hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYzoyMzY6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNy1cdG9mX25vZGVfcHV0KG5wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz0xOTM9aW50IGJjbWdlbmV0X21paV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBpbml0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzMy1cdFx0cGh5X25hbWUgPSBcJiMzNDtleHRlcm5hbCBSdk1JSVwmIzM0OztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjIzNDpcdFx0Lyogb2ZfbWRpb2J1c19yZWdpc3RlciB0b29rIGNhcmUgb2YgcmVhZGluZyB0aGUgJiMzOTttYXgtc3BlZWQmIzM5O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjM1LVx0XHQgKiBQSFkgcHJvcGVydHkgZm9yIHVzLCBlZmZlY3RpdmVseSBsaW1pdGluZyB0aGUgUEhZIHN1cHBvcnRlZFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYz0yMTU3PXN0YXRpYyBpbnQgc2JtYWNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldiwgbG9uZyBsb25nIGJhc2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjctXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoyMjI4Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihzYy1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTE1MDU9c3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYzoxNTU4Olx0aSA9IG1kaW9idXNfcmVnaXN0ZXIodHAtXHUwMDNlbWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1OS1cdGlmIChpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwOTc6c3RhdGljIGludCBtYWNiX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1hY2IgKmJwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNC1cdGlmIChtZGlvX25wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTA1Olx0XHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMTk6XHRcdFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIwLVx0XHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMjI6XHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMy19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMTI1PXN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTU5Olx0ZXJyID0gbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKGJwLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE2MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYz0xMTA3PXN0YXRpYyBpbnQgZG05MDUxX21kaW9fcmVnaXN0ZXIoc3RydWN0IGJvYXJkX2luZm8gKmRiKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM6MTEyNTpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcdTAwMjZzcGktXHUwMDNlZGV2LCBkYi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTI0MjM9c3RhdGljIGludCB0c25lcF9tZGlvX2luaXQoc3RydWN0IHRzbmVwX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM6MjQ1NTpcdHJldHZhbCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cdTAwM2VtZGlvYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jPTEwMjQ9c3RhdGljIGludCBldGhvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM6MTIwODpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwOS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3MzQ9c3RhdGljIGludCBmdGdtYWMxMDBfc2V0dXBfbWRpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc3MDpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgcHJpdi1cdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc3MS1cdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jPTM2PXN0YXRpYyBpbnQgZW5ldGNfcGNpX21kaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYzo5MTpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBkZXYtXHUwMDNlb2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTI2Nj1zdGF0aWMgaW50IGVuZXRjX21kaW9fcHJvYmUoc3RydWN0IGVuZXRjX3BmICpwZiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjI5MzpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjk0LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MzA4PXN0YXRpYyBpbnQgZW5ldGNfaW1kaW9fY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozNDM6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQ0LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTMwNDI9c3RhdGljIGludCBmZWNfZW5ldF9taWlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozMTYxOlx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihmZXAtXHUwMDNlbWlpX2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYyLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM9NjU9c3RhdGljIGludCBtcGM1Mnh4X2ZlY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM6MTA2Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDctXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM9MTQ5PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYzoxNzY6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM9OTc9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYzoxNjc6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jPTQwOT1zdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6NDk0Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTUtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYz0zNzE9c3RhdGljIGludCB4Z21hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjYtXHRpZiAoaXNfb2Zfbm9kZShmd25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjc6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCB0b19vZl9ub2RlKGZ3bm9kZSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjgtXHRlbHNlIGlmIChpc19hY3BpX25vZGUoZndub2RlKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI5Olx0XHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBmd25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MzAtXHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyOTI6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jPTEwOTQ9c3RhdGljIGludCBoaXg1aGQyX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jOjExODY6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0xMjM9aW50IGhjbGdlX21hY19tZGlvX2NvbmZpZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU0LVx0bWRpb19idXMtXHUwMDNlcGh5X21hc2sgPSB+KDFVIFx1MDAzY1x1MDAzYyBtYWMtXHUwMDNlcGh5X2FkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYzoxNTU6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU2LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jPTQ5NT1zdGF0aWMgaW50IGhuc19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTg0Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTg1LVx0fSBlbHNlIGlmIChpc19hY3BpX25vZGUocGRldi1cdTAwM2VkZXYuZndub2RlKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5Mi1cdFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1OTM6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTQtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYz0yNTYwPXN0YXRpYyBpbnQgZW1hY19kdF9tZGlvX3Byb2JlKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODQtXHRzbnByaW50ZihidXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7JXNcJiMzNDssIGRldi1cdTAwM2VvZmRldi1cdTAwM2VuYW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYzoyNTg1Olx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNmRldi1cdTAwM2VvZmRldi1cdTAwM2VkZXYsIGJ1cywgbWlpX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg2LVx0aWYgKHJlcykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTEwMjY9aW50IGl4Z2JlX21paV9idXNfaW5pdChzdHJ1Y3QgaXhnYmVfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwODgtXHRhZGFwdGVyLVx1MDAzZW1paV9idXMgPSBidXM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoxMDg5Olx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwOTAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM9Mzg1PWx0cV9ldG9wX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDAyLVx0XHQgcHJpdi1cdTAwM2VwZGV2LVx1MDAzZW5hbWUsIHByaXYtXHUwMDNlcGRldi1cdTAwM2VpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jOjQwMzpcdGlmIChtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWlpX2J1cykpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDA0LVx0XHRlcnIgPSAtRU5YSU87XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYz0yODM9c3RhdGljIGludCBvcmlvbl9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODEtXHQvKiBGb3IgdGhlIHBsYXRmb3JtcyBub3Qgc3VwcG9ydGluZyBEVC9BQ1BJIGZhbGwtYmFja1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODI6XHQgKiB0byBtZGlvYnVzX3JlZ2lzdGVyIHZpYSBvZl9tZGlvYnVzX3JlZ2lzdGVyLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODMtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg0LVx0aWYgKGlzX2FjcGlfbm9kZShwZGV2LVx1MDAzZWRldi5md25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODU6XHRcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4Ni1cdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg3Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4OC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYz0xMzg3PXN0YXRpYyBpbnQgcHhhMTY4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTE1MDQtXHRwZXAtXHUwMDNlc21pX2J1cy1cdTAwM2VwaHlfbWFzayA9IDB4ZmZmZmZmZmY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYzoxNTA1Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihwZXAtXHUwMDNlc21pX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA2LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTk5OD1zdGF0aWMgaW50IG10a19tZGlvX2luaXQoc3RydWN0IG10a19ldGggKmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzctXHRkZXZfZGJnKGV0aC1cdTAwM2VkZXYsIFwmIzM0O01EQyBpcyBydW5uaW5nIG9uICVkIEh6XFxuXCYjMzQ7LCBNRENfTUFYX0ZSRVEgLyBldGgtXHUwMDNlbWRjX2RpdmlkZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYzoxMDM4Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihldGgtXHUwMDNlbWlpX2J1cywgbWlpX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMTAzOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM9MTQyMj1zdGF0aWMgaW50IG10a19zdGFyX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzoxNDQ4Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cdTAwM2VtaWksIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jPTI4Nz1pbnQgbWx4YmZfZ2lnZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBtbHhiZl9naWdlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmMtMzMyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYzozMzM6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzNC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM9MjUzPWludCBmYm5pY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmMtMjcyLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjI2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBEcml2ZXIgYW5kIEVtdWxhdGlvbiBQb3NzaWJpbGl0aWVzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCwgdGhlIGRyaXZlciBmb3IgdGhhdCBBaXJvaGEgRU44ODExSCBhbmQgQU44ODExSEIgRXRoZXJuZXQgUEhZIHRyYW5zY2VpdmVyLiBBaXJvaGEsIHJpZ2h0PyBPZnRlbiBzZWVuIG9uIE1lZGlhVGVrL0Fpcm9oYSByb3V0ZXIgYm9hcmRzIG9yIGRlZGljYXRlZCBuZXR3b3JraW5nIGVxdWlwbWVudC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbnkgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gc3VwcG9ydCwgbGlrZSBpbiBRRU1VIG9yIHdpdGggYSBVU0IgaW50ZXJmYWNlLCBmb3IgdGhhdCBzcGVjaWZpYyBjaGlwPyBUaGUgYW5zd2VyIGlzIHByb2JhYmx5IG5vLgoKVGhlc2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0eXBpY2FsbHkgdGhleSYjMzk7bGwgcmVseSBvbiBzb21ldGhpbmcgbGlrZSBlMTAwMCwgdmlydGlvLW5ldCwgb3IgcnRsODEzOSBuZXR3b3JrIGludGVyZmFjZXMuIE9yLCBwZXJoYXBzIGEgVVNCIEV0aGVybmV0IGRvbmdsZSB1c2luZyBzb21ldGhpbmcgbGlrZSBheDg4MTc5XzE3OGEgb3IgY2RjX2V0aGVyLiBUaGUgdGhpbmcgaXMsIGV2ZW4gKmlmKiB0aGVyZSYjMzk7cyBhbiBNRElPIGJ1cyBhdmFpbGFibGUgaW4gdGhlIGVtdWxhdGVkIE5JQywgdGhhdCBgRU44ODExSF9QSFlfSURgIG9yIGBBTjg4MTFIQl9QSFlfSURgIC0gdGhhdCYjMzk7cyBoYXJkd2FyZS1zcGVjaWZpYy4gQSBkaXJlY3QgZW11bGF0aW9uIGlzIGxpa2VseSBvdXQgb2YgdGhlIHF1ZXN0aW9uLgoKU28sIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGlmIHRoZXJlIGFyZSBhbnkgKndvcmthcm91bmRzKiBmb3IgZ2V0dGluZyB0aGUgZHJpdmVyIGxvYWRlZCBvciBwcm9iZWQgd2l0aGluIFFFTVUuIENhbiBJLCBmb3IgZXhhbXBsZSwgbGV2ZXJhZ2Ugc3l6a2FsbGVyIHRvIGNyZWF0ZSBzb21lIHNvcnQgb2YgbW9jayBNRElPIG9yIFBIWSBkZXZpY2UgZnJvbSB1c2Vyc3BhY2U/IFRpbWUgdG8gaW52ZXN0aWdhdGUgdGhlIHBvc3NpYmlsaXR5IG9mIHVzZXJzcGFjZSBNRElPIG9yIFBIWSBkZXZpY2UgY3JlYXRpb24gaW50ZXJmYWNlcy4gSSYjMzk7bGwgbmVlZCB0byByZXNlYXJjaCwgc2VlIGlmIHRoZXJlIGFyZSBzdGFuZGFyZCBtZXRob2RzIGxpa2UgbmV0bGluaywgc3lzZnMsIG9yIG1heWJlIHNvbWUgaW9jdGwgY2FsbHMgdGhhdCBjb3VsZCBiZSBsZXZlcmFnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9kZXZpY2VfY3JlYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYz0xMTc9aW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMzQtXHRlbHNlXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTM1Olx0XHRwaHkgPSBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCwgMCwgTlVMTCk7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM2LVx0aWYgKElTX0VSUihwaHkpKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU4NS1cdFx0LyogUmVhbCBQSFkgSUQgb2YgUG9ydCAxIGlzIDAgKi9cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjU4NjpcdFx0cGh5ID0gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBQSFlfSURfVEpBMTEwMiwgZmFsc2UsIE5VTEwpO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTg3LVx0XHRpZiAoSVNfRVJSKHBoeSkpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTItXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1OTM6XHRcdC8qIE92ZXJ3cml0ZSBwYXJlbnQgZGV2aWNlLiBwaHlfZGV2aWNlX2NyZWF0ZSgpIHNldCBwYXJlbnQgdG9cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU5NC1cdFx0ICogdGhlIG1paV9idXMtXHUwMDNlZGV2LCB3aGljaCBpcyBub3QgY29ycmVjdCBpbiBjYXNlLlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NzI4PXN0YXRpYyBpbnQgcGh5X3JlcXVlc3RfZHJpdmVyX21vZHVsZShzdHJ1Y3QgcGh5X2RldmljZSAqZGV2LCB1MzIgcGh5X2lkKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNzQ3LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo3NDg6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDktXHRcdFx0XHQgICAgIGJvb2wgaXNfYzQ1LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtODM5LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6ODQwOkVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9jcmVhdGUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy04NDEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMDcxPXN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDk2LVx0XHRpZiAoIXIpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEwOTc6XHRcdFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDk4LVx0XHRcdFx0XHRcdCB0cnVlLCBcdTAwMjZjNDVfaWRzKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDE6XHRyZXR1cm4gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBwaHlfaWQsIGlzX2M0NSwgXHUwMDI2YzQ1X2lkcyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDItfVxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjE2Nz1pbnQgcGh5X21vZGlmeV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSwgdTMyIHJlZ251bSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIxNjktXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIxNzA6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTcxLVx0XHRcdFx0ICAgICBib29sIGlzX2M0NSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyNzQKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogNTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFN0cnVjdHVyYWxseSBVbnJlYWNoYWJsZSBDb2RlLCBOb3QgV29ydGggRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgaG93IHRoaXMgY29kZSBwYXRoIGlzIHRyaWdnZXJlZC4gVGhlIE1ESU8gYnVzIHNlZW1zIGxpa2UgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEkga25vdyB0aGVzZSBidXNlcyBhcmUgdHlwaWNhbGx5IHJlZ2lzdGVyZWQgYnkgRXRoZXJuZXQgTUFDIGRyaXZlcnMgd2hlbiB0aGV5IGRldGVjdCBjb25uZWN0ZWQgUEhZcyB2aWEgcGh5c2ljYWwgTURJTyBsaW5lcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBhaXJfZW44ODExaC5jYCBkcml2ZXIuIFRoaXMgZHJpdmVyIGhhcyBsb2dpYyB0aGF0IHJlbGllcyBvbiBhIHNwZWNpZmljIFBIWSBJRCByZWFkIGZyb20gYSBoYXJkd2FyZSB0cmFuc2NlaXZlciwgaW4gdGhpcyBjYXNlLCB0aGUgQWlyb2hhIEVOODgxMUguCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBlbnZpcm9ubWVudCwgc3RhbmRhcmQgZnV6emluZyBzZXR1cHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBWTXMgb24gYW1kNjQgZG9uJiMzOTt0IHByb3ZpZGUgdGhpcyBoYXJkd2FyZSBvciBhbiBhY2N1cmF0ZSBlbXVsYXRpb24gb2YgaXQuIFRoZSBBaXJvaGEgRU44ODExSCBpcywgaW4gZXNzZW5jZSwgYWJzZW50LgoKSSYjMzk7bGwgY29uc3VsdCBTZWN0aW9uIDIgb2YgdGhlIHRyaWFnZSBndWlkZS4gSXQgZXhwbGljaXRseSBjYWxscyBvdXQgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsJiMzNDsgbWVudGlvbmluZyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyAobGlrZSBtbHhzdywgcGRzX2NvcmUsIGV0Yy4pLCB0aGF0IHJlbHkgb24gcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0IGlzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXRjaCBhbmQgdGhlIHJlbGV2YW50IGRyaXZlciwgcmlnaHQgbm93LgoKVGhlIGd1aWRlIGVtcGhhc2l6ZXMgdGhhdCByZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZS4gSSBjYW4gb25seSBmdXp6IGNvZGUgdGhhdCAqY2FuKiBhY3R1YWxseSBleGVjdXRlIHdpdGhpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJZiB0aGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDIsIGl0IHNob3VsZCAqbm90KiBiZSBmdXp6ZWQsIHJlZ2FyZGxlc3Mgb2YgY29tcGxleGl0eSBvciBhZGRlZCBhc3NlcnRpb25zLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgcGFja2FnZSB2YXJpYW50IGRldGVjdGlvbiBpbiBgYW44ODExaGJfcHJvYmVgIGFuZCB1c2VzIHRoZSBgQU44ODExSEJfSFdUUkFQMmAgcmVnaXN0ZXIgdG8gYWRqdXN0IExFRCBHUElPIHNldHVwIGR1cmluZyBwcm9iZSBhbmQgY29uZmlnIGluaXRpYWxpemF0aW9uLgoKTm93IHRoZSBxdWVzdGlvbiByZW1haW5zOiBpcyBgYWlyX2VuODgxMWguY2AgcmVhY2hhYmxlPyBUaGUgYW5zd2VyIGlzIG5vLiBJdCBkZXBlbmRzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgQWlyb2hhIEVOODgxMUggaGFyZHdhcmUgb3IgYSBwaHlzaWNhbCBNRElPIGJ1cyBjb25uZWN0ZWQgdG8gaXQsIHdoaWNoIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHRoZSB0eXBpY2FsIFFFTVUvR0NFIGVudmlyb25tZW50cy4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgZmFsbHMgdW5kZXIgdGhlICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgY2F0ZWdvcnkuIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4KCkxldCYjMzk7cyBtYWtlIHN1cmUgb3VyIHJlc3VsdHMgcmVmbGVjdCB0aGlzOgoqICAgYEZvY3VzU3ltYm9sczogW11gCiogICBgRW5hYmxlQ29uZmlnczogW11gCiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWAKKiAgIGBSZWFzb25pbmc6IENvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHZlcmRpY3QuYAoKQW5kIG5vdyBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIEVOODgxMUggLyBBTjg4MTFIQiBFdGhlcm5ldCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYykgdG8gaGFuZGxlIHBhY2thZ2UgdmFyaWFudCBkZXRlY3Rpb24gYW5kIExFRCBHUElPIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSByZXF1aXJlcyBkZWRpY2F0ZWQgcGh5c2ljYWwgQWlyb2hhIFBIWSBoYXJkd2FyZSBvbiBhbiBNRElPIGJ1cyBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgaXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIC8gQU44ODExSEIgRXRoZXJuZXQgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMpIHRvIGhhbmRsZSBwYWNrYWdlIHZhcmlhbnQgZGV0ZWN0aW9uIGFuZCBMRUQgR1BJTyBjb25maWd1cmF0aW9uLiBUaGlzIGNvZGUgcmVxdWlyZXMgZGVkaWNhdGVkIHBoeXNpY2FsIEFpcm9oYSBQSFkgaGFyZHdhcmUgb24gYW4gTURJTyBidXMgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIGl0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjozNToyNi40NTM1NTY3NzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjExNTQ0ODU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU44ODExSCAvIEFOODgxMUhCIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBoYW5kbGUgcGFja2FnZSB2YXJpYW50IGRldGVjdGlvbiBhbmQgTEVEIEdQSU8gY29uZmlndXJhdGlvbi4gVGhpcyBjb2RlIHJlcXVpcmVzIGRlZGljYXRlZCBwaHlzaWNhbCBBaXJvaGEgUEhZIGhhcmR3YXJlIG9uIGFuIE1ESU8gYnVzIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjozNToyNi40NTM1NjExNzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDY4MTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNhYjYxMjdjY2VmOWRlMWU2M2U3MzcwMWE2N2NkNmZjYjc2YmU1OWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAwNjozNToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXFxuaW5kZXggMzhlYjE4ZjBlOWJiNC4uYWUyNGM0MWY1MzhhYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXFxuQEAgLTE0NSwxMCArMTQ1LDIyIEBAXFxuIFxcbiAjZGVmaW5lIEFOODgxMUhCX0dQSU9fT1VUUFVUXFx0XFx0MHg1Y2Y4YjhcXG4gI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NVxcdFxcdChCSVQoMykgfCBCSVQoNCkgfCBCSVQoNSkpXFxuKyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX09VVFBVVF8wMTE1XFx0XFx0KEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgxNSkpXFxuK1xcbisjZGVmaW5lIEFOODgxMUhCX0dQSU9fU0VMMVxcdFxcdDB4NWNmOGJjXFxuKyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMF9NQVNLXFx0XFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lICAgQU44ODExSEJfR1BJT19TRUwxXzFfTUFTS1xcdFxcdEdFTk1BU0soNywgNClcXG4rI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMV8wXFx0XFx0XFx0QklUKDApXFxuKyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMVxcdFxcdFxcdDBcXG4rXFxuKyNkZWZpbmUgQU44ODExSEJfR1BJT19TRUwyXFx0XFx0MHg1Y2Y4YzBcXG4rI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMl8xNV9NQVNLXFx0XFx0R0VOTUFTSygzMSwgMjgpXFxuKyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDJfMTVcXHRcXHRcXHRCSVQoMjkpXFxuIFxcbiAjZGVmaW5lIEFOODgxMUhCX0hXVFJBUDFcXHRcXHQweDVjZjkxMFxcbiAjZGVmaW5lIEFOODgxMUhCX0hXVFJBUDJcXHRcXHQweDVjZjkxNFxcbiAjZGVmaW5lICAgQU44ODExSEJfSFdUUkFQMl9DS09cXHRcXHRcXHRCSVQoMjgpXFxuKyNkZWZpbmUgICBBTjg4MTFIQl9IV1RSQVAyX1BLR1xcdFxcdFxcdEdFTk1BU0soMTQsIDEyKVxcbiBcXG4gI2RlZmluZSBBTjg4MTFIQl9DTEtfRFJWXFx0XFx0MHg1Y2Y5ZTRcXG4gI2RlZmluZSBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLXFx0XFx0R0VOTUFTSygxNCwgMTIpXFxuQEAgLTIwMiw2ICsyMTQsNyBAQCBzdHJ1Y3QgZW44ODExaF9wcml2IHtcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2VcXHQqcGh5ZGV2O1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRja29faXNfZW5hYmxlZDtcXG4gXFx0c3RydWN0IG1kaW9fZGV2aWNlXFx0KnBidXNkZXY7XFxuK1xcdGJvb2xcXHRcXHRcXHRpc19hbjg4MTFoYmNuO1xcbiB9O1xcbiBcXG4gZW51bSB7XFxuQEAgLTEwNzEsMTAgKzEwODQsNDkgQEAgc3RhdGljIGludCBlbjg4MTFoX2xlZHNfc2V0dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBhbjg4MTFoYl9sZWRfZ3Bpb19zZXR1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaXNfYW44ODExaGJjbikge1xcbitcXHRcXHQvKiBBTjg4MTFIQkNOOiBMRUQgR1BJT3MgYXJlIDAsIDEsIDE1ICovXFxuK1xcdFxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0dQSU9fT1VUUFVULFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzAxMTUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMDExNSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19TRUwxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFOODgxMUhCX0dQSU9fU0VMMV8wX01BU0sgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFOODgxMUhCX0dQSU9fU0VMMV8xX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfR1BJT19TRUwxXzAgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFOODgxMUhCX0dQSU9fU0VMMV8xKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX1NFTDIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfR1BJT19TRUwyXzE1X01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfR1BJT19TRUwyXzE1KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIEFOODgxMUhCTjogTEVEIEdQSU9zIGFyZSAzLCA0LCA1ICovXFxuK1xcdFxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0dQSU9fT1VUUFVULFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBBTjg4MTFIQl9HUElPX09VVFBVVF8zNDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuIFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXY7XFxuK1xcdHUzMiByZWdfdmFsO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgc2l6ZW9mKHN0cnVjdCBlbjg4MTFoX3ByaXYpLFxcbkBAIC0xMTE1LDYgKzExNjcsMTIgQEAgc3RhdGljIGludCBhbjg4MTFoYl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHQvKiBNRElPX0RFVlMxLzIgZW1wdHksIHNvIHNldCBtbWRzX3ByZXNlbnQgYml0cyBoZXJlICovXFxuIFxcdHBoeWRldi1cXHUwMDNlYzQ1X2lkcy5tbWRzX3ByZXNlbnQgfD0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19BTjtcXG4gXFxuK1xcdC8qIERldGVjdCBwYWNrYWdlIHZhcmlhbnQgKi9cXG4rXFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIEFOODgxMUhCX0hXVFJBUDIsIFxcdTAwMjZyZWdfdmFsKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX2Rldl9jcmVhdGU7XFxuK1xcdHByaXYtXFx1MDAzZWlzX2FuODgxMWhiY24gPSBGSUVMRF9HRVQoQU44ODExSEJfSFdUUkFQMl9QS0csIHJlZ192YWwpO1xcbitcXG4gXFx0cmV0ID0gZW44ODExaF9sZWRzX3NldHVwKHBoeWRldik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9kZXZfY3JlYXRlO1xcbkBAIC0xMjYzLDEwICsxMzIxLDExIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogUmVzdG9yZSBMRUQgR1BJTyBvdXRwdXQgZW5hYmxlcyBhZnRlciBNQ1UgaW5pdGlhbGl6YXRpb24uICovXFxuLVxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0dQSU9fT1VUUFVULFxcbi1cXHRcXHRcXHRcXHRcXHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBBTjg4MTFIQl9HUElPX09VVFBVVF8zNDUpO1xcbitcXHRyZXQgPSBhbjg4MTFoYl9sZWRfZ3Bpb19zZXR1cChwaHlkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkZhaWxlZCB0byBzZXQgdXAgTEVEIEdQSU86ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjI3LjA5ODkyMTIxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDE0NzAwNzI3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU44ODExSCAvIEFOODgxMUhCIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBoYW5kbGUgcGFja2FnZSB2YXJpYW50IGRldGVjdGlvbiBhbmQgTEVEIEdQSU8gY29uZmlndXJhdGlvbi4gVGhpcyBjb2RlIHJlcXVpcmVzIGRlZGljYXRlZCBwaHlzaWNhbCBBaXJvaGEgUEhZIGhhcmR3YXJlIG9uIGFuIE1ESU8gYnVzIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNhYjYxMjdjY2VmOWRlMWU2M2U3MzcwMWE2N2NkNmZjYjc2YmU1OWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA2OjM1OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuaW5kZXggMzhlYjE4ZjBlOWJiNC4uYWUyNGM0MWY1MzhhYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuQEAgLTE0NSwxMCArMTQ1LDIyIEBAXG4gXG4gI2RlZmluZSBBTjg4MTFIQl9HUElPX09VVFBVVFx0XHQweDVjZjhiOFxuICNkZWZpbmUgICBBTjg4MTFIQl9HUElPX09VVFBVVF8zNDVcdFx0KEJJVCgzKSB8IEJJVCg0KSB8IEJJVCg1KSlcbisjZGVmaW5lICAgQU44ODExSEJfR1BJT19PVVRQVVRfMDExNVx0XHQoQklUKDApIHwgQklUKDEpIHwgQklUKDE1KSlcbitcbisjZGVmaW5lIEFOODgxMUhCX0dQSU9fU0VMMVx0XHQweDVjZjhiY1xuKyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMF9NQVNLXHRcdEdFTk1BU0soMywgMClcbisjZGVmaW5lICAgQU44ODExSEJfR1BJT19TRUwxXzFfTUFTS1x0XHRHRU5NQVNLKDcsIDQpXG4rI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMV8wXHRcdFx0QklUKDApXG4rI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMV8xXHRcdFx0MFxuK1xuKyNkZWZpbmUgQU44ODExSEJfR1BJT19TRUwyXHRcdDB4NWNmOGMwXG4rI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMl8xNV9NQVNLXHRcdEdFTk1BU0soMzEsIDI4KVxuKyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDJfMTVcdFx0XHRCSVQoMjkpXG4gXG4gI2RlZmluZSBBTjg4MTFIQl9IV1RSQVAxXHRcdDB4NWNmOTEwXG4gI2RlZmluZSBBTjg4MTFIQl9IV1RSQVAyXHRcdDB4NWNmOTE0XG4gI2RlZmluZSAgIEFOODgxMUhCX0hXVFJBUDJfQ0tPXHRcdFx0QklUKDI4KVxuKyNkZWZpbmUgICBBTjg4MTFIQl9IV1RSQVAyX1BLR1x0XHRcdEdFTk1BU0soMTQsIDEyKVxuIFxuICNkZWZpbmUgQU44ODExSEJfQ0xLX0RSVlx0XHQweDVjZjllNFxuICNkZWZpbmUgQU44ODExSEJfQ0xLX0RSVl9DS09fTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbkBAIC0yMDIsNiArMjE0LDcgQEAgc3RydWN0IGVuODgxMWhfcHJpdiB7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZVx0KnBoeWRldjtcbiBcdHVuc2lnbmVkIGludFx0XHRja29faXNfZW5hYmxlZDtcbiBcdHN0cnVjdCBtZGlvX2RldmljZVx0KnBidXNkZXY7XG4rXHRib29sXHRcdFx0aXNfYW44ODExaGJjbjtcbiB9O1xuIFxuIGVudW0ge1xuQEAgLTEwNzEsMTAgKzEwODQsNDkgQEAgc3RhdGljIGludCBlbjg4MTFoX2xlZHNfc2V0dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYW44ODExaGJfbGVkX2dwaW9fc2V0dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYW44ODExaGJjbikge1xuK1x0XHQvKiBBTjg4MTFIQkNOOiBMRUQgR1BJT3MgYXJlIDAsIDEsIDE1ICovXG4rXHRcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0dQSU9fT1VUUFVULFxuK1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMDExNSxcbitcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzAxMTUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0dQSU9fU0VMMSxcbitcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMV8wX01BU0sgfFxuK1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19TRUwxXzFfTUFTSyxcbitcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMV8wIHxcbitcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMV8xKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX1NFTDIsXG4rXHRcdFx0XHRcdFx0ICBBTjg4MTFIQl9HUElPX1NFTDJfMTVfTUFTSyxcbitcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMl8xNSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIEFOODgxMUhCTjogTEVEIEdQSU9zIGFyZSAzLCA0LCA1ICovXG4rXHRcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0dQSU9fT1VUUFVULFxuK1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1LFxuK1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4gXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2O1xuK1x0dTMyIHJlZ192YWw7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcbkBAIC0xMTE1LDYgKzExNjcsMTIgQEAgc3RhdGljIGludCBhbjg4MTFoYl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0LyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqL1xuIFx0cGh5ZGV2LVx1MDAzZWM0NV9pZHMubW1kc19wcmVzZW50IHw9IE1ESU9fREVWU19QTUFQTUQgfCBNRElPX0RFVlNfQU47XG4gXG4rXHQvKiBEZXRlY3QgcGFja2FnZSB2YXJpYW50ICovXG4rXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgQU44ODExSEJfSFdUUkFQMiwgXHUwMDI2cmVnX3ZhbCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9kZXZfY3JlYXRlO1xuK1x0cHJpdi1cdTAwM2Vpc19hbjg4MTFoYmNuID0gRklFTERfR0VUKEFOODgxMUhCX0hXVFJBUDJfUEtHLCByZWdfdmFsKTtcbitcbiBcdHJldCA9IGVuODgxMWhfbGVkc19zZXR1cChwaHlkZXYpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZGV2X2NyZWF0ZTtcbkBAIC0xMjYzLDEwICsxMzIxLDExIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdC8qIFJlc3RvcmUgTEVEIEdQSU8gb3V0cHV0IGVuYWJsZXMgYWZ0ZXIgTUNVIGluaXRpYWxpemF0aW9uLiAqL1xuLVx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19PVVRQVVQsXG4tXHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1LFxuLVx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSk7XG4rXHRyZXQgPSBhbjg4MTFoYl9sZWRfZ3Bpb19zZXR1cChwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJGYWlsZWQgdG8gc2V0IHVwIExFRCBHUElPOiAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjozNToyNy4wOTg5MjI1MDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDYyOTM2MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCdzIHdvcnRoIG91ciB0aW1lIHRvIHRocm93IGl0IGludG8gdGhlIHN5emthbGxlciBmdXp6aW5nIGdyaW5kZXIuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LlxuXG5SaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AuIEhtbSwgYW4gRXRoZXJuZXQgUEhZIGRyaXZlciDigJMgdGhlIEFpcm9oYSBFTjg4MTFIL0FOODgxMUhCIEdpZ2FiaXQgRXRoZXJuZXQgUEhZIGRyaXZlciwgdG8gYmUgcHJlY2lzZS4gVGhhdCBnaXZlcyBtZSBhIGdlbmVyYWwgaWRlYS5cblxuTm93LCB0byByZWFsbHkgZGV0ZXJtaW5lIGl0cyBmdXp6aW5nIHZhbHVlLCBJIG5lZWQgdG8gY2hlY2sgaXRzIHJlYWNoYWJpbGl0eSB3aXRoaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBLY29uZmlnLCB0aGUgZHJpdmVyJ3MgZGVwZW5kZW5jaWVzLCBhbmQgaWYgaXQncyBvbiB0aGUgTURJTyBidXMsIGFsbCBoYXZlIGEgYmVhcmluZyBvbiB0aGlzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gc2VlIGlmIHdlIGNhbiBnZXQgdG8gaXQgaW4gUUVNVSBvciBHQ0UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZXZlbiBjb21waWxlZCBhbmQgbGlua2VkLlxuXG5UaW1lIHRvIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSwgb3IgbG9vayBhdCBleGlzdGluZyBzeXprYWxsZXIgY29uZmlncywgdG8gc2VlIHdoZXJlIGBhaXJfZW44ODExaC5jYCBvciwgbW9yZSBicm9hZGx5LCBFdGhlcm5ldCBQSFkgZHJpdmVycywgYXJlIHVzZWQgYW5kIGNvbmZpZ3VyZWQuIEtub3dpbmcgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGJyb3VnaHQgaW50byBwbGF5IHdpbGwgdGVsbCBtZSBpZiB0aGUgYXR0YWNrIHN1cmZhY2UgaXMgZXhwb3NlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBwYXRoIHRvIGV4cGxvaXRhdGlvbiwgYW5kIHdoZXRoZXIgYSBmdXp6aW5nIHRhcmdldCBpcyBqdXN0aWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NTgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjozNTozMy41NjE4NjEwMjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNTc0NzQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJfZW44ODExaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX0FJUl9BTjg4MDFfUEhZKVxcdCs9IGFpcl9hbjg4MDEub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQUlSX0VOODgxMUhfUEhZKSAgICs9IGFpcl9lbjg4MTFoLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMzUtb2JqLSQoQ09ORklHX0FJUl9ORVRfUEhZTElCKVxcdCs9IGFpcl9waHlfbGliLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMzI0LS8qIExFRCBiYXNpYyBjb250cm9sIHJlZ2lzdGVyLCBwYXJ0IG9mIHRoZSBzYW1lIExFRCBibG9jayBhcyB0aGUgTEVEMC9MRUQxXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYzozMjU6ICogY29udHJvbCByZWdpc3RlcnMgYWJvdmUuIFRoZSBhaXJfZW44ODExaCBkcml2ZXIgZGVzY3JpYmVzIHRoZSBzYW1lXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjYtICogcmVnaXN0ZXIgYXMgQUlSX1BIWV9MRURfQkNSLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYz0xNDgyPXN0YXRpYyBpbnQgZW43NTI4X3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNDg2LVxcdCAqIHByb2dyYW1tZWQgaW50byB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXJzLiBIYW5kIHRoZSBwaW5zIG92ZXIgdG9cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjE0ODc6XFx0ICogdGhlIExFRCBjb250cm9sIHJlZ2lzdGVycyB0aGUgc2FtZSB3YXkgdGhlIGFpcl9lbjg4MTFoIGRyaXZlclxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTQ4OC1cXHQgKiBkb2VzOyB0aGUgbW9kZSBmaWVsZCBvZiB0aGlzIHJlZ2lzdGVyIGlzIGFscmVhZHkgc2V0IG91dCBvZiByZXNldC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6MzUuNzY3NjE0MTgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5MDQ1MzQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHJldmlld2luZyB0aGlzOlxuXG4qKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIEFpci1FTjg4MTFIIFBIWSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQWlyLUVOODgxMUggUEhZLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGRyaXZlcidzIG5ldHdvcmsgUEhZIGRpcmVjdG9yeS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBkZWZpbmVkIGFuZCBjb250cm9sbGVkLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBhcm91bmQgdGhlIGBDT05GSUdfQUlSX0VOODgxMUhfUEhZYCBzeW1ib2wuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBkcml2ZXIncyBiZWhhdmlvciBpcyBsaWtlbHkgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBjb25kaXRpb25zIGVuYWJsZSB0aGlzIGRldmljZSwgd2hpY2ggbWlnaHQgaW52b2x2ZSBkZXBlbmRlbmN5IGNoZWNrcyBvbiBvdGhlciBoYXJkd2FyZSBvciBzb2Z0d2FyZSBmZWF0dXJlcywgYW5kIGFueSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBzZWUgaWYgdGhpcyBoYXMgYmVlbiBjb25maWd1cmVkIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mzc2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6MzcuOTU4MDY5NzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyNDM3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQUlSX0VOODgxMUhfUEhZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZz05Mz1jb25maWcgQUlSX0FOODgwMV9QSFlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk5OmNvbmZpZyBBSVJfRU44ODExSF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMDAtXFx0dHJpc3RhdGUgXFxcIkFpcm9oYSBFTjg4MTFIIDIuNSBHaWdhYml0IFBIWVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQUlSX0FOODgwMV9QSFkpXFx0Kz0gYWlyX2FuODgwMS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19BSVJfRU44ODExSF9QSFkpICAgKz0gYWlyX2VuODgxMWgub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zNS1vYmotJChDT05GSUdfQUlSX05FVF9QSFlMSUIpXFx0Kz0gYWlyX3BoeV9saWIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjozNTozOC4wMDYzMjE2NjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjc5NzQ3MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGFpcl9lbjg4MTFoLmNgIGRyaXZlciBob29rcyBpbnRvIHRoZSBzeXN0ZW0sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGl0cyBQSFkgZHJpdmVyIHJlZ2lzdHJhdGlvbi4gTXkgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBkZXZpY2UgaXQncyBkZXNpZ25lZCB0byBiaW5kIHRvLiBJJ2xsIHplcm8gaW4gb24gdGhlIGBwaHlfZHJpdmVyYCByZWdpc3RyYXRpb24gc2VjdGlvbiB3aXRoaW4gdGhlIGNvZGUuIFRoYXQncyB0aGUga2V5LiBCeSBhbmFseXppbmcgaG93IGBwaHlfZHJpdmVyYCBpcyBoYW5kbGVkLCBJIHNob3VsZCBiZSBhYmxlIHRvIGRlZHVjZSB0aGUgaW50ZW5kZWQgdGFyZ2V0IGhhcmR3YXJlLiBUaGlzIGlzIHJvdXRpbmUsIGJ1dCBlc3NlbnRpYWwgd2hlbiBhc3Nlc3NpbmcgYSBuZXcgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6NDAuNjg2MDcxMTgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMDA6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4xMzAxOlxcdFxcdGludCByZXQ7XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdC8qIElmIHJlc3RhcnQgaGFwcGVuZWQgaW4gLnByb2JlKCksIG5vIG5lZWQgdG8gcmVzdGFydCBub3cgKi9cXG4xMzA0OlxcdFxcdGlmIChwcml2LVxcdTAwM2VtY3VfbmVlZHNfcmVzdGFydCkge1xcbjEzMDU6XFx0XFx0XFx0cmV0ID0gZW44ODExaF9yZXN0YXJ0X21jdShwaHlkZXYpO1xcbjEzMDY6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTMwNzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMDg6XFx0XFx0fSBlbHNlIHtcXG4xMzA5OlxcdFxcdFxcdC8qIE5leHQgY2FsbHMgdG8gLmNvbmZpZ19pbml0KCkgbWN1IG5lZWRzIHRvIHJlc3RhcnQgKi9cXG4xMzEwOlxcdFxcdFxcdHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gdHJ1ZTtcXG4xMzExOlxcdFxcdH1cXG4xMzEyOlxcdFxcbjEzMTM6XFx0XFx0cmV0ID0gYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShwaHlkZXYpO1xcbjEzMTQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTMxNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMTY6XFx0XFxuMTMxNzpcXHRcXHRyZXQgPSBhaXJfbGVkc19pbml0KHBoeWRldiwgRU44ODExSF9MRURfQ09VTlQsIEFJUl9QSFlfTEVEX0RVUixcXG4xMzE4OlxcdFxcdFxcdFxcdCAgICBBSVJfTEVEX01PREVfVVNFUl9ERUZJTkUpO1xcbjEzMTk6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xMzIwOlxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbGVkczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTMyMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMjI6XFx0XFx0fVxcbjEzMjM6XFx0XFxuMTMyNDpcXHRcXHRyZXQgPSBhbjg4MTFoYl9sZWRfZ3Bpb19zZXR1cChwaHlkZXYpO1xcbjEzMjU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xMzI2OlxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmFpbGVkIHRvIHNldCB1cCBMRUQgR1BJTzogJWRcXFxcblxcXCIsIHJldCk7XFxuMTMyNzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMjg6XFx0XFx0fVxcbjEzMjk6XFx0XFx0cmV0dXJuIHJldDtcXG4xMzMwOlxcdH1cXG4xMzMxOlxcdFxcbjEzMzI6XFx0c3RhdGljIGludCBlbjg4MTFoX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTMzMzpcXHR7XFxuMTMzNDpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbjEzMzU6XFx0XFx0aW50IHJldDtcXG4xMzM2OlxcdFxcbjEzMzc6XFx0XFx0LyogSWYgcmVzdGFydCBoYXBwZW5lZCBpbiAucHJvYmUoKSwgbm8gbmVlZCB0byByZXN0YXJ0IG5vdyAqL1xcbjEzMzg6XFx0XFx0aWYgKHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0KSB7XFxuMTMzOTpcXHRcXHRcXHRyZXQgPSBlbjg4MTFoX3Jlc3RhcnRfbWN1KHBoeWRldik7XFxuMTM0MDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzQxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTM0MjpcXHRcXHR9IGVsc2Uge1xcbjEzNDM6XFx0XFx0XFx0LyogTmV4dCBjYWxscyB0byAuY29uZmlnX2luaXQoKSBtY3UgbmVlZHMgdG8gcmVzdGFydCAqL1xcbjEzNDQ6XFx0XFx0XFx0cHJpdi1cXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSB0cnVlO1xcbjEzNDU6XFx0XFx0fVxcbjEzNDY6XFx0XFxuMTM0NzpcXHRcXHQvKiBTZWxlY3QgbW9kZSAxLCB0aGUgb25seSBtb2RlIHN1cHBvcnRlZC5cXG4xMzQ4OlxcdFxcdCAqIENvbmZpZ3VyZXMgdGhlIFNlckRlcyBmb3IgMjUwMEJhc2UtWCB3aXRoIHJhdGUgYWRhcHRhdGlvblxcbjEzNDk6XFx0XFx0ICovXFxuMTM1MDpcXHRcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF8xLFxcbjEzNTE6XFx0XFx0XFx0XFx0ICAgIEFJUl9QSFlfTUNVX0NNRF8xX01PREUxKTtcXG4xMzUyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzNTM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzU0OlxcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzIsXFxuMTM1NTpcXHRcXHRcXHRcXHQgICAgQUlSX1BIWV9NQ1VfQ01EXzJfTU9ERTEpO1xcbjEzNTY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTM1NzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzNTg6XFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMyxcXG4xMzU5OlxcdFxcdFxcdFxcdCAgICBBSVJfUEhZX01DVV9DTURfM19NT0RFMSk7XFxuMTM2MDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzYxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTM2MjpcXHRcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF80LFxcbjEzNjM6XFx0XFx0XFx0XFx0ICAgIEFJUl9QSFlfTUNVX0NNRF80X01PREUxKTtcXG4xMzY0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzNjU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzY2OlxcdFxcbjEzNjc6XFx0XFx0cmV0ID0gZW44ODExaF9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHBoeWRldik7XFxuMTM2ODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzY5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTM3MDpcXHRcXG4xMzcxOlxcdFxcdHJldCA9IGFpcl9sZWRzX2luaXQocGh5ZGV2LCBFTjg4MTFIX0xFRF9DT1VOVCwgQUlSX1BIWV9MRURfRFVSLFxcbjEzNzI6XFx0XFx0XFx0XFx0ICAgIEFJUl9MRURfTU9ERV9VU0VSX0RFRklORSk7XFxuMTM3MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjEzNzQ6XFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBsZWRzOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMzc1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTM3NjpcXHRcXHR9XFxuMTM3NzpcXHRcXG4xMzc4OlxcdFxcdC8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dC4gTXVzdCBiZSByZWRvbmUgb24gZXZlcnlcXG4xMzc5OlxcdFxcdCAqIC5jb25maWdfaW5pdCgpLCBub3QganVzdCBvbmNlIGluIC5wcm9iZSgpOiBlbjg4MTFoX3Jlc3RhcnRfbWN1KClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6NDAuNjg2MTg2ODk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg5Njk0NDY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBQSFkgZGV2aWNlIG1hdGNoaW5nIGFuZCBwcm9iaW5nIHdvcmtzLCBiYXNlZCBvbiB0aGUgZmlsZSBuYW1lIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2A6XG5cbioqUHJvYmluZyB0aGUgQWlyLUVOODgxMUggUEhZKipcblxuUmlnaHQsIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgYW5kIGluaXRpYWxpemVzIHRoaXMgcGFydGljdWxhciBQSFkg4oCTIHRoZSBBaXItRU44ODExSC4gR2l2ZW4gdGhlIGZpbGUgcGF0aCwgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCwgbXkgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29udGVudHMgb2YgdGhhdCBmaWxlLiBJJ20gZ29pbmcgdG8gcG9yZSBvdmVyIGl0IHRvIHVuZGVyc3RhbmQgdGhlIG1hdGNoaW5nIHByb2Nlc3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGUgc3lzdGVtIGRldGVybWluZXMgd2hldGhlciBhIGNvbm5lY3RlZCBQSFkgaXMgKmFjdHVhbGx5KiBhbiBBaXItRU44ODExSCBhbmQgdGhlbiBob3cgaXQncyBicm91Z2h0IG9ubGluZSwgYmFzaWNhbGx5IHByb2JpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRldmljZSdzIGlkZW50aWZpY2F0aW9uIGRhdGEsIGhvdyBpdCdzIGhhbmRsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiwgYW5kIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgbmVlZGVkLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgc3RhbmRhcmQgUEhZIGRyaXZlciBmcmFtZXdvcmsgZWxlbWVudHMsIGJ1dCB0aGUgY3J1Y2lhbCBiaXRzIHdpbGwgYmUgdGhlIHNwZWNpZmljcyByZWxhdGVkIHRvICp0aGlzKiBwYXJ0aWN1bGFyIFBIWSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JrIHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4gYW5kIGdldCBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6NDMuNTgzMTM0MjI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdFxcdGludCByZXQ7XFxuMTQxMTpcXHRcXHR1MzIgYWR2O1xcbjE0MTI6XFx0XFxuMTQxMzpcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VhdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkge1xcbjE0MTQ6XFx0XFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiRGlzYWJsaW5nIGF1dG9uZWcgaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuMTQxNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDE2OlxcdFxcdH1cXG4xNDE3OlxcdFxcbjE0MTg6XFx0XFx0YWR2ID0gbGlua21vZGVfYWR2X3RvX21paV8xMGdidF9hZHZfdChwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKTtcXG4xNDE5OlxcdFxcbjE0MjA6XFx0XFx0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXFxuMTQyMTpcXHRcXHRcXHRcXHRcXHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLCBhZHYpO1xcbjE0MjI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTQyMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0MjQ6XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuMTQyNTpcXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4xNDI2OlxcdFxcbjE0Mjc6XFx0XFx0cmV0dXJuIF9fZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldiwgY2hhbmdlZCk7XFxuMTQyODpcXHR9XFxuMTQyOTpcXHRcXG4xNDMwOlxcdHN0YXRpYyBpbnQgZW44ODExaF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjE0MzE6XFx0e1xcbjE0MzI6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4xNDMzOlxcdFxcdHUzMiBwYnVzX3ZhbHVlO1xcbjE0MzQ6XFx0XFx0aW50IHJldCwgdmFsO1xcbjE0MzU6XFx0XFxuMTQzNjpcXHRcXHRyZXQgPSBnZW5waHlfdXBkYXRlX2xpbmsocGh5ZGV2KTtcXG4xNDM3OlxcdFxcdGlmIChyZXQpXFxuMTQzODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0Mzk6XFx0XFxuMTQ0MDpcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1VOU1VQUE9SVEVEO1xcbjE0NDE6XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5TVVBQT1JURUQ7XFxuMTQ0MjpcXHRcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcXG4xNDQzOlxcdFxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuMTQ0NDpcXHRcXHRwaHlkZXYtXFx1MDAzZXBhdXNlID0gMDtcXG4xNDQ1OlxcdFxcdHBoeWRldi1cXHUwMDNlYXN5bV9wYXVzZSA9IDA7XFxuMTQ0NjpcXHRcXHRwaHlkZXYtXFx1MDAzZXJhdGVfbWF0Y2hpbmcgPSBSQVRFX01BVENIX1BBVVNFO1xcbjE0NDc6XFx0XFxuMTQ0ODpcXHRcXHRyZXQgPSBnZW5waHlfcmVhZF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcXG4xNDQ5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0NTA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDUxOlxcdFxcbjE0NTI6XFx0XFx0cmV0ID0gZ2VucGh5X3JlYWRfbHBhKHBoeWRldik7XFxuMTQ1MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDU0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdGlmIChwaHlfaWRfY29tcGFyZV9tb2RlbChwaHlkZXYtXFx1MDAzZXBoeV9pZCwgQU44ODExSEJfUEhZX0lEKSkge1xcbjE0NTc6XFx0XFx0XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XFxuMTQ1ODpcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4xNDU5OlxcdFxcdFxcdFxcdHJldHVybiB2YWw7XFxuMTQ2MDpcXHRcXHRcXHRsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4xNDYxOlxcdFxcdFxcdFxcdFxcdCBwaHlkZXYtXFx1MDAzZWxwX2FkdmVydGlzaW5nLFxcbjE0NjI6XFx0XFx0XFx0XFx0XFx0IHZhbCBcXHUwMDI2IE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUcpO1xcbjE0NjM6XFx0XFx0fSBlbHNlIHtcXG4xNDY0OlxcdFxcdFxcdC8qIEdldCBsaW5rIHBhcnRuZXIgMi41R0JBU0UtVCBhYmlsaXR5IGZyb20gdmVuZG9yIHJlZ2lzdGVyICovXFxuMTQ2NTpcXHRcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgRU44ODExSF8yUDVHX0xQQSxcXG4xNDY2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZwYnVzX3ZhbHVlKTtcXG4xNDY3OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0Njg6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDY5OlxcdFxcdFxcdGxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbjE0NzA6XFx0XFx0XFx0XFx0XFx0IHBoeWRldi1cXHUwMDNlbHBfYWR2ZXJ0aXNpbmcsXFxuMTQ3MTpcXHRcXHRcXHRcXHRcXHQgcGJ1c192YWx1ZSBcXHUwMDI2IEVOODgxMUhfMlA1R19MUEFfMlA1Ryk7XFxuMTQ3MjpcXHRcXHR9XFxuMTQ3MzpcXHRcXG4xNDc0OlxcdFxcdGlmIChwaHlkZXYtXFx1MDAzZWF1dG9uZWdfY29tcGxldGUpXFxuMTQ3NTpcXHRcXHRcXHRwaHlfcmVzb2x2ZV9hbmVnX3BhdXNlKHBoeWRldik7XFxuMTQ3NjpcXHRcXG4xNDc3OlxcdFxcdGlmICghcGh5ZGV2LVxcdTAwM2VsaW5rKVxcbjE0Nzg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTQ3OTpcXHRcXG4xNDgwOlxcdFxcdC8qIEdldCByZWFsIHNwZWVkIGZyb20gdmVuZG9yIHJlZ2lzdGVyICovXFxuMTQ4MTpcXHRcXHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIEFJUl9BVVhfQ1RSTF9TVEFUVVMpO1xcbjE0ODI6XFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuMTQ4MzpcXHRcXHRcXHRyZXR1cm4gdmFsO1xcbjE0ODQ6XFx0XFx0c3dpdGNoICh2YWwgXFx1MDAyNiBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEX01BU0spIHtcXG4xNDg1OlxcdFxcdGNhc2UgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8yNTAwOlxcbjE0ODY6XFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IFNQRUVEXzI1MDA7XFxuMTQ4NzpcXHRcXHRcXHRicmVhaztcXG4xNDg4OlxcdFxcdGNhc2UgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8xMDAwOlxcbjE0ODk6XFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjQzLjU4MzI1MjgzNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTY1MzE1MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgQWlyLUVOODgxMUggUEhZIERyaXZlcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoaXMgYGFpcl9lbjg4MTFoLmNgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcGh5YCBkaXJlY3RvcnkuIEkgbmVlZCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgaGVyZS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBtb2R1bGUgZGVmaW5pdGlvbiBhbmQgdGhlIGFsbC1pbXBvcnRhbnQgYHBoeV9kcml2ZXJgIHN0cnVjdC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgZHJpdmVyJ3MgaW50ZXJmYWNlIGlzIGRlZmluZWQg4oCTIGhvdyBpdCBwcmVzZW50cyBpdHNlbGYgdG8gdGhlIHN5c3RlbSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBQSFksIGFuZCB3aGF0IGNhcGFiaWxpdGllcyBpdCBleHBvc2VzLiBHb3R0YSB2ZXJpZnkgdGhlIG1vZHVsZSdzIHN0cnVjdHVyZSBhbmQgdGhlbiB0aGUgbWVhdCBvZiBpdHMgb3BlcmF0aW9uYWwgZGV0YWlscyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFBIWSBpcyBhY3R1YWxseSBtYW5hZ2VkLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjQ1LjU0ODU3MTIxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ5MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ5MDpcXHRcXHRcXHRicmVhaztcXG4xNDkxOlxcdFxcdGNhc2UgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8xMDA6XFxuMTQ5MjpcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfMTAwO1xcbjE0OTM6XFx0XFx0XFx0YnJlYWs7XFxuMTQ5NDpcXHRcXHRjYXNlIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMTA6XFxuMTQ5NTpcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfMTA7XFxuMTQ5NjpcXHRcXHRcXHRicmVhaztcXG4xNDk3OlxcdFxcdH1cXG4xNDk4OlxcdFxcbjE0OTk6XFx0XFx0LyogRmlybXdhcmUgYmVmb3JlIHZlcnNpb24gMjQwMTEyMDIgaGFzIG5vIHZlbmRvciByZWdpc3RlciAyUDVHX0xQQS5cXG4xNTAwOlxcdFxcdCAqIEFzc3VtZSBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNlZCBpdCBpZiBjb25uZWN0ZWQgYXQgMjUwME1icHMuXFxuMTUwMTpcXHRcXHQgKi9cXG4xNTAyOlxcdFxcdGlmIChwcml2LVxcdTAwM2VmaXJtd2FyZV92ZXJzaW9uIFxcdTAwM2MgMHgyNDAxMTIwMikge1xcbjE1MDM6XFx0XFx0XFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXFxuMTUwNDpcXHRcXHRcXHRcXHRcXHQgcGh5ZGV2LVxcdTAwM2VscF9hZHZlcnRpc2luZyxcXG4xNTA1OlxcdFxcdFxcdFxcdFxcdCBwaHlkZXYtXFx1MDAzZXNwZWVkID09IFNQRUVEXzI1MDApO1xcbjE1MDY6XFx0XFx0fVxcbjE1MDc6XFx0XFxuMTUwODpcXHRcXHQvKiBPbmx5IHN1cHBvcnRzIGZ1bGwgZHVwbGV4ICovXFxuMTUwOTpcXHRcXHRwaHlkZXYtXFx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xcbjE1MTA6XFx0XFxuMTUxMTpcXHRcXHRyZXR1cm4gMDtcXG4xNTEyOlxcdH1cXG4xNTEzOlxcdFxcbjE1MTQ6XFx0c3RhdGljIGludCBlbjg4MTFoX2NsZWFyX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNTE1OlxcdHtcXG4xNTE2OlxcdFxcdGludCByZXQ7XFxuMTUxNzpcXHRcXG4xNTE4OlxcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzMsXFxuMTUxOTpcXHRcXHRcXHRcXHQgICAgQUlSX1BIWV9NQ1VfQ01EXzNfRE9DTUQpO1xcbjE1MjA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTUyMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE1MjI6XFx0XFxuMTUyMzpcXHRcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF80LFxcbjE1MjQ6XFx0XFx0XFx0XFx0ICAgIEFJUl9QSFlfTUNVX0NNRF80X0lOVENMUik7XFxuMTUyNTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNTI2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTUyNzpcXHRcXG4xNTI4OlxcdFxcdHJldHVybiAwO1xcbjE1Mjk6XFx0fVxcbjE1MzA6XFx0XFxuMTUzMTpcXHRzdGF0aWMgaXJxcmV0dXJuX3QgZW44ODExaF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTUzMjpcXHR7XFxuMTUzMzpcXHRcXHRpbnQgcmV0O1xcbjE1MzQ6XFx0XFxuMTUzNTpcXHRcXHRyZXQgPSBlbjg4MTFoX2NsZWFyX2ludHIocGh5ZGV2KTtcXG4xNTM2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMTUzNzpcXHRcXHRcXHRwaHlfZXJyb3IocGh5ZGV2KTtcXG4xNTM4OlxcdFxcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4xNTM5OlxcdFxcdH1cXG4xNTQwOlxcdFxcbjE1NDE6XFx0XFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xcbjE1NDI6XFx0XFxuMTU0MzpcXHRcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuMTU0NDpcXHR9XFxuMTU0NTpcXHRcXG4xNTQ2OlxcdHN0YXRpYyBpbnQgZW44ODExaF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNTQ3OlxcdHtcXG4xNTQ4OlxcdFxcdGNsa19yZXN0b3JlX2NvbnRleHQoKTtcXG4xNTQ5OlxcdFxcbjE1NTA6XFx0XFx0cmV0dXJuIGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcXG4xNTUxOlxcdH1cXG4xNTUyOlxcdFxcbjE1NTM6XFx0c3RhdGljIGludCBlbjg4MTFoX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNTU0OlxcdHtcXG4xNTU1OlxcdFxcdGNsa19zYXZlX2NvbnRleHQoKTtcXG4xNTU2OlxcdFxcbjE1NTc6XFx0XFx0cmV0dXJuIGdlbnBoeV9zdXNwZW5kKHBoeWRldik7XFxuMTU1ODpcXHR9XFxuMTU1OTpcXHRcXG4xNTYwOlxcdHN0YXRpYyB2b2lkIGFuODgxMWhiX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjE1NjE6XFx0e1xcbjE1NjI6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4xNTYzOlxcdFxcbjE1NjQ6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBidXNkZXYpIHtcXG4xNTY1OlxcdFxcdFxcdG1kaW9fZGV2aWNlX3JlbW92ZShwcml2LVxcdTAwM2VwYnVzZGV2KTtcXG4xNTY2OlxcdFxcdFxcdG1kaW9fZGV2aWNlX2ZyZWUocHJpdi1cXHUwMDNlcGJ1c2Rldik7XFxuMTU2NzpcXHRcXHR9XFxuMTU2ODpcXHR9XFxuMTU2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6NDUuNTQ4NjgyNjQ1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5OTQ2MDY3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBoYXBwZW5pbmcgZnJvbSBsaW5lIDE1NzAgb253YXJkcy4gVGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBwaWVjZSBpcywgd2hlcmUgdGhlIGFuYWx5c2lzIGlzIHRha2luZyBwbGFjZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiBteSB1bmRlcnN0YW5kaW5nIGlzIGVpdGhlciBnb2luZyB0byBkZWVwZW4gb3IgYnJlYWssIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGZvY3VzZWQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NzEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjQ4LjU0MzI5MTUyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU3MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU3MDpcXHRzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW44ODExaF9kcml2ZXJbXSA9IHtcXG4xNTcxOlxcdHtcXG4xNTcyOlxcdFxcdFBIWV9JRF9NQVRDSF9NT0RFTChFTjg4MTFIX1BIWV9JRCksXFxuMTU3MzpcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIkFpcm9oYSBFTjg4MTFIXFxcIixcXG4xNTc0OlxcdFxcdC5wcm9iZVxcdFxcdFxcdD0gZW44ODExaF9wcm9iZSxcXG4xNTc1OlxcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IGVuODgxMWhfZ2V0X2ZlYXR1cmVzLFxcbjE1NzY6XFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSBlbjg4MTFoX2NvbmZpZ19pbml0LFxcbjE1Nzc6XFx0XFx0LmdldF9yYXRlX21hdGNoaW5nXFx0PSBlbjg4MTFoX2dldF9yYXRlX21hdGNoaW5nLFxcbjE1Nzg6XFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSBlbjg4MTFoX2NvbmZpZ19hbmVnLFxcbjE1Nzk6XFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSBlbjg4MTFoX3JlYWRfc3RhdHVzLFxcbjE1ODA6XFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0gZW44ODExaF9yZXN1bWUsXFxuMTU4MTpcXHRcXHQuc3VzcGVuZFxcdFxcdD0gZW44ODExaF9zdXNwZW5kLFxcbjE1ODI6XFx0XFx0LmNvbmZpZ19pbnRyXFx0XFx0PSBlbjg4MTFoX2NsZWFyX2ludHIsXFxuMTU4MzpcXHRcXHQuaGFuZGxlX2ludGVycnVwdFxcdD0gZW44ODExaF9oYW5kbGVfaW50ZXJydXB0LFxcbjE1ODQ6XFx0XFx0LmxlZF9od19pc19zdXBwb3J0ZWRcXHQ9IGVuODgxMWhfbGVkX2h3X2lzX3N1cHBvcnRlZCxcXG4xNTg1OlxcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IGFpcl9waHlfcmVhZF9wYWdlLFxcbjE1ODY6XFx0XFx0LndyaXRlX3BhZ2VcXHRcXHQ9IGFpcl9waHlfd3JpdGVfcGFnZSxcXG4xNTg3OlxcdFxcdC5sZWRfYmxpbmtfc2V0XFx0XFx0PSBhaXJfbGVkX2JsaW5rX3NldCxcXG4xNTg4OlxcdFxcdC5sZWRfYnJpZ2h0bmVzc19zZXRcXHQ9IGFpcl9sZWRfYnJpZ2h0bmVzc19zZXQsXFxuMTU4OTpcXHRcXHQubGVkX2h3X2NvbnRyb2xfc2V0XFx0PSBhaXJfbGVkX2h3X2NvbnRyb2xfc2V0LFxcbjE1OTA6XFx0XFx0LmxlZF9od19jb250cm9sX2dldFxcdD0gYWlyX2xlZF9od19jb250cm9sX2dldCxcXG4xNTkxOlxcdH0sXFxuMTU5MjpcXHR7XFxuMTU5MzpcXHRcXHRQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODExSEJfUEhZX0lEKSxcXG4xNTk0OlxcdFxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiQWlyb2hhIEFOODgxMUhCXFxcIixcXG4xNTk1OlxcdFxcdC5wcm9iZVxcdFxcdFxcdD0gYW44ODExaGJfcHJvYmUsXFxuMTU5NjpcXHRcXHQucmVtb3ZlXFx0XFx0XFx0PSBhbjg4MTFoYl9yZW1vdmUsXFxuMTU5NzpcXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0XFx0PSBlbjg4MTFoX2dldF9mZWF0dXJlcyxcXG4xNTk4OlxcdFxcdC5jb25maWdfaW5pdFxcdFxcdD0gYW44ODExaGJfY29uZmlnX2luaXQsXFxuMTU5OTpcXHRcXHQuZ2V0X3JhdGVfbWF0Y2hpbmdcXHQ9IGVuODgxMWhfZ2V0X3JhdGVfbWF0Y2hpbmcsXFxuMTYwMDpcXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IGVuODgxMWhfY29uZmlnX2FuZWcsXFxuMTYwMTpcXHRcXHQucmVhZF9zdGF0dXNcXHRcXHQ9IGVuODgxMWhfcmVhZF9zdGF0dXMsXFxuMTYwMjpcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSBlbjg4MTFoX3Jlc3VtZSxcXG4xNjAzOlxcdFxcdC5zdXNwZW5kXFx0XFx0PSBlbjg4MTFoX3N1c3BlbmQsXFxuMTYwNDpcXHRcXHQuY29uZmlnX2ludHJcXHRcXHQ9IGVuODgxMWhfY2xlYXJfaW50cixcXG4xNjA1OlxcdFxcdC5oYW5kbGVfaW50ZXJydXB0XFx0PSBlbjg4MTFoX2hhbmRsZV9pbnRlcnJ1cHQsXFxuMTYwNjpcXHRcXHQubGVkX2h3X2lzX3N1cHBvcnRlZFxcdD0gZW44ODExaF9sZWRfaHdfaXNfc3VwcG9ydGVkLFxcbjE2MDc6XFx0XFx0LnJlYWRfcGFnZVxcdFxcdD0gYWlyX3BoeV9yZWFkX3BhZ2UsXFxuMTYwODpcXHRcXHQud3JpdGVfcGFnZVxcdFxcdD0gYWlyX3BoeV93cml0ZV9wYWdlLFxcbjE2MDk6XFx0XFx0LmxlZF9ibGlua19zZXRcXHRcXHQ9IGFpcl9sZWRfYmxpbmtfc2V0LFxcbjE2MTA6XFx0XFx0LmxlZF9icmlnaHRuZXNzX3NldFxcdD0gYWlyX2xlZF9icmlnaHRuZXNzX3NldCxcXG4xNjExOlxcdFxcdC5sZWRfaHdfY29udHJvbF9zZXRcXHQ9IGFpcl9sZWRfaHdfY29udHJvbF9zZXQsXFxuMTYxMjpcXHRcXHQubGVkX2h3X2NvbnRyb2xfZ2V0XFx0PSBhaXJfbGVkX2h3X2NvbnRyb2xfZ2V0LFxcbjE2MTM6XFx0fSB9O1xcbjE2MTQ6XFx0XFxuMTYxNTpcXHRtb2R1bGVfcGh5X2RyaXZlcihlbjg4MTFoX2RyaXZlcik7XFxuMTYxNjpcXHRcXG4xNjE3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgZW44ODExaF90YmxbXSA9IHtcXG4xNjE4OlxcdFxcdHsgUEhZX0lEX01BVENIX01PREVMKEVOODgxMUhfUEhZX0lEKSB9LFxcbjE2MTk6XFx0XFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODExSEJfUEhZX0lEKSB9LFxcbjE2MjA6XFx0XFx0eyB9XFxuMTYyMTpcXHR9O1xcbjE2MjI6XFx0XFxuMTYyMzpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGVuODgxMWhfdGJsKTtcXG4xNjI0OlxcdE1PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRE0pO1xcbjE2MjU6XFx0TU9EVUxFX0ZJUk1XQVJFKEVOODgxMUhfTUQzMl9EU1ApO1xcbjE2MjY6XFx0TU9EVUxFX0ZJUk1XQVJFKEFOODgxMUhCX01EMzJfRE0pO1xcbjE2Mjc6XFx0TU9EVUxFX0ZJUk1XQVJFKEFOODgxMUhCX01EMzJfRFNQKTtcXG4xNjI4OlxcdFxcbjE2Mjk6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJBaXJvaGEgRU44ODExSCBhbmQgQU44ODExSEIgUEhZIGRyaXZlcnNcXFwiKTtcXG4xNjMwOlxcdE1PRFVMRV9BVVRIT1IoXFxcIkFpcm9oYVxcXCIpO1xcbjE2MzE6XFx0TU9EVUxFX0FVVEhPUihcXFwiRXJpYyBXb3Vkc3RyYSBcXHUwMDNjZXJpY3dvdWRzQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4xNjMyOlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6NDguNTQzNDA4NDgzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MTk0MTg0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTURJTy9QSFkgUmVhY2hhYmlsaXR5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyByZWFjaGFibGUgTURJTyBQSFkgZGV2aWNlcyBhcmUgd2hlbiBpdCBjb21lcyB0byBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHNvbWV0aGluZyBsaWtlIHN5emthbGxlci4gVGhlIHF1ZXN0aW9uIEknbSB0cnlpbmcgdG8gYW5zd2VyIGlzOiBjYW4gd2UgYWN0dWFsbHkgKmdldCB0byogdGhlc2UgdGhpbmdzP1xuXG5GaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gQ2FuIHdlIHByb2JlIHRoZW0sIGVtdWxhdGUgdGhlbSwgb3IgaW5zdGFudGlhdGUgdGhlbSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBJIGtub3cgYSBNQUMgZHJpdmVyIHVzdWFsbHkgY3JlYXRlcyBhbiBNRElPIGJ1cyBhbmQgc2NhbnMsIG9yIGl0IGNvbWVzIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLCBBQ1BJLCBwbGF0Zm9ybSBkZXZpY2VzIG9yIE1ESU8gbmV0bGluay4gVGhlIHJlYWwgdHJpY2sgaXM6IGNhbiAqdXNlciBzcGFjZSogZG8gdGhpcz8gT3IsIGRvIHdlIGhhdmUgTURJTyBQSFkgZHJpdmVycyBpbiBzdGFuZGFyZCBRRU1VIC8gdmlydGlvIGNvbmZpZ3VyYXRpb25zP1xuXG5OZXh0LCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIE1ESU8gYnVzZXMgYW5kIFBIWSBkcml2ZXJzIGRpcmVjdGx5LiBJJ20gZm9jdXNpbmcgb24gdGhlIGZlYXNpYmlsaXR5IG9mIGluc3RhbnRpYXRpbmcgYSBzcGVjaWZpYyBQSFkgZGV2aWNlIHdpdGggYSB0YXJnZXQgUEhZIElEIGxpa2UgYEFOODgxMUhCX1BIWV9JRGAgd2l0aG91dCBuZWVkaW5nIGFjdHVhbCBoYXJkd2FyZS5cblxuRmluYWxseSwgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGFueSB2aXJ0dWFsIE1ESU8gYnVzZXMgb3Igc29mdHdhcmUgTURJTyBkcml2ZXJzIGNhbiBwcm92aWRlIGEgd2F5IGluPyBUaGlzIG1lYW5zIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBtZGlvLWdwaW9gLCBgbWRpby1iaXRiYW5nYCwgYG1kaW8tZHVtbXlgLCBhbmQgc28gb24uIEknbGwgbmVlZCB0byBhbHNvIGNoZWNrIHRoZSBzeXNmcyBhbmQgbmV0bGluayBpbnRlcmZhY2VzIGZvciBhbnkgTURJTyByZWxhdGVkIGVudHJ5cG9pbnRzLiBUaGlzIGlzIG15IGJlc3QgYmV0IGZvciBhIHNvZnR3YXJlIGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk4MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjUyLjI2MjgyOTQ1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NjAwMDQ0NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb19idXNfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjUzLjk0ODg0MDA1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTYyMDk1NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNRElPYnVzIFJlZ2lzdHJhdGlvbiAtIFdoZXJlIHRvIFN0YXJ0PyoqXG5cbkFscmlnaHQsIHRoZSB0YXNrIGF0IGhhbmQgaXMgZGVmaW5pdGVseSByZWxhdGVkIHRvIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbi4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBzeXN0ZW0gaW5pdGlhbGl6ZXMgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBNRElPIGJ1cy4gU28sIGluc3RlYWQgb2YgcmFuZG9tbHkgZGl2aW5nIGluLCBJIG5lZWQgdG8ga25vdyB0aGUgZW50cnkgcG9pbnRzLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IGZ1bmN0aW9uIG5hbWUgdG8gc3RhcnQgd2l0aCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgYG1kaW9idXNfcmVnaXN0ZXJgLiBJdOKAmXMgdXN1YWxseSBhIHByZXR0eSByZWxpYWJsZSBpbmRpY2F0b3IuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggZm9yIHRoYXQuIERlcGVuZGluZyBvbiB0aGUgcmVzdWx0cywgSSdsbCBrbm93IHdoZXRoZXIgdGhpcyB3aWxsIGludm9sdmUgc29tZSBkcml2ZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGJ1cyBsYXllciBtYW5pcHVsYXRpb24sIG9yIG92ZXJhbGwgYm9hcmQgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU2OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjU1LjkxMDkzODM4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MDcxNTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTEzOCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0PTM0OT1NRElPXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3QtMzUxLSAgZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoKVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTI6ICBkZXZtX21kaW9idXNfcmVnaXN0ZXIoKVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTM6ICBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoKVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdC0zNTQtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdD0xMj1kZXZpY2UgKHRoZSBzYW1lIG9iamVjdHMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB2aWFcXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdDoxMzpgYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeSgpYGApLiBNQUMtc2lkZSBjb25uZWN0aW9uIHByb3BlcnRpZXMgc3VjaCBhc1xcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0LTE0LWBgcGh5LWhhbmRsZWBgIGFuZCBgYHBoeS1tb2RlYGAgYXJlIGRvY3VtZW50ZWQgaW4gW2FjcGktbWRpby1waHldXy5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvcGh5LnJzdD03PVRoZSBQSFlzIG9uIGFuIE1ESU8gYnVzIFtwaHldIGFyZSBwcm9iZWQgYW5kIHJlZ2lzdGVyZWQgdXNpbmdcXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3Q6ODpmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoKS5cXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3QtOS1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0PTQwPXJlZ2lzdGVyZWQgYXMgYSBkaXN0aW5jdCBkZXZpY2UuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC01Ni0gICBkcml2ZXIgbmVlZHMsIHNldHVwIHRoZSBtaWlfYnVzIHN0cnVjdHVyZSwgYW5kIHJlZ2lzdGVyIHdpdGggdGhlIFBBTCB1c2luZ1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0OjU3OiAgIG1kaW9idXNfcmVnaXN0ZXIuICBTaW1pbGFybHksIHRoZXJlJ3MgYSByZW1vdmUgZnVuY3Rpb24gdG8gdW5kbyBhbGwgb2ZcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC01OC0gICB0aGF0ICh1c2UgbWRpb2J1c191bnJlZ2lzdGVyKS5cXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmM9MTA5PXN0YXRpYyBpbnQgZXA4MjQ4ZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzItXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYzoxMzM6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG9mZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzQtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jPTIwNz1zdGF0aWMgaW50IGdwaW9fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jLTI0My1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYzoyNDQ6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYz02MDc9c3RhdGljIGludCBiY21fc2YyX21kaW9fcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYy02ODMtXFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYzo2ODQ6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2V1c2VyX21paV9idXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjg1LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYz0xODc9c3RhdGljIGludCBnc3dpcF9tZGlvKHN0cnVjdCBnc3dpcF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjEzLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jOjIxNDpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTIxNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQxLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0MjpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LVxcdTAwM2VkZXYsIGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yMzIxPWludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjM5Mi1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMzkzOlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihkcy1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTQtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz02ODU9c3RhdGljIGludCBsYW45Mzd4X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU1LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6NzU2OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihkcy1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zODk9eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwNi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MDc6XFx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MDgtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTUyMD15dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUzODpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUzOS1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTIzMzc9bXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIzNzItXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjIzNzM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMzc0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz0yNDI9c3RhdGljIGludCBtdDc2Mjhfc2V0dXBfaW50ZXJuYWxfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYxLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzoyNjI6XFx0cmV0dXJuIGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTI2My19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz0zODM0PXN0YXRpYyBpbnQgbXY4OGU2eHh4X21kaW9fcmVnaXN0ZXIoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozODg4OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5Mi1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTQtXFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0xNDk9c3RhdGljIGludCBuZXRjX3BvcnRfY3JlYXRlX2VtZGlvX2J1cyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE3OS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoxODA6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0xODEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTk1Nz1zdGF0aWMgaW50IHZzYzk5NTlfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxMDE0OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTEwMTUtXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYz04Nzg9c3RhdGljIGludCB2c2M5OTUzX21kaW9fYnVzX2FsbG9jKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTAzLVxcdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0OlxcdHJjID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jLTkwNS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODEtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4My1cXHRvZl9ub2RlX3B1dChtbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ3PXFjYThrX21kaW9fcmVnaXN0ZXIoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODYtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTg3OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTg4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc1PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMTAwLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoxMDE6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMTAyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM9MTExNz1zdGF0aWMgaW50IGE1cHN3X3Byb2JlX21kaW8oc3RydWN0IGE1cHN3ICphNXBzdywgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQzLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM6MTE0NDpcXHRyZXR1cm4gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oPTMwNz12b2lkIHNqYTExMDVfZnJhbWVfbWVtb3J5X3BhcnRpdGlvbmluZyhzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMDktLyogRnJvbSBzamExMTA1X21kaW8uYyAqL1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaDozMTA6aW50IHNqYTExMDVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMTEtdm9pZCBzamExMTA1X21kaW9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM9MzAyNj1zdGF0aWMgaW50IHNqYTExMDVfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMzA2Ny1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYzozMDY4OlxcdHJjID0gc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKGRzKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY5LVxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTI1OD1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3R4X3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0yODctXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6Mjg4OlxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0yODktXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0zMTI9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90MV9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQzLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM0NDpcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQ1LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk1LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM5NjpcXHRyYyA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zOTctXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz00Mzk9c3RhdGljIHZvaWQgc2phMTEwNV9tZGlvYnVzX3Bjc191bnJlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00NTgtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6NDU5OmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYz00NTk9c3RhdGljIGludCBheF9taWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmMtNDc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jOjQ3OTpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF4LVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00ODAtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYz0xMzIxPXN0YXRpYyBpbnQgb3dsX2VtYWNfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM6MTM0NjpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBwcml2LVxcdTAwM2VtaWksIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYz01MDk9c3RhdGljIGludCBhZGluMTExMF9yZWdpc3Rlcl9tZGlvYnVzKHN0cnVjdCBhZGluMTExMF9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmMtNTI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jOjUzMDpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MzEtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jPTYxNz1zdGF0aWMgaW50IGFkaW4xMTQwX21kaW9fcmVnaXN0ZXIoc3RydWN0IGFkaW4xMTQwX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02MzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM6NjM3OlxcdHJldHVybiBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNnNwaWRldi1cXHUwMDNlZGV2LCBwcml2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02MzgtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYz0xMjkwPXN0YXRpYyBpbnQgZ3JldGhfbWRpb19pbml0KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jOjEzMDc6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihncmV0aC1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA4LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jPTM5MzE9c3RhdGljIGludCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYzo0MDI3OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI4LVxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYz0xMjE9c3RhdGljIGludCBhbHRlcmFfdHNlX21kaW9fY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jOjE1ODpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1OS1cXHRpZiAocmV0ICE9IDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM9MTA2MT1zdGF0aWMgaW50IGF1MTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM6MTIyMjpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF1cC1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIzLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9MzQyOD1zdGF0aWMgaW50IHhnYmVfcGh5X2luaXQoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzE3LVxcdHNucHJpbnRmKG1paS1cXHUwMDNlaWQsIHNpemVvZihtaWktXFx1MDAzZWlkKSwgXFxcIiVzXFxcIiwgZGV2X25hbWUocGRhdGEtXFx1MDAzZWRldikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcxODpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzE5LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MjA6XFx0XFx0ZGV2X2VycihwZGF0YS1cXHUwMDNlZGV2LCBcXFwibWRpb2J1c19yZWdpc3RlciBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcyMS1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYz05OD1pbnQgeGdlX21kaW9fY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMTgtXFx0bWRpb19idXMtXFx1MDAzZXBoeV9tYXNrID0gMHgxO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM6MTE5OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTIwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTgzNz1pbnQgeGdlbmVfZW5ldF9waHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6ODg4OnN0YXRpYyBpbnQgeGdlbmVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWlpX2J1cyAqbWRpbylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTEzOlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MTQtXFx0XFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMS1cXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkyMjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTkzOT1pbnQgeGdlbmVfZW5ldF9tZGlvX2NvbmZpZyhzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTk1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjk1ODpcXHRyZXQgPSB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLCBtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTktXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jPTEzMT1pbnQgYXJjX21kaW9fcHJvYmUoc3RydWN0IGFyY19lbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYzoxNzM6XFx0ZXJyb3IgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTc0LVxcdG9mX25vZGVfcHV0KG1kaW9fbm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYz05NjY9c3RhdGljIGludCBheDg4Nzk2Y19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYzoxMDExOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIGF4X2xvY2FsLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEyLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTY4Nz1zdGF0aWMgaW50IGFnNzF4eF9tZGlvX3Byb2JlKHN0cnVjdCBhZzcxeHggKmFnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjctXFx0bW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFxcXCJtZGlvXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzo3Mjg6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWlpX2J1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyOS1cXHRvZl9ub2RlX3B1dChtbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI1OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjYwOlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIobWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI2MS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYz0xNzEzPXN0YXRpYyBpbnQgYmNtX2VuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM6MTgzMDpcXHRcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgzMS1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYz0yMTE9c3RydWN0IG1paV9idXMgKmJjbWFfbWRpb19taWlfcmVnaXN0ZXIoc3RydWN0IGJnbWFjICpiZ21hYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYzoyMzY6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmMtMjM3LVxcdG9mX25vZGVfcHV0KG5wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTE5Mz1pbnQgYmNtZ2VuZXRfbWlpX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIGluaXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzMtXFx0XFx0cGh5X25hbWUgPSBcXFwiZXh0ZXJuYWwgUnZNSUlcXFwiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjIzNDpcXHRcXHQvKiBvZl9tZGlvYnVzX3JlZ2lzdGVyIHRvb2sgY2FyZSBvZiByZWFkaW5nIHRoZSAnbWF4LXNwZWVkJ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzNS1cXHRcXHQgKiBQSFkgcHJvcGVydHkgZm9yIHVzLCBlZmZlY3RpdmVseSBsaW1pdGluZyB0aGUgUEhZIHN1cHBvcnRlZFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jPTIxNTc9c3RhdGljIGludCBzYm1hY19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsZGV2LCBsb25nIGxvbmcgYmFzZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI3LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoyMjI4OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoc2MtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI5LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTE1MDU9c3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYzoxNTU4OlxcdGkgPSBtZGlvYnVzX3JlZ2lzdGVyKHRwLVxcdTAwM2VtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1OS1cXHRpZiAoaSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwOTc6c3RhdGljIGludCBtYWNiX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1hY2IgKmJwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNC1cXHRpZiAobWRpb19ucClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMDU6XFx0XFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTExOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMTk6XFx0XFx0XFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjAtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMjI6XFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMy19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTExMjU9c3RhdGljIGludCBtYWNiX21paV9pbml0KHN0cnVjdCBtYWNiICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE1OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExNTk6XFx0ZXJyID0gbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKGJwLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNjAtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM9MTEwNz1zdGF0aWMgaW50IGRtOTA1MV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBib2FyZF9pbmZvICpkYilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jOjExMjU6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgZGItXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTI0MjM9c3RhdGljIGludCB0c25lcF9tZGlvX2luaXQoc3RydWN0IHRzbmVwX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM6MjQ1NTpcXHRyZXR2YWwgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXFx1MDAzZW1kaW9idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM9MTAyND1zdGF0aWMgaW50IGV0aG9jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYzoxMjA4OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYy0xMjA5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTczND1zdGF0aWMgaW50IGZ0Z21hYzEwMF9zZXR1cF9tZGlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYzoxNzcwOlxcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VkZXYsIHByaXYtXFx1MDAzZW1paV9idXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc3MS1cXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jPTM2PXN0YXRpYyBpbnQgZW5ldGNfcGNpX21kaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYzo5MTpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZGV2LVxcdTAwM2VvZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05Mi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTI2Nj1zdGF0aWMgaW50IGVuZXRjX21kaW9fcHJvYmUoc3RydWN0IGVuZXRjX3BmICpwZiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0yOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjI5MzpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0yOTQtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0zMDg9c3RhdGljIGludCBlbmV0Y19pbWRpb19jcmVhdGUoc3RydWN0IGVuZXRjX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjM0MzpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0NC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz0zMDQyPXN0YXRpYyBpbnQgZmVjX2VuZXRfbWlpX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzE2MTpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGZlcC1cXHUwMDNlbWlpX2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzE2Mi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jPTY1PXN0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jOjEwNjpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDctXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM9MTQ5PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYy0xNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYzoxNzY6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM9OTc9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYzoxNjc6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jPTQwOT1zdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6NDk0OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTQ5NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jPTM3MT1zdGF0aWMgaW50IHhnbWFjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI2LVxcdGlmIChpc19vZl9ub2RlKGZ3bm9kZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjc6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHRvX29mX25vZGUoZndub2RlKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjgtXFx0ZWxzZSBpZiAoaXNfYWNwaV9ub2RlKGZ3bm9kZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjk6XFx0XFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZndub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQzMC1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jPTI2Nj1pbnQgaGJnX21kaW9faW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI5MjpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYz0xMDk0PXN0YXRpYyBpbnQgaGl4NWhkMl9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYzoxMTg2OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0xMjM9aW50IGhjbGdlX21hY19tZGlvX2NvbmZpZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0xNTQtXFx0bWRpb19idXMtXFx1MDAzZXBoeV9tYXNrID0gfigxVSBcXHUwMDNjXFx1MDAzYyBtYWMtXFx1MDAzZXBoeV9hZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jOjE1NTpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYz00OTU9c3RhdGljIGludCBobnNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jOjU4NDpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01ODUtXFx0fSBlbHNlIGlmIChpc19hY3BpX25vZGUocGRldi1cXHUwMDNlZGV2LmZ3bm9kZSkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5Mi1cXHRcXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1OTM6XFx0XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTQtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYz0yNTYwPXN0YXRpYyBpbnQgZW1hY19kdF9tZGlvX3Byb2JlKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMtMjU4NC1cXHRzbnByaW50ZihidXMtXFx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFxcXCIlc1xcXCIsIGRldi1cXHUwMDNlb2ZkZXYtXFx1MDAzZW5hbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYzoyNTg1OlxcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2ZGV2LVxcdTAwM2VvZmRldi1cXHUwMDNlZGV2LCBidXMsIG1paV9ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODYtXFx0aWYgKHJlcykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MTAyNj1pbnQgaXhnYmVfbWlpX2J1c19pbml0KHN0cnVjdCBpeGdiZV9odyAqaHcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDg4LVxcdGFkYXB0ZXItXFx1MDAzZW1paV9idXMgPSBidXM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MTA4OTpcXHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwOTAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYz0zODU9bHRxX2V0b3BfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwMi1cXHRcXHQgcHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlbmFtZSwgcHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlaWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM6NDAzOlxcdGlmIChtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1paV9idXMpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy00MDQtXFx0XFx0ZXJyID0gLUVOWElPO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYz0yODM9c3RhdGljIGludCBvcmlvbl9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4MS1cXHQvKiBGb3IgdGhlIHBsYXRmb3JtcyBub3Qgc3VwcG9ydGluZyBEVC9BQ1BJIGZhbGwtYmFja1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6MzgyOlxcdCAqIHRvIG1kaW9idXNfcmVnaXN0ZXIgdmlhIG9mX21kaW9idXNfcmVnaXN0ZXIuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODMtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODQtXFx0aWYgKGlzX2FjcGlfbm9kZShwZGV2LVxcdTAwM2VkZXYuZndub2RlKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4NTpcXHRcXHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBwZGV2LVxcdTAwM2VkZXYuZndub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4Ni1cXHRlbHNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODc6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4OC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM9MTM4Nz1zdGF0aWMgaW50IHB4YTE2OF9ldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTE1MDQtXFx0cGVwLVxcdTAwM2VzbWlfYnVzLVxcdTAwM2VwaHlfbWFzayA9IDB4ZmZmZmZmZmY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM6MTUwNTpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHBlcC1cXHUwMDNlc21pX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmMtMTUwNi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz05OTg9c3RhdGljIGludCBtdGtfbWRpb19pbml0KHN0cnVjdCBtdGtfZXRoICpldGgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzctXFx0ZGV2X2RiZyhldGgtXFx1MDAzZWRldiwgXFxcIk1EQyBpcyBydW5uaW5nIG9uICVkIEh6XFxcXG5cXFwiLCBNRENfTUFYX0ZSRVEgLyBldGgtXFx1MDAzZW1kY19kaXZpZGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjEwMzg6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihldGgtXFx1MDAzZW1paV9idXMsIG1paV9ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0xMDM5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jPTE0MjI9c3RhdGljIGludCBtdGtfc3Rhcl9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM6MTQ0ODpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBwcml2LVxcdTAwM2VtaWksIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTE0NDktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jPTI4Nz1pbnQgbWx4YmZfZ2lnZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBtbHhiZl9naWdlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYy0zMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYzozMzM6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzNC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM9MjUzPWludCBmYm5pY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYy0yNzItXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjU3LjM4MTY1ODc1NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODM2MTI0Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBEcml2ZXIgYW5kIEVtdWxhdGlvbiBQb3NzaWJpbGl0aWVzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBJJ20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgLCB0aGUgZHJpdmVyIGZvciB0aGF0IEFpcm9oYSBFTjg4MTFIIGFuZCBBTjg4MTFIQiBFdGhlcm5ldCBQSFkgdHJhbnNjZWl2ZXIuIEFpcm9oYSwgcmlnaHQ/IE9mdGVuIHNlZW4gb24gTWVkaWFUZWsvQWlyb2hhIHJvdXRlciBib2FyZHMgb3IgZGVkaWNhdGVkIG5ldHdvcmtpbmcgZXF1aXBtZW50LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LCBsaWtlIGluIFFFTVUgb3Igd2l0aCBhIFVTQiBpbnRlcmZhY2UsIGZvciB0aGF0IHNwZWNpZmljIGNoaXA/IFRoZSBhbnN3ZXIgaXMgcHJvYmFibHkgbm8uXG5cblRoZXNlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdHlwaWNhbGx5IHRoZXknbGwgcmVseSBvbiBzb21ldGhpbmcgbGlrZSBlMTAwMCwgdmlydGlvLW5ldCwgb3IgcnRsODEzOSBuZXR3b3JrIGludGVyZmFjZXMuIE9yLCBwZXJoYXBzIGEgVVNCIEV0aGVybmV0IGRvbmdsZSB1c2luZyBzb21ldGhpbmcgbGlrZSBheDg4MTc5XzE3OGEgb3IgY2RjX2V0aGVyLiBUaGUgdGhpbmcgaXMsIGV2ZW4gKmlmKiB0aGVyZSdzIGFuIE1ESU8gYnVzIGF2YWlsYWJsZSBpbiB0aGUgZW11bGF0ZWQgTklDLCB0aGF0IGBFTjg4MTFIX1BIWV9JRGAgb3IgYEFOODgxMUhCX1BIWV9JRGAgLSB0aGF0J3MgaGFyZHdhcmUtc3BlY2lmaWMuIEEgZGlyZWN0IGVtdWxhdGlvbiBpcyBsaWtlbHkgb3V0IG9mIHRoZSBxdWVzdGlvbi5cblxuU28sIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGlmIHRoZXJlIGFyZSBhbnkgKndvcmthcm91bmRzKiBmb3IgZ2V0dGluZyB0aGUgZHJpdmVyIGxvYWRlZCBvciBwcm9iZWQgd2l0aGluIFFFTVUuIENhbiBJLCBmb3IgZXhhbXBsZSwgbGV2ZXJhZ2Ugc3l6a2FsbGVyIHRvIGNyZWF0ZSBzb21lIHNvcnQgb2YgbW9jayBNRElPIG9yIFBIWSBkZXZpY2UgZnJvbSB1c2Vyc3BhY2U/IFRpbWUgdG8gaW52ZXN0aWdhdGUgdGhlIHBvc3NpYmlsaXR5IG9mIHVzZXJzcGFjZSBNRElPIG9yIFBIWSBkZXZpY2UgY3JlYXRpb24gaW50ZXJmYWNlcy4gSSdsbCBuZWVkIHRvIHJlc2VhcmNoLCBzZWUgaWYgdGhlcmUgYXJlIHN0YW5kYXJkIG1ldGhvZHMgbGlrZSBuZXRsaW5rLCBzeXNmcywgb3IgbWF5YmUgc29tZSBpb2N0bCBjYWxscyB0aGF0IGNvdWxkIGJlIGxldmVyYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2MjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzY6MDEuMjE3Nzk3NjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjU4Mzc1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZV9jcmVhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTExNz1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM0LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTM1OlxcdFxcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCAwLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM2LVxcdGlmIChJU19FUlIocGh5KSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTg1LVxcdFxcdC8qIFJlYWwgUEhZIElEIG9mIFBvcnQgMSBpcyAwICovXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTg2OlxcdFxcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgUEhZX0lEX1RKQTExMDIsIGZhbHNlLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01ODctXFx0XFx0aWYgKElTX0VSUihwaHkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTItXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTkzOlxcdFxcdC8qIE92ZXJ3cml0ZSBwYXJlbnQgZGV2aWNlLiBwaHlfZGV2aWNlX2NyZWF0ZSgpIHNldCBwYXJlbnQgdG9cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTQtXFx0XFx0ICogdGhlIG1paV9idXMtXFx1MDAzZWRldiwgd2hpY2ggaXMgbm90IGNvcnJlY3QgaW4gY2FzZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NzI4PXN0YXRpYyBpbnQgcGh5X3JlcXVlc3RfZHJpdmVyX21vZHVsZShzdHJ1Y3QgcGh5X2RldmljZSAqZGV2LCB1MzIgcGh5X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDctXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo3NDg6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNzQ5LVxcdFxcdFxcdFxcdCAgICAgYm9vbCBpc19jNDUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTgzOS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo4NDA6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX2NyZWF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy04NDEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEwNzE9c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5Ni1cXHRcXHRpZiAoIXIpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMDk3OlxcdFxcdFxcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwOTgtXFx0XFx0XFx0XFx0XFx0XFx0IHRydWUsIFxcdTAwMjZjNDVfaWRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDE6XFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCBpc19jNDUsIFxcdTAwMjZjNDVfaWRzKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDItfVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaD0yMTY3PWludCBwaHlfbW9kaWZ5X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLCB1MzIgcmVnbnVtLFxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTY5LVxcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjE3MDpzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTcxLVxcdFxcdFxcdFxcdCAgICAgYm9vbCBpc19jNDUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM2OjAyLjc0MzY0MTgxN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODI1MzI4NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFN0cnVjdHVyYWxseSBVbnJlYWNoYWJsZSBDb2RlLCBOb3QgV29ydGggRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIGhvdyB0aGlzIGNvZGUgcGF0aCBpcyB0cmlnZ2VyZWQuIFRoZSBNRElPIGJ1cyBzZWVtcyBsaWtlIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgdGhlc2UgYnVzZXMgYXJlIHR5cGljYWxseSByZWdpc3RlcmVkIGJ5IEV0aGVybmV0IE1BQyBkcml2ZXJzIHdoZW4gdGhleSBkZXRlY3QgY29ubmVjdGVkIFBIWXMgdmlhIHBoeXNpY2FsIE1ESU8gbGluZXMuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgdGhlIGBhaXJfZW44ODExaC5jYCBkcml2ZXIuIFRoaXMgZHJpdmVyIGhhcyBsb2dpYyB0aGF0IHJlbGllcyBvbiBhIHNwZWNpZmljIFBIWSBJRCByZWFkIGZyb20gYSBoYXJkd2FyZSB0cmFuc2NlaXZlciwgaW4gdGhpcyBjYXNlLCB0aGUgQWlyb2hhIEVOODgxMUguXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGVudmlyb25tZW50LCBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIFZNcyBvbiBhbWQ2NCBkb24ndCBwcm92aWRlIHRoaXMgaGFyZHdhcmUgb3IgYW4gYWNjdXJhdGUgZW11bGF0aW9uIG9mIGl0LiBUaGUgQWlyb2hhIEVOODgxMUggaXMsIGluIGVzc2VuY2UsIGFic2VudC5cblxuSSdsbCBjb25zdWx0IFNlY3Rpb24gMiBvZiB0aGUgdHJpYWdlIGd1aWRlLiBJdCBleHBsaWNpdGx5IGNhbGxzIG91dCBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSxcIiBtZW50aW9uaW5nIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIChsaWtlIG1seHN3LCBwZHNfY29yZSwgZXRjLiksIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQgaXMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHBhdGNoIGFuZCB0aGUgcmVsZXZhbnQgZHJpdmVyLCByaWdodCBub3cuXG5cblRoZSBndWlkZSBlbXBoYXNpemVzIHRoYXQgcmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUuIEkgY2FuIG9ubHkgZnV6eiBjb2RlIHRoYXQgKmNhbiogYWN0dWFsbHkgZXhlY3V0ZSB3aXRoaW4gdGhlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSWYgdGhlIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAyLCBpdCBzaG91bGQgKm5vdCogYmUgZnV6emVkLCByZWdhcmRsZXNzIG9mIGNvbXBsZXhpdHkgb3IgYWRkZWQgYXNzZXJ0aW9ucy5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2suIFRoZSBwYXRjaCBpdHNlbGYgaXMgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBwYWNrYWdlIHZhcmlhbnQgZGV0ZWN0aW9uIGluIGBhbjg4MTFoYl9wcm9iZWAgYW5kIHVzZXMgdGhlIGBBTjg4MTFIQl9IV1RSQVAyYCByZWdpc3RlciB0byBhZGp1c3QgTEVEIEdQSU8gc2V0dXAgZHVyaW5nIHByb2JlIGFuZCBjb25maWcgaW5pdGlhbGl6YXRpb24uXG5cbk5vdyB0aGUgcXVlc3Rpb24gcmVtYWluczogaXMgYGFpcl9lbjg4MTFoLmNgIHJlYWNoYWJsZT8gVGhlIGFuc3dlciBpcyBuby4gSXQgZGVwZW5kcyBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFpcm9oYSBFTjg4MTFIIGhhcmR3YXJlIG9yIGEgcGh5c2ljYWwgTURJTyBidXMgY29ubmVjdGVkIHRvIGl0LCB3aGljaCBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiB0aGUgdHlwaWNhbCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgZmFsbHMgdW5kZXIgdGhlIFwic3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgY2F0ZWdvcnkuIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuTGV0J3MgbWFrZSBzdXJlIG91ciByZXN1bHRzIHJlZmxlY3QgdGhpczpcbiogICBgRm9jdXNTeW1ib2xzOiBbXWBcbiogICBgRW5hYmxlQ29uZmlnczogW11gXG4qICAgYFdvcnRoRnV6emluZzogZmFsc2VgXG4qICAgYFJlYXNvbmluZzogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdC5gXG5cbkFuZCBub3cgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyNzQsIk91dHB1dFRva2VucyI6MTIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM2OjA4LjU2ODk3MjIyM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU44ODExSCAvIEFOODgxMUhCIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBoYW5kbGUgcGFja2FnZSB2YXJpYW50IGRldGVjdGlvbiBhbmQgTEVEIEdQSU8gY29uZmlndXJhdGlvbi4gVGhpcyBjb2RlIHJlcXVpcmVzIGRlZGljYXRlZCBwaHlzaWNhbCBBaXJvaGEgUEhZIGhhcmR3YXJlIG9uIGFuIE1ESU8gYnVzIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIEVOODgxMUggLyBBTjg4MTFIQiBFdGhlcm5ldCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYykgdG8gaGFuZGxlIHBhY2thZ2UgdmFyaWFudCBkZXRlY3Rpb24gYW5kIExFRCBHUElPIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSByZXF1aXJlcyBkZWRpY2F0ZWQgcGh5c2ljYWwgQWlyb2hhIFBIWSBoYXJkd2FyZSBvbiBhbiBNRElPIGJ1cyBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgaXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzY6MDguNTY4OTk1NjEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdnqwk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 06:06:52 +0000 UTC FinishedAt: 2026-09-07 06:36:10 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIC8gQU44ODExSEIgRXRoZXJuZXQgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMpIHRvIGhhbmRsZSBwYWNrYWdlIHZhcmlhbnQgZGV0ZWN0aW9uIGFuZCBMRUQgR1BJTyBjb25maWd1cmF0aW9uLiBUaGlzIGNvZGUgcmVxdWlyZXMgZGVkaWNhdGVkIHBoeXNpY2FsIEFpcm9oYSBQSFkgaGFyZHdhcmUgb24gYW4gTURJTyBidXMgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIGl0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYWI2MTI3Y2NlZjlkZTFlNjNlNzM3MDFhNjdjZDZmY2I3NmJlNTlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNjozNToyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG5pbmRleCAzOGViMThmMGU5YmI0Li5hZTI0YzQxZjUzOGFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG5AQCAtMTQ1LDEwICYjNDM7MTQ1LDIyIEBAXG4gXG4gI2RlZmluZSBBTjg4MTFIQl9HUElPX09VVFBVVFx0XHQweDVjZjhiOFxuICNkZWZpbmUgICBBTjg4MTFIQl9HUElPX09VVFBVVF8zNDVcdFx0KEJJVCgzKSB8IEJJVCg0KSB8IEJJVCg1KSlcbiYjNDM7I2RlZmluZSAgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzAxMTVcdFx0KEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgxNSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFOODgxMUhCX0dQSU9fU0VMMVx0XHQweDVjZjhiY1xuJiM0MzsjZGVmaW5lICAgQU44ODExSEJfR1BJT19TRUwxXzBfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMV9NQVNLXHRcdEdFTk1BU0soNywgNClcbiYjNDM7I2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMV8wXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMVx0XHRcdDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQU44ODExSEJfR1BJT19TRUwyXHRcdDB4NWNmOGMwXG4mIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDJfMTVfTUFTS1x0XHRHRU5NQVNLKDMxLCAyOClcbiYjNDM7I2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMl8xNVx0XHRcdEJJVCgyOSlcbiBcbiAjZGVmaW5lIEFOODgxMUhCX0hXVFJBUDFcdFx0MHg1Y2Y5MTBcbiAjZGVmaW5lIEFOODgxMUhCX0hXVFJBUDJcdFx0MHg1Y2Y5MTRcbiAjZGVmaW5lICAgQU44ODExSEJfSFdUUkFQMl9DS09cdFx0XHRCSVQoMjgpXG4mIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9IV1RSQVAyX1BLR1x0XHRcdEdFTk1BU0soMTQsIDEyKVxuIFxuICNkZWZpbmUgQU44ODExSEJfQ0xLX0RSVlx0XHQweDVjZjllNFxuICNkZWZpbmUgQU44ODExSEJfQ0xLX0RSVl9DS09fTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbkBAIC0yMDIsNiAmIzQzOzIxNCw3IEBAIHN0cnVjdCBlbjg4MTFoX3ByaXYge1xuIFx0c3RydWN0IHBoeV9kZXZpY2VcdCpwaHlkZXY7XG4gXHR1bnNpZ25lZCBpbnRcdFx0Y2tvX2lzX2VuYWJsZWQ7XG4gXHRzdHJ1Y3QgbWRpb19kZXZpY2VcdCpwYnVzZGV2O1xuJiM0MztcdGJvb2xcdFx0XHRpc19hbjg4MTFoYmNuO1xuIH07XG4gXG4gZW51bSB7XG5AQCAtMTA3MSwxMCAmIzQzOzEwODQsNDkgQEAgc3RhdGljIGludCBlbjg4MTFoX2xlZHNfc2V0dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGFuODgxMWhiX2xlZF9ncGlvX3NldHVwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYW44ODExaGJjbikge1xuJiM0MztcdFx0LyogQU44ODExSEJDTjogTEVEIEdQSU9zIGFyZSAwLCAxLCAxNSAqL1xuJiM0MztcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19PVVRQVVQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMDExNSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBBTjg4MTFIQl9HUElPX09VVFBVVF8wMTE1KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19TRUwxLFxuJiM0MztcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMV8wX01BU0sgfFxuJiM0MztcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMV8xX01BU0ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19TRUwxXzAgfFxuJiM0MztcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMV8xKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19TRUwyLFxuJiM0MztcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMl8xNV9NQVNLLFxuJiM0MztcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMl8xNSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBBTjg4MTFIQk46IExFRCBHUElPcyBhcmUgMywgNCwgNSAqL1xuJiM0MztcdFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19PVVRQVVQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1LFxuJiM0MztcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhbjg4MTFoYl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbiBcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXY7XG4mIzQzO1x0dTMyIHJlZ192YWw7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcbkBAIC0xMTE1LDYgJiM0MzsxMTY3LDEyIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cbiBcdHBoeWRldi1cdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xuIFxuJiM0MztcdC8qIERldGVjdCBwYWNrYWdlIHZhcmlhbnQgKi9cbiYjNDM7XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgQU44ODExSEJfSFdUUkFQMiwgXHUwMDI2cmVnX3ZhbCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rldl9jcmVhdGU7XG4mIzQzO1x0cHJpdi1cdTAwM2Vpc19hbjg4MTFoYmNuID0gRklFTERfR0VUKEFOODgxMUhCX0hXVFJBUDJfUEtHLCByZWdfdmFsKTtcbiYjNDM7XG4gXHRyZXQgPSBlbjg4MTFoX2xlZHNfc2V0dXAocGh5ZGV2KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX2Rldl9jcmVhdGU7XG5AQCAtMTI2MywxMCAmIzQzOzEzMjEsMTEgQEAgc3RhdGljIGludCBhbjg4MTFoYl9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0LyogUmVzdG9yZSBMRUQgR1BJTyBvdXRwdXQgZW5hYmxlcyBhZnRlciBNQ1UgaW5pdGlhbGl6YXRpb24uICovXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX09VVFBVVCxcbi1cdFx0XHRcdFx0ICBBTjg4MTFIQl9HUElPX09VVFBVVF8zNDUsXG4tXHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1KTtcbiYjNDM7XHRyZXQgPSBhbjg4MTFoYl9sZWRfZ3Bpb19zZXR1cChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtGYWlsZWQgdG8gc2V0IHVwIExFRCBHUElPOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIC8gQU44ODExSEIgRXRoZXJuZXQgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMpIHRvIGhhbmRsZSBwYWNrYWdlIHZhcmlhbnQgZGV0ZWN0aW9uIGFuZCBMRUQgR1BJTyBjb25maWd1cmF0aW9uLiBUaGlzIGNvZGUgcmVxdWlyZXMgZGVkaWNhdGVkIHBoeXNpY2FsIEFpcm9oYSBQSFkgaGFyZHdhcmUgb24gYW4gTURJTyBidXMgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIGl0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYWI2MTI3Y2NlZjlkZTFlNjNlNzM3MDFhNjdjZDZmY2I3NmJlNTlkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwNjozNToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKaW5kZXggMzhlYjE4ZjBlOWJiNC4uYWUyNGM0MWY1MzhhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMKQEAgLTE0NSwxMCAmIzQzOzE0NSwyMiBAQAogCiAjZGVmaW5lIEFOODgxMUhCX0dQSU9fT1VUUFVUCQkweDVjZjhiOAogI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NQkJKEJJVCgzKSB8IEJJVCg0KSB8IEJJVCg1KSkKJiM0MzsjZGVmaW5lICAgQU44ODExSEJfR1BJT19PVVRQVVRfMDExNQkJKEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgxNSkpCiYjNDM7CiYjNDM7I2RlZmluZSBBTjg4MTFIQl9HUElPX1NFTDEJCTB4NWNmOGJjCiYjNDM7I2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMV8wX01BU0sJCUdFTk1BU0soMywgMCkKJiM0MzsjZGVmaW5lICAgQU44ODExSEJfR1BJT19TRUwxXzFfTUFTSwkJR0VOTUFTSyg3LCA0KQomIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMAkJCUJJVCgwKQomIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMQkJCTAKJiM0MzsKJiM0MzsjZGVmaW5lIEFOODgxMUhCX0dQSU9fU0VMMgkJMHg1Y2Y4YzAKJiM0MzsjZGVmaW5lICAgQU44ODExSEJfR1BJT19TRUwyXzE1X01BU0sJCUdFTk1BU0soMzEsIDI4KQomIzQzOyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDJfMTUJCQlCSVQoMjkpCiAKICNkZWZpbmUgQU44ODExSEJfSFdUUkFQMQkJMHg1Y2Y5MTAKICNkZWZpbmUgQU44ODExSEJfSFdUUkFQMgkJMHg1Y2Y5MTQKICNkZWZpbmUgICBBTjg4MTFIQl9IV1RSQVAyX0NLTwkJCUJJVCgyOCkKJiM0MzsjZGVmaW5lICAgQU44ODExSEJfSFdUUkFQMl9QS0cJCQlHRU5NQVNLKDE0LCAxMikKIAogI2RlZmluZSBBTjg4MTFIQl9DTEtfRFJWCQkweDVjZjllNAogI2RlZmluZSBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLCQlHRU5NQVNLKDE0LCAxMikKQEAgLTIwMiw2ICYjNDM7MjE0LDcgQEAgc3RydWN0IGVuODgxMWhfcHJpdiB7CiAJc3RydWN0IHBoeV9kZXZpY2UJKnBoeWRldjsKIAl1bnNpZ25lZCBpbnQJCWNrb19pc19lbmFibGVkOwogCXN0cnVjdCBtZGlvX2RldmljZQkqcGJ1c2RldjsKJiM0MzsJYm9vbAkJCWlzX2FuODgxMWhiY247CiB9OwogCiBlbnVtIHsKQEAgLTEwNzEsMTAgJiM0MzsxMDg0LDQ5IEBAIHN0YXRpYyBpbnQgZW44ODExaF9sZWRzX3NldHVwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYW44ODExaGJfbGVkX2dwaW9fc2V0dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpc19hbjg4MTFoYmNuKSB7CiYjNDM7CQkvKiBBTjg4MTFIQkNOOiBMRUQgR1BJT3MgYXJlIDAsIDEsIDE1ICovCiYjNDM7CQlyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX09VVFBVVCwKJiM0MzsJCQkJCQkgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzAxMTUsCiYjNDM7CQkJCQkJICBBTjg4MTFIQl9HUElPX09VVFBVVF8wMTE1KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX1NFTDEsCiYjNDM7CQkJCQkJICBBTjg4MTFIQl9HUElPX1NFTDFfMF9NQVNLIHwKJiM0MzsJCQkJCQkgIEFOODgxMUhCX0dQSU9fU0VMMV8xX01BU0ssCiYjNDM7CQkJCQkJICBBTjg4MTFIQl9HUElPX1NFTDFfMCB8CiYjNDM7CQkJCQkJICBBTjg4MTFIQl9HUElPX1NFTDFfMSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19TRUwyLAomIzQzOwkJCQkJCSAgQU44ODExSEJfR1BJT19TRUwyXzE1X01BU0ssCiYjNDM7CQkJCQkJICBBTjg4MTFIQl9HUElPX1NFTDJfMTUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEFOODgxMUhCTjogTEVEIEdQSU9zIGFyZSAzLCA0LCA1ICovCiYjNDM7CQlyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX09VVFBVVCwKJiM0MzsJCQkJCQkgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSwKJiM0MzsJCQkJCQkgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7CiAJc3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdjsKJiM0MzsJdTMyIHJlZ192YWw7CiAJaW50IHJldDsKIAogCXByaXYgPSBkZXZtX2t6YWxsb2MoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LCBzaXplb2Yoc3RydWN0IGVuODgxMWhfcHJpdiksCkBAIC0xMTE1LDYgJiM0MzsxMTY3LDEyIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAkvKiBNRElPX0RFVlMxLzIgZW1wdHksIHNvIHNldCBtbWRzX3ByZXNlbnQgYml0cyBoZXJlICovCiAJcGh5ZGV2LSZndDtjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOOwogCiYjNDM7CS8qIERldGVjdCBwYWNrYWdlIHZhcmlhbnQgKi8KJiM0MzsJcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIEFOODgxMUhCX0hXVFJBUDIsICZhbXA7cmVnX3ZhbCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfZGV2X2NyZWF0ZTsKJiM0MzsJcHJpdi0mZ3Q7aXNfYW44ODExaGJjbiA9IEZJRUxEX0dFVChBTjg4MTFIQl9IV1RSQVAyX1BLRywgcmVnX3ZhbCk7CiYjNDM7CiAJcmV0ID0gZW44ODExaF9sZWRzX3NldHVwKHBoeWRldik7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyX2Rldl9jcmVhdGU7CkBAIC0xMjYzLDEwICYjNDM7MTMyMSwxMSBAQCBzdGF0aWMgaW50IGFuODgxMWhiX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJCXJldHVybiByZXQ7CiAJfQogCi0JLyogUmVzdG9yZSBMRUQgR1BJTyBvdXRwdXQgZW5hYmxlcyBhZnRlciBNQ1UgaW5pdGlhbGl6YXRpb24uICovCi0JcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19PVVRQVVQsCi0JCQkJCSAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1LAotCQkJCQkgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSk7CiYjNDM7CXJldCA9IGFuODgxMWhiX2xlZF9ncGlvX3NldHVwKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtGYWlsZWQgdG8gc2V0IHVwIExFRCBHUElPOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiAJcmV0dXJuIHJldDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDU4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgZGVjaWRlIGlmIGl0JiMzOTtzIHdvcnRoIG91ciB0aW1lIHRvIHRocm93IGl0IGludG8gdGhlIHN5emthbGxlciBmdXp6aW5nIGdyaW5kZXIuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LgoKUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgLiBIbW0sIGFuIEV0aGVybmV0IFBIWSBkcml2ZXIg4oCTIHRoZSBBaXJvaGEgRU44ODExSC9BTjg4MTFIQiBHaWdhYml0IEV0aGVybmV0IFBIWSBkcml2ZXIsIHRvIGJlIHByZWNpc2UuIFRoYXQgZ2l2ZXMgbWUgYSBnZW5lcmFsIGlkZWEuCgpOb3csIHRvIHJlYWxseSBkZXRlcm1pbmUgaXRzIGZ1enppbmcgdmFsdWUsIEkgbmVlZCB0byBjaGVjayBpdHMgcmVhY2hhYmlsaXR5IHdpdGhpbiB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIEtjb25maWcsIHRoZSBkcml2ZXImIzM5O3MgZGVwZW5kZW5jaWVzLCBhbmQgaWYgaXQmIzM5O3Mgb24gdGhlIE1ESU8gYnVzLCBhbGwgaGF2ZSBhIGJlYXJpbmcgb24gdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGFuZCBrZXJuZWwgY29uZmlndXJhdGlvbiB0byBzZWUgaWYgd2UgY2FuIGdldCB0byBpdCBpbiBRRU1VIG9yIEdDRS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZXZlbiBjb21waWxlZCBhbmQgbGlua2VkLgoKVGltZSB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIG9yIGxvb2sgYXQgZXhpc3Rpbmcgc3l6a2FsbGVyIGNvbmZpZ3MsIHRvIHNlZSB3aGVyZSBgYWlyX2VuODgxMWguY2Agb3IsIG1vcmUgYnJvYWRseSwgRXRoZXJuZXQgUEhZIGRyaXZlcnMsIGFyZSB1c2VkIGFuZCBjb25maWd1cmVkLiBLbm93aW5nIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBicm91Z2h0IGludG8gcGxheSB3aWxsIHRlbGwgbWUgaWYgdGhlIGF0dGFjayBzdXJmYWNlIGlzIGV4cG9zZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgcGF0aCB0byBleHBsb2l0YXRpb24sIGFuZCB3aGV0aGVyIGEgZnV6emluZyB0YXJnZXQgaXMganVzdGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fpcl9lbjg4MTFoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQUlSX0FOODgwMV9QSFkpXHQmIzQzOz0gYWlyX2FuODgwMS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0FJUl9FTjg4MTFIX1BIWSkgICAmIzQzOz0gYWlyX2VuODgxMWgub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTM1LW9iai0kKENPTkZJR19BSVJfTkVUX1BIWUxJQilcdCYjNDM7PSBhaXJfcGh5X2xpYi5vXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjQtLyogTEVEIGJhc2ljIGNvbnRyb2wgcmVnaXN0ZXIsIHBhcnQgb2YgdGhlIHNhbWUgTEVEIGJsb2NrIGFzIHRoZSBMRUQwL0xFRDFcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM6MzI1OiAqIGNvbnRyb2wgcmVnaXN0ZXJzIGFib3ZlLiBUaGUgYWlyX2VuODgxMWggZHJpdmVyIGRlc2NyaWJlcyB0aGUgc2FtZVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjYtICogcmVnaXN0ZXIgYXMgQUlSX1BIWV9MRURfQkNSLlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM9MTQ4Mj1zdGF0aWMgaW50IGVuNzUyOF9waHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE0ODYtXHQgKiBwcm9ncmFtbWVkIGludG8gdGhlIExFRCBjb250cm9sIHJlZ2lzdGVycy4gSGFuZCB0aGUgcGlucyBvdmVyIHRvXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjE0ODc6XHQgKiB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXJzIHRoZSBzYW1lIHdheSB0aGUgYWlyX2VuODgxMWggZHJpdmVyXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE0ODgtXHQgKiBkb2VzOyB0aGUgbW9kZSBmaWVsZCBvZiB0aGlzIHJlZ2lzdGVyIGlzIGFscmVhZHkgc2V0IG91dCBvZiByZXNldC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzc2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXM6CgoqKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIEFpci1FTjg4MTFIIFBIWSBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEFpci1FTjg4MTFIIFBIWS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBkcml2ZXImIzM5O3MgbmV0d29yayBQSFkgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBkZWZpbmVkIGFuZCBjb250cm9sbGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXJvdW5kIHRoZSBgQ09ORklHX0FJUl9FTjg4MTFIX1BIWWAgc3ltYm9sLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgZHJpdmVyJiMzOTtzIGJlaGF2aW9yIGlzIGxpa2VseSBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBjb25kaXRpb25zIGVuYWJsZSB0aGlzIGRldmljZSwgd2hpY2ggbWlnaHQgaW52b2x2ZSBkZXBlbmRlbmN5IGNoZWNrcyBvbiBvdGhlciBoYXJkd2FyZSBvciBzb2Z0d2FyZSBmZWF0dXJlcywgYW5kIGFueSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBzZWUgaWYgdGhpcyBoYXMgYmVlbiBjb25maWd1cmVkIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FJUl9FTjg4MTFIX1BIWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz05Mz1jb25maWcgQUlSX0FOODgwMV9QSFlcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy05OC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk5OmNvbmZpZyBBSVJfRU44ODExSF9QSFlcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTEwMC1cdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBFTjg4MTFIIDIuNSBHaWdhYml0IFBIWVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQUlSX0FOODgwMV9QSFkpXHQmIzQzOz0gYWlyX2FuODgwMS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0FJUl9FTjg4MTFIX1BIWSkgICAmIzQzOz0gYWlyX2VuODgxMWgub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTM1LW9iai0kKENPTkZJR19BSVJfTkVUX1BIWUxJQilcdCYjNDM7PSBhaXJfcGh5X2xpYi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg0NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBhaXJfZW44ODExaC5jYCBkcml2ZXIgaG9va3MgaW50byB0aGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBpdHMgUEhZIGRyaXZlciByZWdpc3RyYXRpb24uIE15IGdvYWwgaXMgdG8gZmlndXJlIG91dCB0aGUgZGV2aWNlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJpbmQgdG8uIEkmIzM5O2xsIHplcm8gaW4gb24gdGhlIGBwaHlfZHJpdmVyYCByZWdpc3RyYXRpb24gc2VjdGlvbiB3aXRoaW4gdGhlIGNvZGUuIFRoYXQmIzM5O3MgdGhlIGtleS4gQnkgYW5hbHl6aW5nIGhvdyBgcGh5X2RyaXZlcmAgaXMgaGFuZGxlZCwgSSBzaG91bGQgYmUgYWJsZSB0byBkZWR1Y2UgdGhlIGludGVuZGVkIHRhcmdldCBoYXJkd2FyZS4gVGhpcyBpcyByb3V0aW5lLCBidXQgZXNzZW50aWFsIHdoZW4gYXNzZXNzaW5nIGEgbmV3IGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzAwOlx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4xMzAxOlx0XHRpbnQgcmV0O1xuMTMwMjpcdFxuMTMwMzpcdFx0LyogSWYgcmVzdGFydCBoYXBwZW5lZCBpbiAucHJvYmUoKSwgbm8gbmVlZCB0byByZXN0YXJ0IG5vdyAqL1xuMTMwNDpcdFx0aWYgKHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQpIHtcbjEzMDU6XHRcdFx0cmV0ID0gZW44ODExaF9yZXN0YXJ0X21jdShwaHlkZXYpO1xuMTMwNjpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTMwNzpcdFx0XHRcdHJldHVybiByZXQ7XG4xMzA4Olx0XHR9IGVsc2Uge1xuMTMwOTpcdFx0XHQvKiBOZXh0IGNhbGxzIHRvIC5jb25maWdfaW5pdCgpIG1jdSBuZWVkcyB0byByZXN0YXJ0ICovXG4xMzEwOlx0XHRcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSB0cnVlO1xuMTMxMTpcdFx0fVxuMTMxMjpcdFxuMTMxMzpcdFx0cmV0ID0gYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShwaHlkZXYpO1xuMTMxNDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzMTU6XHRcdFx0cmV0dXJuIHJldDtcbjEzMTY6XHRcbjEzMTc6XHRcdHJldCA9IGFpcl9sZWRzX2luaXQocGh5ZGV2LCBFTjg4MTFIX0xFRF9DT1VOVCwgQUlSX1BIWV9MRURfRFVSLFxuMTMxODpcdFx0XHRcdCAgICBBSVJfTEVEX01PREVfVVNFUl9ERUZJTkUpO1xuMTMxOTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTMyMDpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbGVkczogJWRcXG5cJiMzNDssIHJldCk7XG4xMzIxOlx0XHRcdHJldHVybiByZXQ7XG4xMzIyOlx0XHR9XG4xMzIzOlx0XG4xMzI0Olx0XHRyZXQgPSBhbjg4MTFoYl9sZWRfZ3Bpb19zZXR1cChwaHlkZXYpO1xuMTMyNTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTMyNjpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmFpbGVkIHRvIHNldCB1cCBMRUQgR1BJTzogJWRcXG5cJiMzNDssIHJldCk7XG4xMzI3Olx0XHRcdHJldHVybiByZXQ7XG4xMzI4Olx0XHR9XG4xMzI5Olx0XHRyZXR1cm4gcmV0O1xuMTMzMDpcdH1cbjEzMzE6XHRcbjEzMzI6XHRzdGF0aWMgaW50IGVuODgxMWhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjEzMzM6XHR7XG4xMzM0Olx0XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4xMzM1Olx0XHRpbnQgcmV0O1xuMTMzNjpcdFxuMTMzNzpcdFx0LyogSWYgcmVzdGFydCBoYXBwZW5lZCBpbiAucHJvYmUoKSwgbm8gbmVlZCB0byByZXN0YXJ0IG5vdyAqL1xuMTMzODpcdFx0aWYgKHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQpIHtcbjEzMzk6XHRcdFx0cmV0ID0gZW44ODExaF9yZXN0YXJ0X21jdShwaHlkZXYpO1xuMTM0MDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM0MTpcdFx0XHRcdHJldHVybiByZXQ7XG4xMzQyOlx0XHR9IGVsc2Uge1xuMTM0MzpcdFx0XHQvKiBOZXh0IGNhbGxzIHRvIC5jb25maWdfaW5pdCgpIG1jdSBuZWVkcyB0byByZXN0YXJ0ICovXG4xMzQ0Olx0XHRcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSB0cnVlO1xuMTM0NTpcdFx0fVxuMTM0NjpcdFxuMTM0NzpcdFx0LyogU2VsZWN0IG1vZGUgMSwgdGhlIG9ubHkgbW9kZSBzdXBwb3J0ZWQuXG4xMzQ4Olx0XHQgKiBDb25maWd1cmVzIHRoZSBTZXJEZXMgZm9yIDI1MDBCYXNlLVggd2l0aCByYXRlIGFkYXB0YXRpb25cbjEzNDk6XHRcdCAqL1xuMTM1MDpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMSxcbjEzNTE6XHRcdFx0XHQgICAgQUlSX1BIWV9NQ1VfQ01EXzFfTU9ERTEpO1xuMTM1MjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzNTM6XHRcdFx0cmV0dXJuIHJldDtcbjEzNTQ6XHRcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzIsXG4xMzU1Olx0XHRcdFx0ICAgIEFJUl9QSFlfTUNVX0NNRF8yX01PREUxKTtcbjEzNTY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMzU3Olx0XHRcdHJldHVybiByZXQ7XG4xMzU4Olx0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF8zLFxuMTM1OTpcdFx0XHRcdCAgICBBSVJfUEhZX01DVV9DTURfM19NT0RFMSk7XG4xMzYwOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM2MTpcdFx0XHRyZXR1cm4gcmV0O1xuMTM2MjpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfNCxcbjEzNjM6XHRcdFx0XHQgICAgQUlSX1BIWV9NQ1VfQ01EXzRfTU9ERTEpO1xuMTM2NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzNjU6XHRcdFx0cmV0dXJuIHJldDtcbjEzNjY6XHRcbjEzNjc6XHRcdHJldCA9IGVuODgxMWhfY29uZmlnX3NlcmRlc19wb2xhcml0eShwaHlkZXYpO1xuMTM2ODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzNjk6XHRcdFx0cmV0dXJuIHJldDtcbjEzNzA6XHRcbjEzNzE6XHRcdHJldCA9IGFpcl9sZWRzX2luaXQocGh5ZGV2LCBFTjg4MTFIX0xFRF9DT1VOVCwgQUlSX1BIWV9MRURfRFVSLFxuMTM3MjpcdFx0XHRcdCAgICBBSVJfTEVEX01PREVfVVNFUl9ERUZJTkUpO1xuMTM3MzpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTM3NDpcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbGVkczogJWRcXG5cJiMzNDssIHJldCk7XG4xMzc1Olx0XHRcdHJldHVybiByZXQ7XG4xMzc2Olx0XHR9XG4xMzc3Olx0XG4xMzc4Olx0XHQvKiBDb25maWd1cmUgbGVkIGdwaW8gcGlucyBhcyBvdXRwdXQuIE11c3QgYmUgcmVkb25lIG9uIGV2ZXJ5XG4xMzc5Olx0XHQgKiAuY29uZmlnX2luaXQoKSwgbm90IGp1c3Qgb25jZSBpbiAucHJvYmUoKTogZW44ODExaF9yZXN0YXJ0X21jdSgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwNgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgUEhZIGRldmljZSBtYXRjaGluZyBhbmQgcHJvYmluZyB3b3JrcywgYmFzZWQgb24gdGhlIGZpbGUgbmFtZSBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgOgoKKipQcm9iaW5nIHRoZSBBaXItRU44ODExSCBQSFkqKgoKUmlnaHQsIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgYW5kIGluaXRpYWxpemVzIHRoaXMgcGFydGljdWxhciBQSFkg4oCTIHRoZSBBaXItRU44ODExSC4gR2l2ZW4gdGhlIGZpbGUgcGF0aCwgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCwgbXkgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29udGVudHMgb2YgdGhhdCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHBvcmUgb3ZlciBpdCB0byB1bmRlcnN0YW5kIHRoZSBtYXRjaGluZyBwcm9jZXNzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29ubmVjdGVkIFBIWSBpcyAqYWN0dWFsbHkqIGFuIEFpci1FTjg4MTFIIGFuZCB0aGVuIGhvdyBpdCYjMzk7cyBicm91Z2h0IG9ubGluZSwgYmFzaWNhbGx5IHByb2JpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkZXZpY2UmIzM5O3MgaWRlbnRpZmljYXRpb24gZGF0YSwgaG93IGl0JiMzOTtzIGhhbmRsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiwgYW5kIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgbmVlZGVkLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgc3RhbmRhcmQgUEhZIGRyaXZlciBmcmFtZXdvcmsgZWxlbWVudHMsIGJ1dCB0aGUgY3J1Y2lhbCBiaXRzIHdpbGwgYmUgdGhlIHNwZWNpZmljcyByZWxhdGVkIHRvICp0aGlzKiBwYXJ0aWN1bGFyIFBIWSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JrIHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4gYW5kIGdldCBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxMDpcdFx0aW50IHJldDtcbjE0MTE6XHRcdHUzMiBhZHY7XG4xNDEyOlx0XG4xNDEzOlx0XHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7XG4xNDE0Olx0XHRcdHBoeWRldl93YXJuKHBoeWRldiwgXCYjMzQ7RGlzYWJsaW5nIGF1dG9uZWcgaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4xNDE1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTQxNjpcdFx0fVxuMTQxNzpcdFxuMTQxODpcdFx0YWR2ID0gbGlua21vZGVfYWR2X3RvX21paV8xMGdidF9hZHZfdChwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuMTQxOTpcdFxuMTQyMDpcdFx0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXG4xNDIxOlx0XHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLCBhZHYpO1xuMTQyMjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0MjM6XHRcdFx0cmV0dXJuIHJldDtcbjE0MjQ6XHRcdGlmIChyZXQgXHUwMDNlIDApXG4xNDI1Olx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuMTQyNjpcdFxuMTQyNzpcdFx0cmV0dXJuIF9fZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldiwgY2hhbmdlZCk7XG4xNDI4Olx0fVxuMTQyOTpcdFxuMTQzMDpcdHN0YXRpYyBpbnQgZW44ODExaF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTQzMTpcdHtcbjE0MzI6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbjE0MzM6XHRcdHUzMiBwYnVzX3ZhbHVlO1xuMTQzNDpcdFx0aW50IHJldCwgdmFsO1xuMTQzNTpcdFxuMTQzNjpcdFx0cmV0ID0gZ2VucGh5X3VwZGF0ZV9saW5rKHBoeWRldik7XG4xNDM3Olx0XHRpZiAocmV0KVxuMTQzODpcdFx0XHRyZXR1cm4gcmV0O1xuMTQzOTpcdFxuMTQ0MDpcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1VOU1VQUE9SVEVEO1xuMTQ0MTpcdFx0cGh5ZGV2LVx1MDAzZW1hc3Rlcl9zbGF2ZV9zdGF0ZSA9IE1BU1RFUl9TTEFWRV9TVEFURV9VTlNVUFBPUlRFRDtcbjE0NDI6XHRcdHBoeWRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4xNDQzOlx0XHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XG4xNDQ0Olx0XHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAwO1xuMTQ0NTpcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAwO1xuMTQ0NjpcdFx0cGh5ZGV2LVx1MDAzZXJhdGVfbWF0Y2hpbmcgPSBSQVRFX01BVENIX1BBVVNFO1xuMTQ0NzpcdFxuMTQ0ODpcdFx0cmV0ID0gZ2VucGh5X3JlYWRfbWFzdGVyX3NsYXZlKHBoeWRldik7XG4xNDQ5Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTQ1MDpcdFx0XHRyZXR1cm4gcmV0O1xuMTQ1MTpcdFxuMTQ1MjpcdFx0cmV0ID0gZ2VucGh5X3JlYWRfbHBhKHBoeWRldik7XG4xNDUzOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTQ1NDpcdFx0XHRyZXR1cm4gcmV0O1xuMTQ1NTpcdFxuMTQ1NjpcdFx0aWYgKHBoeV9pZF9jb21wYXJlX21vZGVsKHBoeWRldi1cdTAwM2VwaHlfaWQsIEFOODgxMUhCX1BIWV9JRCkpIHtcbjE0NTc6XHRcdFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XG4xNDU4Olx0XHRcdGlmICh2YWwgXHUwMDNjIDApXG4xNDU5Olx0XHRcdFx0cmV0dXJuIHZhbDtcbjE0NjA6XHRcdFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4xNDYxOlx0XHRcdFx0XHQgcGh5ZGV2LVx1MDAzZWxwX2FkdmVydGlzaW5nLFxuMTQ2MjpcdFx0XHRcdFx0IHZhbCBcdTAwMjYgTURJT19BTl8xMEdCVF9TVEFUX0xQMl81Ryk7XG4xNDYzOlx0XHR9IGVsc2Uge1xuMTQ2NDpcdFx0XHQvKiBHZXQgbGluayBwYXJ0bmVyIDIuNUdCQVNFLVQgYWJpbGl0eSBmcm9tIHZlbmRvciByZWdpc3RlciAqL1xuMTQ2NTpcdFx0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgRU44ODExSF8yUDVHX0xQQSxcbjE0NjY6XHRcdFx0XHRcdFx0XHRcdTAwMjZwYnVzX3ZhbHVlKTtcbjE0Njc6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0Njg6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQ2OTpcdFx0XHRsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbjE0NzA6XHRcdFx0XHRcdCBwaHlkZXYtXHUwMDNlbHBfYWR2ZXJ0aXNpbmcsXG4xNDcxOlx0XHRcdFx0XHQgcGJ1c192YWx1ZSBcdTAwMjYgRU44ODExSF8yUDVHX0xQQV8yUDVHKTtcbjE0NzI6XHRcdH1cbjE0NzM6XHRcbjE0NzQ6XHRcdGlmIChwaHlkZXYtXHUwMDNlYXV0b25lZ19jb21wbGV0ZSlcbjE0NzU6XHRcdFx0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuMTQ3NjpcdFxuMTQ3NzpcdFx0aWYgKCFwaHlkZXYtXHUwMDNlbGluaylcbjE0Nzg6XHRcdFx0cmV0dXJuIDA7XG4xNDc5Olx0XG4xNDgwOlx0XHQvKiBHZXQgcmVhbCBzcGVlZCBmcm9tIHZlbmRvciByZWdpc3RlciAqL1xuMTQ4MTpcdFx0dmFsID0gcGh5X3JlYWQocGh5ZGV2LCBBSVJfQVVYX0NUUkxfU1RBVFVTKTtcbjE0ODI6XHRcdGlmICh2YWwgXHUwMDNjIDApXG4xNDgzOlx0XHRcdHJldHVybiB2YWw7XG4xNDg0Olx0XHRzd2l0Y2ggKHZhbCBcdTAwMjYgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF9NQVNLKSB7XG4xNDg1Olx0XHRjYXNlIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMDpcbjE0ODY6XHRcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMjUwMDtcbjE0ODc6XHRcdFx0YnJlYWs7XG4xNDg4Olx0XHRjYXNlIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMTAwMDpcbjE0ODk6XHRcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA5MAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBBaXItRU44ODExSCBQSFkgRHJpdmVyKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoaXMgYGFpcl9lbjg4MTFoLmNgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcGh5YCBkaXJlY3RvcnkuIEkgbmVlZCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgaGVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbW9kdWxlIGRlZmluaXRpb24gYW5kIHRoZSBhbGwtaW1wb3J0YW50IGBwaHlfZHJpdmVyYCBzdHJ1Y3QuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIGRyaXZlciYjMzk7cyBpbnRlcmZhY2UgaXMgZGVmaW5lZCDigJMgaG93IGl0IHByZXNlbnRzIGl0c2VsZiB0byB0aGUgc3lzdGVtLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFBIWSwgYW5kIHdoYXQgY2FwYWJpbGl0aWVzIGl0IGV4cG9zZXMuIEdvdHRhIHZlcmlmeSB0aGUgbW9kdWxlJiMzOTtzIHN0cnVjdHVyZSBhbmQgdGhlbiB0aGUgbWVhdCBvZiBpdHMgb3BlcmF0aW9uYWwgZGV0YWlscyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFBIWSBpcyBhY3R1YWxseSBtYW5hZ2VkLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDkwOlx0XHRcdGJyZWFrO1xuMTQ5MTpcdFx0Y2FzZSBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEXzEwMDpcbjE0OTI6XHRcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwO1xuMTQ5MzpcdFx0XHRicmVhaztcbjE0OTQ6XHRcdGNhc2UgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8xMDpcbjE0OTU6XHRcdFx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTA7XG4xNDk2Olx0XHRcdGJyZWFrO1xuMTQ5NzpcdFx0fVxuMTQ5ODpcdFxuMTQ5OTpcdFx0LyogRmlybXdhcmUgYmVmb3JlIHZlcnNpb24gMjQwMTEyMDIgaGFzIG5vIHZlbmRvciByZWdpc3RlciAyUDVHX0xQQS5cbjE1MDA6XHRcdCAqIEFzc3VtZSBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNlZCBpdCBpZiBjb25uZWN0ZWQgYXQgMjUwME1icHMuXG4xNTAxOlx0XHQgKi9cbjE1MDI6XHRcdGlmIChwcml2LVx1MDAzZWZpcm13YXJlX3ZlcnNpb24gXHUwMDNjIDB4MjQwMTEyMDIpIHtcbjE1MDM6XHRcdFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4xNTA0Olx0XHRcdFx0XHQgcGh5ZGV2LVx1MDAzZWxwX2FkdmVydGlzaW5nLFxuMTUwNTpcdFx0XHRcdFx0IHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8yNTAwKTtcbjE1MDY6XHRcdH1cbjE1MDc6XHRcbjE1MDg6XHRcdC8qIE9ubHkgc3VwcG9ydHMgZnVsbCBkdXBsZXggKi9cbjE1MDk6XHRcdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfRlVMTDtcbjE1MTA6XHRcbjE1MTE6XHRcdHJldHVybiAwO1xuMTUxMjpcdH1cbjE1MTM6XHRcbjE1MTQ6XHRzdGF0aWMgaW50IGVuODgxMWhfY2xlYXJfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTUxNTpcdHtcbjE1MTY6XHRcdGludCByZXQ7XG4xNTE3Olx0XG4xNTE4Olx0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF8zLFxuMTUxOTpcdFx0XHRcdCAgICBBSVJfUEhZX01DVV9DTURfM19ET0NNRCk7XG4xNTIwOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTUyMTpcdFx0XHRyZXR1cm4gcmV0O1xuMTUyMjpcdFxuMTUyMzpcdFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfNCxcbjE1MjQ6XHRcdFx0XHQgICAgQUlSX1BIWV9NQ1VfQ01EXzRfSU5UQ0xSKTtcbjE1MjU6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNTI2Olx0XHRcdHJldHVybiByZXQ7XG4xNTI3Olx0XG4xNTI4Olx0XHRyZXR1cm4gMDtcbjE1Mjk6XHR9XG4xNTMwOlx0XG4xNTMxOlx0c3RhdGljIGlycXJldHVybl90IGVuODgxMWhfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTUzMjpcdHtcbjE1MzM6XHRcdGludCByZXQ7XG4xNTM0Olx0XG4xNTM1Olx0XHRyZXQgPSBlbjg4MTFoX2NsZWFyX2ludHIocGh5ZGV2KTtcbjE1MzY6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjE1Mzc6XHRcdFx0cGh5X2Vycm9yKHBoeWRldik7XG4xNTM4Olx0XHRcdHJldHVybiBJUlFfTk9ORTtcbjE1Mzk6XHRcdH1cbjE1NDA6XHRcbjE1NDE6XHRcdHBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTtcbjE1NDI6XHRcbjE1NDM6XHRcdHJldHVybiBJUlFfSEFORExFRDtcbjE1NDQ6XHR9XG4xNTQ1Olx0XG4xNTQ2Olx0c3RhdGljIGludCBlbjg4MTFoX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTU0NzpcdHtcbjE1NDg6XHRcdGNsa19yZXN0b3JlX2NvbnRleHQoKTtcbjE1NDk6XHRcbjE1NTA6XHRcdHJldHVybiBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4xNTUxOlx0fVxuMTU1MjpcdFxuMTU1MzpcdHN0YXRpYyBpbnQgZW44ODExaF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xNTU0Olx0e1xuMTU1NTpcdFx0Y2xrX3NhdmVfY29udGV4dCgpO1xuMTU1NjpcdFxuMTU1NzpcdFx0cmV0dXJuIGdlbnBoeV9zdXNwZW5kKHBoeWRldik7XG4xNTU4Olx0fVxuMTU1OTpcdFxuMTU2MDpcdHN0YXRpYyB2b2lkIGFuODgxMWhiX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuMTU2MTpcdHtcbjE1NjI6XHRcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbjE1NjM6XHRcbjE1NjQ6XHRcdGlmIChwcml2LVx1MDAzZXBidXNkZXYpIHtcbjE1NjU6XHRcdFx0bWRpb19kZXZpY2VfcmVtb3ZlKHByaXYtXHUwMDNlcGJ1c2Rldik7XG4xNTY2Olx0XHRcdG1kaW9fZGV2aWNlX2ZyZWUocHJpdi1cdTAwM2VwYnVzZGV2KTtcbjE1Njc6XHRcdH1cbjE1Njg6XHR9XG4xNTY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDcxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyBmcm9tIGxpbmUgMTU3MCBvbndhcmRzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBwaWVjZSBpcywgd2hlcmUgdGhlIGFuYWx5c2lzIGlzIHRha2luZyBwbGFjZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiBteSB1bmRlcnN0YW5kaW5nIGlzIGVpdGhlciBnb2luZyB0byBkZWVwZW4gb3IgYnJlYWssIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmb2N1c2VkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU3MDpcdHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBlbjg4MTFoX2RyaXZlcltdID0ge1xuMTU3MTpcdHtcbjE1NzI6XHRcdFBIWV9JRF9NQVRDSF9NT0RFTChFTjg4MTFIX1BIWV9JRCksXG4xNTczOlx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7QWlyb2hhIEVOODgxMUhcJiMzNDssXG4xNTc0Olx0XHQucHJvYmVcdFx0XHQ9IGVuODgxMWhfcHJvYmUsXG4xNTc1Olx0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0gZW44ODExaF9nZXRfZmVhdHVyZXMsXG4xNTc2Olx0XHQuY29uZmlnX2luaXRcdFx0PSBlbjg4MTFoX2NvbmZpZ19pbml0LFxuMTU3NzpcdFx0LmdldF9yYXRlX21hdGNoaW5nXHQ9IGVuODgxMWhfZ2V0X3JhdGVfbWF0Y2hpbmcsXG4xNTc4Olx0XHQuY29uZmlnX2FuZWdcdFx0PSBlbjg4MTFoX2NvbmZpZ19hbmVnLFxuMTU3OTpcdFx0LnJlYWRfc3RhdHVzXHRcdD0gZW44ODExaF9yZWFkX3N0YXR1cyxcbjE1ODA6XHRcdC5yZXN1bWVcdFx0XHQ9IGVuODgxMWhfcmVzdW1lLFxuMTU4MTpcdFx0LnN1c3BlbmRcdFx0PSBlbjg4MTFoX3N1c3BlbmQsXG4xNTgyOlx0XHQuY29uZmlnX2ludHJcdFx0PSBlbjg4MTFoX2NsZWFyX2ludHIsXG4xNTgzOlx0XHQuaGFuZGxlX2ludGVycnVwdFx0PSBlbjg4MTFoX2hhbmRsZV9pbnRlcnJ1cHQsXG4xNTg0Olx0XHQubGVkX2h3X2lzX3N1cHBvcnRlZFx0PSBlbjg4MTFoX2xlZF9od19pc19zdXBwb3J0ZWQsXG4xNTg1Olx0XHQucmVhZF9wYWdlXHRcdD0gYWlyX3BoeV9yZWFkX3BhZ2UsXG4xNTg2Olx0XHQud3JpdGVfcGFnZVx0XHQ9IGFpcl9waHlfd3JpdGVfcGFnZSxcbjE1ODc6XHRcdC5sZWRfYmxpbmtfc2V0XHRcdD0gYWlyX2xlZF9ibGlua19zZXQsXG4xNTg4Olx0XHQubGVkX2JyaWdodG5lc3Nfc2V0XHQ9IGFpcl9sZWRfYnJpZ2h0bmVzc19zZXQsXG4xNTg5Olx0XHQubGVkX2h3X2NvbnRyb2xfc2V0XHQ9IGFpcl9sZWRfaHdfY29udHJvbF9zZXQsXG4xNTkwOlx0XHQubGVkX2h3X2NvbnRyb2xfZ2V0XHQ9IGFpcl9sZWRfaHdfY29udHJvbF9nZXQsXG4xNTkxOlx0fSxcbjE1OTI6XHR7XG4xNTkzOlx0XHRQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODExSEJfUEhZX0lEKSxcbjE1OTQ6XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtBaXJvaGEgQU44ODExSEJcJiMzNDssXG4xNTk1Olx0XHQucHJvYmVcdFx0XHQ9IGFuODgxMWhiX3Byb2JlLFxuMTU5NjpcdFx0LnJlbW92ZVx0XHRcdD0gYW44ODExaGJfcmVtb3ZlLFxuMTU5NzpcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IGVuODgxMWhfZ2V0X2ZlYXR1cmVzLFxuMTU5ODpcdFx0LmNvbmZpZ19pbml0XHRcdD0gYW44ODExaGJfY29uZmlnX2luaXQsXG4xNTk5Olx0XHQuZ2V0X3JhdGVfbWF0Y2hpbmdcdD0gZW44ODExaF9nZXRfcmF0ZV9tYXRjaGluZyxcbjE2MDA6XHRcdC5jb25maWdfYW5lZ1x0XHQ9IGVuODgxMWhfY29uZmlnX2FuZWcsXG4xNjAxOlx0XHQucmVhZF9zdGF0dXNcdFx0PSBlbjg4MTFoX3JlYWRfc3RhdHVzLFxuMTYwMjpcdFx0LnJlc3VtZVx0XHRcdD0gZW44ODExaF9yZXN1bWUsXG4xNjAzOlx0XHQuc3VzcGVuZFx0XHQ9IGVuODgxMWhfc3VzcGVuZCxcbjE2MDQ6XHRcdC5jb25maWdfaW50clx0XHQ9IGVuODgxMWhfY2xlYXJfaW50cixcbjE2MDU6XHRcdC5oYW5kbGVfaW50ZXJydXB0XHQ9IGVuODgxMWhfaGFuZGxlX2ludGVycnVwdCxcbjE2MDY6XHRcdC5sZWRfaHdfaXNfc3VwcG9ydGVkXHQ9IGVuODgxMWhfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbjE2MDc6XHRcdC5yZWFkX3BhZ2VcdFx0PSBhaXJfcGh5X3JlYWRfcGFnZSxcbjE2MDg6XHRcdC53cml0ZV9wYWdlXHRcdD0gYWlyX3BoeV93cml0ZV9wYWdlLFxuMTYwOTpcdFx0LmxlZF9ibGlua19zZXRcdFx0PSBhaXJfbGVkX2JsaW5rX3NldCxcbjE2MTA6XHRcdC5sZWRfYnJpZ2h0bmVzc19zZXRcdD0gYWlyX2xlZF9icmlnaHRuZXNzX3NldCxcbjE2MTE6XHRcdC5sZWRfaHdfY29udHJvbF9zZXRcdD0gYWlyX2xlZF9od19jb250cm9sX3NldCxcbjE2MTI6XHRcdC5sZWRfaHdfY29udHJvbF9nZXRcdD0gYWlyX2xlZF9od19jb250cm9sX2dldCxcbjE2MTM6XHR9IH07XG4xNjE0Olx0XG4xNjE1Olx0bW9kdWxlX3BoeV9kcml2ZXIoZW44ODExaF9kcml2ZXIpO1xuMTYxNjpcdFxuMTYxNzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgZW44ODExaF90YmxbXSA9IHtcbjE2MTg6XHRcdHsgUEhZX0lEX01BVENIX01PREVMKEVOODgxMUhfUEhZX0lEKSB9LFxuMTYxOTpcdFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODExSEJfUEhZX0lEKSB9LFxuMTYyMDpcdFx0eyB9XG4xNjIxOlx0fTtcbjE2MjI6XHRcbjE2MjM6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGVuODgxMWhfdGJsKTtcbjE2MjQ6XHRNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTtcbjE2MjU6XHRNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RTUCk7XG4xNjI2Olx0TU9EVUxFX0ZJUk1XQVJFKEFOODgxMUhCX01EMzJfRE0pO1xuMTYyNzpcdE1PRFVMRV9GSVJNV0FSRShBTjg4MTFIQl9NRDMyX0RTUCk7XG4xNjI4Olx0XG4xNjI5Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0Fpcm9oYSBFTjg4MTFIIGFuZCBBTjg4MTFIQiBQSFkgZHJpdmVyc1wmIzM0Oyk7XG4xNjMwOlx0TU9EVUxFX0FVVEhPUihcJiMzNDtBaXJvaGFcJiMzNDspO1xuMTYzMTpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7RXJpYyBXb3Vkc3RyYSBcdTAwM2Nlcmljd291ZHNAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbjE2MzI6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk4MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBNRElPL1BIWSBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgcmVhY2hhYmxlIE1ESU8gUEhZIGRldmljZXMgYXJlIHdoZW4gaXQgY29tZXMgdG8gZnV6emluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuIFRoZSBxdWVzdGlvbiBJJiMzOTttIHRyeWluZyB0byBhbnN3ZXIgaXM6IGNhbiB3ZSBhY3R1YWxseSAqZ2V0IHRvKiB0aGVzZSB0aGluZ3M/CgpGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gQ2FuIHdlIHByb2JlIHRoZW0sIGVtdWxhdGUgdGhlbSwgb3IgaW5zdGFudGlhdGUgdGhlbSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBJIGtub3cgYSBNQUMgZHJpdmVyIHVzdWFsbHkgY3JlYXRlcyBhbiBNRElPIGJ1cyBhbmQgc2NhbnMsIG9yIGl0IGNvbWVzIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLCBBQ1BJLCBwbGF0Zm9ybSBkZXZpY2VzIG9yIE1ESU8gbmV0bGluay4gVGhlIHJlYWwgdHJpY2sgaXM6IGNhbiAqdXNlciBzcGFjZSogZG8gdGhpcz8gT3IsIGRvIHdlIGhhdmUgTURJTyBQSFkgZHJpdmVycyBpbiBzdGFuZGFyZCBRRU1VIC8gdmlydGlvIGNvbmZpZ3VyYXRpb25zPwoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIE1ESU8gYnVzZXMgYW5kIFBIWSBkcml2ZXJzIGRpcmVjdGx5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBmZWFzaWJpbGl0eSBvZiBpbnN0YW50aWF0aW5nIGEgc3BlY2lmaWMgUEhZIGRldmljZSB3aXRoIGEgdGFyZ2V0IFBIWSBJRCBsaWtlIGBBTjg4MTFIQl9QSFlfSURgIHdpdGhvdXQgbmVlZGluZyBhY3R1YWwgaGFyZHdhcmUuCgpGaW5hbGx5LCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYW55IHZpcnR1YWwgTURJTyBidXNlcyBvciBzb2Z0d2FyZSBNRElPIGRyaXZlcnMgY2FuIHByb3ZpZGUgYSB3YXkgaW4/IFRoaXMgbWVhbnMgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgYG1kaW8tZ3Bpb2AsIGBtZGlvLWJpdGJhbmdgLCBgbWRpby1kdW1teWAsIGFuZCBzbyBvbi4gSSYjMzk7bGwgbmVlZCB0byBhbHNvIGNoZWNrIHRoZSBzeXNmcyBhbmQgbmV0bGluayBpbnRlcmZhY2VzIGZvciBhbnkgTURJTyByZWxhdGVkIGVudHJ5cG9pbnRzLiBUaGlzIGlzIG15IGJlc3QgYmV0IGZvciBhIHNvZnR3YXJlIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9fYnVzX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NjgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNRElPYnVzIFJlZ2lzdHJhdGlvbiAtIFdoZXJlIHRvIFN0YXJ0PyoqCgpBbHJpZ2h0LCB0aGUgdGFzayBhdCBoYW5kIGlzIGRlZmluaXRlbHkgcmVsYXRlZCB0byBNRElPIGJ1cyByZWdpc3RyYXRpb24uIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHN5c3RlbSBpbml0aWFsaXplcyBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIE1ESU8gYnVzLiBTbywgaW5zdGVhZCBvZiByYW5kb21seSBkaXZpbmcgaW4sIEkgbmVlZCB0byBrbm93IHRoZSBlbnRyeSBwb2ludHMuIExldCYjMzk7cyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IGZ1bmN0aW9uIG5hbWUgdG8gc3RhcnQgd2l0aCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgYG1kaW9idXNfcmVnaXN0ZXJgLiBJdOKAmXMgdXN1YWxseSBhIHByZXR0eSByZWxpYWJsZSBpbmRpY2F0b3IuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoIGZvciB0aGF0LiBEZXBlbmRpbmcgb24gdGhlIHJlc3VsdHMsIEkmIzM5O2xsIGtub3cgd2hldGhlciB0aGlzIHdpbGwgaW52b2x2ZSBzb21lIGRyaXZlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgYnVzIGxheWVyIG1hbmlwdWxhdGlvbiwgb3Igb3ZlcmFsbCBib2FyZCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMzggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdD0zNDk9TURJT1xuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdC0zNTEtICBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZSgpXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3Q6MzUyOiAgZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKClcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTM6ICBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoKVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0LTM1NC1cbi0tXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdD0xMj1kZXZpY2UgKHRoZSBzYW1lIG9iamVjdHMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB2aWFcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0OjEzOmBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KClgYCkuIE1BQy1zaWRlIGNvbm5lY3Rpb24gcHJvcGVydGllcyBzdWNoIGFzXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdC0xNC1gYHBoeS1oYW5kbGVgYCBhbmQgYGBwaHktbW9kZWBgIGFyZSBkb2N1bWVudGVkIGluIFthY3BpLW1kaW8tcGh5XV8uXG4tLVxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0PTc9VGhlIFBIWXMgb24gYW4gTURJTyBidXMgW3BoeV0gYXJlIHByb2JlZCBhbmQgcmVnaXN0ZXJlZCB1c2luZ1xuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9waHkucnN0Ojg6Zndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KCkuXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3QtOS1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD00MD1yZWdpc3RlcmVkIGFzIGEgZGlzdGluY3QgZGV2aWNlLlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTU2LSAgIGRyaXZlciBuZWVkcywgc2V0dXAgdGhlIG1paV9idXMgc3RydWN0dXJlLCBhbmQgcmVnaXN0ZXIgd2l0aCB0aGUgUEFMIHVzaW5nXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDo1NzogICBtZGlvYnVzX3JlZ2lzdGVyLiAgU2ltaWxhcmx5LCB0aGVyZSYjMzk7cyBhIHJlbW92ZSBmdW5jdGlvbiB0byB1bmRvIGFsbCBvZlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNTgtICAgdGhhdCAodXNlIG1kaW9idXNfdW5yZWdpc3RlcikuXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYz0xMDk9c3RhdGljIGludCBlcDgyNDhlX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzItXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jOjEzMzpcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jLTEzNC1cdGlmIChyZXQpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmM9MjA3PXN0YXRpYyBpbnQgZ3Bpb19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jLTI0My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jOjI0NDpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQ1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9NjA3PXN0YXRpYyBpbnQgYmNtX3NmMl9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4My1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6Njg0Olx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jLTY4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM9MTg3PXN0YXRpYyBpbnQgZ3N3aXBfbWRpbyhzdHJ1Y3QgZ3N3aXBfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTMtXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYzoyMTQ6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjE1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0MS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0MjpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlZGV2LCBidXMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yMzIxPWludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTItXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMzkzOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz02ODU9c3RhdGljIGludCBsYW45Mzd4X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTc1NS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6NzU2Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRzLVx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zODk9eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MDYtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MDc6XHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDA4LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01MjA9eXQ5MjF4X21idXNfZXh0X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MzctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1Mzg6XHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM5LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjMzNz1tdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIzNzItXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjM3MzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMzc0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz0yNDI9c3RhdGljIGludCBtdDc2Mjhfc2V0dXBfaW50ZXJuYWxfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTI2MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzoyNjI6XHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy0yNjMtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM4MzQ9c3RhdGljIGludCBtdjg4ZTZ4eHhfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM4ODg6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTItXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjk0LVx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MTQ5PXN0YXRpYyBpbnQgbmV0Y19wb3J0X2NyZWF0ZV9lbWRpb19idXMoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTc5LVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6MTgwOlx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE4MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9OTU3PXN0YXRpYyBpbnQgdnNjOTk1OV9tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6MTAxNDpcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxNS1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM9ODc4PXN0YXRpYyBpbnQgdnNjOTk1M19tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDMtXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0Olx0cmMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIE5VTEwpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDUtXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODMtXHRvZl9ub2RlX3B1dChtbnApO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTk0Nz1xY2E4a19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4Ni1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk4NzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc1PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTEwMC1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoxMDE6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMTAyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM9MTExNz1zdGF0aWMgaW50IGE1cHN3X3Byb2JlX21kaW8oc3RydWN0IGE1cHN3ICphNXBzdywgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0My1cbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM6MTE0NDpcdHJldHVybiBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQ1LX1cbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg9MzA3PXZvaWQgc2phMTEwNV9mcmFtZV9tZW1vcnlfcGFydGl0aW9uaW5nKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMDktLyogRnJvbSBzamExMTA1X21kaW8uYyAqL1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oOjMxMDppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMzExLXZvaWQgc2phMTEwNV9tZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0zMDI2PXN0YXRpYyBpbnQgc2phMTEwNV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMzA2Ny1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjMwNjg6XHRyYyA9IHNqYTExMDVfbWRpb2J1c19yZWdpc3Rlcihkcyk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY5LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MjU4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdHhfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0yODctXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzoyODg6XHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0yODktXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0zMTI9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90MV9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM0My1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM0NDpcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM0NS1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTM2OD1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19wY3NfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zOTUtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzozOTY6XHRyYyA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5Ny1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTQzOT1zdGF0aWMgdm9pZCBzamExMTA1X21kaW9idXNfcGNzX3VucmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00NTgtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzo0NTk6aW50IHNqYTExMDVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00NjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jPTQ1OT1zdGF0aWMgaW50IGF4X21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmMtNDc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM6NDc5Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihheC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ4MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jPTEzMjE9c3RhdGljIGludCBvd2xfZW1hY19tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYzoxMzQ2Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cdTAwM2VtaWksIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0Ny1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYz01MDk9c3RhdGljIGludCBhZGluMTExMF9yZWdpc3Rlcl9tZGlvYnVzKHN0cnVjdCBhZGluMTExMF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jOjUzMDpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmMtNTMxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYz02MTc9c3RhdGljIGludCBhZGluMTE0MF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBhZGluMTE0MF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jOjYzNzpcdHJldHVybiBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpZGV2LVx1MDAzZWRldiwgcHJpdi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzOC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYz0xMjkwPXN0YXRpYyBpbnQgZ3JldGhfbWRpb19pbml0KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jOjEzMDc6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGdyZXRoLVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jPTM5MzE9c3RhdGljIGludCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYzo0MDI3Olx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI4LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jPTEyMT1zdGF0aWMgaW50IGFsdGVyYV90c2VfbWRpb19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6MTU4Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1OS1cdGlmIChyZXQgIT0gMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM9MTA2MT1zdGF0aWMgaW50IGF1MTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM6MTIyMjpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXVwLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9MzQyOD1zdGF0aWMgaW50IHhnYmVfcGh5X2luaXQoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxNy1cdHNucHJpbnRmKG1paS1cdTAwM2VpZCwgc2l6ZW9mKG1paS1cdTAwM2VpZCksIFwmIzM0OyVzXCYjMzQ7LCBkZXZfbmFtZShwZGF0YS1cdTAwM2VkZXYpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcxODpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxOS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcyMDpcdFx0ZGV2X2VycihwZGF0YS1cdTAwM2VkZXYsIFwmIzM0O21kaW9idXNfcmVnaXN0ZXIgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcyMS1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jPTk4PWludCB4Z2VfbWRpb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMTgtXHRtZGlvX2J1cy1cdTAwM2VwaHlfbWFzayA9IDB4MTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM6MTE5Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTEyMC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz04Mzc9aW50IHhnZW5lX2VuZXRfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjg4ODpzdGF0aWMgaW50IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODktXHRcdFx0XHQgIHN0cnVjdCBtaWlfYnVzICptZGlvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTEyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MTM6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxNC1cdFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjEtXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTIyOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTkzOT1pbnQgeGdlbmVfZW5ldF9tZGlvX2NvbmZpZyhzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjk1ODpcdHJldCA9IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIocGRhdGEsIG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYz0xMzE9aW50IGFyY19tZGlvX3Byb2JlKHN0cnVjdCBhcmNfZW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM6MTczOlx0ZXJyb3IgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbWRpb19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzQtXHRvZl9ub2RlX3B1dChtZGlvX25vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jPTk2Nj1zdGF0aWMgaW50IGF4ODg3OTZjX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jOjEwMTE6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpLVx1MDAzZWRldiwgYXhfbG9jYWwtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEyLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM9Njg3PXN0YXRpYyBpbnQgYWc3MXh4X21kaW9fcHJvYmUoc3RydWN0IGFnNzF4eCAqYWcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjctXHRtbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjcyODpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyOS1cdG9mX25vZGVfcHV0KG1ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjYwOlx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNjEtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM9MTcxMz1zdGF0aWMgaW50IGJjbV9lbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jOjE4MzA6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MzEtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYz0yMTE9c3RydWN0IG1paV9idXMgKmJjbWFfbWRpb19taWlfcmVnaXN0ZXIoc3RydWN0IGJnbWFjICpiZ21hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYzoyMzY6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNy1cdG9mX25vZGVfcHV0KG5wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz0xOTM9aW50IGJjbWdlbmV0X21paV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBpbml0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzMy1cdFx0cGh5X25hbWUgPSBcJiMzNDtleHRlcm5hbCBSdk1JSVwmIzM0OztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjIzNDpcdFx0Lyogb2ZfbWRpb2J1c19yZWdpc3RlciB0b29rIGNhcmUgb2YgcmVhZGluZyB0aGUgJiMzOTttYXgtc3BlZWQmIzM5O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjM1LVx0XHQgKiBQSFkgcHJvcGVydHkgZm9yIHVzLCBlZmZlY3RpdmVseSBsaW1pdGluZyB0aGUgUEhZIHN1cHBvcnRlZFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYz0yMTU3PXN0YXRpYyBpbnQgc2JtYWNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldiwgbG9uZyBsb25nIGJhc2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjctXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoyMjI4Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihzYy1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTE1MDU9c3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYzoxNTU4Olx0aSA9IG1kaW9idXNfcmVnaXN0ZXIodHAtXHUwMDNlbWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1OS1cdGlmIChpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwOTc6c3RhdGljIGludCBtYWNiX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1hY2IgKmJwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNC1cdGlmIChtZGlvX25wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTA1Olx0XHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMTk6XHRcdFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIwLVx0XHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMjI6XHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMy19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMTI1PXN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTU5Olx0ZXJyID0gbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKGJwLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE2MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYz0xMTA3PXN0YXRpYyBpbnQgZG05MDUxX21kaW9fcmVnaXN0ZXIoc3RydWN0IGJvYXJkX2luZm8gKmRiKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM6MTEyNTpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcdTAwMjZzcGktXHUwMDNlZGV2LCBkYi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTI0MjM9c3RhdGljIGludCB0c25lcF9tZGlvX2luaXQoc3RydWN0IHRzbmVwX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM6MjQ1NTpcdHJldHZhbCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cdTAwM2VtZGlvYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jPTEwMjQ9c3RhdGljIGludCBldGhvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM6MTIwODpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwOS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3MzQ9c3RhdGljIGludCBmdGdtYWMxMDBfc2V0dXBfbWRpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc3MDpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgcHJpdi1cdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc3MS1cdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jPTM2PXN0YXRpYyBpbnQgZW5ldGNfcGNpX21kaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYzo5MTpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBkZXYtXHUwMDNlb2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTI2Nj1zdGF0aWMgaW50IGVuZXRjX21kaW9fcHJvYmUoc3RydWN0IGVuZXRjX3BmICpwZiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjI5MzpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjk0LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MzA4PXN0YXRpYyBpbnQgZW5ldGNfaW1kaW9fY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozNDM6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQ0LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTMwNDI9c3RhdGljIGludCBmZWNfZW5ldF9taWlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozMTYxOlx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihmZXAtXHUwMDNlbWlpX2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYyLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM9NjU9c3RhdGljIGludCBtcGM1Mnh4X2ZlY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM6MTA2Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDctXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM9MTQ5PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYzoxNzY6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM9OTc9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYzoxNjc6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jPTQwOT1zdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6NDk0Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTUtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYz0zNzE9c3RhdGljIGludCB4Z21hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjYtXHRpZiAoaXNfb2Zfbm9kZShmd25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjc6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCB0b19vZl9ub2RlKGZ3bm9kZSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjgtXHRlbHNlIGlmIChpc19hY3BpX25vZGUoZndub2RlKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI5Olx0XHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBmd25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MzAtXHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyOTI6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jPTEwOTQ9c3RhdGljIGludCBoaXg1aGQyX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jOjExODY6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0xMjM9aW50IGhjbGdlX21hY19tZGlvX2NvbmZpZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU0LVx0bWRpb19idXMtXHUwMDNlcGh5X21hc2sgPSB+KDFVIFx1MDAzY1x1MDAzYyBtYWMtXHUwMDNlcGh5X2FkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYzoxNTU6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU2LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jPTQ5NT1zdGF0aWMgaW50IGhuc19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTg0Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTg1LVx0fSBlbHNlIGlmIChpc19hY3BpX25vZGUocGRldi1cdTAwM2VkZXYuZndub2RlKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5Mi1cdFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1OTM6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTQtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYz0yNTYwPXN0YXRpYyBpbnQgZW1hY19kdF9tZGlvX3Byb2JlKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODQtXHRzbnByaW50ZihidXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7JXNcJiMzNDssIGRldi1cdTAwM2VvZmRldi1cdTAwM2VuYW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYzoyNTg1Olx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNmRldi1cdTAwM2VvZmRldi1cdTAwM2VkZXYsIGJ1cywgbWlpX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg2LVx0aWYgKHJlcykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTEwMjY9aW50IGl4Z2JlX21paV9idXNfaW5pdChzdHJ1Y3QgaXhnYmVfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwODgtXHRhZGFwdGVyLVx1MDAzZW1paV9idXMgPSBidXM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoxMDg5Olx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwOTAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM9Mzg1PWx0cV9ldG9wX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDAyLVx0XHQgcHJpdi1cdTAwM2VwZGV2LVx1MDAzZW5hbWUsIHByaXYtXHUwMDNlcGRldi1cdTAwM2VpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jOjQwMzpcdGlmIChtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWlpX2J1cykpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDA0LVx0XHRlcnIgPSAtRU5YSU87XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYz0yODM9c3RhdGljIGludCBvcmlvbl9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODEtXHQvKiBGb3IgdGhlIHBsYXRmb3JtcyBub3Qgc3VwcG9ydGluZyBEVC9BQ1BJIGZhbGwtYmFja1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODI6XHQgKiB0byBtZGlvYnVzX3JlZ2lzdGVyIHZpYSBvZl9tZGlvYnVzX3JlZ2lzdGVyLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODMtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg0LVx0aWYgKGlzX2FjcGlfbm9kZShwZGV2LVx1MDAzZWRldi5md25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODU6XHRcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4Ni1cdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg3Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4OC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYz0xMzg3PXN0YXRpYyBpbnQgcHhhMTY4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTE1MDQtXHRwZXAtXHUwMDNlc21pX2J1cy1cdTAwM2VwaHlfbWFzayA9IDB4ZmZmZmZmZmY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYzoxNTA1Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihwZXAtXHUwMDNlc21pX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA2LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTk5OD1zdGF0aWMgaW50IG10a19tZGlvX2luaXQoc3RydWN0IG10a19ldGggKmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzctXHRkZXZfZGJnKGV0aC1cdTAwM2VkZXYsIFwmIzM0O01EQyBpcyBydW5uaW5nIG9uICVkIEh6XFxuXCYjMzQ7LCBNRENfTUFYX0ZSRVEgLyBldGgtXHUwMDNlbWRjX2RpdmlkZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYzoxMDM4Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihldGgtXHUwMDNlbWlpX2J1cywgbWlpX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMTAzOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM9MTQyMj1zdGF0aWMgaW50IG10a19zdGFyX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzoxNDQ4Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cdTAwM2VtaWksIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jPTI4Nz1pbnQgbWx4YmZfZ2lnZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBtbHhiZl9naWdlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmMtMzMyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYzozMzM6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzNC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM9MjUzPWludCBmYm5pY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmMtMjcyLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjI2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBEcml2ZXIgYW5kIEVtdWxhdGlvbiBQb3NzaWJpbGl0aWVzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCwgdGhlIGRyaXZlciBmb3IgdGhhdCBBaXJvaGEgRU44ODExSCBhbmQgQU44ODExSEIgRXRoZXJuZXQgUEhZIHRyYW5zY2VpdmVyLiBBaXJvaGEsIHJpZ2h0PyBPZnRlbiBzZWVuIG9uIE1lZGlhVGVrL0Fpcm9oYSByb3V0ZXIgYm9hcmRzIG9yIGRlZGljYXRlZCBuZXR3b3JraW5nIGVxdWlwbWVudC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbnkgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gc3VwcG9ydCwgbGlrZSBpbiBRRU1VIG9yIHdpdGggYSBVU0IgaW50ZXJmYWNlLCBmb3IgdGhhdCBzcGVjaWZpYyBjaGlwPyBUaGUgYW5zd2VyIGlzIHByb2JhYmx5IG5vLgoKVGhlc2UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0eXBpY2FsbHkgdGhleSYjMzk7bGwgcmVseSBvbiBzb21ldGhpbmcgbGlrZSBlMTAwMCwgdmlydGlvLW5ldCwgb3IgcnRsODEzOSBuZXR3b3JrIGludGVyZmFjZXMuIE9yLCBwZXJoYXBzIGEgVVNCIEV0aGVybmV0IGRvbmdsZSB1c2luZyBzb21ldGhpbmcgbGlrZSBheDg4MTc5XzE3OGEgb3IgY2RjX2V0aGVyLiBUaGUgdGhpbmcgaXMsIGV2ZW4gKmlmKiB0aGVyZSYjMzk7cyBhbiBNRElPIGJ1cyBhdmFpbGFibGUgaW4gdGhlIGVtdWxhdGVkIE5JQywgdGhhdCBgRU44ODExSF9QSFlfSURgIG9yIGBBTjg4MTFIQl9QSFlfSURgIC0gdGhhdCYjMzk7cyBoYXJkd2FyZS1zcGVjaWZpYy4gQSBkaXJlY3QgZW11bGF0aW9uIGlzIGxpa2VseSBvdXQgb2YgdGhlIHF1ZXN0aW9uLgoKU28sIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGlmIHRoZXJlIGFyZSBhbnkgKndvcmthcm91bmRzKiBmb3IgZ2V0dGluZyB0aGUgZHJpdmVyIGxvYWRlZCBvciBwcm9iZWQgd2l0aGluIFFFTVUuIENhbiBJLCBmb3IgZXhhbXBsZSwgbGV2ZXJhZ2Ugc3l6a2FsbGVyIHRvIGNyZWF0ZSBzb21lIHNvcnQgb2YgbW9jayBNRElPIG9yIFBIWSBkZXZpY2UgZnJvbSB1c2Vyc3BhY2U/IFRpbWUgdG8gaW52ZXN0aWdhdGUgdGhlIHBvc3NpYmlsaXR5IG9mIHVzZXJzcGFjZSBNRElPIG9yIFBIWSBkZXZpY2UgY3JlYXRpb24gaW50ZXJmYWNlcy4gSSYjMzk7bGwgbmVlZCB0byByZXNlYXJjaCwgc2VlIGlmIHRoZXJlIGFyZSBzdGFuZGFyZCBtZXRob2RzIGxpa2UgbmV0bGluaywgc3lzZnMsIG9yIG1heWJlIHNvbWUgaW9jdGwgY2FsbHMgdGhhdCBjb3VsZCBiZSBsZXZlcmFnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9kZXZpY2VfY3JlYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYz0xMTc9aW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMzQtXHRlbHNlXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTM1Olx0XHRwaHkgPSBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCwgMCwgTlVMTCk7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM2LVx0aWYgKElTX0VSUihwaHkpKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU4NS1cdFx0LyogUmVhbCBQSFkgSUQgb2YgUG9ydCAxIGlzIDAgKi9cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjU4NjpcdFx0cGh5ID0gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBQSFlfSURfVEpBMTEwMiwgZmFsc2UsIE5VTEwpO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTg3LVx0XHRpZiAoSVNfRVJSKHBoeSkpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTItXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1OTM6XHRcdC8qIE92ZXJ3cml0ZSBwYXJlbnQgZGV2aWNlLiBwaHlfZGV2aWNlX2NyZWF0ZSgpIHNldCBwYXJlbnQgdG9cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU5NC1cdFx0ICogdGhlIG1paV9idXMtXHUwMDNlZGV2LCB3aGljaCBpcyBub3QgY29ycmVjdCBpbiBjYXNlLlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NzI4PXN0YXRpYyBpbnQgcGh5X3JlcXVlc3RfZHJpdmVyX21vZHVsZShzdHJ1Y3QgcGh5X2RldmljZSAqZGV2LCB1MzIgcGh5X2lkKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNzQ3LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo3NDg6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDktXHRcdFx0XHQgICAgIGJvb2wgaXNfYzQ1LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtODM5LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6ODQwOkVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9jcmVhdGUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy04NDEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMDcxPXN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDk2LVx0XHRpZiAoIXIpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEwOTc6XHRcdFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDk4LVx0XHRcdFx0XHRcdCB0cnVlLCBcdTAwMjZjNDVfaWRzKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDE6XHRyZXR1cm4gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBwaHlfaWQsIGlzX2M0NSwgXHUwMDI2YzQ1X2lkcyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDItfVxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjE2Nz1pbnQgcGh5X21vZGlmeV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSwgdTMyIHJlZ251bSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIxNjktXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIxNzA6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTcxLVx0XHRcdFx0ICAgICBib29sIGlzX2M0NSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyNzQKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogNTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFN0cnVjdHVyYWxseSBVbnJlYWNoYWJsZSBDb2RlLCBOb3QgV29ydGggRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgaG93IHRoaXMgY29kZSBwYXRoIGlzIHRyaWdnZXJlZC4gVGhlIE1ESU8gYnVzIHNlZW1zIGxpa2UgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEkga25vdyB0aGVzZSBidXNlcyBhcmUgdHlwaWNhbGx5IHJlZ2lzdGVyZWQgYnkgRXRoZXJuZXQgTUFDIGRyaXZlcnMgd2hlbiB0aGV5IGRldGVjdCBjb25uZWN0ZWQgUEhZcyB2aWEgcGh5c2ljYWwgTURJTyBsaW5lcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBhaXJfZW44ODExaC5jYCBkcml2ZXIuIFRoaXMgZHJpdmVyIGhhcyBsb2dpYyB0aGF0IHJlbGllcyBvbiBhIHNwZWNpZmljIFBIWSBJRCByZWFkIGZyb20gYSBoYXJkd2FyZSB0cmFuc2NlaXZlciwgaW4gdGhpcyBjYXNlLCB0aGUgQWlyb2hhIEVOODgxMUguCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBlbnZpcm9ubWVudCwgc3RhbmRhcmQgZnV6emluZyBzZXR1cHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBWTXMgb24gYW1kNjQgZG9uJiMzOTt0IHByb3ZpZGUgdGhpcyBoYXJkd2FyZSBvciBhbiBhY2N1cmF0ZSBlbXVsYXRpb24gb2YgaXQuIFRoZSBBaXJvaGEgRU44ODExSCBpcywgaW4gZXNzZW5jZSwgYWJzZW50LgoKSSYjMzk7bGwgY29uc3VsdCBTZWN0aW9uIDIgb2YgdGhlIHRyaWFnZSBndWlkZS4gSXQgZXhwbGljaXRseSBjYWxscyBvdXQgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsJiMzNDsgbWVudGlvbmluZyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyAobGlrZSBtbHhzdywgcGRzX2NvcmUsIGV0Yy4pLCB0aGF0IHJlbHkgb24gcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0IGlzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXRjaCBhbmQgdGhlIHJlbGV2YW50IGRyaXZlciwgcmlnaHQgbm93LgoKVGhlIGd1aWRlIGVtcGhhc2l6ZXMgdGhhdCByZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZS4gSSBjYW4gb25seSBmdXp6IGNvZGUgdGhhdCAqY2FuKiBhY3R1YWxseSBleGVjdXRlIHdpdGhpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJZiB0aGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDIsIGl0IHNob3VsZCAqbm90KiBiZSBmdXp6ZWQsIHJlZ2FyZGxlc3Mgb2YgY29tcGxleGl0eSBvciBhZGRlZCBhc3NlcnRpb25zLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgcGFja2FnZSB2YXJpYW50IGRldGVjdGlvbiBpbiBgYW44ODExaGJfcHJvYmVgIGFuZCB1c2VzIHRoZSBgQU44ODExSEJfSFdUUkFQMmAgcmVnaXN0ZXIgdG8gYWRqdXN0IExFRCBHUElPIHNldHVwIGR1cmluZyBwcm9iZSBhbmQgY29uZmlnIGluaXRpYWxpemF0aW9uLgoKTm93IHRoZSBxdWVzdGlvbiByZW1haW5zOiBpcyBgYWlyX2VuODgxMWguY2AgcmVhY2hhYmxlPyBUaGUgYW5zd2VyIGlzIG5vLiBJdCBkZXBlbmRzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgQWlyb2hhIEVOODgxMUggaGFyZHdhcmUgb3IgYSBwaHlzaWNhbCBNRElPIGJ1cyBjb25uZWN0ZWQgdG8gaXQsIHdoaWNoIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHRoZSB0eXBpY2FsIFFFTVUvR0NFIGVudmlyb25tZW50cy4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgZmFsbHMgdW5kZXIgdGhlICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgY2F0ZWdvcnkuIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4KCkxldCYjMzk7cyBtYWtlIHN1cmUgb3VyIHJlc3VsdHMgcmVmbGVjdCB0aGlzOgoqICAgYEZvY3VzU3ltYm9sczogW11gCiogICBgRW5hYmxlQ29uZmlnczogW11gCiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWAKKiAgIGBSZWFzb25pbmc6IENvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHZlcmRpY3QuYAoKQW5kIG5vdyBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIEVOODgxMUggLyBBTjg4MTFIQiBFdGhlcm5ldCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYykgdG8gaGFuZGxlIHBhY2thZ2UgdmFyaWFudCBkZXRlY3Rpb24gYW5kIExFRCBHUElPIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSByZXF1aXJlcyBkZWRpY2F0ZWQgcGh5c2ljYWwgQWlyb2hhIFBIWSBoYXJkd2FyZSBvbiBhbiBNRElPIGJ1cyBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgaXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjg4MTFIIC8gQU44ODExSEIgRXRoZXJuZXQgUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMpIHRvIGhhbmRsZSBwYWNrYWdlIHZhcmlhbnQgZGV0ZWN0aW9uIGFuZCBMRUQgR1BJTyBjb25maWd1cmF0aW9uLiBUaGlzIGNvZGUgcmVxdWlyZXMgZGVkaWNhdGVkIHBoeXNpY2FsIEFpcm9oYSBQSFkgaGFyZHdhcmUgb24gYW4gTURJTyBidXMgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIGl0IHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjozNToyNi40NTM1NTY3NzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjExNTQ0ODU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU44ODExSCAvIEFOODgxMUhCIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBoYW5kbGUgcGFja2FnZSB2YXJpYW50IGRldGVjdGlvbiBhbmQgTEVEIEdQSU8gY29uZmlndXJhdGlvbi4gVGhpcyBjb2RlIHJlcXVpcmVzIGRlZGljYXRlZCBwaHlzaWNhbCBBaXJvaGEgUEhZIGhhcmR3YXJlIG9uIGFuIE1ESU8gYnVzIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjozNToyNi40NTM1NjExNzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDY4MTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNhYjYxMjdjY2VmOWRlMWU2M2U3MzcwMWE2N2NkNmZjYjc2YmU1OWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAwNjozNToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXFxuaW5kZXggMzhlYjE4ZjBlOWJiNC4uYWUyNGM0MWY1MzhhYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXFxuQEAgLTE0NSwxMCArMTQ1LDIyIEBAXFxuIFxcbiAjZGVmaW5lIEFOODgxMUhCX0dQSU9fT1VUUFVUXFx0XFx0MHg1Y2Y4YjhcXG4gI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NVxcdFxcdChCSVQoMykgfCBCSVQoNCkgfCBCSVQoNSkpXFxuKyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX09VVFBVVF8wMTE1XFx0XFx0KEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgxNSkpXFxuK1xcbisjZGVmaW5lIEFOODgxMUhCX0dQSU9fU0VMMVxcdFxcdDB4NWNmOGJjXFxuKyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMF9NQVNLXFx0XFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lICAgQU44ODExSEJfR1BJT19TRUwxXzFfTUFTS1xcdFxcdEdFTk1BU0soNywgNClcXG4rI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMV8wXFx0XFx0XFx0QklUKDApXFxuKyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMVxcdFxcdFxcdDBcXG4rXFxuKyNkZWZpbmUgQU44ODExSEJfR1BJT19TRUwyXFx0XFx0MHg1Y2Y4YzBcXG4rI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMl8xNV9NQVNLXFx0XFx0R0VOTUFTSygzMSwgMjgpXFxuKyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDJfMTVcXHRcXHRcXHRCSVQoMjkpXFxuIFxcbiAjZGVmaW5lIEFOODgxMUhCX0hXVFJBUDFcXHRcXHQweDVjZjkxMFxcbiAjZGVmaW5lIEFOODgxMUhCX0hXVFJBUDJcXHRcXHQweDVjZjkxNFxcbiAjZGVmaW5lICAgQU44ODExSEJfSFdUUkFQMl9DS09cXHRcXHRcXHRCSVQoMjgpXFxuKyNkZWZpbmUgICBBTjg4MTFIQl9IV1RSQVAyX1BLR1xcdFxcdFxcdEdFTk1BU0soMTQsIDEyKVxcbiBcXG4gI2RlZmluZSBBTjg4MTFIQl9DTEtfRFJWXFx0XFx0MHg1Y2Y5ZTRcXG4gI2RlZmluZSBBTjg4MTFIQl9DTEtfRFJWX0NLT19NQVNLXFx0XFx0R0VOTUFTSygxNCwgMTIpXFxuQEAgLTIwMiw2ICsyMTQsNyBAQCBzdHJ1Y3QgZW44ODExaF9wcml2IHtcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2VcXHQqcGh5ZGV2O1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRja29faXNfZW5hYmxlZDtcXG4gXFx0c3RydWN0IG1kaW9fZGV2aWNlXFx0KnBidXNkZXY7XFxuK1xcdGJvb2xcXHRcXHRcXHRpc19hbjg4MTFoYmNuO1xcbiB9O1xcbiBcXG4gZW51bSB7XFxuQEAgLTEwNzEsMTAgKzEwODQsNDkgQEAgc3RhdGljIGludCBlbjg4MTFoX2xlZHNfc2V0dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBhbjg4MTFoYl9sZWRfZ3Bpb19zZXR1cChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaXNfYW44ODExaGJjbikge1xcbitcXHRcXHQvKiBBTjg4MTFIQkNOOiBMRUQgR1BJT3MgYXJlIDAsIDEsIDE1ICovXFxuK1xcdFxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0dQSU9fT1VUUFVULFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzAxMTUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMDExNSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19TRUwxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFOODgxMUhCX0dQSU9fU0VMMV8wX01BU0sgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFOODgxMUhCX0dQSU9fU0VMMV8xX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfR1BJT19TRUwxXzAgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFOODgxMUhCX0dQSU9fU0VMMV8xKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX1NFTDIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfR1BJT19TRUwyXzE1X01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgQU44ODExSEJfR1BJT19TRUwyXzE1KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIEFOODgxMUhCTjogTEVEIEdQSU9zIGFyZSAzLCA0LCA1ICovXFxuK1xcdFxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0dQSU9fT1VUUFVULFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBBTjg4MTFIQl9HUElPX09VVFBVVF8zNDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuIFxcdHN0cnVjdCBlbjg4MTFoX3ByaXYgKnByaXY7XFxuK1xcdHUzMiByZWdfdmFsO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgc2l6ZW9mKHN0cnVjdCBlbjg4MTFoX3ByaXYpLFxcbkBAIC0xMTE1LDYgKzExNjcsMTIgQEAgc3RhdGljIGludCBhbjg4MTFoYl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHQvKiBNRElPX0RFVlMxLzIgZW1wdHksIHNvIHNldCBtbWRzX3ByZXNlbnQgYml0cyBoZXJlICovXFxuIFxcdHBoeWRldi1cXHUwMDNlYzQ1X2lkcy5tbWRzX3ByZXNlbnQgfD0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19BTjtcXG4gXFxuK1xcdC8qIERldGVjdCBwYWNrYWdlIHZhcmlhbnQgKi9cXG4rXFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChwaHlkZXYsIEFOODgxMUhCX0hXVFJBUDIsIFxcdTAwMjZyZWdfdmFsKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX2Rldl9jcmVhdGU7XFxuK1xcdHByaXYtXFx1MDAzZWlzX2FuODgxMWhiY24gPSBGSUVMRF9HRVQoQU44ODExSEJfSFdUUkFQMl9QS0csIHJlZ192YWwpO1xcbitcXG4gXFx0cmV0ID0gZW44ODExaF9sZWRzX3NldHVwKHBoeWRldik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9kZXZfY3JlYXRlO1xcbkBAIC0xMjYzLDEwICsxMzIxLDExIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogUmVzdG9yZSBMRUQgR1BJTyBvdXRwdXQgZW5hYmxlcyBhZnRlciBNQ1UgaW5pdGlhbGl6YXRpb24uICovXFxuLVxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0dQSU9fT1VUUFVULFxcbi1cXHRcXHRcXHRcXHRcXHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBBTjg4MTFIQl9HUElPX09VVFBVVF8zNDUpO1xcbitcXHRyZXQgPSBhbjg4MTFoYl9sZWRfZ3Bpb19zZXR1cChwaHlkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIkZhaWxlZCB0byBzZXQgdXAgTEVEIEdQSU86ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjI3LjA5ODkyMTIxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDE0NzAwNzI3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU44ODExSCAvIEFOODgxMUhCIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBoYW5kbGUgcGFja2FnZSB2YXJpYW50IGRldGVjdGlvbiBhbmQgTEVEIEdQSU8gY29uZmlndXJhdGlvbi4gVGhpcyBjb2RlIHJlcXVpcmVzIGRlZGljYXRlZCBwaHlzaWNhbCBBaXJvaGEgUEhZIGhhcmR3YXJlIG9uIGFuIE1ESU8gYnVzIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNhYjYxMjdjY2VmOWRlMWU2M2U3MzcwMWE2N2NkNmZjYjc2YmU1OWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA2OjM1OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuaW5kZXggMzhlYjE4ZjBlOWJiNC4uYWUyNGM0MWY1MzhhYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuQEAgLTE0NSwxMCArMTQ1LDIyIEBAXG4gXG4gI2RlZmluZSBBTjg4MTFIQl9HUElPX09VVFBVVFx0XHQweDVjZjhiOFxuICNkZWZpbmUgICBBTjg4MTFIQl9HUElPX09VVFBVVF8zNDVcdFx0KEJJVCgzKSB8IEJJVCg0KSB8IEJJVCg1KSlcbisjZGVmaW5lICAgQU44ODExSEJfR1BJT19PVVRQVVRfMDExNVx0XHQoQklUKDApIHwgQklUKDEpIHwgQklUKDE1KSlcbitcbisjZGVmaW5lIEFOODgxMUhCX0dQSU9fU0VMMVx0XHQweDVjZjhiY1xuKyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDFfMF9NQVNLXHRcdEdFTk1BU0soMywgMClcbisjZGVmaW5lICAgQU44ODExSEJfR1BJT19TRUwxXzFfTUFTS1x0XHRHRU5NQVNLKDcsIDQpXG4rI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMV8wXHRcdFx0QklUKDApXG4rI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMV8xXHRcdFx0MFxuK1xuKyNkZWZpbmUgQU44ODExSEJfR1BJT19TRUwyXHRcdDB4NWNmOGMwXG4rI2RlZmluZSAgIEFOODgxMUhCX0dQSU9fU0VMMl8xNV9NQVNLXHRcdEdFTk1BU0soMzEsIDI4KVxuKyNkZWZpbmUgICBBTjg4MTFIQl9HUElPX1NFTDJfMTVcdFx0XHRCSVQoMjkpXG4gXG4gI2RlZmluZSBBTjg4MTFIQl9IV1RSQVAxXHRcdDB4NWNmOTEwXG4gI2RlZmluZSBBTjg4MTFIQl9IV1RSQVAyXHRcdDB4NWNmOTE0XG4gI2RlZmluZSAgIEFOODgxMUhCX0hXVFJBUDJfQ0tPXHRcdFx0QklUKDI4KVxuKyNkZWZpbmUgICBBTjg4MTFIQl9IV1RSQVAyX1BLR1x0XHRcdEdFTk1BU0soMTQsIDEyKVxuIFxuICNkZWZpbmUgQU44ODExSEJfQ0xLX0RSVlx0XHQweDVjZjllNFxuICNkZWZpbmUgQU44ODExSEJfQ0xLX0RSVl9DS09fTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbkBAIC0yMDIsNiArMjE0LDcgQEAgc3RydWN0IGVuODgxMWhfcHJpdiB7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZVx0KnBoeWRldjtcbiBcdHVuc2lnbmVkIGludFx0XHRja29faXNfZW5hYmxlZDtcbiBcdHN0cnVjdCBtZGlvX2RldmljZVx0KnBidXNkZXY7XG4rXHRib29sXHRcdFx0aXNfYW44ODExaGJjbjtcbiB9O1xuIFxuIGVudW0ge1xuQEAgLTEwNzEsMTAgKzEwODQsNDkgQEAgc3RhdGljIGludCBlbjg4MTFoX2xlZHNfc2V0dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYW44ODExaGJfbGVkX2dwaW9fc2V0dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYW44ODExaGJjbikge1xuK1x0XHQvKiBBTjg4MTFIQkNOOiBMRUQgR1BJT3MgYXJlIDAsIDEsIDE1ICovXG4rXHRcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0dQSU9fT1VUUFVULFxuK1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMDExNSxcbitcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzAxMTUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0dQSU9fU0VMMSxcbitcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMV8wX01BU0sgfFxuK1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19TRUwxXzFfTUFTSyxcbitcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMV8wIHxcbitcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMV8xKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBBTjg4MTFIQl9HUElPX1NFTDIsXG4rXHRcdFx0XHRcdFx0ICBBTjg4MTFIQl9HUElPX1NFTDJfMTVfTUFTSyxcbitcdFx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fU0VMMl8xNSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIEFOODgxMUhCTjogTEVEIEdQSU9zIGFyZSAzLCA0LCA1ICovXG4rXHRcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEFOODgxMUhCX0dQSU9fT1VUUFVULFxuK1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1LFxuK1x0XHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYW44ODExaGJfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4gXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2O1xuK1x0dTMyIHJlZ192YWw7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgZW44ODExaF9wcml2KSxcbkBAIC0xMTE1LDYgKzExNjcsMTIgQEAgc3RhdGljIGludCBhbjg4MTFoYl9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0LyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqL1xuIFx0cGh5ZGV2LVx1MDAzZWM0NV9pZHMubW1kc19wcmVzZW50IHw9IE1ESU9fREVWU19QTUFQTUQgfCBNRElPX0RFVlNfQU47XG4gXG4rXHQvKiBEZXRlY3QgcGFja2FnZSB2YXJpYW50ICovXG4rXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgQU44ODExSEJfSFdUUkFQMiwgXHUwMDI2cmVnX3ZhbCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9kZXZfY3JlYXRlO1xuK1x0cHJpdi1cdTAwM2Vpc19hbjg4MTFoYmNuID0gRklFTERfR0VUKEFOODgxMUhCX0hXVFJBUDJfUEtHLCByZWdfdmFsKTtcbitcbiBcdHJldCA9IGVuODgxMWhfbGVkc19zZXR1cChwaHlkZXYpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZGV2X2NyZWF0ZTtcbkBAIC0xMjYzLDEwICsxMzIxLDExIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdC8qIFJlc3RvcmUgTEVEIEdQSU8gb3V0cHV0IGVuYWJsZXMgYWZ0ZXIgTUNVIGluaXRpYWxpemF0aW9uLiAqL1xuLVx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgQU44ODExSEJfR1BJT19PVVRQVVQsXG4tXHRcdFx0XHRcdCAgQU44ODExSEJfR1BJT19PVVRQVVRfMzQ1LFxuLVx0XHRcdFx0XHQgIEFOODgxMUhCX0dQSU9fT1VUUFVUXzM0NSk7XG4rXHRyZXQgPSBhbjg4MTFoYl9sZWRfZ3Bpb19zZXR1cChwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJGYWlsZWQgdG8gc2V0IHVwIExFRCBHUElPOiAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjozNToyNy4wOTg5MjI1MDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDYyOTM2MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCdzIHdvcnRoIG91ciB0aW1lIHRvIHRocm93IGl0IGludG8gdGhlIHN5emthbGxlciBmdXp6aW5nIGdyaW5kZXIuIE15IGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LlxuXG5SaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2AuIEhtbSwgYW4gRXRoZXJuZXQgUEhZIGRyaXZlciDigJMgdGhlIEFpcm9oYSBFTjg4MTFIL0FOODgxMUhCIEdpZ2FiaXQgRXRoZXJuZXQgUEhZIGRyaXZlciwgdG8gYmUgcHJlY2lzZS4gVGhhdCBnaXZlcyBtZSBhIGdlbmVyYWwgaWRlYS5cblxuTm93LCB0byByZWFsbHkgZGV0ZXJtaW5lIGl0cyBmdXp6aW5nIHZhbHVlLCBJIG5lZWQgdG8gY2hlY2sgaXRzIHJlYWNoYWJpbGl0eSB3aXRoaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBLY29uZmlnLCB0aGUgZHJpdmVyJ3MgZGVwZW5kZW5jaWVzLCBhbmQgaWYgaXQncyBvbiB0aGUgTURJTyBidXMsIGFsbCBoYXZlIGEgYmVhcmluZyBvbiB0aGlzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gc2VlIGlmIHdlIGNhbiBnZXQgdG8gaXQgaW4gUUVNVSBvciBHQ0UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZXZlbiBjb21waWxlZCBhbmQgbGlua2VkLlxuXG5UaW1lIHRvIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSwgb3IgbG9vayBhdCBleGlzdGluZyBzeXprYWxsZXIgY29uZmlncywgdG8gc2VlIHdoZXJlIGBhaXJfZW44ODExaC5jYCBvciwgbW9yZSBicm9hZGx5LCBFdGhlcm5ldCBQSFkgZHJpdmVycywgYXJlIHVzZWQgYW5kIGNvbmZpZ3VyZWQuIEtub3dpbmcgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGJyb3VnaHQgaW50byBwbGF5IHdpbGwgdGVsbCBtZSBpZiB0aGUgYXR0YWNrIHN1cmZhY2UgaXMgZXhwb3NlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBwYXRoIHRvIGV4cGxvaXRhdGlvbiwgYW5kIHdoZXRoZXIgYSBmdXp6aW5nIHRhcmdldCBpcyBqdXN0aWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NTgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjozNTozMy41NjE4NjEwMjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNTc0NzQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJfZW44ODExaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX0FJUl9BTjg4MDFfUEhZKVxcdCs9IGFpcl9hbjg4MDEub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQUlSX0VOODgxMUhfUEhZKSAgICs9IGFpcl9lbjg4MTFoLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMzUtb2JqLSQoQ09ORklHX0FJUl9ORVRfUEhZTElCKVxcdCs9IGFpcl9waHlfbGliLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMzI0LS8qIExFRCBiYXNpYyBjb250cm9sIHJlZ2lzdGVyLCBwYXJ0IG9mIHRoZSBzYW1lIExFRCBibG9jayBhcyB0aGUgTEVEMC9MRUQxXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYzozMjU6ICogY29udHJvbCByZWdpc3RlcnMgYWJvdmUuIFRoZSBhaXJfZW44ODExaCBkcml2ZXIgZGVzY3JpYmVzIHRoZSBzYW1lXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0zMjYtICogcmVnaXN0ZXIgYXMgQUlSX1BIWV9MRURfQkNSLlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYz0xNDgyPXN0YXRpYyBpbnQgZW43NTI4X3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNDg2LVxcdCAqIHByb2dyYW1tZWQgaW50byB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXJzLiBIYW5kIHRoZSBwaW5zIG92ZXIgdG9cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjE0ODc6XFx0ICogdGhlIExFRCBjb250cm9sIHJlZ2lzdGVycyB0aGUgc2FtZSB3YXkgdGhlIGFpcl9lbjg4MTFoIGRyaXZlclxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTQ4OC1cXHQgKiBkb2VzOyB0aGUgbW9kZSBmaWVsZCBvZiB0aGlzIHJlZ2lzdGVyIGlzIGFscmVhZHkgc2V0IG91dCBvZiByZXNldC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6MzUuNzY3NjE0MTgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5MDQ1MzQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHJldmlld2luZyB0aGlzOlxuXG4qKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIEFpci1FTjg4MTFIIFBIWSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQWlyLUVOODgxMUggUEhZLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGRyaXZlcidzIG5ldHdvcmsgUEhZIGRpcmVjdG9yeS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBkZWZpbmVkIGFuZCBjb250cm9sbGVkLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBhcm91bmQgdGhlIGBDT05GSUdfQUlSX0VOODgxMUhfUEhZYCBzeW1ib2wuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBkcml2ZXIncyBiZWhhdmlvciBpcyBsaWtlbHkgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBjb25kaXRpb25zIGVuYWJsZSB0aGlzIGRldmljZSwgd2hpY2ggbWlnaHQgaW52b2x2ZSBkZXBlbmRlbmN5IGNoZWNrcyBvbiBvdGhlciBoYXJkd2FyZSBvciBzb2Z0d2FyZSBmZWF0dXJlcywgYW5kIGFueSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBzZWUgaWYgdGhpcyBoYXMgYmVlbiBjb25maWd1cmVkIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mzc2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6MzcuOTU4MDY5NzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyNDM3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQUlSX0VOODgxMUhfUEhZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZz05Mz1jb25maWcgQUlSX0FOODgwMV9QSFlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk5OmNvbmZpZyBBSVJfRU44ODExSF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMDAtXFx0dHJpc3RhdGUgXFxcIkFpcm9oYSBFTjg4MTFIIDIuNSBHaWdhYml0IFBIWVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQUlSX0FOODgwMV9QSFkpXFx0Kz0gYWlyX2FuODgwMS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19BSVJfRU44ODExSF9QSFkpICAgKz0gYWlyX2VuODgxMWgub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zNS1vYmotJChDT05GSUdfQUlSX05FVF9QSFlMSUIpXFx0Kz0gYWlyX3BoeV9saWIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjozNTozOC4wMDYzMjE2NjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjc5NzQ3MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGFpcl9lbjg4MTFoLmNgIGRyaXZlciBob29rcyBpbnRvIHRoZSBzeXN0ZW0sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGl0cyBQSFkgZHJpdmVyIHJlZ2lzdHJhdGlvbi4gTXkgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBkZXZpY2UgaXQncyBkZXNpZ25lZCB0byBiaW5kIHRvLiBJJ2xsIHplcm8gaW4gb24gdGhlIGBwaHlfZHJpdmVyYCByZWdpc3RyYXRpb24gc2VjdGlvbiB3aXRoaW4gdGhlIGNvZGUuIFRoYXQncyB0aGUga2V5LiBCeSBhbmFseXppbmcgaG93IGBwaHlfZHJpdmVyYCBpcyBoYW5kbGVkLCBJIHNob3VsZCBiZSBhYmxlIHRvIGRlZHVjZSB0aGUgaW50ZW5kZWQgdGFyZ2V0IGhhcmR3YXJlLiBUaGlzIGlzIHJvdXRpbmUsIGJ1dCBlc3NlbnRpYWwgd2hlbiBhc3Nlc3NpbmcgYSBuZXcgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6NDAuNjg2MDcxMTgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMDA6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4xMzAxOlxcdFxcdGludCByZXQ7XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdC8qIElmIHJlc3RhcnQgaGFwcGVuZWQgaW4gLnByb2JlKCksIG5vIG5lZWQgdG8gcmVzdGFydCBub3cgKi9cXG4xMzA0OlxcdFxcdGlmIChwcml2LVxcdTAwM2VtY3VfbmVlZHNfcmVzdGFydCkge1xcbjEzMDU6XFx0XFx0XFx0cmV0ID0gZW44ODExaF9yZXN0YXJ0X21jdShwaHlkZXYpO1xcbjEzMDY6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTMwNzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMDg6XFx0XFx0fSBlbHNlIHtcXG4xMzA5OlxcdFxcdFxcdC8qIE5leHQgY2FsbHMgdG8gLmNvbmZpZ19pbml0KCkgbWN1IG5lZWRzIHRvIHJlc3RhcnQgKi9cXG4xMzEwOlxcdFxcdFxcdHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gdHJ1ZTtcXG4xMzExOlxcdFxcdH1cXG4xMzEyOlxcdFxcbjEzMTM6XFx0XFx0cmV0ID0gYW44ODExaGJfY29uZmlnX3NlcmRlc19wb2xhcml0eShwaHlkZXYpO1xcbjEzMTQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTMxNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMTY6XFx0XFxuMTMxNzpcXHRcXHRyZXQgPSBhaXJfbGVkc19pbml0KHBoeWRldiwgRU44ODExSF9MRURfQ09VTlQsIEFJUl9QSFlfTEVEX0RVUixcXG4xMzE4OlxcdFxcdFxcdFxcdCAgICBBSVJfTEVEX01PREVfVVNFUl9ERUZJTkUpO1xcbjEzMTk6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xMzIwOlxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbGVkczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTMyMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMjI6XFx0XFx0fVxcbjEzMjM6XFx0XFxuMTMyNDpcXHRcXHRyZXQgPSBhbjg4MTFoYl9sZWRfZ3Bpb19zZXR1cChwaHlkZXYpO1xcbjEzMjU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xMzI2OlxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiRmFpbGVkIHRvIHNldCB1cCBMRUQgR1BJTzogJWRcXFxcblxcXCIsIHJldCk7XFxuMTMyNzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMjg6XFx0XFx0fVxcbjEzMjk6XFx0XFx0cmV0dXJuIHJldDtcXG4xMzMwOlxcdH1cXG4xMzMxOlxcdFxcbjEzMzI6XFx0c3RhdGljIGludCBlbjg4MTFoX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTMzMzpcXHR7XFxuMTMzNDpcXHRcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbjEzMzU6XFx0XFx0aW50IHJldDtcXG4xMzM2OlxcdFxcbjEzMzc6XFx0XFx0LyogSWYgcmVzdGFydCBoYXBwZW5lZCBpbiAucHJvYmUoKSwgbm8gbmVlZCB0byByZXN0YXJ0IG5vdyAqL1xcbjEzMzg6XFx0XFx0aWYgKHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0KSB7XFxuMTMzOTpcXHRcXHRcXHRyZXQgPSBlbjg4MTFoX3Jlc3RhcnRfbWN1KHBoeWRldik7XFxuMTM0MDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzQxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTM0MjpcXHRcXHR9IGVsc2Uge1xcbjEzNDM6XFx0XFx0XFx0LyogTmV4dCBjYWxscyB0byAuY29uZmlnX2luaXQoKSBtY3UgbmVlZHMgdG8gcmVzdGFydCAqL1xcbjEzNDQ6XFx0XFx0XFx0cHJpdi1cXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSB0cnVlO1xcbjEzNDU6XFx0XFx0fVxcbjEzNDY6XFx0XFxuMTM0NzpcXHRcXHQvKiBTZWxlY3QgbW9kZSAxLCB0aGUgb25seSBtb2RlIHN1cHBvcnRlZC5cXG4xMzQ4OlxcdFxcdCAqIENvbmZpZ3VyZXMgdGhlIFNlckRlcyBmb3IgMjUwMEJhc2UtWCB3aXRoIHJhdGUgYWRhcHRhdGlvblxcbjEzNDk6XFx0XFx0ICovXFxuMTM1MDpcXHRcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF8xLFxcbjEzNTE6XFx0XFx0XFx0XFx0ICAgIEFJUl9QSFlfTUNVX0NNRF8xX01PREUxKTtcXG4xMzUyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzNTM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzU0OlxcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzIsXFxuMTM1NTpcXHRcXHRcXHRcXHQgICAgQUlSX1BIWV9NQ1VfQ01EXzJfTU9ERTEpO1xcbjEzNTY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTM1NzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzNTg6XFx0XFx0cmV0ID0gcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBBSVJfUEhZX01DVV9DTURfMyxcXG4xMzU5OlxcdFxcdFxcdFxcdCAgICBBSVJfUEhZX01DVV9DTURfM19NT0RFMSk7XFxuMTM2MDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzYxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTM2MjpcXHRcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF80LFxcbjEzNjM6XFx0XFx0XFx0XFx0ICAgIEFJUl9QSFlfTUNVX0NNRF80X01PREUxKTtcXG4xMzY0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjEzNjU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzY2OlxcdFxcbjEzNjc6XFx0XFx0cmV0ID0gZW44ODExaF9jb25maWdfc2VyZGVzX3BvbGFyaXR5KHBoeWRldik7XFxuMTM2ODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzY5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTM3MDpcXHRcXG4xMzcxOlxcdFxcdHJldCA9IGFpcl9sZWRzX2luaXQocGh5ZGV2LCBFTjg4MTFIX0xFRF9DT1VOVCwgQUlSX1BIWV9MRURfRFVSLFxcbjEzNzI6XFx0XFx0XFx0XFx0ICAgIEFJUl9MRURfTU9ERV9VU0VSX0RFRklORSk7XFxuMTM3MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjEzNzQ6XFx0XFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBsZWRzOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMzc1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTM3NjpcXHRcXHR9XFxuMTM3NzpcXHRcXG4xMzc4OlxcdFxcdC8qIENvbmZpZ3VyZSBsZWQgZ3BpbyBwaW5zIGFzIG91dHB1dC4gTXVzdCBiZSByZWRvbmUgb24gZXZlcnlcXG4xMzc5OlxcdFxcdCAqIC5jb25maWdfaW5pdCgpLCBub3QganVzdCBvbmNlIGluIC5wcm9iZSgpOiBlbjg4MTFoX3Jlc3RhcnRfbWN1KClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6NDAuNjg2MTg2ODk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg5Njk0NDY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBQSFkgZGV2aWNlIG1hdGNoaW5nIGFuZCBwcm9iaW5nIHdvcmtzLCBiYXNlZCBvbiB0aGUgZmlsZSBuYW1lIGBkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY2A6XG5cbioqUHJvYmluZyB0aGUgQWlyLUVOODgxMUggUEhZKipcblxuUmlnaHQsIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgYW5kIGluaXRpYWxpemVzIHRoaXMgcGFydGljdWxhciBQSFkg4oCTIHRoZSBBaXItRU44ODExSC4gR2l2ZW4gdGhlIGZpbGUgcGF0aCwgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCwgbXkgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29udGVudHMgb2YgdGhhdCBmaWxlLiBJJ20gZ29pbmcgdG8gcG9yZSBvdmVyIGl0IHRvIHVuZGVyc3RhbmQgdGhlIG1hdGNoaW5nIHByb2Nlc3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGUgc3lzdGVtIGRldGVybWluZXMgd2hldGhlciBhIGNvbm5lY3RlZCBQSFkgaXMgKmFjdHVhbGx5KiBhbiBBaXItRU44ODExSCBhbmQgdGhlbiBob3cgaXQncyBicm91Z2h0IG9ubGluZSwgYmFzaWNhbGx5IHByb2JpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRldmljZSdzIGlkZW50aWZpY2F0aW9uIGRhdGEsIGhvdyBpdCdzIGhhbmRsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiwgYW5kIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgbmVlZGVkLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgc3RhbmRhcmQgUEhZIGRyaXZlciBmcmFtZXdvcmsgZWxlbWVudHMsIGJ1dCB0aGUgY3J1Y2lhbCBiaXRzIHdpbGwgYmUgdGhlIHNwZWNpZmljcyByZWxhdGVkIHRvICp0aGlzKiBwYXJ0aWN1bGFyIFBIWSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JrIHN1YnN5c3RlbS4gVGltZSB0byBkaWcgaW4gYW5kIGdldCBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwNiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6NDMuNTgzMTM0MjI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdFxcdGludCByZXQ7XFxuMTQxMTpcXHRcXHR1MzIgYWR2O1xcbjE0MTI6XFx0XFxuMTQxMzpcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VhdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkge1xcbjE0MTQ6XFx0XFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiRGlzYWJsaW5nIGF1dG9uZWcgaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuMTQxNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDE2OlxcdFxcdH1cXG4xNDE3OlxcdFxcbjE0MTg6XFx0XFx0YWR2ID0gbGlua21vZGVfYWR2X3RvX21paV8xMGdidF9hZHZfdChwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKTtcXG4xNDE5OlxcdFxcbjE0MjA6XFx0XFx0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXFxuMTQyMTpcXHRcXHRcXHRcXHRcXHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLCBhZHYpO1xcbjE0MjI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTQyMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0MjQ6XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuMTQyNTpcXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4xNDI2OlxcdFxcbjE0Mjc6XFx0XFx0cmV0dXJuIF9fZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldiwgY2hhbmdlZCk7XFxuMTQyODpcXHR9XFxuMTQyOTpcXHRcXG4xNDMwOlxcdHN0YXRpYyBpbnQgZW44ODExaF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjE0MzE6XFx0e1xcbjE0MzI6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4xNDMzOlxcdFxcdHUzMiBwYnVzX3ZhbHVlO1xcbjE0MzQ6XFx0XFx0aW50IHJldCwgdmFsO1xcbjE0MzU6XFx0XFxuMTQzNjpcXHRcXHRyZXQgPSBnZW5waHlfdXBkYXRlX2xpbmsocGh5ZGV2KTtcXG4xNDM3OlxcdFxcdGlmIChyZXQpXFxuMTQzODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0Mzk6XFx0XFxuMTQ0MDpcXHRcXHRwaHlkZXYtXFx1MDAzZW1hc3Rlcl9zbGF2ZV9nZXQgPSBNQVNURVJfU0xBVkVfQ0ZHX1VOU1VQUE9SVEVEO1xcbjE0NDE6XFx0XFx0cGh5ZGV2LVxcdTAwM2VtYXN0ZXJfc2xhdmVfc3RhdGUgPSBNQVNURVJfU0xBVkVfU1RBVEVfVU5TVVBQT1JURUQ7XFxuMTQ0MjpcXHRcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcXG4xNDQzOlxcdFxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XFxuMTQ0NDpcXHRcXHRwaHlkZXYtXFx1MDAzZXBhdXNlID0gMDtcXG4xNDQ1OlxcdFxcdHBoeWRldi1cXHUwMDNlYXN5bV9wYXVzZSA9IDA7XFxuMTQ0NjpcXHRcXHRwaHlkZXYtXFx1MDAzZXJhdGVfbWF0Y2hpbmcgPSBSQVRFX01BVENIX1BBVVNFO1xcbjE0NDc6XFx0XFxuMTQ0ODpcXHRcXHRyZXQgPSBnZW5waHlfcmVhZF9tYXN0ZXJfc2xhdmUocGh5ZGV2KTtcXG4xNDQ5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0NTA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDUxOlxcdFxcbjE0NTI6XFx0XFx0cmV0ID0gZ2VucGh5X3JlYWRfbHBhKHBoeWRldik7XFxuMTQ1MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDU0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdGlmIChwaHlfaWRfY29tcGFyZV9tb2RlbChwaHlkZXYtXFx1MDAzZXBoeV9pZCwgQU44ODExSEJfUEhZX0lEKSkge1xcbjE0NTc6XFx0XFx0XFx0dmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fMTBHQlRfU1RBVCk7XFxuMTQ1ODpcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4xNDU5OlxcdFxcdFxcdFxcdHJldHVybiB2YWw7XFxuMTQ2MDpcXHRcXHRcXHRsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4xNDYxOlxcdFxcdFxcdFxcdFxcdCBwaHlkZXYtXFx1MDAzZWxwX2FkdmVydGlzaW5nLFxcbjE0NjI6XFx0XFx0XFx0XFx0XFx0IHZhbCBcXHUwMDI2IE1ESU9fQU5fMTBHQlRfU1RBVF9MUDJfNUcpO1xcbjE0NjM6XFx0XFx0fSBlbHNlIHtcXG4xNDY0OlxcdFxcdFxcdC8qIEdldCBsaW5rIHBhcnRuZXIgMi41R0JBU0UtVCBhYmlsaXR5IGZyb20gdmVuZG9yIHJlZ2lzdGVyICovXFxuMTQ2NTpcXHRcXHRcXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgRU44ODExSF8yUDVHX0xQQSxcXG4xNDY2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZwYnVzX3ZhbHVlKTtcXG4xNDY3OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0Njg6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDY5OlxcdFxcdFxcdGxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULFxcbjE0NzA6XFx0XFx0XFx0XFx0XFx0IHBoeWRldi1cXHUwMDNlbHBfYWR2ZXJ0aXNpbmcsXFxuMTQ3MTpcXHRcXHRcXHRcXHRcXHQgcGJ1c192YWx1ZSBcXHUwMDI2IEVOODgxMUhfMlA1R19MUEFfMlA1Ryk7XFxuMTQ3MjpcXHRcXHR9XFxuMTQ3MzpcXHRcXG4xNDc0OlxcdFxcdGlmIChwaHlkZXYtXFx1MDAzZWF1dG9uZWdfY29tcGxldGUpXFxuMTQ3NTpcXHRcXHRcXHRwaHlfcmVzb2x2ZV9hbmVnX3BhdXNlKHBoeWRldik7XFxuMTQ3NjpcXHRcXG4xNDc3OlxcdFxcdGlmICghcGh5ZGV2LVxcdTAwM2VsaW5rKVxcbjE0Nzg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTQ3OTpcXHRcXG4xNDgwOlxcdFxcdC8qIEdldCByZWFsIHNwZWVkIGZyb20gdmVuZG9yIHJlZ2lzdGVyICovXFxuMTQ4MTpcXHRcXHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIEFJUl9BVVhfQ1RSTF9TVEFUVVMpO1xcbjE0ODI6XFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuMTQ4MzpcXHRcXHRcXHRyZXR1cm4gdmFsO1xcbjE0ODQ6XFx0XFx0c3dpdGNoICh2YWwgXFx1MDAyNiBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEX01BU0spIHtcXG4xNDg1OlxcdFxcdGNhc2UgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8yNTAwOlxcbjE0ODY6XFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IFNQRUVEXzI1MDA7XFxuMTQ4NzpcXHRcXHRcXHRicmVhaztcXG4xNDg4OlxcdFxcdGNhc2UgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8xMDAwOlxcbjE0ODk6XFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjQzLjU4MzI1MjgzNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTY1MzE1MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgQWlyLUVOODgxMUggUEhZIERyaXZlcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoaXMgYGFpcl9lbjg4MTFoLmNgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcGh5YCBkaXJlY3RvcnkuIEkgbmVlZCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgaGVyZS4gSSdtIGZvY3VzaW5nIG9uIHRoZSBtb2R1bGUgZGVmaW5pdGlvbiBhbmQgdGhlIGFsbC1pbXBvcnRhbnQgYHBoeV9kcml2ZXJgIHN0cnVjdC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgZHJpdmVyJ3MgaW50ZXJmYWNlIGlzIGRlZmluZWQg4oCTIGhvdyBpdCBwcmVzZW50cyBpdHNlbGYgdG8gdGhlIHN5c3RlbSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBQSFksIGFuZCB3aGF0IGNhcGFiaWxpdGllcyBpdCBleHBvc2VzLiBHb3R0YSB2ZXJpZnkgdGhlIG1vZHVsZSdzIHN0cnVjdHVyZSBhbmQgdGhlbiB0aGUgbWVhdCBvZiBpdHMgb3BlcmF0aW9uYWwgZGV0YWlscyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFBIWSBpcyBhY3R1YWxseSBtYW5hZ2VkLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjQ1LjU0ODU3MTIxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ5MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ5MDpcXHRcXHRcXHRicmVhaztcXG4xNDkxOlxcdFxcdGNhc2UgQUlSX0FVWF9DVFJMX1NUQVRVU19TUEVFRF8xMDA6XFxuMTQ5MjpcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfMTAwO1xcbjE0OTM6XFx0XFx0XFx0YnJlYWs7XFxuMTQ5NDpcXHRcXHRjYXNlIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMTA6XFxuMTQ5NTpcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfMTA7XFxuMTQ5NjpcXHRcXHRcXHRicmVhaztcXG4xNDk3OlxcdFxcdH1cXG4xNDk4OlxcdFxcbjE0OTk6XFx0XFx0LyogRmlybXdhcmUgYmVmb3JlIHZlcnNpb24gMjQwMTEyMDIgaGFzIG5vIHZlbmRvciByZWdpc3RlciAyUDVHX0xQQS5cXG4xNTAwOlxcdFxcdCAqIEFzc3VtZSBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNlZCBpdCBpZiBjb25uZWN0ZWQgYXQgMjUwME1icHMuXFxuMTUwMTpcXHRcXHQgKi9cXG4xNTAyOlxcdFxcdGlmIChwcml2LVxcdTAwM2VmaXJtd2FyZV92ZXJzaW9uIFxcdTAwM2MgMHgyNDAxMTIwMikge1xcbjE1MDM6XFx0XFx0XFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXFxuMTUwNDpcXHRcXHRcXHRcXHRcXHQgcGh5ZGV2LVxcdTAwM2VscF9hZHZlcnRpc2luZyxcXG4xNTA1OlxcdFxcdFxcdFxcdFxcdCBwaHlkZXYtXFx1MDAzZXNwZWVkID09IFNQRUVEXzI1MDApO1xcbjE1MDY6XFx0XFx0fVxcbjE1MDc6XFx0XFxuMTUwODpcXHRcXHQvKiBPbmx5IHN1cHBvcnRzIGZ1bGwgZHVwbGV4ICovXFxuMTUwOTpcXHRcXHRwaHlkZXYtXFx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xcbjE1MTA6XFx0XFxuMTUxMTpcXHRcXHRyZXR1cm4gMDtcXG4xNTEyOlxcdH1cXG4xNTEzOlxcdFxcbjE1MTQ6XFx0c3RhdGljIGludCBlbjg4MTFoX2NsZWFyX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNTE1OlxcdHtcXG4xNTE2OlxcdFxcdGludCByZXQ7XFxuMTUxNzpcXHRcXG4xNTE4OlxcdFxcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgQUlSX1BIWV9NQ1VfQ01EXzMsXFxuMTUxOTpcXHRcXHRcXHRcXHQgICAgQUlSX1BIWV9NQ1VfQ01EXzNfRE9DTUQpO1xcbjE1MjA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTUyMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE1MjI6XFx0XFxuMTUyMzpcXHRcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIEFJUl9QSFlfTUNVX0NNRF80LFxcbjE1MjQ6XFx0XFx0XFx0XFx0ICAgIEFJUl9QSFlfTUNVX0NNRF80X0lOVENMUik7XFxuMTUyNTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNTI2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTUyNzpcXHRcXG4xNTI4OlxcdFxcdHJldHVybiAwO1xcbjE1Mjk6XFx0fVxcbjE1MzA6XFx0XFxuMTUzMTpcXHRzdGF0aWMgaXJxcmV0dXJuX3QgZW44ODExaF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTUzMjpcXHR7XFxuMTUzMzpcXHRcXHRpbnQgcmV0O1xcbjE1MzQ6XFx0XFxuMTUzNTpcXHRcXHRyZXQgPSBlbjg4MTFoX2NsZWFyX2ludHIocGh5ZGV2KTtcXG4xNTM2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMTUzNzpcXHRcXHRcXHRwaHlfZXJyb3IocGh5ZGV2KTtcXG4xNTM4OlxcdFxcdFxcdHJldHVybiBJUlFfTk9ORTtcXG4xNTM5OlxcdFxcdH1cXG4xNTQwOlxcdFxcbjE1NDE6XFx0XFx0cGh5X3RyaWdnZXJfbWFjaGluZShwaHlkZXYpO1xcbjE1NDI6XFx0XFxuMTU0MzpcXHRcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuMTU0NDpcXHR9XFxuMTU0NTpcXHRcXG4xNTQ2OlxcdHN0YXRpYyBpbnQgZW44ODExaF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNTQ3OlxcdHtcXG4xNTQ4OlxcdFxcdGNsa19yZXN0b3JlX2NvbnRleHQoKTtcXG4xNTQ5OlxcdFxcbjE1NTA6XFx0XFx0cmV0dXJuIGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcXG4xNTUxOlxcdH1cXG4xNTUyOlxcdFxcbjE1NTM6XFx0c3RhdGljIGludCBlbjg4MTFoX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNTU0OlxcdHtcXG4xNTU1OlxcdFxcdGNsa19zYXZlX2NvbnRleHQoKTtcXG4xNTU2OlxcdFxcbjE1NTc6XFx0XFx0cmV0dXJuIGdlbnBoeV9zdXNwZW5kKHBoeWRldik7XFxuMTU1ODpcXHR9XFxuMTU1OTpcXHRcXG4xNTYwOlxcdHN0YXRpYyB2b2lkIGFuODgxMWhiX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbjE1NjE6XFx0e1xcbjE1NjI6XFx0XFx0c3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4xNTYzOlxcdFxcbjE1NjQ6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBidXNkZXYpIHtcXG4xNTY1OlxcdFxcdFxcdG1kaW9fZGV2aWNlX3JlbW92ZShwcml2LVxcdTAwM2VwYnVzZGV2KTtcXG4xNTY2OlxcdFxcdFxcdG1kaW9fZGV2aWNlX2ZyZWUocHJpdi1cXHUwMDNlcGJ1c2Rldik7XFxuMTU2NzpcXHRcXHR9XFxuMTU2ODpcXHR9XFxuMTU2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6NDUuNTQ4NjgyNjQ1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5OTQ2MDY3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBoYXBwZW5pbmcgZnJvbSBsaW5lIDE1NzAgb253YXJkcy4gVGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBwaWVjZSBpcywgd2hlcmUgdGhlIGFuYWx5c2lzIGlzIHRha2luZyBwbGFjZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiBteSB1bmRlcnN0YW5kaW5nIGlzIGVpdGhlciBnb2luZyB0byBkZWVwZW4gb3IgYnJlYWssIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGZvY3VzZWQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NzEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjQ4LjU0MzI5MTUyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU3MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU3MDpcXHRzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW44ODExaF9kcml2ZXJbXSA9IHtcXG4xNTcxOlxcdHtcXG4xNTcyOlxcdFxcdFBIWV9JRF9NQVRDSF9NT0RFTChFTjg4MTFIX1BIWV9JRCksXFxuMTU3MzpcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIkFpcm9oYSBFTjg4MTFIXFxcIixcXG4xNTc0OlxcdFxcdC5wcm9iZVxcdFxcdFxcdD0gZW44ODExaF9wcm9iZSxcXG4xNTc1OlxcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IGVuODgxMWhfZ2V0X2ZlYXR1cmVzLFxcbjE1NzY6XFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSBlbjg4MTFoX2NvbmZpZ19pbml0LFxcbjE1Nzc6XFx0XFx0LmdldF9yYXRlX21hdGNoaW5nXFx0PSBlbjg4MTFoX2dldF9yYXRlX21hdGNoaW5nLFxcbjE1Nzg6XFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSBlbjg4MTFoX2NvbmZpZ19hbmVnLFxcbjE1Nzk6XFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSBlbjg4MTFoX3JlYWRfc3RhdHVzLFxcbjE1ODA6XFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0gZW44ODExaF9yZXN1bWUsXFxuMTU4MTpcXHRcXHQuc3VzcGVuZFxcdFxcdD0gZW44ODExaF9zdXNwZW5kLFxcbjE1ODI6XFx0XFx0LmNvbmZpZ19pbnRyXFx0XFx0PSBlbjg4MTFoX2NsZWFyX2ludHIsXFxuMTU4MzpcXHRcXHQuaGFuZGxlX2ludGVycnVwdFxcdD0gZW44ODExaF9oYW5kbGVfaW50ZXJydXB0LFxcbjE1ODQ6XFx0XFx0LmxlZF9od19pc19zdXBwb3J0ZWRcXHQ9IGVuODgxMWhfbGVkX2h3X2lzX3N1cHBvcnRlZCxcXG4xNTg1OlxcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IGFpcl9waHlfcmVhZF9wYWdlLFxcbjE1ODY6XFx0XFx0LndyaXRlX3BhZ2VcXHRcXHQ9IGFpcl9waHlfd3JpdGVfcGFnZSxcXG4xNTg3OlxcdFxcdC5sZWRfYmxpbmtfc2V0XFx0XFx0PSBhaXJfbGVkX2JsaW5rX3NldCxcXG4xNTg4OlxcdFxcdC5sZWRfYnJpZ2h0bmVzc19zZXRcXHQ9IGFpcl9sZWRfYnJpZ2h0bmVzc19zZXQsXFxuMTU4OTpcXHRcXHQubGVkX2h3X2NvbnRyb2xfc2V0XFx0PSBhaXJfbGVkX2h3X2NvbnRyb2xfc2V0LFxcbjE1OTA6XFx0XFx0LmxlZF9od19jb250cm9sX2dldFxcdD0gYWlyX2xlZF9od19jb250cm9sX2dldCxcXG4xNTkxOlxcdH0sXFxuMTU5MjpcXHR7XFxuMTU5MzpcXHRcXHRQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODExSEJfUEhZX0lEKSxcXG4xNTk0OlxcdFxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiQWlyb2hhIEFOODgxMUhCXFxcIixcXG4xNTk1OlxcdFxcdC5wcm9iZVxcdFxcdFxcdD0gYW44ODExaGJfcHJvYmUsXFxuMTU5NjpcXHRcXHQucmVtb3ZlXFx0XFx0XFx0PSBhbjg4MTFoYl9yZW1vdmUsXFxuMTU5NzpcXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0XFx0PSBlbjg4MTFoX2dldF9mZWF0dXJlcyxcXG4xNTk4OlxcdFxcdC5jb25maWdfaW5pdFxcdFxcdD0gYW44ODExaGJfY29uZmlnX2luaXQsXFxuMTU5OTpcXHRcXHQuZ2V0X3JhdGVfbWF0Y2hpbmdcXHQ9IGVuODgxMWhfZ2V0X3JhdGVfbWF0Y2hpbmcsXFxuMTYwMDpcXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IGVuODgxMWhfY29uZmlnX2FuZWcsXFxuMTYwMTpcXHRcXHQucmVhZF9zdGF0dXNcXHRcXHQ9IGVuODgxMWhfcmVhZF9zdGF0dXMsXFxuMTYwMjpcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSBlbjg4MTFoX3Jlc3VtZSxcXG4xNjAzOlxcdFxcdC5zdXNwZW5kXFx0XFx0PSBlbjg4MTFoX3N1c3BlbmQsXFxuMTYwNDpcXHRcXHQuY29uZmlnX2ludHJcXHRcXHQ9IGVuODgxMWhfY2xlYXJfaW50cixcXG4xNjA1OlxcdFxcdC5oYW5kbGVfaW50ZXJydXB0XFx0PSBlbjg4MTFoX2hhbmRsZV9pbnRlcnJ1cHQsXFxuMTYwNjpcXHRcXHQubGVkX2h3X2lzX3N1cHBvcnRlZFxcdD0gZW44ODExaF9sZWRfaHdfaXNfc3VwcG9ydGVkLFxcbjE2MDc6XFx0XFx0LnJlYWRfcGFnZVxcdFxcdD0gYWlyX3BoeV9yZWFkX3BhZ2UsXFxuMTYwODpcXHRcXHQud3JpdGVfcGFnZVxcdFxcdD0gYWlyX3BoeV93cml0ZV9wYWdlLFxcbjE2MDk6XFx0XFx0LmxlZF9ibGlua19zZXRcXHRcXHQ9IGFpcl9sZWRfYmxpbmtfc2V0LFxcbjE2MTA6XFx0XFx0LmxlZF9icmlnaHRuZXNzX3NldFxcdD0gYWlyX2xlZF9icmlnaHRuZXNzX3NldCxcXG4xNjExOlxcdFxcdC5sZWRfaHdfY29udHJvbF9zZXRcXHQ9IGFpcl9sZWRfaHdfY29udHJvbF9zZXQsXFxuMTYxMjpcXHRcXHQubGVkX2h3X2NvbnRyb2xfZ2V0XFx0PSBhaXJfbGVkX2h3X2NvbnRyb2xfZ2V0LFxcbjE2MTM6XFx0fSB9O1xcbjE2MTQ6XFx0XFxuMTYxNTpcXHRtb2R1bGVfcGh5X2RyaXZlcihlbjg4MTFoX2RyaXZlcik7XFxuMTYxNjpcXHRcXG4xNjE3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgZW44ODExaF90YmxbXSA9IHtcXG4xNjE4OlxcdFxcdHsgUEhZX0lEX01BVENIX01PREVMKEVOODgxMUhfUEhZX0lEKSB9LFxcbjE2MTk6XFx0XFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQU44ODExSEJfUEhZX0lEKSB9LFxcbjE2MjA6XFx0XFx0eyB9XFxuMTYyMTpcXHR9O1xcbjE2MjI6XFx0XFxuMTYyMzpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGVuODgxMWhfdGJsKTtcXG4xNjI0OlxcdE1PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRE0pO1xcbjE2MjU6XFx0TU9EVUxFX0ZJUk1XQVJFKEVOODgxMUhfTUQzMl9EU1ApO1xcbjE2MjY6XFx0TU9EVUxFX0ZJUk1XQVJFKEFOODgxMUhCX01EMzJfRE0pO1xcbjE2Mjc6XFx0TU9EVUxFX0ZJUk1XQVJFKEFOODgxMUhCX01EMzJfRFNQKTtcXG4xNjI4OlxcdFxcbjE2Mjk6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJBaXJvaGEgRU44ODExSCBhbmQgQU44ODExSEIgUEhZIGRyaXZlcnNcXFwiKTtcXG4xNjMwOlxcdE1PRFVMRV9BVVRIT1IoXFxcIkFpcm9oYVxcXCIpO1xcbjE2MzE6XFx0TU9EVUxFX0FVVEhPUihcXFwiRXJpYyBXb3Vkc3RyYSBcXHUwMDNjZXJpY3dvdWRzQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4xNjMyOlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzU6NDguNTQzNDA4NDgzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MTk0MTg0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTURJTy9QSFkgUmVhY2hhYmlsaXR5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyByZWFjaGFibGUgTURJTyBQSFkgZGV2aWNlcyBhcmUgd2hlbiBpdCBjb21lcyB0byBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHNvbWV0aGluZyBsaWtlIHN5emthbGxlci4gVGhlIHF1ZXN0aW9uIEknbSB0cnlpbmcgdG8gYW5zd2VyIGlzOiBjYW4gd2UgYWN0dWFsbHkgKmdldCB0byogdGhlc2UgdGhpbmdzP1xuXG5GaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gQ2FuIHdlIHByb2JlIHRoZW0sIGVtdWxhdGUgdGhlbSwgb3IgaW5zdGFudGlhdGUgdGhlbSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBJIGtub3cgYSBNQUMgZHJpdmVyIHVzdWFsbHkgY3JlYXRlcyBhbiBNRElPIGJ1cyBhbmQgc2NhbnMsIG9yIGl0IGNvbWVzIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLCBBQ1BJLCBwbGF0Zm9ybSBkZXZpY2VzIG9yIE1ESU8gbmV0bGluay4gVGhlIHJlYWwgdHJpY2sgaXM6IGNhbiAqdXNlciBzcGFjZSogZG8gdGhpcz8gT3IsIGRvIHdlIGhhdmUgTURJTyBQSFkgZHJpdmVycyBpbiBzdGFuZGFyZCBRRU1VIC8gdmlydGlvIGNvbmZpZ3VyYXRpb25zP1xuXG5OZXh0LCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIE1ESU8gYnVzZXMgYW5kIFBIWSBkcml2ZXJzIGRpcmVjdGx5LiBJJ20gZm9jdXNpbmcgb24gdGhlIGZlYXNpYmlsaXR5IG9mIGluc3RhbnRpYXRpbmcgYSBzcGVjaWZpYyBQSFkgZGV2aWNlIHdpdGggYSB0YXJnZXQgUEhZIElEIGxpa2UgYEFOODgxMUhCX1BIWV9JRGAgd2l0aG91dCBuZWVkaW5nIGFjdHVhbCBoYXJkd2FyZS5cblxuRmluYWxseSwgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGFueSB2aXJ0dWFsIE1ESU8gYnVzZXMgb3Igc29mdHdhcmUgTURJTyBkcml2ZXJzIGNhbiBwcm92aWRlIGEgd2F5IGluPyBUaGlzIG1lYW5zIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBtZGlvLWdwaW9gLCBgbWRpby1iaXRiYW5nYCwgYG1kaW8tZHVtbXlgLCBhbmQgc28gb24uIEknbGwgbmVlZCB0byBhbHNvIGNoZWNrIHRoZSBzeXNmcyBhbmQgbmV0bGluayBpbnRlcmZhY2VzIGZvciBhbnkgTURJTyByZWxhdGVkIGVudHJ5cG9pbnRzLiBUaGlzIGlzIG15IGJlc3QgYmV0IGZvciBhIHNvZnR3YXJlIGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk4MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjUyLjI2MjgyOTQ1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NjAwMDQ0NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb19idXNfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjUzLjk0ODg0MDA1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTYyMDk1NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNRElPYnVzIFJlZ2lzdHJhdGlvbiAtIFdoZXJlIHRvIFN0YXJ0PyoqXG5cbkFscmlnaHQsIHRoZSB0YXNrIGF0IGhhbmQgaXMgZGVmaW5pdGVseSByZWxhdGVkIHRvIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbi4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBzeXN0ZW0gaW5pdGlhbGl6ZXMgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBNRElPIGJ1cy4gU28sIGluc3RlYWQgb2YgcmFuZG9tbHkgZGl2aW5nIGluLCBJIG5lZWQgdG8ga25vdyB0aGUgZW50cnkgcG9pbnRzLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IGZ1bmN0aW9uIG5hbWUgdG8gc3RhcnQgd2l0aCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgYG1kaW9idXNfcmVnaXN0ZXJgLiBJdOKAmXMgdXN1YWxseSBhIHByZXR0eSByZWxpYWJsZSBpbmRpY2F0b3IuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggZm9yIHRoYXQuIERlcGVuZGluZyBvbiB0aGUgcmVzdWx0cywgSSdsbCBrbm93IHdoZXRoZXIgdGhpcyB3aWxsIGludm9sdmUgc29tZSBkcml2ZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGJ1cyBsYXllciBtYW5pcHVsYXRpb24sIG9yIG92ZXJhbGwgYm9hcmQgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU2OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjU1LjkxMDkzODM4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MDcxNTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTEzOCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0PTM0OT1NRElPXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3QtMzUxLSAgZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoKVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTI6ICBkZXZtX21kaW9idXNfcmVnaXN0ZXIoKVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTM6ICBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoKVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdC0zNTQtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdD0xMj1kZXZpY2UgKHRoZSBzYW1lIG9iamVjdHMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB2aWFcXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdDoxMzpgYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeSgpYGApLiBNQUMtc2lkZSBjb25uZWN0aW9uIHByb3BlcnRpZXMgc3VjaCBhc1xcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0LTE0LWBgcGh5LWhhbmRsZWBgIGFuZCBgYHBoeS1tb2RlYGAgYXJlIGRvY3VtZW50ZWQgaW4gW2FjcGktbWRpby1waHldXy5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvcGh5LnJzdD03PVRoZSBQSFlzIG9uIGFuIE1ESU8gYnVzIFtwaHldIGFyZSBwcm9iZWQgYW5kIHJlZ2lzdGVyZWQgdXNpbmdcXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3Q6ODpmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoKS5cXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3QtOS1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0PTQwPXJlZ2lzdGVyZWQgYXMgYSBkaXN0aW5jdCBkZXZpY2UuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC01Ni0gICBkcml2ZXIgbmVlZHMsIHNldHVwIHRoZSBtaWlfYnVzIHN0cnVjdHVyZSwgYW5kIHJlZ2lzdGVyIHdpdGggdGhlIFBBTCB1c2luZ1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0OjU3OiAgIG1kaW9idXNfcmVnaXN0ZXIuICBTaW1pbGFybHksIHRoZXJlJ3MgYSByZW1vdmUgZnVuY3Rpb24gdG8gdW5kbyBhbGwgb2ZcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC01OC0gICB0aGF0ICh1c2UgbWRpb2J1c191bnJlZ2lzdGVyKS5cXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmM9MTA5PXN0YXRpYyBpbnQgZXA4MjQ4ZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzItXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYzoxMzM6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG9mZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzQtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jPTIwNz1zdGF0aWMgaW50IGdwaW9fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jLTI0My1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYzoyNDQ6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYz02MDc9c3RhdGljIGludCBiY21fc2YyX21kaW9fcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYy02ODMtXFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYzo2ODQ6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2V1c2VyX21paV9idXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjg1LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYz0xODc9c3RhdGljIGludCBnc3dpcF9tZGlvKHN0cnVjdCBnc3dpcF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjEzLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jOjIxNDpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTIxNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQxLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0MjpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LVxcdTAwM2VkZXYsIGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yMzIxPWludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjM5Mi1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMzkzOlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihkcy1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTQtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz02ODU9c3RhdGljIGludCBsYW45Mzd4X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU1LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6NzU2OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihkcy1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zODk9eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwNi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MDc6XFx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MDgtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTUyMD15dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUzODpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUzOS1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTIzMzc9bXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIzNzItXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjIzNzM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMzc0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYz0yNDI9c3RhdGljIGludCBtdDc2Mjhfc2V0dXBfaW50ZXJuYWxfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYxLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYzoyNjI6XFx0cmV0dXJuIGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTI2My19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz0zODM0PXN0YXRpYyBpbnQgbXY4OGU2eHh4X21kaW9fcmVnaXN0ZXIoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4Ny1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzozODg4OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtMzg4OS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjc9c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5Mi1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyOTM6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTQtXFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0xNDk9c3RhdGljIGludCBuZXRjX3BvcnRfY3JlYXRlX2VtZGlvX2J1cyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE3OS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoxODA6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0xODEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jPTk1Nz1zdGF0aWMgaW50IHZzYzk5NTlfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxMy1cXHQvKiBOZWVkZWQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgYnVzIG11dGV4IGxvY2sgKi9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxMDE0OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTEwMTUtXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYz04Nzg9c3RhdGljIGludCB2c2M5OTUzX21kaW9fYnVzX2FsbG9jKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTAzLVxcdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmM6OTA0OlxcdHJjID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jLTkwNS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jPTM1Nz1zdGF0aWMgaW50IGFyOTMzMV9zd19tYnVzX2luaXQoc3RydWN0IGFyOTMzMV9zd19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODEtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzozODI6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4My1cXHRvZl9ub2RlX3B1dChtbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ3PXFjYThrX21kaW9fcmVnaXN0ZXIoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODYtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTg3OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpbyk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTg4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jPTc1PWludCBydGw4M3h4X3NldHVwX3VzZXJfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMTAwLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYzoxMDE6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZWRldiwgYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtMTAyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM9MTExNz1zdGF0aWMgaW50IGE1cHN3X3Byb2JlX21kaW8oc3RydWN0IGE1cHN3ICphNXBzdywgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQzLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM6MTE0NDpcXHRyZXR1cm4gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oPTMwNz12b2lkIHNqYTExMDVfZnJhbWVfbWVtb3J5X3BhcnRpdGlvbmluZyhzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMDktLyogRnJvbSBzamExMTA1X21kaW8uYyAqL1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaDozMTA6aW50IHNqYTExMDVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0zMTEtdm9pZCBzamExMTA1X21kaW9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM9MzAyNj1zdGF0aWMgaW50IHNqYTExMDVfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMzA2Ny1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYzozMDY4OlxcdHJjID0gc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKGRzKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0zMDY5LVxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTI1OD1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3R4X3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0yODctXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6Mjg4OlxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0yODktXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0zMTI9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90MV9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQzLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM0NDpcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzQ1LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk1LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjM5NjpcXHRyYyA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zOTctXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz00Mzk9c3RhdGljIHZvaWQgc2phMTEwNV9tZGlvYnVzX3Bjc191bnJlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00NTgtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6NDU5OmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQ2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYz00NTk9c3RhdGljIGludCBheF9taWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmMtNDc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jOjQ3OTpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF4LVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYy00ODAtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYz0xMzIxPXN0YXRpYyBpbnQgb3dsX2VtYWNfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM6MTM0NjpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBwcml2LVxcdTAwM2VtaWksIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYz01MDk9c3RhdGljIGludCBhZGluMTExMF9yZWdpc3Rlcl9tZGlvYnVzKHN0cnVjdCBhZGluMTExMF9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmMtNTI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jOjUzMDpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYy01MzEtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jPTYxNz1zdGF0aWMgaW50IGFkaW4xMTQwX21kaW9fcmVnaXN0ZXIoc3RydWN0IGFkaW4xMTQwX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02MzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM6NjM3OlxcdHJldHVybiBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNnNwaWRldi1cXHUwMDNlZGV2LCBwcml2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02MzgtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYz0xMjkwPXN0YXRpYyBpbnQgZ3JldGhfbWRpb19pbml0KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jOjEzMDc6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihncmV0aC1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA4LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jPTM5MzE9c3RhdGljIGludCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYzo0MDI3OlxcdHJjID0gbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI4LVxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYz0xMjE9c3RhdGljIGludCBhbHRlcmFfdHNlX21kaW9fY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jOjE1ODpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1OS1cXHRpZiAocmV0ICE9IDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM9MTA2MT1zdGF0aWMgaW50IGF1MTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM6MTIyMjpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGF1cC1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIzLVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9MzQyOD1zdGF0aWMgaW50IHhnYmVfcGh5X2luaXQoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzE3LVxcdHNucHJpbnRmKG1paS1cXHUwMDNlaWQsIHNpemVvZihtaWktXFx1MDAzZWlkKSwgXFxcIiVzXFxcIiwgZGV2X25hbWUocGRhdGEtXFx1MDAzZWRldikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcxODpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy0zNzE5LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MjA6XFx0XFx0ZGV2X2VycihwZGF0YS1cXHUwMDNlZGV2LCBcXFwibWRpb2J1c19yZWdpc3RlciBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcyMS1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYz05OD1pbnQgeGdlX21kaW9fY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMTgtXFx0bWRpb19idXMtXFx1MDAzZXBoeV9tYXNrID0gMHgxO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM6MTE5OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTIwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTgzNz1pbnQgeGdlbmVfZW5ldF9waHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6ODg4OnN0YXRpYyBpbnQgeGdlbmVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWlpX2J1cyAqbWRpbylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTEzOlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MTQtXFx0XFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMS1cXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkyMjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTkzOT1pbnQgeGdlbmVfZW5ldF9tZGlvX2NvbmZpZyhzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTk1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjk1ODpcXHRyZXQgPSB4Z2VuZV9tZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLCBtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTktXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jPTEzMT1pbnQgYXJjX21kaW9fcHJvYmUoc3RydWN0IGFyY19lbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYzoxNzM6XFx0ZXJyb3IgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbWRpb19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmMtMTc0LVxcdG9mX25vZGVfcHV0KG1kaW9fbm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYz05NjY9c3RhdGljIGludCBheDg4Nzk2Y19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYzoxMDExOlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIGF4X2xvY2FsLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEyLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTY4Nz1zdGF0aWMgaW50IGFnNzF4eF9tZGlvX3Byb2JlKHN0cnVjdCBhZzcxeHggKmFnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjctXFx0bW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFxcXCJtZGlvXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzo3Mjg6XFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWlpX2J1cywgbW5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyOS1cXHRvZl9ub2RlX3B1dChtbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI1OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjYwOlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIobWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtMjI2MS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYz0xNzEzPXN0YXRpYyBpbnQgYmNtX2VuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM6MTgzMDpcXHRcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgzMS1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYz0yMTE9c3RydWN0IG1paV9idXMgKmJjbWFfbWRpb19taWlfcmVnaXN0ZXIoc3RydWN0IGJnbWFjICpiZ21hYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYzoyMzY6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmMtMjM3LVxcdG9mX25vZGVfcHV0KG5wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTE5Mz1pbnQgYmNtZ2VuZXRfbWlpX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIGluaXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzMtXFx0XFx0cGh5X25hbWUgPSBcXFwiZXh0ZXJuYWwgUnZNSUlcXFwiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjIzNDpcXHRcXHQvKiBvZl9tZGlvYnVzX3JlZ2lzdGVyIHRvb2sgY2FyZSBvZiByZWFkaW5nIHRoZSAnbWF4LXNwZWVkJ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzNS1cXHRcXHQgKiBQSFkgcHJvcGVydHkgZm9yIHVzLCBlZmZlY3RpdmVseSBsaW1pdGluZyB0aGUgUEhZIHN1cHBvcnRlZFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jPTIxNTc9c3RhdGljIGludCBzYm1hY19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsZGV2LCBsb25nIGxvbmcgYmFzZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI3LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoyMjI4OlxcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoc2MtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI5LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTE1MDU9c3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYzoxNTU4OlxcdGkgPSBtZGlvYnVzX3JlZ2lzdGVyKHRwLVxcdTAwM2VtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1OS1cXHRpZiAoaSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwOTc6c3RhdGljIGludCBtYWNiX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1hY2IgKmJwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNC1cXHRpZiAobWRpb19ucClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMDU6XFx0XFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTExOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMTk6XFx0XFx0XFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjAtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMjI6XFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMy19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTExMjU9c3RhdGljIGludCBtYWNiX21paV9pbml0KHN0cnVjdCBtYWNiICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE1OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExNTk6XFx0ZXJyID0gbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKGJwLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNjAtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM9MTEwNz1zdGF0aWMgaW50IGRtOTA1MV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBib2FyZF9pbmZvICpkYilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jOjExMjU6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgZGItXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTI0MjM9c3RhdGljIGludCB0c25lcF9tZGlvX2luaXQoc3RydWN0IHRzbmVwX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM6MjQ1NTpcXHRyZXR2YWwgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXFx1MDAzZW1kaW9idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM9MTAyND1zdGF0aWMgaW50IGV0aG9jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jLTEyMDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYzoxMjA4OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYy0xMjA5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTczND1zdGF0aWMgaW50IGZ0Z21hYzEwMF9zZXR1cF9tZGlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYzoxNzcwOlxcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VkZXYsIHByaXYtXFx1MDAzZW1paV9idXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc3MS1cXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jPTM2PXN0YXRpYyBpbnQgZW5ldGNfcGNpX21kaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYzo5MTpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZGV2LVxcdTAwM2VvZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05Mi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTI2Nj1zdGF0aWMgaW50IGVuZXRjX21kaW9fcHJvYmUoc3RydWN0IGVuZXRjX3BmICpwZiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0yOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjI5MzpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0yOTQtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0zMDg9c3RhdGljIGludCBlbmV0Y19pbWRpb19jcmVhdGUoc3RydWN0IGVuZXRjX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjM0MzpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0NC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz0zMDQyPXN0YXRpYyBpbnQgZmVjX2VuZXRfbWlpX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzE2MTpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGZlcC1cXHUwMDNlbWlpX2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzE2Mi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jPTY1PXN0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tcGM1Mnh4X3BoeS5jOjEwNjpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDctXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM9MTQ5PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYy0xNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYzoxNzY6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM9OTc9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYzoxNjc6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jPTQwOT1zdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6NDk0OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jLTQ5NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jPTM3MT1zdGF0aWMgaW50IHhnbWFjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI2LVxcdGlmIChpc19vZl9ub2RlKGZ3bm9kZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjc6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHRvX29mX25vZGUoZndub2RlKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjgtXFx0ZWxzZSBpZiAoaXNfYWNwaV9ub2RlKGZ3bm9kZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjk6XFx0XFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgZndub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQzMC1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jPTI2Nj1pbnQgaGJnX21kaW9faW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjI5MjpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYz0xMDk0PXN0YXRpYyBpbnQgaGl4NWhkMl9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYzoxMTg2OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0xMjM9aW50IGhjbGdlX21hY19tZGlvX2NvbmZpZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0xNTQtXFx0bWRpb19idXMtXFx1MDAzZXBoeV9tYXNrID0gfigxVSBcXHUwMDNjXFx1MDAzYyBtYWMtXFx1MDAzZXBoeV9hZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jOjE1NTpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTE1Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYz00OTU9c3RhdGljIGludCBobnNfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jOjU4NDpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01ODUtXFx0fSBlbHNlIGlmIChpc19hY3BpX25vZGUocGRldi1cXHUwMDNlZGV2LmZ3bm9kZSkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5Mi1cXHRcXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1OTM6XFx0XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTQtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYz0yNTYwPXN0YXRpYyBpbnQgZW1hY19kdF9tZGlvX3Byb2JlKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMtMjU4NC1cXHRzbnByaW50ZihidXMtXFx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFxcXCIlc1xcXCIsIGRldi1cXHUwMDNlb2ZkZXYtXFx1MDAzZW5hbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYzoyNTg1OlxcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2ZGV2LVxcdTAwM2VvZmRldi1cXHUwMDNlZGV2LCBidXMsIG1paV9ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODYtXFx0aWYgKHJlcykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MTAyNj1pbnQgaXhnYmVfbWlpX2J1c19pbml0KHN0cnVjdCBpeGdiZV9odyAqaHcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDg4LVxcdGFkYXB0ZXItXFx1MDAzZW1paV9idXMgPSBidXM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MTA4OTpcXHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwOTAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYz0zODU9bHRxX2V0b3BfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTQwMi1cXHRcXHQgcHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlbmFtZSwgcHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlaWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM6NDAzOlxcdGlmIChtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1paV9idXMpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy00MDQtXFx0XFx0ZXJyID0gLUVOWElPO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYz0yODM9c3RhdGljIGludCBvcmlvbl9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4MS1cXHQvKiBGb3IgdGhlIHBsYXRmb3JtcyBub3Qgc3VwcG9ydGluZyBEVC9BQ1BJIGZhbGwtYmFja1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6MzgyOlxcdCAqIHRvIG1kaW9idXNfcmVnaXN0ZXIgdmlhIG9mX21kaW9idXNfcmVnaXN0ZXIuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODMtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODQtXFx0aWYgKGlzX2FjcGlfbm9kZShwZGV2LVxcdTAwM2VkZXYuZndub2RlKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4NTpcXHRcXHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBwZGV2LVxcdTAwM2VkZXYuZndub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4Ni1cXHRlbHNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODc6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4OC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM9MTM4Nz1zdGF0aWMgaW50IHB4YTE2OF9ldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTE1MDQtXFx0cGVwLVxcdTAwM2VzbWlfYnVzLVxcdTAwM2VwaHlfbWFzayA9IDB4ZmZmZmZmZmY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM6MTUwNTpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHBlcC1cXHUwMDNlc21pX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmMtMTUwNi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz05OTg9c3RhdGljIGludCBtdGtfbWRpb19pbml0KHN0cnVjdCBtdGtfZXRoICpldGgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzctXFx0ZGV2X2RiZyhldGgtXFx1MDAzZWRldiwgXFxcIk1EQyBpcyBydW5uaW5nIG9uICVkIEh6XFxcXG5cXFwiLCBNRENfTUFYX0ZSRVEgLyBldGgtXFx1MDAzZW1kY19kaXZpZGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjEwMzg6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihldGgtXFx1MDAzZW1paV9idXMsIG1paV9ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0xMDM5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jPTE0MjI9c3RhdGljIGludCBtdGtfc3Rhcl9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM6MTQ0ODpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBwcml2LVxcdTAwM2VtaWksIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTE0NDktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jPTI4Nz1pbnQgbWx4YmZfZ2lnZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBtbHhiZl9naWdlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYy0zMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYzozMzM6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzNC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM9MjUzPWludCBmYm5pY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21kaW8uYy0yNzItXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM1OjU3LjM4MTY1ODc1NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODM2MTI0Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWSBEcml2ZXIgYW5kIEVtdWxhdGlvbiBQb3NzaWJpbGl0aWVzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBJJ20gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgLCB0aGUgZHJpdmVyIGZvciB0aGF0IEFpcm9oYSBFTjg4MTFIIGFuZCBBTjg4MTFIQiBFdGhlcm5ldCBQSFkgdHJhbnNjZWl2ZXIuIEFpcm9oYSwgcmlnaHQ/IE9mdGVuIHNlZW4gb24gTWVkaWFUZWsvQWlyb2hhIHJvdXRlciBib2FyZHMgb3IgZGVkaWNhdGVkIG5ldHdvcmtpbmcgZXF1aXBtZW50LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LCBsaWtlIGluIFFFTVUgb3Igd2l0aCBhIFVTQiBpbnRlcmZhY2UsIGZvciB0aGF0IHNwZWNpZmljIGNoaXA/IFRoZSBhbnN3ZXIgaXMgcHJvYmFibHkgbm8uXG5cblRoZXNlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdHlwaWNhbGx5IHRoZXknbGwgcmVseSBvbiBzb21ldGhpbmcgbGlrZSBlMTAwMCwgdmlydGlvLW5ldCwgb3IgcnRsODEzOSBuZXR3b3JrIGludGVyZmFjZXMuIE9yLCBwZXJoYXBzIGEgVVNCIEV0aGVybmV0IGRvbmdsZSB1c2luZyBzb21ldGhpbmcgbGlrZSBheDg4MTc5XzE3OGEgb3IgY2RjX2V0aGVyLiBUaGUgdGhpbmcgaXMsIGV2ZW4gKmlmKiB0aGVyZSdzIGFuIE1ESU8gYnVzIGF2YWlsYWJsZSBpbiB0aGUgZW11bGF0ZWQgTklDLCB0aGF0IGBFTjg4MTFIX1BIWV9JRGAgb3IgYEFOODgxMUhCX1BIWV9JRGAgLSB0aGF0J3MgaGFyZHdhcmUtc3BlY2lmaWMuIEEgZGlyZWN0IGVtdWxhdGlvbiBpcyBsaWtlbHkgb3V0IG9mIHRoZSBxdWVzdGlvbi5cblxuU28sIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGlmIHRoZXJlIGFyZSBhbnkgKndvcmthcm91bmRzKiBmb3IgZ2V0dGluZyB0aGUgZHJpdmVyIGxvYWRlZCBvciBwcm9iZWQgd2l0aGluIFFFTVUuIENhbiBJLCBmb3IgZXhhbXBsZSwgbGV2ZXJhZ2Ugc3l6a2FsbGVyIHRvIGNyZWF0ZSBzb21lIHNvcnQgb2YgbW9jayBNRElPIG9yIFBIWSBkZXZpY2UgZnJvbSB1c2Vyc3BhY2U/IFRpbWUgdG8gaW52ZXN0aWdhdGUgdGhlIHBvc3NpYmlsaXR5IG9mIHVzZXJzcGFjZSBNRElPIG9yIFBIWSBkZXZpY2UgY3JlYXRpb24gaW50ZXJmYWNlcy4gSSdsbCBuZWVkIHRvIHJlc2VhcmNoLCBzZWUgaWYgdGhlcmUgYXJlIHN0YW5kYXJkIG1ldGhvZHMgbGlrZSBuZXRsaW5rLCBzeXNmcywgb3IgbWF5YmUgc29tZSBpb2N0bCBjYWxscyB0aGF0IGNvdWxkIGJlIGxldmVyYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2MjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzY6MDEuMjE3Nzk3NjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjU4Mzc1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZV9jcmVhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTExNz1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM0LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTM1OlxcdFxcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCAwLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM2LVxcdGlmIChJU19FUlIocGh5KSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTg1LVxcdFxcdC8qIFJlYWwgUEhZIElEIG9mIFBvcnQgMSBpcyAwICovXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTg2OlxcdFxcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgUEhZX0lEX1RKQTExMDIsIGZhbHNlLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01ODctXFx0XFx0aWYgKElTX0VSUihwaHkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTItXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTkzOlxcdFxcdC8qIE92ZXJ3cml0ZSBwYXJlbnQgZGV2aWNlLiBwaHlfZGV2aWNlX2NyZWF0ZSgpIHNldCBwYXJlbnQgdG9cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTQtXFx0XFx0ICogdGhlIG1paV9idXMtXFx1MDAzZWRldiwgd2hpY2ggaXMgbm90IGNvcnJlY3QgaW4gY2FzZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NzI4PXN0YXRpYyBpbnQgcGh5X3JlcXVlc3RfZHJpdmVyX21vZHVsZShzdHJ1Y3QgcGh5X2RldmljZSAqZGV2LCB1MzIgcGh5X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDctXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo3NDg6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNzQ5LVxcdFxcdFxcdFxcdCAgICAgYm9vbCBpc19jNDUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTgzOS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo4NDA6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX2NyZWF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy04NDEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEwNzE9c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5Ni1cXHRcXHRpZiAoIXIpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMDk3OlxcdFxcdFxcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwOTgtXFx0XFx0XFx0XFx0XFx0XFx0IHRydWUsIFxcdTAwMjZjNDVfaWRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDE6XFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCBpc19jNDUsIFxcdTAwMjZjNDVfaWRzKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDItfVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaD0yMTY3PWludCBwaHlfbW9kaWZ5X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLCB1MzIgcmVnbnVtLFxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTY5LVxcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjE3MDpzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTcxLVxcdFxcdFxcdFxcdCAgICAgYm9vbCBpc19jNDUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM2OjAyLjc0MzY0MTgxN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODI1MzI4NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFN0cnVjdHVyYWxseSBVbnJlYWNoYWJsZSBDb2RlLCBOb3QgV29ydGggRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIGhvdyB0aGlzIGNvZGUgcGF0aCBpcyB0cmlnZ2VyZWQuIFRoZSBNRElPIGJ1cyBzZWVtcyBsaWtlIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgdGhlc2UgYnVzZXMgYXJlIHR5cGljYWxseSByZWdpc3RlcmVkIGJ5IEV0aGVybmV0IE1BQyBkcml2ZXJzIHdoZW4gdGhleSBkZXRlY3QgY29ubmVjdGVkIFBIWXMgdmlhIHBoeXNpY2FsIE1ESU8gbGluZXMuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgdGhlIGBhaXJfZW44ODExaC5jYCBkcml2ZXIuIFRoaXMgZHJpdmVyIGhhcyBsb2dpYyB0aGF0IHJlbGllcyBvbiBhIHNwZWNpZmljIFBIWSBJRCByZWFkIGZyb20gYSBoYXJkd2FyZSB0cmFuc2NlaXZlciwgaW4gdGhpcyBjYXNlLCB0aGUgQWlyb2hhIEVOODgxMUguXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGVudmlyb25tZW50LCBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIFZNcyBvbiBhbWQ2NCBkb24ndCBwcm92aWRlIHRoaXMgaGFyZHdhcmUgb3IgYW4gYWNjdXJhdGUgZW11bGF0aW9uIG9mIGl0LiBUaGUgQWlyb2hhIEVOODgxMUggaXMsIGluIGVzc2VuY2UsIGFic2VudC5cblxuSSdsbCBjb25zdWx0IFNlY3Rpb24gMiBvZiB0aGUgdHJpYWdlIGd1aWRlLiBJdCBleHBsaWNpdGx5IGNhbGxzIG91dCBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSxcIiBtZW50aW9uaW5nIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIChsaWtlIG1seHN3LCBwZHNfY29yZSwgZXRjLiksIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQgaXMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHBhdGNoIGFuZCB0aGUgcmVsZXZhbnQgZHJpdmVyLCByaWdodCBub3cuXG5cblRoZSBndWlkZSBlbXBoYXNpemVzIHRoYXQgcmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGdhdGUuIEkgY2FuIG9ubHkgZnV6eiBjb2RlIHRoYXQgKmNhbiogYWN0dWFsbHkgZXhlY3V0ZSB3aXRoaW4gdGhlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSWYgdGhlIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAyLCBpdCBzaG91bGQgKm5vdCogYmUgZnV6emVkLCByZWdhcmRsZXNzIG9mIGNvbXBsZXhpdHkgb3IgYWRkZWQgYXNzZXJ0aW9ucy5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2suIFRoZSBwYXRjaCBpdHNlbGYgaXMgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBwYWNrYWdlIHZhcmlhbnQgZGV0ZWN0aW9uIGluIGBhbjg4MTFoYl9wcm9iZWAgYW5kIHVzZXMgdGhlIGBBTjg4MTFIQl9IV1RSQVAyYCByZWdpc3RlciB0byBhZGp1c3QgTEVEIEdQSU8gc2V0dXAgZHVyaW5nIHByb2JlIGFuZCBjb25maWcgaW5pdGlhbGl6YXRpb24uXG5cbk5vdyB0aGUgcXVlc3Rpb24gcmVtYWluczogaXMgYGFpcl9lbjg4MTFoLmNgIHJlYWNoYWJsZT8gVGhlIGFuc3dlciBpcyBuby4gSXQgZGVwZW5kcyBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFpcm9oYSBFTjg4MTFIIGhhcmR3YXJlIG9yIGEgcGh5c2ljYWwgTURJTyBidXMgY29ubmVjdGVkIHRvIGl0LCB3aGljaCBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiB0aGUgdHlwaWNhbCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgZmFsbHMgdW5kZXIgdGhlIFwic3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgY2F0ZWdvcnkuIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuTGV0J3MgbWFrZSBzdXJlIG91ciByZXN1bHRzIHJlZmxlY3QgdGhpczpcbiogICBgRm9jdXNTeW1ib2xzOiBbXWBcbiogICBgRW5hYmxlQ29uZmlnczogW11gXG4qICAgYFdvcnRoRnV6emluZzogZmFsc2VgXG4qICAgYFJlYXNvbmluZzogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgdmVyZGljdC5gXG5cbkFuZCBub3cgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyNzQsIk91dHB1dFRva2VucyI6MTIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjM2OjA4LjU2ODk3MjIyM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU44ODExSCAvIEFOODgxMUhCIEV0aGVybmV0IFBIWSBkcml2ZXIgKGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jKSB0byBoYW5kbGUgcGFja2FnZSB2YXJpYW50IGRldGVjdGlvbiBhbmQgTEVEIEdQSU8gY29uZmlndXJhdGlvbi4gVGhpcyBjb2RlIHJlcXVpcmVzIGRlZGljYXRlZCBwaHlzaWNhbCBBaXJvaGEgUEhZIGhhcmR3YXJlIG9uIGFuIE1ESU8gYnVzIGFuZCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyBpdCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIEVOODgxMUggLyBBTjg4MTFIQiBFdGhlcm5ldCBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYykgdG8gaGFuZGxlIHBhY2thZ2UgdmFyaWFudCBkZXRlY3Rpb24gYW5kIExFRCBHUElPIGNvbmZpZ3VyYXRpb24uIFRoaXMgY29kZSByZXF1aXJlcyBkZWRpY2F0ZWQgcGh5c2ljYWwgQWlyb2hhIFBIWSBoYXJkd2FyZSBvbiBhbiBNRElPIGJ1cyBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgaXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6MzY6MDguNTY4OTk1NjEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdnqwk[1] Phase: Running StartedAt: 2026-09-07 06:36:31 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdnqwk[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 06:36:31 +0000 UTC FinishedAt: 2026-09-07 06:36:36 +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,}