Name: series-workflowv4m76 Phase: Failed StartedAt: 2026-08-31 12:57:00 +0000 UTC FinishedAt: 2026-08-31 13:21:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4m76[0] Phase: Succeeded StartedAt: 2026-08-31 12:57:00 +0000 UTC FinishedAt: 2026-08-31 13:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4m76[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 12:57:00 +0000 UTC FinishedAt: 2026-08-31 13:21:35 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyJiMzOTtzIFRYIGJ5dGUgc3RhdGlzdGljcyBjYWxjdWxhdGlvbiB0byBzdWJ0cmFjdCBzb2Z0d2FyZS1hcHBlbmRlZCBGQ1MgYnl0ZXMuIEl0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIG9yIGNvbnRyb2wgZmxvdywgYW5kIHRhcmdldHMgU29DL2VtYmVkZGVkIGhhcmR3YXJlIG5vdCB1dGlsaXplZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYjM2ZDQyMzIwZTk3OGIwNzJkODIxZTdlZjRiYTExMWE5NGM5MzczXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTM6MTI6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaFxuaW5kZXggMWUxZjUyMjg1YTM5ZC4uZDY5MzFjNDFmMzlkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaFxuQEAgLTk2OCw2ICYjNDM7OTY4LDggQEAgc3RydWN0IG1hY2JfZG1hX2Rlc2NfcHRwIHtcbiAgKiAgICAgICBvZiB0aGUgZnJhbWVcbiAgKiBAbWFwcGluZzogRE1BIGFkZHJlc3Mgb2YgdGhlIHNrYiYjMzk7cyBmcmFnbWVudCBidWZmZXJcbiAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgRE1BIG1hcHBlZCBidWZmZXJcbiYjNDM7ICogQGZjc19sZW46IEZDUyBieXRlcyBhcHBlbmRlZCBpbiBzb2Z0d2FyZSwgMCBvciBFVEhfRkNTX0xFTiwgb25seVxuJiM0MzsgKiAgICAgICAgICAgc2V0IGZvciB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIGZyYW1lXG4gICogQG1hcHBlZF9hc19wYWdlOiB0cnVlIHdoZW4gYnVmZmVyIHdhcyBtYXBwZWQgd2l0aCBza2JfZnJhZ19kbWFfbWFwKCksXG4gICogICAgICAgICAgICAgICAgICBmYWxzZSB3aGVuIGJ1ZmZlciB3YXMgbWFwcGVkIHdpdGggZG1hX21hcF9zaW5nbGUoKVxuICAqL1xuQEAgLTk3NSw2ICYjNDM7OTc3LDcgQEAgc3RydWN0IG1hY2JfdHhfc2tiIHtcbiBcdHN0cnVjdCBza19idWZmXHRcdCpza2I7XG4gXHRkbWFfYWRkcl90XHRcdG1hcHBpbmc7XG4gXHRzaXplX3RcdFx0XHRzaXplO1xuJiM0MztcdHU4XHRcdFx0ZmNzX2xlbjtcbiBcdGJvb2xcdFx0XHRtYXBwZWRfYXNfcGFnZTtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5pbmRleCA3NmVlNGY1MDYwMzM1Li5iMTkzOWRhNGM5NWFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTEzMjIsOCAmIzQzOzEzMjIsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3R4X2Vycm9yX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRcdFx0YnAtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X3BhY2tldHMmIzQzOyYjNDM7O1xuIFx0XHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfcGFja2V0cyYjNDM7JiM0Mzs7XG4gXHRcdFx0XHRwYWNrZXRzJiM0MzsmIzQzOztcbi1cdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbi1cdFx0XHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuJiM0MztcdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbiAtIHR4X3NrYi1cdTAwM2VmY3NfbGVuO1xuJiM0MztcdFx0XHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItXHUwMDNlbGVuIC0gdHhfc2tiLVx1MDAzZWZjc19sZW47XG4gXHRcdFx0XHRieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG5AQCAtMTQ1MCw4ICYjNDM7MTQ1MCw4IEBAIHN0YXRpYyBpbnQgbWFjYl90eF9jb21wbGV0ZShzdHJ1Y3QgbWFjYl9xdWV1ZSAqcXVldWUsIGludCBidWRnZXQpXG4gXHRcdFx0XHRcdCAgICBza2ItXHUwMDNlZGF0YSk7XG4gXHRcdFx0XHRicC1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMudHhfcGFja2V0cyYjNDM7JiM0Mzs7XG4gXHRcdFx0XHRxdWV1ZS1cdTAwM2VzdGF0cy50eF9wYWNrZXRzJiM0MzsmIzQzOztcbi1cdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbi1cdFx0XHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuJiM0MztcdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbiAtIHR4X3NrYi1cdTAwM2VmY3NfbGVuO1xuJiM0MztcdFx0XHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItXHUwMDNlbGVuIC0gdHhfc2tiLVx1MDAzZWZjc19sZW47XG4gXHRcdFx0XHRwYWNrZXRzJiM0MzsmIzQzOztcbiBcdFx0XHRcdGJ5dGVzICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuIFx0XHRcdH1cbkBAIC0yMTk5LDcgJiM0MzsyMTk5LDggQEAgc3RhdGljIHZvaWQgbWFjYl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBzdGF0aWMgdW5zaWduZWQgaW50IG1hY2JfdHhfbWFwKHN0cnVjdCBtYWNiICpicCxcbiBcdFx0XHRcdHN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZSxcbiBcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHR1bnNpZ25lZCBpbnQgaGRybGVuKVxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCBoZHJsZW4sXG4mIzQzO1x0XHRcdFx0dTggZmNzX2xlbilcbiB7XG4gXHR1bnNpZ25lZCBpbnQgZiwgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgbGVuLCBpLCB0eF9oZWFkID0gcXVldWUtXHUwMDNldHhfaGVhZDtcbkBAIC0yMjg0LDYgJiM0MzsyMjg1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBtYWNiX3R4X21hcChzdHJ1Y3QgbWFjYiAqYnAsXG4gXG4gXHQvKiBUaGlzIGlzIHRoZSBsYXN0IGJ1ZmZlciBvZiB0aGUgZnJhbWU6IHNhdmUgc29ja2V0IGJ1ZmZlciAqL1xuIFx0dHhfc2tiLVx1MDAzZXNrYiA9IHNrYjtcbiYjNDM7XHR0eF9za2ItXHUwMDNlZmNzX2xlbiA9IGZjc19sZW47XG4gXG4gXHQvKiBVcGRhdGUgVFggcmluZzogdXBkYXRlIGJ1ZmZlciBkZXNjcmlwdG9ycyBpbiByZXZlcnNlIG9yZGVyXG4gXHQgKiB0byBhdm9pZCByYWNlIGNvbmRpdGlvblxuQEAgLTI0MTcsNiAmIzQzOzI0MTksNyBAQCBzdGF0aWMgaW5saW5lIGludCBtYWNiX2NsZWFyX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LyogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vLCBvciB0aGUgRkNTIGJ5dGVzIGFwcGVuZGVkICgwIG9yIEVUSF9GQ1NfTEVOKS4gKi9cbiBzdGF0aWMgaW50IG1hY2JfcGFkX2FuZF9mY3Moc3RydWN0IHNrX2J1ZmYgKipza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0Ym9vbCBjbG9uZWQgPSBza2JfY2xvbmVkKCpza2IpIHx8IHNrYl9oZWFkZXJfY2xvbmVkKCpza2IpIHx8XG5AQCAtMjQ2NSw3ICYjNDM7MjQ2OCw3IEBAIHN0YXRpYyBpbnQgbWFjYl9wYWRfYW5kX2ZjcyhzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHNrYl9wdXRfdTgoKnNrYiwgKGZjcyBcdTAwM2VcdTAwM2UgMTYpXHRcdTAwMjYgMHhmZik7XG4gXHRza2JfcHV0X3U4KCpza2IsIChmY3MgXHUwMDNlXHUwMDNlIDI0KVx0XHUwMDI2IDB4ZmYpO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIEVUSF9GQ1NfTEVOO1xuIH1cbiBcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgbWFjYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMjQ3OCw2ICYjNDM7MjQ4MSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBtYWNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdG5ldGRldl90eF90IHJldCA9IE5FVERFVl9UWF9PSztcbiBcdHVuc2lnbmVkIGludCBoZHJsZW47XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGludCBmY3NfbGVuO1xuIFx0Ym9vbCBpc19sc287XG4gXG4gXHRpZiAobWFjYl9jbGVhcl9jc3VtKHNrYikpIHtcbkBAIC0yNDg1LDcgJiM0MzsyNDg5LDggQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0aWYgKG1hY2JfcGFkX2FuZF9mY3MoXHUwMDI2c2tiLCBuZXRkZXYpKSB7XG4mIzQzO1x0ZmNzX2xlbiA9IG1hY2JfcGFkX2FuZF9mY3MoXHUwMDI2c2tiLCBuZXRkZXYpO1xuJiM0MztcdGlmIChmY3NfbGVuIFx1MDAzYyAwKSB7XG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG5AQCAtMjU0OCw3ICYjNDM7MjU1Myw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBtYWNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH1cbiBcbiBcdC8qIE1hcCBzb2NrZXQgYnVmZmVyIGZvciBETUEgdHJhbnNmZXIgKi9cbi1cdGlmIChtYWNiX3R4X21hcChicCwgcXVldWUsIHNrYiwgaGRybGVuKSkge1xuJiM0MztcdGlmIChtYWNiX3R4X21hcChicCwgcXVldWUsIHNrYiwgaGRybGVuLCBmY3NfbGVuKSkge1xuIFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IHVwZGF0ZXMgdGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBkcml2ZXImIzM5O3MgVFggYnl0ZSBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIHRvIHN1YnRyYWN0IHNvZnR3YXJlLWFwcGVuZGVkIEZDUyBieXRlcy4gSXQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIG5ldHdvcmsgcGFja2V0IHByb2Nlc3Npbmcgb3IgY29udHJvbCBmbG93LCBhbmQgdGFyZ2V0cyBTb0MvZW1iZWRkZWQgaGFyZHdhcmUgbm90IHV0aWxpemVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRiMzZkNDIzMjBlOTc4YjA3MmQ4MjFlN2VmNGJhMTExYTk0YzkzNzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMzoxMjozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgKaW5kZXggMWUxZjUyMjg1YTM5ZC4uZDY5MzFjNDFmMzlkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgKQEAgLTk2OCw2ICYjNDM7OTY4LDggQEAgc3RydWN0IG1hY2JfZG1hX2Rlc2NfcHRwIHsKICAqICAgICAgIG9mIHRoZSBmcmFtZQogICogQG1hcHBpbmc6IERNQSBhZGRyZXNzIG9mIHRoZSBza2ImIzM5O3MgZnJhZ21lbnQgYnVmZmVyCiAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgRE1BIG1hcHBlZCBidWZmZXIKJiM0MzsgKiBAZmNzX2xlbjogRkNTIGJ5dGVzIGFwcGVuZGVkIGluIHNvZnR3YXJlLCAwIG9yIEVUSF9GQ1NfTEVOLCBvbmx5CiYjNDM7ICogICAgICAgICAgIHNldCBmb3IgdGhlIGxhc3QgYnVmZmVyIG9mIHRoZSBmcmFtZQogICogQG1hcHBlZF9hc19wYWdlOiB0cnVlIHdoZW4gYnVmZmVyIHdhcyBtYXBwZWQgd2l0aCBza2JfZnJhZ19kbWFfbWFwKCksCiAgKiAgICAgICAgICAgICAgICAgIGZhbHNlIHdoZW4gYnVmZmVyIHdhcyBtYXBwZWQgd2l0aCBkbWFfbWFwX3NpbmdsZSgpCiAgKi8KQEAgLTk3NSw2ICYjNDM7OTc3LDcgQEAgc3RydWN0IG1hY2JfdHhfc2tiIHsKIAlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKIAlkbWFfYWRkcl90CQltYXBwaW5nOwogCXNpemVfdAkJCXNpemU7CiYjNDM7CXU4CQkJZmNzX2xlbjsKIAlib29sCQkJbWFwcGVkX2FzX3BhZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwppbmRleCA3NmVlNGY1MDYwMzM1Li5iMTkzOWRhNGM5NWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKQEAgLTEzMjIsOCAmIzQzOzEzMjIsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3R4X2Vycm9yX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQkJCWJwLSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X3BhY2tldHMmIzQzOyYjNDM7OwogCQkJCXF1ZXVlLSZndDtzdGF0cy50eF9wYWNrZXRzJiM0MzsmIzQzOzsKIAkJCQlwYWNrZXRzJiM0MzsmIzQzOzsKLQkJCQlicC0mZ3Q7bmV0ZGV2LSZndDtzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLSZndDtsZW47Ci0JCQkJcXVldWUtJmd0O3N0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItJmd0O2xlbjsKJiM0MzsJCQkJYnAtJmd0O25ldGRldi0mZ3Q7c3RhdHMudHhfYnl0ZXMgJiM0Mzs9IHNrYi0mZ3Q7bGVuIC0gdHhfc2tiLSZndDtmY3NfbGVuOwomIzQzOwkJCQlxdWV1ZS0mZ3Q7c3RhdHMudHhfYnl0ZXMgJiM0Mzs9IHNrYi0mZ3Q7bGVuIC0gdHhfc2tiLSZndDtmY3NfbGVuOwogCQkJCWJ5dGVzICYjNDM7PSBza2ItJmd0O2xlbjsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTE0NTAsOCAmIzQzOzE0NTAsOCBAQCBzdGF0aWMgaW50IG1hY2JfdHhfY29tcGxldGUoc3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlLCBpbnQgYnVkZ2V0KQogCQkJCQkgICAgc2tiLSZndDtkYXRhKTsKIAkJCQlicC0mZ3Q7bmV0ZGV2LSZndDtzdGF0cy50eF9wYWNrZXRzJiM0MzsmIzQzOzsKIAkJCQlxdWV1ZS0mZ3Q7c3RhdHMudHhfcGFja2V0cyYjNDM7JiM0Mzs7Ci0JCQkJYnAtJmd0O25ldGRldi0mZ3Q7c3RhdHMudHhfYnl0ZXMgJiM0Mzs9IHNrYi0mZ3Q7bGVuOwotCQkJCXF1ZXVlLSZndDtzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLSZndDtsZW47CiYjNDM7CQkJCWJwLSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItJmd0O2xlbiAtIHR4X3NrYi0mZ3Q7ZmNzX2xlbjsKJiM0MzsJCQkJcXVldWUtJmd0O3N0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItJmd0O2xlbiAtIHR4X3NrYi0mZ3Q7ZmNzX2xlbjsKIAkJCQlwYWNrZXRzJiM0MzsmIzQzOzsKIAkJCQlieXRlcyAmIzQzOz0gc2tiLSZndDtsZW47CiAJCQl9CkBAIC0yMTk5LDcgJiM0MzsyMTk5LDggQEAgc3RhdGljIHZvaWQgbWFjYl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWFjYl90eF9tYXAoc3RydWN0IG1hY2IgKmJwLAogCQkJCXN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZSwKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXVuc2lnbmVkIGludCBoZHJsZW4pCiYjNDM7CQkJCXVuc2lnbmVkIGludCBoZHJsZW4sCiYjNDM7CQkJCXU4IGZjc19sZW4pCiB7CiAJdW5zaWduZWQgaW50IGYsIG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFnczsKIAl1bnNpZ25lZCBpbnQgbGVuLCBpLCB0eF9oZWFkID0gcXVldWUtJmd0O3R4X2hlYWQ7CkBAIC0yMjg0LDYgJiM0MzsyMjg1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBtYWNiX3R4X21hcChzdHJ1Y3QgbWFjYiAqYnAsCiAKIAkvKiBUaGlzIGlzIHRoZSBsYXN0IGJ1ZmZlciBvZiB0aGUgZnJhbWU6IHNhdmUgc29ja2V0IGJ1ZmZlciAqLwogCXR4X3NrYi0mZ3Q7c2tiID0gc2tiOwomIzQzOwl0eF9za2ItJmd0O2Zjc19sZW4gPSBmY3NfbGVuOwogCiAJLyogVXBkYXRlIFRYIHJpbmc6IHVwZGF0ZSBidWZmZXIgZGVzY3JpcHRvcnMgaW4gcmV2ZXJzZSBvcmRlcgogCSAqIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uCkBAIC0yNDE3LDYgJiM0MzsyNDE5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWFjYl9jbGVhcl9jc3VtKHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8sIG9yIHRoZSBGQ1MgYnl0ZXMgYXBwZW5kZWQgKDAgb3IgRVRIX0ZDU19MRU4pLiAqLwogc3RhdGljIGludCBtYWNiX3BhZF9hbmRfZmNzKHN0cnVjdCBza19idWZmICoqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCWJvb2wgY2xvbmVkID0gc2tiX2Nsb25lZCgqc2tiKSB8fCBza2JfaGVhZGVyX2Nsb25lZCgqc2tiKSB8fApAQCAtMjQ2NSw3ICYjNDM7MjQ2OCw3IEBAIHN0YXRpYyBpbnQgbWFjYl9wYWRfYW5kX2ZjcyhzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlza2JfcHV0X3U4KCpza2IsIChmY3MgJmd0OyZndDsgMTYpCSZhbXA7IDB4ZmYpOwogCXNrYl9wdXRfdTgoKnNrYiwgKGZjcyAmZ3Q7Jmd0OyAyNCkJJmFtcDsgMHhmZik7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIEVUSF9GQ1NfTEVOOwogfQogCiBzdGF0aWMgbmV0ZGV2X3R4X3QgbWFjYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCkBAIC0yNDc4LDYgJiM0MzsyNDgxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCW5ldGRldl90eF90IHJldCA9IE5FVERFVl9UWF9PSzsKIAl1bnNpZ25lZCBpbnQgaGRybGVuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCBmY3NfbGVuOwogCWJvb2wgaXNfbHNvOwogCiAJaWYgKG1hY2JfY2xlYXJfY3N1bShza2IpKSB7CkBAIC0yNDg1LDcgJiM0MzsyNDg5LDggQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChtYWNiX3BhZF9hbmRfZmNzKCZhbXA7c2tiLCBuZXRkZXYpKSB7CiYjNDM7CWZjc19sZW4gPSBtYWNiX3BhZF9hbmRfZmNzKCZhbXA7c2tiLCBuZXRkZXYpOwomIzQzOwlpZiAoZmNzX2xlbiAmbHQ7IDApIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0yNTQ4LDcgJiM0MzsyNTUzLDcgQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCX0KIAogCS8qIE1hcCBzb2NrZXQgYnVmZmVyIGZvciBETUEgdHJhbnNmZXIgKi8KLQlpZiAobWFjYl90eF9tYXAoYnAsIHF1ZXVlLCBza2IsIGhkcmxlbikpIHsKJiM0MzsJaWYgKG1hY2JfdHhfbWFwKGJwLCBxdWV1ZSwgc2tiLCBoZHJsZW4sIGZjc19sZW4pKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWdvdG8gdW5sb2NrOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBNQUNCIERyaXZlciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwuIFRoZSBjaGFuZ2VzIHRvdWNoIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaGAgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIG5hdHVyZSBvZiB0aGlzIGBtYWNiYCBkcml2ZXIg4oCTIHdoYXQgdHlwZSBvZiBkZXZpY2UgZG9lcyBpdCBjb250cm9sPyBJcyBpdCBhIHN0YW5kYXJkIEV0aGVybmV0IGludGVyZmFjZSwgc29tZSBzcGVjaWFsaXplZCBpbXBsZW1lbnRhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaXMga2V5LgoKTmV4dCBzdGVwOiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQuIElzIGBtYWNiYCBhIGRyaXZlciB0aGF0JiMzOTtzIGVtdWxhdGVkIHdpdGhpbiBRRU1VLCBvciBkb2VzIGl0IHByaW1hcmlseSBpbnRlcmFjdCB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlLCBwZXJoYXBzIHRocm91Z2ggYSBwbGF0Zm9ybSBvciBQQ0kgZGV2aWNlPyBUaGlzIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIEkmIzM5O2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBrZXJuZWwgY29kZSBiYXNlIGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgYG1hY2JgIHJlcHJlc2VudHMgYW5kIHdoZXJlIGl0JiMzOTtzIGRlcGxveWVkLiBLbm93aW5nIGl0cyB1c2VzIHdpbGwgaW5mb3JtIHdoZXRoZXIgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCB3aGV0aGVyIGZ1enppbmcgd2lsbCBiZSBlZmZlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01BQ0ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vY29uZmlncy9hdDkxX2R0X2RlZmNvbmZpZz02Nz1DT05GSUdfTkVUREVWSUNFUz15XG5hcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnLTY4LSMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldFxuYXJjaC9hcm0vY29uZmlncy9hdDkxX2R0X2RlZmNvbmZpZzo2OTpDT05GSUdfTUFDQj15XG5hcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnLTcwLUNPTkZJR19ETTkwMDA9eVxuLS1cbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnPTg4PUNPTkZJR19ORVRfRFNBX01WODhFNlhYWD15XG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y1X2RlZmNvbmZpZzo4OTpDT05GSUdfTUFDQj15XG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y1X2RlZmNvbmZpZy05MC1DT05GSUdfRE05MDAwPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0yNTk9Q09ORklHX1NZU1RFTVBPUlQ9bVxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6MjYwOkNPTkZJR19NQUNCPXlcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnLTI2MS1DT05GSUdfTkVUX0NBTFhFREFfWEdNQUM9eVxuLS1cbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZz0xNjY9Q09ORklHX0RVTU1ZPW1cbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZzoxNjc6Q09ORklHX01BQ0I9bVxuYXJjaC9hcm0vY29uZmlncy9weGFfZGVmY29uZmlnLTE2OC1DT05GSUdfRE05MDAwPW1cbi0tXG5hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZz03Mz1DT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaOTQ3N19TUEk9bVxuYXJjaC9hcm0vY29uZmlncy9zYW1hNV9kZWZjb25maWctNzQtIyBDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTSBpcyBub3Qgc2V0XG5hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZzo3NTpDT05GSUdfTUFDQj15XG5hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZy03Ni0jIENPTkZJR19ORVRfVkVORE9SX0NJUlJVUyBpcyBub3Qgc2V0XG4tLVxuYXJjaC9hcm0vY29uZmlncy9zYW1hN19kZWZjb25maWc9MTAyPUNPTkZJR19ORVRERVZJQ0VTPXlcbmFyY2gvYXJtL2NvbmZpZ3Mvc2FtYTdfZGVmY29uZmlnOjEwMzpDT05GSUdfTUFDQj15XG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZy0xMDQtQ09ORklHX01JQ1JFTF9QSFk9eVxuLS1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc9MzcyPUNPTkZJR19CQ01BU1A9bVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzozNzM6Q09ORklHX01BQ0I9bVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0zNzQtQ09ORklHX1RIVU5ERVJfTklDX1BGPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9leWVxNV9kZWZjb25maWc9NTc9Q09ORklHX0lQVkxBTj15XG5hcmNoL21pcHMvY29uZmlncy9leWVxNV9kZWZjb25maWc6NTg6Q09ORklHX01BQ0I9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTVfZGVmY29uZmlnLTU5LUNPTkZJR19NQVJWRUxMX1BIWT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnPTU5PUNPTkZJR19JUFZMQU49eVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnOjYwOkNPTkZJR19NQUNCPXlcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2X2RlZmNvbmZpZy02MS1DT05GSUdfTUFSVkVMTF9QSFk9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2bHBsdXNfZGVmY29uZmlnPTU4PUNPTkZJR19JUFZMQU49eVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZscGx1c19kZWZjb25maWc6NTk6Q09ORklHX01BQ0I9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZscGx1c19kZWZjb25maWctNjAtQ09ORklHX01BUlZFTExfUEhZPXlcbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTEzNz1DT05GSUdfVklSVElPX05FVD15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjEzODpDT05GSUdfTUFDQj15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTEzOS1DT05GSUdfRTEwMDBFPXlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlPTU9bWFjYi15XHQ6PSBtYWNiX21haW4ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZS02LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZTo3OmlmZXEgKCQoQ09ORklHX01BQ0JfVVNFX0hXU1RBTVApLHkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlLTgtbWFjYi15XHQmIzQzOz0gbWFjYl9wdHAub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZT05PWVuZGlmXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlLTEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTUFDQikgJiM0Mzs9IG1hY2Iub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTUFDQl9QQ0kpICYjNDM7PSBtYWNiX3BjaS5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmg9MTMwMT1zdHJ1Y3QgbWFjYiB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgtMTM5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oOjEzOTQ6I2lmZGVmIENPTkZJR19NQUNCX1VTRV9IV1NUQU1QXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC0xMzk1LSNkZWZpbmUgR0VNX1RTRUNfU0laRSAgKEdFTV9UU0hfU0laRSAmIzQzOyBHRU1fVFNMX1NJWkUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmg9MTQ0ND1zdGF0aWMgaW5saW5lIGJvb2wgZ2VtX2hhc19wdHAoc3RydWN0IG1hY2IgKmJwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgtMTQ0NS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaDoxNDQ2Olx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX01BQ0JfVVNFX0hXU1RBTVApIFx1MDAyNlx1MDAyNiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX0dFTV9IQVNfUFRQKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oLTE0NDctfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oPTE0Njg9c3RhdGljIGlubGluZSBib29sIG1hY2JfZG1hX3B0cChzdHJ1Y3QgbWFjYiAqYnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC0xNDY5LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oOjE0NzA6XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfTUFDQl9VU0VfSFdTVEFNUCkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC0xNDcxLVx0ICAgICAgIGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19ETUFfUFRQO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MzY4Nj1zdGF0aWMgaW50IG1hY2Jfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzcyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MzcyOTojaWZkZWYgQ09ORklHX01BQ0JfVVNFX0hXU1RBTVBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzczMC1zdGF0aWMgdW5zaWduZWQgaW50IGdlbV9nZXRfdHN1X3JhdGUoc3RydWN0IG1hY2IgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDU1MD1zdGF0aWMgdm9pZCBtYWNiX2NvbmZpZ3VyZV9jYXBzKHN0cnVjdCBtYWNiICpicCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ1ODItXHRcdFx0ZWxzZSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjQ1ODM6I2lmZGVmIENPTkZJR19NQUNCX1VTRV9IV1NUQU1QXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ1ODQtXHRcdFx0XHRicC1cdTAwM2VjYXBzIHw9IE1BQ0JfQ0FQU19ETUFfUFRQO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTc3MT1zdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4NTYtXHRpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKGJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O2NkbnMsdGltZXItYWRqdXN0XCYjMzQ7KSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTg1NzpcdFx0XHRJU19FTkFCTEVEKENPTkZJR19NQUNCX1VTRV9IV1NUQU1QKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODU4LVx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtUaW1lciBhZGp1c3QgbW9kZSBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTQ5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzoKCioqS2NvbmZpZyBEaXZlIGZvciBNQUNCICZhbXA7IE1BQ0JfUENJKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgTUFDQiBhbmQgTUFDQl9QQ0kgb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGhlcmUuICpXaHkqIGFyZSB0aGVzZSBvcHRpb25zIHJlbGV2YW50IHJpZ2h0IG5vdz8gV2hhdCBhbSBJIHRyeWluZyB0byBhY2hpZXZlPyBBbSBJIGVuYWJsaW5nIGEgc3BlY2lmaWMgZmVhdHVyZSwgZGVidWdnaW5nIHNvbWV0aGluZywgb3Igc2ltcGx5IGV4cGxvcmluZyB0aGUgcG9zc2liaWxpdGllcyBvZiB0aGlzIHBhcnRpY3VsYXIgTUFDIChNZWRpYSBBY2Nlc3MgQ29udHJvbGxlcikgaW1wbGVtZW50YXRpb24/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIHRoaW5ncy4gRmlyc3QsIGhvdyBhcmUgdGhlc2Ugb3B0aW9ucyBkZWZpbmVkPyBBcmUgdGhleSBzdGFuZGFsb25lIHN5bWJvbHMsIG9yIGFyZSB0aGV5IHBhcnQgb2YgYSBsYXJnZXIgY29uZGl0aW9uYWwgc3RydWN0dXJlPyBXaGF0IGRlcGVuZGVuY2llcyBkbyB0aGV5IGhhdmU/IERvIHRoZXkgcmVseSBvbiBvdGhlciBwbGF0Zm9ybSBmZWF0dXJlcyBvciBoYXJkd2FyZSBkZWZpbml0aW9ucz8gVW5kZXJzdGFuZGluZyB0aGUgKmRlcGVuZGVuY2llcyogaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGVpdGhlciBNQUNCIG9yIE1BQ0JfUENJLiBJJiMzOTttIHRoaW5raW5nLCBjb3VsZCB0aGlzIGJlIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb24gaXNzdWUsIG9yIGRvZXMgaXQgcG9pbnQgdG8gYSBkZWVwZXIgcHJvYmxlbSBpbiB0aGUgZHJpdmVyJiMzOTtzIGJ1aWxkIHByb2Nlc3Mgb3IgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24/IFBlcmhhcHMgSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmNvbmZpZyBmaWxlIHRvIHNlZSB0aGUgZGVmYXVsdCB2YWx1ZXMuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbS4gRm9yIGluc3RhbmNlLCBpcyBgTUFDQl9QQ0lgIGFuIGV4dGVuc2lvbiBvZiB0aGUgYmFzaWMgYE1BQ0JgIGNvbmZpZ3VyYXRpb24/IE9yIGFyZSB0aGV5IG11dHVhbGx5IGV4Y2x1c2l2ZSwgcmVwcmVzZW50aW5nIGRpZmZlcmVudCBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyBvciBjb25uZWN0aW9uIG1ldGhvZHMgKGUuZy4sIFBDSSB2cy4gc29tZSBvdGhlciBidXMpPyBJJiMzOTtsbCBiZSB3YXRjaGluZyBmb3IgYW55IGNvbW1lbnRzIGluIHRoZSBLY29uZmlnIHRoYXQgbWlnaHQgcHJvdmlkZSBjbHVlcyBhYm91dCB0aGVpciBpbnRlbmRlZCB1c2UgY2FzZXMgb3IgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtcyB0aGV5JiMzOTtyZSBkZXNpZ25lZCBmb3IuIEFsc28sIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSAqYW55KiBtZW50aW9ucyBvZiB0aGVzZSBvcHRpb25zIGF0IGFsbD8gSSBuZWVkIHRvIGJlIGFzIGNvbXByZWhlbnNpdmUgYXMgcG9zc2libGUuCgpUaGlzIEtjb25maWcgc2NhbiBpcyB0aGUgaW5pdGlhbCBzdGVwIHRvIGJ1aWxkIGFuIGFjY3VyYXRlIHBpY3R1cmUuIEl0JiMzOTtsbCBnaXZlIG1lIGEgZm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggY29kZSBwYXRocyBhcmUgZW5hYmxlZCBmb3IgdGhlIG1hY2IgZHJpdmVyLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvcnJlc3BvbmRpbmcgZHJpdmVyIGNvZGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhlc2UgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIENhZGVuY2UgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE5FVF9WRU5ET1JfQ0FERU5DRVxuICAgNzpcdFx0Ym9vbCBcJiMzNDtDYWRlbmNlIGRldmljZXNcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNXG4gICA5Olx0XHRkZWZhdWx0IHlcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4gIDEyOlx0XG4gIDEzOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAxNjpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsIHRoZVxuICAxNzpcdFx0ICByZW1haW5pbmcgQ2FkZW5jZSBuZXR3b3JrIGNhcmQgcXVlc3Rpb25zLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlXG4gIDE4Olx0XHQgIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE5Olx0XG4gIDIwOlx0aWYgTkVUX1ZFTkRPUl9DQURFTkNFXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIE1BQ0JcbiAgMjM6XHRcdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBIQVNfRE1BIFx1MDAyNlx1MDAyNiBDT01NT05fQ0xLXG4gIDI1Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDI2Olx0XHRzZWxlY3QgUEhZTElOS1xuICAyNzpcdFx0c2VsZWN0IENSQzMyXG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIFRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgaW50ZXJmYWNlIGlzIGZvdW5kIG9uIG1hbnkgQXRtZWwgQVQzMiBhbmRcbiAgMzA6XHRcdCAgQVQ5MSBwYXJ0cy4gIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIENhZGVuY2UgR0VNIChHaWdhYml0XG4gIDMxOlx0XHQgIEV0aGVybmV0IE1BQyBmb3VuZCBpbiBzb21lIEFSTSBTb0MgZGV2aWNlcykuICBTYXkgWSB0byBpbmNsdWRlXG4gIDMyOlx0XHQgIHN1cHBvcnQgZm9yIHRoZSBNQUNCL0dFTSBjaGlwLlxuICAzMzpcdFxuICAzNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDM1Olx0XHQgIHdpbGwgYmUgbWFjYi5cbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxuICAzODpcdFx0Ym9vbCBcJiMzNDtVc2UgSUVFRSAxNTg4IGh3c3RhbXBcJiMzNDtcbiAgMzk6XHRcdGRlcGVuZHMgb24gTUFDQlxuICA0MDpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xuICA0MTpcdFx0ZGVmYXVsdCB5XG4gIDQyOlx0XHRoZWxwXG4gIDQzOlx0XHQgIEVuYWJsZSBJRUVFIDE1ODggUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgKFBUUCkgc3VwcG9ydCBmb3IgTUFDQi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgTUFDQl9QQ0lcbiAgNDY6XHRcdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gTUFDQiBcdTAwMjZcdTAwMjYgUENJXG4gIDQ4Olx0XHRoZWxwXG4gIDQ5Olx0XHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUUVNVS1SZWxhdGVkIE5ldHdvcmtpbmcgTXVzaW5ncyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IENhZGVuY2UgR0VNIGFuZCBpdHMgcHJlc2VuY2UgaW4gUUVNVS4gUmlnaHQsIFFFTVUgKmRvZXMqIGVtdWxhdGUgdGhlIENhZGVuY2UgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyLCB0aGUgYGNhZF9nZW0uY2AgZHJpdmVyLiBJJiMzOTttIHJlY2FsbGluZyBzcGVjaWZpYyBleGFtcGxlcywgbGlrZSB0aG9zZSBYaWxpbnggWnlucSBhbmQgWnlucU1QIGJvYXJkcywgYW5kIGV2ZW4gdGhlIFJJU0MtViBNaWNyb2NoaXAgUG9sYXJGaXJlICh0aGUgaWNpY2xlLWtpdCkg4oCTIHRoZXkgYWxsIGdldCBzaW11bGF0ZWQgdXNpbmcgUUVNVSB3aXRoIHRoYXQgR0VNIGVtdWxhdGlvbi4KCkhtbSwgYnV0IHRoYXQgYnJpbmdzIHVwIGFub3RoZXIgcmVsYXRlZCBxdWVzdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hldGhlciB0aGUgYE1BQ0JfUENJYCBpcyBpbXBsZW1lbnRlZCBhcyBhIFBDSSBkcml2ZXIgb3IgaWYgaXQmIzM5O3MgbW9yZSBwbGF0Zm9ybS1zcGVjaWZpYy4gSSBrbm93IEkgY2FuIGZpbmQgdGhhdCBpbmZvcm1hdGlvbiBpbiBgbWFjYl9wY2kuY2AsIHNvIEkmIzM5O2xsIGdvIGNoZWNrIHRoYXQgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBET0M6IENhZGVuY2UgR0VNIFBDSSB3cmFwcGVyLlxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChDKSAyMDE2IENhZGVuY2UgRGVzaWduIFN5c3RlbXMgLSBodHRwczovL3d3dy5jYWRlbmNlLmNvbVxuICAgNjpcdCAqXG4gICA3Olx0ICogQXV0aG9yczogUmFmYWwgT3ppZWJsbyBcdTAwM2NyYWZhbG9AY2FkZW5jZS5jb21cdTAwM2VcbiAgIDg6XHQgKlx0ICAgIEJhcnRvc3ogRm9sdGEgXHUwMDNjYmZvbHRhQGNhZGVuY2UuY29tXHUwMDNlXG4gICA5Olx0ICovXG4gIDEwOlx0XG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGstcHJvdmlkZXIuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAgMTc6XHQjaW5jbHVkZSBcJiMzNDttYWNiLmhcJiMzNDtcbiAgMTg6XHRcbiAgMTk6XHQjZGVmaW5lIFBDSV9EUklWRVJfTkFNRSBcJiMzNDttYWNiX3BjaVwmIzM0O1xuICAyMDpcdCNkZWZpbmUgUExBVF9EUklWRVJfTkFNRSBcJiMzNDttYWNiXCYjMzQ7XG4gIDIxOlx0XG4gIDIyOlx0I2RlZmluZSBQQ0lfREVWSUNFX0lEX0NETlNfTUFDQiAweGUwMDdcbiAgMjM6XHRcbiAgMjQ6XHQjZGVmaW5lIEdFTV9QQ0xLX1JBVEUgNTAwMDAwMDBcbiAgMjU6XHQjZGVmaW5lIEdFTV9IQ0xLX1JBVEUgNTAwMDAwMDBcbiAgMjY6XHRcbiAgMjc6XHRzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuICAyODpcdHtcbiAgMjk6XHRcdGludCBlcnI7XG4gIDMwOlx0XHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xuICAzMTpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIHBsYXRfaW5mbztcbiAgMzI6XHRcdHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgcGxhdF9kYXRhO1xuICAzMzpcdFx0c3RydWN0IHJlc291cmNlIHJlc1syXTtcbiAgMzQ6XHRcbiAgMzU6XHRcdC8qIGVuYWJsZSBwY2kgZGV2aWNlICovXG4gIDM2Olx0XHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGNpKTtcbiAgMzc6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiAgMzg6XHRcdFx0ZGV2X2VycihcdTAwMjZwY2ktXHUwMDNlZGV2LCBcJiMzNDtFbmFibGluZyBQQ0kgZGV2aWNlIGhhcyBmYWlsZWQ6ICVkXCYjMzQ7LCBlcnIpO1xuICAzOTpcdFx0XHRyZXR1cm4gZXJyO1xuICA0MDpcdFx0fVxuICA0MTpcdFxuICA0MjpcdFx0cGNpX3NldF9tYXN0ZXIocGNpKTtcbiAgNDM6XHRcbiAgNDQ6XHRcdC8qIHNldCB1cCByZXNvdXJjZXMgKi9cbiAgNDU6XHRcdG1lbXNldChyZXMsIDB4MDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogQVJSQVlfU0laRShyZXMpKTtcbiAgNDY6XHRcdHJlc1swXS5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApO1xuICA0NzpcdFx0cmVzWzBdLmVuZCA9IHBjaV9yZXNvdXJjZV9lbmQocGNpLCAwKTtcbiAgNDg6XHRcdHJlc1swXS5uYW1lID0gUENJX0RSSVZFUl9OQU1FO1xuICA0OTpcdFx0cmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07XG4gIDUwOlx0XHRyZXNbMV0uc3RhcnQgPSBwY2lfaXJxX3ZlY3RvcihwY2ksIDApO1xuICA1MTpcdFx0cmVzWzFdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XG4gIDUyOlx0XHRyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTtcbiAgNTM6XHRcbiAgNTQ6XHRcdGRldl9pbmZvKFx1MDAyNnBjaS1cdTAwM2VkZXYsIFwmIzM0O0VNQUMgcGh5c2ljYWwgYmFzZSBhZGRyOiAlcGFcXG5cJiMzNDssXG4gIDU1Olx0XHRcdCBcdTAwMjZyZXNbMF0uc3RhcnQpO1xuICA1NjpcdFxuICA1NzpcdFx0Lyogc2V0IHVwIG1hY2IgcGxhdGZvcm0gZGF0YSAqL1xuICA1ODpcdFx0bWVtc2V0KFx1MDAyNnBsYXRfZGF0YSwgMCwgc2l6ZW9mKHBsYXRfZGF0YSkpO1xuICA1OTpcdFxuICA2MDpcdFx0LyogaW5pdGlhbGl6ZSBjbG9ja3MgKi9cbiAgNjE6XHRcdHBsYXRfZGF0YS5wY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoXHUwMDI2cGNpLVx1MDAzZWRldiwgXCYjMzQ7cGNsa1wmIzM0OywgTlVMTCwgMCxcbiAgNjI6XHRcdFx0XHRcdFx0XHQgR0VNX1BDTEtfUkFURSk7XG4gIDYzOlx0XHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5wY2xrKSkge1xuICA2NDpcdFx0XHRlcnIgPSBQVFJfRVJSKHBsYXRfZGF0YS5wY2xrKTtcbiAgNjU6XHRcdFx0Z290byBlcnJfcGNsa19yZWdpc3RlcjtcbiAgNjY6XHRcdH1cbiAgNjc6XHRcbiAgNjg6XHRcdHBsYXRfZGF0YS5oY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoXHUwMDI2cGNpLVx1MDAzZWRldiwgXCYjMzQ7aGNsa1wmIzM0OywgTlVMTCwgMCxcbiAgNjk6XHRcdFx0XHRcdFx0XHQgR0VNX0hDTEtfUkFURSk7XG4gIDcwOlx0XHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5oY2xrKSkge1xuICA3MTpcdFx0XHRlcnIgPSBQVFJfRVJSKHBsYXRfZGF0YS5oY2xrKTtcbiAgNzI6XHRcdFx0Z290byBlcnJfaGNsa19yZWdpc3RlcjtcbiAgNzM6XHRcdH1cbiAgNzQ6XHRcbiAgNzU6XHRcdC8qIHNldCB1cCBwbGF0Zm9ybSBkZXZpY2UgaW5mbyAqL1xuICA3NjpcdFx0bWVtc2V0KFx1MDAyNnBsYXRfaW5mbywgMCwgc2l6ZW9mKHBsYXRfaW5mbykpO1xuICA3NzpcdFx0cGxhdF9pbmZvLnBhcmVudCA9IFx1MDAyNnBjaS1cdTAwM2VkZXY7XG4gIDc4Olx0XHRwbGF0X2luZm8uZndub2RlID0gcGNpLVx1MDAzZWRldi5md25vZGU7XG4gIDc5Olx0XHRwbGF0X2luZm8ubmFtZSA9IFBMQVRfRFJJVkVSX05BTUU7XG4gIDgwOlx0XHRwbGF0X2luZm8uaWQgPSBwY2ktXHUwMDNlZGV2Zm47XG4gIDgxOlx0XHRwbGF0X2luZm8ucmVzID0gcmVzO1xuICA4MjpcdFx0cGxhdF9pbmZvLm51bV9yZXMgPSBBUlJBWV9TSVpFKHJlcyk7XG4gIDgzOlx0XHRwbGF0X2luZm8uZGF0YSA9IFx1MDAyNnBsYXRfZGF0YTtcbiAgODQ6XHRcdHBsYXRfaW5mby5zaXplX2RhdGEgPSBzaXplb2YocGxhdF9kYXRhKTtcbiAgODU6XHRcdHBsYXRfaW5mby5kbWFfbWFzayA9IHBjaS1cdTAwM2VkbWFfbWFzaztcbiAgODY6XHRcbiAgODc6XHRcdC8qIHJlZ2lzdGVyIHBsYXRmb3JtIGRldmljZSAqL1xuICA4ODpcdFx0cGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKFx1MDAyNnBsYXRfaW5mbyk7XG4gIDg5Olx0XHRpZiAoSVNfRVJSKHBkZXYpKSB7XG4gIDkwOlx0XHRcdGVyciA9IFBUUl9FUlIocGRldik7XG4gIDkxOlx0XHRcdGdvdG8gZXJyX3BsYXRfZGV2X3JlZ2lzdGVyO1xuICA5MjpcdFx0fVxuICA5MzpcdFxuICA5NDpcdFx0cGNpX3NldF9kcnZkYXRhKHBjaSwgcGRldik7XG4gIDk1Olx0XG4gIDk2Olx0XHRyZXR1cm4gMDtcbiAgOTc6XHRcbiAgOTg6XHRlcnJfcGxhdF9kZXZfcmVnaXN0ZXI6XG4gIDk5Olx0XHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5oY2xrKTtcbiAxMDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTU3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgY2hhbmdlcyBiZWluZyBleGFtaW5lZCBpbiBgbWFjYl9tYWluLmNgOgoKKipEaXZpbmcgaW50byB0aGUgTUFDQiBEcml2ZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgbWFjYl9tYWluLmNgIGhlcmUuIExldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyDigJMgd2hhdCYjMzk7cyAqYWN0dWFsbHkqIGRpZmZlcmVudD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29kZSBhZGp1c3RtZW50cy4KCkZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHRob3NlIGtleSBmdW5jdGlvbnM6IGBtYWNiX3BhZF9hbmRfZmNzYCwgYG1hY2Jfc3RhcnRfeG1pdGAsIGBtYWNiX3R4X21hcGAsIGBtYWNiX3R4X2Vycm9yX3Rhc2tgLCBhbmQgYG1hY2JfdHhfY29tcGxldGVgLiBFYWNoIG9mIHRoZXNlIHJlcHJlc2VudHMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSB0cmFuc21pdCBwYXRoLCBmcm9tIHRoZSBpbml0aWFsIGZyYW1lIHByZXBhcmF0aW9uIHRvIHRoZSBmaW5hbCBoYW5kbGluZyBvZiB0aGUgdHJhbnNtaXNzaW9uJiMzOTtzIGNvbXBsZXRpb24gb3IgZmFpbHVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuZGFtZW50YWwgcHJvY2Vzc2VzIGFyZSBiZWluZyBtb2RpZmllZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2hhbmdlcyB0aGF0IG1pZ2h0IGltcHJvdmUgcGVyZm9ybWFuY2UsIGZpeCBidWdzLCBvciBpbnRyb2R1Y2UgbmV3IGZlYXR1cmVzIGluIHRoZSB0cmFuc21pc3Npb24gcHJvY2VzcyBvZiB0aGUgTUFDQiBkcml2ZXIuIEkgd2lsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgYW55IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgYXMgY2hhbmdlcyBpbiBvbmUgbWF5IGltcGFjdCBhbm90aGVyLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCwgb3IgYSBjcml0aWNhbCBpbXByb3ZlbWVudCwgbGllcywgSSBzdXNwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0MTU6XHRcdCAqIFRoaXMgaXMgcmVxdWlyZWQgLSBhdCBsZWFzdCBmb3IgWnlucSwgd2hpY2ggb3RoZXJ3aXNlIGNhbGN1bGF0ZXNcbjI0MTY6XHRcdCAqIHdyb25nIFVEUCBoZWFkZXIgY2hlY2tzdW1zIGZvciBVRFAgcGFja2V0cyB3aXRoIFVEUCBkYXRhIGxlbiBcdTAwM2M9MlxuMjQxNzpcdFx0ICovXG4yNDE4Olx0XHQqKF9fc3VtMTYgKikoc2tiX2NoZWNrc3VtX3N0YXJ0KHNrYikgJiM0Mzsgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0KSA9IDA7XG4yNDE5Olx0XHRyZXR1cm4gMDtcbjI0MjA6XHR9XG4yNDIxOlx0XG4yNDIyOlx0LyogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vLCBvciB0aGUgRkNTIGJ5dGVzIGFwcGVuZGVkICgwIG9yIEVUSF9GQ1NfTEVOKS4gKi9cbjI0MjM6XHRzdGF0aWMgaW50IG1hY2JfcGFkX2FuZF9mY3Moc3RydWN0IHNrX2J1ZmYgKipza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4yNDI0Olx0e1xuMjQyNTpcdFx0Ym9vbCBjbG9uZWQgPSBza2JfY2xvbmVkKCpza2IpIHx8IHNrYl9oZWFkZXJfY2xvbmVkKCpza2IpIHx8XG4yNDI2Olx0XHRcdCAgICAgIHNrYl9pc19ub25saW5lYXIoKnNrYik7XG4yNDI3Olx0XHRpbnQgcGFkbGVuID0gRVRIX1pMRU4gLSAoKnNrYiktXHUwMDNlbGVuO1xuMjQyODpcdFx0aW50IHRhaWxyb29tID0gc2tiX3RhaWxyb29tKCpza2IpO1xuMjQyOTpcdFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XG4yNDMwOlx0XHR1MzIgZmNzO1xuMjQzMTpcdFxuMjQzMjpcdFx0aWYgKCEobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0NTVU0pIHx8XG4yNDMzOlx0XHQgICAgISgoKnNrYiktXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHx8XG4yNDM0Olx0XHQgICAgc2tiX3NoaW5mbygqc2tiKS1cdTAwM2Vnc29fc2l6ZSB8fCBwdHBfb25lX3N0ZXBfc3luYygqc2tiKSlcbjI0MzU6XHRcdFx0cmV0dXJuIDA7XG4yNDM2Olx0XG4yNDM3Olx0XHRpZiAocGFkbGVuIFx1MDAzYz0gMCkge1xuMjQzODpcdFx0XHQvKiBGQ1MgY291bGQgYmUgYXBwZWRlZCB0byB0YWlscm9vbS4gKi9cbjI0Mzk6XHRcdFx0aWYgKHRhaWxyb29tIFx1MDAzZT0gRVRIX0ZDU19MRU4pXG4yNDQwOlx0XHRcdFx0Z290byBhZGRfZmNzO1xuMjQ0MTpcdFx0XHQvKiBObyByb29tIGZvciBGQ1MsIG5lZWQgdG8gcmVhbGxvY2F0ZSBza2IuICovXG4yNDQyOlx0XHRcdGVsc2VcbjI0NDM6XHRcdFx0XHRwYWRsZW4gPSBFVEhfRkNTX0xFTjtcbjI0NDQ6XHRcdH0gZWxzZSB7XG4yNDQ1Olx0XHRcdC8qIEFkZCByb29tIGZvciBGQ1MuICovXG4yNDQ2Olx0XHRcdHBhZGxlbiAmIzQzOz0gRVRIX0ZDU19MRU47XG4yNDQ3Olx0XHR9XG4yNDQ4Olx0XG4yNDQ5Olx0XHRpZiAoY2xvbmVkIHx8IHRhaWxyb29tIFx1MDAzYyBwYWRsZW4pIHtcbjI0NTA6XHRcdFx0bnNrYiA9IHNrYl9jb3B5X2V4cGFuZCgqc2tiLCAwLCBwYWRsZW4sIEdGUF9BVE9NSUMpO1xuMjQ1MTpcdFx0XHRpZiAoIW5za2IpXG4yNDUyOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yNDUzOlx0XG4yNDU0Olx0XHRcdGRldl9jb25zdW1lX3NrYl9hbnkoKnNrYik7XG4yNDU1Olx0XHRcdCpza2IgPSBuc2tiO1xuMjQ1NjpcdFx0fVxuMjQ1NzpcdFxuMjQ1ODpcdFx0aWYgKHBhZGxlbiBcdTAwM2UgRVRIX0ZDU19MRU4pXG4yNDU5Olx0XHRcdHNrYl9wdXRfemVybygqc2tiLCBwYWRsZW4gLSBFVEhfRkNTX0xFTik7XG4yNDYwOlx0XG4yNDYxOlx0YWRkX2ZjczpcbjI0NjI6XHRcdC8qIHNldCBGQ1MgdG8gcGFja2V0ICovXG4yNDYzOlx0XHRmY3MgPSBjcmMzMl9sZSh+MCwgKCpza2IpLVx1MDAzZWRhdGEsICgqc2tiKS1cdTAwM2VsZW4pO1xuMjQ2NDpcdFx0ZmNzID0gfmZjcztcbjI0NjU6XHRcbjI0NjY6XHRcdHNrYl9wdXRfdTgoKnNrYiwgZmNzXHRcdFx1MDAyNiAweGZmKTtcbjI0Njc6XHRcdHNrYl9wdXRfdTgoKnNrYiwgKGZjcyBcdTAwM2VcdTAwM2UgOClcdFx1MDAyNiAweGZmKTtcbjI0Njg6XHRcdHNrYl9wdXRfdTgoKnNrYiwgKGZjcyBcdTAwM2VcdTAwM2UgMTYpXHRcdTAwMjYgMHhmZik7XG4yNDY5Olx0XHRza2JfcHV0X3U4KCpza2IsIChmY3MgXHUwMDNlXHUwMDNlIDI0KVx0XHUwMDI2IDB4ZmYpO1xuMjQ3MDpcdFxuMjQ3MTpcdFx0cmV0dXJuIEVUSF9GQ1NfTEVOO1xuMjQ3MjpcdH1cbjI0NzM6XHRcbjI0NzQ6XHRzdGF0aWMgbmV0ZGV2X3R4X3QgbWFjYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4yNDc1Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuMjQ3NjpcdHtcbjI0Nzc6XHRcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4yNDc4Olx0XHR1bnNpZ25lZCBpbnQgcSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xuMjQ3OTpcdFx0dW5zaWduZWQgaW50IGRlc2NfY250LCBucl9mcmFncywgZnJhZ19zaXplLCBmO1xuMjQ4MDpcdFx0c3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlID0gXHUwMDI2YnAtXHUwMDNlcXVldWVzW3FdO1xuMjQ4MTpcdFx0bmV0ZGV2X3R4X3QgcmV0ID0gTkVUREVWX1RYX09LO1xuMjQ4MjpcdFx0dW5zaWduZWQgaW50IGhkcmxlbjtcbjI0ODM6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4yNDg0Olx0XHRpbnQgZmNzX2xlbjtcbjI0ODU6XHRcdGJvb2wgaXNfbHNvO1xuMjQ4NjpcdFxuMjQ4NzpcdFx0aWYgKG1hY2JfY2xlYXJfY3N1bShza2IpKSB7XG4yNDg4Olx0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4yNDg5Olx0XHRcdHJldHVybiByZXQ7XG4yNDkwOlx0XHR9XG4yNDkxOlx0XG4yNDkyOlx0XHRmY3NfbGVuID0gbWFjYl9wYWRfYW5kX2ZjcyhcdTAwMjZza2IsIG5ldGRldik7XG4yNDkzOlx0XHRpZiAoZmNzX2xlbiBcdTAwM2MgMCkge1xuMjQ5NDpcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY4OAoJCQkJCQkJb3V0cHV0OiA4NAoJCQkJCQkJdGhvdWdodHM6IDIxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIE1BQ0IgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgYG1hY2JfcGFkX2FuZF9mY3NgIGZ1bmN0aW9uIGFuZCByZWxhdGVkIHN0YXRpc3RpY3MgdXBkYXRlcyBpbiB0aGUgQ2FkZW5jZSBNQUNCIEV0aGVybmV0IGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBsb29rcyBsaWtlIGEgc3RhdHMgY2FsY3VsYXRpb24gY2hhbmdlLiBMZXQmIzM5O3MgZGlnIGRlZXBlciB0byBzZWUgaWYgaXQgd2FycmFudHMgZnV6emluZyBhdHRlbnRpb24uCgpGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc3RhdGUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCAqb25seSogY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgY29uc3RhbnQgY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24sIHVucmVhY2hhYmxlIGNvZGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBvciB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBuZWVkaW5nIHNwZWNpYWwgaGFyZHdhcmUuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0lzIGBtYWNiYCByZWFjaGFibGUgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgd2hpY2ggU3l6a2FsbGVyIHVzZXM/JiMzNDsuIEkga25vdyBzeXprYWxsZXIgcnVucyBzdGFuZGFyZCB4ODZfNjQgYW5kIEFSTTY0IFFFTVUgVk1zLiBCdXQgZG9lcyBzdGFuZGFyZCBRRU1VIHg4Nl82NCwgZm9yIGV4YW1wbGUsIGhhdmUgYSBDYWRlbmNlIE1BQ0IgZGV2aWNlIGluaXRpYWxpemVkPyBJdCBzZWVtcyB0aGF0IG9uIHg4Nl82NCBRRU1VLCB0aGUgQ2FkZW5jZSBNQUNCIGlzIGEgcGxhdGZvcm0gb3IgU29DIGRldmljZSAobGlrZSB0aGUgQ2FkZW5jZSBHRU0gb24gWGlsaW54IFp5bnEgb3IgTWljcm9jaGlwIEFUOTEpLiBTbyBkb2VzIFFFTVUgeDg2XzY0IGhhdmUgdGhlIHJlcXVpcmVkIE1BQ0IgZGV2aWNlPyBJIGtub3cgdGhlIHg4NiBRRU1VIGVudmlyb25tZW50cyBJIHdvcmsgd2l0aCB1c3VhbGx5IGhhdmUgZTEwMDAsIHJ0bDgxMzksIG9yIHZpcnRpby1uZXQsIG5vdCB0aGUgQ2FkZW5jZSBNQUNCIFBDSSBkZXZpY2VzLiBXaGF0IGFib3V0IEFSTS9BUk02NCBRRU1VPyBZZXMsIGBxZW11LXN5c3RlbS1hcm0gLU0genlucS1hOWAgZW11bGF0ZXMgQ2FkZW5jZSBHRU0uIEJ1dCBkb2VzIHN5emthbGxlciB0YXJnZXQgdGhhdD8gSXQgbG9va3MgbGlrZSBTeXprYWxsZXIgQVJNNjQgcnVucyBgLU0gdmlydGAsIHdoaWNoIHVzZXMgdmlydGlvLW5ldC4KClNvLCBsZXQmIzM5O3MgbG9vayBhdCB0aGlzIGNyaXRlcmlhLgoKVGhlIGtleSBxdWVzdGlvbiBpczogSXMgYG1hY2JgIGEgZHJpdmVyIGluIGEgdmVuZG9yLXNwZWNpZmljIE5JQyB0aGF0IG5lZWRzIHNwZWNpYWwsIG5vdC1lbXVsYXRlZCBoYXJkd2FyZSwgb3IgaXMgaXQgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVT8gSSBhbHNvIGhhdmUgdG8gYXNzZXNzIHRoZSBmdW5jdGlvbmFsIGltcGFjdCBvZiB0aGlzIGNvZGUgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNoYW5nZXMmIzM5OyBmdW5jdGlvbmFsIGltcGFjdC4gSW4gdGhlIGNvZGUsIHRoZSBjaGFuZ2Ugc3VidHJhY3RzIGB0eF9za2ItJmd0O2Zjc19sZW5gIGZyb20gYG5ldGRldi0mZ3Q7c3RhdHMudHhfYnl0ZXNgLiBUaGlzIGxvb2tzIGxpa2UgYSBzaW1wbGUgYWRqdXN0bWVudCBvZiB0aGUgYHR4X2J5dGVzYCBzdGF0aXN0aWMuIFRoZSBjaGFuZ2UgaXMgc2V0dGluZyBgdHhfc2tiLSZndDtmY3NfbGVuYCB0byBgRVRIX0ZDU19MRU5gICg0KSB3aGVuIGBtYWNiX3BhZF9hbmRfZmNzYCBhcHBlbmRzIHRoZSA0LWJ5dGUgRkNTIHNvIHRoYXQgdGhlIHN0YXRpc3RpYyBleGNsdWRlcyB0aGlzLiBPa2F5LCBpdCYjMzk7cyBqdXN0IGZpeGluZyBhIHN0YXQsIGV4Y2x1ZGluZyB0aGUgc29mdHdhcmUtYWRkZWQgRkNTIGJ5dGVzLgoKU28sIGRvZXMgdGhpcyBwYXRjaCBjaGFuZ2UgYW55IGxvZ2ljLCBkYXRhIHByb2Nlc3NpbmcsIG1lbW9yeSBzYWZldHksIG9yIHBhY2tldCB0cmFuc21pc3Npb24/IE5vLiBUaGUgbG9naWMgc3RheXMgdGhlIHNhbWU6IGBtYWNiX3BhZF9hbmRfZmNzYCBzdGlsbCBwYWRzIGFuZCBhcHBlbmRzIHRoZSBGQ1MuIEl0IHJldHVybnMgYEVUSF9GQ1NfTEVOYCBub3cuIFRoZSBgbWFjYl90eF9tYXBgIHNhdmVzIHRoZSBgdHhfc2tiLSZndDtmY3NfbGVuYC4gVGhpcyBpcyBhICpwdXJlbHkqIGEgc3RhdHMgYWRqdXN0bWVudC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWxsIHRoZSBjaGFuZ2VzOgoxLiAgYG1hY2IuaGA6IEFkZGVkIGB1OCBmY3NfbGVuYCB0byBgc3RydWN0IG1hY2JfdHhfc2tiYC4KMi4gIGBtYWNiX21haW4uY2A6IFVwZGF0ZXM6CiAgICAqICAgU3VidHJhY3RzIGB0eF9za2ItJmd0O2Zjc19sZW5gIGZyb20gYHN0YXRzLnR4X2J5dGVzYCBpbiBgbWFjYl90eF9lcnJvcl90YXNrYCBhbmQgYG1hY2JfdHhfY29tcGxldGVgLgogICAgKiAgIFRha2VzIGB1OCBmY3NfbGVuYCBhcmd1bWVudCBpbiBgbWFjYl90eF9tYXBgIGFuZCBzdG9yZXMgaXQuCiAgICAqICAgUmV0dXJucyBgRVRIX0ZDU19MRU5gIGZyb20gYG1hY2JfcGFkX2FuZF9mY3NgIGluc3RlYWQgb2YgYDBgLgogICAgKiAgIFBhc3NlcyBgZmNzX2xlbmAgZnJvbSBgbWFjYl9wYWRfYW5kX2Zjc2AgaW50byBgbWFjYl90eF9tYXBgLgoKU28sIGl0JiMzOTtzIGEgbWlub3Igc3RhdGlzdGljcyBmaXggaW4gYSBwbGF0Zm9ybS9Tb0MgRXRoZXJuZXQgZHJpdmVyIHdpdGggbm8gZnVuY3Rpb25hbCBvciBzZWN1cml0eSBpbXBhY3QuIEl0JiMzOTtzIG5vdCB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBpbiB0aGUgQ2FkZW5jZSBNQUNCIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgU29DIGhhcmR3YXJlIG9yIGEgbm9uLXN0YW5kYXJkIFFFTVUgbWFjaGluZSwgYnV0IGRvZXMgbm90IGFmZmVjdCBrZXJuZWwgYmVoYXZpb3IuCgpOb3csIGxldCBtZSBjaGVjayB0aGUgZm9ybWFsIHJlcXVpcmVtZW50cy4KCiogICBgV29ydGhGdXp6aW5nYDogZmFsc2UKKiAgIGBGb2N1c1N5bWJvbHNgOiBcWyBdIChlbXB0eSwgYmVjYXVzZSBubyBzcGVjaWZpYyBmdW5jdGlvbnMgbmVlZCBmb2N1cykKKiAgIGBFbmFibGVDb25maWdzYDogXFsgXSAoZW1wdHksIHNpbmNlIG5vIGNvbmZpZ3MgYXJlIHJlcXVpcmVkKQoqICAgYFJlYXNvbmluZ2A6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRqdXN0cyB0aGUgbmV0d29yayBkZXZpY2UgdHhcX2J5dGVzIGNvdW50ZXIgaW4gdGhlIENhZGVuY2UgTUFDQiBFdGhlcm5ldCBkcml2ZXIgdG8gZXhjbHVkZSBzb2Z0d2FyZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyJiMzOTtzIFRYIGJ5dGUgc3RhdGlzdGljcyBjYWxjdWxhdGlvbiB0byBzdWJ0cmFjdCBzb2Z0d2FyZS1hcHBlbmRlZCBGQ1MgYnl0ZXMuIEl0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIG9yIGNvbnRyb2wgZmxvdywgYW5kIHRhcmdldHMgU29DL2VtYmVkZGVkIGhhcmR3YXJlIG5vdCB1dGlsaXplZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgdXBkYXRlcyB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlciYjMzk7cyBUWCBieXRlIHN0YXRpc3RpY3MgY2FsY3VsYXRpb24gdG8gc3VidHJhY3Qgc29mdHdhcmUtYXBwZW5kZWQgRkNTIGJ5dGVzLiBJdCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBvciBjb250cm9sIGZsb3csIGFuZCB0YXJnZXRzIFNvQy9lbWJlZGRlZCBoYXJkd2FyZSBub3QgdXRpbGl6ZWQgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MTI6MzkuMTAyNzg3MjEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NjM4MjQyMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyJ3MgVFggYnl0ZSBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIHRvIHN1YnRyYWN0IHNvZnR3YXJlLWFwcGVuZGVkIEZDUyBieXRlcy4gSXQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIG5ldHdvcmsgcGFja2V0IHByb2Nlc3Npbmcgb3IgY29udHJvbCBmbG93LCBhbmQgdGFyZ2V0cyBTb0MvZW1iZWRkZWQgaGFyZHdhcmUgbm90IHV0aWxpemVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MTI6MzkuMTAyNzkyMjEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTE2MzQ0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYjM2ZDQyMzIwZTk3OGIwNzJkODIxZTdlZjRiYTExMWE5NGM5MzczXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDEzOjEyOjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcXG5pbmRleCAxZTFmNTIyODVhMzlkLi5kNjkzMWM0MWYzOWRhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcXG5AQCAtOTY4LDYgKzk2OCw4IEBAIHN0cnVjdCBtYWNiX2RtYV9kZXNjX3B0cCB7XFxuICAqICAgICAgIG9mIHRoZSBmcmFtZVxcbiAgKiBAbWFwcGluZzogRE1BIGFkZHJlc3Mgb2YgdGhlIHNrYidzIGZyYWdtZW50IGJ1ZmZlclxcbiAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgRE1BIG1hcHBlZCBidWZmZXJcXG4rICogQGZjc19sZW46IEZDUyBieXRlcyBhcHBlbmRlZCBpbiBzb2Z0d2FyZSwgMCBvciBFVEhfRkNTX0xFTiwgb25seVxcbisgKiAgICAgICAgICAgc2V0IGZvciB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIGZyYW1lXFxuICAqIEBtYXBwZWRfYXNfcGFnZTogdHJ1ZSB3aGVuIGJ1ZmZlciB3YXMgbWFwcGVkIHdpdGggc2tiX2ZyYWdfZG1hX21hcCgpLFxcbiAgKiAgICAgICAgICAgICAgICAgIGZhbHNlIHdoZW4gYnVmZmVyIHdhcyBtYXBwZWQgd2l0aCBkbWFfbWFwX3NpbmdsZSgpXFxuICAqL1xcbkBAIC05NzUsNiArOTc3LDcgQEAgc3RydWN0IG1hY2JfdHhfc2tiIHtcXG4gXFx0c3RydWN0IHNrX2J1ZmZcXHRcXHQqc2tiO1xcbiBcXHRkbWFfYWRkcl90XFx0XFx0bWFwcGluZztcXG4gXFx0c2l6ZV90XFx0XFx0XFx0c2l6ZTtcXG4rXFx0dThcXHRcXHRcXHRmY3NfbGVuO1xcbiBcXHRib29sXFx0XFx0XFx0bWFwcGVkX2FzX3BhZ2U7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xcbmluZGV4IDc2ZWU0ZjUwNjAzMzUuLmIxOTM5ZGE0Yzk1YWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG5AQCAtMTMyMiw4ICsxMzIyLDggQEAgc3RhdGljIHZvaWQgbWFjYl90eF9lcnJvcl90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0XFx0XFx0XFx0YnAtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMudHhfcGFja2V0cysrO1xcbiBcXHRcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlc3RhdHMudHhfcGFja2V0cysrO1xcbiBcXHRcXHRcXHRcXHRwYWNrZXRzKys7XFxuLVxcdFxcdFxcdFxcdGJwLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnR4X2J5dGVzICs9IHNrYi1cXHUwMDNlbGVuO1xcbi1cXHRcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVxcdTAwM2VsZW47XFxuK1xcdFxcdFxcdFxcdGJwLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnR4X2J5dGVzICs9IHNrYi1cXHUwMDNlbGVuIC0gdHhfc2tiLVxcdTAwM2VmY3NfbGVuO1xcbitcXHRcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVxcdTAwM2VsZW4gLSB0eF9za2ItXFx1MDAzZWZjc19sZW47XFxuIFxcdFxcdFxcdFxcdGJ5dGVzICs9IHNrYi1cXHUwMDNlbGVuO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH0gZWxzZSB7XFxuQEAgLTE0NTAsOCArMTQ1MCw4IEBAIHN0YXRpYyBpbnQgbWFjYl90eF9jb21wbGV0ZShzdHJ1Y3QgbWFjYl9xdWV1ZSAqcXVldWUsIGludCBidWRnZXQpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWRhdGEpO1xcbiBcXHRcXHRcXHRcXHRicC1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy50eF9wYWNrZXRzKys7XFxuIFxcdFxcdFxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF9wYWNrZXRzKys7XFxuLVxcdFxcdFxcdFxcdGJwLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnR4X2J5dGVzICs9IHNrYi1cXHUwMDNlbGVuO1xcbi1cXHRcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVxcdTAwM2VsZW47XFxuK1xcdFxcdFxcdFxcdGJwLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnR4X2J5dGVzICs9IHNrYi1cXHUwMDNlbGVuIC0gdHhfc2tiLVxcdTAwM2VmY3NfbGVuO1xcbitcXHRcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVxcdTAwM2VsZW4gLSB0eF9za2ItXFx1MDAzZWZjc19sZW47XFxuIFxcdFxcdFxcdFxcdHBhY2tldHMrKztcXG4gXFx0XFx0XFx0XFx0Ynl0ZXMgKz0gc2tiLVxcdTAwM2VsZW47XFxuIFxcdFxcdFxcdH1cXG5AQCAtMjE5OSw3ICsyMTk5LDggQEAgc3RhdGljIHZvaWQgbWFjYl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gc3RhdGljIHVuc2lnbmVkIGludCBtYWNiX3R4X21hcChzdHJ1Y3QgbWFjYiAqYnAsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZSxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGhkcmxlbilcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGhkcmxlbixcXG4rXFx0XFx0XFx0XFx0dTggZmNzX2xlbilcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgZiwgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzO1xcbiBcXHR1bnNpZ25lZCBpbnQgbGVuLCBpLCB0eF9oZWFkID0gcXVldWUtXFx1MDAzZXR4X2hlYWQ7XFxuQEAgLTIyODQsNiArMjI4NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWFjYl90eF9tYXAoc3RydWN0IG1hY2IgKmJwLFxcbiBcXG4gXFx0LyogVGhpcyBpcyB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIGZyYW1lOiBzYXZlIHNvY2tldCBidWZmZXIgKi9cXG4gXFx0dHhfc2tiLVxcdTAwM2Vza2IgPSBza2I7XFxuK1xcdHR4X3NrYi1cXHUwMDNlZmNzX2xlbiA9IGZjc19sZW47XFxuIFxcbiBcXHQvKiBVcGRhdGUgVFggcmluZzogdXBkYXRlIGJ1ZmZlciBkZXNjcmlwdG9ycyBpbiByZXZlcnNlIG9yZGVyXFxuIFxcdCAqIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uXFxuQEAgLTI0MTcsNiArMjQxOSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1hY2JfY2xlYXJfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vLCBvciB0aGUgRkNTIGJ5dGVzIGFwcGVuZGVkICgwIG9yIEVUSF9GQ1NfTEVOKS4gKi9cXG4gc3RhdGljIGludCBtYWNiX3BhZF9hbmRfZmNzKHN0cnVjdCBza19idWZmICoqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdGJvb2wgY2xvbmVkID0gc2tiX2Nsb25lZCgqc2tiKSB8fCBza2JfaGVhZGVyX2Nsb25lZCgqc2tiKSB8fFxcbkBAIC0yNDY1LDcgKzI0NjgsNyBAQCBzdGF0aWMgaW50IG1hY2JfcGFkX2FuZF9mY3Moc3RydWN0IHNrX2J1ZmYgKipza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHNrYl9wdXRfdTgoKnNrYiwgKGZjcyBcXHUwMDNlXFx1MDAzZSAxNilcXHRcXHUwMDI2IDB4ZmYpO1xcbiBcXHRza2JfcHV0X3U4KCpza2IsIChmY3MgXFx1MDAzZVxcdTAwM2UgMjQpXFx0XFx1MDAyNiAweGZmKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gRVRIX0ZDU19MRU47XFxuIH1cXG4gXFxuIHN0YXRpYyBuZXRkZXZfdHhfdCBtYWNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMjQ3OCw2ICsyNDgxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRuZXRkZXZfdHhfdCByZXQgPSBORVRERVZfVFhfT0s7XFxuIFxcdHVuc2lnbmVkIGludCBoZHJsZW47XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGludCBmY3NfbGVuO1xcbiBcXHRib29sIGlzX2xzbztcXG4gXFxuIFxcdGlmIChtYWNiX2NsZWFyX2NzdW0oc2tiKSkge1xcbkBAIC0yNDg1LDcgKzI0ODksOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbWFjYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChtYWNiX3BhZF9hbmRfZmNzKFxcdTAwMjZza2IsIG5ldGRldikpIHtcXG4rXFx0ZmNzX2xlbiA9IG1hY2JfcGFkX2FuZF9mY3MoXFx1MDAyNnNrYiwgbmV0ZGV2KTtcXG4rXFx0aWYgKGZjc19sZW4gXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG5AQCAtMjU0OCw3ICsyNTUzLDcgQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBNYXAgc29ja2V0IGJ1ZmZlciBmb3IgRE1BIHRyYW5zZmVyICovXFxuLVxcdGlmIChtYWNiX3R4X21hcChicCwgcXVldWUsIHNrYiwgaGRybGVuKSkge1xcbitcXHRpZiAobWFjYl90eF9tYXAoYnAsIHF1ZXVlLCBza2IsIGhkcmxlbiwgZmNzX2xlbikpIHtcXG4gXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MTI6MzkuNDU1MjI5NzU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjQyODU3NzU1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlcidzIFRYIGJ5dGUgc3RhdGlzdGljcyBjYWxjdWxhdGlvbiB0byBzdWJ0cmFjdCBzb2Z0d2FyZS1hcHBlbmRlZCBGQ1MgYnl0ZXMuIEl0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIG9yIGNvbnRyb2wgZmxvdywgYW5kIHRhcmdldHMgU29DL2VtYmVkZGVkIGhhcmR3YXJlIG5vdCB1dGlsaXplZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRiMzZkNDIzMjBlOTc4YjA3MmQ4MjFlN2VmNGJhMTExYTk0YzkzNzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMzoxMjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbmluZGV4IDFlMWY1MjI4NWEzOWQuLmQ2OTMxYzQxZjM5ZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbkBAIC05NjgsNiArOTY4LDggQEAgc3RydWN0IG1hY2JfZG1hX2Rlc2NfcHRwIHtcbiAgKiAgICAgICBvZiB0aGUgZnJhbWVcbiAgKiBAbWFwcGluZzogRE1BIGFkZHJlc3Mgb2YgdGhlIHNrYidzIGZyYWdtZW50IGJ1ZmZlclxuICAqIEBzaXplOiBzaXplIG9mIHRoZSBETUEgbWFwcGVkIGJ1ZmZlclxuKyAqIEBmY3NfbGVuOiBGQ1MgYnl0ZXMgYXBwZW5kZWQgaW4gc29mdHdhcmUsIDAgb3IgRVRIX0ZDU19MRU4sIG9ubHlcbisgKiAgICAgICAgICAgc2V0IGZvciB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIGZyYW1lXG4gICogQG1hcHBlZF9hc19wYWdlOiB0cnVlIHdoZW4gYnVmZmVyIHdhcyBtYXBwZWQgd2l0aCBza2JfZnJhZ19kbWFfbWFwKCksXG4gICogICAgICAgICAgICAgICAgICBmYWxzZSB3aGVuIGJ1ZmZlciB3YXMgbWFwcGVkIHdpdGggZG1hX21hcF9zaW5nbGUoKVxuICAqL1xuQEAgLTk3NSw2ICs5NzcsNyBAQCBzdHJ1Y3QgbWFjYl90eF9za2Ige1xuIFx0c3RydWN0IHNrX2J1ZmZcdFx0KnNrYjtcbiBcdGRtYV9hZGRyX3RcdFx0bWFwcGluZztcbiBcdHNpemVfdFx0XHRcdHNpemU7XG4rXHR1OFx0XHRcdGZjc19sZW47XG4gXHRib29sXHRcdFx0bWFwcGVkX2FzX3BhZ2U7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuaW5kZXggNzZlZTRmNTA2MDMzNS4uYjE5MzlkYTRjOTVhZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbkBAIC0xMzIyLDggKzEzMjIsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3R4X2Vycm9yX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRcdFx0YnAtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcbiBcdFx0XHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcbiBcdFx0XHRcdHBhY2tldHMrKztcbi1cdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXHUwMDNlbGVuO1xuLVx0XHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVx1MDAzZWxlbjtcbitcdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXHUwMDNlbGVuIC0gdHhfc2tiLVx1MDAzZWZjc19sZW47XG4rXHRcdFx0XHRxdWV1ZS1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXHUwMDNlbGVuIC0gdHhfc2tiLVx1MDAzZWZjc19sZW47XG4gXHRcdFx0XHRieXRlcyArPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbkBAIC0xNDUwLDggKzE0NTAsOCBAQCBzdGF0aWMgaW50IG1hY2JfdHhfY29tcGxldGUoc3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlLCBpbnQgYnVkZ2V0KVxuIFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWRhdGEpO1xuIFx0XHRcdFx0YnAtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcbiBcdFx0XHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcbi1cdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXHUwMDNlbGVuO1xuLVx0XHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVx1MDAzZWxlbjtcbitcdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXHUwMDNlbGVuIC0gdHhfc2tiLVx1MDAzZWZjc19sZW47XG4rXHRcdFx0XHRxdWV1ZS1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXHUwMDNlbGVuIC0gdHhfc2tiLVx1MDAzZWZjc19sZW47XG4gXHRcdFx0XHRwYWNrZXRzKys7XG4gXHRcdFx0XHRieXRlcyArPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRcdH1cbkBAIC0yMTk5LDcgKzIxOTksOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWFjYl90eF9tYXAoc3RydWN0IG1hY2IgKmJwLFxuIFx0XHRcdFx0c3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlLFxuIFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBoZHJsZW4pXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgaGRybGVuLFxuK1x0XHRcdFx0dTggZmNzX2xlbilcbiB7XG4gXHR1bnNpZ25lZCBpbnQgZiwgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgbGVuLCBpLCB0eF9oZWFkID0gcXVldWUtXHUwMDNldHhfaGVhZDtcbkBAIC0yMjg0LDYgKzIyODUsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG1hY2JfdHhfbWFwKHN0cnVjdCBtYWNiICpicCxcbiBcbiBcdC8qIFRoaXMgaXMgdGhlIGxhc3QgYnVmZmVyIG9mIHRoZSBmcmFtZTogc2F2ZSBzb2NrZXQgYnVmZmVyICovXG4gXHR0eF9za2ItXHUwMDNlc2tiID0gc2tiO1xuK1x0dHhfc2tiLVx1MDAzZWZjc19sZW4gPSBmY3NfbGVuO1xuIFxuIFx0LyogVXBkYXRlIFRYIHJpbmc6IHVwZGF0ZSBidWZmZXIgZGVzY3JpcHRvcnMgaW4gcmV2ZXJzZSBvcmRlclxuIFx0ICogdG8gYXZvaWQgcmFjZSBjb25kaXRpb25cbkBAIC0yNDE3LDYgKzI0MTksNyBAQCBzdGF0aWMgaW5saW5lIGludCBtYWNiX2NsZWFyX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8sIG9yIHRoZSBGQ1MgYnl0ZXMgYXBwZW5kZWQgKDAgb3IgRVRIX0ZDU19MRU4pLiAqL1xuIHN0YXRpYyBpbnQgbWFjYl9wYWRfYW5kX2ZjcyhzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRib29sIGNsb25lZCA9IHNrYl9jbG9uZWQoKnNrYikgfHwgc2tiX2hlYWRlcl9jbG9uZWQoKnNrYikgfHxcbkBAIC0yNDY1LDcgKzI0NjgsNyBAQCBzdGF0aWMgaW50IG1hY2JfcGFkX2FuZF9mY3Moc3RydWN0IHNrX2J1ZmYgKipza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRza2JfcHV0X3U4KCpza2IsIChmY3MgXHUwMDNlXHUwMDNlIDE2KVx0XHUwMDI2IDB4ZmYpO1xuIFx0c2tiX3B1dF91OCgqc2tiLCAoZmNzIFx1MDAzZVx1MDAzZSAyNClcdFx1MDAyNiAweGZmKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIEVUSF9GQ1NfTEVOO1xuIH1cbiBcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgbWFjYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMjQ3OCw2ICsyNDgxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0bmV0ZGV2X3R4X3QgcmV0ID0gTkVUREVWX1RYX09LO1xuIFx0dW5zaWduZWQgaW50IGhkcmxlbjtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgZmNzX2xlbjtcbiBcdGJvb2wgaXNfbHNvO1xuIFxuIFx0aWYgKG1hY2JfY2xlYXJfY3N1bShza2IpKSB7XG5AQCAtMjQ4NSw3ICsyNDg5LDggQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0aWYgKG1hY2JfcGFkX2FuZF9mY3MoXHUwMDI2c2tiLCBuZXRkZXYpKSB7XG4rXHRmY3NfbGVuID0gbWFjYl9wYWRfYW5kX2ZjcyhcdTAwMjZza2IsIG5ldGRldik7XG4rXHRpZiAoZmNzX2xlbiBcdTAwM2MgMCkge1xuIFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuQEAgLTI1NDgsNyArMjU1Myw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBtYWNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH1cbiBcbiBcdC8qIE1hcCBzb2NrZXQgYnVmZmVyIGZvciBETUEgdHJhbnNmZXIgKi9cbi1cdGlmIChtYWNiX3R4X21hcChicCwgcXVldWUsIHNrYiwgaGRybGVuKSkge1xuK1x0aWYgKG1hY2JfdHhfbWFwKGJwLCBxdWV1ZSwgc2tiLCBoZHJsZW4sIGZjc19sZW4pKSB7XG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MTI6MzkuNDU1MjMyMTU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTEwMTY1MDQwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogTUFDQiBEcml2ZXIgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gVGhlIGNoYW5nZXMgdG91Y2ggYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oYCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgbmF0dXJlIG9mIHRoaXMgYG1hY2JgIGRyaXZlciDigJMgd2hhdCB0eXBlIG9mIGRldmljZSBkb2VzIGl0IGNvbnRyb2w/IElzIGl0IGEgc3RhbmRhcmQgRXRoZXJuZXQgaW50ZXJmYWNlLCBzb21lIHNwZWNpYWxpemVkIGltcGxlbWVudGF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyBrZXkuXG5cbk5leHQgc3RlcDogSSBuZWVkIHRvIGRldGVybWluZSB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50LiBJcyBgbWFjYmAgYSBkcml2ZXIgdGhhdCdzIGVtdWxhdGVkIHdpdGhpbiBRRU1VLCBvciBkb2VzIGl0IHByaW1hcmlseSBpbnRlcmFjdCB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlLCBwZXJoYXBzIHRocm91Z2ggYSBwbGF0Zm9ybSBvciBQQ0kgZGV2aWNlPyBUaGlzIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIEknbGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBjb2RlIGJhc2UgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBgbWFjYmAgcmVwcmVzZW50cyBhbmQgd2hlcmUgaXQncyBkZXBsb3llZC4gS25vd2luZyBpdHMgdXNlcyB3aWxsIGluZm9ybSB3aGV0aGVyIGl0J3MgcmVhY2hhYmxlIGFuZCB3aGV0aGVyIGZ1enppbmcgd2lsbCBiZSBlZmZlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoxMzozMC40NzE3MzkzMTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzMDgzODcwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUFDQlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnPTY3PUNPTkZJR19ORVRERVZJQ0VTPXlcXG5hcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnLTY4LSMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldFxcbmFyY2gvYXJtL2NvbmZpZ3MvYXQ5MV9kdF9kZWZjb25maWc6Njk6Q09ORklHX01BQ0I9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvYXQ5MV9kdF9kZWZjb25maWctNzAtQ09ORklHX0RNOTAwMD15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y1X2RlZmNvbmZpZz04OD1DT05GSUdfTkVUX0RTQV9NVjg4RTZYWFg9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnOjg5OkNPTkZJR19NQUNCPXlcXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y1X2RlZmNvbmZpZy05MC1DT05GSUdfRE05MDAwPXlcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnPTI1OT1DT05GSUdfU1lTVEVNUE9SVD1tXFxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6MjYwOkNPTkZJR19NQUNCPXlcXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZy0yNjEtQ09ORklHX05FVF9DQUxYRURBX1hHTUFDPXlcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZz0xNjY9Q09ORklHX0RVTU1ZPW1cXG5hcmNoL2FybS9jb25maWdzL3B4YV9kZWZjb25maWc6MTY3OkNPTkZJR19NQUNCPW1cXG5hcmNoL2FybS9jb25maWdzL3B4YV9kZWZjb25maWctMTY4LUNPTkZJR19ETTkwMDA9bVxcbi0tXFxuYXJjaC9hcm0vY29uZmlncy9zYW1hNV9kZWZjb25maWc9NzM9Q09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWjk0NzdfU1BJPW1cXG5hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZy03NC0jIENPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NIGlzIG5vdCBzZXRcXG5hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZzo3NTpDT05GSUdfTUFDQj15XFxuYXJjaC9hcm0vY29uZmlncy9zYW1hNV9kZWZjb25maWctNzYtIyBDT05GSUdfTkVUX1ZFTkRPUl9DSVJSVVMgaXMgbm90IHNldFxcbi0tXFxuYXJjaC9hcm0vY29uZmlncy9zYW1hN19kZWZjb25maWc9MTAyPUNPTkZJR19ORVRERVZJQ0VTPXlcXG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZzoxMDM6Q09ORklHX01BQ0I9eVxcbmFyY2gvYXJtL2NvbmZpZ3Mvc2FtYTdfZGVmY29uZmlnLTEwNC1DT05GSUdfTUlDUkVMX1BIWT15XFxuLS1cXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTM3Mj1DT05GSUdfQkNNQVNQPW1cXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjM3MzpDT05GSUdfTUFDQj1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0zNzQtQ09ORklHX1RIVU5ERVJfTklDX1BGPW1cXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE1X2RlZmNvbmZpZz01Nz1DT05GSUdfSVBWTEFOPXlcXG5hcmNoL21pcHMvY29uZmlncy9leWVxNV9kZWZjb25maWc6NTg6Q09ORklHX01BQ0I9eVxcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE1X2RlZmNvbmZpZy01OS1DT05GSUdfTUFSVkVMTF9QSFk9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnPTU5PUNPTkZJR19JUFZMQU49eVxcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2X2RlZmNvbmZpZzo2MDpDT05GSUdfTUFDQj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnLTYxLUNPTkZJR19NQVJWRUxMX1BIWT15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9leWVxNmxwbHVzX2RlZmNvbmZpZz01OD1DT05GSUdfSVBWTEFOPXlcXG5hcmNoL21pcHMvY29uZmlncy9leWVxNmxwbHVzX2RlZmNvbmZpZzo1OTpDT05GSUdfTUFDQj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZscGx1c19kZWZjb25maWctNjAtQ09ORklHX01BUlZFTExfUEhZPXlcXG4tLVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWc9MTM3PUNPTkZJR19WSVJUSU9fTkVUPXlcXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjEzODpDT05GSUdfTUFDQj15XFxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZy0xMzktQ09ORklHX0UxMDAwRT15XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlPTU9bWFjYi15XFx0Oj0gbWFjYl9tYWluLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZTo3OmlmZXEgKCQoQ09ORklHX01BQ0JfVVNFX0hXU1RBTVApLHkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZS04LW1hY2IteVxcdCs9IG1hY2JfcHRwLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlPTk9ZW5kaWZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlLTEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX01BQ0IpICs9IG1hY2Iub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX01BQ0JfUENJKSArPSBtYWNiX3BjaS5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaD0xMzAxPXN0cnVjdCBtYWNiIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oLTEzOTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmg6MTM5NDojaWZkZWYgQ09ORklHX01BQ0JfVVNFX0hXU1RBTVBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC0xMzk1LSNkZWZpbmUgR0VNX1RTRUNfU0laRSAgKEdFTV9UU0hfU0laRSArIEdFTV9UU0xfU0laRSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oPTE0NDQ9c3RhdGljIGlubGluZSBib29sIGdlbV9oYXNfcHRwKHN0cnVjdCBtYWNiICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC0xNDQ1LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaDoxNDQ2OlxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19NQUNCX1VTRV9IV1NUQU1QKSBcXHUwMDI2XFx1MDAyNiAoYnAtXFx1MDAzZWNhcHMgXFx1MDAyNiBNQUNCX0NBUFNfR0VNX0hBU19QVFApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oLTE0NDctfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmg9MTQ2OD1zdGF0aWMgaW5saW5lIGJvb2wgbWFjYl9kbWFfcHRwKHN0cnVjdCBtYWNiICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC0xNDY5LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaDoxNDcwOlxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19NQUNCX1VTRV9IV1NUQU1QKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oLTE0NzEtXFx0ICAgICAgIGJwLVxcdTAwM2VjYXBzIFxcdTAwMjYgTUFDQl9DQVBTX0RNQV9QVFA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTM2ODY9c3RhdGljIGludCBtYWNiX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzcyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjM3Mjk6I2lmZGVmIENPTkZJR19NQUNCX1VTRV9IV1NUQU1QXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0zNzMwLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2VtX2dldF90c3VfcmF0ZShzdHJ1Y3QgbWFjYiAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTQ1NTA9c3RhdGljIHZvaWQgbWFjYl9jb25maWd1cmVfY2FwcyhzdHJ1Y3QgbWFjYiAqYnAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ1ODItXFx0XFx0XFx0ZWxzZSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo0NTgzOiNpZmRlZiBDT05GSUdfTUFDQl9VU0VfSFdTVEFNUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDU4NC1cXHRcXHRcXHRcXHRicC1cXHUwMDNlY2FwcyB8PSBNQUNCX0NBUFNfRE1BX1BUUDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTc3MT1zdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTg1Ni1cXHRpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKGJwLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSwgXFxcImNkbnMsdGltZXItYWRqdXN0XFxcIikgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU4NTc6XFx0XFx0XFx0SVNfRU5BQkxFRChDT05GSUdfTUFDQl9VU0VfSFdTVEFNUCkpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4NTgtXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiVGltZXIgYWRqdXN0IG1vZGUgaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjEzOjMyLjgwMjU4MzM5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNDg1MjU2ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipLY29uZmlnIERpdmUgZm9yIE1BQ0IgXHUwMDI2IE1BQ0JfUENJKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBNQUNCIGFuZCBNQUNCX1BDSSBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgaGVyZS4gKldoeSogYXJlIHRoZXNlIG9wdGlvbnMgcmVsZXZhbnQgcmlnaHQgbm93PyBXaGF0IGFtIEkgdHJ5aW5nIHRvIGFjaGlldmU/IEFtIEkgZW5hYmxpbmcgYSBzcGVjaWZpYyBmZWF0dXJlLCBkZWJ1Z2dpbmcgc29tZXRoaW5nLCBvciBzaW1wbHkgZXhwbG9yaW5nIHRoZSBwb3NzaWJpbGl0aWVzIG9mIHRoaXMgcGFydGljdWxhciBNQUMgKE1lZGlhIEFjY2VzcyBDb250cm9sbGVyKSBpbXBsZW1lbnRhdGlvbj9cblxuSSdsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIHRoaW5ncy4gRmlyc3QsIGhvdyBhcmUgdGhlc2Ugb3B0aW9ucyBkZWZpbmVkPyBBcmUgdGhleSBzdGFuZGFsb25lIHN5bWJvbHMsIG9yIGFyZSB0aGV5IHBhcnQgb2YgYSBsYXJnZXIgY29uZGl0aW9uYWwgc3RydWN0dXJlPyBXaGF0IGRlcGVuZGVuY2llcyBkbyB0aGV5IGhhdmU/IERvIHRoZXkgcmVseSBvbiBvdGhlciBwbGF0Zm9ybSBmZWF0dXJlcyBvciBoYXJkd2FyZSBkZWZpbml0aW9ucz8gVW5kZXJzdGFuZGluZyB0aGUgKmRlcGVuZGVuY2llcyogaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGVpdGhlciBNQUNCIG9yIE1BQ0JfUENJLiBJJ20gdGhpbmtpbmcsIGNvdWxkIHRoaXMgYmUgYSBzaW1wbGUgY29uZmlndXJhdGlvbiBpc3N1ZSwgb3IgZG9lcyBpdCBwb2ludCB0byBhIGRlZXBlciBwcm9ibGVtIGluIHRoZSBkcml2ZXIncyBidWlsZCBwcm9jZXNzIG9yIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uPyBQZXJoYXBzIEkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBkZWZjb25maWcgZmlsZSB0byBzZWUgdGhlIGRlZmF1bHQgdmFsdWVzLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVtLiBGb3IgaW5zdGFuY2UsIGlzIGBNQUNCX1BDSWAgYW4gZXh0ZW5zaW9uIG9mIHRoZSBiYXNpYyBgTUFDQmAgY29uZmlndXJhdGlvbj8gT3IgYXJlIHRoZXkgbXV0dWFsbHkgZXhjbHVzaXZlLCByZXByZXNlbnRpbmcgZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIGNvbm5lY3Rpb24gbWV0aG9kcyAoZS5nLiwgUENJIHZzLiBzb21lIG90aGVyIGJ1cyk/IEknbGwgYmUgd2F0Y2hpbmcgZm9yIGFueSBjb21tZW50cyBpbiB0aGUgS2NvbmZpZyB0aGF0IG1pZ2h0IHByb3ZpZGUgY2x1ZXMgYWJvdXQgdGhlaXIgaW50ZW5kZWQgdXNlIGNhc2VzIG9yIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBwbGF0Zm9ybXMgdGhleSdyZSBkZXNpZ25lZCBmb3IuIEFsc28sIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSAqYW55KiBtZW50aW9ucyBvZiB0aGVzZSBvcHRpb25zIGF0IGFsbD8gSSBuZWVkIHRvIGJlIGFzIGNvbXByZWhlbnNpdmUgYXMgcG9zc2libGUuXG5cblRoaXMgS2NvbmZpZyBzY2FuIGlzIHRoZSBpbml0aWFsIHN0ZXAgdG8gYnVpbGQgYW4gYWNjdXJhdGUgcGljdHVyZS4gSXQnbGwgZ2l2ZSBtZSBhIGZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIGNvZGUgcGF0aHMgYXJlIGVuYWJsZWQgZm9yIHRoZSBtYWNiIGRyaXZlci4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvcnJlc3BvbmRpbmcgZHJpdmVyIGNvZGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhlc2UgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjE0OjUzLjI4Nzg0MzI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENhZGVuY2UgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfQ0FERU5DRVxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiQ2FkZW5jZSBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG4gICA5OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxNjpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxNzpcXHRcXHQgIHJlbWFpbmluZyBDYWRlbmNlIG5ldHdvcmsgY2FyZCBxdWVzdGlvbnMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcXG4gIDE4OlxcdFxcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBNQUNCXFxuICAyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfRE1BIFxcdTAwMjZcXHUwMDI2IENPTU1PTl9DTEtcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDI2OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAyNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDI4OlxcdFxcdGhlbHBcXG4gIDI5OlxcdFxcdCAgVGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBpbnRlcmZhY2UgaXMgZm91bmQgb24gbWFueSBBdG1lbCBBVDMyIGFuZFxcbiAgMzA6XFx0XFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcXG4gIDMxOlxcdFxcdCAgRXRoZXJuZXQgTUFDIGZvdW5kIGluIHNvbWUgQVJNIFNvQyBkZXZpY2VzKS4gIFNheSBZIHRvIGluY2x1ZGVcXG4gIDMyOlxcdFxcdCAgc3VwcG9ydCBmb3IgdGhlIE1BQ0IvR0VNIGNoaXAuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzU6XFx0XFx0ICB3aWxsIGJlIG1hY2IuXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuICAzODpcXHRcXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1BQ0JcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBNQUNCX1BDSVxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxcbiAgNTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjE0OjUzLjI4NzkwNjc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA5NTQ1MTYwNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFFFTVUtUmVsYXRlZCBOZXR3b3JraW5nIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgQ2FkZW5jZSBHRU0gYW5kIGl0cyBwcmVzZW5jZSBpbiBRRU1VLiBSaWdodCwgUUVNVSAqZG9lcyogZW11bGF0ZSB0aGUgQ2FkZW5jZSBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIsIHRoZSBgY2FkX2dlbS5jYCBkcml2ZXIuIEknbSByZWNhbGxpbmcgc3BlY2lmaWMgZXhhbXBsZXMsIGxpa2UgdGhvc2UgWGlsaW54IFp5bnEgYW5kIFp5bnFNUCBib2FyZHMsIGFuZCBldmVuIHRoZSBSSVNDLVYgTWljcm9jaGlwIFBvbGFyRmlyZSAodGhlIGljaWNsZS1raXQpIOKAkyB0aGV5IGFsbCBnZXQgc2ltdWxhdGVkIHVzaW5nIFFFTVUgd2l0aCB0aGF0IEdFTSBlbXVsYXRpb24uXG5cbkhtbSwgYnV0IHRoYXQgYnJpbmdzIHVwIGFub3RoZXIgcmVsYXRlZCBxdWVzdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hldGhlciB0aGUgYE1BQ0JfUENJYCBpcyBpbXBsZW1lbnRlZCBhcyBhIFBDSSBkcml2ZXIgb3IgaWYgaXQncyBtb3JlIHBsYXRmb3JtLXNwZWNpZmljLiBJIGtub3cgSSBjYW4gZmluZCB0aGF0IGluZm9ybWF0aW9uIGluIGBtYWNiX3BjaS5jYCwgc28gSSdsbCBnbyBjaGVjayB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoxNjo0Mi44MzMwNzExMTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBET0M6IENhZGVuY2UgR0VNIFBDSSB3cmFwcGVyLlxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoQykgMjAxNiBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zIC0gaHR0cHM6Ly93d3cuY2FkZW5jZS5jb21cXG4gICA2OlxcdCAqXFxuICAgNzpcXHQgKiBBdXRob3JzOiBSYWZhbCBPemllYmxvIFxcdTAwM2NyYWZhbG9AY2FkZW5jZS5jb21cXHUwMDNlXFxuICAgODpcXHQgKlxcdCAgICBCYXJ0b3N6IEZvbHRhIFxcdTAwM2NiZm9sdGFAY2FkZW5jZS5jb21cXHUwMDNlXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay1wcm92aWRlci5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXFwibWFjYi5oXFxcIlxcbiAgMTg6XFx0XFxuICAxOTpcXHQjZGVmaW5lIFBDSV9EUklWRVJfTkFNRSBcXFwibWFjYl9wY2lcXFwiXFxuICAyMDpcXHQjZGVmaW5lIFBMQVRfRFJJVkVSX05BTUUgXFxcIm1hY2JcXFwiXFxuICAyMTpcXHRcXG4gIDIyOlxcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9DRE5TX01BQ0IgMHhlMDA3XFxuICAyMzpcXHRcXG4gIDI0OlxcdCNkZWZpbmUgR0VNX1BDTEtfUkFURSA1MDAwMDAwMFxcbiAgMjU6XFx0I2RlZmluZSBHRU1fSENMS19SQVRFIDUwMDAwMDAwXFxuICAyNjpcXHRcXG4gIDI3OlxcdHN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRpbnQgZXJyO1xcbiAgMzA6XFx0XFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjtcXG4gIDMxOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBwbGF0X2luZm87XFxuICAzMjpcXHRcXHRzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIHBsYXRfZGF0YTtcXG4gIDMzOlxcdFxcdHN0cnVjdCByZXNvdXJjZSByZXNbMl07XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdC8qIGVuYWJsZSBwY2kgZGV2aWNlICovXFxuICAzNjpcXHRcXHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGNpKTtcXG4gIDM3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuICAzODpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgXFxcIkVuYWJsaW5nIFBDSSBkZXZpY2UgaGFzIGZhaWxlZDogJWRcXFwiLCBlcnIpO1xcbiAgMzk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gIDQwOlxcdFxcdH1cXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGNpKTtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0Lyogc2V0IHVwIHJlc291cmNlcyAqL1xcbiAgNDU6XFx0XFx0bWVtc2V0KHJlcywgMHgwMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBBUlJBWV9TSVpFKHJlcykpO1xcbiAgNDY6XFx0XFx0cmVzWzBdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7XFxuICA0NzpcXHRcXHRyZXNbMF0uZW5kID0gcGNpX3Jlc291cmNlX2VuZChwY2ksIDApO1xcbiAgNDg6XFx0XFx0cmVzWzBdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XFxuICA0OTpcXHRcXHRyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTtcXG4gIDUwOlxcdFxcdHJlc1sxXS5zdGFydCA9IHBjaV9pcnFfdmVjdG9yKHBjaSwgMCk7XFxuICA1MTpcXHRcXHRyZXNbMV0ubmFtZSA9IFBDSV9EUklWRVJfTkFNRTtcXG4gIDUyOlxcdFxcdHJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIFxcXCJFTUFDIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXFxcXG5cXFwiLFxcbiAgNTU6XFx0XFx0XFx0IFxcdTAwMjZyZXNbMF0uc3RhcnQpO1xcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHQvKiBzZXQgdXAgbWFjYiBwbGF0Zm9ybSBkYXRhICovXFxuICA1ODpcXHRcXHRtZW1zZXQoXFx1MDAyNnBsYXRfZGF0YSwgMCwgc2l6ZW9mKHBsYXRfZGF0YSkpO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQvKiBpbml0aWFsaXplIGNsb2NrcyAqL1xcbiAgNjE6XFx0XFx0cGxhdF9kYXRhLnBjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIFxcXCJwY2xrXFxcIiwgTlVMTCwgMCxcXG4gIDYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBHRU1fUENMS19SQVRFKTtcXG4gIDYzOlxcdFxcdGlmIChJU19FUlIocGxhdF9kYXRhLnBjbGspKSB7XFxuICA2NDpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHBsYXRfZGF0YS5wY2xrKTtcXG4gIDY1OlxcdFxcdFxcdGdvdG8gZXJyX3BjbGtfcmVnaXN0ZXI7XFxuICA2NjpcXHRcXHR9XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdHBsYXRfZGF0YS5oY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBcXFwiaGNsa1xcXCIsIE5VTEwsIDAsXFxuICA2OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0VNX0hDTEtfUkFURSk7XFxuICA3MDpcXHRcXHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5oY2xrKSkge1xcbiAgNzE6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihwbGF0X2RhdGEuaGNsayk7XFxuICA3MjpcXHRcXHRcXHRnb3RvIGVycl9oY2xrX3JlZ2lzdGVyO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHQvKiBzZXQgdXAgcGxhdGZvcm0gZGV2aWNlIGluZm8gKi9cXG4gIDc2OlxcdFxcdG1lbXNldChcXHUwMDI2cGxhdF9pbmZvLCAwLCBzaXplb2YocGxhdF9pbmZvKSk7XFxuICA3NzpcXHRcXHRwbGF0X2luZm8ucGFyZW50ID0gXFx1MDAyNnBjaS1cXHUwMDNlZGV2O1xcbiAgNzg6XFx0XFx0cGxhdF9pbmZvLmZ3bm9kZSA9IHBjaS1cXHUwMDNlZGV2LmZ3bm9kZTtcXG4gIDc5OlxcdFxcdHBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTtcXG4gIDgwOlxcdFxcdHBsYXRfaW5mby5pZCA9IHBjaS1cXHUwMDNlZGV2Zm47XFxuICA4MTpcXHRcXHRwbGF0X2luZm8ucmVzID0gcmVzO1xcbiAgODI6XFx0XFx0cGxhdF9pbmZvLm51bV9yZXMgPSBBUlJBWV9TSVpFKHJlcyk7XFxuICA4MzpcXHRcXHRwbGF0X2luZm8uZGF0YSA9IFxcdTAwMjZwbGF0X2RhdGE7XFxuICA4NDpcXHRcXHRwbGF0X2luZm8uc2l6ZV9kYXRhID0gc2l6ZW9mKHBsYXRfZGF0YSk7XFxuICA4NTpcXHRcXHRwbGF0X2luZm8uZG1hX21hc2sgPSBwY2ktXFx1MDAzZWRtYV9tYXNrO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHQvKiByZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UgKi9cXG4gIDg4OlxcdFxcdHBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChcXHUwMDI2cGxhdF9pbmZvKTtcXG4gIDg5OlxcdFxcdGlmIChJU19FUlIocGRldikpIHtcXG4gIDkwOlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocGRldik7XFxuICA5MTpcXHRcXHRcXHRnb3RvIGVycl9wbGF0X2Rldl9yZWdpc3RlcjtcXG4gIDkyOlxcdFxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBjaSwgcGRldik7XFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdHJldHVybiAwO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRlcnJfcGxhdF9kZXZfcmVnaXN0ZXI6XFxuICA5OTpcXHRcXHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5oY2xrKTtcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoxNjo0Mi44MzMyMDU3NjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTIwNTI4ODk1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBjaGFuZ2VzIGJlaW5nIGV4YW1pbmVkIGluIGBtYWNiX21haW4uY2A6XG5cbioqRGl2aW5nIGludG8gdGhlIE1BQ0IgRHJpdmVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBtYWNiX21haW4uY2AgaGVyZS4gTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3Mg4oCTIHdoYXQncyAqYWN0dWFsbHkqIGRpZmZlcmVudD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29kZSBhZGp1c3RtZW50cy5cblxuRmlyc3QsIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aG9zZSBrZXkgZnVuY3Rpb25zOiBgbWFjYl9wYWRfYW5kX2Zjc2AsIGBtYWNiX3N0YXJ0X3htaXRgLCBgbWFjYl90eF9tYXBgLCBgbWFjYl90eF9lcnJvcl90YXNrYCwgYW5kIGBtYWNiX3R4X2NvbXBsZXRlYC4gRWFjaCBvZiB0aGVzZSByZXByZXNlbnRzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgdHJhbnNtaXQgcGF0aCwgZnJvbSB0aGUgaW5pdGlhbCBmcmFtZSBwcmVwYXJhdGlvbiB0byB0aGUgZmluYWwgaGFuZGxpbmcgb2YgdGhlIHRyYW5zbWlzc2lvbidzIGNvbXBsZXRpb24gb3IgZmFpbHVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuZGFtZW50YWwgcHJvY2Vzc2VzIGFyZSBiZWluZyBtb2RpZmllZC4gSSdsbCBiZSBsb29raW5nIGZvciBjaGFuZ2VzIHRoYXQgbWlnaHQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgZml4IGJ1Z3MsIG9yIGludHJvZHVjZSBuZXcgZmVhdHVyZXMgaW4gdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzIG9mIHRoZSBNQUNCIGRyaXZlci4gSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBhbnkgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBhcyBjaGFuZ2VzIGluIG9uZSBtYXkgaW1wYWN0IGFub3RoZXIuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsLCBvciBhIGNyaXRpY2FsIGltcHJvdmVtZW50LCBsaWVzLCBJIHN1c3BlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NTcsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjE4OjM0Ljg4NjA5ODY0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjk4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDE1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDE1OlxcdFxcdCAqIFRoaXMgaXMgcmVxdWlyZWQgLSBhdCBsZWFzdCBmb3IgWnlucSwgd2hpY2ggb3RoZXJ3aXNlIGNhbGN1bGF0ZXNcXG4yNDE2OlxcdFxcdCAqIHdyb25nIFVEUCBoZWFkZXIgY2hlY2tzdW1zIGZvciBVRFAgcGFja2V0cyB3aXRoIFVEUCBkYXRhIGxlbiBcXHUwMDNjPTJcXG4yNDE3OlxcdFxcdCAqL1xcbjI0MTg6XFx0XFx0KihfX3N1bTE2ICopKHNrYl9jaGVja3N1bV9zdGFydChza2IpICsgc2tiLVxcdTAwM2Vjc3VtX29mZnNldCkgPSAwO1xcbjI0MTk6XFx0XFx0cmV0dXJuIDA7XFxuMjQyMDpcXHR9XFxuMjQyMTpcXHRcXG4yNDIyOlxcdC8qIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJubywgb3IgdGhlIEZDUyBieXRlcyBhcHBlbmRlZCAoMCBvciBFVEhfRkNTX0xFTikuICovXFxuMjQyMzpcXHRzdGF0aWMgaW50IG1hY2JfcGFkX2FuZF9mY3Moc3RydWN0IHNrX2J1ZmYgKipza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuMjQyNDpcXHR7XFxuMjQyNTpcXHRcXHRib29sIGNsb25lZCA9IHNrYl9jbG9uZWQoKnNrYikgfHwgc2tiX2hlYWRlcl9jbG9uZWQoKnNrYikgfHxcXG4yNDI2OlxcdFxcdFxcdCAgICAgIHNrYl9pc19ub25saW5lYXIoKnNrYik7XFxuMjQyNzpcXHRcXHRpbnQgcGFkbGVuID0gRVRIX1pMRU4gLSAoKnNrYiktXFx1MDAzZWxlbjtcXG4yNDI4OlxcdFxcdGludCB0YWlscm9vbSA9IHNrYl90YWlscm9vbSgqc2tiKTtcXG4yNDI5OlxcdFxcdHN0cnVjdCBza19idWZmICpuc2tiO1xcbjI0MzA6XFx0XFx0dTMyIGZjcztcXG4yNDMxOlxcdFxcbjI0MzI6XFx0XFx0aWYgKCEobmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSkgfHxcXG4yNDMzOlxcdFxcdCAgICAhKCgqc2tiKS1cXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHx8XFxuMjQzNDpcXHRcXHQgICAgc2tiX3NoaW5mbygqc2tiKS1cXHUwMDNlZ3NvX3NpemUgfHwgcHRwX29uZV9zdGVwX3N5bmMoKnNrYikpXFxuMjQzNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNDM2OlxcdFxcbjI0Mzc6XFx0XFx0aWYgKHBhZGxlbiBcXHUwMDNjPSAwKSB7XFxuMjQzODpcXHRcXHRcXHQvKiBGQ1MgY291bGQgYmUgYXBwZWRlZCB0byB0YWlscm9vbS4gKi9cXG4yNDM5OlxcdFxcdFxcdGlmICh0YWlscm9vbSBcXHUwMDNlPSBFVEhfRkNTX0xFTilcXG4yNDQwOlxcdFxcdFxcdFxcdGdvdG8gYWRkX2ZjcztcXG4yNDQxOlxcdFxcdFxcdC8qIE5vIHJvb20gZm9yIEZDUywgbmVlZCB0byByZWFsbG9jYXRlIHNrYi4gKi9cXG4yNDQyOlxcdFxcdFxcdGVsc2VcXG4yNDQzOlxcdFxcdFxcdFxcdHBhZGxlbiA9IEVUSF9GQ1NfTEVOO1xcbjI0NDQ6XFx0XFx0fSBlbHNlIHtcXG4yNDQ1OlxcdFxcdFxcdC8qIEFkZCByb29tIGZvciBGQ1MuICovXFxuMjQ0NjpcXHRcXHRcXHRwYWRsZW4gKz0gRVRIX0ZDU19MRU47XFxuMjQ0NzpcXHRcXHR9XFxuMjQ0ODpcXHRcXG4yNDQ5OlxcdFxcdGlmIChjbG9uZWQgfHwgdGFpbHJvb20gXFx1MDAzYyBwYWRsZW4pIHtcXG4yNDUwOlxcdFxcdFxcdG5za2IgPSBza2JfY29weV9leHBhbmQoKnNrYiwgMCwgcGFkbGVuLCBHRlBfQVRPTUlDKTtcXG4yNDUxOlxcdFxcdFxcdGlmICghbnNrYilcXG4yNDUyOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjI0NTM6XFx0XFxuMjQ1NDpcXHRcXHRcXHRkZXZfY29uc3VtZV9za2JfYW55KCpza2IpO1xcbjI0NTU6XFx0XFx0XFx0KnNrYiA9IG5za2I7XFxuMjQ1NjpcXHRcXHR9XFxuMjQ1NzpcXHRcXG4yNDU4OlxcdFxcdGlmIChwYWRsZW4gXFx1MDAzZSBFVEhfRkNTX0xFTilcXG4yNDU5OlxcdFxcdFxcdHNrYl9wdXRfemVybygqc2tiLCBwYWRsZW4gLSBFVEhfRkNTX0xFTik7XFxuMjQ2MDpcXHRcXG4yNDYxOlxcdGFkZF9mY3M6XFxuMjQ2MjpcXHRcXHQvKiBzZXQgRkNTIHRvIHBhY2tldCAqL1xcbjI0NjM6XFx0XFx0ZmNzID0gY3JjMzJfbGUofjAsICgqc2tiKS1cXHUwMDNlZGF0YSwgKCpza2IpLVxcdTAwM2VsZW4pO1xcbjI0NjQ6XFx0XFx0ZmNzID0gfmZjcztcXG4yNDY1OlxcdFxcbjI0NjY6XFx0XFx0c2tiX3B1dF91OCgqc2tiLCBmY3NcXHRcXHRcXHUwMDI2IDB4ZmYpO1xcbjI0Njc6XFx0XFx0c2tiX3B1dF91OCgqc2tiLCAoZmNzIFxcdTAwM2VcXHUwMDNlIDgpXFx0XFx1MDAyNiAweGZmKTtcXG4yNDY4OlxcdFxcdHNrYl9wdXRfdTgoKnNrYiwgKGZjcyBcXHUwMDNlXFx1MDAzZSAxNilcXHRcXHUwMDI2IDB4ZmYpO1xcbjI0Njk6XFx0XFx0c2tiX3B1dF91OCgqc2tiLCAoZmNzIFxcdTAwM2VcXHUwMDNlIDI0KVxcdFxcdTAwMjYgMHhmZik7XFxuMjQ3MDpcXHRcXG4yNDcxOlxcdFxcdHJldHVybiBFVEhfRkNTX0xFTjtcXG4yNDcyOlxcdH1cXG4yNDczOlxcdFxcbjI0NzQ6XFx0c3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjI0NzU6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4yNDc2OlxcdHtcXG4yNDc3OlxcdFxcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuMjQ3ODpcXHRcXHR1bnNpZ25lZCBpbnQgcSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbjI0Nzk6XFx0XFx0dW5zaWduZWQgaW50IGRlc2NfY250LCBucl9mcmFncywgZnJhZ19zaXplLCBmO1xcbjI0ODA6XFx0XFx0c3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlID0gXFx1MDAyNmJwLVxcdTAwM2VxdWV1ZXNbcV07XFxuMjQ4MTpcXHRcXHRuZXRkZXZfdHhfdCByZXQgPSBORVRERVZfVFhfT0s7XFxuMjQ4MjpcXHRcXHR1bnNpZ25lZCBpbnQgaGRybGVuO1xcbjI0ODM6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4yNDg0OlxcdFxcdGludCBmY3NfbGVuO1xcbjI0ODU6XFx0XFx0Ym9vbCBpc19sc287XFxuMjQ4NjpcXHRcXG4yNDg3OlxcdFxcdGlmIChtYWNiX2NsZWFyX2NzdW0oc2tiKSkge1xcbjI0ODg6XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4yNDg5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjQ5MDpcXHRcXHR9XFxuMjQ5MTpcXHRcXG4yNDkyOlxcdFxcdGZjc19sZW4gPSBtYWNiX3BhZF9hbmRfZmNzKFxcdTAwMjZza2IsIG5ldGRldik7XFxuMjQ5MzpcXHRcXHRpZiAoZmNzX2xlbiBcXHUwMDNjIDApIHtcXG4yNDk0OlxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjE4OjM0Ljg4NjQzMTk5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjg4NTQ1MjQwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIE1BQ0IgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBgbWFjYl9wYWRfYW5kX2Zjc2AgZnVuY3Rpb24gYW5kIHJlbGF0ZWQgc3RhdGlzdGljcyB1cGRhdGVzIGluIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBzdGF0cyBjYWxjdWxhdGlvbiBjaGFuZ2UuIExldCdzIGRpZyBkZWVwZXIgdG8gc2VlIGlmIGl0IHdhcnJhbnRzIGZ1enppbmcgYXR0ZW50aW9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc3RhdGUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCAqb25seSogY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgY29uc3RhbnQgY2hhbmdlcyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiwgdW5yZWFjaGFibGUgY29kZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIG5lZWRpbmcgc3BlY2lhbCBoYXJkd2FyZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJJcyBgbWFjYmAgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHdoaWNoIFN5emthbGxlciB1c2VzP1wiLiBJIGtub3cgc3l6a2FsbGVyIHJ1bnMgc3RhbmRhcmQgeDg2XzY0IGFuZCBBUk02NCBRRU1VIFZNcy4gQnV0IGRvZXMgc3RhbmRhcmQgUUVNVSB4ODZfNjQsIGZvciBleGFtcGxlLCBoYXZlIGEgQ2FkZW5jZSBNQUNCIGRldmljZSBpbml0aWFsaXplZD8gSXQgc2VlbXMgdGhhdCBvbiB4ODZfNjQgUUVNVSwgdGhlIENhZGVuY2UgTUFDQiBpcyBhIHBsYXRmb3JtIG9yIFNvQyBkZXZpY2UgKGxpa2UgdGhlIENhZGVuY2UgR0VNIG9uIFhpbGlueCBaeW5xIG9yIE1pY3JvY2hpcCBBVDkxKS4gU28gZG9lcyBRRU1VIHg4Nl82NCBoYXZlIHRoZSByZXF1aXJlZCBNQUNCIGRldmljZT8gSSBrbm93IHRoZSB4ODYgUUVNVSBlbnZpcm9ubWVudHMgSSB3b3JrIHdpdGggdXN1YWxseSBoYXZlIGUxMDAwLCBydGw4MTM5LCBvciB2aXJ0aW8tbmV0LCBub3QgdGhlIENhZGVuY2UgTUFDQiBQQ0kgZGV2aWNlcy4gV2hhdCBhYm91dCBBUk0vQVJNNjQgUUVNVT8gWWVzLCBgcWVtdS1zeXN0ZW0tYXJtIC1NIHp5bnEtYTlgIGVtdWxhdGVzIENhZGVuY2UgR0VNLiBCdXQgZG9lcyBzeXprYWxsZXIgdGFyZ2V0IHRoYXQ/IEl0IGxvb2tzIGxpa2UgU3l6a2FsbGVyIEFSTTY0IHJ1bnMgYC1NIHZpcnRgLCB3aGljaCB1c2VzIHZpcnRpby1uZXQuXG5cblNvLCBsZXQncyBsb29rIGF0IHRoaXMgY3JpdGVyaWEuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXM6IElzIGBtYWNiYCBhIGRyaXZlciBpbiBhIHZlbmRvci1zcGVjaWZpYyBOSUMgdGhhdCBuZWVkcyBzcGVjaWFsLCBub3QtZW11bGF0ZWQgaGFyZHdhcmUsIG9yIGlzIGl0IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVU/IEkgYWxzbyBoYXZlIHRvIGFzc2VzcyB0aGUgZnVuY3Rpb25hbCBpbXBhY3Qgb2YgdGhpcyBjb2RlIGNoYW5nZS4gTGV0J3Mgc2VlLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgY2hhbmdlcycgZnVuY3Rpb25hbCBpbXBhY3QuIEluIHRoZSBjb2RlLCB0aGUgY2hhbmdlIHN1YnRyYWN0cyBgdHhfc2tiLVx1MDAzZWZjc19sZW5gIGZyb20gYG5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlc2AuIFRoaXMgbG9va3MgbGlrZSBhIHNpbXBsZSBhZGp1c3RtZW50IG9mIHRoZSBgdHhfYnl0ZXNgIHN0YXRpc3RpYy4gVGhlIGNoYW5nZSBpcyBzZXR0aW5nIGB0eF9za2ItXHUwMDNlZmNzX2xlbmAgdG8gYEVUSF9GQ1NfTEVOYCAoNCkgd2hlbiBgbWFjYl9wYWRfYW5kX2Zjc2AgYXBwZW5kcyB0aGUgNC1ieXRlIEZDUyBzbyB0aGF0IHRoZSBzdGF0aXN0aWMgZXhjbHVkZXMgdGhpcy4gT2theSwgaXQncyBqdXN0IGZpeGluZyBhIHN0YXQsIGV4Y2x1ZGluZyB0aGUgc29mdHdhcmUtYWRkZWQgRkNTIGJ5dGVzLlxuXG5TbywgZG9lcyB0aGlzIHBhdGNoIGNoYW5nZSBhbnkgbG9naWMsIGRhdGEgcHJvY2Vzc2luZywgbWVtb3J5IHNhZmV0eSwgb3IgcGFja2V0IHRyYW5zbWlzc2lvbj8gTm8uIFRoZSBsb2dpYyBzdGF5cyB0aGUgc2FtZTogYG1hY2JfcGFkX2FuZF9mY3NgIHN0aWxsIHBhZHMgYW5kIGFwcGVuZHMgdGhlIEZDUy4gSXQgcmV0dXJucyBgRVRIX0ZDU19MRU5gIG5vdy4gVGhlIGBtYWNiX3R4X21hcGAgc2F2ZXMgdGhlIGB0eF9za2ItXHUwMDNlZmNzX2xlbmAuIFRoaXMgaXMgYSAqcHVyZWx5KiBhIHN0YXRzIGFkanVzdG1lbnQuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBhbGwgdGhlIGNoYW5nZXM6XG4xLiAgYG1hY2IuaGA6IEFkZGVkIGB1OCBmY3NfbGVuYCB0byBgc3RydWN0IG1hY2JfdHhfc2tiYC5cbjIuICBgbWFjYl9tYWluLmNgOiBVcGRhdGVzOlxuICAgICogICBTdWJ0cmFjdHMgYHR4X3NrYi1cdTAwM2VmY3NfbGVuYCBmcm9tIGBzdGF0cy50eF9ieXRlc2AgaW4gYG1hY2JfdHhfZXJyb3JfdGFza2AgYW5kIGBtYWNiX3R4X2NvbXBsZXRlYC5cbiAgICAqICAgVGFrZXMgYHU4IGZjc19sZW5gIGFyZ3VtZW50IGluIGBtYWNiX3R4X21hcGAgYW5kIHN0b3JlcyBpdC5cbiAgICAqICAgUmV0dXJucyBgRVRIX0ZDU19MRU5gIGZyb20gYG1hY2JfcGFkX2FuZF9mY3NgIGluc3RlYWQgb2YgYDBgLlxuICAgICogICBQYXNzZXMgYGZjc19sZW5gIGZyb20gYG1hY2JfcGFkX2FuZF9mY3NgIGludG8gYG1hY2JfdHhfbWFwYC5cblxuU28sIGl0J3MgYSBtaW5vciBzdGF0aXN0aWNzIGZpeCBpbiBhIHBsYXRmb3JtL1NvQyBFdGhlcm5ldCBkcml2ZXIgd2l0aCBubyBmdW5jdGlvbmFsIG9yIHNlY3VyaXR5IGltcGFjdC4gSXQncyBub3Qgd29ydGggZnV6emluZy4gSXQncyBpbiB0aGUgQ2FkZW5jZSBNQUNCIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgU29DIGhhcmR3YXJlIG9yIGEgbm9uLXN0YW5kYXJkIFFFTVUgbWFjaGluZSwgYnV0IGRvZXMgbm90IGFmZmVjdCBrZXJuZWwgYmVoYXZpb3IuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSBmb3JtYWwgcmVxdWlyZW1lbnRzLlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlXG4qICAgYEZvY3VzU3ltYm9sc2A6IFxcWyBdIChlbXB0eSwgYmVjYXVzZSBubyBzcGVjaWZpYyBmdW5jdGlvbnMgbmVlZCBmb2N1cylcbiogICBgRW5hYmxlQ29uZmlnc2A6IFxcWyBdIChlbXB0eSwgc2luY2Ugbm8gY29uZmlncyBhcmUgcmVxdWlyZWQpXG4qICAgYFJlYXNvbmluZ2A6IFwiVGhlIHBhdGNoIG9ubHkgYWRqdXN0cyB0aGUgbmV0d29yayBkZXZpY2UgdHhcXF9ieXRlcyBjb3VudGVyIGluIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyIHRvIGV4Y2x1ZGUgc29mdHdhcmVcblxuIiwiSW5wdXRUb2tlbnMiOjEwNjg4LCJPdXRwdXRUb2tlbnMiOjg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjIxOjIzLjc0MDk2MDQ0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlcidzIFRYIGJ5dGUgc3RhdGlzdGljcyBjYWxjdWxhdGlvbiB0byBzdWJ0cmFjdCBzb2Z0d2FyZS1hcHBlbmRlZCBGQ1MgYnl0ZXMuIEl0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIG9yIGNvbnRyb2wgZmxvdywgYW5kIHRhcmdldHMgU29DL2VtYmVkZGVkIGhhcmR3YXJlIG5vdCB1dGlsaXplZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlcidzIFRYIGJ5dGUgc3RhdGlzdGljcyBjYWxjdWxhdGlvbiB0byBzdWJ0cmFjdCBzb2Z0d2FyZS1hcHBlbmRlZCBGQ1MgYnl0ZXMuIEl0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIG9yIGNvbnRyb2wgZmxvdywgYW5kIHRhcmdldHMgU29DL2VtYmVkZGVkIGhhcmR3YXJlIG5vdCB1dGlsaXplZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjIxOjIzLjc0MTAwODUxMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4m76[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 12:57:00 +0000 UTC FinishedAt: 2026-08-31 13:21:25 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyJiMzOTtzIFRYIGJ5dGUgc3RhdGlzdGljcyBjYWxjdWxhdGlvbiB0byBzdWJ0cmFjdCBzb2Z0d2FyZS1hcHBlbmRlZCBGQ1MgYnl0ZXMuIEl0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIG9yIGNvbnRyb2wgZmxvdywgYW5kIHRhcmdldHMgU29DL2VtYmVkZGVkIGhhcmR3YXJlIG5vdCB1dGlsaXplZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYjM2ZDQyMzIwZTk3OGIwNzJkODIxZTdlZjRiYTExMWE5NGM5MzczXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTM6MTI6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaFxuaW5kZXggMWUxZjUyMjg1YTM5ZC4uZDY5MzFjNDFmMzlkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaFxuQEAgLTk2OCw2ICYjNDM7OTY4LDggQEAgc3RydWN0IG1hY2JfZG1hX2Rlc2NfcHRwIHtcbiAgKiAgICAgICBvZiB0aGUgZnJhbWVcbiAgKiBAbWFwcGluZzogRE1BIGFkZHJlc3Mgb2YgdGhlIHNrYiYjMzk7cyBmcmFnbWVudCBidWZmZXJcbiAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgRE1BIG1hcHBlZCBidWZmZXJcbiYjNDM7ICogQGZjc19sZW46IEZDUyBieXRlcyBhcHBlbmRlZCBpbiBzb2Z0d2FyZSwgMCBvciBFVEhfRkNTX0xFTiwgb25seVxuJiM0MzsgKiAgICAgICAgICAgc2V0IGZvciB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIGZyYW1lXG4gICogQG1hcHBlZF9hc19wYWdlOiB0cnVlIHdoZW4gYnVmZmVyIHdhcyBtYXBwZWQgd2l0aCBza2JfZnJhZ19kbWFfbWFwKCksXG4gICogICAgICAgICAgICAgICAgICBmYWxzZSB3aGVuIGJ1ZmZlciB3YXMgbWFwcGVkIHdpdGggZG1hX21hcF9zaW5nbGUoKVxuICAqL1xuQEAgLTk3NSw2ICYjNDM7OTc3LDcgQEAgc3RydWN0IG1hY2JfdHhfc2tiIHtcbiBcdHN0cnVjdCBza19idWZmXHRcdCpza2I7XG4gXHRkbWFfYWRkcl90XHRcdG1hcHBpbmc7XG4gXHRzaXplX3RcdFx0XHRzaXplO1xuJiM0MztcdHU4XHRcdFx0ZmNzX2xlbjtcbiBcdGJvb2xcdFx0XHRtYXBwZWRfYXNfcGFnZTtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5pbmRleCA3NmVlNGY1MDYwMzM1Li5iMTkzOWRhNGM5NWFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTEzMjIsOCAmIzQzOzEzMjIsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3R4X2Vycm9yX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRcdFx0YnAtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X3BhY2tldHMmIzQzOyYjNDM7O1xuIFx0XHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfcGFja2V0cyYjNDM7JiM0Mzs7XG4gXHRcdFx0XHRwYWNrZXRzJiM0MzsmIzQzOztcbi1cdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbi1cdFx0XHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuJiM0MztcdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbiAtIHR4X3NrYi1cdTAwM2VmY3NfbGVuO1xuJiM0MztcdFx0XHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItXHUwMDNlbGVuIC0gdHhfc2tiLVx1MDAzZWZjc19sZW47XG4gXHRcdFx0XHRieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG5AQCAtMTQ1MCw4ICYjNDM7MTQ1MCw4IEBAIHN0YXRpYyBpbnQgbWFjYl90eF9jb21wbGV0ZShzdHJ1Y3QgbWFjYl9xdWV1ZSAqcXVldWUsIGludCBidWRnZXQpXG4gXHRcdFx0XHRcdCAgICBza2ItXHUwMDNlZGF0YSk7XG4gXHRcdFx0XHRicC1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMudHhfcGFja2V0cyYjNDM7JiM0Mzs7XG4gXHRcdFx0XHRxdWV1ZS1cdTAwM2VzdGF0cy50eF9wYWNrZXRzJiM0MzsmIzQzOztcbi1cdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbi1cdFx0XHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuJiM0MztcdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbiAtIHR4X3NrYi1cdTAwM2VmY3NfbGVuO1xuJiM0MztcdFx0XHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItXHUwMDNlbGVuIC0gdHhfc2tiLVx1MDAzZWZjc19sZW47XG4gXHRcdFx0XHRwYWNrZXRzJiM0MzsmIzQzOztcbiBcdFx0XHRcdGJ5dGVzICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuIFx0XHRcdH1cbkBAIC0yMTk5LDcgJiM0MzsyMTk5LDggQEAgc3RhdGljIHZvaWQgbWFjYl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBzdGF0aWMgdW5zaWduZWQgaW50IG1hY2JfdHhfbWFwKHN0cnVjdCBtYWNiICpicCxcbiBcdFx0XHRcdHN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZSxcbiBcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHR1bnNpZ25lZCBpbnQgaGRybGVuKVxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCBoZHJsZW4sXG4mIzQzO1x0XHRcdFx0dTggZmNzX2xlbilcbiB7XG4gXHR1bnNpZ25lZCBpbnQgZiwgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgbGVuLCBpLCB0eF9oZWFkID0gcXVldWUtXHUwMDNldHhfaGVhZDtcbkBAIC0yMjg0LDYgJiM0MzsyMjg1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBtYWNiX3R4X21hcChzdHJ1Y3QgbWFjYiAqYnAsXG4gXG4gXHQvKiBUaGlzIGlzIHRoZSBsYXN0IGJ1ZmZlciBvZiB0aGUgZnJhbWU6IHNhdmUgc29ja2V0IGJ1ZmZlciAqL1xuIFx0dHhfc2tiLVx1MDAzZXNrYiA9IHNrYjtcbiYjNDM7XHR0eF9za2ItXHUwMDNlZmNzX2xlbiA9IGZjc19sZW47XG4gXG4gXHQvKiBVcGRhdGUgVFggcmluZzogdXBkYXRlIGJ1ZmZlciBkZXNjcmlwdG9ycyBpbiByZXZlcnNlIG9yZGVyXG4gXHQgKiB0byBhdm9pZCByYWNlIGNvbmRpdGlvblxuQEAgLTI0MTcsNiAmIzQzOzI0MTksNyBAQCBzdGF0aWMgaW5saW5lIGludCBtYWNiX2NsZWFyX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LyogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vLCBvciB0aGUgRkNTIGJ5dGVzIGFwcGVuZGVkICgwIG9yIEVUSF9GQ1NfTEVOKS4gKi9cbiBzdGF0aWMgaW50IG1hY2JfcGFkX2FuZF9mY3Moc3RydWN0IHNrX2J1ZmYgKipza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0Ym9vbCBjbG9uZWQgPSBza2JfY2xvbmVkKCpza2IpIHx8IHNrYl9oZWFkZXJfY2xvbmVkKCpza2IpIHx8XG5AQCAtMjQ2NSw3ICYjNDM7MjQ2OCw3IEBAIHN0YXRpYyBpbnQgbWFjYl9wYWRfYW5kX2ZjcyhzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHNrYl9wdXRfdTgoKnNrYiwgKGZjcyBcdTAwM2VcdTAwM2UgMTYpXHRcdTAwMjYgMHhmZik7XG4gXHRza2JfcHV0X3U4KCpza2IsIChmY3MgXHUwMDNlXHUwMDNlIDI0KVx0XHUwMDI2IDB4ZmYpO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIEVUSF9GQ1NfTEVOO1xuIH1cbiBcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgbWFjYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMjQ3OCw2ICYjNDM7MjQ4MSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBtYWNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdG5ldGRldl90eF90IHJldCA9IE5FVERFVl9UWF9PSztcbiBcdHVuc2lnbmVkIGludCBoZHJsZW47XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGludCBmY3NfbGVuO1xuIFx0Ym9vbCBpc19sc287XG4gXG4gXHRpZiAobWFjYl9jbGVhcl9jc3VtKHNrYikpIHtcbkBAIC0yNDg1LDcgJiM0MzsyNDg5LDggQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0aWYgKG1hY2JfcGFkX2FuZF9mY3MoXHUwMDI2c2tiLCBuZXRkZXYpKSB7XG4mIzQzO1x0ZmNzX2xlbiA9IG1hY2JfcGFkX2FuZF9mY3MoXHUwMDI2c2tiLCBuZXRkZXYpO1xuJiM0MztcdGlmIChmY3NfbGVuIFx1MDAzYyAwKSB7XG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG5AQCAtMjU0OCw3ICYjNDM7MjU1Myw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBtYWNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH1cbiBcbiBcdC8qIE1hcCBzb2NrZXQgYnVmZmVyIGZvciBETUEgdHJhbnNmZXIgKi9cbi1cdGlmIChtYWNiX3R4X21hcChicCwgcXVldWUsIHNrYiwgaGRybGVuKSkge1xuJiM0MztcdGlmIChtYWNiX3R4X21hcChicCwgcXVldWUsIHNrYiwgaGRybGVuLCBmY3NfbGVuKSkge1xuIFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IHVwZGF0ZXMgdGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBkcml2ZXImIzM5O3MgVFggYnl0ZSBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIHRvIHN1YnRyYWN0IHNvZnR3YXJlLWFwcGVuZGVkIEZDUyBieXRlcy4gSXQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIG5ldHdvcmsgcGFja2V0IHByb2Nlc3Npbmcgb3IgY29udHJvbCBmbG93LCBhbmQgdGFyZ2V0cyBTb0MvZW1iZWRkZWQgaGFyZHdhcmUgbm90IHV0aWxpemVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRiMzZkNDIzMjBlOTc4YjA3MmQ4MjFlN2VmNGJhMTExYTk0YzkzNzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMzoxMjozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgKaW5kZXggMWUxZjUyMjg1YTM5ZC4uZDY5MzFjNDFmMzlkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgKQEAgLTk2OCw2ICYjNDM7OTY4LDggQEAgc3RydWN0IG1hY2JfZG1hX2Rlc2NfcHRwIHsKICAqICAgICAgIG9mIHRoZSBmcmFtZQogICogQG1hcHBpbmc6IERNQSBhZGRyZXNzIG9mIHRoZSBza2ImIzM5O3MgZnJhZ21lbnQgYnVmZmVyCiAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgRE1BIG1hcHBlZCBidWZmZXIKJiM0MzsgKiBAZmNzX2xlbjogRkNTIGJ5dGVzIGFwcGVuZGVkIGluIHNvZnR3YXJlLCAwIG9yIEVUSF9GQ1NfTEVOLCBvbmx5CiYjNDM7ICogICAgICAgICAgIHNldCBmb3IgdGhlIGxhc3QgYnVmZmVyIG9mIHRoZSBmcmFtZQogICogQG1hcHBlZF9hc19wYWdlOiB0cnVlIHdoZW4gYnVmZmVyIHdhcyBtYXBwZWQgd2l0aCBza2JfZnJhZ19kbWFfbWFwKCksCiAgKiAgICAgICAgICAgICAgICAgIGZhbHNlIHdoZW4gYnVmZmVyIHdhcyBtYXBwZWQgd2l0aCBkbWFfbWFwX3NpbmdsZSgpCiAgKi8KQEAgLTk3NSw2ICYjNDM7OTc3LDcgQEAgc3RydWN0IG1hY2JfdHhfc2tiIHsKIAlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKIAlkbWFfYWRkcl90CQltYXBwaW5nOwogCXNpemVfdAkJCXNpemU7CiYjNDM7CXU4CQkJZmNzX2xlbjsKIAlib29sCQkJbWFwcGVkX2FzX3BhZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwppbmRleCA3NmVlNGY1MDYwMzM1Li5iMTkzOWRhNGM5NWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKQEAgLTEzMjIsOCAmIzQzOzEzMjIsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3R4X2Vycm9yX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQkJCWJwLSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X3BhY2tldHMmIzQzOyYjNDM7OwogCQkJCXF1ZXVlLSZndDtzdGF0cy50eF9wYWNrZXRzJiM0MzsmIzQzOzsKIAkJCQlwYWNrZXRzJiM0MzsmIzQzOzsKLQkJCQlicC0mZ3Q7bmV0ZGV2LSZndDtzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLSZndDtsZW47Ci0JCQkJcXVldWUtJmd0O3N0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItJmd0O2xlbjsKJiM0MzsJCQkJYnAtJmd0O25ldGRldi0mZ3Q7c3RhdHMudHhfYnl0ZXMgJiM0Mzs9IHNrYi0mZ3Q7bGVuIC0gdHhfc2tiLSZndDtmY3NfbGVuOwomIzQzOwkJCQlxdWV1ZS0mZ3Q7c3RhdHMudHhfYnl0ZXMgJiM0Mzs9IHNrYi0mZ3Q7bGVuIC0gdHhfc2tiLSZndDtmY3NfbGVuOwogCQkJCWJ5dGVzICYjNDM7PSBza2ItJmd0O2xlbjsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTE0NTAsOCAmIzQzOzE0NTAsOCBAQCBzdGF0aWMgaW50IG1hY2JfdHhfY29tcGxldGUoc3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlLCBpbnQgYnVkZ2V0KQogCQkJCQkgICAgc2tiLSZndDtkYXRhKTsKIAkJCQlicC0mZ3Q7bmV0ZGV2LSZndDtzdGF0cy50eF9wYWNrZXRzJiM0MzsmIzQzOzsKIAkJCQlxdWV1ZS0mZ3Q7c3RhdHMudHhfcGFja2V0cyYjNDM7JiM0Mzs7Ci0JCQkJYnAtJmd0O25ldGRldi0mZ3Q7c3RhdHMudHhfYnl0ZXMgJiM0Mzs9IHNrYi0mZ3Q7bGVuOwotCQkJCXF1ZXVlLSZndDtzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLSZndDtsZW47CiYjNDM7CQkJCWJwLSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItJmd0O2xlbiAtIHR4X3NrYi0mZ3Q7ZmNzX2xlbjsKJiM0MzsJCQkJcXVldWUtJmd0O3N0YXRzLnR4X2J5dGVzICYjNDM7PSBza2ItJmd0O2xlbiAtIHR4X3NrYi0mZ3Q7ZmNzX2xlbjsKIAkJCQlwYWNrZXRzJiM0MzsmIzQzOzsKIAkJCQlieXRlcyAmIzQzOz0gc2tiLSZndDtsZW47CiAJCQl9CkBAIC0yMTk5LDcgJiM0MzsyMTk5LDggQEAgc3RhdGljIHZvaWQgbWFjYl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWFjYl90eF9tYXAoc3RydWN0IG1hY2IgKmJwLAogCQkJCXN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZSwKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXVuc2lnbmVkIGludCBoZHJsZW4pCiYjNDM7CQkJCXVuc2lnbmVkIGludCBoZHJsZW4sCiYjNDM7CQkJCXU4IGZjc19sZW4pCiB7CiAJdW5zaWduZWQgaW50IGYsIG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFnczsKIAl1bnNpZ25lZCBpbnQgbGVuLCBpLCB0eF9oZWFkID0gcXVldWUtJmd0O3R4X2hlYWQ7CkBAIC0yMjg0LDYgJiM0MzsyMjg1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBtYWNiX3R4X21hcChzdHJ1Y3QgbWFjYiAqYnAsCiAKIAkvKiBUaGlzIGlzIHRoZSBsYXN0IGJ1ZmZlciBvZiB0aGUgZnJhbWU6IHNhdmUgc29ja2V0IGJ1ZmZlciAqLwogCXR4X3NrYi0mZ3Q7c2tiID0gc2tiOwomIzQzOwl0eF9za2ItJmd0O2Zjc19sZW4gPSBmY3NfbGVuOwogCiAJLyogVXBkYXRlIFRYIHJpbmc6IHVwZGF0ZSBidWZmZXIgZGVzY3JpcHRvcnMgaW4gcmV2ZXJzZSBvcmRlcgogCSAqIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uCkBAIC0yNDE3LDYgJiM0MzsyNDE5LDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWFjYl9jbGVhcl9jc3VtKHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8sIG9yIHRoZSBGQ1MgYnl0ZXMgYXBwZW5kZWQgKDAgb3IgRVRIX0ZDU19MRU4pLiAqLwogc3RhdGljIGludCBtYWNiX3BhZF9hbmRfZmNzKHN0cnVjdCBza19idWZmICoqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCWJvb2wgY2xvbmVkID0gc2tiX2Nsb25lZCgqc2tiKSB8fCBza2JfaGVhZGVyX2Nsb25lZCgqc2tiKSB8fApAQCAtMjQ2NSw3ICYjNDM7MjQ2OCw3IEBAIHN0YXRpYyBpbnQgbWFjYl9wYWRfYW5kX2ZjcyhzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlza2JfcHV0X3U4KCpza2IsIChmY3MgJmd0OyZndDsgMTYpCSZhbXA7IDB4ZmYpOwogCXNrYl9wdXRfdTgoKnNrYiwgKGZjcyAmZ3Q7Jmd0OyAyNCkJJmFtcDsgMHhmZik7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIEVUSF9GQ1NfTEVOOwogfQogCiBzdGF0aWMgbmV0ZGV2X3R4X3QgbWFjYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCkBAIC0yNDc4LDYgJiM0MzsyNDgxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCW5ldGRldl90eF90IHJldCA9IE5FVERFVl9UWF9PSzsKIAl1bnNpZ25lZCBpbnQgaGRybGVuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCBmY3NfbGVuOwogCWJvb2wgaXNfbHNvOwogCiAJaWYgKG1hY2JfY2xlYXJfY3N1bShza2IpKSB7CkBAIC0yNDg1LDcgJiM0MzsyNDg5LDggQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChtYWNiX3BhZF9hbmRfZmNzKCZhbXA7c2tiLCBuZXRkZXYpKSB7CiYjNDM7CWZjc19sZW4gPSBtYWNiX3BhZF9hbmRfZmNzKCZhbXA7c2tiLCBuZXRkZXYpOwomIzQzOwlpZiAoZmNzX2xlbiAmbHQ7IDApIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0yNTQ4LDcgJiM0MzsyNTUzLDcgQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCX0KIAogCS8qIE1hcCBzb2NrZXQgYnVmZmVyIGZvciBETUEgdHJhbnNmZXIgKi8KLQlpZiAobWFjYl90eF9tYXAoYnAsIHF1ZXVlLCBza2IsIGhkcmxlbikpIHsKJiM0MzsJaWYgKG1hY2JfdHhfbWFwKGJwLCBxdWV1ZSwgc2tiLCBoZHJsZW4sIGZjc19sZW4pKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWdvdG8gdW5sb2NrOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBNQUNCIERyaXZlciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwuIFRoZSBjaGFuZ2VzIHRvdWNoIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaGAgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIG5hdHVyZSBvZiB0aGlzIGBtYWNiYCBkcml2ZXIg4oCTIHdoYXQgdHlwZSBvZiBkZXZpY2UgZG9lcyBpdCBjb250cm9sPyBJcyBpdCBhIHN0YW5kYXJkIEV0aGVybmV0IGludGVyZmFjZSwgc29tZSBzcGVjaWFsaXplZCBpbXBsZW1lbnRhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaXMga2V5LgoKTmV4dCBzdGVwOiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQuIElzIGBtYWNiYCBhIGRyaXZlciB0aGF0JiMzOTtzIGVtdWxhdGVkIHdpdGhpbiBRRU1VLCBvciBkb2VzIGl0IHByaW1hcmlseSBpbnRlcmFjdCB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlLCBwZXJoYXBzIHRocm91Z2ggYSBwbGF0Zm9ybSBvciBQQ0kgZGV2aWNlPyBUaGlzIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIEkmIzM5O2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBrZXJuZWwgY29kZSBiYXNlIGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgYG1hY2JgIHJlcHJlc2VudHMgYW5kIHdoZXJlIGl0JiMzOTtzIGRlcGxveWVkLiBLbm93aW5nIGl0cyB1c2VzIHdpbGwgaW5mb3JtIHdoZXRoZXIgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCB3aGV0aGVyIGZ1enppbmcgd2lsbCBiZSBlZmZlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01BQ0ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vY29uZmlncy9hdDkxX2R0X2RlZmNvbmZpZz02Nz1DT05GSUdfTkVUREVWSUNFUz15XG5hcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnLTY4LSMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldFxuYXJjaC9hcm0vY29uZmlncy9hdDkxX2R0X2RlZmNvbmZpZzo2OTpDT05GSUdfTUFDQj15XG5hcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnLTcwLUNPTkZJR19ETTkwMDA9eVxuLS1cbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnPTg4PUNPTkZJR19ORVRfRFNBX01WODhFNlhYWD15XG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y1X2RlZmNvbmZpZzo4OTpDT05GSUdfTUFDQj15XG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y1X2RlZmNvbmZpZy05MC1DT05GSUdfRE05MDAwPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0yNTk9Q09ORklHX1NZU1RFTVBPUlQ9bVxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6MjYwOkNPTkZJR19NQUNCPXlcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnLTI2MS1DT05GSUdfTkVUX0NBTFhFREFfWEdNQUM9eVxuLS1cbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZz0xNjY9Q09ORklHX0RVTU1ZPW1cbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZzoxNjc6Q09ORklHX01BQ0I9bVxuYXJjaC9hcm0vY29uZmlncy9weGFfZGVmY29uZmlnLTE2OC1DT05GSUdfRE05MDAwPW1cbi0tXG5hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZz03Mz1DT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaOTQ3N19TUEk9bVxuYXJjaC9hcm0vY29uZmlncy9zYW1hNV9kZWZjb25maWctNzQtIyBDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTSBpcyBub3Qgc2V0XG5hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZzo3NTpDT05GSUdfTUFDQj15XG5hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZy03Ni0jIENPTkZJR19ORVRfVkVORE9SX0NJUlJVUyBpcyBub3Qgc2V0XG4tLVxuYXJjaC9hcm0vY29uZmlncy9zYW1hN19kZWZjb25maWc9MTAyPUNPTkZJR19ORVRERVZJQ0VTPXlcbmFyY2gvYXJtL2NvbmZpZ3Mvc2FtYTdfZGVmY29uZmlnOjEwMzpDT05GSUdfTUFDQj15XG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZy0xMDQtQ09ORklHX01JQ1JFTF9QSFk9eVxuLS1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc9MzcyPUNPTkZJR19CQ01BU1A9bVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzozNzM6Q09ORklHX01BQ0I9bVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0zNzQtQ09ORklHX1RIVU5ERVJfTklDX1BGPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9leWVxNV9kZWZjb25maWc9NTc9Q09ORklHX0lQVkxBTj15XG5hcmNoL21pcHMvY29uZmlncy9leWVxNV9kZWZjb25maWc6NTg6Q09ORklHX01BQ0I9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTVfZGVmY29uZmlnLTU5LUNPTkZJR19NQVJWRUxMX1BIWT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnPTU5PUNPTkZJR19JUFZMQU49eVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnOjYwOkNPTkZJR19NQUNCPXlcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2X2RlZmNvbmZpZy02MS1DT05GSUdfTUFSVkVMTF9QSFk9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2bHBsdXNfZGVmY29uZmlnPTU4PUNPTkZJR19JUFZMQU49eVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZscGx1c19kZWZjb25maWc6NTk6Q09ORklHX01BQ0I9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZscGx1c19kZWZjb25maWctNjAtQ09ORklHX01BUlZFTExfUEhZPXlcbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTEzNz1DT05GSUdfVklSVElPX05FVD15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjEzODpDT05GSUdfTUFDQj15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTEzOS1DT05GSUdfRTEwMDBFPXlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlPTU9bWFjYi15XHQ6PSBtYWNiX21haW4ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZS02LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZTo3OmlmZXEgKCQoQ09ORklHX01BQ0JfVVNFX0hXU1RBTVApLHkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlLTgtbWFjYi15XHQmIzQzOz0gbWFjYl9wdHAub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZT05PWVuZGlmXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlLTEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTUFDQikgJiM0Mzs9IG1hY2Iub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTUFDQl9QQ0kpICYjNDM7PSBtYWNiX3BjaS5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmg9MTMwMT1zdHJ1Y3QgbWFjYiB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgtMTM5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oOjEzOTQ6I2lmZGVmIENPTkZJR19NQUNCX1VTRV9IV1NUQU1QXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC0xMzk1LSNkZWZpbmUgR0VNX1RTRUNfU0laRSAgKEdFTV9UU0hfU0laRSAmIzQzOyBHRU1fVFNMX1NJWkUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmg9MTQ0ND1zdGF0aWMgaW5saW5lIGJvb2wgZ2VtX2hhc19wdHAoc3RydWN0IG1hY2IgKmJwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmgtMTQ0NS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaDoxNDQ2Olx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX01BQ0JfVVNFX0hXU1RBTVApIFx1MDAyNlx1MDAyNiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX0dFTV9IQVNfUFRQKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oLTE0NDctfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oPTE0Njg9c3RhdGljIGlubGluZSBib29sIG1hY2JfZG1hX3B0cChzdHJ1Y3QgbWFjYiAqYnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC0xNDY5LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oOjE0NzA6XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfTUFDQl9VU0VfSFdTVEFNUCkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC0xNDcxLVx0ICAgICAgIGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19ETUFfUFRQO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MzY4Nj1zdGF0aWMgaW50IG1hY2Jfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzcyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MzcyOTojaWZkZWYgQ09ORklHX01BQ0JfVVNFX0hXU1RBTVBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzczMC1zdGF0aWMgdW5zaWduZWQgaW50IGdlbV9nZXRfdHN1X3JhdGUoc3RydWN0IG1hY2IgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDU1MD1zdGF0aWMgdm9pZCBtYWNiX2NvbmZpZ3VyZV9jYXBzKHN0cnVjdCBtYWNiICpicCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ1ODItXHRcdFx0ZWxzZSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjQ1ODM6I2lmZGVmIENPTkZJR19NQUNCX1VTRV9IV1NUQU1QXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ1ODQtXHRcdFx0XHRicC1cdTAwM2VjYXBzIHw9IE1BQ0JfQ0FQU19ETUFfUFRQO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTc3MT1zdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4NTYtXHRpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKGJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O2NkbnMsdGltZXItYWRqdXN0XCYjMzQ7KSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTg1NzpcdFx0XHRJU19FTkFCTEVEKENPTkZJR19NQUNCX1VTRV9IV1NUQU1QKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODU4LVx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtUaW1lciBhZGp1c3QgbW9kZSBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTQ5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzoKCioqS2NvbmZpZyBEaXZlIGZvciBNQUNCICZhbXA7IE1BQ0JfUENJKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgTUFDQiBhbmQgTUFDQl9QQ0kgb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGhlcmUuICpXaHkqIGFyZSB0aGVzZSBvcHRpb25zIHJlbGV2YW50IHJpZ2h0IG5vdz8gV2hhdCBhbSBJIHRyeWluZyB0byBhY2hpZXZlPyBBbSBJIGVuYWJsaW5nIGEgc3BlY2lmaWMgZmVhdHVyZSwgZGVidWdnaW5nIHNvbWV0aGluZywgb3Igc2ltcGx5IGV4cGxvcmluZyB0aGUgcG9zc2liaWxpdGllcyBvZiB0aGlzIHBhcnRpY3VsYXIgTUFDIChNZWRpYSBBY2Nlc3MgQ29udHJvbGxlcikgaW1wbGVtZW50YXRpb24/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIHRoaW5ncy4gRmlyc3QsIGhvdyBhcmUgdGhlc2Ugb3B0aW9ucyBkZWZpbmVkPyBBcmUgdGhleSBzdGFuZGFsb25lIHN5bWJvbHMsIG9yIGFyZSB0aGV5IHBhcnQgb2YgYSBsYXJnZXIgY29uZGl0aW9uYWwgc3RydWN0dXJlPyBXaGF0IGRlcGVuZGVuY2llcyBkbyB0aGV5IGhhdmU/IERvIHRoZXkgcmVseSBvbiBvdGhlciBwbGF0Zm9ybSBmZWF0dXJlcyBvciBoYXJkd2FyZSBkZWZpbml0aW9ucz8gVW5kZXJzdGFuZGluZyB0aGUgKmRlcGVuZGVuY2llcyogaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGVpdGhlciBNQUNCIG9yIE1BQ0JfUENJLiBJJiMzOTttIHRoaW5raW5nLCBjb3VsZCB0aGlzIGJlIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb24gaXNzdWUsIG9yIGRvZXMgaXQgcG9pbnQgdG8gYSBkZWVwZXIgcHJvYmxlbSBpbiB0aGUgZHJpdmVyJiMzOTtzIGJ1aWxkIHByb2Nlc3Mgb3IgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24/IFBlcmhhcHMgSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmNvbmZpZyBmaWxlIHRvIHNlZSB0aGUgZGVmYXVsdCB2YWx1ZXMuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbS4gRm9yIGluc3RhbmNlLCBpcyBgTUFDQl9QQ0lgIGFuIGV4dGVuc2lvbiBvZiB0aGUgYmFzaWMgYE1BQ0JgIGNvbmZpZ3VyYXRpb24/IE9yIGFyZSB0aGV5IG11dHVhbGx5IGV4Y2x1c2l2ZSwgcmVwcmVzZW50aW5nIGRpZmZlcmVudCBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyBvciBjb25uZWN0aW9uIG1ldGhvZHMgKGUuZy4sIFBDSSB2cy4gc29tZSBvdGhlciBidXMpPyBJJiMzOTtsbCBiZSB3YXRjaGluZyBmb3IgYW55IGNvbW1lbnRzIGluIHRoZSBLY29uZmlnIHRoYXQgbWlnaHQgcHJvdmlkZSBjbHVlcyBhYm91dCB0aGVpciBpbnRlbmRlZCB1c2UgY2FzZXMgb3IgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtcyB0aGV5JiMzOTtyZSBkZXNpZ25lZCBmb3IuIEFsc28sIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSAqYW55KiBtZW50aW9ucyBvZiB0aGVzZSBvcHRpb25zIGF0IGFsbD8gSSBuZWVkIHRvIGJlIGFzIGNvbXByZWhlbnNpdmUgYXMgcG9zc2libGUuCgpUaGlzIEtjb25maWcgc2NhbiBpcyB0aGUgaW5pdGlhbCBzdGVwIHRvIGJ1aWxkIGFuIGFjY3VyYXRlIHBpY3R1cmUuIEl0JiMzOTtsbCBnaXZlIG1lIGEgZm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggY29kZSBwYXRocyBhcmUgZW5hYmxlZCBmb3IgdGhlIG1hY2IgZHJpdmVyLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvcnJlc3BvbmRpbmcgZHJpdmVyIGNvZGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhlc2UgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIENhZGVuY2UgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE5FVF9WRU5ET1JfQ0FERU5DRVxuICAgNzpcdFx0Ym9vbCBcJiMzNDtDYWRlbmNlIGRldmljZXNcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNXG4gICA5Olx0XHRkZWZhdWx0IHlcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4gIDEyOlx0XG4gIDEzOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAxNjpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsIHRoZVxuICAxNzpcdFx0ICByZW1haW5pbmcgQ2FkZW5jZSBuZXR3b3JrIGNhcmQgcXVlc3Rpb25zLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlXG4gIDE4Olx0XHQgIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE5Olx0XG4gIDIwOlx0aWYgTkVUX1ZFTkRPUl9DQURFTkNFXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIE1BQ0JcbiAgMjM6XHRcdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBIQVNfRE1BIFx1MDAyNlx1MDAyNiBDT01NT05fQ0xLXG4gIDI1Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDI2Olx0XHRzZWxlY3QgUEhZTElOS1xuICAyNzpcdFx0c2VsZWN0IENSQzMyXG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIFRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgaW50ZXJmYWNlIGlzIGZvdW5kIG9uIG1hbnkgQXRtZWwgQVQzMiBhbmRcbiAgMzA6XHRcdCAgQVQ5MSBwYXJ0cy4gIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIENhZGVuY2UgR0VNIChHaWdhYml0XG4gIDMxOlx0XHQgIEV0aGVybmV0IE1BQyBmb3VuZCBpbiBzb21lIEFSTSBTb0MgZGV2aWNlcykuICBTYXkgWSB0byBpbmNsdWRlXG4gIDMyOlx0XHQgIHN1cHBvcnQgZm9yIHRoZSBNQUNCL0dFTSBjaGlwLlxuICAzMzpcdFxuICAzNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDM1Olx0XHQgIHdpbGwgYmUgbWFjYi5cbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxuICAzODpcdFx0Ym9vbCBcJiMzNDtVc2UgSUVFRSAxNTg4IGh3c3RhbXBcJiMzNDtcbiAgMzk6XHRcdGRlcGVuZHMgb24gTUFDQlxuICA0MDpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xuICA0MTpcdFx0ZGVmYXVsdCB5XG4gIDQyOlx0XHRoZWxwXG4gIDQzOlx0XHQgIEVuYWJsZSBJRUVFIDE1ODggUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgKFBUUCkgc3VwcG9ydCBmb3IgTUFDQi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgTUFDQl9QQ0lcbiAgNDY6XHRcdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gTUFDQiBcdTAwMjZcdTAwMjYgUENJXG4gIDQ4Olx0XHRoZWxwXG4gIDQ5Olx0XHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUUVNVS1SZWxhdGVkIE5ldHdvcmtpbmcgTXVzaW5ncyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IENhZGVuY2UgR0VNIGFuZCBpdHMgcHJlc2VuY2UgaW4gUUVNVS4gUmlnaHQsIFFFTVUgKmRvZXMqIGVtdWxhdGUgdGhlIENhZGVuY2UgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyLCB0aGUgYGNhZF9nZW0uY2AgZHJpdmVyLiBJJiMzOTttIHJlY2FsbGluZyBzcGVjaWZpYyBleGFtcGxlcywgbGlrZSB0aG9zZSBYaWxpbnggWnlucSBhbmQgWnlucU1QIGJvYXJkcywgYW5kIGV2ZW4gdGhlIFJJU0MtViBNaWNyb2NoaXAgUG9sYXJGaXJlICh0aGUgaWNpY2xlLWtpdCkg4oCTIHRoZXkgYWxsIGdldCBzaW11bGF0ZWQgdXNpbmcgUUVNVSB3aXRoIHRoYXQgR0VNIGVtdWxhdGlvbi4KCkhtbSwgYnV0IHRoYXQgYnJpbmdzIHVwIGFub3RoZXIgcmVsYXRlZCBxdWVzdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hldGhlciB0aGUgYE1BQ0JfUENJYCBpcyBpbXBsZW1lbnRlZCBhcyBhIFBDSSBkcml2ZXIgb3IgaWYgaXQmIzM5O3MgbW9yZSBwbGF0Zm9ybS1zcGVjaWZpYy4gSSBrbm93IEkgY2FuIGZpbmQgdGhhdCBpbmZvcm1hdGlvbiBpbiBgbWFjYl9wY2kuY2AsIHNvIEkmIzM5O2xsIGdvIGNoZWNrIHRoYXQgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBET0M6IENhZGVuY2UgR0VNIFBDSSB3cmFwcGVyLlxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChDKSAyMDE2IENhZGVuY2UgRGVzaWduIFN5c3RlbXMgLSBodHRwczovL3d3dy5jYWRlbmNlLmNvbVxuICAgNjpcdCAqXG4gICA3Olx0ICogQXV0aG9yczogUmFmYWwgT3ppZWJsbyBcdTAwM2NyYWZhbG9AY2FkZW5jZS5jb21cdTAwM2VcbiAgIDg6XHQgKlx0ICAgIEJhcnRvc3ogRm9sdGEgXHUwMDNjYmZvbHRhQGNhZGVuY2UuY29tXHUwMDNlXG4gICA5Olx0ICovXG4gIDEwOlx0XG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGstcHJvdmlkZXIuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAgMTc6XHQjaW5jbHVkZSBcJiMzNDttYWNiLmhcJiMzNDtcbiAgMTg6XHRcbiAgMTk6XHQjZGVmaW5lIFBDSV9EUklWRVJfTkFNRSBcJiMzNDttYWNiX3BjaVwmIzM0O1xuICAyMDpcdCNkZWZpbmUgUExBVF9EUklWRVJfTkFNRSBcJiMzNDttYWNiXCYjMzQ7XG4gIDIxOlx0XG4gIDIyOlx0I2RlZmluZSBQQ0lfREVWSUNFX0lEX0NETlNfTUFDQiAweGUwMDdcbiAgMjM6XHRcbiAgMjQ6XHQjZGVmaW5lIEdFTV9QQ0xLX1JBVEUgNTAwMDAwMDBcbiAgMjU6XHQjZGVmaW5lIEdFTV9IQ0xLX1JBVEUgNTAwMDAwMDBcbiAgMjY6XHRcbiAgMjc6XHRzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuICAyODpcdHtcbiAgMjk6XHRcdGludCBlcnI7XG4gIDMwOlx0XHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xuICAzMTpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIHBsYXRfaW5mbztcbiAgMzI6XHRcdHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgcGxhdF9kYXRhO1xuICAzMzpcdFx0c3RydWN0IHJlc291cmNlIHJlc1syXTtcbiAgMzQ6XHRcbiAgMzU6XHRcdC8qIGVuYWJsZSBwY2kgZGV2aWNlICovXG4gIDM2Olx0XHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGNpKTtcbiAgMzc6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiAgMzg6XHRcdFx0ZGV2X2VycihcdTAwMjZwY2ktXHUwMDNlZGV2LCBcJiMzNDtFbmFibGluZyBQQ0kgZGV2aWNlIGhhcyBmYWlsZWQ6ICVkXCYjMzQ7LCBlcnIpO1xuICAzOTpcdFx0XHRyZXR1cm4gZXJyO1xuICA0MDpcdFx0fVxuICA0MTpcdFxuICA0MjpcdFx0cGNpX3NldF9tYXN0ZXIocGNpKTtcbiAgNDM6XHRcbiAgNDQ6XHRcdC8qIHNldCB1cCByZXNvdXJjZXMgKi9cbiAgNDU6XHRcdG1lbXNldChyZXMsIDB4MDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogQVJSQVlfU0laRShyZXMpKTtcbiAgNDY6XHRcdHJlc1swXS5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApO1xuICA0NzpcdFx0cmVzWzBdLmVuZCA9IHBjaV9yZXNvdXJjZV9lbmQocGNpLCAwKTtcbiAgNDg6XHRcdHJlc1swXS5uYW1lID0gUENJX0RSSVZFUl9OQU1FO1xuICA0OTpcdFx0cmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07XG4gIDUwOlx0XHRyZXNbMV0uc3RhcnQgPSBwY2lfaXJxX3ZlY3RvcihwY2ksIDApO1xuICA1MTpcdFx0cmVzWzFdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XG4gIDUyOlx0XHRyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTtcbiAgNTM6XHRcbiAgNTQ6XHRcdGRldl9pbmZvKFx1MDAyNnBjaS1cdTAwM2VkZXYsIFwmIzM0O0VNQUMgcGh5c2ljYWwgYmFzZSBhZGRyOiAlcGFcXG5cJiMzNDssXG4gIDU1Olx0XHRcdCBcdTAwMjZyZXNbMF0uc3RhcnQpO1xuICA1NjpcdFxuICA1NzpcdFx0Lyogc2V0IHVwIG1hY2IgcGxhdGZvcm0gZGF0YSAqL1xuICA1ODpcdFx0bWVtc2V0KFx1MDAyNnBsYXRfZGF0YSwgMCwgc2l6ZW9mKHBsYXRfZGF0YSkpO1xuICA1OTpcdFxuICA2MDpcdFx0LyogaW5pdGlhbGl6ZSBjbG9ja3MgKi9cbiAgNjE6XHRcdHBsYXRfZGF0YS5wY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoXHUwMDI2cGNpLVx1MDAzZWRldiwgXCYjMzQ7cGNsa1wmIzM0OywgTlVMTCwgMCxcbiAgNjI6XHRcdFx0XHRcdFx0XHQgR0VNX1BDTEtfUkFURSk7XG4gIDYzOlx0XHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5wY2xrKSkge1xuICA2NDpcdFx0XHRlcnIgPSBQVFJfRVJSKHBsYXRfZGF0YS5wY2xrKTtcbiAgNjU6XHRcdFx0Z290byBlcnJfcGNsa19yZWdpc3RlcjtcbiAgNjY6XHRcdH1cbiAgNjc6XHRcbiAgNjg6XHRcdHBsYXRfZGF0YS5oY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoXHUwMDI2cGNpLVx1MDAzZWRldiwgXCYjMzQ7aGNsa1wmIzM0OywgTlVMTCwgMCxcbiAgNjk6XHRcdFx0XHRcdFx0XHQgR0VNX0hDTEtfUkFURSk7XG4gIDcwOlx0XHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5oY2xrKSkge1xuICA3MTpcdFx0XHRlcnIgPSBQVFJfRVJSKHBsYXRfZGF0YS5oY2xrKTtcbiAgNzI6XHRcdFx0Z290byBlcnJfaGNsa19yZWdpc3RlcjtcbiAgNzM6XHRcdH1cbiAgNzQ6XHRcbiAgNzU6XHRcdC8qIHNldCB1cCBwbGF0Zm9ybSBkZXZpY2UgaW5mbyAqL1xuICA3NjpcdFx0bWVtc2V0KFx1MDAyNnBsYXRfaW5mbywgMCwgc2l6ZW9mKHBsYXRfaW5mbykpO1xuICA3NzpcdFx0cGxhdF9pbmZvLnBhcmVudCA9IFx1MDAyNnBjaS1cdTAwM2VkZXY7XG4gIDc4Olx0XHRwbGF0X2luZm8uZndub2RlID0gcGNpLVx1MDAzZWRldi5md25vZGU7XG4gIDc5Olx0XHRwbGF0X2luZm8ubmFtZSA9IFBMQVRfRFJJVkVSX05BTUU7XG4gIDgwOlx0XHRwbGF0X2luZm8uaWQgPSBwY2ktXHUwMDNlZGV2Zm47XG4gIDgxOlx0XHRwbGF0X2luZm8ucmVzID0gcmVzO1xuICA4MjpcdFx0cGxhdF9pbmZvLm51bV9yZXMgPSBBUlJBWV9TSVpFKHJlcyk7XG4gIDgzOlx0XHRwbGF0X2luZm8uZGF0YSA9IFx1MDAyNnBsYXRfZGF0YTtcbiAgODQ6XHRcdHBsYXRfaW5mby5zaXplX2RhdGEgPSBzaXplb2YocGxhdF9kYXRhKTtcbiAgODU6XHRcdHBsYXRfaW5mby5kbWFfbWFzayA9IHBjaS1cdTAwM2VkbWFfbWFzaztcbiAgODY6XHRcbiAgODc6XHRcdC8qIHJlZ2lzdGVyIHBsYXRmb3JtIGRldmljZSAqL1xuICA4ODpcdFx0cGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKFx1MDAyNnBsYXRfaW5mbyk7XG4gIDg5Olx0XHRpZiAoSVNfRVJSKHBkZXYpKSB7XG4gIDkwOlx0XHRcdGVyciA9IFBUUl9FUlIocGRldik7XG4gIDkxOlx0XHRcdGdvdG8gZXJyX3BsYXRfZGV2X3JlZ2lzdGVyO1xuICA5MjpcdFx0fVxuICA5MzpcdFxuICA5NDpcdFx0cGNpX3NldF9kcnZkYXRhKHBjaSwgcGRldik7XG4gIDk1Olx0XG4gIDk2Olx0XHRyZXR1cm4gMDtcbiAgOTc6XHRcbiAgOTg6XHRlcnJfcGxhdF9kZXZfcmVnaXN0ZXI6XG4gIDk5Olx0XHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5oY2xrKTtcbiAxMDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTU3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgY2hhbmdlcyBiZWluZyBleGFtaW5lZCBpbiBgbWFjYl9tYWluLmNgOgoKKipEaXZpbmcgaW50byB0aGUgTUFDQiBEcml2ZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgbWFjYl9tYWluLmNgIGhlcmUuIExldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyDigJMgd2hhdCYjMzk7cyAqYWN0dWFsbHkqIGRpZmZlcmVudD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29kZSBhZGp1c3RtZW50cy4KCkZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHRob3NlIGtleSBmdW5jdGlvbnM6IGBtYWNiX3BhZF9hbmRfZmNzYCwgYG1hY2Jfc3RhcnRfeG1pdGAsIGBtYWNiX3R4X21hcGAsIGBtYWNiX3R4X2Vycm9yX3Rhc2tgLCBhbmQgYG1hY2JfdHhfY29tcGxldGVgLiBFYWNoIG9mIHRoZXNlIHJlcHJlc2VudHMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSB0cmFuc21pdCBwYXRoLCBmcm9tIHRoZSBpbml0aWFsIGZyYW1lIHByZXBhcmF0aW9uIHRvIHRoZSBmaW5hbCBoYW5kbGluZyBvZiB0aGUgdHJhbnNtaXNzaW9uJiMzOTtzIGNvbXBsZXRpb24gb3IgZmFpbHVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuZGFtZW50YWwgcHJvY2Vzc2VzIGFyZSBiZWluZyBtb2RpZmllZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2hhbmdlcyB0aGF0IG1pZ2h0IGltcHJvdmUgcGVyZm9ybWFuY2UsIGZpeCBidWdzLCBvciBpbnRyb2R1Y2UgbmV3IGZlYXR1cmVzIGluIHRoZSB0cmFuc21pc3Npb24gcHJvY2VzcyBvZiB0aGUgTUFDQiBkcml2ZXIuIEkgd2lsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgYW55IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgYXMgY2hhbmdlcyBpbiBvbmUgbWF5IGltcGFjdCBhbm90aGVyLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCwgb3IgYSBjcml0aWNhbCBpbXByb3ZlbWVudCwgbGllcywgSSBzdXNwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0MTU6XHRcdCAqIFRoaXMgaXMgcmVxdWlyZWQgLSBhdCBsZWFzdCBmb3IgWnlucSwgd2hpY2ggb3RoZXJ3aXNlIGNhbGN1bGF0ZXNcbjI0MTY6XHRcdCAqIHdyb25nIFVEUCBoZWFkZXIgY2hlY2tzdW1zIGZvciBVRFAgcGFja2V0cyB3aXRoIFVEUCBkYXRhIGxlbiBcdTAwM2M9MlxuMjQxNzpcdFx0ICovXG4yNDE4Olx0XHQqKF9fc3VtMTYgKikoc2tiX2NoZWNrc3VtX3N0YXJ0KHNrYikgJiM0Mzsgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0KSA9IDA7XG4yNDE5Olx0XHRyZXR1cm4gMDtcbjI0MjA6XHR9XG4yNDIxOlx0XG4yNDIyOlx0LyogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vLCBvciB0aGUgRkNTIGJ5dGVzIGFwcGVuZGVkICgwIG9yIEVUSF9GQ1NfTEVOKS4gKi9cbjI0MjM6XHRzdGF0aWMgaW50IG1hY2JfcGFkX2FuZF9mY3Moc3RydWN0IHNrX2J1ZmYgKipza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4yNDI0Olx0e1xuMjQyNTpcdFx0Ym9vbCBjbG9uZWQgPSBza2JfY2xvbmVkKCpza2IpIHx8IHNrYl9oZWFkZXJfY2xvbmVkKCpza2IpIHx8XG4yNDI2Olx0XHRcdCAgICAgIHNrYl9pc19ub25saW5lYXIoKnNrYik7XG4yNDI3Olx0XHRpbnQgcGFkbGVuID0gRVRIX1pMRU4gLSAoKnNrYiktXHUwMDNlbGVuO1xuMjQyODpcdFx0aW50IHRhaWxyb29tID0gc2tiX3RhaWxyb29tKCpza2IpO1xuMjQyOTpcdFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XG4yNDMwOlx0XHR1MzIgZmNzO1xuMjQzMTpcdFxuMjQzMjpcdFx0aWYgKCEobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0NTVU0pIHx8XG4yNDMzOlx0XHQgICAgISgoKnNrYiktXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHx8XG4yNDM0Olx0XHQgICAgc2tiX3NoaW5mbygqc2tiKS1cdTAwM2Vnc29fc2l6ZSB8fCBwdHBfb25lX3N0ZXBfc3luYygqc2tiKSlcbjI0MzU6XHRcdFx0cmV0dXJuIDA7XG4yNDM2Olx0XG4yNDM3Olx0XHRpZiAocGFkbGVuIFx1MDAzYz0gMCkge1xuMjQzODpcdFx0XHQvKiBGQ1MgY291bGQgYmUgYXBwZWRlZCB0byB0YWlscm9vbS4gKi9cbjI0Mzk6XHRcdFx0aWYgKHRhaWxyb29tIFx1MDAzZT0gRVRIX0ZDU19MRU4pXG4yNDQwOlx0XHRcdFx0Z290byBhZGRfZmNzO1xuMjQ0MTpcdFx0XHQvKiBObyByb29tIGZvciBGQ1MsIG5lZWQgdG8gcmVhbGxvY2F0ZSBza2IuICovXG4yNDQyOlx0XHRcdGVsc2VcbjI0NDM6XHRcdFx0XHRwYWRsZW4gPSBFVEhfRkNTX0xFTjtcbjI0NDQ6XHRcdH0gZWxzZSB7XG4yNDQ1Olx0XHRcdC8qIEFkZCByb29tIGZvciBGQ1MuICovXG4yNDQ2Olx0XHRcdHBhZGxlbiAmIzQzOz0gRVRIX0ZDU19MRU47XG4yNDQ3Olx0XHR9XG4yNDQ4Olx0XG4yNDQ5Olx0XHRpZiAoY2xvbmVkIHx8IHRhaWxyb29tIFx1MDAzYyBwYWRsZW4pIHtcbjI0NTA6XHRcdFx0bnNrYiA9IHNrYl9jb3B5X2V4cGFuZCgqc2tiLCAwLCBwYWRsZW4sIEdGUF9BVE9NSUMpO1xuMjQ1MTpcdFx0XHRpZiAoIW5za2IpXG4yNDUyOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yNDUzOlx0XG4yNDU0Olx0XHRcdGRldl9jb25zdW1lX3NrYl9hbnkoKnNrYik7XG4yNDU1Olx0XHRcdCpza2IgPSBuc2tiO1xuMjQ1NjpcdFx0fVxuMjQ1NzpcdFxuMjQ1ODpcdFx0aWYgKHBhZGxlbiBcdTAwM2UgRVRIX0ZDU19MRU4pXG4yNDU5Olx0XHRcdHNrYl9wdXRfemVybygqc2tiLCBwYWRsZW4gLSBFVEhfRkNTX0xFTik7XG4yNDYwOlx0XG4yNDYxOlx0YWRkX2ZjczpcbjI0NjI6XHRcdC8qIHNldCBGQ1MgdG8gcGFja2V0ICovXG4yNDYzOlx0XHRmY3MgPSBjcmMzMl9sZSh+MCwgKCpza2IpLVx1MDAzZWRhdGEsICgqc2tiKS1cdTAwM2VsZW4pO1xuMjQ2NDpcdFx0ZmNzID0gfmZjcztcbjI0NjU6XHRcbjI0NjY6XHRcdHNrYl9wdXRfdTgoKnNrYiwgZmNzXHRcdFx1MDAyNiAweGZmKTtcbjI0Njc6XHRcdHNrYl9wdXRfdTgoKnNrYiwgKGZjcyBcdTAwM2VcdTAwM2UgOClcdFx1MDAyNiAweGZmKTtcbjI0Njg6XHRcdHNrYl9wdXRfdTgoKnNrYiwgKGZjcyBcdTAwM2VcdTAwM2UgMTYpXHRcdTAwMjYgMHhmZik7XG4yNDY5Olx0XHRza2JfcHV0X3U4KCpza2IsIChmY3MgXHUwMDNlXHUwMDNlIDI0KVx0XHUwMDI2IDB4ZmYpO1xuMjQ3MDpcdFxuMjQ3MTpcdFx0cmV0dXJuIEVUSF9GQ1NfTEVOO1xuMjQ3MjpcdH1cbjI0NzM6XHRcbjI0NzQ6XHRzdGF0aWMgbmV0ZGV2X3R4X3QgbWFjYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4yNDc1Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuMjQ3NjpcdHtcbjI0Nzc6XHRcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4yNDc4Olx0XHR1bnNpZ25lZCBpbnQgcSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xuMjQ3OTpcdFx0dW5zaWduZWQgaW50IGRlc2NfY250LCBucl9mcmFncywgZnJhZ19zaXplLCBmO1xuMjQ4MDpcdFx0c3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlID0gXHUwMDI2YnAtXHUwMDNlcXVldWVzW3FdO1xuMjQ4MTpcdFx0bmV0ZGV2X3R4X3QgcmV0ID0gTkVUREVWX1RYX09LO1xuMjQ4MjpcdFx0dW5zaWduZWQgaW50IGhkcmxlbjtcbjI0ODM6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4yNDg0Olx0XHRpbnQgZmNzX2xlbjtcbjI0ODU6XHRcdGJvb2wgaXNfbHNvO1xuMjQ4NjpcdFxuMjQ4NzpcdFx0aWYgKG1hY2JfY2xlYXJfY3N1bShza2IpKSB7XG4yNDg4Olx0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4yNDg5Olx0XHRcdHJldHVybiByZXQ7XG4yNDkwOlx0XHR9XG4yNDkxOlx0XG4yNDkyOlx0XHRmY3NfbGVuID0gbWFjYl9wYWRfYW5kX2ZjcyhcdTAwMjZza2IsIG5ldGRldik7XG4yNDkzOlx0XHRpZiAoZmNzX2xlbiBcdTAwM2MgMCkge1xuMjQ5NDpcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY4OAoJCQkJCQkJb3V0cHV0OiA4NAoJCQkJCQkJdGhvdWdodHM6IDIxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIE1BQ0IgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgYG1hY2JfcGFkX2FuZF9mY3NgIGZ1bmN0aW9uIGFuZCByZWxhdGVkIHN0YXRpc3RpY3MgdXBkYXRlcyBpbiB0aGUgQ2FkZW5jZSBNQUNCIEV0aGVybmV0IGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBsb29rcyBsaWtlIGEgc3RhdHMgY2FsY3VsYXRpb24gY2hhbmdlLiBMZXQmIzM5O3MgZGlnIGRlZXBlciB0byBzZWUgaWYgaXQgd2FycmFudHMgZnV6emluZyBhdHRlbnRpb24uCgpGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc3RhdGUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCAqb25seSogY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgY29uc3RhbnQgY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24sIHVucmVhY2hhYmxlIGNvZGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBvciB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBuZWVkaW5nIHNwZWNpYWwgaGFyZHdhcmUuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0lzIGBtYWNiYCByZWFjaGFibGUgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgd2hpY2ggU3l6a2FsbGVyIHVzZXM/JiMzNDsuIEkga25vdyBzeXprYWxsZXIgcnVucyBzdGFuZGFyZCB4ODZfNjQgYW5kIEFSTTY0IFFFTVUgVk1zLiBCdXQgZG9lcyBzdGFuZGFyZCBRRU1VIHg4Nl82NCwgZm9yIGV4YW1wbGUsIGhhdmUgYSBDYWRlbmNlIE1BQ0IgZGV2aWNlIGluaXRpYWxpemVkPyBJdCBzZWVtcyB0aGF0IG9uIHg4Nl82NCBRRU1VLCB0aGUgQ2FkZW5jZSBNQUNCIGlzIGEgcGxhdGZvcm0gb3IgU29DIGRldmljZSAobGlrZSB0aGUgQ2FkZW5jZSBHRU0gb24gWGlsaW54IFp5bnEgb3IgTWljcm9jaGlwIEFUOTEpLiBTbyBkb2VzIFFFTVUgeDg2XzY0IGhhdmUgdGhlIHJlcXVpcmVkIE1BQ0IgZGV2aWNlPyBJIGtub3cgdGhlIHg4NiBRRU1VIGVudmlyb25tZW50cyBJIHdvcmsgd2l0aCB1c3VhbGx5IGhhdmUgZTEwMDAsIHJ0bDgxMzksIG9yIHZpcnRpby1uZXQsIG5vdCB0aGUgQ2FkZW5jZSBNQUNCIFBDSSBkZXZpY2VzLiBXaGF0IGFib3V0IEFSTS9BUk02NCBRRU1VPyBZZXMsIGBxZW11LXN5c3RlbS1hcm0gLU0genlucS1hOWAgZW11bGF0ZXMgQ2FkZW5jZSBHRU0uIEJ1dCBkb2VzIHN5emthbGxlciB0YXJnZXQgdGhhdD8gSXQgbG9va3MgbGlrZSBTeXprYWxsZXIgQVJNNjQgcnVucyBgLU0gdmlydGAsIHdoaWNoIHVzZXMgdmlydGlvLW5ldC4KClNvLCBsZXQmIzM5O3MgbG9vayBhdCB0aGlzIGNyaXRlcmlhLgoKVGhlIGtleSBxdWVzdGlvbiBpczogSXMgYG1hY2JgIGEgZHJpdmVyIGluIGEgdmVuZG9yLXNwZWNpZmljIE5JQyB0aGF0IG5lZWRzIHNwZWNpYWwsIG5vdC1lbXVsYXRlZCBoYXJkd2FyZSwgb3IgaXMgaXQgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVT8gSSBhbHNvIGhhdmUgdG8gYXNzZXNzIHRoZSBmdW5jdGlvbmFsIGltcGFjdCBvZiB0aGlzIGNvZGUgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNoYW5nZXMmIzM5OyBmdW5jdGlvbmFsIGltcGFjdC4gSW4gdGhlIGNvZGUsIHRoZSBjaGFuZ2Ugc3VidHJhY3RzIGB0eF9za2ItJmd0O2Zjc19sZW5gIGZyb20gYG5ldGRldi0mZ3Q7c3RhdHMudHhfYnl0ZXNgLiBUaGlzIGxvb2tzIGxpa2UgYSBzaW1wbGUgYWRqdXN0bWVudCBvZiB0aGUgYHR4X2J5dGVzYCBzdGF0aXN0aWMuIFRoZSBjaGFuZ2UgaXMgc2V0dGluZyBgdHhfc2tiLSZndDtmY3NfbGVuYCB0byBgRVRIX0ZDU19MRU5gICg0KSB3aGVuIGBtYWNiX3BhZF9hbmRfZmNzYCBhcHBlbmRzIHRoZSA0LWJ5dGUgRkNTIHNvIHRoYXQgdGhlIHN0YXRpc3RpYyBleGNsdWRlcyB0aGlzLiBPa2F5LCBpdCYjMzk7cyBqdXN0IGZpeGluZyBhIHN0YXQsIGV4Y2x1ZGluZyB0aGUgc29mdHdhcmUtYWRkZWQgRkNTIGJ5dGVzLgoKU28sIGRvZXMgdGhpcyBwYXRjaCBjaGFuZ2UgYW55IGxvZ2ljLCBkYXRhIHByb2Nlc3NpbmcsIG1lbW9yeSBzYWZldHksIG9yIHBhY2tldCB0cmFuc21pc3Npb24/IE5vLiBUaGUgbG9naWMgc3RheXMgdGhlIHNhbWU6IGBtYWNiX3BhZF9hbmRfZmNzYCBzdGlsbCBwYWRzIGFuZCBhcHBlbmRzIHRoZSBGQ1MuIEl0IHJldHVybnMgYEVUSF9GQ1NfTEVOYCBub3cuIFRoZSBgbWFjYl90eF9tYXBgIHNhdmVzIHRoZSBgdHhfc2tiLSZndDtmY3NfbGVuYC4gVGhpcyBpcyBhICpwdXJlbHkqIGEgc3RhdHMgYWRqdXN0bWVudC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWxsIHRoZSBjaGFuZ2VzOgoxLiAgYG1hY2IuaGA6IEFkZGVkIGB1OCBmY3NfbGVuYCB0byBgc3RydWN0IG1hY2JfdHhfc2tiYC4KMi4gIGBtYWNiX21haW4uY2A6IFVwZGF0ZXM6CiAgICAqICAgU3VidHJhY3RzIGB0eF9za2ItJmd0O2Zjc19sZW5gIGZyb20gYHN0YXRzLnR4X2J5dGVzYCBpbiBgbWFjYl90eF9lcnJvcl90YXNrYCBhbmQgYG1hY2JfdHhfY29tcGxldGVgLgogICAgKiAgIFRha2VzIGB1OCBmY3NfbGVuYCBhcmd1bWVudCBpbiBgbWFjYl90eF9tYXBgIGFuZCBzdG9yZXMgaXQuCiAgICAqICAgUmV0dXJucyBgRVRIX0ZDU19MRU5gIGZyb20gYG1hY2JfcGFkX2FuZF9mY3NgIGluc3RlYWQgb2YgYDBgLgogICAgKiAgIFBhc3NlcyBgZmNzX2xlbmAgZnJvbSBgbWFjYl9wYWRfYW5kX2Zjc2AgaW50byBgbWFjYl90eF9tYXBgLgoKU28sIGl0JiMzOTtzIGEgbWlub3Igc3RhdGlzdGljcyBmaXggaW4gYSBwbGF0Zm9ybS9Tb0MgRXRoZXJuZXQgZHJpdmVyIHdpdGggbm8gZnVuY3Rpb25hbCBvciBzZWN1cml0eSBpbXBhY3QuIEl0JiMzOTtzIG5vdCB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBpbiB0aGUgQ2FkZW5jZSBNQUNCIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgU29DIGhhcmR3YXJlIG9yIGEgbm9uLXN0YW5kYXJkIFFFTVUgbWFjaGluZSwgYnV0IGRvZXMgbm90IGFmZmVjdCBrZXJuZWwgYmVoYXZpb3IuCgpOb3csIGxldCBtZSBjaGVjayB0aGUgZm9ybWFsIHJlcXVpcmVtZW50cy4KCiogICBgV29ydGhGdXp6aW5nYDogZmFsc2UKKiAgIGBGb2N1c1N5bWJvbHNgOiBcWyBdIChlbXB0eSwgYmVjYXVzZSBubyBzcGVjaWZpYyBmdW5jdGlvbnMgbmVlZCBmb2N1cykKKiAgIGBFbmFibGVDb25maWdzYDogXFsgXSAoZW1wdHksIHNpbmNlIG5vIGNvbmZpZ3MgYXJlIHJlcXVpcmVkKQoqICAgYFJlYXNvbmluZ2A6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRqdXN0cyB0aGUgbmV0d29yayBkZXZpY2UgdHhcX2J5dGVzIGNvdW50ZXIgaW4gdGhlIENhZGVuY2UgTUFDQiBFdGhlcm5ldCBkcml2ZXIgdG8gZXhjbHVkZSBzb2Z0d2FyZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyJiMzOTtzIFRYIGJ5dGUgc3RhdGlzdGljcyBjYWxjdWxhdGlvbiB0byBzdWJ0cmFjdCBzb2Z0d2FyZS1hcHBlbmRlZCBGQ1MgYnl0ZXMuIEl0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIG9yIGNvbnRyb2wgZmxvdywgYW5kIHRhcmdldHMgU29DL2VtYmVkZGVkIGhhcmR3YXJlIG5vdCB1dGlsaXplZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgdXBkYXRlcyB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlciYjMzk7cyBUWCBieXRlIHN0YXRpc3RpY3MgY2FsY3VsYXRpb24gdG8gc3VidHJhY3Qgc29mdHdhcmUtYXBwZW5kZWQgRkNTIGJ5dGVzLiBJdCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBvciBjb250cm9sIGZsb3csIGFuZCB0YXJnZXRzIFNvQy9lbWJlZGRlZCBoYXJkd2FyZSBub3QgdXRpbGl6ZWQgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MTI6MzkuMTAyNzg3MjEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NjM4MjQyMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSB1cGRhdGVzIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyJ3MgVFggYnl0ZSBzdGF0aXN0aWNzIGNhbGN1bGF0aW9uIHRvIHN1YnRyYWN0IHNvZnR3YXJlLWFwcGVuZGVkIEZDUyBieXRlcy4gSXQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIG5ldHdvcmsgcGFja2V0IHByb2Nlc3Npbmcgb3IgY29udHJvbCBmbG93LCBhbmQgdGFyZ2V0cyBTb0MvZW1iZWRkZWQgaGFyZHdhcmUgbm90IHV0aWxpemVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MTI6MzkuMTAyNzkyMjEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTE2MzQ0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYjM2ZDQyMzIwZTk3OGIwNzJkODIxZTdlZjRiYTExMWE5NGM5MzczXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDEzOjEyOjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcXG5pbmRleCAxZTFmNTIyODVhMzlkLi5kNjkzMWM0MWYzOWRhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcXG5AQCAtOTY4LDYgKzk2OCw4IEBAIHN0cnVjdCBtYWNiX2RtYV9kZXNjX3B0cCB7XFxuICAqICAgICAgIG9mIHRoZSBmcmFtZVxcbiAgKiBAbWFwcGluZzogRE1BIGFkZHJlc3Mgb2YgdGhlIHNrYidzIGZyYWdtZW50IGJ1ZmZlclxcbiAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgRE1BIG1hcHBlZCBidWZmZXJcXG4rICogQGZjc19sZW46IEZDUyBieXRlcyBhcHBlbmRlZCBpbiBzb2Z0d2FyZSwgMCBvciBFVEhfRkNTX0xFTiwgb25seVxcbisgKiAgICAgICAgICAgc2V0IGZvciB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIGZyYW1lXFxuICAqIEBtYXBwZWRfYXNfcGFnZTogdHJ1ZSB3aGVuIGJ1ZmZlciB3YXMgbWFwcGVkIHdpdGggc2tiX2ZyYWdfZG1hX21hcCgpLFxcbiAgKiAgICAgICAgICAgICAgICAgIGZhbHNlIHdoZW4gYnVmZmVyIHdhcyBtYXBwZWQgd2l0aCBkbWFfbWFwX3NpbmdsZSgpXFxuICAqL1xcbkBAIC05NzUsNiArOTc3LDcgQEAgc3RydWN0IG1hY2JfdHhfc2tiIHtcXG4gXFx0c3RydWN0IHNrX2J1ZmZcXHRcXHQqc2tiO1xcbiBcXHRkbWFfYWRkcl90XFx0XFx0bWFwcGluZztcXG4gXFx0c2l6ZV90XFx0XFx0XFx0c2l6ZTtcXG4rXFx0dThcXHRcXHRcXHRmY3NfbGVuO1xcbiBcXHRib29sXFx0XFx0XFx0bWFwcGVkX2FzX3BhZ2U7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xcbmluZGV4IDc2ZWU0ZjUwNjAzMzUuLmIxOTM5ZGE0Yzk1YWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG5AQCAtMTMyMiw4ICsxMzIyLDggQEAgc3RhdGljIHZvaWQgbWFjYl90eF9lcnJvcl90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0XFx0XFx0XFx0YnAtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMudHhfcGFja2V0cysrO1xcbiBcXHRcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlc3RhdHMudHhfcGFja2V0cysrO1xcbiBcXHRcXHRcXHRcXHRwYWNrZXRzKys7XFxuLVxcdFxcdFxcdFxcdGJwLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnR4X2J5dGVzICs9IHNrYi1cXHUwMDNlbGVuO1xcbi1cXHRcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVxcdTAwM2VsZW47XFxuK1xcdFxcdFxcdFxcdGJwLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnR4X2J5dGVzICs9IHNrYi1cXHUwMDNlbGVuIC0gdHhfc2tiLVxcdTAwM2VmY3NfbGVuO1xcbitcXHRcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVxcdTAwM2VsZW4gLSB0eF9za2ItXFx1MDAzZWZjc19sZW47XFxuIFxcdFxcdFxcdFxcdGJ5dGVzICs9IHNrYi1cXHUwMDNlbGVuO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH0gZWxzZSB7XFxuQEAgLTE0NTAsOCArMTQ1MCw4IEBAIHN0YXRpYyBpbnQgbWFjYl90eF9jb21wbGV0ZShzdHJ1Y3QgbWFjYl9xdWV1ZSAqcXVldWUsIGludCBidWRnZXQpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWRhdGEpO1xcbiBcXHRcXHRcXHRcXHRicC1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy50eF9wYWNrZXRzKys7XFxuIFxcdFxcdFxcdFxcdHF1ZXVlLVxcdTAwM2VzdGF0cy50eF9wYWNrZXRzKys7XFxuLVxcdFxcdFxcdFxcdGJwLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnR4X2J5dGVzICs9IHNrYi1cXHUwMDNlbGVuO1xcbi1cXHRcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVxcdTAwM2VsZW47XFxuK1xcdFxcdFxcdFxcdGJwLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnR4X2J5dGVzICs9IHNrYi1cXHUwMDNlbGVuIC0gdHhfc2tiLVxcdTAwM2VmY3NfbGVuO1xcbitcXHRcXHRcXHRcXHRxdWV1ZS1cXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVxcdTAwM2VsZW4gLSB0eF9za2ItXFx1MDAzZWZjc19sZW47XFxuIFxcdFxcdFxcdFxcdHBhY2tldHMrKztcXG4gXFx0XFx0XFx0XFx0Ynl0ZXMgKz0gc2tiLVxcdTAwM2VsZW47XFxuIFxcdFxcdFxcdH1cXG5AQCAtMjE5OSw3ICsyMTk5LDggQEAgc3RhdGljIHZvaWQgbWFjYl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gc3RhdGljIHVuc2lnbmVkIGludCBtYWNiX3R4X21hcChzdHJ1Y3QgbWFjYiAqYnAsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBtYWNiX3F1ZXVlICpxdWV1ZSxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGhkcmxlbilcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGhkcmxlbixcXG4rXFx0XFx0XFx0XFx0dTggZmNzX2xlbilcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgZiwgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzO1xcbiBcXHR1bnNpZ25lZCBpbnQgbGVuLCBpLCB0eF9oZWFkID0gcXVldWUtXFx1MDAzZXR4X2hlYWQ7XFxuQEAgLTIyODQsNiArMjI4NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWFjYl90eF9tYXAoc3RydWN0IG1hY2IgKmJwLFxcbiBcXG4gXFx0LyogVGhpcyBpcyB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIGZyYW1lOiBzYXZlIHNvY2tldCBidWZmZXIgKi9cXG4gXFx0dHhfc2tiLVxcdTAwM2Vza2IgPSBza2I7XFxuK1xcdHR4X3NrYi1cXHUwMDNlZmNzX2xlbiA9IGZjc19sZW47XFxuIFxcbiBcXHQvKiBVcGRhdGUgVFggcmluZzogdXBkYXRlIGJ1ZmZlciBkZXNjcmlwdG9ycyBpbiByZXZlcnNlIG9yZGVyXFxuIFxcdCAqIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uXFxuQEAgLTI0MTcsNiArMjQxOSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1hY2JfY2xlYXJfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vLCBvciB0aGUgRkNTIGJ5dGVzIGFwcGVuZGVkICgwIG9yIEVUSF9GQ1NfTEVOKS4gKi9cXG4gc3RhdGljIGludCBtYWNiX3BhZF9hbmRfZmNzKHN0cnVjdCBza19idWZmICoqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdGJvb2wgY2xvbmVkID0gc2tiX2Nsb25lZCgqc2tiKSB8fCBza2JfaGVhZGVyX2Nsb25lZCgqc2tiKSB8fFxcbkBAIC0yNDY1LDcgKzI0NjgsNyBAQCBzdGF0aWMgaW50IG1hY2JfcGFkX2FuZF9mY3Moc3RydWN0IHNrX2J1ZmYgKipza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHNrYl9wdXRfdTgoKnNrYiwgKGZjcyBcXHUwMDNlXFx1MDAzZSAxNilcXHRcXHUwMDI2IDB4ZmYpO1xcbiBcXHRza2JfcHV0X3U4KCpza2IsIChmY3MgXFx1MDAzZVxcdTAwM2UgMjQpXFx0XFx1MDAyNiAweGZmKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gRVRIX0ZDU19MRU47XFxuIH1cXG4gXFxuIHN0YXRpYyBuZXRkZXZfdHhfdCBtYWNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMjQ3OCw2ICsyNDgxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRuZXRkZXZfdHhfdCByZXQgPSBORVRERVZfVFhfT0s7XFxuIFxcdHVuc2lnbmVkIGludCBoZHJsZW47XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGludCBmY3NfbGVuO1xcbiBcXHRib29sIGlzX2xzbztcXG4gXFxuIFxcdGlmIChtYWNiX2NsZWFyX2NzdW0oc2tiKSkge1xcbkBAIC0yNDg1LDcgKzI0ODksOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbWFjYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChtYWNiX3BhZF9hbmRfZmNzKFxcdTAwMjZza2IsIG5ldGRldikpIHtcXG4rXFx0ZmNzX2xlbiA9IG1hY2JfcGFkX2FuZF9mY3MoXFx1MDAyNnNrYiwgbmV0ZGV2KTtcXG4rXFx0aWYgKGZjc19sZW4gXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG5AQCAtMjU0OCw3ICsyNTUzLDcgQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiBNYXAgc29ja2V0IGJ1ZmZlciBmb3IgRE1BIHRyYW5zZmVyICovXFxuLVxcdGlmIChtYWNiX3R4X21hcChicCwgcXVldWUsIHNrYiwgaGRybGVuKSkge1xcbitcXHRpZiAobWFjYl90eF9tYXAoYnAsIHF1ZXVlLCBza2IsIGhkcmxlbiwgZmNzX2xlbikpIHtcXG4gXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MTI6MzkuNDU1MjI5NzU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjQyODU3NzU1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlcidzIFRYIGJ5dGUgc3RhdGlzdGljcyBjYWxjdWxhdGlvbiB0byBzdWJ0cmFjdCBzb2Z0d2FyZS1hcHBlbmRlZCBGQ1MgYnl0ZXMuIEl0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIG9yIGNvbnRyb2wgZmxvdywgYW5kIHRhcmdldHMgU29DL2VtYmVkZGVkIGhhcmR3YXJlIG5vdCB1dGlsaXplZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRiMzZkNDIzMjBlOTc4YjA3MmQ4MjFlN2VmNGJhMTExYTk0YzkzNzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMzoxMjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbmluZGV4IDFlMWY1MjI4NWEzOWQuLmQ2OTMxYzQxZjM5ZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmhcbkBAIC05NjgsNiArOTY4LDggQEAgc3RydWN0IG1hY2JfZG1hX2Rlc2NfcHRwIHtcbiAgKiAgICAgICBvZiB0aGUgZnJhbWVcbiAgKiBAbWFwcGluZzogRE1BIGFkZHJlc3Mgb2YgdGhlIHNrYidzIGZyYWdtZW50IGJ1ZmZlclxuICAqIEBzaXplOiBzaXplIG9mIHRoZSBETUEgbWFwcGVkIGJ1ZmZlclxuKyAqIEBmY3NfbGVuOiBGQ1MgYnl0ZXMgYXBwZW5kZWQgaW4gc29mdHdhcmUsIDAgb3IgRVRIX0ZDU19MRU4sIG9ubHlcbisgKiAgICAgICAgICAgc2V0IGZvciB0aGUgbGFzdCBidWZmZXIgb2YgdGhlIGZyYW1lXG4gICogQG1hcHBlZF9hc19wYWdlOiB0cnVlIHdoZW4gYnVmZmVyIHdhcyBtYXBwZWQgd2l0aCBza2JfZnJhZ19kbWFfbWFwKCksXG4gICogICAgICAgICAgICAgICAgICBmYWxzZSB3aGVuIGJ1ZmZlciB3YXMgbWFwcGVkIHdpdGggZG1hX21hcF9zaW5nbGUoKVxuICAqL1xuQEAgLTk3NSw2ICs5NzcsNyBAQCBzdHJ1Y3QgbWFjYl90eF9za2Ige1xuIFx0c3RydWN0IHNrX2J1ZmZcdFx0KnNrYjtcbiBcdGRtYV9hZGRyX3RcdFx0bWFwcGluZztcbiBcdHNpemVfdFx0XHRcdHNpemU7XG4rXHR1OFx0XHRcdGZjc19sZW47XG4gXHRib29sXHRcdFx0bWFwcGVkX2FzX3BhZ2U7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuaW5kZXggNzZlZTRmNTA2MDMzNS4uYjE5MzlkYTRjOTVhZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbkBAIC0xMzIyLDggKzEzMjIsOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3R4X2Vycm9yX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRcdFx0YnAtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcbiBcdFx0XHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcbiBcdFx0XHRcdHBhY2tldHMrKztcbi1cdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXHUwMDNlbGVuO1xuLVx0XHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVx1MDAzZWxlbjtcbitcdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXHUwMDNlbGVuIC0gdHhfc2tiLVx1MDAzZWZjc19sZW47XG4rXHRcdFx0XHRxdWV1ZS1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXHUwMDNlbGVuIC0gdHhfc2tiLVx1MDAzZWZjc19sZW47XG4gXHRcdFx0XHRieXRlcyArPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbkBAIC0xNDUwLDggKzE0NTAsOCBAQCBzdGF0aWMgaW50IG1hY2JfdHhfY29tcGxldGUoc3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlLCBpbnQgYnVkZ2V0KVxuIFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWRhdGEpO1xuIFx0XHRcdFx0YnAtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcbiBcdFx0XHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcbi1cdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXHUwMDNlbGVuO1xuLVx0XHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVx1MDAzZWxlbjtcbitcdFx0XHRcdGJwLVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXHUwMDNlbGVuIC0gdHhfc2tiLVx1MDAzZWZjc19sZW47XG4rXHRcdFx0XHRxdWV1ZS1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXHUwMDNlbGVuIC0gdHhfc2tiLVx1MDAzZWZjc19sZW47XG4gXHRcdFx0XHRwYWNrZXRzKys7XG4gXHRcdFx0XHRieXRlcyArPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRcdH1cbkBAIC0yMTk5LDcgKzIxOTksOCBAQCBzdGF0aWMgdm9pZCBtYWNiX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWFjYl90eF9tYXAoc3RydWN0IG1hY2IgKmJwLFxuIFx0XHRcdFx0c3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlLFxuIFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBoZHJsZW4pXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgaGRybGVuLFxuK1x0XHRcdFx0dTggZmNzX2xlbilcbiB7XG4gXHR1bnNpZ25lZCBpbnQgZiwgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgbGVuLCBpLCB0eF9oZWFkID0gcXVldWUtXHUwMDNldHhfaGVhZDtcbkBAIC0yMjg0LDYgKzIyODUsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG1hY2JfdHhfbWFwKHN0cnVjdCBtYWNiICpicCxcbiBcbiBcdC8qIFRoaXMgaXMgdGhlIGxhc3QgYnVmZmVyIG9mIHRoZSBmcmFtZTogc2F2ZSBzb2NrZXQgYnVmZmVyICovXG4gXHR0eF9za2ItXHUwMDNlc2tiID0gc2tiO1xuK1x0dHhfc2tiLVx1MDAzZWZjc19sZW4gPSBmY3NfbGVuO1xuIFxuIFx0LyogVXBkYXRlIFRYIHJpbmc6IHVwZGF0ZSBidWZmZXIgZGVzY3JpcHRvcnMgaW4gcmV2ZXJzZSBvcmRlclxuIFx0ICogdG8gYXZvaWQgcmFjZSBjb25kaXRpb25cbkBAIC0yNDE3LDYgKzI0MTksNyBAQCBzdGF0aWMgaW5saW5lIGludCBtYWNiX2NsZWFyX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8sIG9yIHRoZSBGQ1MgYnl0ZXMgYXBwZW5kZWQgKDAgb3IgRVRIX0ZDU19MRU4pLiAqL1xuIHN0YXRpYyBpbnQgbWFjYl9wYWRfYW5kX2ZjcyhzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRib29sIGNsb25lZCA9IHNrYl9jbG9uZWQoKnNrYikgfHwgc2tiX2hlYWRlcl9jbG9uZWQoKnNrYikgfHxcbkBAIC0yNDY1LDcgKzI0NjgsNyBAQCBzdGF0aWMgaW50IG1hY2JfcGFkX2FuZF9mY3Moc3RydWN0IHNrX2J1ZmYgKipza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRza2JfcHV0X3U4KCpza2IsIChmY3MgXHUwMDNlXHUwMDNlIDE2KVx0XHUwMDI2IDB4ZmYpO1xuIFx0c2tiX3B1dF91OCgqc2tiLCAoZmNzIFx1MDAzZVx1MDAzZSAyNClcdFx1MDAyNiAweGZmKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIEVUSF9GQ1NfTEVOO1xuIH1cbiBcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgbWFjYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMjQ3OCw2ICsyNDgxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0bmV0ZGV2X3R4X3QgcmV0ID0gTkVUREVWX1RYX09LO1xuIFx0dW5zaWduZWQgaW50IGhkcmxlbjtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgZmNzX2xlbjtcbiBcdGJvb2wgaXNfbHNvO1xuIFxuIFx0aWYgKG1hY2JfY2xlYXJfY3N1bShza2IpKSB7XG5AQCAtMjQ4NSw3ICsyNDg5LDggQEAgc3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0aWYgKG1hY2JfcGFkX2FuZF9mY3MoXHUwMDI2c2tiLCBuZXRkZXYpKSB7XG4rXHRmY3NfbGVuID0gbWFjYl9wYWRfYW5kX2ZjcyhcdTAwMjZza2IsIG5ldGRldik7XG4rXHRpZiAoZmNzX2xlbiBcdTAwM2MgMCkge1xuIFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuQEAgLTI1NDgsNyArMjU1Myw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBtYWNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdH1cbiBcbiBcdC8qIE1hcCBzb2NrZXQgYnVmZmVyIGZvciBETUEgdHJhbnNmZXIgKi9cbi1cdGlmIChtYWNiX3R4X21hcChicCwgcXVldWUsIHNrYiwgaGRybGVuKSkge1xuK1x0aWYgKG1hY2JfdHhfbWFwKGJwLCBxdWV1ZSwgc2tiLCBoZHJsZW4sIGZjc19sZW4pKSB7XG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MTI6MzkuNDU1MjMyMTU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTEwMTY1MDQwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogTUFDQiBEcml2ZXIgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gVGhlIGNoYW5nZXMgdG91Y2ggYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oYCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgbmF0dXJlIG9mIHRoaXMgYG1hY2JgIGRyaXZlciDigJMgd2hhdCB0eXBlIG9mIGRldmljZSBkb2VzIGl0IGNvbnRyb2w/IElzIGl0IGEgc3RhbmRhcmQgRXRoZXJuZXQgaW50ZXJmYWNlLCBzb21lIHNwZWNpYWxpemVkIGltcGxlbWVudGF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyBrZXkuXG5cbk5leHQgc3RlcDogSSBuZWVkIHRvIGRldGVybWluZSB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50LiBJcyBgbWFjYmAgYSBkcml2ZXIgdGhhdCdzIGVtdWxhdGVkIHdpdGhpbiBRRU1VLCBvciBkb2VzIGl0IHByaW1hcmlseSBpbnRlcmFjdCB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlLCBwZXJoYXBzIHRocm91Z2ggYSBwbGF0Zm9ybSBvciBQQ0kgZGV2aWNlPyBUaGlzIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIGZ1enppbmcgc3RyYXRlZ3kuIEknbGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBjb2RlIGJhc2UgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBgbWFjYmAgcmVwcmVzZW50cyBhbmQgd2hlcmUgaXQncyBkZXBsb3llZC4gS25vd2luZyBpdHMgdXNlcyB3aWxsIGluZm9ybSB3aGV0aGVyIGl0J3MgcmVhY2hhYmxlIGFuZCB3aGV0aGVyIGZ1enppbmcgd2lsbCBiZSBlZmZlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoxMzozMC40NzE3MzkzMTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzMDgzODcwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUFDQlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnPTY3PUNPTkZJR19ORVRERVZJQ0VTPXlcXG5hcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnLTY4LSMgQ09ORklHX05FVF9WRU5ET1JfQlJPQURDT00gaXMgbm90IHNldFxcbmFyY2gvYXJtL2NvbmZpZ3MvYXQ5MV9kdF9kZWZjb25maWc6Njk6Q09ORklHX01BQ0I9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvYXQ5MV9kdF9kZWZjb25maWctNzAtQ09ORklHX0RNOTAwMD15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y1X2RlZmNvbmZpZz04OD1DT05GSUdfTkVUX0RTQV9NVjg4RTZYWFg9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjVfZGVmY29uZmlnOjg5OkNPTkZJR19NQUNCPXlcXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y1X2RlZmNvbmZpZy05MC1DT05GSUdfRE05MDAwPXlcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnPTI1OT1DT05GSUdfU1lTVEVNUE9SVD1tXFxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6MjYwOkNPTkZJR19NQUNCPXlcXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZy0yNjEtQ09ORklHX05FVF9DQUxYRURBX1hHTUFDPXlcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZz0xNjY9Q09ORklHX0RVTU1ZPW1cXG5hcmNoL2FybS9jb25maWdzL3B4YV9kZWZjb25maWc6MTY3OkNPTkZJR19NQUNCPW1cXG5hcmNoL2FybS9jb25maWdzL3B4YV9kZWZjb25maWctMTY4LUNPTkZJR19ETTkwMDA9bVxcbi0tXFxuYXJjaC9hcm0vY29uZmlncy9zYW1hNV9kZWZjb25maWc9NzM9Q09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWjk0NzdfU1BJPW1cXG5hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZy03NC0jIENPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NIGlzIG5vdCBzZXRcXG5hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZzo3NTpDT05GSUdfTUFDQj15XFxuYXJjaC9hcm0vY29uZmlncy9zYW1hNV9kZWZjb25maWctNzYtIyBDT05GSUdfTkVUX1ZFTkRPUl9DSVJSVVMgaXMgbm90IHNldFxcbi0tXFxuYXJjaC9hcm0vY29uZmlncy9zYW1hN19kZWZjb25maWc9MTAyPUNPTkZJR19ORVRERVZJQ0VTPXlcXG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZzoxMDM6Q09ORklHX01BQ0I9eVxcbmFyY2gvYXJtL2NvbmZpZ3Mvc2FtYTdfZGVmY29uZmlnLTEwNC1DT05GSUdfTUlDUkVMX1BIWT15XFxuLS1cXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTM3Mj1DT05GSUdfQkNNQVNQPW1cXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjM3MzpDT05GSUdfTUFDQj1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0zNzQtQ09ORklHX1RIVU5ERVJfTklDX1BGPW1cXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE1X2RlZmNvbmZpZz01Nz1DT05GSUdfSVBWTEFOPXlcXG5hcmNoL21pcHMvY29uZmlncy9leWVxNV9kZWZjb25maWc6NTg6Q09ORklHX01BQ0I9eVxcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE1X2RlZmNvbmZpZy01OS1DT05GSUdfTUFSVkVMTF9QSFk9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnPTU5PUNPTkZJR19JUFZMQU49eVxcbmFyY2gvbWlwcy9jb25maWdzL2V5ZXE2X2RlZmNvbmZpZzo2MDpDT05GSUdfTUFDQj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZfZGVmY29uZmlnLTYxLUNPTkZJR19NQVJWRUxMX1BIWT15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9leWVxNmxwbHVzX2RlZmNvbmZpZz01OD1DT05GSUdfSVBWTEFOPXlcXG5hcmNoL21pcHMvY29uZmlncy9leWVxNmxwbHVzX2RlZmNvbmZpZzo1OTpDT05GSUdfTUFDQj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZXllcTZscGx1c19kZWZjb25maWctNjAtQ09ORklHX01BUlZFTExfUEhZPXlcXG4tLVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWc9MTM3PUNPTkZJR19WSVJUSU9fTkVUPXlcXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjEzODpDT05GSUdfTUFDQj15XFxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZy0xMzktQ09ORklHX0UxMDAwRT15XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlPTU9bWFjYi15XFx0Oj0gbWFjYl9tYWluLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZTo3OmlmZXEgKCQoQ09ORklHX01BQ0JfVVNFX0hXU1RBTVApLHkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9NYWtlZmlsZS04LW1hY2IteVxcdCs9IG1hY2JfcHRwLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlPTk9ZW5kaWZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL01ha2VmaWxlLTEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX01BQ0IpICs9IG1hY2Iub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX01BQ0JfUENJKSArPSBtYWNiX3BjaS5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaD0xMzAxPXN0cnVjdCBtYWNiIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oLTEzOTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmg6MTM5NDojaWZkZWYgQ09ORklHX01BQ0JfVVNFX0hXU1RBTVBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC0xMzk1LSNkZWZpbmUgR0VNX1RTRUNfU0laRSAgKEdFTV9UU0hfU0laRSArIEdFTV9UU0xfU0laRSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oPTE0NDQ9c3RhdGljIGlubGluZSBib29sIGdlbV9oYXNfcHRwKHN0cnVjdCBtYWNiICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC0xNDQ1LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaDoxNDQ2OlxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19NQUNCX1VTRV9IV1NUQU1QKSBcXHUwMDI2XFx1MDAyNiAoYnAtXFx1MDAzZWNhcHMgXFx1MDAyNiBNQUNCX0NBUFNfR0VNX0hBU19QVFApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oLTE0NDctfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmg9MTQ2OD1zdGF0aWMgaW5saW5lIGJvb2wgbWFjYl9kbWFfcHRwKHN0cnVjdCBtYWNiICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaC0xNDY5LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaDoxNDcwOlxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19NQUNCX1VTRV9IV1NUQU1QKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oLTE0NzEtXFx0ICAgICAgIGJwLVxcdTAwM2VjYXBzIFxcdTAwMjYgTUFDQl9DQVBTX0RNQV9QVFA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTM2ODY9c3RhdGljIGludCBtYWNiX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzcyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjM3Mjk6I2lmZGVmIENPTkZJR19NQUNCX1VTRV9IV1NUQU1QXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0zNzMwLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2VtX2dldF90c3VfcmF0ZShzdHJ1Y3QgbWFjYiAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTQ1NTA9c3RhdGljIHZvaWQgbWFjYl9jb25maWd1cmVfY2FwcyhzdHJ1Y3QgbWFjYiAqYnAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ1ODItXFx0XFx0XFx0ZWxzZSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo0NTgzOiNpZmRlZiBDT05GSUdfTUFDQl9VU0VfSFdTVEFNUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDU4NC1cXHRcXHRcXHRcXHRicC1cXHUwMDNlY2FwcyB8PSBNQUNCX0NBUFNfRE1BX1BUUDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTc3MT1zdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTg1Ni1cXHRpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKGJwLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSwgXFxcImNkbnMsdGltZXItYWRqdXN0XFxcIikgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU4NTc6XFx0XFx0XFx0SVNfRU5BQkxFRChDT05GSUdfTUFDQl9VU0VfSFdTVEFNUCkpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4NTgtXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiVGltZXIgYWRqdXN0IG1vZGUgaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjEzOjMyLjgwMjU4MzM5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNDg1MjU2ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipLY29uZmlnIERpdmUgZm9yIE1BQ0IgXHUwMDI2IE1BQ0JfUENJKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBNQUNCIGFuZCBNQUNCX1BDSSBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgaGVyZS4gKldoeSogYXJlIHRoZXNlIG9wdGlvbnMgcmVsZXZhbnQgcmlnaHQgbm93PyBXaGF0IGFtIEkgdHJ5aW5nIHRvIGFjaGlldmU/IEFtIEkgZW5hYmxpbmcgYSBzcGVjaWZpYyBmZWF0dXJlLCBkZWJ1Z2dpbmcgc29tZXRoaW5nLCBvciBzaW1wbHkgZXhwbG9yaW5nIHRoZSBwb3NzaWJpbGl0aWVzIG9mIHRoaXMgcGFydGljdWxhciBNQUMgKE1lZGlhIEFjY2VzcyBDb250cm9sbGVyKSBpbXBsZW1lbnRhdGlvbj9cblxuSSdsbCBiZSBsb29raW5nIGZvciBzZXZlcmFsIHRoaW5ncy4gRmlyc3QsIGhvdyBhcmUgdGhlc2Ugb3B0aW9ucyBkZWZpbmVkPyBBcmUgdGhleSBzdGFuZGFsb25lIHN5bWJvbHMsIG9yIGFyZSB0aGV5IHBhcnQgb2YgYSBsYXJnZXIgY29uZGl0aW9uYWwgc3RydWN0dXJlPyBXaGF0IGRlcGVuZGVuY2llcyBkbyB0aGV5IGhhdmU/IERvIHRoZXkgcmVseSBvbiBvdGhlciBwbGF0Zm9ybSBmZWF0dXJlcyBvciBoYXJkd2FyZSBkZWZpbml0aW9ucz8gVW5kZXJzdGFuZGluZyB0aGUgKmRlcGVuZGVuY2llcyogaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGVpdGhlciBNQUNCIG9yIE1BQ0JfUENJLiBJJ20gdGhpbmtpbmcsIGNvdWxkIHRoaXMgYmUgYSBzaW1wbGUgY29uZmlndXJhdGlvbiBpc3N1ZSwgb3IgZG9lcyBpdCBwb2ludCB0byBhIGRlZXBlciBwcm9ibGVtIGluIHRoZSBkcml2ZXIncyBidWlsZCBwcm9jZXNzIG9yIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uPyBQZXJoYXBzIEkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBkZWZjb25maWcgZmlsZSB0byBzZWUgdGhlIGRlZmF1bHQgdmFsdWVzLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVtLiBGb3IgaW5zdGFuY2UsIGlzIGBNQUNCX1BDSWAgYW4gZXh0ZW5zaW9uIG9mIHRoZSBiYXNpYyBgTUFDQmAgY29uZmlndXJhdGlvbj8gT3IgYXJlIHRoZXkgbXV0dWFsbHkgZXhjbHVzaXZlLCByZXByZXNlbnRpbmcgZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIGNvbm5lY3Rpb24gbWV0aG9kcyAoZS5nLiwgUENJIHZzLiBzb21lIG90aGVyIGJ1cyk/IEknbGwgYmUgd2F0Y2hpbmcgZm9yIGFueSBjb21tZW50cyBpbiB0aGUgS2NvbmZpZyB0aGF0IG1pZ2h0IHByb3ZpZGUgY2x1ZXMgYWJvdXQgdGhlaXIgaW50ZW5kZWQgdXNlIGNhc2VzIG9yIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBwbGF0Zm9ybXMgdGhleSdyZSBkZXNpZ25lZCBmb3IuIEFsc28sIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSAqYW55KiBtZW50aW9ucyBvZiB0aGVzZSBvcHRpb25zIGF0IGFsbD8gSSBuZWVkIHRvIGJlIGFzIGNvbXByZWhlbnNpdmUgYXMgcG9zc2libGUuXG5cblRoaXMgS2NvbmZpZyBzY2FuIGlzIHRoZSBpbml0aWFsIHN0ZXAgdG8gYnVpbGQgYW4gYWNjdXJhdGUgcGljdHVyZS4gSXQnbGwgZ2l2ZSBtZSBhIGZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIGNvZGUgcGF0aHMgYXJlIGVuYWJsZWQgZm9yIHRoZSBtYWNiIGRyaXZlci4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvcnJlc3BvbmRpbmcgZHJpdmVyIGNvZGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhlc2UgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjE0OjUzLjI4Nzg0MzI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENhZGVuY2UgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfQ0FERU5DRVxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiQ2FkZW5jZSBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG4gICA5OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxNjpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxNzpcXHRcXHQgIHJlbWFpbmluZyBDYWRlbmNlIG5ldHdvcmsgY2FyZCBxdWVzdGlvbnMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcXG4gIDE4OlxcdFxcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBNQUNCXFxuICAyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfRE1BIFxcdTAwMjZcXHUwMDI2IENPTU1PTl9DTEtcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDI2OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAyNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDI4OlxcdFxcdGhlbHBcXG4gIDI5OlxcdFxcdCAgVGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBpbnRlcmZhY2UgaXMgZm91bmQgb24gbWFueSBBdG1lbCBBVDMyIGFuZFxcbiAgMzA6XFx0XFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcXG4gIDMxOlxcdFxcdCAgRXRoZXJuZXQgTUFDIGZvdW5kIGluIHNvbWUgQVJNIFNvQyBkZXZpY2VzKS4gIFNheSBZIHRvIGluY2x1ZGVcXG4gIDMyOlxcdFxcdCAgc3VwcG9ydCBmb3IgdGhlIE1BQ0IvR0VNIGNoaXAuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzU6XFx0XFx0ICB3aWxsIGJlIG1hY2IuXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuICAzODpcXHRcXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1BQ0JcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBNQUNCX1BDSVxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxcbiAgNTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjE0OjUzLjI4NzkwNjc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA5NTQ1MTYwNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFFFTVUtUmVsYXRlZCBOZXR3b3JraW5nIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgQ2FkZW5jZSBHRU0gYW5kIGl0cyBwcmVzZW5jZSBpbiBRRU1VLiBSaWdodCwgUUVNVSAqZG9lcyogZW11bGF0ZSB0aGUgQ2FkZW5jZSBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIsIHRoZSBgY2FkX2dlbS5jYCBkcml2ZXIuIEknbSByZWNhbGxpbmcgc3BlY2lmaWMgZXhhbXBsZXMsIGxpa2UgdGhvc2UgWGlsaW54IFp5bnEgYW5kIFp5bnFNUCBib2FyZHMsIGFuZCBldmVuIHRoZSBSSVNDLVYgTWljcm9jaGlwIFBvbGFyRmlyZSAodGhlIGljaWNsZS1raXQpIOKAkyB0aGV5IGFsbCBnZXQgc2ltdWxhdGVkIHVzaW5nIFFFTVUgd2l0aCB0aGF0IEdFTSBlbXVsYXRpb24uXG5cbkhtbSwgYnV0IHRoYXQgYnJpbmdzIHVwIGFub3RoZXIgcmVsYXRlZCBxdWVzdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hldGhlciB0aGUgYE1BQ0JfUENJYCBpcyBpbXBsZW1lbnRlZCBhcyBhIFBDSSBkcml2ZXIgb3IgaWYgaXQncyBtb3JlIHBsYXRmb3JtLXNwZWNpZmljLiBJIGtub3cgSSBjYW4gZmluZCB0aGF0IGluZm9ybWF0aW9uIGluIGBtYWNiX3BjaS5jYCwgc28gSSdsbCBnbyBjaGVjayB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoxNjo0Mi44MzMwNzExMTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBET0M6IENhZGVuY2UgR0VNIFBDSSB3cmFwcGVyLlxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoQykgMjAxNiBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zIC0gaHR0cHM6Ly93d3cuY2FkZW5jZS5jb21cXG4gICA2OlxcdCAqXFxuICAgNzpcXHQgKiBBdXRob3JzOiBSYWZhbCBPemllYmxvIFxcdTAwM2NyYWZhbG9AY2FkZW5jZS5jb21cXHUwMDNlXFxuICAgODpcXHQgKlxcdCAgICBCYXJ0b3N6IEZvbHRhIFxcdTAwM2NiZm9sdGFAY2FkZW5jZS5jb21cXHUwMDNlXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay1wcm92aWRlci5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXFwibWFjYi5oXFxcIlxcbiAgMTg6XFx0XFxuICAxOTpcXHQjZGVmaW5lIFBDSV9EUklWRVJfTkFNRSBcXFwibWFjYl9wY2lcXFwiXFxuICAyMDpcXHQjZGVmaW5lIFBMQVRfRFJJVkVSX05BTUUgXFxcIm1hY2JcXFwiXFxuICAyMTpcXHRcXG4gIDIyOlxcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9DRE5TX01BQ0IgMHhlMDA3XFxuICAyMzpcXHRcXG4gIDI0OlxcdCNkZWZpbmUgR0VNX1BDTEtfUkFURSA1MDAwMDAwMFxcbiAgMjU6XFx0I2RlZmluZSBHRU1fSENMS19SQVRFIDUwMDAwMDAwXFxuICAyNjpcXHRcXG4gIDI3OlxcdHN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRpbnQgZXJyO1xcbiAgMzA6XFx0XFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjtcXG4gIDMxOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBwbGF0X2luZm87XFxuICAzMjpcXHRcXHRzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIHBsYXRfZGF0YTtcXG4gIDMzOlxcdFxcdHN0cnVjdCByZXNvdXJjZSByZXNbMl07XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdC8qIGVuYWJsZSBwY2kgZGV2aWNlICovXFxuICAzNjpcXHRcXHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGNpKTtcXG4gIDM3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuICAzODpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgXFxcIkVuYWJsaW5nIFBDSSBkZXZpY2UgaGFzIGZhaWxlZDogJWRcXFwiLCBlcnIpO1xcbiAgMzk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gIDQwOlxcdFxcdH1cXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGNpKTtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0Lyogc2V0IHVwIHJlc291cmNlcyAqL1xcbiAgNDU6XFx0XFx0bWVtc2V0KHJlcywgMHgwMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBBUlJBWV9TSVpFKHJlcykpO1xcbiAgNDY6XFx0XFx0cmVzWzBdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7XFxuICA0NzpcXHRcXHRyZXNbMF0uZW5kID0gcGNpX3Jlc291cmNlX2VuZChwY2ksIDApO1xcbiAgNDg6XFx0XFx0cmVzWzBdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XFxuICA0OTpcXHRcXHRyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTtcXG4gIDUwOlxcdFxcdHJlc1sxXS5zdGFydCA9IHBjaV9pcnFfdmVjdG9yKHBjaSwgMCk7XFxuICA1MTpcXHRcXHRyZXNbMV0ubmFtZSA9IFBDSV9EUklWRVJfTkFNRTtcXG4gIDUyOlxcdFxcdHJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIFxcXCJFTUFDIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXFxcXG5cXFwiLFxcbiAgNTU6XFx0XFx0XFx0IFxcdTAwMjZyZXNbMF0uc3RhcnQpO1xcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHQvKiBzZXQgdXAgbWFjYiBwbGF0Zm9ybSBkYXRhICovXFxuICA1ODpcXHRcXHRtZW1zZXQoXFx1MDAyNnBsYXRfZGF0YSwgMCwgc2l6ZW9mKHBsYXRfZGF0YSkpO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQvKiBpbml0aWFsaXplIGNsb2NrcyAqL1xcbiAgNjE6XFx0XFx0cGxhdF9kYXRhLnBjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIFxcXCJwY2xrXFxcIiwgTlVMTCwgMCxcXG4gIDYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBHRU1fUENMS19SQVRFKTtcXG4gIDYzOlxcdFxcdGlmIChJU19FUlIocGxhdF9kYXRhLnBjbGspKSB7XFxuICA2NDpcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHBsYXRfZGF0YS5wY2xrKTtcXG4gIDY1OlxcdFxcdFxcdGdvdG8gZXJyX3BjbGtfcmVnaXN0ZXI7XFxuICA2NjpcXHRcXHR9XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdHBsYXRfZGF0YS5oY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBcXFwiaGNsa1xcXCIsIE5VTEwsIDAsXFxuICA2OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0VNX0hDTEtfUkFURSk7XFxuICA3MDpcXHRcXHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5oY2xrKSkge1xcbiAgNzE6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihwbGF0X2RhdGEuaGNsayk7XFxuICA3MjpcXHRcXHRcXHRnb3RvIGVycl9oY2xrX3JlZ2lzdGVyO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHQvKiBzZXQgdXAgcGxhdGZvcm0gZGV2aWNlIGluZm8gKi9cXG4gIDc2OlxcdFxcdG1lbXNldChcXHUwMDI2cGxhdF9pbmZvLCAwLCBzaXplb2YocGxhdF9pbmZvKSk7XFxuICA3NzpcXHRcXHRwbGF0X2luZm8ucGFyZW50ID0gXFx1MDAyNnBjaS1cXHUwMDNlZGV2O1xcbiAgNzg6XFx0XFx0cGxhdF9pbmZvLmZ3bm9kZSA9IHBjaS1cXHUwMDNlZGV2LmZ3bm9kZTtcXG4gIDc5OlxcdFxcdHBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTtcXG4gIDgwOlxcdFxcdHBsYXRfaW5mby5pZCA9IHBjaS1cXHUwMDNlZGV2Zm47XFxuICA4MTpcXHRcXHRwbGF0X2luZm8ucmVzID0gcmVzO1xcbiAgODI6XFx0XFx0cGxhdF9pbmZvLm51bV9yZXMgPSBBUlJBWV9TSVpFKHJlcyk7XFxuICA4MzpcXHRcXHRwbGF0X2luZm8uZGF0YSA9IFxcdTAwMjZwbGF0X2RhdGE7XFxuICA4NDpcXHRcXHRwbGF0X2luZm8uc2l6ZV9kYXRhID0gc2l6ZW9mKHBsYXRfZGF0YSk7XFxuICA4NTpcXHRcXHRwbGF0X2luZm8uZG1hX21hc2sgPSBwY2ktXFx1MDAzZWRtYV9tYXNrO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHQvKiByZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UgKi9cXG4gIDg4OlxcdFxcdHBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChcXHUwMDI2cGxhdF9pbmZvKTtcXG4gIDg5OlxcdFxcdGlmIChJU19FUlIocGRldikpIHtcXG4gIDkwOlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocGRldik7XFxuICA5MTpcXHRcXHRcXHRnb3RvIGVycl9wbGF0X2Rldl9yZWdpc3RlcjtcXG4gIDkyOlxcdFxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBjaSwgcGRldik7XFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdHJldHVybiAwO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRlcnJfcGxhdF9kZXZfcmVnaXN0ZXI6XFxuICA5OTpcXHRcXHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5oY2xrKTtcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoxNjo0Mi44MzMyMDU3NjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTIwNTI4ODk1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBjaGFuZ2VzIGJlaW5nIGV4YW1pbmVkIGluIGBtYWNiX21haW4uY2A6XG5cbioqRGl2aW5nIGludG8gdGhlIE1BQ0IgRHJpdmVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBtYWNiX21haW4uY2AgaGVyZS4gTGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3Mg4oCTIHdoYXQncyAqYWN0dWFsbHkqIGRpZmZlcmVudD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29kZSBhZGp1c3RtZW50cy5cblxuRmlyc3QsIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aG9zZSBrZXkgZnVuY3Rpb25zOiBgbWFjYl9wYWRfYW5kX2Zjc2AsIGBtYWNiX3N0YXJ0X3htaXRgLCBgbWFjYl90eF9tYXBgLCBgbWFjYl90eF9lcnJvcl90YXNrYCwgYW5kIGBtYWNiX3R4X2NvbXBsZXRlYC4gRWFjaCBvZiB0aGVzZSByZXByZXNlbnRzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgdHJhbnNtaXQgcGF0aCwgZnJvbSB0aGUgaW5pdGlhbCBmcmFtZSBwcmVwYXJhdGlvbiB0byB0aGUgZmluYWwgaGFuZGxpbmcgb2YgdGhlIHRyYW5zbWlzc2lvbidzIGNvbXBsZXRpb24gb3IgZmFpbHVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuZGFtZW50YWwgcHJvY2Vzc2VzIGFyZSBiZWluZyBtb2RpZmllZC4gSSdsbCBiZSBsb29raW5nIGZvciBjaGFuZ2VzIHRoYXQgbWlnaHQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgZml4IGJ1Z3MsIG9yIGludHJvZHVjZSBuZXcgZmVhdHVyZXMgaW4gdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzIG9mIHRoZSBNQUNCIGRyaXZlci4gSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBhbnkgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBhcyBjaGFuZ2VzIGluIG9uZSBtYXkgaW1wYWN0IGFub3RoZXIuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsLCBvciBhIGNyaXRpY2FsIGltcHJvdmVtZW50LCBsaWVzLCBJIHN1c3BlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NTcsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjE4OjM0Ljg4NjA5ODY0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjk4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDE1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDE1OlxcdFxcdCAqIFRoaXMgaXMgcmVxdWlyZWQgLSBhdCBsZWFzdCBmb3IgWnlucSwgd2hpY2ggb3RoZXJ3aXNlIGNhbGN1bGF0ZXNcXG4yNDE2OlxcdFxcdCAqIHdyb25nIFVEUCBoZWFkZXIgY2hlY2tzdW1zIGZvciBVRFAgcGFja2V0cyB3aXRoIFVEUCBkYXRhIGxlbiBcXHUwMDNjPTJcXG4yNDE3OlxcdFxcdCAqL1xcbjI0MTg6XFx0XFx0KihfX3N1bTE2ICopKHNrYl9jaGVja3N1bV9zdGFydChza2IpICsgc2tiLVxcdTAwM2Vjc3VtX29mZnNldCkgPSAwO1xcbjI0MTk6XFx0XFx0cmV0dXJuIDA7XFxuMjQyMDpcXHR9XFxuMjQyMTpcXHRcXG4yNDIyOlxcdC8qIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJubywgb3IgdGhlIEZDUyBieXRlcyBhcHBlbmRlZCAoMCBvciBFVEhfRkNTX0xFTikuICovXFxuMjQyMzpcXHRzdGF0aWMgaW50IG1hY2JfcGFkX2FuZF9mY3Moc3RydWN0IHNrX2J1ZmYgKipza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuMjQyNDpcXHR7XFxuMjQyNTpcXHRcXHRib29sIGNsb25lZCA9IHNrYl9jbG9uZWQoKnNrYikgfHwgc2tiX2hlYWRlcl9jbG9uZWQoKnNrYikgfHxcXG4yNDI2OlxcdFxcdFxcdCAgICAgIHNrYl9pc19ub25saW5lYXIoKnNrYik7XFxuMjQyNzpcXHRcXHRpbnQgcGFkbGVuID0gRVRIX1pMRU4gLSAoKnNrYiktXFx1MDAzZWxlbjtcXG4yNDI4OlxcdFxcdGludCB0YWlscm9vbSA9IHNrYl90YWlscm9vbSgqc2tiKTtcXG4yNDI5OlxcdFxcdHN0cnVjdCBza19idWZmICpuc2tiO1xcbjI0MzA6XFx0XFx0dTMyIGZjcztcXG4yNDMxOlxcdFxcbjI0MzI6XFx0XFx0aWYgKCEobmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSkgfHxcXG4yNDMzOlxcdFxcdCAgICAhKCgqc2tiKS1cXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHx8XFxuMjQzNDpcXHRcXHQgICAgc2tiX3NoaW5mbygqc2tiKS1cXHUwMDNlZ3NvX3NpemUgfHwgcHRwX29uZV9zdGVwX3N5bmMoKnNrYikpXFxuMjQzNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNDM2OlxcdFxcbjI0Mzc6XFx0XFx0aWYgKHBhZGxlbiBcXHUwMDNjPSAwKSB7XFxuMjQzODpcXHRcXHRcXHQvKiBGQ1MgY291bGQgYmUgYXBwZWRlZCB0byB0YWlscm9vbS4gKi9cXG4yNDM5OlxcdFxcdFxcdGlmICh0YWlscm9vbSBcXHUwMDNlPSBFVEhfRkNTX0xFTilcXG4yNDQwOlxcdFxcdFxcdFxcdGdvdG8gYWRkX2ZjcztcXG4yNDQxOlxcdFxcdFxcdC8qIE5vIHJvb20gZm9yIEZDUywgbmVlZCB0byByZWFsbG9jYXRlIHNrYi4gKi9cXG4yNDQyOlxcdFxcdFxcdGVsc2VcXG4yNDQzOlxcdFxcdFxcdFxcdHBhZGxlbiA9IEVUSF9GQ1NfTEVOO1xcbjI0NDQ6XFx0XFx0fSBlbHNlIHtcXG4yNDQ1OlxcdFxcdFxcdC8qIEFkZCByb29tIGZvciBGQ1MuICovXFxuMjQ0NjpcXHRcXHRcXHRwYWRsZW4gKz0gRVRIX0ZDU19MRU47XFxuMjQ0NzpcXHRcXHR9XFxuMjQ0ODpcXHRcXG4yNDQ5OlxcdFxcdGlmIChjbG9uZWQgfHwgdGFpbHJvb20gXFx1MDAzYyBwYWRsZW4pIHtcXG4yNDUwOlxcdFxcdFxcdG5za2IgPSBza2JfY29weV9leHBhbmQoKnNrYiwgMCwgcGFkbGVuLCBHRlBfQVRPTUlDKTtcXG4yNDUxOlxcdFxcdFxcdGlmICghbnNrYilcXG4yNDUyOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjI0NTM6XFx0XFxuMjQ1NDpcXHRcXHRcXHRkZXZfY29uc3VtZV9za2JfYW55KCpza2IpO1xcbjI0NTU6XFx0XFx0XFx0KnNrYiA9IG5za2I7XFxuMjQ1NjpcXHRcXHR9XFxuMjQ1NzpcXHRcXG4yNDU4OlxcdFxcdGlmIChwYWRsZW4gXFx1MDAzZSBFVEhfRkNTX0xFTilcXG4yNDU5OlxcdFxcdFxcdHNrYl9wdXRfemVybygqc2tiLCBwYWRsZW4gLSBFVEhfRkNTX0xFTik7XFxuMjQ2MDpcXHRcXG4yNDYxOlxcdGFkZF9mY3M6XFxuMjQ2MjpcXHRcXHQvKiBzZXQgRkNTIHRvIHBhY2tldCAqL1xcbjI0NjM6XFx0XFx0ZmNzID0gY3JjMzJfbGUofjAsICgqc2tiKS1cXHUwMDNlZGF0YSwgKCpza2IpLVxcdTAwM2VsZW4pO1xcbjI0NjQ6XFx0XFx0ZmNzID0gfmZjcztcXG4yNDY1OlxcdFxcbjI0NjY6XFx0XFx0c2tiX3B1dF91OCgqc2tiLCBmY3NcXHRcXHRcXHUwMDI2IDB4ZmYpO1xcbjI0Njc6XFx0XFx0c2tiX3B1dF91OCgqc2tiLCAoZmNzIFxcdTAwM2VcXHUwMDNlIDgpXFx0XFx1MDAyNiAweGZmKTtcXG4yNDY4OlxcdFxcdHNrYl9wdXRfdTgoKnNrYiwgKGZjcyBcXHUwMDNlXFx1MDAzZSAxNilcXHRcXHUwMDI2IDB4ZmYpO1xcbjI0Njk6XFx0XFx0c2tiX3B1dF91OCgqc2tiLCAoZmNzIFxcdTAwM2VcXHUwMDNlIDI0KVxcdFxcdTAwMjYgMHhmZik7XFxuMjQ3MDpcXHRcXG4yNDcxOlxcdFxcdHJldHVybiBFVEhfRkNTX0xFTjtcXG4yNDcyOlxcdH1cXG4yNDczOlxcdFxcbjI0NzQ6XFx0c3RhdGljIG5ldGRldl90eF90IG1hY2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjI0NzU6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4yNDc2OlxcdHtcXG4yNDc3OlxcdFxcdHN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuMjQ3ODpcXHRcXHR1bnNpZ25lZCBpbnQgcSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbjI0Nzk6XFx0XFx0dW5zaWduZWQgaW50IGRlc2NfY250LCBucl9mcmFncywgZnJhZ19zaXplLCBmO1xcbjI0ODA6XFx0XFx0c3RydWN0IG1hY2JfcXVldWUgKnF1ZXVlID0gXFx1MDAyNmJwLVxcdTAwM2VxdWV1ZXNbcV07XFxuMjQ4MTpcXHRcXHRuZXRkZXZfdHhfdCByZXQgPSBORVRERVZfVFhfT0s7XFxuMjQ4MjpcXHRcXHR1bnNpZ25lZCBpbnQgaGRybGVuO1xcbjI0ODM6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4yNDg0OlxcdFxcdGludCBmY3NfbGVuO1xcbjI0ODU6XFx0XFx0Ym9vbCBpc19sc287XFxuMjQ4NjpcXHRcXG4yNDg3OlxcdFxcdGlmIChtYWNiX2NsZWFyX2NzdW0oc2tiKSkge1xcbjI0ODg6XFx0XFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4yNDg5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjQ5MDpcXHRcXHR9XFxuMjQ5MTpcXHRcXG4yNDkyOlxcdFxcdGZjc19sZW4gPSBtYWNiX3BhZF9hbmRfZmNzKFxcdTAwMjZza2IsIG5ldGRldik7XFxuMjQ5MzpcXHRcXHRpZiAoZmNzX2xlbiBcXHUwMDNjIDApIHtcXG4yNDk0OlxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjE4OjM0Ljg4NjQzMTk5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjg4NTQ1MjQwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIE1BQ0IgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBgbWFjYl9wYWRfYW5kX2Zjc2AgZnVuY3Rpb24gYW5kIHJlbGF0ZWQgc3RhdGlzdGljcyB1cGRhdGVzIGluIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBzdGF0cyBjYWxjdWxhdGlvbiBjaGFuZ2UuIExldCdzIGRpZyBkZWVwZXIgdG8gc2VlIGlmIGl0IHdhcnJhbnRzIGZ1enppbmcgYXR0ZW50aW9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc3RhdGUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCAqb25seSogY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgY29uc3RhbnQgY2hhbmdlcyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiwgdW5yZWFjaGFibGUgY29kZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG9yIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIG5lZWRpbmcgc3BlY2lhbCBoYXJkd2FyZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJJcyBgbWFjYmAgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHdoaWNoIFN5emthbGxlciB1c2VzP1wiLiBJIGtub3cgc3l6a2FsbGVyIHJ1bnMgc3RhbmRhcmQgeDg2XzY0IGFuZCBBUk02NCBRRU1VIFZNcy4gQnV0IGRvZXMgc3RhbmRhcmQgUUVNVSB4ODZfNjQsIGZvciBleGFtcGxlLCBoYXZlIGEgQ2FkZW5jZSBNQUNCIGRldmljZSBpbml0aWFsaXplZD8gSXQgc2VlbXMgdGhhdCBvbiB4ODZfNjQgUUVNVSwgdGhlIENhZGVuY2UgTUFDQiBpcyBhIHBsYXRmb3JtIG9yIFNvQyBkZXZpY2UgKGxpa2UgdGhlIENhZGVuY2UgR0VNIG9uIFhpbGlueCBaeW5xIG9yIE1pY3JvY2hpcCBBVDkxKS4gU28gZG9lcyBRRU1VIHg4Nl82NCBoYXZlIHRoZSByZXF1aXJlZCBNQUNCIGRldmljZT8gSSBrbm93IHRoZSB4ODYgUUVNVSBlbnZpcm9ubWVudHMgSSB3b3JrIHdpdGggdXN1YWxseSBoYXZlIGUxMDAwLCBydGw4MTM5LCBvciB2aXJ0aW8tbmV0LCBub3QgdGhlIENhZGVuY2UgTUFDQiBQQ0kgZGV2aWNlcy4gV2hhdCBhYm91dCBBUk0vQVJNNjQgUUVNVT8gWWVzLCBgcWVtdS1zeXN0ZW0tYXJtIC1NIHp5bnEtYTlgIGVtdWxhdGVzIENhZGVuY2UgR0VNLiBCdXQgZG9lcyBzeXprYWxsZXIgdGFyZ2V0IHRoYXQ/IEl0IGxvb2tzIGxpa2UgU3l6a2FsbGVyIEFSTTY0IHJ1bnMgYC1NIHZpcnRgLCB3aGljaCB1c2VzIHZpcnRpby1uZXQuXG5cblNvLCBsZXQncyBsb29rIGF0IHRoaXMgY3JpdGVyaWEuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXM6IElzIGBtYWNiYCBhIGRyaXZlciBpbiBhIHZlbmRvci1zcGVjaWZpYyBOSUMgdGhhdCBuZWVkcyBzcGVjaWFsLCBub3QtZW11bGF0ZWQgaGFyZHdhcmUsIG9yIGlzIGl0IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVU/IEkgYWxzbyBoYXZlIHRvIGFzc2VzcyB0aGUgZnVuY3Rpb25hbCBpbXBhY3Qgb2YgdGhpcyBjb2RlIGNoYW5nZS4gTGV0J3Mgc2VlLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgY2hhbmdlcycgZnVuY3Rpb25hbCBpbXBhY3QuIEluIHRoZSBjb2RlLCB0aGUgY2hhbmdlIHN1YnRyYWN0cyBgdHhfc2tiLVx1MDAzZWZjc19sZW5gIGZyb20gYG5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlc2AuIFRoaXMgbG9va3MgbGlrZSBhIHNpbXBsZSBhZGp1c3RtZW50IG9mIHRoZSBgdHhfYnl0ZXNgIHN0YXRpc3RpYy4gVGhlIGNoYW5nZSBpcyBzZXR0aW5nIGB0eF9za2ItXHUwMDNlZmNzX2xlbmAgdG8gYEVUSF9GQ1NfTEVOYCAoNCkgd2hlbiBgbWFjYl9wYWRfYW5kX2Zjc2AgYXBwZW5kcyB0aGUgNC1ieXRlIEZDUyBzbyB0aGF0IHRoZSBzdGF0aXN0aWMgZXhjbHVkZXMgdGhpcy4gT2theSwgaXQncyBqdXN0IGZpeGluZyBhIHN0YXQsIGV4Y2x1ZGluZyB0aGUgc29mdHdhcmUtYWRkZWQgRkNTIGJ5dGVzLlxuXG5TbywgZG9lcyB0aGlzIHBhdGNoIGNoYW5nZSBhbnkgbG9naWMsIGRhdGEgcHJvY2Vzc2luZywgbWVtb3J5IHNhZmV0eSwgb3IgcGFja2V0IHRyYW5zbWlzc2lvbj8gTm8uIFRoZSBsb2dpYyBzdGF5cyB0aGUgc2FtZTogYG1hY2JfcGFkX2FuZF9mY3NgIHN0aWxsIHBhZHMgYW5kIGFwcGVuZHMgdGhlIEZDUy4gSXQgcmV0dXJucyBgRVRIX0ZDU19MRU5gIG5vdy4gVGhlIGBtYWNiX3R4X21hcGAgc2F2ZXMgdGhlIGB0eF9za2ItXHUwMDNlZmNzX2xlbmAuIFRoaXMgaXMgYSAqcHVyZWx5KiBhIHN0YXRzIGFkanVzdG1lbnQuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBhbGwgdGhlIGNoYW5nZXM6XG4xLiAgYG1hY2IuaGA6IEFkZGVkIGB1OCBmY3NfbGVuYCB0byBgc3RydWN0IG1hY2JfdHhfc2tiYC5cbjIuICBgbWFjYl9tYWluLmNgOiBVcGRhdGVzOlxuICAgICogICBTdWJ0cmFjdHMgYHR4X3NrYi1cdTAwM2VmY3NfbGVuYCBmcm9tIGBzdGF0cy50eF9ieXRlc2AgaW4gYG1hY2JfdHhfZXJyb3JfdGFza2AgYW5kIGBtYWNiX3R4X2NvbXBsZXRlYC5cbiAgICAqICAgVGFrZXMgYHU4IGZjc19sZW5gIGFyZ3VtZW50IGluIGBtYWNiX3R4X21hcGAgYW5kIHN0b3JlcyBpdC5cbiAgICAqICAgUmV0dXJucyBgRVRIX0ZDU19MRU5gIGZyb20gYG1hY2JfcGFkX2FuZF9mY3NgIGluc3RlYWQgb2YgYDBgLlxuICAgICogICBQYXNzZXMgYGZjc19sZW5gIGZyb20gYG1hY2JfcGFkX2FuZF9mY3NgIGludG8gYG1hY2JfdHhfbWFwYC5cblxuU28sIGl0J3MgYSBtaW5vciBzdGF0aXN0aWNzIGZpeCBpbiBhIHBsYXRmb3JtL1NvQyBFdGhlcm5ldCBkcml2ZXIgd2l0aCBubyBmdW5jdGlvbmFsIG9yIHNlY3VyaXR5IGltcGFjdC4gSXQncyBub3Qgd29ydGggZnV6emluZy4gSXQncyBpbiB0aGUgQ2FkZW5jZSBNQUNCIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgU29DIGhhcmR3YXJlIG9yIGEgbm9uLXN0YW5kYXJkIFFFTVUgbWFjaGluZSwgYnV0IGRvZXMgbm90IGFmZmVjdCBrZXJuZWwgYmVoYXZpb3IuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSBmb3JtYWwgcmVxdWlyZW1lbnRzLlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlXG4qICAgYEZvY3VzU3ltYm9sc2A6IFxcWyBdIChlbXB0eSwgYmVjYXVzZSBubyBzcGVjaWZpYyBmdW5jdGlvbnMgbmVlZCBmb2N1cylcbiogICBgRW5hYmxlQ29uZmlnc2A6IFxcWyBdIChlbXB0eSwgc2luY2Ugbm8gY29uZmlncyBhcmUgcmVxdWlyZWQpXG4qICAgYFJlYXNvbmluZ2A6IFwiVGhlIHBhdGNoIG9ubHkgYWRqdXN0cyB0aGUgbmV0d29yayBkZXZpY2UgdHhcXF9ieXRlcyBjb3VudGVyIGluIHRoZSBDYWRlbmNlIE1BQ0IgRXRoZXJuZXQgZHJpdmVyIHRvIGV4Y2x1ZGUgc29mdHdhcmVcblxuIiwiSW5wdXRUb2tlbnMiOjEwNjg4LCJPdXRwdXRUb2tlbnMiOjg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjIxOjIzLjc0MDk2MDQ0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlcidzIFRYIGJ5dGUgc3RhdGlzdGljcyBjYWxjdWxhdGlvbiB0byBzdWJ0cmFjdCBzb2Z0d2FyZS1hcHBlbmRlZCBGQ1MgYnl0ZXMuIEl0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIG9yIGNvbnRyb2wgZmxvdywgYW5kIHRhcmdldHMgU29DL2VtYmVkZGVkIGhhcmR3YXJlIG5vdCB1dGlsaXplZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlcidzIFRYIGJ5dGUgc3RhdGlzdGljcyBjYWxjdWxhdGlvbiB0byBzdWJ0cmFjdCBzb2Z0d2FyZS1hcHBlbmRlZCBGQ1MgYnl0ZXMuIEl0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIG9yIGNvbnRyb2wgZmxvdywgYW5kIHRhcmdldHMgU29DL2VtYmVkZGVkIGhhcmR3YXJlIG5vdCB1dGlsaXplZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjIxOjIzLjc0MTAwODUxMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv4m76[1] Phase: Running StartedAt: 2026-08-31 13:21:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv4m76[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-31 13:21:35 +0000 UTC FinishedAt: 2026-08-31 13:21:41 +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,}