Name: series-workflowqg5np Phase: Running StartedAt: 2026-07-14 09:12:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqg5np[0] Phase: Running StartedAt: 2026-07-14 09:12:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqg5np[0].run-triage Phase: Running StartedAt: 2026-07-14 09:12:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqg5np[0].run-triage(0) Phase: Running StartedAt: 2026-07-14 09:12:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHFjb21fYmFtX2RtdXhgIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIFF1YWxjb21tIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcyNDY5YTJlNzA0MGEzOTg3Y2E0NmI5NWQxZDFlYzYyOGQ0ZDljYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAxNCAwOTozNzo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sXG5pbmRleCAzMzc0NmMyMzg1MTNkNy4uMjdmMGZkZjI4NWMxN2QgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWxcbkBAIC0yMiw3ICYjNDM7MjIsMTMgQEAgZGVzY3JpcHRpb246IHxcbiBcbiBwcm9wZXJ0aWVzOlxuICAgY29tcGF0aWJsZTpcbi0gICAgY29uc3Q6IHFjb20sYmFtLWRtdXhcbiYjNDM7ICAgIG9uZU9mOlxuJiM0MzsgICAgICAtIGNvbnN0OiBxY29tLGJhbS1kbXV4XG4mIzQzOyAgICAgIC0gaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgIyBTaGlrcmFcbiYjNDM7ICAgICAgICAgICAgICAtIHFjb20sc2hpa3JhLWJhbS1kbXV4XG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiBxY29tLGJhbS1kbXV4XG4gXG4gICBpbnRlcnJ1cHRzOlxuICAgICBkZXNjcmlwdGlvbjpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC93d2FuL0tjb25maWdcbmluZGV4IDk1OGRiYzczNDdmYTg0Li4xYjEzM2M1NjIzMTYxNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnXG5AQCAtNjUsNiAmIzQzOzY1LDcgQEAgY29uZmlnIE1ISV9XV0FOX01CSU1cbiBjb25maWcgUUNPTV9CQU1fRE1VWFxuIFx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gQkFNLURNVVggV1dBTiBuZXR3b3JrIGRyaXZlclwmIzM0O1xuIFx0ZGVwZW5kcyBvbiAoRE1BX0VOR0lORSBcdTAwMjZcdTAwMjYgUE0gXHUwMDI2XHUwMDI2IFFDT01fU01FTV9TVEFURSkgfHwgQ09NUElMRV9URVNUXG4mIzQzO1x0c2VsZWN0IFFDT01fU0NNXG4gXHRoZWxwXG4gXHQgIFRoZSBCQU0gRGF0YSBNdWx0aXBsZXhlciBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIG5ldHdvcmsgZGF0YSBjaGFubmVsc1xuIFx0ICBvZiBtb2RlbXMgaW50ZWdyYXRlZCBpbnRvIG1hbnkgb2xkZXIgUXVhbGNvbW0gU29DcywgZS5nLiBRdWFsY29tbVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jIGIvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcbmluZGV4IGNjNmFjZThkNjQzNzFlLi4yNDcyMzBiNzIwZTYwMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuQEAgLTksMTAgJiM0Mzs5LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYWVuZ2luZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9xY29tL3NtZW1fc3RhdGUuaFx1MDAzZVxuQEAgLTYyLDYgJiM0Mzs2NCw3IEBAIHN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHtcbiBcdHN0cnVjdCBiYW1fZG11eCAqZG11eDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRkbWFfYWRkcl90IGFkZHI7XG4mIzQzO1x0dm9pZCAqcnhfdmlydDsgLyogbm9uLU5VTEw6IHNsb3QgaW4gdGhlIGNvaGVyZW50IFJYIGJsb2NrICovXG4gfTtcbiBcbiBzdHJ1Y3QgYmFtX2RtdXgge1xuQEAgLTc1LDYgJiM0Mzs3OCwxMCBAQCBzdHJ1Y3QgYmFtX2RtdXgge1xuIFx0c3RydWN0IGNvbXBsZXRpb24gcGNfYWNrX2NvbXBsZXRpb247XG4gXG4gXHRzdHJ1Y3QgZG1hX2NoYW4gKnJ4LCAqdHg7XG4mIzQzO1x0LyogU2luZ2xlIGNvaGVyZW50IGJsb2NrIGJhY2tpbmcgYWxsIFJYIGJ1ZmZlcnMsIE5VTEwgaWYgdW51c2VkICovXG4mIzQzO1x0dm9pZCAqcnhfYnVmO1xuJiM0MztcdGRtYV9hZGRyX3QgcnhfYnVmX2RtYTtcbiYjNDM7XHR1NjQgcnhfYnVmX3Blcm1zOyAvKiBTQ00gc291cmNlLVZNSUQgYml0bWFzayBvZiByeF9idWYgKi9cbiBcdHN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHJ4X3NrYnNbQkFNX0RNVVhfTlVNX1NLQl07XG4gXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSB0eF9za2JzW0JBTV9ETVVYX05VTV9TS0JdO1xuIFx0c3BpbmxvY2tfdCB0eF9sb2NrOyAvKiBQcm90ZWN0IHR4X3NrYnMsIHR4X25leHRfc2tiICovXG5AQCAtOTIsNiAmIzQzOzk5LDEwIEBAIHN0cnVjdCBiYW1fZG11eF9uZXRkZXYge1xuIFx0dTggY2g7XG4gfTtcbiBcbiYjNDM7c3RydWN0IGJhbV9kbXV4X2RhdGEge1xuJiM0MztcdHUzMiB2bWlkO1xuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgdm9pZCBiYW1fZG11eF9wY192b3RlKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgYm9vbCBlbmFibGUpXG4ge1xuIFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2ZG11eC1cdTAwM2VwY19hY2tfY29tcGxldGlvbik7XG5AQCAtMTExLDYgJiM0MzsxMjIsOSBAQCBzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX21hcChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSxcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBza2JfZG1hLVx1MDAzZWRtdXgtXHUwMDNlZGV2O1xuIFxuJiM0MztcdGlmIChza2JfZG1hLVx1MDAzZXJ4X3ZpcnQpIC8qIGNvaGVyZW50IFJYIHNsb3Q6IGFkZHIgcHJlLWFzc2lnbmVkICovXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4gXHRza2JfZG1hLVx1MDAzZWFkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIHNrYl9kbWEtXHUwMDNlc2tiLVx1MDAzZWRhdGEsIHNrYl9kbWEtXHUwMDNlc2tiLVx1MDAzZWxlbiwgZGlyKTtcbiBcdGlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIHNrYl9kbWEtXHUwMDNlYWRkcikpIHtcbiBcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBETUEgbWFwIGJ1ZmZlclxcblwmIzM0Oyk7XG5AQCAtMTI0LDYgJiM0MzsxMzgsOSBAQCBzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX21hcChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSxcbiBzdGF0aWMgdm9pZCBiYW1fZG11eF9za2JfZG1hX3VubWFwKHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hLFxuIFx0XHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxuIHtcbiYjNDM7XHRpZiAoc2tiX2RtYS1cdTAwM2VyeF92aXJ0KSAvKiBjb2hlcmVudCBSWCBzbG90OiBub3RoaW5nIHRvIHVubWFwICovXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0ZG1hX3VubWFwX3NpbmdsZShza2JfZG1hLVx1MDAzZWRtdXgtXHUwMDNlZGV2LCBza2JfZG1hLVx1MDAzZWFkZHIsIHNrYl9kbWEtXHUwMDNlc2tiLVx1MDAzZWxlbiwgZGlyKTtcbiBcdHNrYl9kbWEtXHUwMDNlYWRkciA9IDA7XG4gfVxuQEAgLTQ2OCw5ICYjNDM7NDg1LDEwIEBAIHN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4KHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKVxuIHtcbiBcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtXHUwMDNlZG11eDtcbiBcdHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYztcbiYjNDM7XHRzaXplX3QgbGVuID0gc2tiX2RtYS1cdTAwM2VyeF92aXJ0ID8gQkFNX0RNVVhfQlVGRkVSX1NJWkUgOiBza2JfZG1hLVx1MDAzZXNrYi1cdTAwM2VsZW47XG4gXG4gXHRkZXNjID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2luZ2xlKGRtdXgtXHUwMDNlcngsIHNrYl9kbWEtXHUwMDNlYWRkcixcbi1cdFx0XHRcdFx0ICAgc2tiX2RtYS1cdTAwM2Vza2ItXHUwMDNlbGVuLCBETUFfREVWX1RPX01FTSxcbiYjNDM7XHRcdFx0XHRcdCAgIGxlbiwgRE1BX0RFVl9UT19NRU0sXG4gXHRcdFx0XHRcdCAgIERNQV9QUkVQX0lOVEVSUlVQVCk7XG4gXHRpZiAoIWRlc2MpIHtcbiBcdFx0ZGV2X2VycihkbXV4LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHByZXBhcmUgUlggRE1BIGJ1ZmZlclxcblwmIzM0Oyk7XG5AQCAtNDg1LDYgJiM0Mzs1MDMsMTAgQEAgc3RhdGljIGJvb2wgYmFtX2RtdXhfc2tiX2RtYV9zdWJtaXRfcngoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXG4gXG4gc3RhdGljIGJvb2wgYmFtX2RtdXhfc2tiX2RtYV9xdWV1ZV9yeChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSwgZ2ZwX3QgZ2ZwKVxuIHtcbiYjNDM7XHQvKiBDb2hlcmVudCBSWCBzbG90cyBoYXZlIHJ4X3ZpcnQgYW5kIGFkZHIgcHJlLWFzc2lnbmVkIGF0IHByb2JlLiAqL1xuJiM0MztcdGlmIChza2JfZG1hLVx1MDAzZXJ4X3ZpcnQpXG4mIzQzO1x0XHRyZXR1cm4gYmFtX2RtdXhfc2tiX2RtYV9zdWJtaXRfcngoc2tiX2RtYSk7XG4mIzQzO1xuIFx0aWYgKCFza2JfZG1hLVx1MDAzZXNrYikge1xuIFx0XHRza2JfZG1hLVx1MDAzZXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihOVUxMLCBCQU1fRE1VWF9CVUZGRVJfU0laRSwgZ2ZwKTtcbiBcdFx0aWYgKCFza2JfZG1hLVx1MDAzZXNrYilcbkBAIC00OTksOSAmIzQzOzUyMSwxMCBAQCBzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX3F1ZXVlX3J4KHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hLCBnZnBfdCBnZlxuIHN0YXRpYyB2b2lkIGJhbV9kbXV4X2NtZF9kYXRhKHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKVxuIHtcbiBcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtXHUwMDNlZG11eDtcbi1cdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfZG1hLVx1MDAzZXNrYjtcbi1cdHN0cnVjdCBiYW1fZG11eF9oZHIgKmhkciA9IChzdHJ1Y3QgYmFtX2RtdXhfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1x0c3RydWN0IGJhbV9kbXV4X2hkciAqaGRyID0gc2tiX2RtYS1cdTAwM2VyeF92aXJ0ID8gc2tiX2RtYS1cdTAwM2VyeF92aXJ0IDpcbiYjNDM7XHRcdFx0XHQgICAoc3RydWN0IGJhbV9kbXV4X2hkciAqKXNrYl9kbWEtXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZG11eC1cdTAwM2VuZXRkZXZzW2hkci1cdTAwM2VjaF07XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdGlmICghbmV0ZGV2IHx8ICFuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiBcdFx0ZGV2X3dhcm4oZG11eC1cdTAwM2VkZXYsIFwmIzM0O0RhdGEgZm9yIGluYWN0aXZlIGNoYW5uZWwgJXVcXG5cJiMzNDssIGhkci1cdTAwM2VjaCk7XG5AQCAtNTE0LDEwICYjNDM7NTM3LDE4IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X2NtZF9kYXRhKHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRza2JfZG1hLVx1MDAzZXNrYiA9IE5VTEw7IC8qIEhhbmQgb3ZlciB0byBuZXR3b3JrIHN0YWNrICovXG4tXG4tXHRza2JfcHVsbChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRza2JfdHJpbShza2IsIGhkci1cdTAwM2VsZW4pO1xuJiM0MztcdGlmIChza2JfZG1hLVx1MDAzZXJ4X3ZpcnQpIHtcbiYjNDM7XHRcdC8qIENvaGVyZW50IGJsb2NrIGlzIG5vdCBwYWdlLWJhY2tlZDogY29weSBvdXQgdG8gYSByZWFsIHNrYiAqL1xuJiM0MztcdFx0c2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGhkci1cdTAwM2VsZW4pO1xuJiM0MztcdFx0aWYgKCFza2IpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdHNrYl9wdXRfZGF0YShza2IsICh1OCAqKXNrYl9kbWEtXHUwMDNlcnhfdmlydCAmIzQzOyBzaXplb2YoKmhkciksIGhkci1cdTAwM2VsZW4pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRza2IgPSBza2JfZG1hLVx1MDAzZXNrYjtcbiYjNDM7XHRcdHNrYl9kbWEtXHUwMDNlc2tiID0gTlVMTDsgLyogSGFuZCBvdmVyIHRvIG5ldHdvcmsgc3RhY2sgKi9cbiYjNDM7XHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbiYjNDM7XHRcdHNrYl90cmltKHNrYiwgaGRyLVx1MDAzZWxlbik7XG4mIzQzO1x0fVxuIFx0c2tiLVx1MDAzZWRldiA9IG5ldGRldjtcbiBcbiBcdC8qIE9ubHkgUmF3LUlQL1FNQVAgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyICovXG5AQCAtNTc0LDEwICYjNDM7NjA1LDE0IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3J4X2NhbGxiYWNrKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEgPSBkYXRhO1xuIFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gc2tiX2RtYS1cdTAwM2VkbXV4O1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kbWEtXHUwMDNlc2tiO1xuLVx0c3RydWN0IGJhbV9kbXV4X2hkciAqaGRyID0gKHN0cnVjdCBiYW1fZG11eF9oZHIgKilza2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgYmFtX2RtdXhfaGRyICpoZHI7XG4gXG4tXHRiYW1fZG11eF9za2JfZG1hX3VubWFwKHNrYl9kbWEsIERNQV9GUk9NX0RFVklDRSk7XG4mIzQzO1x0aWYgKHNrYl9kbWEtXHUwMDNlcnhfdmlydCkge1xuJiM0MztcdFx0aGRyID0gc2tiX2RtYS1cdTAwM2VyeF92aXJ0OyAvKiBjb2hlcmVudCBSWDogbm8gc2tiIHRvIHVubWFwICovXG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJhbV9kbXV4X3NrYl9kbWFfdW5tYXAoc2tiX2RtYSwgRE1BX0ZST01fREVWSUNFKTtcbiYjNDM7XHRcdGhkciA9IChzdHJ1Y3QgYmFtX2RtdXhfaGRyICopc2tiX2RtYS1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoaGRyLVx1MDAzZW1hZ2ljICE9IEJBTV9ETVVYX0hEUl9NQUdJQykge1xuIFx0XHRkZXZfZXJyKGRtdXgtXHUwMDNlZGV2LCBcJiMzNDtJbnZhbGlkIG1hZ2ljIGluIGhlYWRlcjogJSN4XFxuXCYjMzQ7LCBoZHItXHUwMDNlbWFnaWMpO1xuQEAgLTY0NCw2ICYjNDM7Njc5LDkgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfZnJlZV9za2JzKHN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHNrYnNbXSxcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJBTV9ETVVYX05VTV9TS0I7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hID0gXHUwMDI2c2tic1tpXTtcbiBcbiYjNDM7XHRcdGlmIChza2JfZG1hLVx1MDAzZXJ4X3ZpcnQpIC8qIGNvaGVyZW50IGJsb2NrIGZyZWVkIGF0IHJlbW92ZSAqL1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdGlmIChza2JfZG1hLVx1MDAzZWFkZHIpXG4gXHRcdFx0YmFtX2RtdXhfc2tiX2RtYV91bm1hcChza2JfZG1hLCBkaXIpO1xuIFx0XHRpZiAoc2tiX2RtYS1cdTAwM2Vza2IpIHtcbkBAIC03NjIsNiAmIzQzOzgwMCw3MSBAQCBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGJhbV9kbXV4X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBiYW1fZG11eF9hbGxvY19jb2hlcmVudF9yeChzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkbXV4LVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYmFtX2RtdXhfZGF0YSAqZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuJiM0MztcdHNpemVfdCBzaXplID0gQkFNX0RNVVhfTlVNX1NLQiAqIEJBTV9ETVVYX0JVRkZFUl9TSVpFO1xuJiM0MztcdHU2NCBzcmMgPSBCSVRfVUxMKFFDT01fU0NNX1ZNSURfSExPUyk7XG4mIzQzO1x0c3RydWN0IHFjb21fc2NtX3ZtcGVybSBkc3RbMl07XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkYXRhKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcWNvbV9zY21faXNfYXZhaWxhYmxlKCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVQUk9CRV9ERUZFUjtcbiYjNDM7XG4mIzQzO1x0ZHN0WzBdLnZtaWQgPSBRQ09NX1NDTV9WTUlEX0hMT1M7XG4mIzQzO1x0ZHN0WzBdLnBlcm0gPSBRQ09NX1NDTV9QRVJNX1JXO1xuJiM0MztcdGRzdFsxXS52bWlkID0gZGF0YS1cdTAwM2V2bWlkO1xuJiM0MztcdGRzdFsxXS5wZXJtID0gUUNPTV9TQ01fUEVSTV9SVztcbiYjNDM7XG4mIzQzO1x0ZG11eC1cdTAwM2VyeF9idWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBcdTAwMjZkbXV4LVx1MDAzZXJ4X2J1Zl9kbWEsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZG11eC1cdTAwM2VyeF9idWYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQkFNX0RNVVhfTlVNX1NLQjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGRtdXgtXHUwMDNlcnhfc2tic1tpXS5yeF92aXJ0ID0gZG11eC1cdTAwM2VyeF9idWYgJiM0MzsgaSAqIEJBTV9ETVVYX0JVRkZFUl9TSVpFO1xuJiM0MztcdFx0ZG11eC1cdTAwM2VyeF9za2JzW2ldLmFkZHIgPSBkbXV4LVx1MDAzZXJ4X2J1Zl9kbWEgJiM0MzsgaSAqIEJBTV9ETVVYX0JVRkZFUl9TSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcWNvbV9zY21fYXNzaWduX21lbShkbXV4LVx1MDAzZXJ4X2J1Zl9kbWEsIHNpemUsIFx1MDAyNnNyYywgZHN0LCBBUlJBWV9TSVpFKGRzdCkpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtTQ00gYXNzaWduIFJYIGJsb2NrIGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRkbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGRtdXgtXHUwMDNlcnhfYnVmLCBkbXV4LVx1MDAzZXJ4X2J1Zl9kbWEpO1xuJiM0MztcdFx0ZG11eC1cdTAwM2VyeF9idWYgPSBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1x0ZG11eC1cdTAwM2VyeF9idWZfcGVybXMgPSBzcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBiYW1fZG11eF9mcmVlX2NvaGVyZW50X3J4KHN0cnVjdCBiYW1fZG11eCAqZG11eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBxY29tX3NjbV92bXBlcm0gaGxvcyA9IHtcbiYjNDM7XHRcdC52bWlkID0gUUNPTV9TQ01fVk1JRF9ITE9TLFxuJiM0MztcdFx0LnBlcm0gPSBRQ09NX1NDTV9QRVJNX1JXLFxuJiM0MztcdH07XG4mIzQzO1x0c2l6ZV90IHNpemUgPSBCQU1fRE1VWF9OVU1fU0tCICogQkFNX0RNVVhfQlVGRkVSX1NJWkU7XG4mIzQzO1xuJiM0MztcdGlmICghZG11eC1cdTAwM2VyeF9idWYpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChkbXV4LVx1MDAzZXJ4X2J1Zl9wZXJtcykge1xuJiM0MztcdFx0aWYgKHFjb21fc2NtX2Fzc2lnbl9tZW0oZG11eC1cdTAwM2VyeF9idWZfZG1hLCBzaXplLCBcdTAwMjZkbXV4LVx1MDAzZXJ4X2J1Zl9wZXJtcyxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNmhsb3MsIDEpKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoZG11eC1cdTAwM2VkZXYsIFwmIzM0O1NDTSByZWNsYWltIFJYIGJsb2NrIGZhaWxlZDsgbGVha2luZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGRtdXgtXHUwMDNlcnhfYnVmX3Blcm1zID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRtYV9mcmVlX2NvaGVyZW50KGRtdXgtXHUwMDNlZGV2LCBzaXplLCBkbXV4LVx1MDAzZXJ4X2J1ZiwgZG11eC1cdTAwM2VyeF9idWZfZG1hKTtcbiYjNDM7XHRkbXV4LVx1MDAzZXJ4X2J1ZiA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuQEAgLTgwOSw2ICYjNDM7OTEyLDEwIEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0ZG11eC1cdTAwM2V0eF9za2JzW2ldLmRtdXggPSBkbXV4O1xuIFx0fVxuIFxuJiM0MztcdHJldCA9IGJhbV9kbXV4X2FsbG9jX2NvaGVyZW50X3J4KGRtdXgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdC8qIFJ1bnRpbWUgUE0gbWFuYWdlcyBvdXIgb3duIHBvd2VyIHZvdGUuXG4gXHQgKiBOb3RlIHRoYXQgdGhlIFJYIHBhdGggbWF5IGJlIGFjdGl2ZSBldmVuIGlmIHdlIGFyZSBydW50aW1lIHN1c3BlbmRlZCxcbiBcdCAqIHNpbmNlIGl0IGlzIGNvbnRyb2xsZWQgYnkgdGhlIHJlbW90ZSBzaWRlLlxuQEAgLTg0NSw2ICYjNDM7OTUyLDcgQEAgc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIGVycl9kaXNhYmxlX3BtOlxuIFx0cG1fcnVudGltZV9kaXNhYmxlKGRldik7XG4gXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XG4mIzQzO1x0YmFtX2RtdXhfZnJlZV9jb2hlcmVudF9yeChkbXV4KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTg3OSwxMyAmIzQzOzk4NywxOSBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGRpc2FibGVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbiBcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbiBcdGJhbV9kbXV4X2ZyZWVfc2ticyhkbXV4LVx1MDAzZXR4X3NrYnMsIERNQV9UT19ERVZJQ0UpO1xuJiM0MztcdGJhbV9kbXV4X2ZyZWVfY29oZXJlbnRfcngoZG11eCk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBiYW1fZG11eF9wbV9vcHMgPSB7XG4gXHRTRVRfUlVOVElNRV9QTV9PUFMoYmFtX2RtdXhfcnVudGltZV9zdXNwZW5kLCBiYW1fZG11eF9ydW50aW1lX3Jlc3VtZSwgTlVMTClcbiB9O1xuIFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJhbV9kbXV4X2RhdGEgc2hpa3JhX2RhdGEgPSB7XG4mIzQzO1x0LnZtaWQgPSBRQ09NX1NDTV9WTUlEX05BVixcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmFtX2RtdXhfb2ZfbWF0Y2hbXSA9IHtcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxzaGlrcmEtYmFtLWRtdXhcJiMzNDssIC5kYXRhID0gXHUwMDI2c2hpa3JhX2RhdGEgfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGJhbS1kbXV4XCYjMzQ7IH0sXG4gXHR7IC8qIHNlbnRpbmVsICovIH1cbiB9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE0bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHFjb21fYmFtX2RtdXhgIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIFF1YWxjb21tIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzI0NjlhMmU3MDQwYTM5ODdjYTQ2Yjk1ZDFkMWVjNjI4ZDRkOWNhZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDE0IDA5OjM3OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbAppbmRleCAzMzc0NmMyMzg1MTNkNy4uMjdmMGZkZjI4NWMxN2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sCkBAIC0yMiw3ICYjNDM7MjIsMTMgQEAgZGVzY3JpcHRpb246IHwKIAogcHJvcGVydGllczoKICAgY29tcGF0aWJsZToKLSAgICBjb25zdDogcWNvbSxiYW0tZG11eAomIzQzOyAgICBvbmVPZjoKJiM0MzsgICAgICAtIGNvbnN0OiBxY29tLGJhbS1kbXV4CiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgIyBTaGlrcmEKJiM0MzsgICAgICAgICAgICAgIC0gcWNvbSxzaGlrcmEtYmFtLWRtdXgKJiM0MzsgICAgICAgICAgLSBjb25zdDogcWNvbSxiYW0tZG11eAogCiAgIGludGVycnVwdHM6CiAgICAgZGVzY3JpcHRpb246CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC93d2FuL0tjb25maWcKaW5kZXggOTU4ZGJjNzM0N2ZhODQuLjFiMTMzYzU2MjMxNjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93d2FuL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnCkBAIC02NSw2ICYjNDM7NjUsNyBAQCBjb25maWcgTUhJX1dXQU5fTUJJTQogY29uZmlnIFFDT01fQkFNX0RNVVgKIAl0cmlzdGF0ZSAmIzM0O1F1YWxjb21tIEJBTS1ETVVYIFdXQU4gbmV0d29yayBkcml2ZXImIzM0OwogCWRlcGVuZHMgb24gKERNQV9FTkdJTkUgJmFtcDsmYW1wOyBQTSAmYW1wOyZhbXA7IFFDT01fU01FTV9TVEFURSkgfHwgQ09NUElMRV9URVNUCiYjNDM7CXNlbGVjdCBRQ09NX1NDTQogCWhlbHAKIAkgIFRoZSBCQU0gRGF0YSBNdWx0aXBsZXhlciBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIG5ldHdvcmsgZGF0YSBjaGFubmVscwogCSAgb2YgbW9kZW1zIGludGVncmF0ZWQgaW50byBtYW55IG9sZGVyIFF1YWxjb21tIFNvQ3MsIGUuZy4gUXVhbGNvbW0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jIGIvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMKaW5kZXggY2M2YWNlOGQ2NDM3MWUuLjI0NzIzMGI3MjBlNjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYwpAQCAtOSwxMCAmIzQzOzksMTIgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcHBpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWFlbmdpbmUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2FycC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BtX3J1bnRpbWUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zb2MvcWNvbS9zbWVtX3N0YXRlLmgmZ3Q7CkBAIC02Miw2ICYjNDM7NjQsNyBAQCBzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSB7CiAJc3RydWN0IGJhbV9kbXV4ICpkbXV4OwogCXN0cnVjdCBza19idWZmICpza2I7CiAJZG1hX2FkZHJfdCBhZGRyOwomIzQzOwl2b2lkICpyeF92aXJ0OyAvKiBub24tTlVMTDogc2xvdCBpbiB0aGUgY29oZXJlbnQgUlggYmxvY2sgKi8KIH07CiAKIHN0cnVjdCBiYW1fZG11eCB7CkBAIC03NSw2ICYjNDM7NzgsMTAgQEAgc3RydWN0IGJhbV9kbXV4IHsKIAlzdHJ1Y3QgY29tcGxldGlvbiBwY19hY2tfY29tcGxldGlvbjsKIAogCXN0cnVjdCBkbWFfY2hhbiAqcngsICp0eDsKJiM0MzsJLyogU2luZ2xlIGNvaGVyZW50IGJsb2NrIGJhY2tpbmcgYWxsIFJYIGJ1ZmZlcnMsIE5VTEwgaWYgdW51c2VkICovCiYjNDM7CXZvaWQgKnJ4X2J1ZjsKJiM0MzsJZG1hX2FkZHJfdCByeF9idWZfZG1hOwomIzQzOwl1NjQgcnhfYnVmX3Blcm1zOyAvKiBTQ00gc291cmNlLVZNSUQgYml0bWFzayBvZiByeF9idWYgKi8KIAlzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSByeF9za2JzW0JBTV9ETVVYX05VTV9TS0JdOwogCXN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHR4X3NrYnNbQkFNX0RNVVhfTlVNX1NLQl07CiAJc3BpbmxvY2tfdCB0eF9sb2NrOyAvKiBQcm90ZWN0IHR4X3NrYnMsIHR4X25leHRfc2tiICovCkBAIC05Miw2ICYjNDM7OTksMTAgQEAgc3RydWN0IGJhbV9kbXV4X25ldGRldiB7CiAJdTggY2g7CiB9OwogCiYjNDM7c3RydWN0IGJhbV9kbXV4X2RhdGEgewomIzQzOwl1MzIgdm1pZDsKJiM0Mzt9OwomIzQzOwogc3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZShzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgZW5hYmxlKQogewogCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7ZG11eC0mZ3Q7cGNfYWNrX2NvbXBsZXRpb24pOwpAQCAtMTExLDYgJiM0MzsxMjIsOSBAQCBzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX21hcChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSwKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBza2JfZG1hLSZndDtkbXV4LSZndDtkZXY7CiAKJiM0MzsJaWYgKHNrYl9kbWEtJmd0O3J4X3ZpcnQpIC8qIGNvaGVyZW50IFJYIHNsb3Q6IGFkZHIgcHJlLWFzc2lnbmVkICovCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKIAlza2JfZG1hLSZndDthZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBza2JfZG1hLSZndDtza2ItJmd0O2RhdGEsIHNrYl9kbWEtJmd0O3NrYi0mZ3Q7bGVuLCBkaXIpOwogCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIHNrYl9kbWEtJmd0O2FkZHIpKSB7CiAJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBETUEgbWFwIGJ1ZmZlclxuJiMzNDspOwpAQCAtMTI0LDYgJiM0MzsxMzgsOSBAQCBzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX21hcChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSwKIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3NrYl9kbWFfdW5tYXAoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEsCiAJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewomIzQzOwlpZiAoc2tiX2RtYS0mZ3Q7cnhfdmlydCkgLyogY29oZXJlbnQgUlggc2xvdDogbm90aGluZyB0byB1bm1hcCAqLwomIzQzOwkJcmV0dXJuOwomIzQzOwogCWRtYV91bm1hcF9zaW5nbGUoc2tiX2RtYS0mZ3Q7ZG11eC0mZ3Q7ZGV2LCBza2JfZG1hLSZndDthZGRyLCBza2JfZG1hLSZndDtza2ItJmd0O2xlbiwgZGlyKTsKIAlza2JfZG1hLSZndDthZGRyID0gMDsKIH0KQEAgLTQ2OCw5ICYjNDM7NDg1LDEwIEBAIHN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4KHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKQogewogCXN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtJmd0O2RtdXg7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjOwomIzQzOwlzaXplX3QgbGVuID0gc2tiX2RtYS0mZ3Q7cnhfdmlydCA/IEJBTV9ETVVYX0JVRkZFUl9TSVpFIDogc2tiX2RtYS0mZ3Q7c2tiLSZndDtsZW47CiAKIAlkZXNjID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2luZ2xlKGRtdXgtJmd0O3J4LCBza2JfZG1hLSZndDthZGRyLAotCQkJCQkgICBza2JfZG1hLSZndDtza2ItJmd0O2xlbiwgRE1BX0RFVl9UT19NRU0sCiYjNDM7CQkJCQkgICBsZW4sIERNQV9ERVZfVE9fTUVNLAogCQkJCQkgICBETUFfUFJFUF9JTlRFUlJVUFQpOwogCWlmICghZGVzYykgewogCQlkZXZfZXJyKGRtdXgtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcHJlcGFyZSBSWCBETUEgYnVmZmVyXG4mIzM0Oyk7CkBAIC00ODUsNiAmIzQzOzUwMywxMCBAQCBzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX3N1Ym1pdF9yeChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSkKIAogc3RhdGljIGJvb2wgYmFtX2RtdXhfc2tiX2RtYV9xdWV1ZV9yeChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSwgZ2ZwX3QgZ2ZwKQogewomIzQzOwkvKiBDb2hlcmVudCBSWCBzbG90cyBoYXZlIHJ4X3ZpcnQgYW5kIGFkZHIgcHJlLWFzc2lnbmVkIGF0IHByb2JlLiAqLwomIzQzOwlpZiAoc2tiX2RtYS0mZ3Q7cnhfdmlydCkKJiM0MzsJCXJldHVybiBiYW1fZG11eF9za2JfZG1hX3N1Ym1pdF9yeChza2JfZG1hKTsKJiM0MzsKIAlpZiAoIXNrYl9kbWEtJmd0O3NrYikgewogCQlza2JfZG1hLSZndDtza2IgPSBfX25ldGRldl9hbGxvY19za2IoTlVMTCwgQkFNX0RNVVhfQlVGRkVSX1NJWkUsIGdmcCk7CiAJCWlmICghc2tiX2RtYS0mZ3Q7c2tiKQpAQCAtNDk5LDkgJiM0Mzs1MjEsMTAgQEAgc3RhdGljIGJvb2wgYmFtX2RtdXhfc2tiX2RtYV9xdWV1ZV9yeChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSwgZ2ZwX3QgZ2YKIHN0YXRpYyB2b2lkIGJhbV9kbXV4X2NtZF9kYXRhKHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKQogewogCXN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtJmd0O2RtdXg7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kbWEtJmd0O3NrYjsKLQlzdHJ1Y3QgYmFtX2RtdXhfaGRyICpoZHIgPSAoc3RydWN0IGJhbV9kbXV4X2hkciAqKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJc3RydWN0IGJhbV9kbXV4X2hkciAqaGRyID0gc2tiX2RtYS0mZ3Q7cnhfdmlydCA/IHNrYl9kbWEtJmd0O3J4X3ZpcnQgOgomIzQzOwkJCQkgICAoc3RydWN0IGJhbV9kbXV4X2hkciAqKXNrYl9kbWEtJmd0O3NrYi0mZ3Q7ZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZG11eC0mZ3Q7bmV0ZGV2c1toZHItJmd0O2NoXTsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCWlmICghbmV0ZGV2IHx8ICFuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJZGV2X3dhcm4oZG11eC0mZ3Q7ZGV2LCAmIzM0O0RhdGEgZm9yIGluYWN0aXZlIGNoYW5uZWwgJXVcbiYjMzQ7LCBoZHItJmd0O2NoKTsKQEAgLTUxNCwxMCAmIzQzOzUzNywxOCBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9jbWRfZGF0YShzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSkKIAkJcmV0dXJuOwogCX0KIAotCXNrYl9kbWEtJmd0O3NrYiA9IE5VTEw7IC8qIEhhbmQgb3ZlciB0byBuZXR3b3JrIHN0YWNrICovCi0KLQlza2JfcHVsbChza2IsIHNpemVvZigqaGRyKSk7Ci0Jc2tiX3RyaW0oc2tiLCBoZHItJmd0O2xlbik7CiYjNDM7CWlmIChza2JfZG1hLSZndDtyeF92aXJ0KSB7CiYjNDM7CQkvKiBDb2hlcmVudCBibG9jayBpcyBub3QgcGFnZS1iYWNrZWQ6IGNvcHkgb3V0IHRvIGEgcmVhbCBza2IgKi8KJiM0MzsJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmV0ZGV2LCBoZHItJmd0O2xlbik7CiYjNDM7CQlpZiAoIXNrYikKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQlza2JfcHV0X2RhdGEoc2tiLCAodTggKilza2JfZG1hLSZndDtyeF92aXJ0ICYjNDM7IHNpemVvZigqaGRyKSwgaGRyLSZndDtsZW4pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc2tiID0gc2tiX2RtYS0mZ3Q7c2tiOwomIzQzOwkJc2tiX2RtYS0mZ3Q7c2tiID0gTlVMTDsgLyogSGFuZCBvdmVyIHRvIG5ldHdvcmsgc3RhY2sgKi8KJiM0MzsJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTsKJiM0MzsJCXNrYl90cmltKHNrYiwgaGRyLSZndDtsZW4pOwomIzQzOwl9CiAJc2tiLSZndDtkZXYgPSBuZXRkZXY7CiAKIAkvKiBPbmx5IFJhdy1JUC9RTUFQIGlzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciAqLwpAQCAtNTc0LDEwICYjNDM7NjA1LDE0IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3J4X2NhbGxiYWNrKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEgPSBkYXRhOwogCXN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtJmd0O2RtdXg7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kbWEtJmd0O3NrYjsKLQlzdHJ1Y3QgYmFtX2RtdXhfaGRyICpoZHIgPSAoc3RydWN0IGJhbV9kbXV4X2hkciAqKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJc3RydWN0IGJhbV9kbXV4X2hkciAqaGRyOwogCi0JYmFtX2RtdXhfc2tiX2RtYV91bm1hcChza2JfZG1hLCBETUFfRlJPTV9ERVZJQ0UpOwomIzQzOwlpZiAoc2tiX2RtYS0mZ3Q7cnhfdmlydCkgewomIzQzOwkJaGRyID0gc2tiX2RtYS0mZ3Q7cnhfdmlydDsgLyogY29oZXJlbnQgUlg6IG5vIHNrYiB0byB1bm1hcCAqLwomIzQzOwl9IGVsc2UgewomIzQzOwkJYmFtX2RtdXhfc2tiX2RtYV91bm1hcChza2JfZG1hLCBETUFfRlJPTV9ERVZJQ0UpOwomIzQzOwkJaGRyID0gKHN0cnVjdCBiYW1fZG11eF9oZHIgKilza2JfZG1hLSZndDtza2ItJmd0O2RhdGE7CiYjNDM7CX0KIAogCWlmIChoZHItJmd0O21hZ2ljICE9IEJBTV9ETVVYX0hEUl9NQUdJQykgewogCQlkZXZfZXJyKGRtdXgtJmd0O2RldiwgJiMzNDtJbnZhbGlkIG1hZ2ljIGluIGhlYWRlcjogJSN4XG4mIzM0OywgaGRyLSZndDttYWdpYyk7CkBAIC02NDQsNiAmIzQzOzY3OSw5IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X2ZyZWVfc2ticyhzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSBza2JzW10sCiAJZm9yIChpID0gMDsgaSAmbHQ7IEJBTV9ETVVYX05VTV9TS0I7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hID0gJmFtcDtza2JzW2ldOwogCiYjNDM7CQlpZiAoc2tiX2RtYS0mZ3Q7cnhfdmlydCkgLyogY29oZXJlbnQgYmxvY2sgZnJlZWQgYXQgcmVtb3ZlICovCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCWlmIChza2JfZG1hLSZndDthZGRyKQogCQkJYmFtX2RtdXhfc2tiX2RtYV91bm1hcChza2JfZG1hLCBkaXIpOwogCQlpZiAoc2tiX2RtYS0mZ3Q7c2tiKSB7CkBAIC03NjIsNiAmIzQzOzgwMCw3MSBAQCBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGJhbV9kbXV4X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYmFtX2RtdXhfYWxsb2NfY29oZXJlbnRfcngoc3RydWN0IGJhbV9kbXV4ICpkbXV4KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gZG11eC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgYmFtX2RtdXhfZGF0YSAqZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwomIzQzOwlzaXplX3Qgc2l6ZSA9IEJBTV9ETVVYX05VTV9TS0IgKiBCQU1fRE1VWF9CVUZGRVJfU0laRTsKJiM0MzsJdTY0IHNyYyA9IEJJVF9VTEwoUUNPTV9TQ01fVk1JRF9ITE9TKTsKJiM0MzsJc3RydWN0IHFjb21fc2NtX3ZtcGVybSBkc3RbMl07CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CWlmICghZGF0YSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKQomIzQzOwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CiYjNDM7CiYjNDM7CWRzdFswXS52bWlkID0gUUNPTV9TQ01fVk1JRF9ITE9TOwomIzQzOwlkc3RbMF0ucGVybSA9IFFDT01fU0NNX1BFUk1fUlc7CiYjNDM7CWRzdFsxXS52bWlkID0gZGF0YS0mZ3Q7dm1pZDsKJiM0MzsJZHN0WzFdLnBlcm0gPSBRQ09NX1NDTV9QRVJNX1JXOwomIzQzOwomIzQzOwlkbXV4LSZndDtyeF9idWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCAmYW1wO2RtdXgtJmd0O3J4X2J1Zl9kbWEsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRtdXgtJmd0O3J4X2J1ZikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQkFNX0RNVVhfTlVNX1NLQjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWRtdXgtJmd0O3J4X3NrYnNbaV0ucnhfdmlydCA9IGRtdXgtJmd0O3J4X2J1ZiAmIzQzOyBpICogQkFNX0RNVVhfQlVGRkVSX1NJWkU7CiYjNDM7CQlkbXV4LSZndDtyeF9za2JzW2ldLmFkZHIgPSBkbXV4LSZndDtyeF9idWZfZG1hICYjNDM7IGkgKiBCQU1fRE1VWF9CVUZGRVJfU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBxY29tX3NjbV9hc3NpZ25fbWVtKGRtdXgtJmd0O3J4X2J1Zl9kbWEsIHNpemUsICZhbXA7c3JjLCBkc3QsIEFSUkFZX1NJWkUoZHN0KSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O1NDTSBhc3NpZ24gUlggYmxvY2sgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGRtdXgtJmd0O3J4X2J1ZiwgZG11eC0mZ3Q7cnhfYnVmX2RtYSk7CiYjNDM7CQlkbXV4LSZndDtyeF9idWYgPSBOVUxMOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlkbXV4LSZndDtyeF9idWZfcGVybXMgPSBzcmM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBiYW1fZG11eF9mcmVlX2NvaGVyZW50X3J4KHN0cnVjdCBiYW1fZG11eCAqZG11eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY29tX3NjbV92bXBlcm0gaGxvcyA9IHsKJiM0MzsJCS52bWlkID0gUUNPTV9TQ01fVk1JRF9ITE9TLAomIzQzOwkJLnBlcm0gPSBRQ09NX1NDTV9QRVJNX1JXLAomIzQzOwl9OwomIzQzOwlzaXplX3Qgc2l6ZSA9IEJBTV9ETVVYX05VTV9TS0IgKiBCQU1fRE1VWF9CVUZGRVJfU0laRTsKJiM0MzsKJiM0MzsJaWYgKCFkbXV4LSZndDtyeF9idWYpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChkbXV4LSZndDtyeF9idWZfcGVybXMpIHsKJiM0MzsJCWlmIChxY29tX3NjbV9hc3NpZ25fbWVtKGRtdXgtJmd0O3J4X2J1Zl9kbWEsIHNpemUsICZhbXA7ZG11eC0mZ3Q7cnhfYnVmX3Blcm1zLAomIzQzOwkJCQkJJmFtcDtobG9zLCAxKSkgewomIzQzOwkJCWRldl9lcnIoZG11eC0mZ3Q7ZGV2LCAmIzM0O1NDTSByZWNsYWltIFJYIGJsb2NrIGZhaWxlZDsgbGVha2luZ1xuJiMzNDspOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCWRtdXgtJmd0O3J4X2J1Zl9wZXJtcyA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG1hX2ZyZWVfY29oZXJlbnQoZG11eC0mZ3Q7ZGV2LCBzaXplLCBkbXV4LSZndDtyeF9idWYsIGRtdXgtJmd0O3J4X2J1Zl9kbWEpOwomIzQzOwlkbXV4LSZndDtyeF9idWYgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKQEAgLTgwOSw2ICYjNDM7OTEyLDEwIEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJZG11eC0mZ3Q7dHhfc2tic1tpXS5kbXV4ID0gZG11eDsKIAl9CiAKJiM0MzsJcmV0ID0gYmFtX2RtdXhfYWxsb2NfY29oZXJlbnRfcngoZG11eCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCS8qIFJ1bnRpbWUgUE0gbWFuYWdlcyBvdXIgb3duIHBvd2VyIHZvdGUuCiAJICogTm90ZSB0aGF0IHRoZSBSWCBwYXRoIG1heSBiZSBhY3RpdmUgZXZlbiBpZiB3ZSBhcmUgcnVudGltZSBzdXNwZW5kZWQsCiAJICogc2luY2UgaXQgaXMgY29udHJvbGxlZCBieSB0aGUgcmVtb3RlIHNpZGUuCkBAIC04NDUsNiAmIzQzOzk1Miw3IEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIGVycl9kaXNhYmxlX3BtOgogCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOwogCXBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTsKJiM0MzsJYmFtX2RtdXhfZnJlZV9jb2hlcmVudF9yeChkbXV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04NzksMTMgJiM0Mzs5ODcsMTkgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJZGlzYWJsZV9pcnEoZG11eC0mZ3Q7cGNfaXJxKTsKIAliYW1fZG11eF9wb3dlcl9vZmYoZG11eCk7CiAJYmFtX2RtdXhfZnJlZV9za2JzKGRtdXgtJmd0O3R4X3NrYnMsIERNQV9UT19ERVZJQ0UpOwomIzQzOwliYW1fZG11eF9mcmVlX2NvaGVyZW50X3J4KGRtdXgpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYmFtX2RtdXhfcG1fb3BzID0gewogCVNFVF9SVU5USU1FX1BNX09QUyhiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQsIGJhbV9kbXV4X3J1bnRpbWVfcmVzdW1lLCBOVUxMKQogfTsKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFtX2RtdXhfZGF0YSBzaGlrcmFfZGF0YSA9IHsKJiM0MzsJLnZtaWQgPSBRQ09NX1NDTV9WTUlEX05BViwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmFtX2RtdXhfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cWNvbSxzaGlrcmEtYmFtLWRtdXgmIzM0OywgLmRhdGEgPSAmYW1wO3NoaWtyYV9kYXRhIH0sCiAJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cWNvbSxiYW0tZG11eCYjMzQ7IH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CiB9Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTcxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUUNPTSBCQU0gRE1VWCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY2AsIHNwZWNpZmljYWxseSB0aGUgb25lIHRoYXQgYWRkcyBzdXBwb3J0IGZvciAmIzM0O3Fjb20sc2hpa3JhLWJhbS1kbXV4LiYjMzQ7ICBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIFJYIGJ1ZmZlcnMuICBJdCYjMzk7cyBtb2RpZnlpbmcgYGJhbV9kbXV4X3Byb2JlYCB0byBjYWxsIGBiYW1fZG11eF9hbGxvY19jb2hlcmVudF9yeGAsIGFuZCB0aGF0JiMzOTtzIHRoZSBpbnRlcmVzdGluZyBiaXQgYmVjYXVzZSAqdGhhdCogZnVuY3Rpb24gdXNlcyBgcWNvbV9zY21fYXNzaWduX21lbWAuICBUaGlzIHN1Z2dlc3RzIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggYSBzcGVjaWZpYyBWTUlELCBsaWtlIGBRQ09NX1NDTV9WTUlEX05BVmAuICBUaGUgUlggcGF0aCAoYGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4YCwgZXRjLikgaXMgYWxzbyBhZGp1c3RlZCB0byBkZWFsIHdpdGggdGhpcyBjb2hlcmVudCBtZW1vcnkgYmxvY2suIEl04oCZcyBubyBsb25nZXIganVzdCBzdGFuZGFyZCBza2IgYWxsb2NhdGlvbi4KClRoZSBxdWVzdGlvbiBub3cgaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSwgYW5kIGlzIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmc/ICBGaXJzdCwgdGhlIGRyaXZlciBpdHNlbGYsIGBxY29tX2JhbV9kbXV4LmNgLCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiAgVGhlIGNvbmZpZyBpcyBgUUNPTV9CQU1fRE1VWGAsIHNvIHRoYXQmIzM5O3Mgc2ltcGxlIGVub3VnaCB0byBjaGVjay4gIFRoZSBjaGFuZ2VzICphcmUqIGZ1bmN0aW9uYWwsIHRoZXnigJlyZSBtZXNzaW5nIHdpdGggaG93IHRoZSBkcml2ZXIgYWxsb2NhdGVzIGFuZCBoYW5kbGVzIFJYIGJ1ZmZlcnMsIGEgY2xhc3NpYyBmdXp6aW5nIHRhcmdldC4KCkJ1dCwgY2FuIGl0IGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gIElzIGl0IHNvbWV0aGluZyB3ZSBjYW4gdGVzdCB3aXRoIEdDRSBvciBRRU1VPyAgSXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgJiMzNDtxY29tLGJhbS1kbXV4JiMzNDsgYW5kICYjMzQ7cWNvbSxzaGlrcmEtYmFtLWRtdXgmIzM0Oy4gIFNvLCB0byB0ZXN0IHRoaXMsIGRvIHdlIGtub3cgdGhlIGRldmljZSB0cmVlIHN0cnVjdHVyZSB3ZWxsIGVub3VnaCB0byBpbnN0YW50aWF0ZSB0aGUgcGxhdGZvcm0gZGV2aWNlPyAgSWYgbm90LCBjYW4gc3l6a2FsbGVyIGhhbmRsZSBpdCwgZWl0aGVyIHRocm91Z2ggZGV2aWNlIGluamVjdGlvbiwgcHNldWRvLWRldmljZXMsIG9yIG1vZGlmeWluZyB0aGUgZGV2aWNlIHRyZWU/ICBXZSBuZWVkIHRvIGxvb2sgYXQgaG93IHN5emthbGxlciBjYW4gaGFuZGxlIHRoaXMuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIHRoYXQgYHFjb21fc2NtX2Fzc2lnbl9tZW1gIGNhbGwuLi4gSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZy4gIElzIGBxY29tX3NjbV9pc19hdmFpbGFibGUoKWAgYWN0dWFsbHkgY2FsbGVkICpiZWZvcmUqIGBxY29tX3NjbV9hc3NpZ25fbWVtYD8gSWYgaXQgcmV0dXJucyBgZmFsc2VgLCBpdCByZXR1cm5zIGAtRVBST0JFX0RFRkVSYC4gU28sIGBxY29tX3NjbV9pc19hdmFpbGFibGUoKWAgcmV0dXJuaW5nIGBmYWxzZWAgY291bGQgY29tcGxldGVseSBwcmV2ZW50IHVzIGZyb20gZXZlbiBnZXR0aW5nIGludG8gdGhpcyBjcml0aWNhbCBwYXRoLiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoaXMgbW9yZSBjbG9zZWx5IGFuZCBzZWUgd2hhdCB0aGUgY29uZGl0aW9ucyBhcmUgZm9yIGBxY29tX3NjbV9pc19hdmFpbGFibGUoKWAgdG8gcmV0dXJuIGB0cnVlYCBvciBgZmFsc2VgIGFuZCB0aGVuLCBpZiBuZWNlc3NhcnksIHdyaXRlIHNvbWUgY29kZSB0byBtYWtlIHN1cmUgdGhhdCB3ZSByZWFjaCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxY29tX3NjbV9pc19hdmFpbGFibGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtcWNvbS1zcG0uYz0xMzA9c3RhdGljIGludCBzcG1fY3B1aWRsZV9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1xY29tLXNwbS5jLTEzMy1cbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLXFjb20tc3BtLmM6MTM0Olx0aWYgKCFxY29tX3NjbV9pc19hdmFpbGFibGUoKSlcbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLXFjb20tc3BtLmMtMTM1LVx0XHRyZXR1cm4gLUVQUk9CRV9ERUZFUjtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yMzA9c3RydWN0IHFjb21fdHptZW1fcG9vbCAqcWNvbV9zY21fZ2V0X3R6bWVtX3Bvb2wodm9pZClcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTIzMS17XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyMzI6XHRpZiAoIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjMzLVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yNTMyPXN0YXRpYyB2b2lkIHFjb21fc2NtX3F0ZWVfaW5pdChzdHJ1Y3QgcWNvbV9zY20gKnNjbSlcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNTU2LS8qKlxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjU1NzogKiBxY29tX3NjbV9pc19hdmFpbGFibGUoKSAtIENoZWNrcyBpZiBTQ00gaXMgYXZhaWxhYmxlXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNTU4LSAqL1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjU1OTpib29sIHFjb21fc2NtX2lzX2F2YWlsYWJsZSh2b2lkKVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjU2MC17XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjU2My19XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNTY0OkVYUE9SVF9TWU1CT0xfR1BMKHFjb21fc2NtX2lzX2F2YWlsYWJsZSk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNTY1LVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI3Mzc9c3RhdGljIGludCBxY29tX3NjbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI4MjktXHQvKlxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjgzMDpcdCAqIFBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBxY29tX3NjbV9pc19hdmFpbGFibGUoKS5cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI4MzEtXHQgKlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ211LmM9MTE5NT1zdGF0aWMgaW50IGE2eHhfZ211X3NlY3VyZV9pbml0KHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuYy0xMjE0LVx0XHQgKi9cbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ211LmM6MTIxNTpcdFx0aWYgKCFxY29tX3NjbV9pc19hdmFpbGFibGUoKSkge1xuZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuYy0xMjE2LVx0XHRcdGRldl93YXJuX29uY2UoZ3B1LVx1MDAzZWRldi1cdTAwM2VkZXYsXG4tLVxuZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jPTE2OT1pbnQgYWRyZW5vX3phcF9zaGFkZXJfbG9hZChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCB1MzIgcGFzaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jLTE3OC1cdC8qIFdlIG5lZWQgU0NNIHRvIGJlIGFibGUgdG8gbG9hZCB0aGUgZmlybXdhcmUgKi9cbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYzoxNzk6XHRpZiAoIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKSB7XG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMtMTgwLVx0XHREUk1fREVWX0VSUk9SKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtTQ00gaXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUvYXJtLXNtbXUtcWNvbS5jPTY2ND1zdGF0aWMgc3RydWN0IGFybV9zbW11X2RldmljZSAqcWNvbV9zbW11X2NyZWF0ZShzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11LFxuLS1cbmRyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11L2FybS1zbW11LXFjb20uYy02ODItXHQvKiBDaGVjayB0byBtYWtlIHN1cmUgcWNvbV9zY20gaGFzIGZpbmlzaGVkIHByb2JpbmcgKi9cbmRyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11L2FybS1zbW11LXFjb20uYzo2ODM6XHRpZiAoIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKVxuZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUvYXJtLXNtbXUtcWNvbS5jLTY4NC1cdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShzbW11LVx1MDAzZWRldiwgLUVQUk9CRV9ERUZFUixcbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vdmVudXMvZmlybXdhcmUuYz0yMTE9aW50IHZlbnVzX2Jvb3Qoc3RydWN0IHZlbnVzX2NvcmUgKmNvcmUpXG4tLVxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL3ZlbnVzL2Zpcm13YXJlLmMtMjIwLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19RQ09NX01EVF9MT0FERVIpIHx8XG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vdmVudXMvZmlybXdhcmUuYzoyMjE6XHQgICAgKGNvcmUtXHUwMDNldXNlX3R6IFx1MDAyNlx1MDAyNiAhcWNvbV9zY21faXNfYXZhaWxhYmxlKCkpKVxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL3ZlbnVzL2Zpcm13YXJlLmMtMjIyLVx0XHRyZXR1cm4gLUVQUk9CRV9ERUZFUjtcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jPTIzNjQ9c3RhdGljIGludCBmYXN0cnBjX3JwbXNnX3Byb2JlKHN0cnVjdCBycG1zZ19kZXZpY2UgKnJwZGV2KVxuLS1cbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMjM5NS1cdFx0dm1jb3VudCA9IDA7XG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjIzOTY6XHRlbHNlIGlmICghcWNvbV9zY21faXNfYXZhaWxhYmxlKCkpXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTIzOTctXHRcdHJldHVybiAtRVBST0JFX0RFRkVSO1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jPTcyMz1zdGF0aWMgZW51bSBpcGFfZmlybXdhcmVfbG9hZGVyIGlwYV9maXJtd2FyZV9sb2FkZXIoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jLTc2MC1cdC8qIFdlIG5lZWQgVHJ1c3QgWm9uZSB0byBsb2FkIGZpcm13YXJlOyBtYWtlIHN1cmUgaXQmIzM5O3MgYXZhaWxhYmxlICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYzo3NjE6XHRpZiAocWNvbV9zY21faXNfYXZhaWxhYmxlKCkpXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy03NjItXHRcdHJldHVybiBJUEFfTE9BREVSX1NFTEY7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM9ODAzPXN0YXRpYyBpbnQgYmFtX2RtdXhfYWxsb2NfY29oZXJlbnRfcngoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTgxNC1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjgxNTpcdGlmICghcWNvbV9zY21faXNfYXZhaWxhYmxlKCkpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy04MTYtXHRcdHJldHVybiAtRVBST0JFX0RFRkVSO1xuLS1cbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmM9MjA2Nz1zdGF0aWMgaW50IHE2djVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X21zcy5jLTIwNzktXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X21zcy5jOjIwODA6XHRpZiAoZGVzYy1cdTAwM2VuZWVkX21lbV9wcm90ZWN0aW9uIFx1MDAyNlx1MDAyNiAhcWNvbV9zY21faXNfYXZhaWxhYmxlKCkpXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X21zcy5jLTIwODEtXHRcdHJldHVybiAtRVBST0JFX0RFRkVSO1xuLS1cbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfcGFzLmM9NzMzPXN0YXRpYyBpbnQgcWNvbV9wYXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X3Bhcy5jLTc0NS1cbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfcGFzLmM6NzQ2Olx0aWYgKCFxY29tX3NjbV9pc19hdmFpbGFibGUoKSlcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfcGFzLmMtNzQ3LVx0XHRyZXR1cm4gLUVQUk9CRV9ERUZFUjtcbi0tXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV93Y25zcy5jPTU0OT1zdGF0aWMgaW50IHdjbnNzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fd2Nuc3MuYy01NTktXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV93Y25zcy5jOjU2MDpcdGlmICghcWNvbV9zY21faXNfYXZhaWxhYmxlKCkpXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV93Y25zcy5jLTU2MS1cdFx0cmV0dXJuIC1FUFJPQkVfREVGRVI7XG4tLVxuZHJpdmVycy9zb2MvcWNvbS9pY2UuYz01NjM9c3RhdGljIHN0cnVjdCBxY29tX2ljZSAqcWNvbV9pY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3NvYy9xY29tL2ljZS5jLTU2Ny1cbmRyaXZlcnMvc29jL3Fjb20vaWNlLmM6NTY4Olx0aWYgKCFxY29tX3NjbV9pc19hdmFpbGFibGUoKSlcbmRyaXZlcnMvc29jL3Fjb20vaWNlLmMtNTY5LVx0XHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcbi0tXG5kcml2ZXJzL3NvYy9xY29tL29jbWVtLmM9MjkzPXN0YXRpYyBpbnQgb2NtZW1fZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9zb2MvcWNvbS9vY21lbS5jLTI5OS1cbmRyaXZlcnMvc29jL3Fjb20vb2NtZW0uYzozMDA6XHRpZiAoIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKVxuZHJpdmVycy9zb2MvcWNvbS9vY21lbS5jLTMwMS1cdFx0cmV0dXJuIC1FUFJPQkVfREVGRVI7XG4tLVxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYz0xNzE9c3RhdGljIGludCBxY29tX3JtdGZzX21lbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmMtMjU4LVx0fSBlbHNlIGlmICghcmV0KSB7XG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jOjI1OTpcdFx0aWYgKCFxY29tX3NjbV9pc19hdmFpbGFibGUoKSkge1xuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYy0yNjAtXHRcdFx0cmV0ID0gLUVQUk9CRV9ERUZFUjtcbi0tXG5kcml2ZXJzL3RoZXJtYWwvcWNvbS9sbWguYz05Nz1zdGF0aWMgaW50IGxtaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvdGhlcm1hbC9xY29tL2xtaC5jLTEwNi1cbmRyaXZlcnMvdGhlcm1hbC9xY29tL2xtaC5jOjEwNzpcdGlmICghcWNvbV9zY21faXNfYXZhaWxhYmxlKCkpXG5kcml2ZXJzL3RoZXJtYWwvcWNvbS9sbWguYy0xMDgtXHRcdHJldHVybiAtRVBST0JFX0RFRkVSO1xuLS1cbmluY2x1ZGUvbGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oPTQ5PWVudW0gcWNvbV9zY21faWNlX2NpcGhlciB7XG4tLVxuaW5jbHVkZS9saW51eC9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmgtNjEtXG5pbmNsdWRlL2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaDo2Mjpib29sIHFjb21fc2NtX2lzX2F2YWlsYWJsZSh2b2lkKTtcbmluY2x1ZGUvbGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oLTYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTQ00gQXZhaWxhYmlsaXR5OiBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIFNlY3VyZSBDaGFubmVsIE1hbmFnZXIgKFNDTSkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaG93IHdlIGRldGVybWluZSBpZiBpdCYjMzk7cyBiZWVuIHByb2JlZC4gVGhlIGZ1bmN0aW9uIGBxY29tX3NjbV9pc19hdmFpbGFibGUoKWAgaXMgdGhlIGtleS4gSXQmIzM5O3Mgc3VwcG9zZWQgdG8gcmV0dXJuIGB0cnVlYCBpZiB0aGUgZHJpdmVyLCBsb2NhdGVkIGluIGBkcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uY2AsIGlzIGluaXRpYWxpemVkIGFuZCByZWFkeSB0byBnby4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBnb2luZyB0byBiZSBhdmFpbGFibGUgdW5kZXIgZW11bGF0aW9uLCBsaWtlIGluIFFFTVUsIG9yIG9uIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8mIzM0OyBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBxY29tX3NjbWAgaXMgZXZlbiBwcmVzZW50IGFuZCB3b3JraW5nIGluIHRob3NlIGVudmlyb25tZW50cy4gVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRldGVjdGlvbiBwcm9jZXNzLCBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgYHFjb21fc2NtX3Byb2JlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGRyaXZlciYjMzk7cyBjb2RlIGluIGBkcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uY2AuIFRoYXQgc2hvdWxkIGNsYXJpZnkgaG93IHRoZSBkcml2ZXIgZGV0ZXJtaW5lcyBpdHMgb3duIGF2YWlsYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxY29tX3NjbV9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yNTU5PWJvb2wgcWNvbV9zY21faXNfYXZhaWxhYmxlKHZvaWQpXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNTYwLXtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI1NjE6XHQvKiBQYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHFjb21fc2NtX3Byb2JlICovXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNTYyLVx0cmV0dXJuICEhc21wX2xvYWRfYWNxdWlyZShcdTAwMjZfX3NjbSk7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjczNT1NT0RVTEVfUEFSTV9ERVNDKGRvd25sb2FkX21vZGUsIFwmIzM0O2Rvd25sb2FkIG1vZGU6IG9mZi8wL04gZm9yIG5vIGR1bXAgbW9kZSwgZnVsbC9vbi8xL1kgZm9yIGZ1bGwgZHVtcCBtb2RlLCBtaW5pIGZvciBtaW5pZHVtcCBtb2RlIGFuZCBmdWxsLG1pbmkgZm9yIGJvdGggZnVsbCBhbmQgbS4uLlxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjczNi1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI3Mzc6c3RhdGljIGludCBxY29tX3NjbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjczOC17XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9Mjg5NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBxY29tX3NjbV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjkwMC1cdH0sXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyOTAxOlx0LnByb2JlID0gcWNvbV9zY21fcHJvYmUsXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yOTAyLVx0LnNodXRkb3duID0gcWNvbV9zY21fc2h1dGRvd24sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBkaXNzZWN0aW5nIGBxY29tX3NjbV9wcm9iZWA6CgoqKkFuYWx5emluZyBgcWNvbV9zY21fcHJvYmVgKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB3aGF0IGBxY29tX3NjbV9wcm9iZWAgYWN0dWFsbHkgKmRvZXMqLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCBpdHMgZnVuY3Rpb25hbGl0eS4gV2hhdCYjMzk7cyBpdCBkZXNpZ25lZCB0byBhY2NvbXBsaXNoPyBXaGF0JiMzOTtzIHRoZSBjb3JlIHB1cnBvc2U/CgpCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcC4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgZGV2aWNlIHRoaXMgcHJvYmUgZnVuY3Rpb24gaXMgdWx0aW1hdGVseSBnb2luZyB0byBiaW5kIHRvLiBJcyBpdCBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2UgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGJsb2NrLCBvciBpcyBpdCBtb3JlIGdlbmVyaWM/IFVuZGVyc3RhbmRpbmcgdGhhdCBiaW5kaW5nIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbiBpdHNlbGYuIFRoZSBkZXZpY2UgaXMgdGhlIGNyaXRpY2FsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWNvbV9zY21fZHRfbWF0Y2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9Mjg3NT1zdGF0aWMgdm9pZCBxY29tX3NjbV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI4ODAtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyODgxOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHFjb21fc2NtX2R0X21hdGNoW10gPSB7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yODgyLVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sc2NtXCYjMzQ7IH0sXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjg5Mi19O1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6Mjg5MzpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBxY29tX3NjbV9kdF9tYXRjaCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yODk0LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9Mjg5NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBxY29tX3NjbV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjg5Ny1cdFx0Lm5hbWVcdD0gXCYjMzQ7cWNvbV9zY21cJiMzNDssXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyODk4Olx0XHQub2ZfbWF0Y2hfdGFibGUgPSBxY29tX3NjbV9kdF9tYXRjaCxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI4OTktXHRcdC5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3l6a2FsbGVyJiMzOTtzIFBvdGVudGlhbCBmb3IgVHJpZ2dlcmluZyBRdWFsY29tbSBEcml2ZXIgQnVncyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggdGhpcyBgcWNvbV9zY21gIGFuZCB0aGUgYHFjb20sc2hpa3JhLWJhbS1kbXV4YCBkcml2ZXJzLiBUaGUgY29yZSBxdWVzdGlvbiBpczogY2FuIHN5emthbGxlciBhY3R1YWxseSAqaW5qZWN0KiB0aGVzZSBkZXZpY2VzIG9yIHRyaWdnZXIgdGhlaXIgcHJvYmluZz8KCkZpcnN0IHRob3VnaHQgaXMsIGRvZXMgc3l6a2FsbGVyIGhhdmUgbWVjaGFuaXNtcyB0byBhZGQgcGxhdGZvcm0gZGV2aWNlcywgbGlrZSBgc3l6X2Rldl9jcmVhdGVgIG9yIGV2ZW4gYSBoeXBvdGhldGljYWwgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYD8gV2FpdCwgbm8sIHRoZXJlIGlzbiYjMzk7dCBhIGRpcmVjdCBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgIGNhbGwuIEJ1dCwgc3l6a2FsbGVyIGRvZXMgaGF2ZSBvdGhlciBzeXN0ZW0gY2FsbHMgbGlrZSBgc3l6X2luaXRfbmV0X3NvY2tldGAsIGBzeXpfbW91bnRgLCBvciBgc3l6X29wZW5gIHRoYXQgKm1pZ2h0KiBiZSB1c2VkLgoKVGhlIGNhdGNoIGlzLCBzeXprYWxsZXIgcHJpbWFyaWx5IHVzZXMgUUVNVSBvciBHQ0UgdmlydHVhbCBtYWNoaW5lcyBmb3IgdGVzdGluZy4gSXMgYHFjb21fc2NtYCBldmVuICpwcmVzZW50KiBpbiB0aG9zZSBlbnZpcm9ubWVudHM/IEdlbmVyYWxseSwgc3l6a2FsbGVyJiMzOTtzIHN0YW5kYXJkIHNldHVwIHVzZXMgZ2VuZXJpYyB4ODZfNjQgb3IgYXJtNjQgVk1zLiBJZiBpdCYjMzk7cyBvbiBhbiBhcm02NCBWTSwgdGhlIGRldmljZSB0cmVlIG1pZ2h0IG5vdCBpbmNsdWRlIGBxY29tLHNjbWAuIFNvLCBjYW4gc3l6a2FsbGVyIGdldCBhcm91bmQgdGhpcz8gV2VsbCwgaXQgKmRvZXMqIGhhdmUgdGhpcyBwc2V1ZG8tZGV2aWNlIGluamVjdG9yLCBhbmQsIGFnYWluLCBtYXliZSBgc3l6X2Rldl9jcmVhdGVgIGNvdWxkIHdvcmsuIFdhaXQsIGxldCBtZSBjaGVjaywgZG9lcyBgc3l6a2FsbGVyYCBoYXZlIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGA/IE5vLCB0aGF0JiMzOTtzIG5vdCByaWdodC4gSG1tLCBtb3JlIGF2ZW51ZXMsIGl0IHVzZXMgY2FsbHMgbGlrZSBgc3l6X3VzYl9jb25uZWN0YCBvciBgc3l6XzgwMjExX2luamVjdF9mcmFtZWAuCgpUaGUga2V5IHRoaW5nIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiB0cmlnZ2VyIGBiYW1fZG11eF9wcm9iZWAuIFdpdGhvdXQgYHFjb20sc2hpa3JhLWJhbS1kbXV4YCBpbiB0aGUgZGV2aWNlIHRyZWUsIHRoZSBkcml2ZXIgd29uJiMzOTt0IHByb2JlIHVubGVzcyBpdCBjYW4gaW5zdGFudGlhdGUgcGxhdGZvcm0gZGV2aWNlcy4gQW5kIGFnYWluLCBubywgc3l6a2FsbGVyICpkb2VzbiYjMzk7dCogZ2VuZXJhbGx5IGhhdmUgYSBkaXJlY3Qgd2F5IHRvIGluc3RhbnRpYXRlIHRob3NlLCB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBwc2V1ZG8tZGV2aWNlLgoKQnV0IHdhaXQsIHRoZXJlIGlzIGBzeXNmc2AhIFN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSBiaW5kL3VuYmluZCBkZXZpY2VzIHRocm91Z2ggYHN5c2ZzYCwgb3IgZXZlbiB1c2UgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgaWYgdGhlcmUmIzM5O3MgYW4gYXBwcm9wcmlhdGUgaW50ZXJmYWNlLiBIYW5nIG9uLCBubywgSSYjMzk7bSBzdHVjayBvbiB0aGlzIGlkZWEsIGlzIHRoZXJlIGBzeXpfZGV2X2NyZWF0ZWA/IE5vLgoKT2theSwgbGV0JiMzOTtzIGJhY2sgdXAgYSBiaXQuIElzIGBxY29tX3NjbWAgKnJlYWNoYWJsZSo/IElmIGBxY29tX3NjbV9pc19hdmFpbGFibGUoKWAgcmV0dXJucyBmYWxzZSwgdGhlbiBgYmFtX2RtdXhfYWxsb2NfY29oZXJlbnRfcnhgIHJldHVybnMgYC1FUFJPQkVfREVGRVJgLiBUaGlzIHdpbGwgbGVhZCB0byB0aGUgcHJvYmUgYmVpbmcgZGVmZXJyZWQgYW5kIHBvc3NpYmx5IG5ldmVyIGV4ZWN1dGVkLiBUaGVyZWZvcmUsIGlmIGBxY29tX3NjbWAgKm5ldmVyKiBnZXRzIHByb2JlZCwgYGJhbV9kbXV4YCB3aWxsIGFsc28gZmFpbCB0byBwcm9iZS4KClNvLCBob3cgZG9lcyBgcWNvbV9zY21gIGdldCBwcm9iZWQ/IEl0IG5lZWRzIGBxY29tLHNjbWAgaW4gdGhlIGRldmljZSB0cmVlLiBJZiB3ZSYjMzk7cmUgcnVubmluZyBzeXprYWxsZXIgb24gYSBnZW5lcmljIGFybTY0IFZNLCB0aGF0JiMzOTtzIGxpa2VseSAqbm90KiBwcmVzZW50LiBJbXBvcnRhbnRseSwgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGZ1enogZGV2aWNlIHRyZWUgcGFyc2luZyBieSBpbmplY3RpbmcgYXJiaXRyYXJ5IG5vZGVzLiBCdXQsIG1heWJlIHN5emthbGxlciAqY291bGQqIHJ1biBvbiBhIGJvYXJkIHRoYXQgKmRvZXMqIGhhdmUgYHFjb20sc2NtYD8gSG1tLCBuby4gU3l6a2FsbGVyJiMzOTtzIHR5cGljYWwgdGFyZ2V0IGlzIGBxZW11LXN5c3RlbS1hYXJjaDY0IC1tYWNoaW5lIHZpcnRgLiBEb2VzIHRoZSBgdmlydGAgbWFjaGluZSBoYXZlIGBxY29tLHNjbWA/IE5vLgoKV2FpdC4gRG9lcyBzeXprYWxsZXIgaGF2ZSBhIHdheSB0byB0ZXN0ICphbnkqIGBxY29tYCBkcml2ZXJzPyBPa2F5LCBsZXQmIzM5O3MgZm9jdXMgb24gaWYgdGhlcmUgYXJlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIGBxY29tX2JhbV9kbXV4YCBhbmQgZ28gZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWNvbV9iYW1fZG11eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtNQUlOVEFJTkVSUz0yMjEwMT1GOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWxcbk1BSU5UQUlORVJTOjIyMTAyOkY6XHRkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuTUFJTlRBSU5FUlMtMjIxMDMtXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTY1PWNvbmZpZyBRQ09NX0JBTV9ETVVYXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTc2LVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo3NzpcdCAgY2FsbGVkIHFjb21fYmFtX2RtdXguXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNzgtXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfTUhJX1dXQU5fTUJJTSkgJiM0Mzs9IG1oaV93d2FuX21iaW0ub1xuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfUUNPTV9CQU1fRE1VWCkgJiM0Mzs9IHFjb21fYmFtX2RtdXgub1xuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZS0xNC1vYmotJChDT05GSUdfUlBNU0dfV1dBTl9DVFJMKSAmIzQzOz0gcnBtc2dfd3dhbl9jdHJsLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYHFjb21fYmFtX2RtdXhgIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYSBxdWVzdGlvbiBwb3BzIHVwOiBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBzcGVjaWZpYyBkZXNjcmlwdGlvbnMgZm9yIGBxY29tX2JhbV9kbXV4YC4gSW50ZXJlc3RpbmcsIGJ1dCB0aGUgYXV0aG9yIGlzIGxpc3RlZCBhcyBgc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0O2AsIHdoaWNoIHN1Z2dlc3RzIHRoaXMgaXMgYSBwYXRjaCBiZWluZyB0ZXN0ZWQgKmJ5KiBzeXprYWxsZXIuIFRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBwYXRoIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBpbnN0cnVjdGlvbnMgaW5kaWNhdGUgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIGludm9sdmVzIHVucmVhY2hhYmxlIHNlY3Rpb25zIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgc3BlY2lmaWNhbGx5IHdoZW4gZW1wbG95aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLgoKU28sIHRoZSBrZXkgcXVlc3Rpb24gaXM6IGlzIGBxY29tX2JhbV9kbXV4YCByZWFjaGFibGUgaW4gUUVNVT8gSXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHJpZ2h0PyBXaGljaCBtZWFucyBpdCB0eXBpY2FsbHkgYXR0YWNoZXMgdG8gZGV2aWNlcyBkZXNjcmliZWQgaW4gdGhlIERldmljZSBUcmVlIG9yIEFDUEkgdGFibGVzLiAgVW5sZXNzIHRoZXJlJiMzOTtzIGEgbWVjaGFuaXNtIHRvIGluc3RhbnRpYXRlIGBxY29tLHNoaWtyYS1iYW0tZG11eGAgYW5kIGBxY29tLHNjbWAgZnJvbSB1c2VyIHNwYWNlLCBpdCYjMzk7cyBhIGRlYWQgZW5kLiBDYW4gSSBpbnN0YW50aWF0ZSBwbGF0Zm9ybSBkZXZpY2VzIGZyb20gdXNlcnNwYWNlPyBBaCwgeWVzLCBpZiBgQ09ORklHX09GX09WRVJMQVlgIGlzIGVuYWJsZWQsIGFuZCB0aGVyZeKAmXMgYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGZvciBEZXZpY2UgVHJlZSBPdmVybGF5cyAobGlrZSBjb25maWdmcyksIHRoZW4gaXQmIzM5O3MgcG9zc2libGUuIERvZXMgc3l6a2FsbGVyIGxldmVyYWdlIERUIG92ZXJsYXlzIGZvciB0aGlzIGtpbmQgb2YgdGVzdGluZz8gTm8sIGN1cnJlbnQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgdGhhdCBmdW5jdGlvbmFsaXR5LgoKSGFuZyBvbiwgd2hhdCBhYm91dCBgcWNvbV9zY21gPyBJZiBgcWNvbV9zY21faXNfYXZhaWxhYmxlKClgIHJldHVybnMgZmFsc2UsIGBiYW1fZG11eF9hbGxvY19jb2hlcmVudF9yeGAgcmV0dXJucyBgLUVQUk9CRV9ERUZFUmAuIENydWNpYWwgcG9pbnQhIElmIGBxY29tX3NjbV9pc19hdmFpbGFibGUoKWAgaXMgZmFsc2UsIHRoZXJlJiMzOTtzIG5vIHdheSB0byByZWFjaCB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUuIE5vdyB0aGUgcXVlc3Rpb24gaXMsIGNhbiBgcWNvbV9zY21faXNfYXZhaWxhYmxlKClgIHJldHVybiB0cnVlIGluIFFFTVU/IE9ubHkgaWYgYHFjb21fc2NtYCBwcm9iZXMgc3VjY2Vzc2Z1bGx5LiBUaW1lIHRvIGNoZWNrIGBxY29tX3NjbV9wcm9iZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Fjb21fc2NtX3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI1NTk9Ym9vbCBxY29tX3NjbV9pc19hdmFpbGFibGUodm9pZClcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI1NjAte1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjU2MTpcdC8qIFBhaXJlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gcWNvbV9zY21fcHJvYmUgKi9cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI1NjItXHRyZXR1cm4gISFzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNl9fc2NtKTtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yNzM1PU1PRFVMRV9QQVJNX0RFU0MoZG93bmxvYWRfbW9kZSwgXCYjMzQ7ZG93bmxvYWQgbW9kZTogb2ZmLzAvTiBmb3Igbm8gZHVtcCBtb2RlLCBmdWxsL29uLzEvWSBmb3IgZnVsbCBkdW1wIG1vZGUsIG1pbmkgZm9yIG1pbmlkdW1wIG1vZGUgYW5kIGZ1bGwsbWluaSBmb3IgYm90aCBmdWxsIGFuZCBtLi4uXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNzM2LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjczNzpzdGF0aWMgaW50IHFjb21fc2NtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNzM4LXtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yODk1PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHFjb21fc2NtX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yOTAwLVx0fSxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI5MDE6XHQucHJvYmUgPSBxY29tX3NjbV9wcm9iZSxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI5MDItXHQuc2h1dGRvd24gPSBxY29tX3NjbV9zaHV0ZG93bixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MjIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcWNvbV9zY21fcHJvYmVgIGZvciBIYXJkd2FyZS1JbmRlcGVuZGVudCBPcGVyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHFjb21fc2NtX3Byb2JlYCBmdW5jdGlvbi4gVGhlIHByaW1hcnkgcXVlc3Rpb24gb24gbXkgbWluZCByaWdodCBub3cgaXMgd2hldGhlciB0aGlzIGRyaXZlciBpcyByaWdpZGx5IHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgZHVyaW5nIGl0cyBwcm9iaW5nIHBoYXNlLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBpdCBjYW4gb3BlcmF0ZSBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgY29tcGxldGUgaGFyZHdhcmUgc2V0dXAgbWlnaHQgbm90IGJlIGZ1bGx5IHByZXNlbnQgb3IgZnVuY3Rpb25hbCDigJMgcGVyaGFwcyBpbiBhIHZpcnR1YWxpemVkIG9yIGVtdWxhdGVkIGNvbnRleHQsIG9yIGR1cmluZyBlYXJseSBicmluZy11cCBiZWZvcmUgdGhlIGZ1bGwgc3lzdGVtIGlzIHZhbGlkYXRlZC4KCkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcHJvYmUgZnVuY3Rpb24gcmVsaWVzIG9uIGRpcmVjdCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgb3IgaWYgaXQgaW1wbGVtZW50cyBhIG1vcmUgYWJzdHJhY3Qgb3IgZmFsbGJhY2sgbWVjaGFuaXNtIHRoYXQgbWlnaHQgc3VjY2VlZCBldmVuIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZGV0ZWN0aW9uIGJlaW5nIGZsYXdsZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIGxvZ2ljLCBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgb24gcmVnaXN0ZXJzLCBtZW1vcnkgbWFwcywgb3IgZGV2aWNlLXNwZWNpZmljIGlkZW50aWZpZXJzIHRoYXQgd291bGQgYmUgaW5zdXJtb3VudGFibGUgcm9hZGJsb2NrcyBpbiBhIGhhcmR3YXJlLWRlZmljaWVudCBzY2VuYXJpby4gVW5kZXJzdGFuZGluZyB0aGUgZXJyb3IgcGF0aHMgYW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgbWlzc2luZyBvciBtaXNjb25maWd1cmVkIGhhcmR3YXJlIHdpbGwgYmUgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3Mzc6XHRzdGF0aWMgaW50IHFjb21fc2NtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4yNzM4Olx0e1xuMjczOTpcdFx0c3RydWN0IHFjb21fdHptZW1fcG9vbF9jb25maWcgcG9vbF9jb25maWc7XG4yNzQwOlx0XHRzdHJ1Y3QgcWNvbV9zY20gKnNjbTtcbjI3NDE6XHRcdGludCBpcnEsIHJldDtcbjI3NDI6XHRcdGludCBpO1xuMjc0MzpcdFxuMjc0NDpcdFx0c2NtID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnNjbSksIEdGUF9LRVJORUwpO1xuMjc0NTpcdFx0aWYgKCFzY20pXG4yNzQ2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjc0NzpcdFxuMjc0ODpcdFx0c2NtLVx1MDAzZWRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuMjc0OTpcdFx0cmV0ID0gcWNvbV9zY21fZmluZF9kbG9hZF9hZGRyZXNzKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcdTAwMjZzY20tXHUwMDNlZGxvYWRfbW9kZV9hZGRyKTtcbjI3NTA6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yNzUxOlx0XHRcdHJldHVybiByZXQ7XG4yNzUyOlx0XG4yNzUzOlx0XHRtdXRleF9pbml0KFx1MDAyNnNjbS1cdTAwM2VzY21fYndfbG9jayk7XG4yNzU0Olx0XG4yNzU1Olx0XHRzY20tXHUwMDNlcGF0aCA9IGRldm1fb2ZfaWNjX2dldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgTlVMTCk7XG4yNzU2Olx0XHRpZiAoSVNfRVJSKHNjbS1cdTAwM2VwYXRoKSlcbjI3NTc6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFBUUl9FUlIoc2NtLVx1MDAzZXBhdGgpLFxuMjc1ODpcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gYWNxdWlyZSBpbnRlcmNvbm5lY3QgcGF0aFxcblwmIzM0Oyk7XG4yNzU5Olx0XG4yNzYwOlx0XHRzY20tXHUwMDNlY29yZV9jbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWwoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2NvcmVcJiMzNDspO1xuMjc2MTpcdFx0aWYgKElTX0VSUihzY20tXHUwMDNlY29yZV9jbGspKVxuMjc2MjpcdFx0XHRyZXR1cm4gUFRSX0VSUihzY20tXHUwMDNlY29yZV9jbGspO1xuMjc2MzpcdFxuMjc2NDpcdFx0c2NtLVx1MDAzZWlmYWNlX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbChcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7aWZhY2VcJiMzNDspO1xuMjc2NTpcdFx0aWYgKElTX0VSUihzY20tXHUwMDNlaWZhY2VfY2xrKSlcbjI3NjY6XHRcdFx0cmV0dXJuIFBUUl9FUlIoc2NtLVx1MDAzZWlmYWNlX2Nsayk7XG4yNzY3Olx0XG4yNzY4Olx0XHRzY20tXHUwMDNlYnVzX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbChcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7YnVzXCYjMzQ7KTtcbjI3Njk6XHRcdGlmIChJU19FUlIoc2NtLVx1MDAzZWJ1c19jbGspKVxuMjc3MDpcdFx0XHRyZXR1cm4gUFRSX0VSUihzY20tXHUwMDNlYnVzX2Nsayk7XG4yNzcxOlx0XG4yNzcyOlx0XHRzY20tXHUwMDNlcmVzZXQub3BzID0gXHUwMDI2cWNvbV9zY21fcGFzX3Jlc2V0X29wcztcbjI3NzM6XHRcdHNjbS1cdTAwM2VyZXNldC5ucl9yZXNldHMgPSAxO1xuMjc3NDpcdFx0c2NtLVx1MDAzZXJlc2V0Lm9mX25vZGUgPSBwZGV2LVx1MDAzZWRldi5vZl9ub2RlO1xuMjc3NTpcdFx0cmV0ID0gZGV2bV9yZXNldF9jb250cm9sbGVyX3JlZ2lzdGVyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcdTAwMjZzY20tXHUwMDNlcmVzZXQpO1xuMjc3NjpcdFx0aWYgKHJldClcbjI3Nzc6XHRcdFx0cmV0dXJuIHJldDtcbjI3Nzg6XHRcbjI3Nzk6XHRcdC8qIHZvdGUgZm9yIG1heCBjbGsgcmF0ZSBmb3IgaGlnaGVzdCBwZXJmb3JtYW5jZSAqL1xuMjc4MDpcdFx0cmV0ID0gY2xrX3NldF9yYXRlKHNjbS1cdTAwM2Vjb3JlX2NsaywgSU5UX01BWCk7XG4yNzgxOlx0XHRpZiAocmV0KVxuMjc4MjpcdFx0XHRyZXR1cm4gcmV0O1xuMjc4MzpcdFxuMjc4NDpcdFx0cmV0ID0gb2ZfcmVzZXJ2ZWRfbWVtX2RldmljZV9pbml0KHNjbS1cdTAwM2VkZXYpO1xuMjc4NTpcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTk9ERVYpXG4yNzg2Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHNjbS1cdTAwM2VkZXYsIHJldCxcbjI3ODc6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIHRoZSByZXNlcnZlZCBtZW1vcnkgcmVnaW9uIGZvciBUWiBtZW1cXG5cJiMzNDspO1xuMjc4ODpcdFxuMjc4OTpcdFx0cmV0ID0gcWNvbV90em1lbV9lbmFibGUoc2NtLVx1MDAzZWRldik7XG4yNzkwOlx0XHRpZiAocmV0KVxuMjc5MTpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShzY20tXHUwMDNlZGV2LCByZXQsXG4yNzkyOlx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgdGhlIFRydXN0Wm9uZSBtZW1vcnkgYWxsb2NhdG9yXFxuXCYjMzQ7KTtcbjI3OTM6XHRcbjI3OTQ6XHRcdG1lbXNldChcdTAwMjZwb29sX2NvbmZpZywgMCwgc2l6ZW9mKHBvb2xfY29uZmlnKSk7XG4yNzk1Olx0XHRwb29sX2NvbmZpZy5pbml0aWFsX3NpemUgPSAwO1xuMjc5NjpcdFx0cG9vbF9jb25maWcucG9saWN5ID0gUUNPTV9UWk1FTV9QT0xJQ1lfT05fREVNQU5EO1xuMjc5NzpcdFx0cG9vbF9jb25maWcubWF4X3NpemUgPSBTWl8yNTZLO1xuMjc5ODpcdFxuMjc5OTpcdFx0c2NtLVx1MDAzZW1lbXBvb2wgPSBkZXZtX3Fjb21fdHptZW1fcG9vbF9uZXcoc2NtLVx1MDAzZWRldiwgXHUwMDI2cG9vbF9jb25maWcpO1xuMjgwMDpcdFx0aWYgKElTX0VSUihzY20tXHUwMDNlbWVtcG9vbCkpXG4yODAxOlx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHNjbS1cdTAwM2VkZXYsIFBUUl9FUlIoc2NtLVx1MDAzZW1lbXBvb2wpLFxuMjgwMjpcdFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHRoZSBTQ00gbWVtb3J5IHBvb2xcXG5cJiMzNDspO1xuMjgwMzpcdFxuMjgwNDpcdFx0cmV0ID0gcWNvbV9zY21fcXVlcnlfd2FpdHFfY291bnQoc2NtKTtcbjI4MDU6XHRcdHNjbS1cdTAwM2V3cV9jbnQgPSByZXQgXHUwMDNjIDAgPyBRQ09NX1NDTV9ERUZBVUxUX1dBSVRRX0NPVU5UIDogcmV0O1xuMjgwNjpcdFx0c2NtLVx1MDAzZXdhaXRxX2NvbXBzID0gZGV2bV9rY2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzY20tXHUwMDNld3FfY250LCBzaXplb2YoKnNjbS1cdTAwM2V3YWl0cV9jb21wcyksXG4yODA3Olx0XHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuMjgwODpcdFx0aWYgKCFzY20tXHUwMDNld2FpdHFfY29tcHMpXG4yODA5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjgxMDpcdFxuMjgxMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2NtLVx1MDAzZXdxX2NudDsgaSYjNDM7JiM0MzspXG4yODEyOlx0XHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZzY20tXHUwMDNld2FpdHFfY29tcHNbaV0pO1xuMjgxMzpcdFxuMjgxNDpcdFx0aXJxID0gcWNvbV9zY21fZ2V0X3dhaXRxX2lycShzY20pO1xuMjgxNTpcdFx0aWYgKGlycSBcdTAwM2MgMClcbjI4MTY6XHRcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAwKTtcbjI4MTc6XHRcbjI4MTg6XHRcdGlmIChpcnEgXHUwMDNjIDApIHtcbjI4MTk6XHRcdFx0aWYgKGlycSAhPSAtRU5YSU8pXG4yODIwOlx0XHRcdFx0cmV0dXJuIGlycTtcbjI4MjE6XHRcdH0gZWxzZSB7XG4yODIyOlx0XHRcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoc2NtLVx1MDAzZWRldiwgaXJxLCBOVUxMLCBxY29tX3NjbV9pcnFfaGFuZGxlcixcbjI4MjM6XHRcdFx0XHRcdFx0XHRJUlFGX09ORVNIT1QsIFwmIzM0O3Fjb20tc2NtXCYjMzQ7LCBzY20pO1xuMjgyNDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjgyNTpcdFx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHNjbS1cdTAwM2VkZXYsIHJldCxcbjI4MjY6XHRcdFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gcmVxdWVzdCBxY29tLXNjbSBpcnFcXG5cJiMzNDspO1xuMjgyNzpcdFx0fVxuMjgyODpcdFxuMjgyOTpcdFx0LypcbjI4MzA6XHRcdCAqIFBhaXJlZCB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBxY29tX3NjbV9pc19hdmFpbGFibGUoKS5cbjI4MzE6XHRcdCAqXG4yODMyOlx0XHQgKiBUaGlzIG1hcmtzIHRoZSBTQ00gQVBJIGFzIHJlYWR5IHRvIGFjY2VwdCB1c2VyIGNhbGxzIGFuZCBjYW4gb25seVxuMjgzMzpcdFx0ICogYmUgY2FsbGVkIGFmdGVyIHRoZSBUcnVzdFpvbmUgbWVtb3J5IHBvb2wgaXMgaW5pdGlhbGl6ZWQgYW5kIHRoZVxuMjgzNDpcdFx0ICogd2FpdHF1ZXVlIGludGVycnVwdCByZXF1ZXN0ZWQuXG4yODM1Olx0XHQgKi9cbjI4MzY6XHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNl9fc2NtLCBzY20pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ1NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFF1YWxjb21tIFNlY3VyZSBDb21wdXRlIE1vZHVsZSAoU0NNKSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBxY29tX3NjbWAgaGVyZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciBpdCYjMzk7cyByZWxpYW50IG9uIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBxY29tX3R6bWVtX2VuYWJsZWAsIGBxY29tX3NjbV9xdWVyeV93YWl0cV9jb3VudGAsIGFuZCBzbyBvbi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoYXQgYHFjb21fc2NtX3F1ZXJ5X3dhaXRxX2NvdW50YCBmdW5jdGlvbi4gRGlnZ2luZyBhIGJpdCBkZWVwZXIsIEkgc2VlIGl0IGNhbGxzIGBxY29tX3NjbV9jYWxsYC4gQWgsIHRoYXQmIzM5O3MgdGhlIGNvcmUuIEl0JiMzOTtzIG1ha2luZyBTZWN1cmUgTW9uaXRvciBDYWxscyAoU01DcykgZGlyZWN0bHkgdG8gVHJ1c3Rab25lLiBNYWtlcyBzZW5zZTsgdGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgaW50ZXJmYWNlLgoKSG93ZXZlciwgYSByZWQgZmxhZyBpcyBzdGFydGluZyB0byBhcHBlYXIuIFdoYXQgaGFwcGVucyBpZiBUcnVzdFpvbmUgaXNuJiMzOTt0IHByZXNlbnQ/IFRoaW5raW5nIGFib3V0IHNpdHVhdGlvbnMgbGlrZSBhIFFFTVUgZ2VuZXJpYyB2aXJ0dWFsIG1hY2hpbmUsIHdoZXJlIHdlIG1pZ2h0IG5vdCBoYXZlIGEgaGFyZHdhcmUtYmFja2VkIFRydXN0Wm9uZSwgYHFjb21fc2NtX2NhbGxgIGlzIHByb2JhYmx5IGdvaW5nIHRvIGVpdGhlciBmbGF0LW91dCBmYWlsLCBvciB3b3JzZSwgY3Jhc2ggdGhlIHdob2xlIHRoaW5nLiBUaGUgU01DIGNhbGxzIHdpbGwgaGl0IGEgZGVhZCBlbmQsIG9yIHRyeSB0byBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgZG9lc24mIzM5O3QgZXhpc3QuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBoYW5kbGUgdGhpcy4gU28sIG15IG5leHQgc3RlcCBpcyBjbGVhci4gTGV0JiMzOTtzIGRpZyBpbnRvIGBxY29tX3NjbV9jYWxsYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIHRvIGVuc3VyaW5nIHN0YWJpbGl0eSBpbiBlbnZpcm9ubWVudHMgd2l0aG91dCBhIGZ1bGwgVHJ1c3Rab25lIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxY29tX3NjbV9jYWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS1sZWdhY3kuYz0xMTA9c3RhdGljIHZvaWQgX19zY21fbGVnYWN5X2RvKGNvbnN0IHN0cnVjdCBhcm1fc21jY2NfYXJncyAqc21jLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS1sZWdhY3kuYy0xMjgtICogTm90ZSB0aGF0IGFueSBidWZmZXJzIHRoYXQgYXJlIGV4cGVjdGVkIHRvIGJlIGFjY2Vzc2VkIGJ5IHRoZSBzZWN1cmUgd29ybGRcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS1sZWdhY3kuYzoxMjk6ICogbXVzdCBiZSBmbHVzaGVkIGJlZm9yZSBpbnZva2luZyBxY29tX3NjbV9jYWxsIGFuZCBpbnZhbGlkYXRlZCBpbiB0aGUgY2FjaGVcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS1sZWdhY3kuYzoxMzA6ICogaW1tZWRpYXRlbHkgYWZ0ZXIgcWNvbV9zY21fY2FsbCByZXR1cm5zLiBDYWNoZSBtYWludGVuYW5jZSBvbiB0aGUgY29tbWFuZFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLWxlZ2FjeS5jOjEzMTogKiBhbmQgcmVzcG9uc2UgYnVmZmVycyBpcyB0YWtlbiBjYXJlIG9mIGJ5IHFjb21fc2NtX2NhbGw7IGhvd2V2ZXIsIGNhbGxlcnMgYXJlXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20tbGVnYWN5LmMtMTMyLSAqIHJlc3BvbnNpYmxlIGZvciBhbnkgb3RoZXIgY2FjaGVkIGJ1ZmZlcnMgcGFzc2VkIG92ZXIgdG8gdGhlIHNlY3VyZSB3b3JsZC5cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yMzg9c3RhdGljIGVudW0gcWNvbV9zY21fY29udmVudGlvbiBfX2dldF9jb252ZW50aW9uKHZvaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMzA1LS8qKlxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MzA2OiAqIHFjb21fc2NtX2NhbGwoKSAtIEludm9rZSBhIHN5c2NhbGwgaW4gdGhlIHNlY3VyZSB3b3JsZFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMzA3LSAqIEBkZXY6XHRkZXZpY2Vcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zMTMtICovXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzozMTQ6c3RhdGljIGludCBxY29tX3NjbV9jYWxsKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHFjb21fc2NtX2Rlc2MgKmRlc2MsXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zMTUtXHRcdFx0IHN0cnVjdCBxY29tX3NjbV9yZXMgKnJlcylcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zMzAtLyoqXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzozMzE6ICogcWNvbV9zY21fY2FsbF9hdG9taWMoKSAtIGF0b21pYyB2YXJpYXRpb24gb2YgcWNvbV9zY21fY2FsbCgpXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zMzItICogQGRldjpcdGRldmljZVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTMzOC0gKi9cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjMzOTpzdGF0aWMgaW50IHFjb21fc2NtX2NhbGxfYXRvbWljKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTM0MC1cdFx0XHRcdGNvbnN0IHN0cnVjdCBxY29tX3NjbV9kZXNjICpkZXNjLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTM1NT1zdGF0aWMgYm9vbCBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN2Y19pZCxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zODAtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzozODE6XHRyZXQgPSBxY29tX3NjbV9jYWxsKGRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTM4Mi1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0zODY9c3RhdGljIGludCBxY29tX3NjbV9zZXRfYm9vdF9hZGRyKHZvaWQgKmVudHJ5LCBjb25zdCB1OCAqY3B1X2JpdHMpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNDA1LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6NDA2Olx0cmV0dXJuIHFjb21fc2NtX2NhbGxfYXRvbWljKF9fc2NtID8gX19zY20tXHUwMDNlZGV2IDogTlVMTCwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy00MDctfVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTQwOT1zdGF0aWMgaW50IHFjb21fc2NtX3NldF9ib290X2FkZHJfbWModm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy00MjctXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo0Mjg6XHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNDI5LX1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz00Njg9dm9pZCBxY29tX3NjbV9jcHVfcG93ZXJfZG93bih1MzIgZmxhZ3MpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNDc3LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6NDc4Olx0cWNvbV9zY21fY2FsbF9hdG9taWMoX19zY20gPyBfX3NjbS1cdTAwM2VkZXYgOiBOVUxMLCBcdTAwMjZkZXNjLCBOVUxMKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTQ3OS19XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9NDgyPWludCBxY29tX3NjbV9zZXRfcmVtb3RlX3N0YXRlKHUzMiBzdGF0ZSwgdTMyIGlkKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTQ5NC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjQ5NTpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNDk2LVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTUwMT1zdGF0aWMgaW50IHFjb21fc2NtX2Rpc2FibGVfc2RpKHZvaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNTE2LVx0XHRyZXR1cm4gcmV0O1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6NTE3Olx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy01MTgtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9NTI0PXN0YXRpYyBpbnQgX19xY29tX3NjbV9zZXRfZGxvYWRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTUzNS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjUzNjpcdHJldHVybiBxY29tX3NjbV9jYWxsX2F0b21pYyhfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNTM3LX1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz02MDc9c3RhdGljIGludCBfX3Fjb21fc2NtX3Bhc19pbml0X2ltYWdlKHUzMiBwYXNfaWQsIGRtYV9hZGRyX3QgbWRhdGFfcGh5cyxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy02MjgtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo2Mjk6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgcmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTYzMC1cdHFjb21fc2NtX2J3X2Rpc2FibGUoKTtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz03NDk9aW50IHFjb21fc2NtX3Bhc19tZW1fc2V0dXAodTMyIHBhc19pZCwgcGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3Qgc2l6ZSlcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy03NzAtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo3NzE6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTc3Mi1cdHFjb21fc2NtX2J3X2Rpc2FibGUoKTtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz03ODE9c3RhdGljIHZvaWQgKl9fcWNvbV9zY21fcGFzX2dldF9yc2NfdGFibGUodTMyIHBhc19pZCwgdm9pZCAqaW5wdXRfcnRfdHptLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTgxNS1cdCAqL1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6ODE2Olx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy04MTctXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcmVzLnJlc3VsdFsyXSBcdTAwM2UgU1pfMUcpIHtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz05NTU9aW50IHFjb21fc2NtX3Bhc19hdXRoX2FuZF9yZXNldCh1MzIgcGFzX2lkKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTk3NC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjk3NTpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtOTc2LVx0cWNvbV9zY21fYndfZGlzYWJsZSgpO1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEwMzg9aW50IHFjb21fc2NtX3Bhc19zaHV0ZG93bih1MzIgcGFzX2lkKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEwNTctXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMDU4Olx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMDU5LVx0cWNvbV9zY21fYndfZGlzYWJsZSgpO1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEwNzU9Ym9vbCBxY29tX3NjbV9wYXNfc3VwcG9ydGVkKHUzMiBwYXNfaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTA5MC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEwOTE6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEwOTItXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTA5Nz1zdGF0aWMgaW50IF9fcWNvbV9zY21fcGFzX21zc19yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgcmVzZXQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTEwOS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjExMTA6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTExMTEtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTEzOD1pbnQgcWNvbV9zY21faW9fcmVhZGwocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgaW50ICp2YWwpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTE1MC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjExNTE6XHRyZXQgPSBxY29tX3NjbV9jYWxsX2F0b21pYyhfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTUyLVx0aWYgKHJldCBcdTAwM2U9IDApXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTE1OT1pbnQgcWNvbV9zY21faW9fd3JpdGVsKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGludCB2YWwpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTE2OS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjExNzA6XHRyZXR1cm4gcWNvbV9zY21fY2FsbF9hdG9taWMoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBOVUxMKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTExNzEtfVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTExODc9aW50IHFjb21fc2NtX3Jlc3RvcmVfc2VjX2NmZyh1MzIgZGV2aWNlX2lkLCB1MzIgc3BhcmUpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTE5OS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEyMDA6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEyMDEtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTIxNT1pbnQgcWNvbV9zY21fc2V0X2dwdV9zbW11X2FwZXJ0dXJlKHVuc2lnbmVkIGludCBjb250ZXh0X2JhbmspXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTIyNy1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEyMjg6XHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTIyOS19XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTIzMj1pbnQgcWNvbV9zY21faW9tbXVfc2VjdXJlX3B0Ymxfc2l6ZSh1MzIgc3BhcmUsIHNpemVfdCAqc2l6ZSlcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjQzLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTI0NDpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTI0NS1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMjUzPWludCBxY29tX3NjbV9pb21tdV9zZWN1cmVfcHRibF9pbml0KHU2NCBhZGRyLCB1MzIgc2l6ZSwgdTMyIHNwYXJlKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEyNjYtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMjY3Olx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTI2OC1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMjc3PWludCBxY29tX3NjbV9pb21tdV9zZXRfY3BfcG9vbF9zaXplKHUzMiBzcGFyZSwgdTMyIHNpemUpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTI4Ny1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEyODg6XHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTI4OS19XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTI5Mj1pbnQgcWNvbV9zY21fbWVtX3Byb3RlY3RfdmlkZW9fdmFyKHUzMiBjcF9zdGFydCwgdTMyIGNwX3NpemUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTMwOS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEzMTA6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEzMTEtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTMxNj1zdGF0aWMgaW50IF9fcWNvbV9zY21fYXNzaWduX21lbShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBoeXNfYWRkcl90IG1lbV9yZWdpb24sXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTMzNy1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEzMzg6XHRyZXQgPSBxY29tX3NjbV9jYWxsKGRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEzMzktXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTQ0NT1pbnQgcWNvbV9zY21fb2NtZW1fbG9jayhlbnVtIHFjb21fc2NtX29jbWVtX2NsaWVudCBpZCwgdTMyIG9mZnNldCwgdTMyIHNpemUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTQ1Ny1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE0NTg6XHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTQ1OS19XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTQ3MD1pbnQgcWNvbV9zY21fb2NtZW1fdW5sb2NrKGVudW0gcWNvbV9zY21fb2NtZW1fY2xpZW50IGlkLCB1MzIgb2Zmc2V0LCB1MzIgc2l6ZSlcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDgwLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTQ4MTpcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDgyLX1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xNTEyPWludCBxY29tX3NjbV9pY2VfaW52YWxpZGF0ZV9rZXkodTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE1MjEtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNTIyOlx0cmV0dXJuIHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBOVUxMKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE1MjMtfVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE1NDc9aW50IHFjb21fc2NtX2ljZV9zZXRfa2V5KHUzMiBpbmRleCwgY29uc3QgdTggKmtleSwgdTMyIGtleV9zaXplLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE1NzItXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNTczOlx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTU3NC1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xNjEwPWludCBxY29tX3NjbV9kZXJpdmVfc3dfc2VjcmV0KGNvbnN0IHU4ICplcGhfa2V5LCBzaXplX3QgZXBoX2tleV9zaXplLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE2MzktXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNjQwOlx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTY0MS1cdGlmICghcmV0KVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE2NjE9aW50IHFjb21fc2NtX2dlbmVyYXRlX2ljZV9rZXkodTggKmx0X2tleSwgc2l6ZV90IGx0X2tleV9zaXplKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE2NzktXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNjgwOlx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTY4MS1cdGlmICghcmV0KVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE3MDI9aW50IHFjb21fc2NtX3ByZXBhcmVfaWNlX2tleShjb25zdCB1OCAqbHRfa2V5LCBzaXplX3QgbHRfa2V5X3NpemUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTczMS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE3MzI6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNzMzLVx0aWYgKCFyZXQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTc1NT1pbnQgcWNvbV9zY21faW1wb3J0X2ljZV9rZXkoY29uc3QgdTggKnJhd19rZXksIHNpemVfdCByYXdfa2V5X3NpemUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTc4NC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE3ODU6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNzg2LVx0aWYgKCFyZXQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTgyNT1pbnQgcWNvbV9zY21faGRjcF9yZXEoc3RydWN0IHFjb21fc2NtX2hkY3BfcmVxICpyZXEsIHUzMiByZXFfY250LCB1MzIgKnJlc3ApXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTg1NC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE4NTU6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE4NTYtXHQqcmVzcCA9IHJlcy5yZXN1bHRbMF07XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTg2ND1pbnQgcWNvbV9zY21faW9tbXVfc2V0X3B0X2Zvcm1hdCh1MzIgc2VjX2lkLCB1MzIgY3R4X251bSwgdTMyIHB0X2ZtdClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xODc1LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTg3NjpcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xODc3LX1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xODgwPWludCBxY29tX3NjbV9xc21tdTUwMF93YWl0X3NhZmVfdG9nZ2xlKGJvb2wgZW4pXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTg5MS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE4OTI6XHRyZXR1cm4gcWNvbV9zY21fY2FsbF9hdG9taWMoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBOVUxMKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE4OTMtfVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE5MDg9aW50IHFjb21fc2NtX3NobV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKnNjbV9kZXYpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTkyMy1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE5MjQ6XHRyZXQgPSBxY29tX3NjbV9jYWxsKHNjbV9kZXYsIFx1MDAyNmRlc2MsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTI1LVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE5MzY9aW50IHFjb21fc2NtX3NobV9icmlkZ2VfY3JlYXRlKHU2NCBwZm5fYW5kX25zX3Blcm1fZmxhZ3MsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTk1NC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE5NTU6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5NTYtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTk2ND1pbnQgcWNvbV9zY21fc2htX2JyaWRnZV9kZWxldGUodTY0IGhhbmRsZSlcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTczLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTk3NDpcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTc1LX1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xOTc4PWludCBxY29tX3NjbV9sbWhfcHJvZmlsZV9jaGFuZ2UodTMyIHByb2ZpbGVfaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTk4Ny1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE5ODg6XHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTk4OS19XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTk5Mj1pbnQgcWNvbV9zY21fbG1oX2RjdnNoKHUzMiBwYXlsb2FkX2ZuLCB1MzIgcGF5bG9hZF9yZWcsIHUzMiBwYXlsb2FkX3ZhbCxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yMDIyLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjAyMzpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBOVUxMKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTIwMjQtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjAyOT1pbnQgcWNvbV9zY21fZ3B1X2luaXRfcmVncyh1MzIgZ3B1X3JlcSlcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yMDM4LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjAzOTpcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yMDQwLX1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yMDc0PXN0YXRpYyBpbnQgX19xY29tX3NjbV9xc2VlY29tX2NhbGwoY29uc3Qgc3RydWN0IHFjb21fc2NtX2Rlc2MgKmRlc2MsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjA4NS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjIwODY6XHRzdGF0dXMgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgZGVzYywgXHUwMDI2c2NtX3Jlcyk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yMDg3LVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI0MDQ9aW50IHFjb21fc2NtX3F0ZWVfaW52b2tlX3NtYyhwaHlzX2FkZHJfdCBpbmJ1Ziwgc2l6ZV90IGluYnVmX3NpemUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjQyMS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI0MjI6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI0MjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI0NDc9aW50IHFjb21fc2NtX3F0ZWVfY2FsbGJhY2tfcmVzcG9uc2UocGh5c19hZGRyX3QgYnVmLCBzaXplX3QgYnVmX3NpemUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjQ2MC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI0NjE6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI0NjItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI1ODU9c3RhdGljIGludCBxY29tX3NjbV9xdWVyeV93YWl0cV9jb3VudChzdHJ1Y3QgcWNvbV9zY20gKnNjbSlcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNTk0LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjU5NTpcdHJldCA9IHFjb21fc2NtX2NhbGxfYXRvbWljKHNjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNTk2LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yNjAyPXN0YXRpYyBpbnQgcWNvbV9zY21fZ2V0X3dhaXRxX2lycShzdHJ1Y3QgcWNvbV9zY20gKnNjbSlcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNjE0LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjYxNTpcdHJldCA9IHFjb21fc2NtX2NhbGxfYXRvbWljKHNjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNjE2LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2MDYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgRmFpbHVyZSBQb2ludHMgaW4gYHFjb21fc2NtX3Byb2JlYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHFjb21fc2NtX3Byb2JlYCBpcyBjYWxsaW5nIGBxY29tX3NjbV9xdWVyeV93YWl0cV9jb3VudGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gYHFjb21fc2NtX2NhbGxfYXRvbWljYC4gQW5kLCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGF0IGBxY29tX3NjbV9jYWxsX2F0b21pY2AgaXMgbWFraW5nIGFuIFNNQyBjYWxsLiBOb3csIGlmIHdlJiMzOTtyZSBydW5uaW5nIHRoaXMgb24gYSBnZW5lcmljIFFFTVUgYXJtNjQgVk0sIHRoaXMgU01DIGNhbGwgaXMgZ29pbmcgdG8gZ2V0IGludGVyZXN0aW5nLiBRRU1VIG1pZ2h0IGhhbmRsZSBpdCAocG90ZW50aWFsbHkgbGVhZGluZyB0byBhbiBlcnJvciBvciBldmVuIGEgY3Jhc2gpLCBvciBURi1BIG1pZ2h0IGJlIGluIGNvbnRyb2wuCgpNeSBjb25jZXJuIHdhcyB0aGF0IGEgZmFpbHVyZSBpbiB0aGlzIFNNQyBjYWxsIHdvdWxkIHRyaWNrbGUgdXAgYW5kIGNhdXNlIGBxY29tX3NjbV9wcm9iZWAgdG8gZmFpbC4gQnV0IGhvbGQgb24sIEkgbWlzc2VkIHNvbWV0aGluZyEgYHFjb21fc2NtX3F1ZXJ5X3dhaXRxX2NvdW50YCByZXR1cm5zIGByZXQgJmx0OyAwID8gUUNPTV9TQ01fREVGQVVMVF9XQUlUUV9DT1VOVCA6IHJldDtgLiBUaGF0IG1lYW5zIGlmIHRoZSBTTUMgY2FsbCBmYWlscywgaXQgc2ltcGx5IHVzZXMgYSBkZWZhdWx0IHdhaXQgcXVldWUgY291bnQuIFRoYXQmIzM5O3MgYSBjbGV2ZXIgZmFsbGJhY2shCgpTbywgdGhlIG5leHQgbGluZSBvZiB0aG91Z2h0IGlzIHRoYXQgaXQgY2FsbHMgYHFjb21fc2NtX2dldF93YWl0cV9pcnFgLiBJZiB0aGF0IGZhaWxzLCB0aGVyZSYjMzk7cyBhbm90aGVyIGZhbGxiYWNrIHRvIGBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsYC4gU28sIGFjdHVhbGx5LCBgcWNvbV9zY21fcHJvYmVgICptaWdodCogc3RpbGwgc3VjY2VlZCBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIFNNQyBjYWxscyBhcmUgZmFpbGluZy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIEl0JiMzOTtzIG1vcmUgcmVzaWxpZW50IHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC4KCkhvd2V2ZXIsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgbm93LiBXYWl0LCBiZWZvcmUgYWxsIHRoaXMgYHFjb21fc2NtX2ZpbmRfZGxvYWRfYWRkcmVzc2AgaXMgY2FsbGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBpcyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWNvbV9zY21fZmluZF9kbG9hZF9hZGRyZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTIwNDE9RVhQT1JUX1NZTUJPTF9HUEwocWNvbV9zY21fZ3B1X2luaXRfcmVncyk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yMDQyLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjA0MzpzdGF0aWMgaW50IHFjb21fc2NtX2ZpbmRfZGxvYWRfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCAqYWRkcilcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTIwNDQte1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI3Mzc9c3RhdGljIGludCBxY29tX3NjbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI3NDgtXHRzY20tXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNzQ5Olx0cmV0ID0gcWNvbV9zY21fZmluZF9kbG9hZF9hZGRyZXNzKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcdTAwMjZzY20tXHUwMDNlZGxvYWRfbW9kZV9hZGRyKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI3NTAtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU0OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYHFjb21fc2NtX2ZpbmRfZGxvYWRfYWRkcmVzc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBxY29tX3NjbV9maW5kX2Rsb2FkX2FkZHJlc3NgLiBJIGtub3cgdGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBRdWFsY29tbSBTZWN1cmUgRXhlY3V0aW9uIEVudmlyb25tZW50IChTRUUpIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBwcm9jZXNzIG9mIGxvY2F0aW5nIHRoZSBkb3dubG9hZCBhZGRyZXNzIGZvciBzb21lIGNvbXBvbmVudCwgcHJvYmFibHkgZm9yIHNlY3VyZSBib290IG9yIGEgc3lzdGVtIHVwZGF0ZS4gR2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUsIG15IGltbWVkaWF0ZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgaW52b2x2ZXMgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBTZWN1cmUgQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IChTQ00pIG9yIHBvdGVudGlhbGx5IGEgc2ltaWxhciBtZWNoYW5pc20gdG8gZmV0Y2ggdGhpcyBjcml0aWNhbCBhZGRyZXNzLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2VjdXJlbHkgZGV0ZXJtaW5pbmcgd2hlcmUgdGhlIGJvb3Rsb2FkZXIgb3Igc29tZSBvdGhlciBjcml0aWNhbCBwaWVjZSBvZiBmaXJtd2FyZSByZXNpZGVzLCBzbyB0aGF0IHRoZSBTRUUgY2FuIHN1YnNlcXVlbnRseSBsb2FkIGFuZCBleGVjdXRlIGl0LiBNeSBndWVzcyBpcyBpdCBpbnZvbHZlcyBzb21lIGhhcmR3YXJlLWxldmVsIGludGVyYWN0aW9ucyDigJMgcmVhZGluZyBmcm9tIHByb3RlY3RlZCBtZW1vcnkgcmVnaW9ucywgcG9zc2libHkgdXNpbmcgU0NNIGNvbW1hbmRzIHRvIHF1ZXJ5IHNlY3VyZSByZWdpc3RlcnMsIG9yIG1heWJlIGV2ZW4gcGVyZm9ybWluZyBhIGNyeXB0b2dyYXBoaWMgdmVyaWZpY2F0aW9uIHRvIHZhbGlkYXRlIHRoZSBhZGRyZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgc3BlY2lmaWMgc2VjdXJpdHkgbWVjaGFuaXNtcyBpbiBwbGF5LiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gdXNlcyBhbnkgc3RhbmRhcmQgb3IgY3VzdG9tIGNvbW11bmljYXRpb24gcHJvdG9jb2xzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlJiMzOTtzIGludGVybmFsIG1lbW9yeS4gSXQmIzM5O3MgYWxzbyBwb3NzaWJsZSB0aGF0IGl0IGluY29ycG9yYXRlcyBzb21lIGtpbmQgb2YgZmFsbGJhY2sgb3IgZXJyb3ItaGFuZGxpbmcgbWVjaGFuaXNtIGluIGNhc2UgdGhlIHByaW1hcnkgbWV0aG9kIG9mIGFkZHJlc3MgZGlzY292ZXJ5IGZhaWxzLCBvciB0aGUgbG9jYXRpb24gaXMgY29tcHJvbWlzZWQuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgY2FsbCBzdGFjayB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGJvb3Qgc2VxdWVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDQzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwNDM6XHRzdGF0aWMgaW50IHFjb21fc2NtX2ZpbmRfZGxvYWRfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCAqYWRkcilcbjIwNDQ6XHR7XG4yMDQ1Olx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnRjc3I7XG4yMDQ2Olx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZW9mX25vZGU7XG4yMDQ3Olx0XHRzdHJ1Y3QgcmVzb3VyY2UgcmVzO1xuMjA0ODpcdFx0dTMyIG9mZnNldDtcbjIwNDk6XHRcdGludCByZXQ7XG4yMDUwOlx0XG4yMDUxOlx0XHR0Y3NyID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgXCYjMzQ7cWNvbSxkbG9hZC1tb2RlXCYjMzQ7LCAwKTtcbjIwNTI6XHRcdGlmICghdGNzcilcbjIwNTM6XHRcdFx0cmV0dXJuIDA7XG4yMDU0Olx0XG4yMDU1Olx0XHRyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKHRjc3IsIDAsIFx1MDAyNnJlcyk7XG4yMDU2Olx0XHRvZl9ub2RlX3B1dCh0Y3NyKTtcbjIwNTc6XHRcdGlmIChyZXQpXG4yMDU4Olx0XHRcdHJldHVybiByZXQ7XG4yMDU5Olx0XG4yMDYwOlx0XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgXCYjMzQ7cWNvbSxkbG9hZC1tb2RlXCYjMzQ7LCAxLCBcdTAwMjZvZmZzZXQpO1xuMjA2MTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIwNjI6XHRcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyNjIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBEbG9hZCBNb2RlIGFuZCBUWk1lbSBFbmFibGVtZW50KioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIHBpY2tpbmcgdXAgb24gaXMgdGhlIGJlaGF2aW9yIG9mIHRoaXMgY29kZSByZWxhdGVkIHRvIHRoZSBgcWNvbSxkbG9hZC1tb2RlYCBwcm9wZXJ0eS4gSSBzZWUgdGhhdCBpZiBpdCYjMzk7cyAqbWlzc2luZyosIHRoZSBmdW5jdGlvbiBpcyByZXR1cm5pbmcgYSAwLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIGEgemVybyByZXR1cm4gb2Z0ZW4gaW5kaWNhdGVzIHN1Y2Nlc3MgaW4gdGhpcyBjb250ZXh0LiBJdCBzZWVtcyBsaWtlIHRoZSBhYnNlbmNlIG9mIHRoaXMgcHJvcGVydHkgaXNuJiMzOTt0IHRyZWF0ZWQgYXMgYW4gZXJyb3IgY29uZGl0aW9uLCB3aGljaCBpcyBzb21ldGhpbmcgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBmb3IgZnVydGhlciBhbmFseXNpcy4gVGhpcyBsaWtlbHkgbWVhbnMgc29tZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGVtcGxveWVkIHdoZW4gdGhlIGRsb2FkIG1vZGUgY29uZmlndXJhdGlvbiBpcyBub3QgcHJvdmlkZWQuCgpOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHFjb21fdHptZW1fZW5hYmxlYC4gSSYjMzk7bSB3b25kZXJpbmcgaG93IHRoaXMgcmVsYXRlcyB0byB0aGUgYGRsb2FkLW1vZGVgIHNjZW5hcmlvLiBJcyBgdHptZW1fZW5hYmxlYCBhbHNvIGhhbmRsZWQgaW4gYSB3YXkgdGhhdCBkb2VzbiYjMzk7dCBuZWNlc3NhcmlseSBpbmRpY2F0ZSBmYWlsdXJlIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIGFic2VudD8gRG9lcyB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBvbmUgcHJvcGVydHkgYWZmZWN0IHRoZSBvdGhlcj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlc2UgdHdvIG1lY2hhbmlzbXMgYXJlIGxpbmtlZCBvciBpbmRlcGVuZGVudC4gS25vd2luZyBob3cgdGhlIFRydXN0ZWQgRXhlY3V0aW9uIEVudmlyb25tZW50IChURUUpIG1lbW9yeSBlbmFibGVtZW50IGludGVyYWN0cyB3aXRoIGRsb2FkIG1vZGUgd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvciwgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSByZWxhdGlvbnNoaXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Fjb21fdHptZW1fZW5hYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI3Mzc9c3RhdGljIGludCBxY29tX3NjbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI3ODgtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNzg5Olx0cmV0ID0gcWNvbV90em1lbV9lbmFibGUoc2NtLVx1MDAzZWRldik7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNzkwLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jPTUwOD1FWFBPUlRfU1lNQk9MX0dQTChxY29tX3R6bWVtX3RvX3BoeXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy01MDktXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jOjUxMDppbnQgcWNvbV90em1lbV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy01MTEte1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtNTE4LX1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM6NTE5OkVYUE9SVF9TWU1CT0xfR1BMKHFjb21fdHptZW1fZW5hYmxlKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtNTIwLVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmg9OT1zdHJ1Y3QgZGV2aWNlO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uaC0xMC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmg6MTE6aW50IHFjb21fdHptZW1fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldik7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5oLTEyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjAyNQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgcWNvbV90em1lbV9lbmFibGVgOgoKKipEZWVwIERpdmUgaW50byBgcWNvbV90em1lbV9lbmFibGVgKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBkaXNzZWN0aW5nIGBxY29tX3R6bWVtX2VuYWJsZWAuIFRoZSBuYW1lIGl0c2VsZiBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGVuYWJsaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIFRydXN0Wm9uZSBtZW1vcnkuIEdpdmVuIG15IGJhY2tncm91bmQsIEkgY2FuIGFscmVhZHkgYW50aWNpcGF0ZSBzb21lIG9mIHRoZSBwb3RlbnRpYWwgY2hhbGxlbmdlcyBhbmQgY29uc2lkZXJhdGlvbnMuIFdlJiMzOTtyZSBsaWtlbHkgdGFsa2luZyBhYm91dDoKCiogICAqKlNlY3VyZSBNZW1vcnkgQWxsb2NhdGlvbjoqKiBUaGlzIGZ1bmN0aW9uIHByb2JhYmx5IG9yY2hlc3RyYXRlcyB0aGUgYWxsb2NhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBtZW1vcnkgcmVnaW9ucyB0aGF0IGFyZSBhY2Nlc3NpYmxlIG9ubHkgdG8gdGhlIFRydXN0Wm9uZSAob3IgU2VjdXJlIFdvcmxkKS4gSXQgd291bGQgYmUgdXNlZCB0byBzdG9yZSBzZWNyZXRzLCBrZXlzLCBvciBzZWN1cml0eS1zZW5zaXRpdmUgZGF0YS4KKiAgICoqUGVybWlzc2lvbnMgYW5kIEFjY2VzcyBDb250cm9sOioqIEkgYmV0IHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoTU1VKSBtYXBwaW5ncywgYW5kIGFjY2VzcyBjb250cm9sIHJlZ2lzdGVycyB0byBlbnN1cmUgdGhhdCBvbmx5IGF1dGhvcml6ZWQgY29kZSAocnVubmluZyB3aXRoaW4gdGhlIFNlY3VyZSBXb3JsZCkgY2FuIHJlYWQgZnJvbSBvciB3cml0ZSB0byB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KKiAgICoqUG90ZW50aWFsIGZvciBSYWNlIENvbmRpdGlvbnM6KiogRW5hYmxpbmcgYW5kIGNvbmZpZ3VyaW5nIHNlY3VyZSBtZW1vcnkgcmVnaW9ucyBpcyBhIGNsYXNzaWMgcGxhY2UgdG8gbG9vayBmb3IgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlIE5vcm1hbCBXb3JsZCAoZS5nLiwgdGhlIG1haW4gT1MpIGFuZCB0aGUgU2VjdXJlIFdvcmxkLiBDb25jdXJyZW50IGFjY2VzcyBtaWdodCBuZWVkIHRvIGJlIGhhbmRsZWQgY2FyZWZ1bGx5LgoqICAgKipJbnRlZ3JhdGlvbiB3aXRoIHRoZSBUcnVzdFpvbmUgQXJjaGl0ZWN0dXJlOioqIEl0JiMzOTtzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGludGVyYWN0IHdpdGggUXVhbGNvbW0mIzM5O3Mgc3BlY2lmaWMgVHJ1c3Rab25lIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWZlcmVuY2VzIHRvIHRoZWlyIHNlY3VyZSBPUyBvciBUcnVzdFpvbmUgZHJpdmVycyBhbmQgQVBJcy4gSSB3aWxsIGludmVzdGlnYXRlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYm9vdCBhbmQgc2VjdXJlIGV4ZWN1dGlvbiBmbG93LgoqICAgKipFcnJvciBIYW5kbGluZyBhbmQgU2VjdXJpdHk6KiogR29vZCBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCBoZXJlLiBBbnkgZmFpbHVyZXMgaW4gc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGNvbmZpZ3VyYXRpb24gY291bGQgY3JlYXRlIHNpZ25pZmljYW50IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBjb2RlcyBhbmQgYW55IHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycy4KKiAgICoqUG9zc2libGUgSW50ZXJhY3Rpb25zOioqIEhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBkZXZpY2UmIzM5O3MgYm9vdCBwcm9jZXNzIGFuZCBvdGhlciBzZWN1cml0eSBmZWF0dXJlcyAobGlrZSBzZWN1cmUgYm9vdCkgaXMgb2YgZ3JlYXQgaW50ZXJlc3QuCgpJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIG15IGFzc3VtcHRpb25zIGhvbGQgdHJ1ZS4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgdGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoZSBpbnRlZ3JpdHkgYW5kIGNvbmZpZGVudGlhbGl0eSBvZiBzZWN1cmUgbWVtb3J5IHJlZ2lvbnMgd2l0aGluIHRoZSB0YXJnZXQgc3lzdGVtLiBUaW1lIHRvIGdldCBzdGFydGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxMDpcdGludCBxY29tX3R6bWVtX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gNTExOlx0e1xuIDUxMjpcdFx0aWYgKHFjb21fdHptZW1fZGV2KVxuIDUxMzpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDUxNDpcdFxuIDUxNTpcdFx0cWNvbV90em1lbV9kZXYgPSBkZXY7XG4gNTE2Olx0XG4gNTE3Olx0XHRyZXR1cm4gcWNvbV90em1lbV9pbml0KCk7XG4gNTE4Olx0fVxuIDUxOTpcdEVYUE9SVF9TWU1CT0xfR1BMKHFjb21fdHptZW1fZW5hYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NzcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IEluaXRpYWxpemF0aW9uIHdpdGhpbiB0aGUgUXVhbGNvbW0gVHJ1c3Rab25lKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gaW4gdGhlIFF1YWxjb21tIFRydXN0Wm9uZS4gVGhlIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGFyZSwgb2YgY291cnNlLCBmYW1pbGlhciwgYnV0IEkmIzM5O20gdGhpbmtpbmcgYmV5b25kIHRoZSBiYXNpY3MuIFdoZXJlIGRvIHdlIGJlZ2luIHdoZW4gZGlnZ2luZyBpbnRvIGEgc3BlY2lmaWMgdmVuZG9yJiMzOTtzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKT8KClRoZSBxdWVzdGlvbiB0aGF0IGlzIHRvcCBvZiBtaW5kIGlzIGhvdyBgcWNvbV90em1lbV9pbml0YCBpcyBpbXBsZW1lbnRlZD8gSSBhbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIGFsbG9jYXRlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFRydXN0Wm9uZS4gQXJlIHdlIGRlYWxpbmcgd2l0aCBzdGF0aWMgYWxsb2NhdGlvbnMsIGR5bmFtaWMgYWxsb2NhdGlvbnMsIG9yIHNvbWUgaHlicmlkIGFwcHJvYWNoPyBXaGF0IGtpbmQgb2YgbWVtb3J5IGF0dHJpYnV0ZXMgKGUuZy4sIFNlY3VyZSwgTm9uLVNlY3VyZSwgQ2FjaGVhYmlsaXR5KSBhcmUgYmVpbmcgc2V0PyBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIG9yY2hlc3RyYXRlcyB0aGUgaW5pdGlhbCBzZXR1cCBpcyBjcml0aWNhbCB0byBtYXBwaW5nIGhvdyB0aGUgVFogaXMgc3RydWN0dXJlZC4gV2hhdCBhc3N1bXB0aW9ucyBpcyB0aGUgdmVuZG9yIG1ha2luZyBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgYm9vdCBwcm9jZXNzPyBUaGlzIGlzIGRlZmluaXRlbHkgdGhlIGZ1bmN0aW9uIHRvIGRlbHZlIGludG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Fjb21fdHptZW1faW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jPTUwPXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socWNvbV90em1lbV9jaHVua3NfbG9jayk7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy01My1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM6NTQ6c3RhdGljIGludCBxY29tX3R6bWVtX2luaXQodm9pZClcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtNTUte1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtNTgtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jOjU5OnN0YXRpYyBpbnQgcWNvbV90em1lbV9pbml0X2FyZWEoc3RydWN0IHFjb21fdHptZW1fYXJlYSAqYXJlYSlcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtNjAte1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM9Nzk9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHFjb21fdHptZW1fYmxhY2tsaXN0W10gPSB7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy04OC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM6ODk6c3RhdGljIGludCBxY29tX3R6bWVtX2luaXQodm9pZClcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtOTAte1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM9MTY1PUVYUE9SVF9TWU1CT0xfR1BMKHFjb21fdHptZW1fc2htX2JyaWRnZV9kZWxldGUpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy0xNjYtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jOjE2NzpzdGF0aWMgaW50IHFjb21fdHptZW1faW5pdF9hcmVhKHN0cnVjdCBxY29tX3R6bWVtX2FyZWEgKmFyZWEpXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTE2OC17XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYz0xOTQ9c3RhdGljIGludCBxY29tX3R6bWVtX3Bvb2xfYWRkX21lbW9yeShzdHJ1Y3QgcWNvbV90em1lbV9wb29sICpwb29sLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtMjEwLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYzoyMTE6XHRyZXQgPSBxY29tX3R6bWVtX2luaXRfYXJlYShhcmVhKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtMjEyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM9NTEwPWludCBxY29tX3R6bWVtX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy01MTYtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jOjUxNzpcdHJldHVybiBxY29tX3R6bWVtX2luaXQoKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtNTE4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MjYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHFjb21fdHptZW1faW5pdCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHplcm8gaW4gb24gYHFjb21fdHptZW1faW5pdGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4OS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgVHJ1c3Rab25lIG1lbW9yeSBpcyBpbml0aWFsaXplZCBvbiB0aGlzIFF1YWxjb21tIHBsYXRmb3JtLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBsaWtlbHkgZW50cnkgcG9pbnQsIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbWVtb3J5IHJlZ2lvbiBzZXR1cC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIHJlZ2lzdGVyIG1lbW9yeSByZWdpb25zLCBwZXJoYXBzIHNvbWUgc2VjdXJpdHkgY29udGV4dCBpbml0aWFsaXphdGlvbiwgYW5kIHBvdGVudGlhbGx5IHNvbWUgZGV2aWNlLXNwZWNpZmljIGhhcmR3YXJlIHNldHVwIGZvciBtZW1vcnkgcHJvdGVjdGlvbi4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIHBlcmZvcm1lZCwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg5Olx0c3RhdGljIGludCBxY29tX3R6bWVtX2luaXQodm9pZClcbiAgOTA6XHR7XG4gIDkxOlx0XHRjb25zdCBjaGFyICpjb25zdCAqcGxhdGZvcm07XG4gIDkyOlx0XHRpbnQgcmV0O1xuICA5MzpcdFxuICA5NDpcdFx0Zm9yIChwbGF0Zm9ybSA9IHFjb21fdHptZW1fYmxhY2tsaXN0OyAqcGxhdGZvcm07IHBsYXRmb3JtJiM0MzsmIzQzOykge1xuICA5NTpcdFx0XHRpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCpwbGF0Zm9ybSkpXG4gIDk2Olx0XHRcdFx0Z290byBub3RzdXBwO1xuICA5NzpcdFx0fVxuICA5ODpcdFxuICA5OTpcdFx0cmV0ID0gcWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGUocWNvbV90em1lbV9kZXYpO1xuIDEwMDpcdFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbiAxMDE6XHRcdFx0Z290byBub3RzdXBwO1xuIDEwMjpcdFxuIDEwMzpcdFx0aWYgKCFyZXQpXG4gMTA0Olx0XHRcdHFjb21fdHptZW1fdXNpbmdfc2htX2JyaWRnZSA9IHRydWU7XG4gMTA1Olx0XG4gMTA2Olx0XHRyZXR1cm4gcmV0O1xuIDEwNzpcdFxuIDEwODpcdG5vdHN1cHA6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTExCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTZWN1cmUgTWVtb3J5IEJyaWRnZSBFbmFibGVtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBxY29tX3NjbV9zaG1fYnJpZGdlX2VuYWJsZWAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBxY29tX3NjbV9jYWxsYC4gIFRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIHNlY3VyZSBjYWxsIG1lY2hhbmlzbSwgd2hpY2ggaXMgZXhwZWN0ZWQuICBCdXQgaGVyZSYjMzk7cyBhIGNydWNpYWwgcG9pbnQ6IElmIGBxY29tX3NjbV9jYWxsYCByZXR1cm5zIGAtRU9QTk9UU1VQUGAsIG1lYW5pbmcgdGhlIFNNQyAoU2VjdXJlIE1vbml0b3IgQ2FsbCkgaXNuJiMzOTt0IHN1cHBvcnRlZCwgdGhlIGNvZGUgKmRvZXNuJiMzOTt0KiBmYWlsIGltbWVkaWF0ZWx5LiBJdCBqdW1wcyB0byBgbm90c3VwcGAgYW5kIGp1c3QgcmV0dXJucyAwLgoKVGhhdCYjMzk7cyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBJdCBtZWFucyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHRydXN0ZWQgem9uZSBtZW1vcnksIHByZXN1bWFibHkgaGFuZGxlZCBieSBgcWNvbV90em1lbV9pbml0YCwgY2FuIHBvdGVudGlhbGx5ICpzdWNjZWVkKiBldmVuIHdoZW4gdGhlIHVuZGVybHlpbmcgc2VjdXJlIGNhbGxzIGFyZSBub3Qgb3BlcmF0aW9uYWwuIFRoaXMgaXMgYnkgZGVzaWduLCBvZiBjb3Vyc2UhCgpCdXQuLi4gSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGluIG15IGhlYWQuIFdoYXQgcHJlY2lzZWx5ICpkb2VzKiBgcWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGVgIHJldHVybiBpbiB0aGUgc3BlY2lmaWMgc2NlbmFyaW8gd2hlcmUgdGhlcmUgaXMgKm5vKiBTTUMgc3VwcG9ydD8gQSByZXR1cm4gb2YgMCBmcm9tIGBxY29tX3NjbV9zaG1fYnJpZGdlX2VuYWJsZWAgbWlnaHQgYXBwZWFyIGFzIGEgc3VjY2VzcywgaG93ZXZlciwgdGhhdCBtaWdodCBiZSBtaXNsZWFkaW5nIGlmIHRoZSB1bmRlcmx5aW5nIFNNQyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBhdmFpbGFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZWRnZSBjYXNlIGJldHRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhhdCByZXR1cm4gdmFsdWUuIFRoaXMgZGV0YWlsIGNvdWxkIGltcGFjdCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHNlY3VyZSBtZW1vcnkgaW4gdGhlIGFic2VuY2Ugb2YgYSBwcm9wZXIgU01DIGluZnJhc3RydWN0dXJlLCBhbmQgdGhhdCYjMzk7cyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyByaWdvcm91cyBzY3J1dGlueS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzeXN0ZW0gcmVwb3J0cyBpdHMgYWN0dWFsIGNvbmZpZ3VyYXRpb24gc28gdGhhdCBJIGFtIGFibGUgdG8gY29ycmVjdGx5IGludGVycHJldCBpdHMgcnVudGltZSBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Fjb21fc2NtX3NobV9icmlkZ2VfZW5hYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE5MDA9RVhQT1JUX1NZTUJPTF9HUEwocWNvbV9zY21fbG1oX2RjdnNoX2F2YWlsYWJsZSk7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTkwNy0gKi9cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE5MDg6aW50IHFjb21fc2NtX3NobV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKnNjbV9kZXYpXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTA5LXtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTMzLX1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE5MzQ6RVhQT1JUX1NZTUJPTF9HUEwocWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGUpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTkzNS1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaD04NT1zdHJ1Y3QgcWNvbV90em1lbV9wb29sICpxY29tX3NjbV9nZXRfdHptZW1fcG9vbCh2b2lkKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oOjg2OmludCBxY29tX3NjbV9zaG1fYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpzY21fZGV2KTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oLTg3LVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM9ODk9c3RhdGljIGludCBxY29tX3R6bWVtX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTk4LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYzo5OTpcdHJldCA9IHFjb21fc2NtX3NobV9icmlkZ2VfZW5hYmxlKHFjb21fdHptZW1fZGV2KTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtMTAwLVx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwMzEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgZnVuY3Rpb24sIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBzeXN0ZW0tb24tY2hpcCAoU29DKSBhcmNoaXRlY3R1cmUsIHNoYXJlZCBtZW1vcnksIGFuZCBRdWFsY29tbSYjMzk7cyBTQ00gKFNlY3VyZSBDb21tYW5kIE1hbmFnZXIpIGNvbnRleHQuCgoqKkRlY29uc3RydWN0aW5nIGBxY29tX3NjbV9zaG1fYnJpZGdlX2VuYWJsZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgcWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGVgLiBHaXZlbiB0aGUgbmFtZSwgSSBpbW1lZGlhdGVseSBhbnRpY2lwYXRlIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIGEgYnJpZGdlIOKAkyBsaWtlbHkgYSBoYXJkd2FyZSBicmlkZ2Ug4oCTIHRoYXQgZmFjaWxpdGF0ZXMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBRdWFsY29tbSBTQ00gYW5kIFNoYXJlZCBNZW1vcnkuIFRoZSB0ZXJtICYjMzQ7YnJpZGdlJiMzNDsgaXMga2V5IGhlcmUuIEl0IGltcGxpZXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25zdHJ1Y3QgZGVzaWduZWQgZm9yIHNlY3VyZSBjb21tdW5pY2F0aW9uLCBnaXZlbiB0aGUgU0NNJiMzOTtzIHJvbGUuCgpNeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmU6CgoqICAgKipXaGF0IHR5cGUgb2YgU2hhcmVkIE1lbW9yeSBhcmUgd2UgdGFsa2luZyBhYm91dD8qKiBJcyB0aGlzIGEgZGVkaWNhdGVkIHBoeXNpY2FsIHJlZ2lvbiwgYSB2aXJ0dWFsIG1lbW9yeSByZWdpb24gbWFwcGVkIGludG8gbXVsdGlwbGUgY29udGV4dHMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IFRoZSBzcGVjaWZpYyBzaGFyZWQgbWVtb3J5IHR5cGUgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgbWVjaGFuaXNtcy4KKiAgICoqV2hhdCBhcmUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8qKiBUaGUgU0NNIGlzIGFsbW9zdCBjZXJ0YWlubHkgaW52b2x2ZWQgYmVjYXVzZSB3ZSYjMzk7cmUgY3Jvc3Npbmcgc2VjdXJpdHkgZG9tYWlucy4gVGhpcyBpcyBsaWtlbHkgYWJvdXQgY29udHJvbGxpbmcgYWNjZXNzLCBtZWRpYXRpbmcgY29tbXVuaWNhdGlvbiwgYW5kIGVuZm9yY2luZyBzZWN1cml0eSBwb2xpY2llcy4gSG93IGFyZSB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcyBoYW5kbGVkIHdpdGhpbiB0aGUgbWVtb3J5IHNoYXJlZCBpbiB0aGlzIHNjZW5hcmlvPyBBcmUgdGhlcmUgc3BlY2lmaWMgYWNjZXNzIGNvbnRyb2xzIGluIHBsYWNlPyBXaGF0IHNlY3VyaXR5IGNvbnRleHRzIGFyZSBpbnZvbHZlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgVHJ1c3Rab25lLCBzZWN1cmUgYm9vdCwgb3Igb3RoZXIgc2VjdXJpdHkgZmVhdHVyZXM/CiogICAqKldoYXQmIzM5O3MgdGhlIGhhcmR3YXJlIGNvbnRleHQ/KiogSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBTb0MgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgaGFyZHdhcmUgYmxvY2tzIGludm9sdmVkLiBEb2VzIHRoaXMgcmVseSBvbiBhIHNwZWNpZmljIGludGVyY29ubmVjdCwgYSBoYXJkd2FyZSBtZW1vcnkgY29udHJvbGxlciBmZWF0dXJlLCBvciBzb21ldGhpbmcgY3VzdG9tPyBJcyB0aGVyZSBhIGRlc2lnbmF0ZWQgaGFyZHdhcmUgYnJpZGdlLCBhbmQgaWYgc28sIHdoYXQmIzM5O3MgaXRzIHJvbGU/CiogICAqKldoYXQmIzM5O3MgdGhlIGVuYWJsaW5nIHByb2NlZHVyZT8qKiBXaGF0IHN0ZXBzIGFyZSBuZWNlc3Nhcnk/IElzIHRoaXMgYSBzaW1wbGUgcmVnaXN0ZXIgd3JpdGUsIGEgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucywgb3IgYSBjb21wbGV4IGluaXRpYWxpemF0aW9uIHByb2Nlc3M/IERvZXMgaXQgaW52b2x2ZSBlbmFibGluZyBpbnRlcnJ1cHRzLCBjb25maWd1cmluZyBhZGRyZXNzIG1hcHBpbmcsIG9yIHNldHRpbmcgdXAgbWVtb3J5IHByb3RlY3Rpb24gdW5pdHMgKE1QVXMpPwoqICAgKipFcnJvciBoYW5kbGluZz8qKiBHaXZlbiB0aGUgc2VjdXJpdHkgYXNwZWN0cywgSSBleHBlY3Qgcm9idXN0IGVycm9yIGhhbmRsaW5nLiBBcmUgdGhlcmUgY2hlY2tzIGZvciBpbnZhbGlkIHBhcmFtZXRlcnMsIHNlY3VyaXR5IHZpb2xhdGlvbnMsIG9yIGhhcmR3YXJlIGZhaWx1cmVzPyBXaGF0IGFyZSB0aGUgZmFpbHVyZSBtb2RlcywgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBJcyB0aGlzIGludGVycnVwdC1kcml2ZW4gb3IgcG9sbGVkPyBXaGF0IGFyZSB0aGUgZmFpbHVyZSBtb2RlcyBhbmQgcmVjb3ZlcnkgcHJvY2VkdXJlcz8KKiAgICoqV2hpY2ggY29udGV4dHMgZG9lcyB0aGlzIGludm9sdmU/KiogSXMgdGhpcyBydW5uaW5nIHdpdGhpbiB0aGUgVHJ1c3Rab25lLCBvciBpbiB0aGUgbm9ybWFsIHdvcmxkPyBEb2VzIHRoaXMgb3BlcmF0ZSBmcm9tIGJvdGg/IERvZXMgdGhpcyBpbXBhY3Qgb3RoZXIgc3lzdGVtIGRyaXZlcnMgb3Igc2VydmljZXM/CiogICAqKldoYXQgaXMgdGhlIGJvb3QtdXAgc2VxdWVuY2U/KiogRG9lcyB0aGlzIGhhcHBlbiBlYXJseSBpbiB0aGUgYm9vdC11cCwgb3IgbGF0ZXI/IEhvdyBkb2VzIHRoaXMgaW50ZXJhY3Qgd2l0aCBvdGhlciBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmVzPwoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGNvZGUgaXRzZWxmLCBzdGFydGluZyB3aXRoIHRoZSBmdW5jdGlvbiYjMzk7cyBhcmd1bWVudHMsIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLiBJJiMzOTtsbCBiZSBleHBlY3RpbmcgdG8gc2VlIGEgY29tYmluYXRpb24gb2YgaGFyZHdhcmUgYWNjZXNzLCBzZWN1cml0eSBjaGVja3MsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGxheSB0aGUgZm91bmRhdGlvbiBmb3Igc2VjdXJlIGNvbW11bmljYXRpb24gYWNyb3NzIGEgc2hhcmVkIG1lbW9yeSBpbnRlcmZhY2Ugb24gYSBRdWFsY29tbSBTb0MuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MDg6XHRpbnQgcWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGUoc3RydWN0IGRldmljZSAqc2NtX2RldilcbjE5MDk6XHR7XG4xOTEwOlx0XHRpbnQgcmV0O1xuMTkxMTpcdFxuMTkxMjpcdFx0c3RydWN0IHFjb21fc2NtX2Rlc2MgZGVzYyA9IHtcbjE5MTM6XHRcdFx0LnN2YyA9IFFDT01fU0NNX1NWQ19NUCxcbjE5MTQ6XHRcdFx0LmNtZCA9IFFDT01fU0NNX01QX1NITV9CUklER0VfRU5BQkxFLFxuMTkxNTpcdFx0XHQub3duZXIgPSBBUk1fU01DQ0NfT1dORVJfU0lQXG4xOTE2Olx0XHR9O1xuMTkxNzpcdFxuMTkxODpcdFx0c3RydWN0IHFjb21fc2NtX3JlcyByZXM7XG4xOTE5Olx0XG4xOTIwOlx0XHRpZiAoIV9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoc2NtX2RldiwgUUNPTV9TQ01fU1ZDX01QLFxuMTkyMTpcdFx0XHRcdFx0XHQgIFFDT01fU0NNX01QX1NITV9CUklER0VfRU5BQkxFKSlcbjE5MjI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTkyMzpcdFxuMTkyNDpcdFx0cmV0ID0gcWNvbV9zY21fY2FsbChzY21fZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuMTkyNTpcdFxuMTkyNjpcdFx0aWYgKHJldClcbjE5Mjc6XHRcdFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwNDQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFN5c3RlbSBDYWxsIEF2YWlsYWJpbGl0eSBJc3N1ZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBzaXR1YXRpb24gd2hlcmUgYSBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlYCwgc2VlbXMgdG8gYmUgcmV0dXJuaW5nIGAtRU9QTk9UU1VQUGAuIFRoYXQmIzM5O3MgYSBjbGVhciBzaWduYWwgdGhhdCB0aGUgdW5kZXJseWluZyBzZWN1cmUgY2FsbCwgb3IgYXQgbGVhc3QgdGhlIG1lY2hhbmlzbSB0byBjaGVjayBpdCwgaXNuJiMzOTt0IHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGF0IGBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlYCBmdW5jdGlvbiBpdHNlbGYuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyAqd2h5KiB3ZSYjMzk7cmUgaGl0dGluZyB0aGlzICYjMzQ7b3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQmIzM0OyBlcnJvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLCB0aGUgY2hlY2tzIGl0IHBlcmZvcm1zLCBhbmQgd2hhdCBjb25kaXRpb25zIGFyZSBjYXVzaW5nIGl0IHRvIHJldHVybiBmYWxzZS4gSXMgaXQgYSBoYXJkd2FyZSBjYXBhYmlsaXR5IGlzc3VlPyBBIG1pc3NpbmcgZHJpdmVyPyBDb25maWd1cmF0aW9uIGZsYWdzPyBUaGUgY29kZSBpdHNlbGYgc2hvdWxkIHByb3ZpZGUgdGhlIGFuc3dlcnMsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4gVGhpcyBpcyBsaWtlbHkgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MzM5PXN0YXRpYyBpbnQgcWNvbV9zY21fY2FsbF9hdG9taWMoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTM1NC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjM1NTpzdGF0aWMgYm9vbCBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN2Y19pZCxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTM1Ni1cdFx0XHRcdFx0IHUzMiBjbWRfaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9NTU0PXN0YXRpYyB2b2lkIHFjb21fc2NtX3NldF9kb3dubG9hZF9tb2RlKHUzMiBkbG9hZF9tb2RlKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTU2MC1cdFx0XHRcdCAgICAgIEZJRUxEX1BSRVAoUUNPTV9ETE9BRF9NQVNLLCBkbG9hZF9tb2RlKSk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo1NjE6XHR9IGVsc2UgaWYgKF9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoX19zY20tXHUwMDNlZGV2LCBRQ09NX1NDTV9TVkNfQk9PVCxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTU2Mi1cdFx0XHRcdFx0XHRRQ09NX1NDTV9CT09UX1NFVF9ETE9BRF9NT0RFKSkge1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEwNzU9Ym9vbCBxY29tX3NjbV9wYXNfc3VwcG9ydGVkKHUzMiBwYXNfaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTA4Ni1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEwODc6XHRpZiAoIV9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoX19zY20tXHUwMDNlZGV2LCBRQ09NX1NDTV9TVkNfUElMLFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTA4OC1cdFx0XHRcdFx0ICBRQ09NX1NDTV9QSUxfUEFTX0lTX1NVUFBPUlRFRCkpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTE4MD1ib29sIHFjb21fc2NtX3Jlc3RvcmVfc2VjX2NmZ19hdmFpbGFibGUodm9pZClcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTExODEte1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTE4MjpcdHJldHVybiBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKF9fc2NtLVx1MDAzZWRldiwgUUNPTV9TQ01fU1ZDX01QLFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTE4My1cdFx0XHRcdFx0ICAgIFFDT01fU0NNX01QX1JFU1RPUkVfU0VDX0NGRyk7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTIwOD1ib29sIHFjb21fc2NtX3NldF9ncHVfc21tdV9hcGVydHVyZV9pc19hdmFpbGFibGUodm9pZClcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEyMDkte1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTIxMDpcdHJldHVybiBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKF9fc2NtLVx1MDAzZWRldiwgUUNPTV9TQ01fU1ZDX01QLFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTIxMS1cdFx0XHRcdFx0ICAgIFFDT01fU0NNX01QX0NQX1NNTVVfQVBFUlRVUkVfSUQpO1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE0Mjk9Ym9vbCBxY29tX3NjbV9vY21lbV9sb2NrX2F2YWlsYWJsZSh2b2lkKVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTQzMC17XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNDMxOlx0cmV0dXJuIF9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoX19zY20tXHUwMDNlZGV2LCBRQ09NX1NDTV9TVkNfT0NNRU0sXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDMyLVx0XHRcdFx0XHQgICAgUUNPTV9TQ01fT0NNRU1fTE9DS19DTUQpO1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE0OTE9Ym9vbCBxY29tX3NjbV9pY2VfYXZhaWxhYmxlKHZvaWQpXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDkyLXtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE0OTM6XHRyZXR1cm4gX19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZShfX3NjbS1cdTAwM2VkZXYsIFFDT01fU0NNX1NWQ19FUyxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE0OTQtXHRcdFx0XHRcdCAgICBRQ09NX1NDTV9FU19JTlZBTElEQVRFX0lDRV9LRVkpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTQ5NTpcdFx0X19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZShfX3NjbS1cdTAwM2VkZXYsIFFDT01fU0NNX1NWQ19FUyxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE0OTYtXHRcdFx0XHRcdCAgICAgUUNPTV9TQ01fRVNfQ09ORklHX1NFVF9JQ0VfS0VZKTtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xNTgxPWJvb2wgcWNvbV9zY21faGFzX3dyYXBwZWRfa2V5X3N1cHBvcnQodm9pZClcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE1ODIte1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTU4MzpcdHJldHVybiBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKF9fc2NtLVx1MDAzZWRldiwgUUNPTV9TQ01fU1ZDX0VTLFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTU4NC1cdFx0XHRcdFx0ICAgIFFDT01fU0NNX0VTX0RFUklWRV9TV19TRUNSRVQpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTU4NTpcdCAgICAgICBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKF9fc2NtLVx1MDAzZWRldiwgUUNPTV9TQ01fU1ZDX0VTLFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTU4Ni1cdFx0XHRcdFx0ICAgIFFDT01fU0NNX0VTX0dFTkVSQVRFX0lDRV9LRVkpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTU4NzpcdCAgICAgICBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKF9fc2NtLVx1MDAzZWRldiwgUUNPTV9TQ01fU1ZDX0VTLFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTU4OC1cdFx0XHRcdFx0ICAgIFFDT01fU0NNX0VTX1BSRVBBUkVfSUNFX0tFWSkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNTg5Olx0ICAgICAgIF9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoX19zY20tXHUwMDNlZGV2LCBRQ09NX1NDTV9TVkNfRVMsXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNTkwLVx0XHRcdFx0XHQgICAgUUNPTV9TQ01fRVNfSU1QT1JUX0lDRV9LRVkpO1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE4MDA9Ym9vbCBxY29tX3NjbV9oZGNwX2F2YWlsYWJsZSh2b2lkKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE4MDctXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxODA4Olx0YXZhaWwgPSBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKF9fc2NtLVx1MDAzZWRldiwgUUNPTV9TQ01fU1ZDX0hEQ1AsXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xODA5LVx0XHRcdFx0XHRcdFFDT01fU0NNX0hEQ1BfSU5WT0tFKTtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xODk2PWJvb2wgcWNvbV9zY21fbG1oX2RjdnNoX2F2YWlsYWJsZSh2b2lkKVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTg5Ny17XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxODk4Olx0cmV0dXJuIF9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoX19zY20tXHUwMDNlZGV2LCBRQ09NX1NDTV9TVkNfTE1ILCBRQ09NX1NDTV9MTUhfTElNSVRfRENWU0gpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTg5OS19XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTkwOD1pbnQgcWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGUoc3RydWN0IGRldmljZSAqc2NtX2Rldilcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTE5LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTkyMDpcdGlmICghX19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZShzY21fZGV2LCBRQ09NX1NDTV9TVkNfTVAsXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTIxLVx0XHRcdFx0XHQgIFFDT01fU0NNX01QX1NITV9CUklER0VfRU5BQkxFKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzMzEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBRdWFsY29tbSBTQ006CgoqKkFuYWx5emluZyBgX19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZWAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBmdW5jdGlvbi4gYF9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGVgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgU0NNIChTZWN1cmUgQ29uZmlndXJhdGlvbiBNb2R1bGUpIHB1enpsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHNlY3VyZSBjYWxsLCBsaWtlbHkgdG8gdGhlIFRydXN0Wm9uZSBvciBhIHNpbWlsYXIgc2VjdXJlIGVudmlyb25tZW50LCBjYW4gYmUgbWFkZS4gVGhpcyB1c3VhbGx5IGludm9sdmVzIGNoZWNraW5nIGZvciBhIHZhcmlldHkgb2YgY29uZGl0aW9ucywgdGhpbmdzIGxpa2U6CgoqICAgKipTZWN1cml0eSBDb250ZXh0OioqIEFtIEksIHRoZSBjYWxsZXIsIHJ1bm5pbmcgaW4gYSBjb250ZXh0IHdoZXJlIHNlY3VyZSBjYWxscyBhcmUgZXZlbiAqYWxsb3dlZCo/IEFyZSB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zLCBjYXBhYmlsaXRpZXMsIG9yIGNvbmZpZ3VyYXRpb25zIHNldD8KKiAgICoqU0NNIFN0YXRlOioqIElzIHRoZSBTQ00gaXRzZWxmIGluaXRpYWxpemVkIGFuZCBmdW5jdGlvbmluZyBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgZ2xvYmFsIGVycm9ycywgc2h1dGRvd25zLCBvciBzdGF0ZXMgdGhhdCB3b3VsZCBwcmV2ZW50IGEgc2VjdXJlIGNhbGw/CiogICAqKkNhbGwgSUQgVmFsaWRpdHk6KiogSXMgdGhlIHNwZWNpZmljIGNhbGwgSUQgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgZm9yIGluc3RhbmNlLCBgU0NNX0NBTExfU09NRV9UUlVTVFpPTkVfRlVOQ1RJT05fWGAsIGFjdHVhbGx5IGEgKnZhbGlkKiBvbmUgZm9yIHRoaXMgc3lzdGVtPyBJcyBpdCBzdXBwb3J0ZWQgYnkgdGhlIGluc3RhbGxlZCBUcnVzdFpvbmUgaW1hZ2U/CiogICAqKlJlc291cmNlIEF2YWlsYWJpbGl0eToqKiBBcmUgdGhlIHJlc291cmNlcyBuZWVkZWQgZm9yIHRoaXMgc3BlY2lmaWMgc2VjdXJlIGNhbGwsIHRoaW5ncyBsaWtlIG1lbW9yeSBidWZmZXJzLCBzZWN1cmUgaW50ZXJydXB0cywgYW5kIG90aGVyIG5lY2Vzc2FyeSBiaXRzLCBhY3R1YWxseSBhdmFpbGFibGUgYW5kIGluIGEgdXNhYmxlIHN0YXRlPwoqICAgKipQbGF0Zm9ybS1TcGVjaWZpYyBDb25zdHJhaW50czoqKiBUaGlzIGlzIGFsd2F5cyBhIGJpZyBvbmUuIERvZXMgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgcGxhdGZvcm0gaGF2ZSBhbnkgdW5pcXVlIGxpbWl0YXRpb25zIG9yIHF1aXJrcyB0aGF0IHdvdWxkIG1ha2UgdGhpcyBjYWxsIHVuYXZhaWxhYmxlPyBQb3dlciBzdGF0ZSwgY2xvY2sgZ2F0aW5nLCBhbmQgaGFyZHdhcmUgcmV2aXNpb24gY291bGQgYWxsIGltcGFjdCB0aGUgb3V0Y29tZSBoZXJlLgoKTXkgZ29hbCBpcyB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgbWFrZXMgaXRzIGRlY2lzaW9uLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlIGNsb3NlbHksIHBheWluZyBhdHRlbnRpb24gdG8gYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBTQ00gbW9kdWxlcywgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzLCBvciBwbGF0Zm9ybS1zcGVjaWZpYyBkcml2ZXJzLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBhbmQgY3JpdGljYWwgdG8gdGhlIG92ZXJhbGwgc2VjdXJpdHkgcG9zdHVyZSBhbmQgZnVuY3Rpb24gb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzU1Olx0c3RhdGljIGJvb2wgX19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBzdmNfaWQsXG4gMzU2Olx0XHRcdFx0XHRcdCB1MzIgY21kX2lkKVxuIDM1NzpcdHtcbiAzNTg6XHRcdGludCByZXQ7XG4gMzU5Olx0XHRzdHJ1Y3QgcWNvbV9zY21fZGVzYyBkZXNjID0ge1xuIDM2MDpcdFx0XHQuc3ZjID0gUUNPTV9TQ01fU1ZDX0lORk8sXG4gMzYxOlx0XHRcdC5jbWQgPSBRQ09NX1NDTV9JTkZPX0lTX0NBTExfQVZBSUwsXG4gMzYyOlx0XHRcdC5vd25lciA9IEFSTV9TTUNDQ19PV05FUl9TSVAsXG4gMzYzOlx0XHR9O1xuIDM2NDpcdFx0c3RydWN0IHFjb21fc2NtX3JlcyByZXM7XG4gMzY1Olx0XG4gMzY2Olx0XHRkZXNjLmFyZ2luZm8gPSBRQ09NX1NDTV9BUkdTKDEpO1xuIDM2NzpcdFx0c3dpdGNoIChfX2dldF9jb252ZW50aW9uKCkpIHtcbiAzNjg6XHRcdGNhc2UgU01DX0NPTlZFTlRJT05fQVJNXzMyOlxuIDM2OTpcdFx0Y2FzZSBTTUNfQ09OVkVOVElPTl9BUk1fNjQ6XG4gMzcwOlx0XHRcdGRlc2MuYXJnc1swXSA9IFNDTV9TTUNfRk5JRChzdmNfaWQsIGNtZF9pZCkgfFxuIDM3MTpcdFx0XHRcdFx0KEFSTV9TTUNDQ19PV05FUl9TSVAgXHUwMDNjXHUwMDNjIEFSTV9TTUNDQ19PV05FUl9TSElGVCk7XG4gMzcyOlx0XHRcdGJyZWFrO1xuIDM3MzpcdFx0Y2FzZSBTTUNfQ09OVkVOVElPTl9MRUdBQ1k6XG4gMzc0Olx0XHRcdGRlc2MuYXJnc1swXSA9IFNDTV9MRUdBQ1lfRk5JRChzdmNfaWQsIGNtZF9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTgwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJbml0aWFsaXphdGlvbiBGbG93KioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IHN0YXJ0cyB3aXRoIGEgY2FsbCB0byBgcWNvbV9zY21fY2FsbGAuIElmICp0aGF0KiBmYWlscywgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSByZXR1cm4gb2YgYGZhbHNlYCwgd2hpY2ggdGhlbiBjYXVzZXMgYHFjb21fc2NtX3NobV9icmlkZ2VfZW5hYmxlYCB0byBjb3VnaCB1cCBhbiBgLUVPUE5PVFNVUFBgIGVycm9yLiBIb3dldmVyLCBgcWNvbV90em1lbV9pbml0YCBzb21laG93ICpzdGlsbCogbWFuYWdlcyB0byByZXR1cm4gMCwgYW5kIHRoYXQgY2FzY2FkZXMgaW50byBgcWNvbV90em1lbV9lbmFibGVgIGFsc28gcmV0dXJuaW5nIDAuIFRoYXTigJlzIGFscmVhZHkgYSBiaXQgb2RkLCBidXQgbGV0JiMzOTtzIGtlZXAgZ29pbmcuCgpOb3csIGBxY29tX3NjbV9wcm9iZWAga2lja3MgaW4gYW5kIHZlbnR1cmVzIGludG8gYHFjb21fc2NtX3F1ZXJ5X3dhaXRxX2NvdW50YC4gVGhpcyBpcyB3aGVyZSBpdCBjYWxscyBgcWNvbV9zY21fY2FsbF9hdG9taWNgLCBhbmQgaWYgKnRoYXQqIGZhaWxzLCBpdCByZXNvcnRzIHRvIHRoZSBgUUNPTV9TQ01fREVGQVVMVF9XQUlUUV9DT1VOVGAsIHdoaWNoIGlzIDEuIEZpbmUsIG1ha2VzIHNlbnNlIGFzIGEgZmFsbGJhY2suICBUaGVuLCBpdCBhbGxvY2F0ZXMgYHdhaXRxX2NvbXBzYC4KCk5leHQsIHdlIHNlZSBgcWNvbV9zY21fZ2V0X3dhaXRxX2lycWAgYmVpbmcgY2FsbGVkLCB3aGljaCwgKmFnYWluKiwgY2FsbHMgYHFjb21fc2NtX2NhbGxfYXRvbWljYC4gSWYgKnRoYXQqIGJvbWJzLCBpdCByZXR1cm5zIHRoZSBlcnJvciBjb2RlLiBOb3csIHRoZSBgaXJxYCB2YWx1ZSBiZWNvbWVzIG5lZ2F0aXZlLiBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGl0IGZhbGxzIGJhY2sgdG8gdXNpbmcgYHBsYXRmb3JtX2dldF9pcnFfb3B0aW9uYWwocGRldiwgMClgLiBJZiAqdGhhdCogZG9lc24mIzM5O3QgZmluZCBhbiBJUlEsIGl0JiMzOTtsbCByZXR1cm4gYC1FTlhJT2AuCgpUaGUga2V5IGhlcmUgaXMgdGhlIGZvbGxvd2luZyBjb25kaXRpb25hbDogYGlmIChpcnEgJmx0OyAwKSB7IGlmIChpcnEgIT0gLUVOWElPKSByZXR1cm4gaXJxOyB9YC4gIEVzc2VudGlhbGx5LCBpZiB0aGUgSVJRIGlzICpuZWdhdGl2ZSogYnV0IE5PVCBgLUVOWElPYCwgaXQgcmV0dXJucy4gSG93ZXZlciwgaWYgdGhlIElSUSBpcyBgLUVOWElPYCwgKml0IGNvbnRpbnVlcyEqICBUaGF04oCZcyB0aGUgY3J1Y2lhbCBvYnNlcnZhdGlvbi4KCkJlY2F1c2UgaWYgdGhlIElSUSBpcyBgLUVOWElPYCwgaXQgdGhlbiBzZXRzIGBzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO19fc2NtLCBzY20pO2AgYW5kIHJldHVybnMgMCEgVGhpcyBpcyB0aGUgc3VycHJpc2luZyBwYXJ0OiBgcWNvbV9zY21fcHJvYmVgIGNhbiwgYW5kICp3aWxsKiwgc3VjY2VlZCBldmVuIGlmIHRoZXJlIGlzIGFic29sdXRlbHkgKm5vKiBTTUMgc3VwcG9ydCEgVGhpcyBkaXJlY3RseSBpbXBsaWVzIHRoYXQgYHFjb21fc2NtX2lzX2F2YWlsYWJsZSgpYCBpcyBnb2luZyB0byByZXR1cm4gYHRydWVgIGV2ZW4gd2hlbiBpdCBzaG91bGRu4oCZdC4KCkZpbmFsbHksIGBiYW1fZG11eF9hbGxvY19jb2hlcmVudF9yeGAgaXMgY2FsbGVkLiBJdCB3aWxsIGNhbGwgYHFjb21fc2NtX2Fzc2lnbl9tZW1gLgoKU28sIHRoZSBjcml0aWNhbCB0YWtlYXdheSBpcyB0aGF0IHRoZSBwcm9iZSYjMzk7cyBzdWNjZXNzIGlzIGRlY291cGxlZCBmcm9tIHRoZSBhY3R1YWwgYXZhaWxhYmlsaXR5IG9mIFNNQyBmdW5jdGlvbmFsaXR5LCB3aGljaCBoYXMgaW1wbGljYXRpb25zIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGluIGBiYW1fZG11eF9hbGxvY19jb2hlcmVudF9yeGAgYW5kIGBxY29tX3NjbV9hc3NpZ25fbWVtYCwgYXMgdGhleSB3aWxsIGxpa2VseSBiZSBvcGVyYXRpbmcgdW5kZXIgYSBmYWxzZSBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxY29tX3NjbV9hc3NpZ25fbWVtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEzMTQ9RVhQT1JUX1NZTUJPTF9HUEwocWNvbV9zY21fbWVtX3Byb3RlY3RfdmlkZW9fdmFyKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEzMTUtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMzE2OnN0YXRpYyBpbnQgX19xY29tX3NjbV9hc3NpZ25fbWVtKHN0cnVjdCBkZXZpY2UgKmRldiwgcGh5c19hZGRyX3QgbWVtX3JlZ2lvbixcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEzMTctXHRcdFx0XHQgc2l6ZV90IG1lbV9zeiwgcGh5c19hZGRyX3Qgc3JjLCBzaXplX3Qgc3JjX3N6LFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEzNDMtLyoqXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMzQ0OiAqIHFjb21fc2NtX2Fzc2lnbl9tZW0oKSAtIE1ha2UgYSBzZWN1cmUgY2FsbCB0byByZWFzc2lnbiBtZW1vcnkgb3duZXJzaGlwXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMzQ1LSAqIEBtZW1fYWRkcjogbWVtIHJlZ2lvbiB3aG9zZSBvd25lcnNoaXAgbmVlZCB0byBiZSByZWFzc2lnbmVkXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTM1NC0gKi9cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEzNTU6aW50IHFjb21fc2NtX2Fzc2lnbl9tZW0ocGh5c19hZGRyX3QgbWVtX2FkZHIsIHNpemVfdCBtZW1fc3osXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMzU2LVx0XHRcdHU2NCAqc3Jjdm0sXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTQxMi1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE0MTM6XHRyZXQgPSBfX3Fjb21fc2NtX2Fzc2lnbl9tZW0oX19zY20tXHUwMDNlZGV2LCBtZW1fdG9fbWFwX3BoeXMsIG1lbV90b19tYXBfc3osXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDE0LVx0XHRcdFx0ICAgIHB0cl9waHlzLCBzcmNfc3osIGRlc3RfcGh5cywgZGVzdF9zeik7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTQyMy19XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNDI0OkVYUE9SVF9TWU1CT0xfR1BMKHFjb21fc2NtX2Fzc2lnbl9tZW0pO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTQyNS1cbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jPTMzNT1zdGF0aWMgdm9pZCBmYXN0cnBjX2ZyZWVfbWFwKHN0cnVjdCBrcmVmICpyZWYpXG4tLVxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy0zNDktXHRcdFx0cGVybS5wZXJtID0gUUNPTV9TQ01fUEVSTV9SV1g7XG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjM1MDpcdFx0XHRlcnIgPSBxY29tX3NjbV9hc3NpZ25fbWVtKG1hcC1cdTAwM2VkbWFfYWRkciwgbWFwLVx1MDAzZWxlbixcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMzUxLVx0XHRcdFx0XHUwMDI2c3JjX3Blcm1zLCBcdTAwMjZwZXJtLCAxKTtcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jPTgzND1zdGF0aWMgaW50IGZhc3RycGNfbWFwX2F0dGFjaChzdHJ1Y3QgZmFzdHJwY191c2VyICpmbCwgaW50IGZkLFxuLS1cbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtOTAwLVx0XHRtYXAtXHUwMDNlYXR0ciA9IGF0dHI7XG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjkwMTpcdFx0ZXJyID0gcWNvbV9zY21fYXNzaWduX21lbShtYXAtXHUwMDNlZG1hX2FkZHIsICh1NjQpbWFwLVx1MDAzZWxlbiwgXHUwMDI2c3JjX3Blcm1zLCBkc3RfcGVybXMsIDIpO1xuZHJpdmVycy9taXNjL2Zhc3RycGMuYy05MDItXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jPTEzMzg9c3RhdGljIGludCBmYXN0cnBjX2luaXRfY3JlYXRlX3N0YXRpY19wcm9jZXNzKHN0cnVjdCBmYXN0cnBjX3VzZXIgKmZsLFxuLS1cbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTM4My1cbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmM6MTM4NDpcdFx0XHRlcnIgPSBxY29tX3NjbV9hc3NpZ25fbWVtKGZsLVx1MDAzZWNjdHgtXHUwMDNlcmVtb3RlX2hlYXAtXHUwMDNlZG1hX2FkZHIsXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTEzODUtXHRcdFx0XHRcdFx0XHQodTY0KWZsLVx1MDAzZWNjdHgtXHUwMDNlcmVtb3RlX2hlYXAtXHUwMDNlc2l6ZSxcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTE0NDAtXHRcdGRzdF9wZXJtcy5wZXJtID0gUUNPTV9TQ01fUEVSTV9SV1g7XG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjE0NDE6XHRcdGVyciA9IHFjb21fc2NtX2Fzc2lnbl9tZW0oZmwtXHUwMDNlY2N0eC1cdTAwM2VyZW1vdGVfaGVhcC1cdTAwM2VkbWFfYWRkcixcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTQ0Mi1cdFx0XHRcdFx0XHQodTY0KWZsLVx1MDAzZWNjdHgtXHUwMDNlcmVtb3RlX2hlYXAtXHUwMDNlc2l6ZSxcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jPTE5MzA9c3RhdGljIGludCBmYXN0cnBjX3JlcV9tbWFwKHN0cnVjdCBmYXN0cnBjX3VzZXIgKmZsLCBjaGFyIF9fdXNlciAqYXJncClcbi0tXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTIwMDEtXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjIwMDI6XHRcdGVyciA9IHFjb21fc2NtX2Fzc2lnbl9tZW0oYnVmLVx1MDAzZWRtYV9hZGRyLCAodTY0KWJ1Zi1cdTAwM2VzaXplLFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy0yMDAzLVx0XHRcdFx1MDAyNnNyY19wZXJtcywgZmwtXHUwMDNlY2N0eC1cdTAwM2V2bXBlcm1zLCBmbC1cdTAwM2VjY3R4LVx1MDAzZXZtY291bnQpO1xuLS1cbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmM9MjM2ND1zdGF0aWMgaW50IGZhc3RycGNfcnBtc2dfcHJvYmUoc3RydWN0IHJwbXNnX2RldmljZSAqcnBkZXYpXG4tLVxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy0yNDE4LVxuZHJpdmVycy9taXNjL2Zhc3RycGMuYzoyNDE5Olx0XHRcdGVyciA9IHFjb21fc2NtX2Fzc2lnbl9tZW0ocmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKFx1MDAyNnJlcyksIFx1MDAyNnNyY19wZXJtcyxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMjQyMC1cdFx0XHRcdCAgICBkYXRhLVx1MDAzZXZtcGVybXMsIGRhdGEtXHUwMDNldm1jb3VudCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9xbWkuYz0zMj1zdGF0aWMgaW50IGF0aDEwa19xbWlfbWFwX21zYV9wZXJtaXNzaW9uKHN0cnVjdCBhdGgxMGtfcW1pICpxbWksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9xbWkuYy01NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvcW1pLmM6NTY6XHRyZXQgPSBxY29tX3NjbV9hc3NpZ25fbWVtKG1lbV9pbmZvLVx1MDAzZWFkZHIsIG1lbV9pbmZvLVx1MDAzZXNpemUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3FtaS5jLTU3LVx0XHRcdFx0ICBcdTAwMjZzcmNfcGVybXMsIGRzdF9wZXJtcywgcGVybV9jb3VudCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9xbWkuYz02ND1zdGF0aWMgaW50IGF0aDEwa19xbWlfdW5tYXBfbXNhX3Blcm1pc3Npb24oc3RydWN0IGF0aDEwa19xbWkgKnFtaSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3FtaS5jLTc5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9xbWkuYzo4MDpcdHJldCA9IHFjb21fc2NtX2Fzc2lnbl9tZW0obWVtX2luZm8tXHUwMDNlYWRkciwgbWVtX2luZm8tXHUwMDNlc2l6ZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvcW1pLmMtODEtXHRcdFx0XHQgIFx1MDAyNnNyY19wZXJtcywgXHUwMDI2ZHN0X3Blcm1zLCAxKTtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYz04MDM9c3RhdGljIGludCBiYW1fZG11eF9hbGxvY19jb2hlcmVudF9yeChzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtODMxLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6ODMyOlx0cmV0ID0gcWNvbV9zY21fYXNzaWduX21lbShkbXV4LVx1MDAzZXJ4X2J1Zl9kbWEsIHNpemUsIFx1MDAyNnNyYywgZHN0LCBBUlJBWV9TSVpFKGRzdCkpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtODMzLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jPTg0ND1zdGF0aWMgdm9pZCBiYW1fZG11eF9mcmVlX2NvaGVyZW50X3J4KHN0cnVjdCBiYW1fZG11eCAqZG11eClcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy04NTUtXHRpZiAoZG11eC1cdTAwM2VyeF9idWZfcGVybXMpIHtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjg1NjpcdFx0aWYgKHFjb21fc2NtX2Fzc2lnbl9tZW0oZG11eC1cdTAwM2VyeF9idWZfZG1hLCBzaXplLCBcdTAwMjZkbXV4LVx1MDAzZXJ4X2J1Zl9wZXJtcyxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTg1Ny1cdFx0XHRcdFx0XHUwMDI2aGxvcywgMSkpIHtcbi0tXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X21zcy5jPTQ2Mz1zdGF0aWMgaW50IHE2djVfeGZlcl9tZW1fb3duZXJzaGlwKHN0cnVjdCBxNnY1ICpxcHJvYywgdTY0ICpjdXJyZW50X3Blcm0sXG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYy00ODgtXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X21zcy5jOjQ4OTpcdHJldHVybiBxY29tX3NjbV9hc3NpZ25fbWVtKGFkZHIsIEFMSUdOKHNpemUsIFNaXzRLKSxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmMtNDkwLVx0XHRcdFx0ICAgY3VycmVudF9wZXJtLCBuZXh0LCBwZXJtcyk7XG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9wYXMuYz02NjA9c3RhdGljIGludCBxY29tX3Bhc19hc3NpZ25fbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgcWNvbV9wYXMgKnBhcylcbi0tXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X3Bhcy5jLTY5Ny1cbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfcGFzLmM6Njk4Olx0XHRyZXQgPSBxY29tX3NjbV9hc3NpZ25fbWVtKHBhcy1cdTAwM2VyZWdpb25fYXNzaWduX3BoeXNbb2Zmc2V0XSxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfcGFzLmMtNjk5LVx0XHRcdFx0XHQgIHBhcy1cdTAwM2VyZWdpb25fYXNzaWduX3NpemVbb2Zmc2V0XSxcbi0tXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X3Bhcy5jPTcxMT1zdGF0aWMgdm9pZCBxY29tX3Bhc191bmFzc2lnbl9tZW1vcnlfcmVnaW9uKHN0cnVjdCBxY29tX3BhcyAqcGFzKVxuLS1cbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfcGFzLmMtNzIzLVxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9wYXMuYzo3MjQ6XHRcdHJldCA9IHFjb21fc2NtX2Fzc2lnbl9tZW0ocGFzLVx1MDAzZXJlZ2lvbl9hc3NpZ25fcGh5c1tvZmZzZXRdLFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9wYXMuYy03MjUtXHRcdFx0XHRcdCAgcGFzLVx1MDAzZXJlZ2lvbl9hc3NpZ25fc2l6ZVtvZmZzZXRdLFxuLS1cbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmM9MTcxPXN0YXRpYyBpbnQgcWNvbV9ybXRmc19tZW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jLTI3Mi1cdFx0cm10ZnNfbWVtLVx1MDAzZXBlcm1zID0gQklUKFFDT01fU0NNX1ZNSURfSExPUyk7XG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jOjI3MzpcdFx0cmV0ID0gcWNvbV9zY21fYXNzaWduX21lbShybXRmc19tZW0tXHUwMDNlYWRkciwgcm10ZnNfbWVtLVx1MDAzZXNpemUsXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jLTI3NC1cdFx0XHRcdFx0ICBcdTAwMjZybXRmc19tZW0tXHUwMDNlcGVybXMsIHBlcm1zLCBudW1fdm1pZHMgJiM0MzsgMSk7XG4tLVxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYz0yOTM9c3RhdGljIHZvaWQgcWNvbV9ybXRmc19tZW1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYy0zMDEtXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jOjMwMjpcdFx0cWNvbV9zY21fYXNzaWduX21lbShybXRmc19tZW0tXHUwMDNlYWRkciwgcm10ZnNfbWVtLVx1MDAzZXNpemUsXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jLTMwMy1cdFx0XHRcdCAgICBcdTAwMjZybXRmc19tZW0tXHUwMDNlcGVybXMsIFx1MDAyNnBlcm0sIDEpO1xuLS1cbmluY2x1ZGUvbGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oPTEwNz1pbnQgcWNvbV9zY21fbWVtX3Byb3RlY3RfdmlkZW9fdmFyKHUzMiBjcF9zdGFydCwgdTMyIGNwX3NpemUsXG5pbmNsdWRlL2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaC0xMDgtXHRcdFx0XHQgICB1MzIgY3Bfbm9ucGl4ZWxfc3RhcnQsIHUzMiBjcF9ub25waXhlbF9zaXplKTtcbmluY2x1ZGUvbGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oOjEwOTppbnQgcWNvbV9zY21fYXNzaWduX21lbShwaHlzX2FkZHJfdCBtZW1fYWRkciwgc2l6ZV90IG1lbV9zeiwgdTY0ICpzcmMsXG5pbmNsdWRlL2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaC0xMTAtXHRcdFx0Y29uc3Qgc3RydWN0IHFjb21fc2NtX3ZtcGVybSAqbmV3dm0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTM0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBxY29tX3NjbV9hc3NpZ25fbWVtYCwgcHV0dGluZyBteXNlbGYgaW4gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHFjb21fc2NtX2Fzc2lnbl9tZW1gKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHFjb21fc2NtX2Fzc2lnbl9tZW1gLiBGaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBpdCYjMzk7cyAqc3VwcG9zZWQqIHRvIGRvLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBmdW5jdGlvbiByZWxhdGVkIHRvIG1lbW9yeSBhc3NpZ25tZW50IHdpdGhpbiB0aGUgUXVhbGNvbW0gU2VjdXJlIENvbXB1dGUgTW9kdWxlIChTQ00pIGNvbnRleHQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZXNwb25zaWJsZSBmb3Igc2VjdXJlbHkgYWxsb2NhdGluZyBhbmQvb3IgbWFwcGluZyBtZW1vcnkgcmVnaW9ucywgbGlrZWx5IGZvciB1c2UgYnkgdHJ1c3RlZCBhcHBsaWNhdGlvbnMgb3Igc2VjdXJlIHByb2Nlc3NpbmcgZW52aXJvbm1lbnRzLiBJdCYjMzk7cyBwcm9iYWJseSBjYWxsZWQgZnJvbSB0aGUgU0NNIHNpZGUsIG9yIG1heWJlIGEgY29udGV4dCB0aGF0IGludGVyYWN0cyB3aXRoIGl0LCB0byBzZXR1cCB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBmb3IgdmFyaW91cyBzZWN1cmUgb3BlcmF0aW9ucy4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIGFzcGVjdHM6CgoqICAgKipTZWN1cml0eSBDb250ZXh0OioqIFRoaXMgaXMgYW4gU0NNIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byBjb25zaWRlciB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIHJpZ2h0IGF3YXkuIFRoaW5ncyBsaWtlIG1lbW9yeSBwcm90ZWN0aW9uLCBhY2Nlc3MgY29udHJvbCwgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIGluY29ycmVjdCBtZW1vcnkgYm91bmRhcmllcyBhcmUgZ29pbmcgdG8gYmUga2V5IGNvbmNlcm5zIHRvIHdhdGNoIGZvci4KKiAgICoqUGxhdGZvcm0gU3BlY2lmaWNzOioqIFF1YWxjb21tIHBsYXRmb3JtcyBoYXZlIHRoZWlyIG93biBpbnRyaWNhY2llcyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBTbyBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udGFpbiBjb2RlIHNwZWNpZmljIHRvIHRoZSBwYXJ0aWN1bGFyIFNvQywgbWVtb3J5IGNvbnRyb2xsZXJzLCBhbmQgc2VjdXJpdHkgZmVhdHVyZXMgaW1wbGVtZW50ZWQgb24gdGhlIHBsYXRmb3JtLiBUaGlzIG1heSBjb250YWluIGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIGRpZmZlcmVudCBoYXJkd2FyZSByZXZpc2lvbnMgb3IgY29uZmlndXJhdGlvbnMsIGFuZCBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGlmIHRoaXMgaXMgaGFuZGxlZCBjb3JyZWN0bHkuCiogICAqKlJlc291cmNlIE1hbmFnZW1lbnQ6KiogSSBhbnRpY2lwYXRlIGl0IHdpbGwgYmUgZG9pbmcgc29tZSBib29ra2VlcGluZyBvbiByZXNvdXJjZSBhdmFpbGFiaWxpdHkgYW5kIGNvbnN0cmFpbnRzLCB3aXRoIGNhcmVmdWwgaGFuZGxpbmcgb2YgcG90ZW50aWFsIGFsbG9jYXRpb24gZmFpbHVyZXMuIEkmIzM5O20gYWxzbyByZWFkeSB0byBzZWUgc29tZSBlcnJvciBoYW5kbGluZy4KKiAgICoqSW50ZXJhY3Rpb25zOioqIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbnRlcmFjdGlvbnMgdGhpcyBmdW5jdGlvbiBtaWdodCBoYXZlIHdpdGggb3RoZXIgU0NNIGNvbXBvbmVudHMsIHN1Y2ggYXMgbWVtb3J5IHByb3RlY3Rpb24gY29udHJvbGxlcnMsIGJvb3Rsb2FkZXJzLCBvciBvdGhlciBzZWN1cml0eSBtb2R1bGVzLiBIb3cgaXQgd29ya3Mgd2l0aCB0aGUgU0NNIGNvbnRleHQgYW5kIGl0cyBhc3NvY2lhdGVkIHNlY3VyaXR5IGZlYXR1cmVzIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwuCiogICAqKk1lbW9yeSBNYXBwaW5nIERldGFpbHM6KiogTWVtb3J5IG1hcHBpbmcgZGV0YWlscyBhcmUgYWx3YXlzIGltcG9ydGFudC4gV2hhdCByZWdpb25zIGFyZSBiZWluZyBhc3NpZ25lZD8gQXJlIHRoZXJlIHNwZWNpYWwgY29uc2lkZXJhdGlvbnMgZm9yIHBoeXNpY2FsIHZzLiB2aXJ0dWFsIGFkZHJlc3NlcywgY2FjaGUgY29oZXJlbmN5LCBvciBtZW1vcnkgYXR0cmlidXRlcz8KKiAgICoqQ29udGV4dDoqKiBXaGF0IGNvbnRleHQgZG9lcyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGUgaW4/IElzIGl0IGFuIGludGVycnVwdCBjb250ZXh0LCBwcm9jZXNzIGNvbnRleHQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29udGV4dCB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb24gaXMgdXNlZCBhbmQgYW55IGFzc29jaWF0ZWQgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaXQgdXNlcy4KCkkmIzM5O20gbWVudGFsbHkgZ2VhcmluZyB1cCB0byBsb29rIGZvciBhbGwgdGhlc2UgYXNwZWN0cywgYW5kIG5vdyBJJiMzOTtsbCBzdGFydCBkaWdnaW5nIGluIGFuZCBzZWVpbmcgd2hhdCB0aGlzIGNvZGUgYWN0dWFsbHkgZG9lcy4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1NTpcdGludCBxY29tX3NjbV9hc3NpZ25fbWVtKHBoeXNfYWRkcl90IG1lbV9hZGRyLCBzaXplX3QgbWVtX3N6LFxuMTM1NjpcdFx0XHRcdHU2NCAqc3Jjdm0sXG4xMzU3Olx0XHRcdFx0Y29uc3Qgc3RydWN0IHFjb21fc2NtX3ZtcGVybSAqbmV3dm0sXG4xMzU4Olx0XHRcdFx0dW5zaWduZWQgaW50IGRlc3RfY250KVxuMTM1OTpcdHtcbjEzNjA6XHRcdHN0cnVjdCBxY29tX3NjbV9jdXJyZW50X3Blcm1faW5mbyAqZGVzdHZtO1xuMTM2MTpcdFx0c3RydWN0IHFjb21fc2NtX21lbV9tYXBfaW5mbyAqbWVtX3RvX21hcDtcbjEzNjI6XHRcdHBoeXNfYWRkcl90IG1lbV90b19tYXBfcGh5cztcbjEzNjM6XHRcdHBoeXNfYWRkcl90IGRlc3RfcGh5cztcbjEzNjQ6XHRcdHBoeXNfYWRkcl90IHB0cl9waHlzO1xuMTM2NTpcdFx0c2l6ZV90IG1lbV90b19tYXBfc3o7XG4xMzY2Olx0XHRzaXplX3QgZGVzdF9zejtcbjEzNjc6XHRcdHNpemVfdCBzcmNfc3o7XG4xMzY4Olx0XHRzaXplX3QgcHRyX3N6O1xuMTM2OTpcdFx0aW50IG5leHRfdm07XG4xMzcwOlx0XHRfX2xlMzIgKnNyYztcbjEzNzE6XHRcdGludCByZXQsIGksIGI7XG4xMzcyOlx0XHR1NjQgc3Jjdm1fYml0cyA9ICpzcmN2bTtcbjEzNzM6XHRcbjEzNzQ6XHRcdHNyY19zeiA9IGh3ZWlnaHQ2NChzcmN2bV9iaXRzKSAqIHNpemVvZigqc3JjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwNzYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQXNzaWdubWVudCBpbiB0aGUgUXVhbGNvbW0gU0NNKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gKnFjb21fc2NtX2Fzc2lnbl9tZW0qLi4uIHRoYXQmIzM5O3MgcmluZ2luZyBhIGJlbGwuIEFoLCB5ZXMsIGl0IHNlZW1zIEkgcmVtZW1iZXIgdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIGhlcmUsIHNvIEkgd2lsbCBhbmFseXplIHRoaXMgaW5mb3JtYXRpb24gdGhvcm91Z2hseSwgcmF0aGVyIHRoYW4gbWFrZSBhc3N1bXB0aW9ucy4gKnFjb21fc2NtX2Fzc2lnbl9tZW0qLi4uaXQmIzM5O3MgZGVmaW5pdGVseSBpbnZvbHZlZCBpbiBhc3NpZ25pbmcgbWVtb3J5IHRocm91Z2ggdGhlIFNlY3VyZSBDaGFubmVsIE1hbmFnZXIgKFNDTSksIGFzIHRoZSBuYW1lIHdvdWxkIHN1Z2dlc3QuIEFuZCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkgZnJvbSBteSBwcmV2aW91cyB3b3JrLCBpdCB3b3VsZCBzZWVtIHRoYXQgYHFjb21fc2NtX2Fzc2lnbl9tZW1gIGNhbGxzIGBfX3Fjb21fc2NtX2Fzc2lnbl9tZW1gIGludGVybmFsbHkuIEl0JiMzOTtzIGEgY29tbW9uIHBhdHRlcm4uIFVzdWFsbHksIHRoYXQga2luZCBvZiBzdHJ1Y3R1cmUgc3VnZ2VzdHMgYSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBvciBwZXJoYXBzIHNvbWUgcHJlLXByb2Nlc3NpbmcgYmVmb3JlIHRoZSBjb3JlIG1lbW9yeSBhc3NpZ25tZW50IHJvdXRpbmUgaXMgZW5nYWdlZC4gSSB3aWxsIG5lZWQgdG8gbG9vayBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMTY6XHRzdGF0aWMgaW50IF9fcWNvbV9zY21fYXNzaWduX21lbShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBoeXNfYWRkcl90IG1lbV9yZWdpb24sXG4xMzE3Olx0XHRcdFx0XHQgc2l6ZV90IG1lbV9zeiwgcGh5c19hZGRyX3Qgc3JjLCBzaXplX3Qgc3JjX3N6LFxuMTMxODpcdFx0XHRcdFx0IHBoeXNfYWRkcl90IGRlc3QsIHNpemVfdCBkZXN0X3N6KVxuMTMxOTpcdHtcbjEzMjA6XHRcdGludCByZXQ7XG4xMzIxOlx0XHRzdHJ1Y3QgcWNvbV9zY21fZGVzYyBkZXNjID0ge1xuMTMyMjpcdFx0XHQuc3ZjID0gUUNPTV9TQ01fU1ZDX01QLFxuMTMyMzpcdFx0XHQuY21kID0gUUNPTV9TQ01fTVBfQVNTSUdOLFxuMTMyNDpcdFx0XHQuYXJnaW5mbyA9IFFDT01fU0NNX0FSR1MoNywgUUNPTV9TQ01fUk8sIFFDT01fU0NNX1ZBTCxcbjEzMjU6XHRcdFx0XHRcdFx0IFFDT01fU0NNX1JPLCBRQ09NX1NDTV9WQUwsIFFDT01fU0NNX1JPLFxuMTMyNjpcdFx0XHRcdFx0XHQgUUNPTV9TQ01fVkFMLCBRQ09NX1NDTV9WQUwpLFxuMTMyNzpcdFx0XHQuYXJnc1swXSA9IG1lbV9yZWdpb24sXG4xMzI4Olx0XHRcdC5hcmdzWzFdID0gbWVtX3N6LFxuMTMyOTpcdFx0XHQuYXJnc1syXSA9IHNyYyxcbjEzMzA6XHRcdFx0LmFyZ3NbM10gPSBzcmNfc3osXG4xMzMxOlx0XHRcdC5hcmdzWzRdID0gZGVzdCxcbjEzMzI6XHRcdFx0LmFyZ3NbNV0gPSBkZXN0X3N6LFxuMTMzMzpcdFx0XHQuYXJnc1s2XSA9IDAsXG4xMzM0Olx0XHRcdC5vd25lciA9IEFSTV9TTUNDQ19PV05FUl9TSVAsXG4xMzM1Olx0XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc0OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSYjMzk7cyBGYWlsdXJlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgcG90ZW50aWFsIHBvaW50IG9mIGZhaWx1cmUuIEl0JiMzOTtzIGNhbGxpbmcgYHFjb21fc2NtX2NhbGxgLiBJZiB0aGF0IGZ1bmN0aW9uIGZhaWxzLCB3aGljaCBjb3VsZCBoYXBwZW4gaWYgU01DIGlzbiYjMzk7dCBzdXBwb3J0ZWQgb3IgdGhlIFNlY3VyZSBNb25pdG9yIHJldHVybnMgYW4gZXJyb3IsIHRoZW4gdGhpbmdzIGFyZSBnb2luZyB0byB1bnJhdmVsIHByZXR0eSBxdWlja2x5LiBJIGtub3cgdGhpcyBiZWNhdXNlLCBpZiBgcWNvbV9zY21fY2FsbGAgZG9lcyBmYWlsLCB0aGVuIGBxY29tX3NjbV9hc3NpZ25fbWVtYCByZXR1cm5zIGFuIGVycm9yLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhlIGZhaWx1cmUgb2YgYHFjb21fc2NtX2Fzc2lnbl9tZW1gIGRpcmVjdGx5IGNhdXNlcyBgYmFtX2RtdXhfYWxsb2NfY29oZXJlbnRfcnhgIHRvIHJldHVybiBhbiBlcnJvciwgd2hpY2gsIGluIHR1cm4sIGNhdXNlcyBgYmFtX2RtdXhfcHJvYmVgIHRvIGZhaWwuIEVzc2VudGlhbGx5LCBhIGZhaWxlZCBTQ00gY2FsbCBzaW5rcyB0aGUgd2hvbGUgcHJvYmUuIFRoZSBjb2RlIGV4cGxpY2l0bHkgc2hvd3MgdGhpcyBlcnJvciBwYXRoLCBzbyBpdCYjMzk7cyBzaW1wbGUgdG8gcmVhc29uIGFib3V0IHRoaXMuCgpOb3csIG15IHJlYWwgcXVlc3Rpb24gaXMsIGNhbiBgcWNvbV9zY21fYXNzaWduX21lbWAgYWN0dWFsbHkgc3VjY2VlZCBpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IEkgYW0gY29uY2VybmVkIGhlcmUgYmVjYXVzZSBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIHR5cGljYWwgUUVNVSBhcm02NCBWTSwgYHFjb21fc2NtX2NhbGxgIGlzIGdvaW5nIHRvIG1ha2UgYW4gU01DIGNhbGwuIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgaGFwcGVucyB3aXRoIFNNQyBjYWxscyB3aGVuIG5vIEVMMyBmaXJtd2FyZSwgc3VjaCBhcyBURi1BLCBpcyBwcmVzZW50LiBUaGVuIEkgcmVtZW1iZXIgdGhhdCBpZiBRRU1VIGlzIGxhdW5jaGVkIHdpdGggYC1tYWNoaW5lIHZpcnQsc2VjdXJlPW9mZmAgd2hpY2ggaXMgdGhlIGRlZmF1bHQsIHRoZW4gU01DIGluc3RydWN0aW9ucyBiZWNvbWUgVU5ERUZJTkVEIGFuZCB3aWxsIGdlbmVyYXRlIGFuIGV4Y2VwdGlvbiwgdGhhdCB0aGUga2VybmVsIHdpbGwgbGlrZWx5IGhhbmRsZS4gQnV0LCB3YWl0LCB0aGF0IGlzIGlmIFNNQyBpcyBldmVuIHN1cHBvcnRlZC4gV2Ugc2hvdWxkIGNoZWNrIHdoYXQgaGFwcGVucyBpZiBpdCBpcyBub3Qgc3VwcG9ydGVkIGluIGBxY29tX3NjbV9jYWxsYC4gSSBzaG91bGQgZ28gbG9vayBhdCBgcWNvbV9zY21fY2FsbGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Fjb21fc2NtX2NhbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLWxlZ2FjeS5jPTExMD1zdGF0aWMgdm9pZCBfX3NjbV9sZWdhY3lfZG8oY29uc3Qgc3RydWN0IGFybV9zbWNjY19hcmdzICpzbWMsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLWxlZ2FjeS5jLTEyOC0gKiBOb3RlIHRoYXQgYW55IGJ1ZmZlcnMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgYWNjZXNzZWQgYnkgdGhlIHNlY3VyZSB3b3JsZFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLWxlZ2FjeS5jOjEyOTogKiBtdXN0IGJlIGZsdXNoZWQgYmVmb3JlIGludm9raW5nIHFjb21fc2NtX2NhbGwgYW5kIGludmFsaWRhdGVkIGluIHRoZSBjYWNoZVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLWxlZ2FjeS5jOjEzMDogKiBpbW1lZGlhdGVseSBhZnRlciBxY29tX3NjbV9jYWxsIHJldHVybnMuIENhY2hlIG1haW50ZW5hbmNlIG9uIHRoZSBjb21tYW5kXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20tbGVnYWN5LmM6MTMxOiAqIGFuZCByZXNwb25zZSBidWZmZXJzIGlzIHRha2VuIGNhcmUgb2YgYnkgcWNvbV9zY21fY2FsbDsgaG93ZXZlciwgY2FsbGVycyBhcmVcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS1sZWdhY3kuYy0xMzItICogcmVzcG9uc2libGUgZm9yIGFueSBvdGhlciBjYWNoZWQgYnVmZmVycyBwYXNzZWQgb3ZlciB0byB0aGUgc2VjdXJlIHdvcmxkLlxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTIzOD1zdGF0aWMgZW51bSBxY29tX3NjbV9jb252ZW50aW9uIF9fZ2V0X2NvbnZlbnRpb24odm9pZClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zMDUtLyoqXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzozMDY6ICogcWNvbV9zY21fY2FsbCgpIC0gSW52b2tlIGEgc3lzY2FsbCBpbiB0aGUgc2VjdXJlIHdvcmxkXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zMDctICogQGRldjpcdGRldmljZVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTMxMy0gKi9cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjMxNDpzdGF0aWMgaW50IHFjb21fc2NtX2NhbGwoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgcWNvbV9zY21fZGVzYyAqZGVzYyxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTMxNS1cdFx0XHQgc3RydWN0IHFjb21fc2NtX3JlcyAqcmVzKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTMzMC0vKipcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjMzMTogKiBxY29tX3NjbV9jYWxsX2F0b21pYygpIC0gYXRvbWljIHZhcmlhdGlvbiBvZiBxY29tX3NjbV9jYWxsKClcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTMzMi0gKiBAZGV2Olx0ZGV2aWNlXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMzM4LSAqL1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MzM5OnN0YXRpYyBpbnQgcWNvbV9zY21fY2FsbF9hdG9taWMoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMzQwLVx0XHRcdFx0Y29uc3Qgc3RydWN0IHFjb21fc2NtX2Rlc2MgKmRlc2MsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MzU1PXN0YXRpYyBib29sIF9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgc3ZjX2lkLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTM4MC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjM4MTpcdHJldCA9IHFjb21fc2NtX2NhbGwoZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMzgyLVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTM4Nj1zdGF0aWMgaW50IHFjb21fc2NtX3NldF9ib290X2FkZHIodm9pZCAqZW50cnksIGNvbnN0IHU4ICpjcHVfYml0cylcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy00MDUtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo0MDY6XHRyZXR1cm4gcWNvbV9zY21fY2FsbF9hdG9taWMoX19zY20gPyBfX3NjbS1cdTAwM2VkZXYgOiBOVUxMLCBcdTAwMjZkZXNjLCBOVUxMKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTQwNy19XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9NDA5PXN0YXRpYyBpbnQgcWNvbV9zY21fc2V0X2Jvb3RfYWRkcl9tYyh2b2lkICplbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTQyNy1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjQyODpcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy00MjktfVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTQ2OD12b2lkIHFjb21fc2NtX2NwdV9wb3dlcl9kb3duKHUzMiBmbGFncylcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy00NzctXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo0Nzg6XHRxY29tX3NjbV9jYWxsX2F0b21pYyhfX3NjbSA/IF9fc2NtLVx1MDAzZWRldiA6IE5VTEwsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNDc5LX1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz00ODI9aW50IHFjb21fc2NtX3NldF9yZW1vdGVfc3RhdGUodTMyIHN0YXRlLCB1MzIgaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNDk0LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6NDk1Olx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy00OTYtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9NTAxPXN0YXRpYyBpbnQgcWNvbV9zY21fZGlzYWJsZV9zZGkodm9pZClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy01MTYtXHRcdHJldHVybiByZXQ7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo1MTc6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTUxOC1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz01MjQ9c3RhdGljIGludCBfX3Fjb21fc2NtX3NldF9kbG9hZF9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNTM1LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6NTM2Olx0cmV0dXJuIHFjb21fc2NtX2NhbGxfYXRvbWljKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy01MzctfVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTYwNz1zdGF0aWMgaW50IF9fcWNvbV9zY21fcGFzX2luaXRfaW1hZ2UodTMyIHBhc19pZCwgZG1hX2FkZHJfdCBtZGF0YV9waHlzLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTYyOC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjYyOTpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCByZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNjMwLVx0cWNvbV9zY21fYndfZGlzYWJsZSgpO1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTc0OT1pbnQgcWNvbV9zY21fcGFzX21lbV9zZXR1cCh1MzIgcGFzX2lkLCBwaHlzX2FkZHJfdCBhZGRyLCBwaHlzX2FkZHJfdCBzaXplKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTc3MC1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjc3MTpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNzcyLVx0cWNvbV9zY21fYndfZGlzYWJsZSgpO1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTc4MT1zdGF0aWMgdm9pZCAqX19xY29tX3NjbV9wYXNfZ2V0X3JzY190YWJsZSh1MzIgcGFzX2lkLCB2b2lkICppbnB1dF9ydF90em0sXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtODE1LVx0ICovXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo4MTY6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTgxNy1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiByZXMucmVzdWx0WzJdIFx1MDAzZSBTWl8xRykge1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTk1NT1pbnQgcWNvbV9zY21fcGFzX2F1dGhfYW5kX3Jlc2V0KHUzMiBwYXNfaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtOTc0LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6OTc1Olx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy05NzYtXHRxY29tX3NjbV9id19kaXNhYmxlKCk7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTAzOD1pbnQgcWNvbV9zY21fcGFzX3NodXRkb3duKHUzMiBwYXNfaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTA1Ny1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEwNTg6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEwNTktXHRxY29tX3NjbV9id19kaXNhYmxlKCk7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTA3NT1ib29sIHFjb21fc2NtX3Bhc19zdXBwb3J0ZWQodTMyIHBhc19pZClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMDkwLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTA5MTpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTA5Mi1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMDk3PXN0YXRpYyBpbnQgX19xY29tX3NjbV9wYXNfbXNzX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCByZXNldClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTA5LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTExMDpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTExMS1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMTM4PWludCBxY29tX3NjbV9pb19yZWFkbChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBpbnQgKnZhbClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTUwLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTE1MTpcdHJldCA9IHFjb21fc2NtX2NhbGxfYXRvbWljKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTExNTItXHRpZiAocmV0IFx1MDAzZT0gMClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMTU5PWludCBxY29tX3NjbV9pb193cml0ZWwocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgaW50IHZhbClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTY5LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTE3MDpcdHJldHVybiBxY29tX3NjbV9jYWxsX2F0b21pYyhfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTE3MS19XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTE4Nz1pbnQgcWNvbV9zY21fcmVzdG9yZV9zZWNfY2ZnKHUzMiBkZXZpY2VfaWQsIHUzMiBzcGFyZSlcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTk5LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTIwMDpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTIwMS1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMjE1PWludCBxY29tX3NjbV9zZXRfZ3B1X3NtbXVfYXBlcnR1cmUodW5zaWduZWQgaW50IGNvbnRleHRfYmFuaylcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjI3LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTIyODpcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjI5LX1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMjMyPWludCBxY29tX3NjbV9pb21tdV9zZWN1cmVfcHRibF9zaXplKHUzMiBzcGFyZSwgc2l6ZV90ICpzaXplKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEyNDMtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMjQ0Olx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjQ1LVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEyNTM9aW50IHFjb21fc2NtX2lvbW11X3NlY3VyZV9wdGJsX2luaXQodTY0IGFkZHIsIHUzMiBzaXplLCB1MzIgc3BhcmUpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTI2Ni1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEyNjc6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjY4LVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEyNzc9aW50IHFjb21fc2NtX2lvbW11X3NldF9jcF9wb29sX3NpemUodTMyIHNwYXJlLCB1MzIgc2l6ZSlcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjg3LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTI4ODpcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjg5LX1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMjkyPWludCBxY29tX3NjbV9tZW1fcHJvdGVjdF92aWRlb192YXIodTMyIGNwX3N0YXJ0LCB1MzIgY3Bfc2l6ZSxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMzA5LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTMxMDpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTMxMS1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMzE2PXN0YXRpYyBpbnQgX19xY29tX3NjbV9hc3NpZ25fbWVtKHN0cnVjdCBkZXZpY2UgKmRldiwgcGh5c19hZGRyX3QgbWVtX3JlZ2lvbixcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMzM3LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTMzODpcdHJldCA9IHFjb21fc2NtX2NhbGwoZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTMzOS1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xNDQ1PWludCBxY29tX3NjbV9vY21lbV9sb2NrKGVudW0gcWNvbV9zY21fb2NtZW1fY2xpZW50IGlkLCB1MzIgb2Zmc2V0LCB1MzIgc2l6ZSxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDU3LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTQ1ODpcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDU5LX1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xNDcwPWludCBxY29tX3NjbV9vY21lbV91bmxvY2soZW51bSBxY29tX3NjbV9vY21lbV9jbGllbnQgaWQsIHUzMiBvZmZzZXQsIHUzMiBzaXplKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE0ODAtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNDgxOlx0cmV0dXJuIHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBOVUxMKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE0ODItfVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE1MTI9aW50IHFjb21fc2NtX2ljZV9pbnZhbGlkYXRlX2tleSh1MzIgaW5kZXgpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTUyMS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE1MjI6XHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTUyMy19XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTU0Nz1pbnQgcWNvbV9zY21faWNlX3NldF9rZXkodTMyIGluZGV4LCBjb25zdCB1OCAqa2V5LCB1MzIga2V5X3NpemUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTU3Mi1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE1NzM6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNTc0LVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE2MTA9aW50IHFjb21fc2NtX2Rlcml2ZV9zd19zZWNyZXQoY29uc3QgdTggKmVwaF9rZXksIHNpemVfdCBlcGhfa2V5X3NpemUsXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTYzOS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE2NDA6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNjQxLVx0aWYgKCFyZXQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTY2MT1pbnQgcWNvbV9zY21fZ2VuZXJhdGVfaWNlX2tleSh1OCAqbHRfa2V5LCBzaXplX3QgbHRfa2V5X3NpemUpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTY3OS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE2ODA6XHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNjgxLVx0aWYgKCFyZXQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTcwMj1pbnQgcWNvbV9zY21fcHJlcGFyZV9pY2Vfa2V5KGNvbnN0IHU4ICpsdF9rZXksIHNpemVfdCBsdF9rZXlfc2l6ZSxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNzMxLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTczMjpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBOVUxMKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE3MzMtXHRpZiAoIXJldClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xNzU1PWludCBxY29tX3NjbV9pbXBvcnRfaWNlX2tleShjb25zdCB1OCAqcmF3X2tleSwgc2l6ZV90IHJhd19rZXlfc2l6ZSxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNzg0LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTc4NTpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBOVUxMKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE3ODYtXHRpZiAoIXJldClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xODI1PWludCBxY29tX3NjbV9oZGNwX3JlcShzdHJ1Y3QgcWNvbV9zY21faGRjcF9yZXEgKnJlcSwgdTMyIHJlcV9jbnQsIHUzMiAqcmVzcClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xODU0LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTg1NTpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTg1Ni1cdCpyZXNwID0gcmVzLnJlc3VsdFswXTtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xODY0PWludCBxY29tX3NjbV9pb21tdV9zZXRfcHRfZm9ybWF0KHUzMiBzZWNfaWQsIHUzMiBjdHhfbnVtLCB1MzIgcHRfZm10KVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE4NzUtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxODc2Olx0cmV0dXJuIHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBOVUxMKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE4NzctfVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE4ODA9aW50IHFjb21fc2NtX3FzbW11NTAwX3dhaXRfc2FmZV90b2dnbGUoYm9vbCBlbilcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xODkxLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTg5MjpcdHJldHVybiBxY29tX3NjbV9jYWxsX2F0b21pYyhfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTg5My19XG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTkwOD1pbnQgcWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGUoc3RydWN0IGRldmljZSAqc2NtX2Rldilcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTIzLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTkyNDpcdHJldCA9IHFjb21fc2NtX2NhbGwoc2NtX2RldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5MjUtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTkzNj1pbnQgcWNvbV9zY21fc2htX2JyaWRnZV9jcmVhdGUodTY0IHBmbl9hbmRfbnNfcGVybV9mbGFncyxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTU0LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTk1NTpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTk1Ni1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xOTY0PWludCBxY29tX3NjbV9zaG1fYnJpZGdlX2RlbGV0ZSh1NjQgaGFuZGxlKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5NzMtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxOTc0Olx0cmV0dXJuIHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBOVUxMKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5NzUtfVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE5Nzg9aW50IHFjb21fc2NtX2xtaF9wcm9maWxlX2NoYW5nZSh1MzIgcHJvZmlsZV9pZClcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTg3LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTk4ODpcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgTlVMTCk7XG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTg5LX1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xOTkyPWludCBxY29tX3NjbV9sbWhfZGN2c2godTMyIHBheWxvYWRfZm4sIHUzMiBwYXlsb2FkX3JlZywgdTMyIHBheWxvYWRfdmFsLFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTIwMjItXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyMDIzOlx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cdTAwM2VkZXYsIFx1MDAyNmRlc2MsIE5VTEwpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjAyNC1cbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yMDI5PWludCBxY29tX3NjbV9ncHVfaW5pdF9yZWdzKHUzMiBncHVfcmVxKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTIwMzgtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyMDM5Olx0cmV0dXJuIHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBOVUxMKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTIwNDAtfVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTIwNzQ9c3RhdGljIGludCBfX3Fjb21fc2NtX3FzZWVjb21fY2FsbChjb25zdCBzdHJ1Y3QgcWNvbV9zY21fZGVzYyAqZGVzYyxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yMDg1LVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjA4NjpcdHN0YXR1cyA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBkZXNjLCBcdTAwMjZzY21fcmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTIwODctXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjQwND1pbnQgcWNvbV9zY21fcXRlZV9pbnZva2Vfc21jKHBoeXNfYWRkcl90IGluYnVmLCBzaXplX3QgaW5idWZfc2l6ZSxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNDIxLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjQyMjpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjQyMy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjQ0Nz1pbnQgcWNvbV9zY21fcXRlZV9jYWxsYmFja19yZXNwb25zZShwaHlzX2FkZHJfdCBidWYsIHNpemVfdCBidWZfc2l6ZSxcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNDYwLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjQ2MTpcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXHUwMDNlZGV2LCBcdTAwMjZkZXNjLCBcdTAwMjZyZXMpO1xuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjQ2Mi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjU4NT1zdGF0aWMgaW50IHFjb21fc2NtX3F1ZXJ5X3dhaXRxX2NvdW50KHN0cnVjdCBxY29tX3NjbSAqc2NtKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI1OTQtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNTk1Olx0cmV0ID0gcWNvbV9zY21fY2FsbF9hdG9taWMoc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI1OTYtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI2MDI9c3RhdGljIGludCBxY29tX3NjbV9nZXRfd2FpdHFfaXJxKHN0cnVjdCBxY29tX3NjbSAqc2NtKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI2MTQtXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNjE1Olx0cmV0ID0gcWNvbV9zY21fY2FsbF9hdG9taWMoc2NtLVx1MDAzZWRldiwgXHUwMDI2ZGVzYywgXHUwMDI2cmVzKTtcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI2MTYtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjI3MAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDc4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgYHFjb21fYmFtX2RtdXhgIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBmdXp6YWJsZS4gVGhlIGtleSBpcyB3aGV0aGVyIHN5emthbGxlciBjYW4gcmVhY2ggaXQuIEkgc3RhcnRlZCBieSB0aGlua2luZyBhYm91dCBob3cgYHFjb21fc2NtX2NhbGxgIHdvcmtzLiBJdCBjYW4gbGVhZCB0byBhbiB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIGlmIFNNQyBpcyBub3Qgc3VwcG9ydGVkIGFuZCB0aGUga2VybmVsIGlzIHJ1bm5pbmcgaW4gRUwxLCBidXQgdGhhdCYjMzk7cyBjaGVja2VkIGR1cmluZyBib290LiBUaGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBxY29tX3NjbV9wcm9iZWAgZXZlbiAqcnVucyouIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBhIGBxY29tLHNjbWAgbm9kZSBpbiB0aGUgZGV2aWNlIHRyZWUuIFN5emthbGxlciBkb2VzbiYjMzk7dCBkaXJlY3RseSBpbmplY3QgZGV2aWNlIHRyZWUgbm9kZXMsIHNvIHRoYXQmIzM5O3MgYSBkZWFkIGVuZC4KClRoZW4gaXQgaGl0cyBtZSwgdGhpcyBwYXRjaCBpcyAqdGVzdGVkKiBieSBzeXprYWxsZXIuIFRoZSBhdXRob3IgaXMgYHN5ei1jbHVzdGVyYCwgbWVhbmluZyBpdCYjMzk7cyBhIHBhdGNoIHVuZGVyIHRlc3QuIElmIHN5emthbGxlciBpcyB0ZXN0aW5nIGl0LCB0aGVuIGl0ICpjYW4qIHJlYWNoIHRoZSBjb2RlIHBhdGguIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgcG9pbnQuCgpCdXQgKmhvdyo/IGBxY29tX2JhbV9kbXV4YCBpcyBhIHBsYXRmb3JtIGRyaXZlci4gU28sIGl0ICptdXN0KiBiZSByZWFjaGFibGUgc29tZWhvdy4gVGhlIHByb21wdCBnaXZlcyBtZSB0aGUgYFdvcnRoRnV6emluZz1mYWxzZWAgbG9naWMgZm9yIHVucmVhY2hhYmxlIGNvZGUuIEJ1dCwgc3l6a2FsbGVyICp0ZXN0cyogdGhlIHBhdGNoLCBhbmQgc3l6a2FsbGVyIHRlc3RzIG9uIHRoZSBzYW1lIGluZnJhc3RydWN0dXJlIHdoZXJlIHRoZSBidWcgd2FzIGZvdW5kLiBJZiBzeXprYWxsZXIgZm91bmQgaXQsIGl0IGlzIHJlYWNoYWJsZS4KClRoZW4gSSBjb25zaWRlciBhIGRpZmZlcmVudCBzY2VuYXJpbzogTWF5YmUgc3l6Ym90IGlzIGp1c3QgdGVzdGluZyBhIGRldmVsb3BlciYjMzk7cyBwYXRjaC4gSW4gdGhpcyBjYXNlLCBpZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSwgc3l6Ym90IHdvdWxkIHNpbXBseSByZXBvcnQgJiMzNDtPSyYjMzQ7IHdpdGhvdXQgZnV6emluZyB0aGUgbmV3IGNvZGUuIFNvIHRoYXQgaGVscHMgZGV0ZXJtaW5lIHRoZSBsaWtlbGlob29kIG9mIHJlYWNoYWJpbGl0eS4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgcmVhY2hhYmxlIG9yIG5vdC4KCk5vdywgaG93IGFib3V0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gSXMgdGhlcmUgc29tZSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBpbnZvbHZlZD8gTm8uIElzIGBiYW1fZG11eF9wcm9iZWAgcmVhY2hhYmxlIGluIFFFTVU/IE9ubHkgaWYgdGhlIGRldmljZSB0cmVlIGhhcyBgcWNvbSxiYW0tZG11eGAuIERvZXMgdGhlIGRlZmF1bHQgYHZpcnRgIG1hY2hpbmUgaW4gUUVNVSBoYXZlIHRoYXQ/IE5vLiBTeXprYWxsZXIgdHlwaWNhbGx5IHVzZXMgYHZpcnRgLiBDb3VsZCBpdCBiZSByZWFjaGFibGUgdmlhIGBzeXpfZGV2X2NyZWF0ZWA/IE5vcGUsIHRoYXQmIzM5O3MgZm9yIGAvZGV2L2Agbm9kZXMuIFdhaXQuLi4gZG9lcyBzeXprYWxsZXIgaGF2ZSBhIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAgY2FsbCB0aGF0IG1pZ2h0IGRvIGl0PyBJIHNob3VsZCBjaGVjayB0aGUgc3l6a2FsbGVyIHBzZXVkby1zeXNjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6XyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jPTI4Mz1pbnQgaW9tbXVmZF9pb2FzX2NvcHkoc3RydWN0IGlvbW11ZmRfdWNtZCAqdWNtZClcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jLTI5Mi1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb2FzLmM6MjkzOlx0aW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmFfaWQodWNtZCwgY21kLVx1MDAzZXNyY19pb2FzX2lkLCBcdTAwMjZjbWQtXHUwMDNlc3JjX2lvdmEsXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jLTI5NC1cdFx0XHRcdCAgICAgIFx1MDAyNmNtZC1cdTAwM2VmbGFncyk7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvbW11ZmRfcHJpdmF0ZS5oPTcxMj1leHRlcm4gc2l6ZV90IGlvbW11ZmRfdGVzdF9tZW1vcnlfbGltaXQ7XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg6NzEzOnZvaWQgaW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmFfaWQoc3RydWN0IGlvbW11ZmRfdWNtZCAqdWNtZCxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaC03MTQtXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgaW9hc19pZCwgdTY0ICppb3ZhLCB1MzIgKmZsYWdzKTtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg9NzE5PWludCBpb21tdWZkX3Rlc3RfZG1hX2J1Zl9pb21tdWZkX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaC03MjEtI2Vsc2VcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaDo3MjI6c3RhdGljIGlubGluZSB2b2lkIGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhX2lkKHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQsXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmgtNzIzLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaW9hc19pZCxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYz01MT1zdGF0aWMgdm9pZCBtb2NrX2Rldl9kaXNhYmxlX2lvcGYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTU4LSAqL1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6NTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YShzdHJ1Y3QgaW9fcGFnZXRhYmxlICppb3B0LFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtNjAtXHRcdFx0XHRcdFx0ICB1NjQgKmlvdmEpXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02MS17XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo2MjpcdHN0cnVjdCBzeXpfbGF5b3V0IHtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTYzLVx0XHRfX3UzMiBudGhfYXJlYTtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02NS1cdH07XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo2NjpcdHN0cnVjdCBzeXpfbGF5b3V0ICpzeXogPSAodm9pZCAqKWlvdmE7XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02Ny1cdHVuc2lnbmVkIGludCBudGggPSBzeXotXHUwMDNlbnRoX2FyZWE7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtODMtXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo4NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBpb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YShzdHJ1Y3QgaW9tbXVmZF9hY2Nlc3MgKmFjY2VzcyxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTg1LVx0XHRcdFx0XHRcdHU2NCAqaW92YSlcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy05My1cdH1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjk0Olx0cmV0ID0gX19pb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YShcdTAwMjZhY2Nlc3MtXHUwMDNlaW9hcy1cdTAwM2Vpb3B0LCBpb3ZhKTtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTk1LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFjY2Vzcy1cdTAwM2Vpb2FzX2xvY2spO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTk4LVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6OTk6dm9pZCBpb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YV9pZChzdHJ1Y3QgaW9tbXVmZF91Y21kICp1Y21kLFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTAwLVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IGlvYXNfaWQsIHU2NCAqaW92YSwgdTMyICpmbGFncylcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy0xMTAtXHRcdHJldHVybjtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjExMTpcdCppb3ZhID0gX19pb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YShcdTAwMjZpb2FzLVx1MDAzZWlvcHQsIGlvdmEpO1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTEyLVx0aW9tbXVmZF9wdXRfb2JqZWN0KHVjbWQtXHUwMDNlaWN0eCwgXHUwMDI2aW9hcy1cdTAwM2VvYmopO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jPTE1Mjk9c3RhdGljIGludCBpb21tdWZkX3Rlc3RfYWNjZXNzX3BhZ2VzKHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTU1Ny1cdGlmIChmbGFncyBcdTAwMjYgTU9DS19GTEFHU19BQ0NFU1NfU1laKVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6MTU1ODpcdFx0aW92YSA9IGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhKHN0YWNjZXNzLVx1MDAzZWFjY2VzcyxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTE1NTktXHRcdFx0XHRcdFx0ICBcdTAwMjZjbWQtXHUwMDNlYWNjZXNzX3BhZ2VzLmlvdmEpO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jPTE2MjQ9c3RhdGljIGludCBpb21tdWZkX3Rlc3RfYWNjZXNzX3J3KHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTY1OS1cdGlmIChmbGFncyBcdTAwMjYgTU9DS19GTEFHU19BQ0NFU1NfU1laKVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6MTY2MDpcdFx0aW92YSA9IGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhKHN0YWNjZXNzLVx1MDAzZWFjY2VzcyxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTE2NjEtXHRcdFx0XHRcdFx0ICBcdTAwMjZjbWQtXHUwMDNlYWNjZXNzX3J3LmlvdmEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE2MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgU3RyYXRlZ3kgZm9yIGBxY29tX2JhbV9kbXV4YCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIHRoaXMgYHFjb21fYmFtX2RtdXhgIGRyaXZlci4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdGhhdCBgc3l6X2AgcHJlZml4ZXMgYXJlIHVzdWFsbHkgZXhlY3V0b3Itc2lkZSBjb2RlLCBub3Qga2VybmVsIGNvZGUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgcmVtZW1iZXIgdGhhdCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBtZWNoYW5pc20gZm9yIHRlc3RpbmcgcGF0Y2hlcy4gSG93ZXZlciwgaWYgdGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBhIGRyaXZlciwgYW5kIHRoYXQgZHJpdmVyIGlzbiYjMzk7dCBhY3R1YWxseSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgUUVNVSBlbnZpcm9ubWVudCDigJMgbWVhbmluZyBpdCYjMzk7cyBub3QgcmVhY2hhYmxlIGR1cmluZyB0ZXN0aW5nIOKAkyB0aGVuIGZ1enppbmcgaXQgaXMsIHJlYWxpc3RpY2FsbHksIGEgd2FzdGUgb2YgdGltZS4KClNvLCB0aGUga2V5IHF1ZXN0aW9uIGJlY29tZXM6IGlzIGBxY29tX2JhbV9kbXV4YCByZWFjaGFibGUgaW4gUUVNVT8gTGV0IG1lIHRoaW5rLi4uIEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGEgUXVhbGNvbW0gaGFyZHdhcmUgYmxvY2sgY2FsbGVkIHRoZSBCQU0gRGF0YSBNdWx0aXBsZXhlci4gUmlnaHQsIGl0JiMzOTtzIHByZXR0eSBwbGF0Zm9ybS1zcGVjaWZpYy4gVW5sZXNzIHRoZXJlJiMzOTtzIGEgUUVNVSBtYWNoaW5lIHNwZWNpZmljYWxseSBlbXVsYXRpbmcgdGhhdCBwYXJ0aWN1bGFyIGhhcmR3YXJlLCBvciB1bmxlc3MgdGhlcmXigJlzIHNvbWUga2luZCBvZiBjbGV2ZXIgc3l6a2FsbGVyIHBzZXVkby1kZXZpY2Ugb3IgbW9kdWxlIGluIHBsYWNlIHRvIHNpbXVsYXRlIGl0LCB0aGUgYW5zd2VyIGlzIHByb2JhYmx5IG5vLCBpdOKAmXMgbm90IGFjY2Vzc2libGUuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGFueSBldmlkZW5jZSBvZiBhIHN5emthbGxlciBwc2V1ZG8tZGV2aWNlIG9yIHRlc3QgbW9kdWxlIHNwZWNpZmljYWxseSBjcmFmdGVkIGZvciBgcWNvbV9iYW1fZG11eGAuIExldOKAmXMgc2VlIHdoYXQmIzM5O3Mgb3V0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxY29tX2JhbV9kbXV4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O01BSU5UQUlORVJTPTIyMTAxPUY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbFxuTUFJTlRBSU5FUlM6MjIxMDI6RjpcdGRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG5NQUlOVEFJTkVSUy0yMjEwMy1cbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc9NjU9Y29uZmlnIFFDT01fQkFNX0RNVVhcbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNzYtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjc3Olx0ICBjYWxsZWQgcWNvbV9iYW1fZG11eC5cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy03OC1cbi0tXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlPTEyPW9iai0kKENPTkZJR19NSElfV1dBTl9NQklNKSAmIzQzOz0gbWhpX3d3YW5fbWJpbS5vXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19RQ09NX0JBTV9ETVVYKSAmIzQzOz0gcWNvbV9iYW1fZG11eC5vXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlLTE0LW9iai0kKENPTkZJR19SUE1TR19XV0FOX0NUUkwpICYjNDM7PSBycG1zZ193d2FuX2N0cmwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTk0OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3l6a2FsbGVyJiMzOTtzIFBsYXRmb3JtIERldmljZSBDYXBhYmlsaXRpZXMqKgoKT2theSwgc28gdGhlcmUmIzM5O3Mgbm8gZGVkaWNhdGVkIHRlc3QgbW9kdWxlIGZvciBwbGF0Zm9ybSBkZXZpY2VzLCB0aGF0JiMzOTtzIGNsZWFyLiBIbW0sIGNhbiBTeXprYWxsZXIgaW5qZWN0IHRoZW0gdmlhIGBzeXpfZGV2X2NyZWF0ZWA/IE5vcGUsIHRoYXQgb25seSBoYW5kbGVzIGAvZGV2L2Agbm9kZXMuIFdoYXQgYWJvdXQgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYD8gTm8gbHVjayB0aGVyZSBlaXRoZXIuIERvZXMgaXQgaGF2ZSBhbnl0aGluZyB3aXRoIG5ldHdvcmsgc29ja2V0cyB0aGF0IG1pZ2h0IHJlbGF0ZSwgbWF5YmUgYHN5el9pbml0X25ldF9zb2NrZXRgPyBOb3BlLiBUaGVyZSBpcyBgc3l6X3VzYl9jb25uZWN0YCwgdGhvdWdoLCBmb3IgVVNCIGRldmljZXMuIEJ1dCBub3RoaW5nIGRpcmVjdGx5IGZvciBwbGF0Zm9ybSBkZXZpY2VzLgoKU28sIGl0IHNlZW1zIFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgKmdlbmVyaWMqIHdheSB0byBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBwc2V1ZG8tZGV2aWNlIGRyaXZlciBpbnZvbHZlZCDigJMgdGhpbmdzIGxpa2UgYG1hYzgwMjExX2h3c2ltYCwgYHZrbXNgLCBvciBgdmhjaWAuIElmIGBxY29tX2JhbV9kbXV4YCAqaXMqIGEgcGxhdGZvcm0gZHJpdmVyLCB0aGVuIGl0IHdpbGwgbmVlZCBhIHBsYXRmb3JtIGRldmljZSB0byBiZSByZWdpc3RlcmVkIGZpcnN0LiBUaGUgcXVlc3Rpb24gaXMsIGhvdyBkbyB5b3UgcmVnaXN0ZXIgc3VjaCBhIGRldmljZSBmcm9tIHVzZXJzcGFjZT8KClRoZXJlIGFyZSBhIGZldyBwb3RlbnRpYWwgYXZlbnVlczogRGV2aWNlIFRyZWUgT3ZlcmxheXMgKERUTykgdmlhIGNvbmZpZ2ZzLCB3cml0aW5nIHRvIGEgc3lzZnMgZmlsZSAobGlrZSBgbmV3X2RldmljZWAgZm9yIEkyQy9TUEksIGJ1dCBJIGRvbiYjMzk7dCB0aGluayBpdCYjMzk7cyBmb3IgcGxhdGZvcm0gYnVzZXMpLCBvciBhIGtlcm5lbCBtb2R1bGUgdGhhdCByZWdpc3RlcnMgaXQuIERvZXMgU3l6a2FsbGVyIHVzZSBEVE8/IExvb2tzIGxpa2UgdGhlcmUgaXMgc29tZSBtZW50aW9uIG9mIGl0LCBidXQgbm8sIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgoKV2FpdCwgaWYgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUsIHdoeSB3YXMgU3l6a2FsbGVyIGV2ZW4gdGVzdGluZyBpdD8gQWgsIHJpZ2h0LCBTeXprYWxsZXIgdGVzdHMgcGF0Y2hlcyBzdWJtaXR0ZWQgdGhyb3VnaCBlbWFpbCBvciBHZXJyaXQuIEl0JiMzOTtzIHBvc3NpYmxlIHRoYXQgdGhlIHBhdGNoIHdhcyBzZW50IHRvIHN5emJvdCBmb3IgdGVzdGluZy4gU3l6Ym90IG1pZ2h0IGNvbXBpbGUgYW5kIHJ1biB0aGUgcGF0Y2gsIGFuZCBpZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSwgc3l6Ym90IHdpbGwgcmVwb3J0ICYjMzQ7T0smIzM0OyBzaW5jZSBpdCBkaWRuJiMzOTt0IGNyYXNoLgoKQnV0LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBzZXQgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBpZiB0aGUgcGF0Y2ggY29udGFpbnMgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFNpbmNlIGBxY29tX2JhbV9kbXV4YCBpcyBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIGhhcmR3YXJlLCB0aGVyZSBpcyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhhdCBtZWFucyBpdCYjMzk7cyBpbXBvc3NpYmxlIHRvIHJlYWNoIGl0LgoKQWxyaWdodCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBtb3JlIHRpbWUsIG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBzb21ldGhpbmcuIElzIHRoZXJlIGFueSBvdGhlciBkcml2ZXIgdGhhdCByZWdpc3RlcnMgYHFjb20sYmFtLWRtdXhgPyBCZXR0ZXIgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Fjb20sYmFtLWRtdXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwtMy0tLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcWNvbSxiYW0tZG11eC55YW1sI1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwtNS0kc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbD0yMz1wcm9wZXJ0aWVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTI1LSAgICBvbmVPZjpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sOjI2OiAgICAgIC0gY29uc3Q6IHFjb20sYmFtLWRtdXhcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTI3LSAgICAgIC0gaXRlbXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwtMzAtICAgICAgICAgICAgICAtIHFjb20sc2hpa3JhLWJhbS1kbXV4XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbDozMTogICAgICAgICAgLSBjb25zdDogcWNvbSxiYW0tZG11eFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwtMzItXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWw9OTI9ZXhhbXBsZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwtOTctICAgICAgICBiYW0tZG11eCB7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbDo5ODogICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxiYW0tZG11eFwmIzM0OztcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTk5LVxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbXNtODkxNi1tc3MtcGlsLnlhbWw9MTY9cHJvcGVydGllczpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVtb3RlcHJvYy9xY29tLG1zbTg5MTYtbXNzLXBpbC55YW1sLTE1NC0gIGJhbS1kbXV4OlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtc204OTE2LW1zcy1waWwueWFtbDoxNTU6ICAgICRyZWY6IC9zY2hlbWFzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVtb3RlcHJvYy9xY29tLG1zbTg5MTYtbXNzLXBpbC55YW1sLTE1Ni0gICAgZGVzY3JpcHRpb246XG4tLVxuTUFJTlRBSU5FUlM9MjIxMDA9UzpcdE1haW50YWluZWRcbk1BSU5UQUlORVJTOjIyMTAxOkY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbFxuTUFJTlRBSU5FUlMtMjIxMDItRjpcdGRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTgyMjYuZHRzaT05NzU9XHRcdFx0YmFtX2RtdXg6IGJhbS1kbXV4IHtcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k6OTc2Olx0XHRcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sYmFtLWRtdXhcJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODIyNi5kdHNpLTk3Ny1cbi0tXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpPTE1ODg9XHRcdFx0YmFtX2RtdXg6IGJhbS1kbXV4IHtcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2k6MTU4OTpcdFx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGJhbS1kbXV4XCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTg5NzQuZHRzaS0xNTkwLVxuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2k9MTk3Nj1cdFx0XHRiYW1fZG11eDogYmFtLWRtdXgge1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYuZHRzaToxOTc3Olx0XHRcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sYmFtLWRtdXhcJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi5kdHNpLTE5NzgtXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzkuZHRzaT0xNzU1PVx0XHRcdGJhbV9kbXV4OiBiYW0tZG11eCB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpOjE3NTY6XHRcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxiYW0tZG11eFwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2ktMTc1Ny1cbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYz0xMDAxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJhbV9kbXV4X29mX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMDAyLVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sc2hpa3JhLWJhbS1kbXV4XCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnNoaWtyYV9kYXRhIH0sXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxMDAzOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sYmFtLWRtdXhcJiMzNDsgfSxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTEwMDQtXHR7IC8qIHNlbnRpbmVsICovIH1cbi0tXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X21zcy5jPTIwNjc9c3RhdGljIGludCBxNnY1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYy0yMjAzLVxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYzoyMjA0Olx0bm9kZSA9IG9mX2dldF9jb21wYXRpYmxlX2NoaWxkKHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O3Fjb20sYmFtLWRtdXhcJiMzNDspO1xuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYy0yMjA1LVx0cXByb2MtXHUwMDNlYmFtX2RtdXggPSBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKG5vZGUsIE5VTEwsIFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI1MjcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA1OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBQYXRoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBxY29tX3E2djVfbXNzLmNgIGZpbGUgYW5kIEkgc2VlIGl0JiMzOTtzIHJlZ2lzdGVyaW5nIGBxY29tLGJhbS1kbXV4YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IHRoZW4gSSByZW1lbWJlciBgcWNvbV9xNnY1X21zc2AgaXMgaXRzZWxmIGEgcGxhdGZvcm0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIEhleGFnb24gRFNQcy4gUmlnaHQgYXdheSwgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluIGFuZCBJIGtub3cgdGhhdCBtZWFucyBpdCByZWxpZXMgb24gYSBkZXZpY2UgdHJlZSBub2RlIGZvciB0aGUgcmVtb3RlcHJvYyBkZXZpY2UuCgpNeSBjb25jZXJuIGlzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSBzeXprYWxsZXIuIEkga25vdyBzeXprYWxsZXIgZG9lc24mIzM5O3QgcnVuIG9uIGFjdHVhbCBRdWFsY29tbSBoYXJkd2FyZTsgaXQmIzM5O3MgdXNpbmcgZ2VuZXJpYyBRRU1VL0dDRSBWTXMuIFNvLCBjYW4gd2UgYWN0dWFsbHkgaW5zdGFudGlhdGUgdGhpcyBgcWNvbV9xNnY1X21zc2AgZHJpdmVyIGluIG91ciB0ZXN0aW5nIGVudmlyb25tZW50PyBUaGUgYW5zd2VyIGlzIGEgc29saWQgbm8sIGFuZCBteSByZWFzb25pbmcgaXMgYXMgZm9sbG93czogVGhlcmUgaXMgbm8gd2F5IHdlIGNhbiBhY2hpZXZlIHRoYXQuCgpMZXQgbWUgdGhpbmsgaXQgdGhyb3VnaDogSXMgdGhlcmUgYW55ICpvdGhlciogd2F5PyBDYW4gc3l6a2FsbGVyIHVzZSBgc3l6X2Rldl9jcmVhdGVgIHRvIGNyZWF0ZSB0aGUgcGxhdGZvcm0gZGV2aWNlLCBvciBtYXliZSBgc3l6X21vdW50YD8gTm8sIHRoYXQmIzM5O3Mgbm90IGhvdyBzeXprYWxsZXIgb3IgdGhlIGtlcm5lbCB3b3Jrcy4gSG1tLCB3aGF0IGFib3V0IHVzaW5nIGNvbmZpZ2ZzIHRvIGxvYWQgYSBkZXZpY2UgdHJlZSBvdmVybGF5PyBJIHF1aWNrbHkgY2hlY2sgbXkgbWVudGFsIG1hcCBvZiBMaW51eCBrZXJuZWwgZmVhdHVyZXMgYW5kIHJlY2FsbCB0aGF0IHRoZXJlJiMzOTtzIG5vIHVwc3RyZWFtIGNvbmZpZ2ZzIGludGVyZmFjZSBmb3IgZGV2aWNlIHRyZWUgb3ZlcmxheXMuIFRoZXJlIHdhcyBhIHByb3Bvc2FsLCBidXQgaXQgbmV2ZXIgbGFuZGVkLiBUaGlzIG1lYW5zIERUTyBmcm9tIHVzZXJzcGFjZSBpcyBhIGRlYWQgZW5kLiBQbGF0Zm9ybSBkZXZpY2VzLCBpbiBnZW5lcmFsLCBuZWVkIGEgcmVhbCBkZXZpY2UgdHJlZSBlbnRyeSB0byBnZXQgc3RhcnRlZCB1bmxlc3MgdGhlcmUmIzM5O3Mgc29tZSBzcGVjaWFsIGRyaXZlciB0aGF0IGVtdWxhdGVzIHRoZSBoYXJkd2FyZS4gSW4gbXkgZXhwZXJpZW5jZSwgSSBkbyBub3Qgc2VlIHRoYXQgaGFwcGVuaW5nIGZvciBgcWNvbV9iYW1fZG11eGAuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoaXMgbG9naWMuIFRoZSBwcm9tcHQgbWVudGlvbnMgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBTaW5jZSBgcWNvbV9iYW1fZG11eGAgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIGRldmljZSB0cmVlLCBhbmQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIEkga25vdyBvZiwgaXQmIzM5O3MgZGVmaW5pdGl2ZWx5IGltcG9zc2libGUgdG8gcmVhY2ggaW4gUUVNVS9HQ0UuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYSwgdGhlIGZ1enppbmcgaXMgbm90IHdvcnRoIGl0LCBhbmQgSSBzaG91bGQgcmV0dXJuIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYW1fZG11eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTk4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbD05Mj1leGFtcGxlczpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC0xMDYtXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbDoxMDc6ICAgICAgICAgICAgZG1hcyA9IFx1MDAzY1x1MDAyNmJhbV9kbXV4X2RtYSA0XHUwMDNlLCBcdTAwM2NcdTAwMjZiYW1fZG11eF9kbWEgNVx1MDAzZTtcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTEwOC0gICAgICAgICAgICBkbWEtbmFtZXMgPSBcJiMzNDt0eFwmIzM0OywgXCYjMzQ7cnhcJiMzNDs7XG4tLVxuTUFJTlRBSU5FUlM9MjIxMDE9RjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sXG5NQUlOVEFJTkVSUzoyMjEwMjpGOlx0ZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcbk1BSU5UQUlORVJTLTIyMTAzLVxuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k9OTA0PVx0XHRzcG1pX2J1czogc3BtaUBmYzRjZjAwMCB7XG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTgyMjYuZHRzaS05MTktXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODIyNi5kdHNpOjkyMDpcdFx0YmFtX2RtdXhfZG1hOiBkbWEtY29udHJvbGxlckBmYzgzNDAwMCB7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODIyNi5kdHNpLTkyMS1cdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxiYW0tdjEuNC4wXCYjMzQ7O1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k9OTMyPVx0XHRtb2RlbTogcmVtb3RlcHJvY0BmYzg4MDAwMCB7XG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTgyMjYuZHRzaS05NzQtXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODIyNi5kdHNpOjk3NTpcdFx0XHRiYW1fZG11eDogYmFtLWRtdXgge1xuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTgyMjYuZHRzaS05NzYtXHRcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxiYW0tZG11eFwmIzM0Oztcbi0tXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODIyNi5kdHNpLTk4NC1cbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k6OTg1Olx0XHRcdFx0ZG1hcyA9IFx1MDAzY1x1MDAyNmJhbV9kbXV4X2RtYSA0XHUwMDNlLCBcdTAwM2NcdTAwMjZiYW1fZG11eF9kbWEgNVx1MDAzZTtcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2ktOTg2LVx0XHRcdFx0ZG1hLW5hbWVzID0gXCYjMzQ7dHhcJiMzNDssIFwmIzM0O3J4XCYjMzQ7O1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2k9MTUyMT1cdFx0c3BtaV9idXM6IHNwbWlAZmM0Y2YwMDAge1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2ktMTUzNi1cbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2k6MTUzNzpcdFx0YmFtX2RtdXhfZG1hOiBkbWEtY29udHJvbGxlckBmYzgzNDAwMCB7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpLTE1MzgtXHRcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sYmFtLXYxLjQuMFwmIzM0Oztcbi0tXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpPTE1ODQ9XHRcdFx0bXBzcyB7XG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTg5NzQuZHRzaS0xNTg3LVxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTg5NzQuZHRzaToxNTg4Olx0XHRcdGJhbV9kbXV4OiBiYW0tZG11eCB7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpLTE1ODktXHRcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxiYW0tZG11eFwmIzM0Oztcbi0tXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpLTE1OTctXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpOjE1OTg6XHRcdFx0XHRkbWFzID0gXHUwMDNjXHUwMDI2YmFtX2RtdXhfZG1hIDRcdTAwM2UsIFx1MDAzY1x1MDAyNmJhbV9kbXV4X2RtYSA1XHUwMDNlO1xuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTg5NzQuZHRzaS0xNTk5LVx0XHRcdFx0ZG1hLW5hbWVzID0gXCYjMzQ7dHhcJiMzNDssIFwmIzM0O3J4XCYjMzQ7O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LW1vZGVtLXFkc3A2LmR0c2k9MTI9XHUwMDI2YXByIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi1tb2RlbS1xZHNwNi5kdHNpLTE1LVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYtbW9kZW0tcWRzcDYuZHRzaToxNjpcdTAwMjZiYW1fZG11eCB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi1tb2RlbS1xZHNwNi5kdHNpLTE3LVx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi1tb2RlbS1xZHNwNi5kdHNpLTE5LVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYtbW9kZW0tcWRzcDYuZHRzaToyMDpcdTAwMjZiYW1fZG11eF9kbWEge1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYtbW9kZW0tcWRzcDYuZHRzaS0yMS1cdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYtdWZpLmR0c2k9NTg9XHRcdGxlZF9iOiBsZWQtYiB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYtdWZpLmR0c2ktNjUtXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi11ZmkuZHRzaTo2NjpcdTAwMjZiYW1fZG11eCB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi11ZmkuZHRzaS02Ny1cdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYtdWZpLmR0c2ktNjktXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi11ZmkuZHRzaTo3MDpcdTAwMjZiYW1fZG11eF9kbWEge1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYtdWZpLmR0c2ktNzEtXHRzdGF0dXMgPSBcJiMzNDtva2F5XCYjMzQ7O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2k9MTkwMT1cdFx0c3BtaV9idXM6IHNwbWlAMjAwZjAwMCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYuZHRzaS0xOTE4LVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYuZHRzaToxOTE5Olx0XHRiYW1fZG11eF9kbWE6IGRtYS1jb250cm9sbGVyQDQwNDQwMDAge1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYuZHRzaS0xOTIwLVx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGJhbS12MS43LjBcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYuZHRzaT0xOTcyPVx0XHRcdG1wc3Mge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2ktMTk3NS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2k6MTk3NjpcdFx0XHRiYW1fZG11eDogYmFtLWRtdXgge1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYuZHRzaS0xOTc3LVx0XHRcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sYmFtLWRtdXhcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYuZHRzaS0xOTg1LVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYuZHRzaToxOTg2Olx0XHRcdFx0ZG1hcyA9IFx1MDAzY1x1MDAyNmJhbV9kbXV4X2RtYSA0XHUwMDNlLCBcdTAwM2NcdTAwMjZiYW1fZG11eF9kbWEgNVx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2ktMTk4Ny1cdFx0XHRcdGRtYS1uYW1lcyA9IFwmIzM0O3R4XCYjMzQ7LCBcJiMzNDtyeFwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNy5kdHNpPTEyMzk9XHRcdHNwbWlfYnVzOiBzcG1pQDIwMGYwMDAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE3LmR0c2ktMTI2MC1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE3LmR0c2k6MTI2MTpcdFx0YmFtX2RtdXhfZG1hOiBkbWEtY29udHJvbGxlckA0MDQ0MDAwIHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE3LmR0c2ktMTI2Mi1cdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxiYW0tdjEuNy4wXCYjMzQ7O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM3LmR0c2k9MTQwMz1cdFx0c3BtaV9idXM6IHNwbWlAMjAwZjAwMCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzcuZHRzaS0xNDI0LVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzcuZHRzaToxNDI1Olx0XHRiYW1fZG11eF9kbWE6IGRtYS1jb250cm9sbGVyQDQwNDQwMDAge1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzcuZHRzaS0xNDI2LVx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGJhbS12MS43LjBcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzkuZHRzaT0xNjkxPVx0XHRzcG1pX2J1czogc3BtaUAyMDBmMDAwIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpLTE3MDgtXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpOjE3MDk6XHRcdGJhbV9kbXV4X2RtYTogZG1hLWNvbnRyb2xsZXJANDA0NDAwMCB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpLTE3MTAtXHRcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sYmFtLXYxLjcuMFwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpPTE3MjM9XHRcdG1wc3M6IHJlbW90ZXByb2NANDA4MDAwMCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzkuZHRzaS0xNzU0LVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzkuZHRzaToxNzU1Olx0XHRcdGJhbV9kbXV4OiBiYW0tZG11eCB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpLTE3NTYtXHRcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxiYW0tZG11eFwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpLTE3NjQtXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpOjE3NjU6XHRcdFx0XHRkbWFzID0gXHUwMDNjXHUwMDI2YmFtX2RtdXhfZG1hIDRcdTAwM2UsIFx1MDAzY1x1MDAyNmJhbV9kbXV4X2RtYSA1XHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzkuZHRzaS0xNzY2LVx0XHRcdFx0ZG1hLW5hbWVzID0gXCYjMzQ7dHhcJiMzNDssIFwmIzM0O3J4XCYjMzQ7O1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz02NT1jb25maWcgUUNPTV9CQU1fRE1VWFxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy03Ni1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6Nzc6XHQgIGNhbGxlZCBxY29tX2JhbV9kbXV4LlxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTc4LVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGU9MTI9b2JqLSQoQ09ORklHX01ISV9XV0FOX01CSU0pICYjNDM7PSBtaGlfd3dhbl9tYmltLm9cbmRyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1FDT01fQkFNX0RNVVgpICYjNDM7PSBxY29tX2JhbV9kbXV4Lm9cbmRyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX1JQTVNHX1dXQU5fQ1RSTCkgJiM0Mzs9IHJwbXNnX3d3YW5fY3RybC5vXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjYtI2RlZmluZSBCQU1fRE1VWF9CVUZGRVJfU0laRVx0XHRTWl8yS1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6Mjc6I2RlZmluZSBCQU1fRE1VWF9IRFJfU0laRVx0XHRzaXplb2Yoc3RydWN0IGJhbV9kbXV4X2hkcilcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTI4LSNkZWZpbmUgQkFNX0RNVVhfTUFYX0RBVEFfU0laRVx0XHQoQkFNX0RNVVhfQlVGRkVSX1NJWkUgLSBCQU1fRE1VWF9IRFJfU0laRSlcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYz00Mj1lbnVtIHtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy01My1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjU0OnN0cnVjdCBiYW1fZG11eF9oZHIge1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNTUtXHR1MTYgbWFnaWM7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjItXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2MzpzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSB7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2NDpcdHN0cnVjdCBiYW1fZG11eCAqZG11eDtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY1LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02OS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjcwOnN0cnVjdCBiYW1fZG11eCB7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03MS1cdHN0cnVjdCBkZXZpY2UgKmRldjtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy04NC1cdHU2NCByeF9idWZfcGVybXM7IC8qIFNDTSBzb3VyY2UtVk1JRCBiaXRtYXNrIG9mIHJ4X2J1ZiAqL1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6ODU6XHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSByeF9za2JzW0JBTV9ETVVYX05VTV9TS0JdO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6ODY6XHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSB0eF9za2JzW0JBTV9ETVVYX05VTV9TS0JdO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtODctXHRzcGlubG9ja190IHR4X2xvY2s7IC8qIFByb3RlY3QgdHhfc2ticywgdHhfbmV4dF9za2IgKi9cbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy05Ni1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjk3OnN0cnVjdCBiYW1fZG11eF9uZXRkZXYge1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6OTg6XHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXg7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy05OS1cdHU4IGNoO1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTEwMS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjEwMjpzdHJ1Y3QgYmFtX2RtdXhfZGF0YSB7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMDMtXHR1MzIgdm1pZDtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMDUtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxMDY6c3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZShzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgZW5hYmxlKVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTA3LXtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMTItXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxMTM6c3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfYWNrKHN0cnVjdCBiYW1fZG11eCAqZG11eClcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTExNC17XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTE5LVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MTIwOnN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfbWFwKHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hLFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTIxLVx0XHRcdFx0IGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMzctXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxMzg6c3RhdGljIHZvaWQgYmFtX2RtdXhfc2tiX2RtYV91bm1hcChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTEzOS1cdFx0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xNDctXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxNDg6c3RhdGljIHZvaWQgYmFtX2RtdXhfdHhfd2FrZV9xdWV1ZXMoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTQ5LXtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xNjEtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxNjI6c3RhdGljIHZvaWQgYmFtX2RtdXhfdHhfc3RvcF9xdWV1ZXMoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTYzLXtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xNzUtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxNzY6c3RhdGljIHZvaWQgYmFtX2RtdXhfdHhfZG9uZShzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSlcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTE3Ny17XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxNzg6XHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBza2JfZG1hLVx1MDAzZWRtdXg7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xNzktXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTE4My1cdGlmIChza2JfZG1hLVx1MDAzZWFkZHIpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxODQ6XHRcdGJhbV9kbXV4X3NrYl9kbWFfdW5tYXAoc2tiX2RtYSwgRE1BX1RPX0RFVklDRSk7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xODUtXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTg4LVx0aWYgKHNrYl9kbWEgPT0gXHUwMDI2ZG11eC1cdTAwM2V0eF9za2JzW2RtdXgtXHUwMDNldHhfbmV4dF9za2IgJSBCQU1fRE1VWF9OVU1fU0tCXSlcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjE4OTpcdFx0YmFtX2RtdXhfdHhfd2FrZV9xdWV1ZXMoZG11eCk7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xOTAtXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRtdXgtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTE5Mi1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjE5MzpzdGF0aWMgdm9pZCBiYW1fZG11eF90eF9jYWxsYmFjayh2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTk0LXtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjE5NTpcdHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hID0gZGF0YTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTE5Ni1cdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfZG1hLVx1MDAzZXNrYjtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTE5Ny1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjE5ODpcdGJhbV9kbXV4X3R4X2RvbmUoc2tiX2RtYSk7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xOTktXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjAxLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MjAyOnN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3R4KHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjAzLXtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjIwNDpcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtXHUwMDNlZG11eDtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTIwNS1cdHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYztcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yMTQtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoyMTU6XHRkZXNjLVx1MDAzZWNhbGxiYWNrID0gYmFtX2RtdXhfdHhfY2FsbGJhY2s7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yMTYtXHRkZXNjLVx1MDAzZWNhbGxiYWNrX3BhcmFtID0gc2tiX2RtYTtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yMjAtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoyMjE6c3RhdGljIHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjIyMjpiYW1fZG11eF90eF9xdWV1ZShzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yMjMte1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MjI0Olx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWE7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yMjUtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTIzMC1cdGlmIChza2JfZG1hLVx1MDAzZXNrYikge1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MjMxOlx0XHRiYW1fZG11eF90eF9zdG9wX3F1ZXVlcyhkbXV4KTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTIzMi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkbXV4LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yMzgtXHRpZiAoZG11eC1cdTAwM2V0eF9za2JzW2RtdXgtXHUwMDNldHhfbmV4dF9za2IgJSBCQU1fRE1VWF9OVU1fU0tCXS5za2IpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoyMzk6XHRcdGJhbV9kbXV4X3R4X3N0b3BfcXVldWVzKGRtdXgpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjQwLVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTI0NC1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjI0NTpzdGF0aWMgaW50IGJhbV9kbXV4X3NlbmRfY21kKHN0cnVjdCBiYW1fZG11eF9uZXRkZXYgKmJuZGV2LCB1OCBjbWQpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yNDYte1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MjQ3Olx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gYm5kZXYtXHUwMDNlZG11eDtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjI0ODpcdHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MjQ5Olx0c3RydWN0IGJhbV9kbXV4X2hkciAqaGRyO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjUwLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yNjEtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoyNjI6XHRza2JfZG1hID0gYmFtX2RtdXhfdHhfcXVldWUoZG11eCwgc2tiKTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTI2My1cdGlmICghc2tiX2RtYSkge1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTI3MS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjI3MjpcdGlmICghYmFtX2RtdXhfc2tiX2RtYV9tYXAoc2tiX2RtYSwgRE1BX1RPX0RFVklDRSkpIHtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTI3My1cdFx0cmV0ID0gLUVOT01FTTtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yNzYtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoyNzc6XHRpZiAoIWJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3R4KHNrYl9kbWEpKSB7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yNzgtXHRcdHJldCA9IC1FSU87XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjg1LXR4X2ZhaWw6XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoyODY6XHRiYW1fZG11eF90eF9kb25lKHNrYl9kbWEpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjg3LWZyZWVfc2tiOlxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTI5MS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjI5MjpzdGF0aWMgaW50IGJhbV9kbXV4X25ldGRldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yOTMte1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6Mjk0Olx0c3RydWN0IGJhbV9kbXV4X25ldGRldiAqYm5kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjk1LVx0aW50IHJldDtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTI5Ni1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjI5NzpcdHJldCA9IGJhbV9kbXV4X3NlbmRfY21kKGJuZGV2LCBCQU1fRE1VWF9DTURfT1BFTik7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yOTgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTMwNC1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjMwNTpzdGF0aWMgaW50IGJhbV9kbXV4X25ldGRldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zMDYte1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MzA3Olx0c3RydWN0IGJhbV9kbXV4X25ldGRldiAqYm5kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMzA4LVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMzA5LVx0bmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MzEwOlx0YmFtX2RtdXhfc2VuZF9jbWQoYm5kZXYsIEJBTV9ETVVYX0NNRF9DTE9TRSk7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zMTEtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYz0zMTQ9c3RhdGljIHVuc2lnbmVkIGludCBuZWVkZWRfcm9vbSh1bnNpZ25lZCBpbnQgYXZhaWwsIHVuc2lnbmVkIGludCBuZWVkZWQpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMzIwLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MzIxOnN0YXRpYyBpbnQgYmFtX2RtdXhfdHhfcHJlcGFyZV9za2Ioc3RydWN0IGJhbV9kbXV4X25ldGRldiAqYm5kZXYsXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zMjItXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTMyNi1cdHVuc2lnbmVkIGludCB0YWlsID0gbmVlZGVkX3Jvb20oc2tiX3RhaWxyb29tKHNrYiksIHBhZCk7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzozMjc6XHRzdHJ1Y3QgYmFtX2RtdXhfaGRyICpoZHI7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zMjgtXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM0OC1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjM0OTpzdGF0aWMgbmV0ZGV2X3R4X3QgYmFtX2RtdXhfbmV0ZGV2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM1MC1cdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM1MS17XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzozNTI6XHRzdHJ1Y3QgYmFtX2RtdXhfbmV0ZGV2ICpibmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzozNTM6XHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBibmRldi1cdTAwM2VkbXV4O1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MzU0Olx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWE7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zNTUtXHRpbnQgYWN0aXZlLCByZXQ7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zNTYtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzozNTc6XHRza2JfZG1hID0gYmFtX2RtdXhfdHhfcXVldWUoZG11eCwgc2tiKTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM1OC1cdGlmICghc2tiX2RtYSlcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zNjQtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzozNjU6XHRyZXQgPSBiYW1fZG11eF90eF9wcmVwYXJlX3NrYihibmRldiwgc2tiKTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM2Ni1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMzY4LVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MzY5Olx0aWYgKCFiYW1fZG11eF9za2JfZG1hX21hcChza2JfZG1hLCBETUFfVE9fREVWSUNFKSlcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM3MC1cdFx0Z290byBkcm9wO1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM3OS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjM4MDpcdGlmICghYmFtX2RtdXhfc2tiX2RtYV9zdWJtaXRfdHgoc2tiX2RtYSkpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zODEtXHRcdGdvdG8gZHJvcDtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zODYtZHJvcDpcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjM4NzpcdGJhbV9kbXV4X3R4X2RvbmUoc2tiX2RtYSk7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zODgtXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM5MS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjM5MjpzdGF0aWMgdm9pZCBiYW1fZG11eF90eF93YWtldXBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zOTMte1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6Mzk0Olx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiYW1fZG11eCwgdHhfd2FrZXVwX3dvcmspO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMzk1LVx0dW5zaWduZWQgbG9uZyBwZW5kaW5nO1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQwOS1cdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2cGVuZGluZywgQkFNX0RNVVhfTlVNX1NLQikge1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDEwOlx0XHRiYW1fZG11eF9za2JfZG1hX3N1Ym1pdF90eChcdTAwMjZkbXV4LVx1MDAzZXR4X3NrYnNbaV0pO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDExLVx0fVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQxNy1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQxODpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhbV9kbXV4X29wcyA9IHtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQxOTpcdC5uZG9fb3Blblx0PSBiYW1fZG11eF9uZXRkZXZfb3BlbixcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQyMDpcdC5uZG9fc3RvcFx0PSBiYW1fZG11eF9uZXRkZXZfc3RvcCxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQyMTpcdC5uZG9fc3RhcnRfeG1pdFx0PSBiYW1fZG11eF9uZXRkZXZfc3RhcnRfeG1pdCxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQyMi19O1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jPTQyND1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHd3YW5fdHlwZSA9IHtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MjctXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo0Mjg6c3RhdGljIHZvaWQgYmFtX2RtdXhfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00Mjkte1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDMwOlx0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZiYW1fZG11eF9vcHM7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MzEtXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDM3LVx0ZGV2LVx1MDAzZW1heF9tdHUgPSBCQU1fRE1VWF9NQVhfREFUQV9TSVpFO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDM4Olx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYmFtX2RtdXhfaGRyKTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQzOS1cdGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20gPSBzaXplb2YodTMyKTsgLyogd29yZC1hbGlnbmVkICovXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDQ2LVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDQ3OnN0YXRpYyB2b2lkIGJhbV9kbXV4X3JlZ2lzdGVyX25ldGRldl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQ0OC17XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo0NDk6XHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJhbV9kbXV4LCByZWdpc3Rlcl9uZXRkZXZfd29yayk7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo0NTA6XHRzdHJ1Y3QgYmFtX2RtdXhfbmV0ZGV2ICpibmRldjtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQ1MS1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDU4LVx0XHRuZXRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpibmRldiksIFwmIzM0O3d3YW4lZFwmIzM0OywgTkVUX05BTUVfRU5VTSxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQ1OTpcdFx0XHRcdCAgICAgIGJhbV9kbXV4X25ldGRldl9zZXR1cCk7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00NjAtXHRcdGlmICghbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQ4MS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQ4MjpzdGF0aWMgdm9pZCBiYW1fZG11eF9yeF9jYWxsYmFjayh2b2lkICpkYXRhKTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQ4My1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQ4NDpzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX3N1Ym1pdF9yeChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSlcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQ4NS17XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo0ODY6XHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBza2JfZG1hLVx1MDAzZWRtdXg7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00ODctXHRzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDk3LVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDk4Olx0ZGVzYy1cdTAwM2VjYWxsYmFjayA9IGJhbV9kbXV4X3J4X2NhbGxiYWNrO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDk5LVx0ZGVzYy1cdTAwM2VjYWxsYmFja19wYXJhbSA9IHNrYl9kbWE7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNTAzLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NTA0OnN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfcXVldWVfcngoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEsIGdmcF90IGdmcClcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTUwNS17XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNTA3LVx0aWYgKHNrYl9kbWEtXHUwMDNlcnhfdmlydClcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjUwODpcdFx0cmV0dXJuIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4KHNrYl9kbWEpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNTA5LVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTUxNi1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjUxNzpcdHJldHVybiBiYW1fZG11eF9za2JfZG1hX21hcChza2JfZG1hLCBETUFfRlJPTV9ERVZJQ0UpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NTE4Olx0ICAgICAgIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4KHNrYl9kbWEpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNTE5LX1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTUyMC1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjUyMTpzdGF0aWMgdm9pZCBiYW1fZG11eF9jbWRfZGF0YShzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSlcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTUyMi17XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo1MjM6XHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBza2JfZG1hLVx1MDAzZWRtdXg7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo1MjQ6XHRzdHJ1Y3QgYmFtX2RtdXhfaGRyICpoZHIgPSBza2JfZG1hLVx1MDAzZXJ4X3ZpcnQgPyBza2JfZG1hLVx1MDAzZXJ4X3ZpcnQgOlxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NTI1Olx0XHRcdFx0ICAgKHN0cnVjdCBiYW1fZG11eF9oZHIgKilza2JfZG1hLVx1MDAzZXNrYi1cdTAwM2VkYXRhO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNTI2LVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRtdXgtXHUwMDNlbmV0ZGV2c1toZHItXHUwMDNlY2hdO1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTU2OS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjU3MDpzdGF0aWMgdm9pZCBiYW1fZG11eF9jbWRfb3BlbihzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIHN0cnVjdCBiYW1fZG11eF9oZHIgKmhkcilcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTU3MS17XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNTg4LVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NTg5OnN0YXRpYyB2b2lkIGJhbV9kbXV4X2NtZF9jbG9zZShzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIHN0cnVjdCBiYW1fZG11eF9oZHIgKmhkcilcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTU5MC17XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjAzLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NjA0OnN0YXRpYyB2b2lkIGJhbV9kbXV4X3J4X2NhbGxiYWNrKHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02MDUte1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NjA2Olx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEgPSBkYXRhO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NjA3Olx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gc2tiX2RtYS1cdTAwM2VkbXV4O1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NjA4Olx0c3RydWN0IGJhbV9kbXV4X2hkciAqaGRyO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjA5LVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTYxMi1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2MTM6XHRcdGJhbV9kbXV4X3NrYl9kbWFfdW5tYXAoc2tiX2RtYSwgRE1BX0ZST01fREVWSUNFKTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjYxNDpcdFx0aGRyID0gKHN0cnVjdCBiYW1fZG11eF9oZHIgKilza2JfZG1hLVx1MDAzZXNrYi1cdTAwM2VkYXRhO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjE1LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTYyOC1cdGNhc2UgQkFNX0RNVVhfQ01EX0RBVEE6XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2Mjk6XHRcdGJhbV9kbXV4X2NtZF9kYXRhKHNrYl9kbWEpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjMwLVx0XHRicmVhaztcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTYzMS1cdGNhc2UgQkFNX0RNVVhfQ01EX09QRU46XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2MzI6XHRcdGJhbV9kbXV4X2NtZF9vcGVuKGRtdXgsIGhkcik7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02MzMtXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjM0LVx0Y2FzZSBCQU1fRE1VWF9DTURfQ0xPU0U6XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2MzU6XHRcdGJhbV9kbXV4X2NtZF9jbG9zZShkbXV4LCBoZHIpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjM2LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02NDMtb3V0OlxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NjQ0Olx0aWYgKGJhbV9kbXV4X3NrYl9kbWFfcXVldWVfcngoc2tiX2RtYSwgR0ZQX0FUT01JQykpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02NDUtXHRcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGRtdXgtXHUwMDNlcngpO1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY0Ny1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjY0ODpzdGF0aWMgYm9vbCBiYW1fZG11eF9wb3dlcl9vbihzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02NDkte1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY2NS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJBTV9ETVVYX05VTV9TS0I7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2NjY6XHRcdGlmICghYmFtX2RtdXhfc2tiX2RtYV9xdWV1ZV9yeChcdTAwMjZkbXV4LVx1MDAzZXJ4X3NrYnNbaV0sIEdGUF9LRVJORUwpKVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjY3LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02NzMtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2NzQ6c3RhdGljIHZvaWQgYmFtX2RtdXhfZnJlZV9za2JzKHN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHNrYnNbXSxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY3NS1cdFx0XHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY3OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJBTV9ETVVYX05VTV9TS0I7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2ODA6XHRcdHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hID0gXHUwMDI2c2tic1tpXTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY4MS1cbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02ODUtXHRcdGlmIChza2JfZG1hLVx1MDAzZWFkZHIpXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2ODY6XHRcdFx0YmFtX2RtdXhfc2tiX2RtYV91bm1hcChza2JfZG1hLCBkaXIpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjg3LVx0XHRpZiAoc2tiX2RtYS1cdTAwM2Vza2IpIHtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02OTMtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2OTQ6c3RhdGljIHZvaWQgYmFtX2RtdXhfcG93ZXJfb2ZmKHN0cnVjdCBiYW1fZG11eCAqZG11eClcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY5NS17XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzA3LVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzA4Olx0YmFtX2RtdXhfZnJlZV9za2JzKGRtdXgtXHUwMDNlcnhfc2ticywgRE1BX0ZST01fREVWSUNFKTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTcwOS19XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03MTAtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo3MTE6c3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzEyLXtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjcxMzpcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRhdGE7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03MTQtXHRib29sIG5ld19zdGF0ZSA9ICFkbXV4LVx1MDAzZXBjX3N0YXRlO1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTcxOC1cdGlmIChuZXdfc3RhdGUpIHtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjcxOTpcdFx0aWYgKGJhbV9kbXV4X3Bvd2VyX29uKGRtdXgpKVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzIwOlx0XHRcdGJhbV9kbXV4X3BjX2FjayhkbXV4KTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTcyMS1cdFx0ZWxzZVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzIyOlx0XHRcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTcyMy1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo3MjQ6XHRcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjcyNTpcdFx0YmFtX2RtdXhfcGNfYWNrKGRtdXgpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzI2LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTczMy1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjczNDpzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfYWNrX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzM1LXtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjczNjpcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRhdGE7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03MzctXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzQzLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzQ0OnN0YXRpYyBpbnQgYmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc0NS17XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo3NDY6XHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc0Ny1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc0OC1cdGRldl9kYmcoZGV2LCBcJiMzNDtydW50aW1lIHN1c3BlbmRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzQ5Olx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03NTAtXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzUzLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzU0OnN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzU1LXtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjc1NjpcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzU3LVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc2NS1cdC8qIFZvdGUgZm9yIHBvd2VyIHN0YXRlICovXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo3NjY6XHRiYW1fZG11eF9wY192b3RlKGRtdXgsIHRydWUpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzY3LVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc3MC1cdFx0XHRcdFx0IEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSkge1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzcxOlx0XHRiYW1fZG11eF9wY192b3RlKGRtdXgsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc3Mi1cdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzc3LVx0XHRcdFx0QkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKSB7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo3Nzg6XHRcdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzc5LVx0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03ODMtXHRpZiAoIWRtdXgtXHUwMDNlcngpIHtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjc4NDpcdFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03ODUtXHRcdHJldHVybiAtRU5YSU87XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzk1LVx0XHRkbXV4LVx1MDAzZXR4ID0gTlVMTDtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjc5NjpcdFx0YmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKGRldik7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03OTctXHRcdHJldHVybiAtRU5YSU87XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtODAyLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6ODAzOnN0YXRpYyBpbnQgYmFtX2RtdXhfYWxsb2NfY29oZXJlbnRfcngoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtODA0LXtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTgwNS1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRtdXgtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6ODA2Olx0Y29uc3Qgc3RydWN0IGJhbV9kbXV4X2RhdGEgKmRhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTgwNy1cdHNpemVfdCBzaXplID0gQkFNX0RNVVhfTlVNX1NLQiAqIEJBTV9ETVVYX0JVRkZFUl9TSVpFO1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTg0My1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzMwNAoJCQkJCQkJb3V0cHV0OiA5MgoJCQkJCQkJdGhvdWdodHM6IDQyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogVGhlIGBxY29tX2JhbV9kbXV4YCBEcml2ZXIqKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCwgd2hpY2ggdG91Y2hlcyBgcWNvbV9iYW1fZG11eGAsIGlzIHdvcnRoIGZ1enppbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O05vLiYjMzQ7IFRoZXJlJiMzOTtzIG5vIGVtdWxhdG9yLCB3aGljaCBtZWFucyBgcWNvbV9iYW1fZG11eGAgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZywgYnV0IEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCBtYWtlcyBpdCB1bnJlYWNoYWJsZSBpbiBRRU1VLCByaWdodD8KClN5emthbGxlciB0ZXN0cyBwYXRjaGVzLCB5ZXMsIGFuZCBjb21waWxlcyB0aGUga2VybmVsLCBydW5zIGl0cyBjb3JwdXMuIEJ1dCBpZiB0aGUgY29kZSYjMzk7cyBuZXZlciBhY3R1YWxseSAqZXhlY3V0ZWQqIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaXNuJiMzOTt0IGVtdWxhdGVkLCBzeXprYWxsZXIgd2lsbCBqdXN0IHJlcG9ydCAmIzM0O09LJiMzNDsg4oCTIGEgZmFsc2UgcG9zaXRpdmUuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gU28sIHRoYXQmIzM5O3MgdGhlIHRocmVzaG9sZCBJIG5lZWQgdG8gbWVldC4KCkxldCBtZSBkb3VibGUtY2hlY2suIElzIHRoZXJlICphbnkqIHdheSB0byByZWFjaCB0aGlzIGNvZGU/IEEgYHFjb20sYmFtLWRtdXhgIGRldmljZSBpbiAqYW55KiBvZiB0aGUgUUVNVSBtYWNoaW5lcz8gTm9wZS4gUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIFF1YWxjb21tIEJBTSBETVVYLiBBbmQgSSYjMzk7bSBub3QgYXdhcmUgb2YgYW55IG90aGVyIGRyaXZlciB0aGF0IGNvdWxkIHNvbWVob3cgdHJpZ2dlciBpdCBpbmRpcmVjdGx5LgoKU28sIGhlcmUmIzM5O3MgbXkgcmVhc29uaW5nLCBhbmQgaXQmIzM5O3MgcHJldHR5IHNvbGlkOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBxY29tX2JhbV9kbXV4YCBkcml2ZXIgdG8gc3VwcG9ydCBhIG5ldyBjb21wYXRpYmxlIHN0cmluZyBhbmQgYWxsb2NhdGVzIGEgY29oZXJlbnQgUlggYnVmZmVyIHVzaW5nIFNDTSBjYWxscy4gSG93ZXZlciwgdGhpcyBpcyBmb3IgYSB2ZXJ5IHNwZWNpZmljIFF1YWxjb21tIGhhcmR3YXJlIGJsb2NrIOKAkyB0aGUgQkFNIERhdGEgTXVsdGlwbGV4ZXIg4oCTIGFuZCByZXF1aXJlcyBhIGNvcnJlc3BvbmRpbmcgZGV2aWNlIHRyZWUgbm9kZSB0byBwcm9iZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgR0NFLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHRob3NlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFkZCB2YWx1ZSBmb3IgZnV6emluZyBpbiB0aGUgcmVsZXZhbnQgZW52aXJvbm1lbnRzLiBTbyBoZXJlJiMzOTtzIHRoZSByZXNwb25zZSBJIG5lZWQgdG8gZm9ybXVsYXRlOgoKV29ydGhGdXp6aW5nOiBmYWxzZQpSZWFzb25pbmc6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHFjb21fYmFtX2RtdXhgIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIFF1YWxjb21tIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBjYW5ub3QgYmUgZnV6emVkLgpGb2N1c1N5bWJvbHM6IFtdCkVuYWJsZUNvbmZpZ3M6IFtdCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBxY29tX2JhbV9kbXV4YCBkcml2ZXIsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBRdWFsY29tbSBoYXJkd2FyZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcWNvbV9iYW1fZG11eGAgZHJpdmVyLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgUXVhbGNvbW0gaGFyZHdhcmUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6Mzc6NDUuNzY1NzU3NTM1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcyOTEyMjY4ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHFjb21fYmFtX2RtdXhgIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIFF1YWxjb21tIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6Mzc6NDUuNzY1NzcwODI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMwODg4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MjQ2OWEyZTcwNDBhMzk4N2NhNDZiOTVkMWQxZWM2MjhkNGQ5Y2FlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDA5OjM3OjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWxcXG5pbmRleCAzMzc0NmMyMzg1MTNkNy4uMjdmMGZkZjI4NWMxN2QgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbFxcbkBAIC0yMiw3ICsyMiwxMyBAQCBkZXNjcmlwdGlvbjogfFxcbiBcXG4gcHJvcGVydGllczpcXG4gICBjb21wYXRpYmxlOlxcbi0gICAgY29uc3Q6IHFjb20sYmFtLWRtdXhcXG4rICAgIG9uZU9mOlxcbisgICAgICAtIGNvbnN0OiBxY29tLGJhbS1kbXV4XFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgIyBTaGlrcmFcXG4rICAgICAgICAgICAgICAtIHFjb20sc2hpa3JhLWJhbS1kbXV4XFxuKyAgICAgICAgICAtIGNvbnN0OiBxY29tLGJhbS1kbXV4XFxuIFxcbiAgIGludGVycnVwdHM6XFxuICAgICBkZXNjcmlwdGlvbjpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnXFxuaW5kZXggOTU4ZGJjNzM0N2ZhODQuLjFiMTMzYzU2MjMxNjE1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZ1xcbkBAIC02NSw2ICs2NSw3IEBAIGNvbmZpZyBNSElfV1dBTl9NQklNXFxuIGNvbmZpZyBRQ09NX0JBTV9ETVVYXFxuIFxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBCQU0tRE1VWCBXV0FOIG5ldHdvcmsgZHJpdmVyXFxcIlxcbiBcXHRkZXBlbmRzIG9uIChETUFfRU5HSU5FIFxcdTAwMjZcXHUwMDI2IFBNIFxcdTAwMjZcXHUwMDI2IFFDT01fU01FTV9TVEFURSkgfHwgQ09NUElMRV9URVNUXFxuK1xcdHNlbGVjdCBRQ09NX1NDTVxcbiBcXHRoZWxwXFxuIFxcdCAgVGhlIEJBTSBEYXRhIE11bHRpcGxleGVyIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbmV0d29yayBkYXRhIGNoYW5uZWxzXFxuIFxcdCAgb2YgbW9kZW1zIGludGVncmF0ZWQgaW50byBtYW55IG9sZGVyIFF1YWxjb21tIFNvQ3MsIGUuZy4gUXVhbGNvbW1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xcbmluZGV4IGNjNmFjZThkNjQzNzFlLi4yNDcyMzBiNzIwZTYwMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXFxuQEAgLTksMTAgKzksMTIgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWFlbmdpbmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fcnVudGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc29jL3Fjb20vc21lbV9zdGF0ZS5oXFx1MDAzZVxcbkBAIC02Miw2ICs2NCw3IEBAIHN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHtcXG4gXFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXHRkbWFfYWRkcl90IGFkZHI7XFxuK1xcdHZvaWQgKnJ4X3ZpcnQ7IC8qIG5vbi1OVUxMOiBzbG90IGluIHRoZSBjb2hlcmVudCBSWCBibG9jayAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IGJhbV9kbXV4IHtcXG5AQCAtNzUsNiArNzgsMTAgQEAgc3RydWN0IGJhbV9kbXV4IHtcXG4gXFx0c3RydWN0IGNvbXBsZXRpb24gcGNfYWNrX2NvbXBsZXRpb247XFxuIFxcbiBcXHRzdHJ1Y3QgZG1hX2NoYW4gKnJ4LCAqdHg7XFxuK1xcdC8qIFNpbmdsZSBjb2hlcmVudCBibG9jayBiYWNraW5nIGFsbCBSWCBidWZmZXJzLCBOVUxMIGlmIHVudXNlZCAqL1xcbitcXHR2b2lkICpyeF9idWY7XFxuK1xcdGRtYV9hZGRyX3QgcnhfYnVmX2RtYTtcXG4rXFx0dTY0IHJ4X2J1Zl9wZXJtczsgLyogU0NNIHNvdXJjZS1WTUlEIGJpdG1hc2sgb2YgcnhfYnVmICovXFxuIFxcdHN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHJ4X3NrYnNbQkFNX0RNVVhfTlVNX1NLQl07XFxuIFxcdHN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHR4X3NrYnNbQkFNX0RNVVhfTlVNX1NLQl07XFxuIFxcdHNwaW5sb2NrX3QgdHhfbG9jazsgLyogUHJvdGVjdCB0eF9za2JzLCB0eF9uZXh0X3NrYiAqL1xcbkBAIC05Miw2ICs5OSwxMCBAQCBzdHJ1Y3QgYmFtX2RtdXhfbmV0ZGV2IHtcXG4gXFx0dTggY2g7XFxuIH07XFxuIFxcbitzdHJ1Y3QgYmFtX2RtdXhfZGF0YSB7XFxuK1xcdHUzMiB2bWlkO1xcbit9O1xcbitcXG4gc3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZShzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgZW5hYmxlKVxcbiB7XFxuIFxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZkbXV4LVxcdTAwM2VwY19hY2tfY29tcGxldGlvbik7XFxuQEAgLTExMSw2ICsxMjIsOSBAQCBzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX21hcChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSxcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBza2JfZG1hLVxcdTAwM2VkbXV4LVxcdTAwM2VkZXY7XFxuIFxcbitcXHRpZiAoc2tiX2RtYS1cXHUwMDNlcnhfdmlydCkgLyogY29oZXJlbnQgUlggc2xvdDogYWRkciBwcmUtYXNzaWduZWQgKi9cXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbiBcXHRza2JfZG1hLVxcdTAwM2VhZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBza2JfZG1hLVxcdTAwM2Vza2ItXFx1MDAzZWRhdGEsIHNrYl9kbWEtXFx1MDAzZXNrYi1cXHUwMDNlbGVuLCBkaXIpO1xcbiBcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBza2JfZG1hLVxcdTAwM2VhZGRyKSkge1xcbiBcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBETUEgbWFwIGJ1ZmZlclxcXFxuXFxcIik7XFxuQEAgLTEyNCw2ICsxMzgsOSBAQCBzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX21hcChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSxcXG4gc3RhdGljIHZvaWQgYmFtX2RtdXhfc2tiX2RtYV91bm1hcChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSxcXG4gXFx0XFx0XFx0XFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxcbiB7XFxuK1xcdGlmIChza2JfZG1hLVxcdTAwM2VyeF92aXJ0KSAvKiBjb2hlcmVudCBSWCBzbG90OiBub3RoaW5nIHRvIHVubWFwICovXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdGRtYV91bm1hcF9zaW5nbGUoc2tiX2RtYS1cXHUwMDNlZG11eC1cXHUwMDNlZGV2LCBza2JfZG1hLVxcdTAwM2VhZGRyLCBza2JfZG1hLVxcdTAwM2Vza2ItXFx1MDAzZWxlbiwgZGlyKTtcXG4gXFx0c2tiX2RtYS1cXHUwMDNlYWRkciA9IDA7XFxuIH1cXG5AQCAtNDY4LDkgKzQ4NSwxMCBAQCBzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX3N1Ym1pdF9yeChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBza2JfZG1hLVxcdTAwM2VkbXV4O1xcbiBcXHRzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7XFxuK1xcdHNpemVfdCBsZW4gPSBza2JfZG1hLVxcdTAwM2VyeF92aXJ0ID8gQkFNX0RNVVhfQlVGRkVSX1NJWkUgOiBza2JfZG1hLVxcdTAwM2Vza2ItXFx1MDAzZWxlbjtcXG4gXFxuIFxcdGRlc2MgPSBkbWFlbmdpbmVfcHJlcF9zbGF2ZV9zaW5nbGUoZG11eC1cXHUwMDNlcngsIHNrYl9kbWEtXFx1MDAzZWFkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHNrYl9kbWEtXFx1MDAzZXNrYi1cXHUwMDNlbGVuLCBETUFfREVWX1RPX01FTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgbGVuLCBETUFfREVWX1RPX01FTSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgRE1BX1BSRVBfSU5URVJSVVBUKTtcXG4gXFx0aWYgKCFkZXNjKSB7XFxuIFxcdFxcdGRldl9lcnIoZG11eC1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHByZXBhcmUgUlggRE1BIGJ1ZmZlclxcXFxuXFxcIik7XFxuQEAgLTQ4NSw2ICs1MDMsMTAgQEAgc3RhdGljIGJvb2wgYmFtX2RtdXhfc2tiX2RtYV9zdWJtaXRfcngoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXFxuIFxcbiBzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX3F1ZXVlX3J4KHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hLCBnZnBfdCBnZnApXFxuIHtcXG4rXFx0LyogQ29oZXJlbnQgUlggc2xvdHMgaGF2ZSByeF92aXJ0IGFuZCBhZGRyIHByZS1hc3NpZ25lZCBhdCBwcm9iZS4gKi9cXG4rXFx0aWYgKHNrYl9kbWEtXFx1MDAzZXJ4X3ZpcnQpXFxuK1xcdFxcdHJldHVybiBiYW1fZG11eF9za2JfZG1hX3N1Ym1pdF9yeChza2JfZG1hKTtcXG4rXFxuIFxcdGlmICghc2tiX2RtYS1cXHUwMDNlc2tiKSB7XFxuIFxcdFxcdHNrYl9kbWEtXFx1MDAzZXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihOVUxMLCBCQU1fRE1VWF9CVUZGRVJfU0laRSwgZ2ZwKTtcXG4gXFx0XFx0aWYgKCFza2JfZG1hLVxcdTAwM2Vza2IpXFxuQEAgLTQ5OSw5ICs1MjEsMTAgQEAgc3RhdGljIGJvb2wgYmFtX2RtdXhfc2tiX2RtYV9xdWV1ZV9yeChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSwgZ2ZwX3QgZ2ZcXG4gc3RhdGljIHZvaWQgYmFtX2RtdXhfY21kX2RhdGEoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXFxuIHtcXG4gXFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gc2tiX2RtYS1cXHUwMDNlZG11eDtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kbWEtXFx1MDAzZXNrYjtcXG4tXFx0c3RydWN0IGJhbV9kbXV4X2hkciAqaGRyID0gKHN0cnVjdCBiYW1fZG11eF9oZHIgKilza2ItXFx1MDAzZWRhdGE7XFxuK1xcdHN0cnVjdCBiYW1fZG11eF9oZHIgKmhkciA9IHNrYl9kbWEtXFx1MDAzZXJ4X3ZpcnQgPyBza2JfZG1hLVxcdTAwM2VyeF92aXJ0IDpcXG4rXFx0XFx0XFx0XFx0ICAgKHN0cnVjdCBiYW1fZG11eF9oZHIgKilza2JfZG1hLVxcdTAwM2Vza2ItXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkbXV4LVxcdTAwM2VuZXRkZXZzW2hkci1cXHUwMDNlY2hdO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG4gXFx0aWYgKCFuZXRkZXYgfHwgIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbiBcXHRcXHRkZXZfd2FybihkbXV4LVxcdTAwM2VkZXYsIFxcXCJEYXRhIGZvciBpbmFjdGl2ZSBjaGFubmVsICV1XFxcXG5cXFwiLCBoZHItXFx1MDAzZWNoKTtcXG5AQCAtNTE0LDEwICs1MzcsMTggQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfY21kX2RhdGEoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0c2tiX2RtYS1cXHUwMDNlc2tiID0gTlVMTDsgLyogSGFuZCBvdmVyIHRvIG5ldHdvcmsgc3RhY2sgKi9cXG4tXFxuLVxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTtcXG4tXFx0c2tiX3RyaW0oc2tiLCBoZHItXFx1MDAzZWxlbik7XFxuK1xcdGlmIChza2JfZG1hLVxcdTAwM2VyeF92aXJ0KSB7XFxuK1xcdFxcdC8qIENvaGVyZW50IGJsb2NrIGlzIG5vdCBwYWdlLWJhY2tlZDogY29weSBvdXQgdG8gYSByZWFsIHNrYiAqL1xcbitcXHRcXHRza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgaGRyLVxcdTAwM2VsZW4pO1xcbitcXHRcXHRpZiAoIXNrYilcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRza2JfcHV0X2RhdGEoc2tiLCAodTggKilza2JfZG1hLVxcdTAwM2VyeF92aXJ0ICsgc2l6ZW9mKCpoZHIpLCBoZHItXFx1MDAzZWxlbik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHNrYiA9IHNrYl9kbWEtXFx1MDAzZXNrYjtcXG4rXFx0XFx0c2tiX2RtYS1cXHUwMDNlc2tiID0gTlVMTDsgLyogSGFuZCBvdmVyIHRvIG5ldHdvcmsgc3RhY2sgKi9cXG4rXFx0XFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKmhkcikpO1xcbitcXHRcXHRza2JfdHJpbShza2IsIGhkci1cXHUwMDNlbGVuKTtcXG4rXFx0fVxcbiBcXHRza2ItXFx1MDAzZWRldiA9IG5ldGRldjtcXG4gXFxuIFxcdC8qIE9ubHkgUmF3LUlQL1FNQVAgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyICovXFxuQEAgLTU3NCwxMCArNjA1LDE0IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3J4X2NhbGxiYWNrKHZvaWQgKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEgPSBkYXRhO1xcbiBcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBza2JfZG1hLVxcdTAwM2VkbXV4O1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX2RtYS1cXHUwMDNlc2tiO1xcbi1cXHRzdHJ1Y3QgYmFtX2RtdXhfaGRyICpoZHIgPSAoc3RydWN0IGJhbV9kbXV4X2hkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0c3RydWN0IGJhbV9kbXV4X2hkciAqaGRyO1xcbiBcXG4tXFx0YmFtX2RtdXhfc2tiX2RtYV91bm1hcChza2JfZG1hLCBETUFfRlJPTV9ERVZJQ0UpO1xcbitcXHRpZiAoc2tiX2RtYS1cXHUwMDNlcnhfdmlydCkge1xcbitcXHRcXHRoZHIgPSBza2JfZG1hLVxcdTAwM2VyeF92aXJ0OyAvKiBjb2hlcmVudCBSWDogbm8gc2tiIHRvIHVubWFwICovXFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGJhbV9kbXV4X3NrYl9kbWFfdW5tYXAoc2tiX2RtYSwgRE1BX0ZST01fREVWSUNFKTtcXG4rXFx0XFx0aGRyID0gKHN0cnVjdCBiYW1fZG11eF9oZHIgKilza2JfZG1hLVxcdTAwM2Vza2ItXFx1MDAzZWRhdGE7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChoZHItXFx1MDAzZW1hZ2ljICE9IEJBTV9ETVVYX0hEUl9NQUdJQykge1xcbiBcXHRcXHRkZXZfZXJyKGRtdXgtXFx1MDAzZWRldiwgXFxcIkludmFsaWQgbWFnaWMgaW4gaGVhZGVyOiAlI3hcXFxcblxcXCIsIGhkci1cXHUwMDNlbWFnaWMpO1xcbkBAIC02NDQsNiArNjc5LDkgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfZnJlZV9za2JzKHN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHNrYnNbXSxcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJBTV9ETVVYX05VTV9TS0I7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSA9IFxcdTAwMjZza2JzW2ldO1xcbiBcXG4rXFx0XFx0aWYgKHNrYl9kbWEtXFx1MDAzZXJ4X3ZpcnQpIC8qIGNvaGVyZW50IGJsb2NrIGZyZWVkIGF0IHJlbW92ZSAqL1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdGlmIChza2JfZG1hLVxcdTAwM2VhZGRyKVxcbiBcXHRcXHRcXHRiYW1fZG11eF9za2JfZG1hX3VubWFwKHNrYl9kbWEsIGRpcik7XFxuIFxcdFxcdGlmIChza2JfZG1hLVxcdTAwM2Vza2IpIHtcXG5AQCAtNzYyLDYgKzgwMCw3MSBAQCBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGJhbV9kbXV4X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYmFtX2RtdXhfYWxsb2NfY29oZXJlbnRfcngoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRtdXgtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IGJhbV9kbXV4X2RhdGEgKmRhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcXG4rXFx0c2l6ZV90IHNpemUgPSBCQU1fRE1VWF9OVU1fU0tCICogQkFNX0RNVVhfQlVGRkVSX1NJWkU7XFxuK1xcdHU2NCBzcmMgPSBCSVRfVUxMKFFDT01fU0NNX1ZNSURfSExPUyk7XFxuK1xcdHN0cnVjdCBxY29tX3NjbV92bXBlcm0gZHN0WzJdO1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4rXFx0aWYgKCFkYXRhKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghcWNvbV9zY21faXNfYXZhaWxhYmxlKCkpXFxuK1xcdFxcdHJldHVybiAtRVBST0JFX0RFRkVSO1xcbitcXG4rXFx0ZHN0WzBdLnZtaWQgPSBRQ09NX1NDTV9WTUlEX0hMT1M7XFxuK1xcdGRzdFswXS5wZXJtID0gUUNPTV9TQ01fUEVSTV9SVztcXG4rXFx0ZHN0WzFdLnZtaWQgPSBkYXRhLVxcdTAwM2V2bWlkO1xcbitcXHRkc3RbMV0ucGVybSA9IFFDT01fU0NNX1BFUk1fUlc7XFxuK1xcbitcXHRkbXV4LVxcdTAwM2VyeF9idWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBcXHUwMDI2ZG11eC1cXHUwMDNlcnhfYnVmX2RtYSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghZG11eC1cXHUwMDNlcnhfYnVmKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCQU1fRE1VWF9OVU1fU0tCOyBpKyspIHtcXG4rXFx0XFx0ZG11eC1cXHUwMDNlcnhfc2tic1tpXS5yeF92aXJ0ID0gZG11eC1cXHUwMDNlcnhfYnVmICsgaSAqIEJBTV9ETVVYX0JVRkZFUl9TSVpFO1xcbitcXHRcXHRkbXV4LVxcdTAwM2VyeF9za2JzW2ldLmFkZHIgPSBkbXV4LVxcdTAwM2VyeF9idWZfZG1hICsgaSAqIEJBTV9ETVVYX0JVRkZFUl9TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBxY29tX3NjbV9hc3NpZ25fbWVtKGRtdXgtXFx1MDAzZXJ4X2J1Zl9kbWEsIHNpemUsIFxcdTAwMjZzcmMsIGRzdCwgQVJSQVlfU0laRShkc3QpKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlNDTSBhc3NpZ24gUlggYmxvY2sgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBkbXV4LVxcdTAwM2VyeF9idWYsIGRtdXgtXFx1MDAzZXJ4X2J1Zl9kbWEpO1xcbitcXHRcXHRkbXV4LVxcdTAwM2VyeF9idWYgPSBOVUxMO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdGRtdXgtXFx1MDAzZXJ4X2J1Zl9wZXJtcyA9IHNyYztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBiYW1fZG11eF9mcmVlX2NvaGVyZW50X3J4KHN0cnVjdCBiYW1fZG11eCAqZG11eClcXG4re1xcbitcXHRzdHJ1Y3QgcWNvbV9zY21fdm1wZXJtIGhsb3MgPSB7XFxuK1xcdFxcdC52bWlkID0gUUNPTV9TQ01fVk1JRF9ITE9TLFxcbitcXHRcXHQucGVybSA9IFFDT01fU0NNX1BFUk1fUlcsXFxuK1xcdH07XFxuK1xcdHNpemVfdCBzaXplID0gQkFNX0RNVVhfTlVNX1NLQiAqIEJBTV9ETVVYX0JVRkZFUl9TSVpFO1xcbitcXG4rXFx0aWYgKCFkbXV4LVxcdTAwM2VyeF9idWYpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChkbXV4LVxcdTAwM2VyeF9idWZfcGVybXMpIHtcXG4rXFx0XFx0aWYgKHFjb21fc2NtX2Fzc2lnbl9tZW0oZG11eC1cXHUwMDNlcnhfYnVmX2RtYSwgc2l6ZSwgXFx1MDAyNmRtdXgtXFx1MDAzZXJ4X2J1Zl9wZXJtcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmhsb3MsIDEpKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZG11eC1cXHUwMDNlZGV2LCBcXFwiU0NNIHJlY2xhaW0gUlggYmxvY2sgZmFpbGVkOyBsZWFraW5nXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdFxcdGRtdXgtXFx1MDAzZXJ4X2J1Zl9wZXJtcyA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdGRtYV9mcmVlX2NvaGVyZW50KGRtdXgtXFx1MDAzZWRldiwgc2l6ZSwgZG11eC1cXHUwMDNlcnhfYnVmLCBkbXV4LVxcdTAwM2VyeF9idWZfZG1hKTtcXG4rXFx0ZG11eC1cXHUwMDNlcnhfYnVmID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuQEAgLTgwOSw2ICs5MTIsMTAgQEAgc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHRkbXV4LVxcdTAwM2V0eF9za2JzW2ldLmRtdXggPSBkbXV4O1xcbiBcXHR9XFxuIFxcbitcXHRyZXQgPSBiYW1fZG11eF9hbGxvY19jb2hlcmVudF9yeChkbXV4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdC8qIFJ1bnRpbWUgUE0gbWFuYWdlcyBvdXIgb3duIHBvd2VyIHZvdGUuXFxuIFxcdCAqIE5vdGUgdGhhdCB0aGUgUlggcGF0aCBtYXkgYmUgYWN0aXZlIGV2ZW4gaWYgd2UgYXJlIHJ1bnRpbWUgc3VzcGVuZGVkLFxcbiBcXHQgKiBzaW5jZSBpdCBpcyBjb250cm9sbGVkIGJ5IHRoZSByZW1vdGUgc2lkZS5cXG5AQCAtODQ1LDYgKzk1Miw3IEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gZXJyX2Rpc2FibGVfcG06XFxuIFxcdHBtX3J1bnRpbWVfZGlzYWJsZShkZXYpO1xcbiBcXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XFxuK1xcdGJhbV9kbXV4X2ZyZWVfY29oZXJlbnRfcngoZG11eCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTg3OSwxMyArOTg3LDE5IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRkaXNhYmxlX2lycShkbXV4LVxcdTAwM2VwY19pcnEpO1xcbiBcXHRiYW1fZG11eF9wb3dlcl9vZmYoZG11eCk7XFxuIFxcdGJhbV9kbXV4X2ZyZWVfc2ticyhkbXV4LVxcdTAwM2V0eF9za2JzLCBETUFfVE9fREVWSUNFKTtcXG4rXFx0YmFtX2RtdXhfZnJlZV9jb2hlcmVudF9yeChkbXV4KTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGJhbV9kbXV4X3BtX29wcyA9IHtcXG4gXFx0U0VUX1JVTlRJTUVfUE1fT1BTKGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZCwgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUsIE5VTEwpXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJhbV9kbXV4X2RhdGEgc2hpa3JhX2RhdGEgPSB7XFxuK1xcdC52bWlkID0gUUNPTV9TQ01fVk1JRF9OQVYsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiYW1fZG11eF9vZl9tYXRjaFtdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20sc2hpa3JhLWJhbS1kbXV4XFxcIiwgLmRhdGEgPSBcXHUwMDI2c2hpa3JhX2RhdGEgfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS1kbXV4XFxcIiB9LFxcbiBcXHR7IC8qIHNlbnRpbmVsICovIH1cXG4gfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6Mzc6NDYuMjU5ODYxMzc4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzI0MTgxNTQwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcWNvbV9iYW1fZG11eGAgZHJpdmVyLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgUXVhbGNvbW0gaGFyZHdhcmUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGNhbm5vdCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcyNDY5YTJlNzA0MGEzOTg3Y2E0NmI5NWQxZDFlYzYyOGQ0ZDljYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAxNCAwOTozNzo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWxcbmluZGV4IDMzNzQ2YzIzODUxM2Q3Li4yN2YwZmRmMjg1YzE3ZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbFxuQEAgLTIyLDcgKzIyLDEzIEBAIGRlc2NyaXB0aW9uOiB8XG4gXG4gcHJvcGVydGllczpcbiAgIGNvbXBhdGlibGU6XG4tICAgIGNvbnN0OiBxY29tLGJhbS1kbXV4XG4rICAgIG9uZU9mOlxuKyAgICAgIC0gY29uc3Q6IHFjb20sYmFtLWRtdXhcbisgICAgICAtIGl0ZW1zOlxuKyAgICAgICAgICAtIGVudW06XG4rICAgICAgICAgICAgICAjIFNoaWtyYVxuKyAgICAgICAgICAgICAgLSBxY29tLHNoaWtyYS1iYW0tZG11eFxuKyAgICAgICAgICAtIGNvbnN0OiBxY29tLGJhbS1kbXV4XG4gXG4gICBpbnRlcnJ1cHRzOlxuICAgICBkZXNjcmlwdGlvbjpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC93d2FuL0tjb25maWdcbmluZGV4IDk1OGRiYzczNDdmYTg0Li4xYjEzM2M1NjIzMTYxNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnXG5AQCAtNjUsNiArNjUsNyBAQCBjb25maWcgTUhJX1dXQU5fTUJJTVxuIGNvbmZpZyBRQ09NX0JBTV9ETVVYXG4gXHR0cmlzdGF0ZSBcIlF1YWxjb21tIEJBTS1ETVVYIFdXQU4gbmV0d29yayBkcml2ZXJcIlxuIFx0ZGVwZW5kcyBvbiAoRE1BX0VOR0lORSBcdTAwMjZcdTAwMjYgUE0gXHUwMDI2XHUwMDI2IFFDT01fU01FTV9TVEFURSkgfHwgQ09NUElMRV9URVNUXG4rXHRzZWxlY3QgUUNPTV9TQ01cbiBcdGhlbHBcbiBcdCAgVGhlIEJBTSBEYXRhIE11bHRpcGxleGVyIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbmV0d29yayBkYXRhIGNoYW5uZWxzXG4gXHQgIG9mIG1vZGVtcyBpbnRlZ3JhdGVkIGludG8gbWFueSBvbGRlciBRdWFsY29tbSBTb0NzLCBlLmcuIFF1YWxjb21tXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuaW5kZXggY2M2YWNlOGQ2NDM3MWUuLjI0NzIzMGI3MjBlNjAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG5AQCAtOSwxMCArOSwxMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWFlbmdpbmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL3Fjb20vc21lbV9zdGF0ZS5oXHUwMDNlXG5AQCAtNjIsNiArNjQsNyBAQCBzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSB7XG4gXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXg7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0ZG1hX2FkZHJfdCBhZGRyO1xuK1x0dm9pZCAqcnhfdmlydDsgLyogbm9uLU5VTEw6IHNsb3QgaW4gdGhlIGNvaGVyZW50IFJYIGJsb2NrICovXG4gfTtcbiBcbiBzdHJ1Y3QgYmFtX2RtdXgge1xuQEAgLTc1LDYgKzc4LDEwIEBAIHN0cnVjdCBiYW1fZG11eCB7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBwY19hY2tfY29tcGxldGlvbjtcbiBcbiBcdHN0cnVjdCBkbWFfY2hhbiAqcngsICp0eDtcbitcdC8qIFNpbmdsZSBjb2hlcmVudCBibG9jayBiYWNraW5nIGFsbCBSWCBidWZmZXJzLCBOVUxMIGlmIHVudXNlZCAqL1xuK1x0dm9pZCAqcnhfYnVmO1xuK1x0ZG1hX2FkZHJfdCByeF9idWZfZG1hO1xuK1x0dTY0IHJ4X2J1Zl9wZXJtczsgLyogU0NNIHNvdXJjZS1WTUlEIGJpdG1hc2sgb2YgcnhfYnVmICovXG4gXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSByeF9za2JzW0JBTV9ETVVYX05VTV9TS0JdO1xuIFx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgdHhfc2tic1tCQU1fRE1VWF9OVU1fU0tCXTtcbiBcdHNwaW5sb2NrX3QgdHhfbG9jazsgLyogUHJvdGVjdCB0eF9za2JzLCB0eF9uZXh0X3NrYiAqL1xuQEAgLTkyLDYgKzk5LDEwIEBAIHN0cnVjdCBiYW1fZG11eF9uZXRkZXYge1xuIFx0dTggY2g7XG4gfTtcbiBcbitzdHJ1Y3QgYmFtX2RtdXhfZGF0YSB7XG4rXHR1MzIgdm1pZDtcbit9O1xuK1xuIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX3ZvdGUoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIGVuYWJsZSlcbiB7XG4gXHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZkbXV4LVx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcbkBAIC0xMTEsNiArMTIyLDkgQEAgc3RhdGljIGJvb2wgYmFtX2RtdXhfc2tiX2RtYV9tYXAoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEsXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gc2tiX2RtYS1cdTAwM2VkbXV4LVx1MDAzZWRldjtcbiBcbitcdGlmIChza2JfZG1hLVx1MDAzZXJ4X3ZpcnQpIC8qIGNvaGVyZW50IFJYIHNsb3Q6IGFkZHIgcHJlLWFzc2lnbmVkICovXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuIFx0c2tiX2RtYS1cdTAwM2VhZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBza2JfZG1hLVx1MDAzZXNrYi1cdTAwM2VkYXRhLCBza2JfZG1hLVx1MDAzZXNrYi1cdTAwM2VsZW4sIGRpcik7XG4gXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBza2JfZG1hLVx1MDAzZWFkZHIpKSB7XG4gXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBETUEgbWFwIGJ1ZmZlclxcblwiKTtcbkBAIC0xMjQsNiArMTM4LDkgQEAgc3RhdGljIGJvb2wgYmFtX2RtdXhfc2tiX2RtYV9tYXAoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEsXG4gc3RhdGljIHZvaWQgYmFtX2RtdXhfc2tiX2RtYV91bm1hcChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSxcbiBcdFx0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcbiB7XG4rXHRpZiAoc2tiX2RtYS1cdTAwM2VyeF92aXJ0KSAvKiBjb2hlcmVudCBSWCBzbG90OiBub3RoaW5nIHRvIHVubWFwICovXG4rXHRcdHJldHVybjtcbitcbiBcdGRtYV91bm1hcF9zaW5nbGUoc2tiX2RtYS1cdTAwM2VkbXV4LVx1MDAzZWRldiwgc2tiX2RtYS1cdTAwM2VhZGRyLCBza2JfZG1hLVx1MDAzZXNrYi1cdTAwM2VsZW4sIGRpcik7XG4gXHRza2JfZG1hLVx1MDAzZWFkZHIgPSAwO1xuIH1cbkBAIC00NjgsOSArNDg1LDEwIEBAIHN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4KHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKVxuIHtcbiBcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtXHUwMDNlZG11eDtcbiBcdHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYztcbitcdHNpemVfdCBsZW4gPSBza2JfZG1hLVx1MDAzZXJ4X3ZpcnQgPyBCQU1fRE1VWF9CVUZGRVJfU0laRSA6IHNrYl9kbWEtXHUwMDNlc2tiLVx1MDAzZWxlbjtcbiBcbiBcdGRlc2MgPSBkbWFlbmdpbmVfcHJlcF9zbGF2ZV9zaW5nbGUoZG11eC1cdTAwM2VyeCwgc2tiX2RtYS1cdTAwM2VhZGRyLFxuLVx0XHRcdFx0XHQgICBza2JfZG1hLVx1MDAzZXNrYi1cdTAwM2VsZW4sIERNQV9ERVZfVE9fTUVNLFxuK1x0XHRcdFx0XHQgICBsZW4sIERNQV9ERVZfVE9fTUVNLFxuIFx0XHRcdFx0XHQgICBETUFfUFJFUF9JTlRFUlJVUFQpO1xuIFx0aWYgKCFkZXNjKSB7XG4gXHRcdGRldl9lcnIoZG11eC1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHByZXBhcmUgUlggRE1BIGJ1ZmZlclxcblwiKTtcbkBAIC00ODUsNiArNTAzLDEwIEBAIHN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4KHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKVxuIFxuIHN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfcXVldWVfcngoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEsIGdmcF90IGdmcClcbiB7XG4rXHQvKiBDb2hlcmVudCBSWCBzbG90cyBoYXZlIHJ4X3ZpcnQgYW5kIGFkZHIgcHJlLWFzc2lnbmVkIGF0IHByb2JlLiAqL1xuK1x0aWYgKHNrYl9kbWEtXHUwMDNlcnhfdmlydClcbitcdFx0cmV0dXJuIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4KHNrYl9kbWEpO1xuK1xuIFx0aWYgKCFza2JfZG1hLVx1MDAzZXNrYikge1xuIFx0XHRza2JfZG1hLVx1MDAzZXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihOVUxMLCBCQU1fRE1VWF9CVUZGRVJfU0laRSwgZ2ZwKTtcbiBcdFx0aWYgKCFza2JfZG1hLVx1MDAzZXNrYilcbkBAIC00OTksOSArNTIxLDEwIEBAIHN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfcXVldWVfcngoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEsIGdmcF90IGdmXG4gc3RhdGljIHZvaWQgYmFtX2RtdXhfY21kX2RhdGEoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXG4ge1xuIFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gc2tiX2RtYS1cdTAwM2VkbXV4O1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kbWEtXHUwMDNlc2tiO1xuLVx0c3RydWN0IGJhbV9kbXV4X2hkciAqaGRyID0gKHN0cnVjdCBiYW1fZG11eF9oZHIgKilza2ItXHUwMDNlZGF0YTtcbitcdHN0cnVjdCBiYW1fZG11eF9oZHIgKmhkciA9IHNrYl9kbWEtXHUwMDNlcnhfdmlydCA/IHNrYl9kbWEtXHUwMDNlcnhfdmlydCA6XG4rXHRcdFx0XHQgICAoc3RydWN0IGJhbV9kbXV4X2hkciAqKXNrYl9kbWEtXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZG11eC1cdTAwM2VuZXRkZXZzW2hkci1cdTAwM2VjaF07XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0aWYgKCFuZXRkZXYgfHwgIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuIFx0XHRkZXZfd2FybihkbXV4LVx1MDAzZWRldiwgXCJEYXRhIGZvciBpbmFjdGl2ZSBjaGFubmVsICV1XFxuXCIsIGhkci1cdTAwM2VjaCk7XG5AQCAtNTE0LDEwICs1MzcsMTggQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfY21kX2RhdGEoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHNrYl9kbWEtXHUwMDNlc2tiID0gTlVMTDsgLyogSGFuZCBvdmVyIHRvIG5ldHdvcmsgc3RhY2sgKi9cbi1cbi1cdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbi1cdHNrYl90cmltKHNrYiwgaGRyLVx1MDAzZWxlbik7XG4rXHRpZiAoc2tiX2RtYS1cdTAwM2VyeF92aXJ0KSB7XG4rXHRcdC8qIENvaGVyZW50IGJsb2NrIGlzIG5vdCBwYWdlLWJhY2tlZDogY29weSBvdXQgdG8gYSByZWFsIHNrYiAqL1xuK1x0XHRza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgaGRyLVx1MDAzZWxlbik7XG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdHJldHVybjtcbitcdFx0c2tiX3B1dF9kYXRhKHNrYiwgKHU4ICopc2tiX2RtYS1cdTAwM2VyeF92aXJ0ICsgc2l6ZW9mKCpoZHIpLCBoZHItXHUwMDNlbGVuKTtcbitcdH0gZWxzZSB7XG4rXHRcdHNrYiA9IHNrYl9kbWEtXHUwMDNlc2tiO1xuK1x0XHRza2JfZG1hLVx1MDAzZXNrYiA9IE5VTEw7IC8qIEhhbmQgb3ZlciB0byBuZXR3b3JrIHN0YWNrICovXG4rXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbitcdFx0c2tiX3RyaW0oc2tiLCBoZHItXHUwMDNlbGVuKTtcbitcdH1cbiBcdHNrYi1cdTAwM2VkZXYgPSBuZXRkZXY7XG4gXG4gXHQvKiBPbmx5IFJhdy1JUC9RTUFQIGlzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciAqL1xuQEAgLTU3NCwxMCArNjA1LDE0IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3J4X2NhbGxiYWNrKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEgPSBkYXRhO1xuIFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gc2tiX2RtYS1cdTAwM2VkbXV4O1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kbWEtXHUwMDNlc2tiO1xuLVx0c3RydWN0IGJhbV9kbXV4X2hkciAqaGRyID0gKHN0cnVjdCBiYW1fZG11eF9oZHIgKilza2ItXHUwMDNlZGF0YTtcbitcdHN0cnVjdCBiYW1fZG11eF9oZHIgKmhkcjtcbiBcbi1cdGJhbV9kbXV4X3NrYl9kbWFfdW5tYXAoc2tiX2RtYSwgRE1BX0ZST01fREVWSUNFKTtcbitcdGlmIChza2JfZG1hLVx1MDAzZXJ4X3ZpcnQpIHtcbitcdFx0aGRyID0gc2tiX2RtYS1cdTAwM2VyeF92aXJ0OyAvKiBjb2hlcmVudCBSWDogbm8gc2tiIHRvIHVubWFwICovXG4rXHR9IGVsc2Uge1xuK1x0XHRiYW1fZG11eF9za2JfZG1hX3VubWFwKHNrYl9kbWEsIERNQV9GUk9NX0RFVklDRSk7XG4rXHRcdGhkciA9IChzdHJ1Y3QgYmFtX2RtdXhfaGRyICopc2tiX2RtYS1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbitcdH1cbiBcbiBcdGlmIChoZHItXHUwMDNlbWFnaWMgIT0gQkFNX0RNVVhfSERSX01BR0lDKSB7XG4gXHRcdGRldl9lcnIoZG11eC1cdTAwM2VkZXYsIFwiSW52YWxpZCBtYWdpYyBpbiBoZWFkZXI6ICUjeFxcblwiLCBoZHItXHUwMDNlbWFnaWMpO1xuQEAgLTY0NCw2ICs2NzksOSBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9mcmVlX3NrYnMoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgc2tic1tdLFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQkFNX0RNVVhfTlVNX1NLQjsgaSsrKSB7XG4gXHRcdHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hID0gXHUwMDI2c2tic1tpXTtcbiBcbitcdFx0aWYgKHNrYl9kbWEtXHUwMDNlcnhfdmlydCkgLyogY29oZXJlbnQgYmxvY2sgZnJlZWQgYXQgcmVtb3ZlICovXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdGlmIChza2JfZG1hLVx1MDAzZWFkZHIpXG4gXHRcdFx0YmFtX2RtdXhfc2tiX2RtYV91bm1hcChza2JfZG1hLCBkaXIpO1xuIFx0XHRpZiAoc2tiX2RtYS1cdTAwM2Vza2IpIHtcbkBAIC03NjIsNiArODAwLDcxIEBAIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYmFtX2RtdXhfYWxsb2NfY29oZXJlbnRfcngoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRtdXgtXHUwMDNlZGV2O1xuK1x0Y29uc3Qgc3RydWN0IGJhbV9kbXV4X2RhdGEgKmRhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcbitcdHNpemVfdCBzaXplID0gQkFNX0RNVVhfTlVNX1NLQiAqIEJBTV9ETVVYX0JVRkZFUl9TSVpFO1xuK1x0dTY0IHNyYyA9IEJJVF9VTEwoUUNPTV9TQ01fVk1JRF9ITE9TKTtcbitcdHN0cnVjdCBxY29tX3NjbV92bXBlcm0gZHN0WzJdO1xuK1x0aW50IGksIHJldDtcbitcbitcdGlmICghZGF0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKVxuK1x0XHRyZXR1cm4gLUVQUk9CRV9ERUZFUjtcbitcbitcdGRzdFswXS52bWlkID0gUUNPTV9TQ01fVk1JRF9ITE9TO1xuK1x0ZHN0WzBdLnBlcm0gPSBRQ09NX1NDTV9QRVJNX1JXO1xuK1x0ZHN0WzFdLnZtaWQgPSBkYXRhLVx1MDAzZXZtaWQ7XG4rXHRkc3RbMV0ucGVybSA9IFFDT01fU0NNX1BFUk1fUlc7XG4rXG4rXHRkbXV4LVx1MDAzZXJ4X2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIFx1MDAyNmRtdXgtXHUwMDNlcnhfYnVmX2RtYSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWRtdXgtXHUwMDNlcnhfYnVmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJBTV9ETVVYX05VTV9TS0I7IGkrKykge1xuK1x0XHRkbXV4LVx1MDAzZXJ4X3NrYnNbaV0ucnhfdmlydCA9IGRtdXgtXHUwMDNlcnhfYnVmICsgaSAqIEJBTV9ETVVYX0JVRkZFUl9TSVpFO1xuK1x0XHRkbXV4LVx1MDAzZXJ4X3NrYnNbaV0uYWRkciA9IGRtdXgtXHUwMDNlcnhfYnVmX2RtYSArIGkgKiBCQU1fRE1VWF9CVUZGRVJfU0laRTtcbitcdH1cbitcbitcdHJldCA9IHFjb21fc2NtX2Fzc2lnbl9tZW0oZG11eC1cdTAwM2VyeF9idWZfZG1hLCBzaXplLCBcdTAwMjZzcmMsIGRzdCwgQVJSQVlfU0laRShkc3QpKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiU0NNIGFzc2lnbiBSWCBibG9jayBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdGRtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgZG11eC1cdTAwM2VyeF9idWYsIGRtdXgtXHUwMDNlcnhfYnVmX2RtYSk7XG4rXHRcdGRtdXgtXHUwMDNlcnhfYnVmID0gTlVMTDtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdGRtdXgtXHUwMDNlcnhfYnVmX3Blcm1zID0gc3JjO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJhbV9kbXV4X2ZyZWVfY29oZXJlbnRfcngoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxuK3tcbitcdHN0cnVjdCBxY29tX3NjbV92bXBlcm0gaGxvcyA9IHtcbitcdFx0LnZtaWQgPSBRQ09NX1NDTV9WTUlEX0hMT1MsXG4rXHRcdC5wZXJtID0gUUNPTV9TQ01fUEVSTV9SVyxcbitcdH07XG4rXHRzaXplX3Qgc2l6ZSA9IEJBTV9ETVVYX05VTV9TS0IgKiBCQU1fRE1VWF9CVUZGRVJfU0laRTtcbitcbitcdGlmICghZG11eC1cdTAwM2VyeF9idWYpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChkbXV4LVx1MDAzZXJ4X2J1Zl9wZXJtcykge1xuK1x0XHRpZiAocWNvbV9zY21fYXNzaWduX21lbShkbXV4LVx1MDAzZXJ4X2J1Zl9kbWEsIHNpemUsIFx1MDAyNmRtdXgtXHUwMDNlcnhfYnVmX3Blcm1zLFxuK1x0XHRcdFx0XHRcdTAwMjZobG9zLCAxKSkge1xuK1x0XHRcdGRldl9lcnIoZG11eC1cdTAwM2VkZXYsIFwiU0NNIHJlY2xhaW0gUlggYmxvY2sgZmFpbGVkOyBsZWFraW5nXFxuXCIpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRkbXV4LVx1MDAzZXJ4X2J1Zl9wZXJtcyA9IDA7XG4rXHR9XG4rXG4rXHRkbWFfZnJlZV9jb2hlcmVudChkbXV4LVx1MDAzZWRldiwgc2l6ZSwgZG11eC1cdTAwM2VyeF9idWYsIGRtdXgtXHUwMDNlcnhfYnVmX2RtYSk7XG4rXHRkbXV4LVx1MDAzZXJ4X2J1ZiA9IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbkBAIC04MDksNiArOTEyLDEwIEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0ZG11eC1cdTAwM2V0eF9za2JzW2ldLmRtdXggPSBkbXV4O1xuIFx0fVxuIFxuK1x0cmV0ID0gYmFtX2RtdXhfYWxsb2NfY29oZXJlbnRfcngoZG11eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0LyogUnVudGltZSBQTSBtYW5hZ2VzIG91ciBvd24gcG93ZXIgdm90ZS5cbiBcdCAqIE5vdGUgdGhhdCB0aGUgUlggcGF0aCBtYXkgYmUgYWN0aXZlIGV2ZW4gaWYgd2UgYXJlIHJ1bnRpbWUgc3VzcGVuZGVkLFxuIFx0ICogc2luY2UgaXQgaXMgY29udHJvbGxlZCBieSB0aGUgcmVtb3RlIHNpZGUuXG5AQCAtODQ1LDYgKzk1Miw3IEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBlcnJfZGlzYWJsZV9wbTpcbiBcdHBtX3J1bnRpbWVfZGlzYWJsZShkZXYpO1xuIFx0cG1fcnVudGltZV9kb250X3VzZV9hdXRvc3VzcGVuZChkZXYpO1xuK1x0YmFtX2RtdXhfZnJlZV9jb2hlcmVudF9yeChkbXV4KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTg3OSwxMyArOTg3LDE5IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0ZGlzYWJsZV9pcnEoZG11eC1cdTAwM2VwY19pcnEpO1xuIFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xuIFx0YmFtX2RtdXhfZnJlZV9za2JzKGRtdXgtXHUwMDNldHhfc2ticywgRE1BX1RPX0RFVklDRSk7XG4rXHRiYW1fZG11eF9mcmVlX2NvaGVyZW50X3J4KGRtdXgpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYmFtX2RtdXhfcG1fb3BzID0ge1xuIFx0U0VUX1JVTlRJTUVfUE1fT1BTKGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZCwgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUsIE5VTEwpXG4gfTtcbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJhbV9kbXV4X2RhdGEgc2hpa3JhX2RhdGEgPSB7XG4rXHQudm1pZCA9IFFDT01fU0NNX1ZNSURfTkFWLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmFtX2RtdXhfb2ZfbWF0Y2hbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcInFjb20sc2hpa3JhLWJhbS1kbXV4XCIsIC5kYXRhID0gXHUwMDI2c2hpa3JhX2RhdGEgfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcInFjb20sYmFtLWRtdXhcIiB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjM3OjQ2LjI1OTg2MjgyOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NjI0NzU5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRQ09NIEJBTSBETVVYIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY2AsIHNwZWNpZmljYWxseSB0aGUgb25lIHRoYXQgYWRkcyBzdXBwb3J0IGZvciBcInFjb20sc2hpa3JhLWJhbS1kbXV4LlwiICBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIFJYIGJ1ZmZlcnMuICBJdCdzIG1vZGlmeWluZyBgYmFtX2RtdXhfcHJvYmVgIHRvIGNhbGwgYGJhbV9kbXV4X2FsbG9jX2NvaGVyZW50X3J4YCwgYW5kIHRoYXQncyB0aGUgaW50ZXJlc3RpbmcgYml0IGJlY2F1c2UgKnRoYXQqIGZ1bmN0aW9uIHVzZXMgYHFjb21fc2NtX2Fzc2lnbl9tZW1gLiAgVGhpcyBzdWdnZXN0cyBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIGEgc3BlY2lmaWMgVk1JRCwgbGlrZSBgUUNPTV9TQ01fVk1JRF9OQVZgLiAgVGhlIFJYIHBhdGggKGBiYW1fZG11eF9za2JfZG1hX3N1Ym1pdF9yeGAsIGV0Yy4pIGlzIGFsc28gYWRqdXN0ZWQgdG8gZGVhbCB3aXRoIHRoaXMgY29oZXJlbnQgbWVtb3J5IGJsb2NrLiBJdOKAmXMgbm8gbG9uZ2VyIGp1c3Qgc3RhbmRhcmQgc2tiIGFsbG9jYXRpb24uXG5cblRoZSBxdWVzdGlvbiBub3cgaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSwgYW5kIGlzIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmc/ICBGaXJzdCwgdGhlIGRyaXZlciBpdHNlbGYsIGBxY29tX2JhbV9kbXV4LmNgLCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiAgVGhlIGNvbmZpZyBpcyBgUUNPTV9CQU1fRE1VWGAsIHNvIHRoYXQncyBzaW1wbGUgZW5vdWdoIHRvIGNoZWNrLiAgVGhlIGNoYW5nZXMgKmFyZSogZnVuY3Rpb25hbCwgdGhleeKAmXJlIG1lc3Npbmcgd2l0aCBob3cgdGhlIGRyaXZlciBhbGxvY2F0ZXMgYW5kIGhhbmRsZXMgUlggYnVmZmVycywgYSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0LlxuXG5CdXQsIGNhbiBpdCBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/ICBJcyBpdCBzb21ldGhpbmcgd2UgY2FuIHRlc3Qgd2l0aCBHQ0Ugb3IgUUVNVT8gIEl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgXCJxY29tLGJhbS1kbXV4XCIgYW5kIFwicWNvbSxzaGlrcmEtYmFtLWRtdXhcIi4gIFNvLCB0byB0ZXN0IHRoaXMsIGRvIHdlIGtub3cgdGhlIGRldmljZSB0cmVlIHN0cnVjdHVyZSB3ZWxsIGVub3VnaCB0byBpbnN0YW50aWF0ZSB0aGUgcGxhdGZvcm0gZGV2aWNlPyAgSWYgbm90LCBjYW4gc3l6a2FsbGVyIGhhbmRsZSBpdCwgZWl0aGVyIHRocm91Z2ggZGV2aWNlIGluamVjdGlvbiwgcHNldWRvLWRldmljZXMsIG9yIG1vZGlmeWluZyB0aGUgZGV2aWNlIHRyZWU/ICBXZSBuZWVkIHRvIGxvb2sgYXQgaG93IHN5emthbGxlciBjYW4gaGFuZGxlIHRoaXMuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gdGhhdCBgcWNvbV9zY21fYXNzaWduX21lbWAgY2FsbC4uLiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLiAgSXMgYHFjb21fc2NtX2lzX2F2YWlsYWJsZSgpYCBhY3R1YWxseSBjYWxsZWQgKmJlZm9yZSogYHFjb21fc2NtX2Fzc2lnbl9tZW1gPyBJZiBpdCByZXR1cm5zIGBmYWxzZWAsIGl0IHJldHVybnMgYC1FUFJPQkVfREVGRVJgLiBTbywgYHFjb21fc2NtX2lzX2F2YWlsYWJsZSgpYCByZXR1cm5pbmcgYGZhbHNlYCBjb3VsZCBjb21wbGV0ZWx5IHByZXZlbnQgdXMgZnJvbSBldmVuIGdldHRpbmcgaW50byB0aGlzIGNyaXRpY2FsIHBhdGguIEkgaGF2ZSB0byBsb29rIGludG8gdGhpcyBtb3JlIGNsb3NlbHkgYW5kIHNlZSB3aGF0IHRoZSBjb25kaXRpb25zIGFyZSBmb3IgYHFjb21fc2NtX2lzX2F2YWlsYWJsZSgpYCB0byByZXR1cm4gYHRydWVgIG9yIGBmYWxzZWAgYW5kIHRoZW4sIGlmIG5lY2Vzc2FyeSwgd3JpdGUgc29tZSBjb2RlIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHJlYWNoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTcxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6Mzc6NTQuOTIyMzQwOTg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDc2MzQ1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWNvbV9zY21faXNfYXZhaWxhYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLXFjb20tc3BtLmM9MTMwPXN0YXRpYyBpbnQgc3BtX2NwdWlkbGVfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1xY29tLXNwbS5jLTEzMy1cXG5kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1xY29tLXNwbS5jOjEzNDpcXHRpZiAoIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKVxcbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLXFjb20tc3BtLmMtMTM1LVxcdFxcdHJldHVybiAtRVBST0JFX0RFRkVSO1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjMwPXN0cnVjdCBxY29tX3R6bWVtX3Bvb2wgKnFjb21fc2NtX2dldF90em1lbV9wb29sKHZvaWQpXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjMxLXtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyMzI6XFx0aWYgKCFxY29tX3NjbV9pc19hdmFpbGFibGUoKSlcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yMzMtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yNTMyPXN0YXRpYyB2b2lkIHFjb21fc2NtX3F0ZWVfaW5pdChzdHJ1Y3QgcWNvbV9zY20gKnNjbSlcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI1NTYtLyoqXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjU1NzogKiBxY29tX3NjbV9pc19hdmFpbGFibGUoKSAtIENoZWNrcyBpZiBTQ00gaXMgYXZhaWxhYmxlXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjU1OC0gKi9cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNTU5OmJvb2wgcWNvbV9zY21faXNfYXZhaWxhYmxlKHZvaWQpXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjU2MC17XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNTYzLX1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNTY0OkVYUE9SVF9TWU1CT0xfR1BMKHFjb21fc2NtX2lzX2F2YWlsYWJsZSk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjU2NS1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI3Mzc9c3RhdGljIGludCBxY29tX3NjbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjgyOS1cXHQvKlxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI4MzA6XFx0ICogUGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIHFjb21fc2NtX2lzX2F2YWlsYWJsZSgpLlxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI4MzEtXFx0ICpcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ211LmM9MTE5NT1zdGF0aWMgaW50IGE2eHhfZ211X3NlY3VyZV9pbml0KHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dtdS5jLTEyMTQtXFx0XFx0ICovXFxuZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuYzoxMjE1OlxcdFxcdGlmICghcWNvbV9zY21faXNfYXZhaWxhYmxlKCkpIHtcXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dtdS5jLTEyMTYtXFx0XFx0XFx0ZGV2X3dhcm5fb25jZShncHUtXFx1MDAzZWRldi1cXHUwMDNlZGV2LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jPTE2OT1pbnQgYWRyZW5vX3phcF9zaGFkZXJfbG9hZChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCB1MzIgcGFzaWQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMtMTc4LVxcdC8qIFdlIG5lZWQgU0NNIHRvIGJlIGFibGUgdG8gbG9hZCB0aGUgZmlybXdhcmUgKi9cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmM6MTc5OlxcdGlmICghcWNvbV9zY21faXNfYXZhaWxhYmxlKCkpIHtcXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMtMTgwLVxcdFxcdERSTV9ERVZfRVJST1IoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlNDTSBpcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11L2FybS1zbW11LXFjb20uYz02NjQ9c3RhdGljIHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnFjb21fc21tdV9jcmVhdGUoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11L2FybS1zbW11LXFjb20uYy02ODItXFx0LyogQ2hlY2sgdG8gbWFrZSBzdXJlIHFjb21fc2NtIGhhcyBmaW5pc2hlZCBwcm9iaW5nICovXFxuZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUvYXJtLXNtbXUtcWNvbS5jOjY4MzpcXHRpZiAoIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKVxcbmRyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11L2FybS1zbW11LXFjb20uYy02ODQtXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShzbW11LVxcdTAwM2VkZXYsIC1FUFJPQkVfREVGRVIsXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vdmVudXMvZmlybXdhcmUuYz0yMTE9aW50IHZlbnVzX2Jvb3Qoc3RydWN0IHZlbnVzX2NvcmUgKmNvcmUpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vdmVudXMvZmlybXdhcmUuYy0yMjAtXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19RQ09NX01EVF9MT0FERVIpIHx8XFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL3ZlbnVzL2Zpcm13YXJlLmM6MjIxOlxcdCAgICAoY29yZS1cXHUwMDNldXNlX3R6IFxcdTAwMjZcXHUwMDI2ICFxY29tX3NjbV9pc19hdmFpbGFibGUoKSkpXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL3ZlbnVzL2Zpcm13YXJlLmMtMjIyLVxcdFxcdHJldHVybiAtRVBST0JFX0RFRkVSO1xcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz0yMzY0PXN0YXRpYyBpbnQgZmFzdHJwY19ycG1zZ19wcm9iZShzdHJ1Y3QgcnBtc2dfZGV2aWNlICpycGRldilcXG4tLVxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMjM5NS1cXHRcXHR2bWNvdW50ID0gMDtcXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjIzOTY6XFx0ZWxzZSBpZiAoIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKVxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMjM5Ny1cXHRcXHRyZXR1cm4gLUVQUk9CRV9ERUZFUjtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jPTcyMz1zdGF0aWMgZW51bSBpcGFfZmlybXdhcmVfbG9hZGVyIGlwYV9maXJtd2FyZV9sb2FkZXIoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtNzYwLVxcdC8qIFdlIG5lZWQgVHJ1c3QgWm9uZSB0byBsb2FkIGZpcm13YXJlOyBtYWtlIHN1cmUgaXQncyBhdmFpbGFibGUgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYzo3NjE6XFx0aWYgKHFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jLTc2Mi1cXHRcXHRyZXR1cm4gSVBBX0xPQURFUl9TRUxGO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM9ODAzPXN0YXRpYyBpbnQgYmFtX2RtdXhfYWxsb2NfY29oZXJlbnRfcngoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtODE0LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjgxNTpcXHRpZiAoIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTgxNi1cXHRcXHRyZXR1cm4gLUVQUk9CRV9ERUZFUjtcXG4tLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmM9MjA2Nz1zdGF0aWMgaW50IHE2djVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmMtMjA3OS1cXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X21zcy5jOjIwODA6XFx0aWYgKGRlc2MtXFx1MDAzZW5lZWRfbWVtX3Byb3RlY3Rpb24gXFx1MDAyNlxcdTAwMjYgIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmMtMjA4MS1cXHRcXHRyZXR1cm4gLUVQUk9CRV9ERUZFUjtcXG4tLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfcGFzLmM9NzMzPXN0YXRpYyBpbnQgcWNvbV9wYXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfcGFzLmMtNzQ1LVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfcGFzLmM6NzQ2OlxcdGlmICghcWNvbV9zY21faXNfYXZhaWxhYmxlKCkpXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9wYXMuYy03NDctXFx0XFx0cmV0dXJuIC1FUFJPQkVfREVGRVI7XFxuLS1cXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV93Y25zcy5jPTU0OT1zdGF0aWMgaW50IHdjbnNzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV93Y25zcy5jLTU1OS1cXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV93Y25zcy5jOjU2MDpcXHRpZiAoIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3djbnNzLmMtNTYxLVxcdFxcdHJldHVybiAtRVBST0JFX0RFRkVSO1xcbi0tXFxuZHJpdmVycy9zb2MvcWNvbS9pY2UuYz01NjM9c3RhdGljIHN0cnVjdCBxY29tX2ljZSAqcWNvbV9pY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvc29jL3Fjb20vaWNlLmMtNTY3LVxcbmRyaXZlcnMvc29jL3Fjb20vaWNlLmM6NTY4OlxcdGlmICghcWNvbV9zY21faXNfYXZhaWxhYmxlKCkpXFxuZHJpdmVycy9zb2MvcWNvbS9pY2UuYy01NjktXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XFxuLS1cXG5kcml2ZXJzL3NvYy9xY29tL29jbWVtLmM9MjkzPXN0YXRpYyBpbnQgb2NtZW1fZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3NvYy9xY29tL29jbWVtLmMtMjk5LVxcbmRyaXZlcnMvc29jL3Fjb20vb2NtZW0uYzozMDA6XFx0aWYgKCFxY29tX3NjbV9pc19hdmFpbGFibGUoKSlcXG5kcml2ZXJzL3NvYy9xY29tL29jbWVtLmMtMzAxLVxcdFxcdHJldHVybiAtRVBST0JFX0RFRkVSO1xcbi0tXFxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYz0xNzE9c3RhdGljIGludCBxY29tX3JtdGZzX21lbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYy0yNTgtXFx0fSBlbHNlIGlmICghcmV0KSB7XFxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYzoyNTk6XFx0XFx0aWYgKCFxY29tX3NjbV9pc19hdmFpbGFibGUoKSkge1xcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmMtMjYwLVxcdFxcdFxcdHJldCA9IC1FUFJPQkVfREVGRVI7XFxuLS1cXG5kcml2ZXJzL3RoZXJtYWwvcWNvbS9sbWguYz05Nz1zdGF0aWMgaW50IGxtaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy90aGVybWFsL3Fjb20vbG1oLmMtMTA2LVxcbmRyaXZlcnMvdGhlcm1hbC9xY29tL2xtaC5jOjEwNzpcXHRpZiAoIXFjb21fc2NtX2lzX2F2YWlsYWJsZSgpKVxcbmRyaXZlcnMvdGhlcm1hbC9xY29tL2xtaC5jLTEwOC1cXHRcXHRyZXR1cm4gLUVQUk9CRV9ERUZFUjtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oPTQ5PWVudW0gcWNvbV9zY21faWNlX2NpcGhlciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaC02MS1cXG5pbmNsdWRlL2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaDo2Mjpib29sIHFjb21fc2NtX2lzX2F2YWlsYWJsZSh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaC02My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6Mzg6MDAuMjI5OTgyMzg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0Nzk5MTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipTQ00gQXZhaWxhYmlsaXR5OiBBIFF1aWNrIENoZWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBTZWN1cmUgQ2hhbm5lbCBNYW5hZ2VyIChTQ00pIGRyaXZlciwgc3BlY2lmaWNhbGx5IGhvdyB3ZSBkZXRlcm1pbmUgaWYgaXQncyBiZWVuIHByb2JlZC4gVGhlIGZ1bmN0aW9uIGBxY29tX3NjbV9pc19hdmFpbGFibGUoKWAgaXMgdGhlIGtleS4gSXQncyBzdXBwb3NlZCB0byByZXR1cm4gYHRydWVgIGlmIHRoZSBkcml2ZXIsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jYCwgaXMgaW5pdGlhbGl6ZWQgYW5kIHJlYWR5IHRvIGdvLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIGdvaW5nIHRvIGJlIGF2YWlsYWJsZSB1bmRlciBlbXVsYXRpb24sIGxpa2UgaW4gUUVNVSwgb3Igb24gR29vZ2xlIENvbXB1dGUgRW5naW5lP1wiIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHFjb21fc2NtYCBpcyBldmVuIHByZXNlbnQgYW5kIHdvcmtpbmcgaW4gdGhvc2UgZW52aXJvbm1lbnRzLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGV0ZWN0aW9uIHByb2Nlc3MsIEknbGwgbmVlZCB0byBkaXZlIGludG8gdGhlIGBxY29tX3NjbV9wcm9iZWAgZnVuY3Rpb24gd2l0aGluIHRoZSBkcml2ZXIncyBjb2RlIGluIGBkcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uY2AuIFRoYXQgc2hvdWxkIGNsYXJpZnkgaG93IHRoZSBkcml2ZXIgZGV0ZXJtaW5lcyBpdHMgb3duIGF2YWlsYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkwNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjM4OjA0LjM3Nzk3NjY4NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk5NjgzMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFjb21fc2NtX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI1NTk9Ym9vbCBxY29tX3NjbV9pc19hdmFpbGFibGUodm9pZClcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNTYwLXtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNTYxOlxcdC8qIFBhaXJlZCB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gcWNvbV9zY21fcHJvYmUgKi9cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNTYyLVxcdHJldHVybiAhIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNl9fc2NtKTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI3MzU9TU9EVUxFX1BBUk1fREVTQyhkb3dubG9hZF9tb2RlLCBcXFwiZG93bmxvYWQgbW9kZTogb2ZmLzAvTiBmb3Igbm8gZHVtcCBtb2RlLCBmdWxsL29uLzEvWSBmb3IgZnVsbCBkdW1wIG1vZGUsIG1pbmkgZm9yIG1pbmlkdW1wIG1vZGUgYW5kIGZ1bGwsbWluaSBmb3IgYm90aCBmdWxsIGFuZCBtLi4uXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjczNi1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNzM3OnN0YXRpYyBpbnQgcWNvbV9zY21fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNzM4LXtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI4OTU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcWNvbV9zY21fZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjkwMC1cXHR9LFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI5MDE6XFx0LnByb2JlID0gcWNvbV9zY21fcHJvYmUsXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjkwMi1cXHQuc2h1dGRvd24gPSBxY29tX3NjbV9zaHV0ZG93bixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6Mzg6MDYuNTc3NjY0NDc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcxODAxMDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyBgcWNvbV9zY21fcHJvYmVgOlxuXG4qKkFuYWx5emluZyBgcWNvbV9zY21fcHJvYmVgKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gd2hhdCBgcWNvbV9zY21fcHJvYmVgIGFjdHVhbGx5ICpkb2VzKi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIGZ1bmN0aW9uYWxpdHkuIFdoYXQncyBpdCBkZXNpZ25lZCB0byBhY2NvbXBsaXNoPyBXaGF0J3MgdGhlIGNvcmUgcHVycG9zZT9cblxuQmV5b25kIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgZGV2aWNlIHRoaXMgcHJvYmUgZnVuY3Rpb24gaXMgdWx0aW1hdGVseSBnb2luZyB0byBiaW5kIHRvLiBJcyBpdCBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2UgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGJsb2NrLCBvciBpcyBpdCBtb3JlIGdlbmVyaWM/IFVuZGVyc3RhbmRpbmcgdGhhdCBiaW5kaW5nIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbiBpdHNlbGYuIFRoZSBkZXZpY2UgaXMgdGhlIGNyaXRpY2FsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6Mzg6MTIuMjk1Njc3MDU4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzM2Mzg1OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWNvbV9zY21fZHRfbWF0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9Mjg3NT1zdGF0aWMgdm9pZCBxY29tX3NjbV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjg4MC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyODgxOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHFjb21fc2NtX2R0X21hdGNoW10gPSB7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjg4Mi1cXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20sc2NtXFxcIiB9LFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjg5Mi19O1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI4OTM6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcWNvbV9zY21fZHRfbWF0Y2gpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI4OTQtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9Mjg5NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBxY29tX3NjbV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yODk3LVxcdFxcdC5uYW1lXFx0PSBcXFwicWNvbV9zY21cXFwiLFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI4OTg6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gcWNvbV9zY21fZHRfbWF0Y2gsXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjg5OS1cXHRcXHQuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjM4OjE0LjI2OTMyMTI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NjkwOTI3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN5emthbGxlcidzIFBvdGVudGlhbCBmb3IgVHJpZ2dlcmluZyBRdWFsY29tbSBEcml2ZXIgQnVncyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgc3l6a2FsbGVyIGNhbiBpbnRlcmFjdCB3aXRoIHRoaXMgYHFjb21fc2NtYCBhbmQgdGhlIGBxY29tLHNoaWtyYS1iYW0tZG11eGAgZHJpdmVycy4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKmluamVjdCogdGhlc2UgZGV2aWNlcyBvciB0cmlnZ2VyIHRoZWlyIHByb2Jpbmc/XG5cbkZpcnN0IHRob3VnaHQgaXMsIGRvZXMgc3l6a2FsbGVyIGhhdmUgbWVjaGFuaXNtcyB0byBhZGQgcGxhdGZvcm0gZGV2aWNlcywgbGlrZSBgc3l6X2Rldl9jcmVhdGVgIG9yIGV2ZW4gYSBoeXBvdGhldGljYWwgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYD8gV2FpdCwgbm8sIHRoZXJlIGlzbid0IGEgZGlyZWN0IGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAgY2FsbC4gQnV0LCBzeXprYWxsZXIgZG9lcyBoYXZlIG90aGVyIHN5c3RlbSBjYWxscyBsaWtlIGBzeXpfaW5pdF9uZXRfc29ja2V0YCwgYHN5el9tb3VudGAsIG9yIGBzeXpfb3BlbmAgdGhhdCAqbWlnaHQqIGJlIHVzZWQuXG5cblRoZSBjYXRjaCBpcywgc3l6a2FsbGVyIHByaW1hcmlseSB1c2VzIFFFTVUgb3IgR0NFIHZpcnR1YWwgbWFjaGluZXMgZm9yIHRlc3RpbmcuIElzIGBxY29tX3NjbWAgZXZlbiAqcHJlc2VudCogaW4gdGhvc2UgZW52aXJvbm1lbnRzPyBHZW5lcmFsbHksIHN5emthbGxlcidzIHN0YW5kYXJkIHNldHVwIHVzZXMgZ2VuZXJpYyB4ODZfNjQgb3IgYXJtNjQgVk1zLiBJZiBpdCdzIG9uIGFuIGFybTY0IFZNLCB0aGUgZGV2aWNlIHRyZWUgbWlnaHQgbm90IGluY2x1ZGUgYHFjb20sc2NtYC4gU28sIGNhbiBzeXprYWxsZXIgZ2V0IGFyb3VuZCB0aGlzPyBXZWxsLCBpdCAqZG9lcyogaGF2ZSB0aGlzIHBzZXVkby1kZXZpY2UgaW5qZWN0b3IsIGFuZCwgYWdhaW4sIG1heWJlIGBzeXpfZGV2X2NyZWF0ZWAgY291bGQgd29yay4gV2FpdCwgbGV0IG1lIGNoZWNrLCBkb2VzIGBzeXprYWxsZXJgIGhhdmUgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYD8gTm8sIHRoYXQncyBub3QgcmlnaHQuIEhtbSwgbW9yZSBhdmVudWVzLCBpdCB1c2VzIGNhbGxzIGxpa2UgYHN5el91c2JfY29ubmVjdGAgb3IgYHN5el84MDIxMV9pbmplY3RfZnJhbWVgLlxuXG5UaGUga2V5IHRoaW5nIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiB0cmlnZ2VyIGBiYW1fZG11eF9wcm9iZWAuIFdpdGhvdXQgYHFjb20sc2hpa3JhLWJhbS1kbXV4YCBpbiB0aGUgZGV2aWNlIHRyZWUsIHRoZSBkcml2ZXIgd29uJ3QgcHJvYmUgdW5sZXNzIGl0IGNhbiBpbnN0YW50aWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLiBBbmQgYWdhaW4sIG5vLCBzeXprYWxsZXIgKmRvZXNuJ3QqIGdlbmVyYWxseSBoYXZlIGEgZGlyZWN0IHdheSB0byBpbnN0YW50aWF0ZSB0aG9zZSwgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBwc2V1ZG8tZGV2aWNlLlxuXG5CdXQgd2FpdCwgdGhlcmUgaXMgYHN5c2ZzYCEgU3l6a2FsbGVyIGNvdWxkIHBvdGVudGlhbGx5IGJpbmQvdW5iaW5kIGRldmljZXMgdGhyb3VnaCBgc3lzZnNgLCBvciBldmVuIHVzZSBgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyYCBpZiB0aGVyZSdzIGFuIGFwcHJvcHJpYXRlIGludGVyZmFjZS4gSGFuZyBvbiwgbm8sIEknbSBzdHVjayBvbiB0aGlzIGlkZWEsIGlzIHRoZXJlIGBzeXpfZGV2X2NyZWF0ZWA/IE5vLlxuXG5Pa2F5LCBsZXQncyBiYWNrIHVwIGEgYml0LiBJcyBgcWNvbV9zY21gICpyZWFjaGFibGUqPyBJZiBgcWNvbV9zY21faXNfYXZhaWxhYmxlKClgIHJldHVybnMgZmFsc2UsIHRoZW4gYGJhbV9kbXV4X2FsbG9jX2NvaGVyZW50X3J4YCByZXR1cm5zIGAtRVBST0JFX0RFRkVSYC4gVGhpcyB3aWxsIGxlYWQgdG8gdGhlIHByb2JlIGJlaW5nIGRlZmVycmVkIGFuZCBwb3NzaWJseSBuZXZlciBleGVjdXRlZC4gVGhlcmVmb3JlLCBpZiBgcWNvbV9zY21gICpuZXZlciogZ2V0cyBwcm9iZWQsIGBiYW1fZG11eGAgd2lsbCBhbHNvIGZhaWwgdG8gcHJvYmUuXG5cblNvLCBob3cgZG9lcyBgcWNvbV9zY21gIGdldCBwcm9iZWQ/IEl0IG5lZWRzIGBxY29tLHNjbWAgaW4gdGhlIGRldmljZSB0cmVlLiBJZiB3ZSdyZSBydW5uaW5nIHN5emthbGxlciBvbiBhIGdlbmVyaWMgYXJtNjQgVk0sIHRoYXQncyBsaWtlbHkgKm5vdCogcHJlc2VudC4gSW1wb3J0YW50bHksIHN5emthbGxlciBkb2Vzbid0IGRpcmVjdGx5IGZ1enogZGV2aWNlIHRyZWUgcGFyc2luZyBieSBpbmplY3RpbmcgYXJiaXRyYXJ5IG5vZGVzLiBCdXQsIG1heWJlIHN5emthbGxlciAqY291bGQqIHJ1biBvbiBhIGJvYXJkIHRoYXQgKmRvZXMqIGhhdmUgYHFjb20sc2NtYD8gSG1tLCBuby4gU3l6a2FsbGVyJ3MgdHlwaWNhbCB0YXJnZXQgaXMgYHFlbXUtc3lzdGVtLWFhcmNoNjQgLW1hY2hpbmUgdmlydGAuIERvZXMgdGhlIGB2aXJ0YCBtYWNoaW5lIGhhdmUgYHFjb20sc2NtYD8gTm8uXG5cbldhaXQuIERvZXMgc3l6a2FsbGVyIGhhdmUgYSB3YXkgdG8gdGVzdCAqYW55KiBgcWNvbWAgZHJpdmVycz8gT2theSwgbGV0J3MgZm9jdXMgb24gaWYgdGhlcmUgYXJlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIGBxY29tX2JhbV9kbXV4YCBhbmQgZ28gZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMTcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6Mzg6MjYuNzM4NDIzODYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkzNjEzMTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFjb21fYmFtX2RtdXhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiTUFJTlRBSU5FUlM9MjIxMDE9RjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbFxcbk1BSU5UQUlORVJTOjIyMTAyOkY6XFx0ZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcXG5NQUlOVEFJTkVSUy0yMjEwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz02NT1jb25maWcgUUNPTV9CQU1fRE1VWFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTc2LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjc3OlxcdCAgY2FsbGVkIHFjb21fYmFtX2RtdXguXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTc4LVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfTUhJX1dXQU5fTUJJTSkgKz0gbWhpX3d3YW5fbWJpbS5vXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfUUNPTV9CQU1fRE1VWCkgKz0gcWNvbV9iYW1fZG11eC5vXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZS0xNC1vYmotJChDT05GSUdfUlBNU0dfV1dBTl9DVFJMKSArPSBycG1zZ193d2FuX2N0cmwub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTozODoyOC44MzIwNDI0NTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg3ODI2MzUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgcWNvbV9iYW1fZG11eGAgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYSBxdWVzdGlvbiBwb3BzIHVwOiBzeXprYWxsZXIgZG9lc24ndCBoYXZlIHNwZWNpZmljIGRlc2NyaXB0aW9ucyBmb3IgYHFjb21fYmFtX2RtdXhgLiBJbnRlcmVzdGluZywgYnV0IHRoZSBhdXRob3IgaXMgbGlzdGVkIGFzIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAsIHdoaWNoIHN1Z2dlc3RzIHRoaXMgaXMgYSBwYXRjaCBiZWluZyB0ZXN0ZWQgKmJ5KiBzeXprYWxsZXIuIFRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBwYXRoIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBpbnN0cnVjdGlvbnMgaW5kaWNhdGUgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIGludm9sdmVzIHVucmVhY2hhYmxlIHNlY3Rpb25zIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgc3BlY2lmaWNhbGx5IHdoZW4gZW1wbG95aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5TbywgdGhlIGtleSBxdWVzdGlvbiBpczogaXMgYHFjb21fYmFtX2RtdXhgIHJlYWNoYWJsZSBpbiBRRU1VPyBJdCdzIGEgcGxhdGZvcm0gZHJpdmVyLCByaWdodD8gV2hpY2ggbWVhbnMgaXQgdHlwaWNhbGx5IGF0dGFjaGVzIHRvIGRldmljZXMgZGVzY3JpYmVkIGluIHRoZSBEZXZpY2UgVHJlZSBvciBBQ1BJIHRhYmxlcy4gIFVubGVzcyB0aGVyZSdzIGEgbWVjaGFuaXNtIHRvIGluc3RhbnRpYXRlIGBxY29tLHNoaWtyYS1iYW0tZG11eGAgYW5kIGBxY29tLHNjbWAgZnJvbSB1c2VyIHNwYWNlLCBpdCdzIGEgZGVhZCBlbmQuIENhbiBJIGluc3RhbnRpYXRlIHBsYXRmb3JtIGRldmljZXMgZnJvbSB1c2Vyc3BhY2U/IEFoLCB5ZXMsIGlmIGBDT05GSUdfT0ZfT1ZFUkxBWWAgaXMgZW5hYmxlZCwgYW5kIHRoZXJl4oCZcyBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgZm9yIERldmljZSBUcmVlIE92ZXJsYXlzIChsaWtlIGNvbmZpZ2ZzKSwgdGhlbiBpdCdzIHBvc3NpYmxlLiBEb2VzIHN5emthbGxlciBsZXZlcmFnZSBEVCBvdmVybGF5cyBmb3IgdGhpcyBraW5kIG9mIHRlc3Rpbmc/IE5vLCBjdXJyZW50IHN5emthbGxlciBkb2Vzbid0IGhhdmUgdGhhdCBmdW5jdGlvbmFsaXR5LlxuXG5IYW5nIG9uLCB3aGF0IGFib3V0IGBxY29tX3NjbWA/IElmIGBxY29tX3NjbV9pc19hdmFpbGFibGUoKWAgcmV0dXJucyBmYWxzZSwgYGJhbV9kbXV4X2FsbG9jX2NvaGVyZW50X3J4YCByZXR1cm5zIGAtRVBST0JFX0RFRkVSYC4gQ3J1Y2lhbCBwb2ludCEgSWYgYHFjb21fc2NtX2lzX2F2YWlsYWJsZSgpYCBpcyBmYWxzZSwgdGhlcmUncyBubyB3YXkgdG8gcmVhY2ggdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gYHFjb21fc2NtX2lzX2F2YWlsYWJsZSgpYCByZXR1cm4gdHJ1ZSBpbiBRRU1VPyBPbmx5IGlmIGBxY29tX3NjbWAgcHJvYmVzIHN1Y2Nlc3NmdWxseS4gVGltZSB0byBjaGVjayBgcWNvbV9zY21fcHJvYmVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzEyMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTozODozNy43MTAzMDgxMzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTk2NzA2NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWNvbV9zY21fcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjU1OT1ib29sIHFjb21fc2NtX2lzX2F2YWlsYWJsZSh2b2lkKVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI1NjAte1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI1NjE6XFx0LyogUGFpcmVkIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBxY29tX3NjbV9wcm9iZSAqL1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI1NjItXFx0cmV0dXJuICEhc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2X19zY20pO1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjczNT1NT0RVTEVfUEFSTV9ERVNDKGRvd25sb2FkX21vZGUsIFxcXCJkb3dubG9hZCBtb2RlOiBvZmYvMC9OIGZvciBubyBkdW1wIG1vZGUsIGZ1bGwvb24vMS9ZIGZvciBmdWxsIGR1bXAgbW9kZSwgbWluaSBmb3IgbWluaWR1bXAgbW9kZSBhbmQgZnVsbCxtaW5pIGZvciBib3RoIGZ1bGwgYW5kIG0uLi5cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNzM2LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI3Mzc6c3RhdGljIGludCBxY29tX3NjbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI3Mzgte1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9Mjg5NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBxY29tX3NjbV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yOTAwLVxcdH0sXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjkwMTpcXHQucHJvYmUgPSBxY29tX3NjbV9wcm9iZSxcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yOTAyLVxcdC5zaHV0ZG93biA9IHFjb21fc2NtX3NodXRkb3duLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTozODo0MC40Mjk5ODYzNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODMzMjcyNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcWNvbV9zY21fcHJvYmVgIGZvciBIYXJkd2FyZS1JbmRlcGVuZGVudCBPcGVyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBxY29tX3NjbV9wcm9iZWAgZnVuY3Rpb24uIFRoZSBwcmltYXJ5IHF1ZXN0aW9uIG9uIG15IG1pbmQgcmlnaHQgbm93IGlzIHdoZXRoZXIgdGhpcyBkcml2ZXIgaXMgcmlnaWRseSB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIGR1cmluZyBpdHMgcHJvYmluZyBwaGFzZS4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIG9wZXJhdGUgaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdGhlIGNvbXBsZXRlIGhhcmR3YXJlIHNldHVwIG1pZ2h0IG5vdCBiZSBmdWxseSBwcmVzZW50IG9yIGZ1bmN0aW9uYWwg4oCTIHBlcmhhcHMgaW4gYSB2aXJ0dWFsaXplZCBvciBlbXVsYXRlZCBjb250ZXh0LCBvciBkdXJpbmcgZWFybHkgYnJpbmctdXAgYmVmb3JlIHRoZSBmdWxsIHN5c3RlbSBpcyB2YWxpZGF0ZWQuXG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcHJvYmUgZnVuY3Rpb24gcmVsaWVzIG9uIGRpcmVjdCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgb3IgaWYgaXQgaW1wbGVtZW50cyBhIG1vcmUgYWJzdHJhY3Qgb3IgZmFsbGJhY2sgbWVjaGFuaXNtIHRoYXQgbWlnaHQgc3VjY2VlZCBldmVuIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZGV0ZWN0aW9uIGJlaW5nIGZsYXdsZXNzLiBJJ2xsIG5lZWQgdG8gZGlzc2VjdCBpdHMgbG9naWMsIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcyBvbiByZWdpc3RlcnMsIG1lbW9yeSBtYXBzLCBvciBkZXZpY2Utc3BlY2lmaWMgaWRlbnRpZmllcnMgdGhhdCB3b3VsZCBiZSBpbnN1cm1vdW50YWJsZSByb2FkYmxvY2tzIGluIGEgaGFyZHdhcmUtZGVmaWNpZW50IHNjZW5hcmlvLiBVbmRlcnN0YW5kaW5nIHRoZSBlcnJvciBwYXRocyBhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBtaXNzaW5nIG9yIG1pc2NvbmZpZ3VyZWQgaGFyZHdhcmUgd2lsbCBiZSBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQyMiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjM4OjQ2LjI2MzI2MTAyMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjczNyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3Mzc6XFx0c3RhdGljIGludCBxY29tX3NjbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbjI3Mzg6XFx0e1xcbjI3Mzk6XFx0XFx0c3RydWN0IHFjb21fdHptZW1fcG9vbF9jb25maWcgcG9vbF9jb25maWc7XFxuMjc0MDpcXHRcXHRzdHJ1Y3QgcWNvbV9zY20gKnNjbTtcXG4yNzQxOlxcdFxcdGludCBpcnEsIHJldDtcXG4yNzQyOlxcdFxcdGludCBpO1xcbjI3NDM6XFx0XFxuMjc0NDpcXHRcXHRzY20gPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpzY20pLCBHRlBfS0VSTkVMKTtcXG4yNzQ1OlxcdFxcdGlmICghc2NtKVxcbjI3NDY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjc0NzpcXHRcXG4yNzQ4OlxcdFxcdHNjbS1cXHUwMDNlZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4yNzQ5OlxcdFxcdHJldCA9IHFjb21fc2NtX2ZpbmRfZGxvYWRfYWRkcmVzcyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2c2NtLVxcdTAwM2VkbG9hZF9tb2RlX2FkZHIpO1xcbjI3NTA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjc1MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjI3NTI6XFx0XFxuMjc1MzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZzY20tXFx1MDAzZXNjbV9id19sb2NrKTtcXG4yNzU0OlxcdFxcbjI3NTU6XFx0XFx0c2NtLVxcdTAwM2VwYXRoID0gZGV2bV9vZl9pY2NfZ2V0KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbjI3NTY6XFx0XFx0aWYgKElTX0VSUihzY20tXFx1MDAzZXBhdGgpKVxcbjI3NTc6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgUFRSX0VSUihzY20tXFx1MDAzZXBhdGgpLFxcbjI3NTg6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGFjcXVpcmUgaW50ZXJjb25uZWN0IHBhdGhcXFxcblxcXCIpO1xcbjI3NTk6XFx0XFxuMjc2MDpcXHRcXHRzY20tXFx1MDAzZWNvcmVfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJjb3JlXFxcIik7XFxuMjc2MTpcXHRcXHRpZiAoSVNfRVJSKHNjbS1cXHUwMDNlY29yZV9jbGspKVxcbjI3NjI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoc2NtLVxcdTAwM2Vjb3JlX2Nsayk7XFxuMjc2MzpcXHRcXG4yNzY0OlxcdFxcdHNjbS1cXHUwMDNlaWZhY2VfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJpZmFjZVxcXCIpO1xcbjI3NjU6XFx0XFx0aWYgKElTX0VSUihzY20tXFx1MDAzZWlmYWNlX2NsaykpXFxuMjc2NjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihzY20tXFx1MDAzZWlmYWNlX2Nsayk7XFxuMjc2NzpcXHRcXG4yNzY4OlxcdFxcdHNjbS1cXHUwMDNlYnVzX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiYnVzXFxcIik7XFxuMjc2OTpcXHRcXHRpZiAoSVNfRVJSKHNjbS1cXHUwMDNlYnVzX2NsaykpXFxuMjc3MDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihzY20tXFx1MDAzZWJ1c19jbGspO1xcbjI3NzE6XFx0XFxuMjc3MjpcXHRcXHRzY20tXFx1MDAzZXJlc2V0Lm9wcyA9IFxcdTAwMjZxY29tX3NjbV9wYXNfcmVzZXRfb3BzO1xcbjI3NzM6XFx0XFx0c2NtLVxcdTAwM2VyZXNldC5ucl9yZXNldHMgPSAxO1xcbjI3NzQ6XFx0XFx0c2NtLVxcdTAwM2VyZXNldC5vZl9ub2RlID0gcGRldi1cXHUwMDNlZGV2Lm9mX25vZGU7XFxuMjc3NTpcXHRcXHRyZXQgPSBkZXZtX3Jlc2V0X2NvbnRyb2xsZXJfcmVnaXN0ZXIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnNjbS1cXHUwMDNlcmVzZXQpO1xcbjI3NzY6XFx0XFx0aWYgKHJldClcXG4yNzc3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjc3ODpcXHRcXG4yNzc5OlxcdFxcdC8qIHZvdGUgZm9yIG1heCBjbGsgcmF0ZSBmb3IgaGlnaGVzdCBwZXJmb3JtYW5jZSAqL1xcbjI3ODA6XFx0XFx0cmV0ID0gY2xrX3NldF9yYXRlKHNjbS1cXHUwMDNlY29yZV9jbGssIElOVF9NQVgpO1xcbjI3ODE6XFx0XFx0aWYgKHJldClcXG4yNzgyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjc4MzpcXHRcXG4yNzg0OlxcdFxcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9kZXZpY2VfaW5pdChzY20tXFx1MDAzZWRldik7XFxuMjc4NTpcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU5PREVWKVxcbjI3ODY6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoc2NtLVxcdTAwM2VkZXYsIHJldCxcXG4yNzg3OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBzZXR1cCB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbiBmb3IgVFogbWVtXFxcXG5cXFwiKTtcXG4yNzg4OlxcdFxcbjI3ODk6XFx0XFx0cmV0ID0gcWNvbV90em1lbV9lbmFibGUoc2NtLVxcdTAwM2VkZXYpO1xcbjI3OTA6XFx0XFx0aWYgKHJldClcXG4yNzkxOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHNjbS1cXHUwMDNlZGV2LCByZXQsXFxuMjc5MjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gZW5hYmxlIHRoZSBUcnVzdFpvbmUgbWVtb3J5IGFsbG9jYXRvclxcXFxuXFxcIik7XFxuMjc5MzpcXHRcXG4yNzk0OlxcdFxcdG1lbXNldChcXHUwMDI2cG9vbF9jb25maWcsIDAsIHNpemVvZihwb29sX2NvbmZpZykpO1xcbjI3OTU6XFx0XFx0cG9vbF9jb25maWcuaW5pdGlhbF9zaXplID0gMDtcXG4yNzk2OlxcdFxcdHBvb2xfY29uZmlnLnBvbGljeSA9IFFDT01fVFpNRU1fUE9MSUNZX09OX0RFTUFORDtcXG4yNzk3OlxcdFxcdHBvb2xfY29uZmlnLm1heF9zaXplID0gU1pfMjU2SztcXG4yNzk4OlxcdFxcbjI3OTk6XFx0XFx0c2NtLVxcdTAwM2VtZW1wb29sID0gZGV2bV9xY29tX3R6bWVtX3Bvb2xfbmV3KHNjbS1cXHUwMDNlZGV2LCBcXHUwMDI2cG9vbF9jb25maWcpO1xcbjI4MDA6XFx0XFx0aWYgKElTX0VSUihzY20tXFx1MDAzZW1lbXBvb2wpKVxcbjI4MDE6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoc2NtLVxcdTAwM2VkZXYsIFBUUl9FUlIoc2NtLVxcdTAwM2VtZW1wb29sKSxcXG4yODAyOlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBjcmVhdGUgdGhlIFNDTSBtZW1vcnkgcG9vbFxcXFxuXFxcIik7XFxuMjgwMzpcXHRcXG4yODA0OlxcdFxcdHJldCA9IHFjb21fc2NtX3F1ZXJ5X3dhaXRxX2NvdW50KHNjbSk7XFxuMjgwNTpcXHRcXHRzY20tXFx1MDAzZXdxX2NudCA9IHJldCBcXHUwMDNjIDAgPyBRQ09NX1NDTV9ERUZBVUxUX1dBSVRRX0NPVU5UIDogcmV0O1xcbjI4MDY6XFx0XFx0c2NtLVxcdTAwM2V3YWl0cV9jb21wcyA9IGRldm1fa2NhbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzY20tXFx1MDAzZXdxX2NudCwgc2l6ZW9mKCpzY20tXFx1MDAzZXdhaXRxX2NvbXBzKSxcXG4yODA3OlxcdFxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbjI4MDg6XFx0XFx0aWYgKCFzY20tXFx1MDAzZXdhaXRxX2NvbXBzKVxcbjI4MDk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjgxMDpcXHRcXG4yODExOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzY20tXFx1MDAzZXdxX2NudDsgaSsrKVxcbjI4MTI6XFx0XFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZzY20tXFx1MDAzZXdhaXRxX2NvbXBzW2ldKTtcXG4yODEzOlxcdFxcbjI4MTQ6XFx0XFx0aXJxID0gcWNvbV9zY21fZ2V0X3dhaXRxX2lycShzY20pO1xcbjI4MTU6XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuMjgxNjpcXHRcXHRcXHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIDApO1xcbjI4MTc6XFx0XFxuMjgxODpcXHRcXHRpZiAoaXJxIFxcdTAwM2MgMCkge1xcbjI4MTk6XFx0XFx0XFx0aWYgKGlycSAhPSAtRU5YSU8pXFxuMjgyMDpcXHRcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbjI4MjE6XFx0XFx0fSBlbHNlIHtcXG4yODIyOlxcdFxcdFxcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoc2NtLVxcdTAwM2VkZXYsIGlycSwgTlVMTCwgcWNvbV9zY21faXJxX2hhbmRsZXIsXFxuMjgyMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRJUlFGX09ORVNIT1QsIFxcXCJxY29tLXNjbVxcXCIsIHNjbSk7XFxuMjgyNDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4yODI1OlxcdFxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHNjbS1cXHUwMDNlZGV2LCByZXQsXFxuMjgyNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gcmVxdWVzdCBxY29tLXNjbSBpcnFcXFxcblxcXCIpO1xcbjI4Mjc6XFx0XFx0fVxcbjI4Mjg6XFx0XFxuMjgyOTpcXHRcXHQvKlxcbjI4MzA6XFx0XFx0ICogUGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIHFjb21fc2NtX2lzX2F2YWlsYWJsZSgpLlxcbjI4MzE6XFx0XFx0ICpcXG4yODMyOlxcdFxcdCAqIFRoaXMgbWFya3MgdGhlIFNDTSBBUEkgYXMgcmVhZHkgdG8gYWNjZXB0IHVzZXIgY2FsbHMgYW5kIGNhbiBvbmx5XFxuMjgzMzpcXHRcXHQgKiBiZSBjYWxsZWQgYWZ0ZXIgdGhlIFRydXN0Wm9uZSBtZW1vcnkgcG9vbCBpcyBpbml0aWFsaXplZCBhbmQgdGhlXFxuMjgzNDpcXHRcXHQgKiB3YWl0cXVldWUgaW50ZXJydXB0IHJlcXVlc3RlZC5cXG4yODM1OlxcdFxcdCAqL1xcbjI4MzY6XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNl9fc2NtLCBzY20pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTozODo0Ni4yNjM0MDg1MDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU0MDAwNzA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFF1YWxjb21tIFNlY3VyZSBDb21wdXRlIE1vZHVsZSAoU0NNKSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcWNvbV9zY21gIGhlcmUsIGFuZCBpdCdzIHByZXR0eSBjbGVhciBpdCdzIHJlbGlhbnQgb24gYSBmZXcga2V5IGZ1bmN0aW9uczogYHFjb21fdHptZW1fZW5hYmxlYCwgYHFjb21fc2NtX3F1ZXJ5X3dhaXRxX2NvdW50YCwgYW5kIHNvIG9uLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhhdCBgcWNvbV9zY21fcXVlcnlfd2FpdHFfY291bnRgIGZ1bmN0aW9uLiBEaWdnaW5nIGEgYml0IGRlZXBlciwgSSBzZWUgaXQgY2FsbHMgYHFjb21fc2NtX2NhbGxgLiBBaCwgdGhhdCdzIHRoZSBjb3JlLiBJdCdzIG1ha2luZyBTZWN1cmUgTW9uaXRvciBDYWxscyAoU01DcykgZGlyZWN0bHkgdG8gVHJ1c3Rab25lLiBNYWtlcyBzZW5zZTsgdGhhdCdzIHRoZSBleHBlY3RlZCBpbnRlcmZhY2UuXG5cbkhvd2V2ZXIsIGEgcmVkIGZsYWcgaXMgc3RhcnRpbmcgdG8gYXBwZWFyLiBXaGF0IGhhcHBlbnMgaWYgVHJ1c3Rab25lIGlzbid0IHByZXNlbnQ/IFRoaW5raW5nIGFib3V0IHNpdHVhdGlvbnMgbGlrZSBhIFFFTVUgZ2VuZXJpYyB2aXJ0dWFsIG1hY2hpbmUsIHdoZXJlIHdlIG1pZ2h0IG5vdCBoYXZlIGEgaGFyZHdhcmUtYmFja2VkIFRydXN0Wm9uZSwgYHFjb21fc2NtX2NhbGxgIGlzIHByb2JhYmx5IGdvaW5nIHRvIGVpdGhlciBmbGF0LW91dCBmYWlsLCBvciB3b3JzZSwgY3Jhc2ggdGhlIHdob2xlIHRoaW5nLiBUaGUgU01DIGNhbGxzIHdpbGwgaGl0IGEgZGVhZCBlbmQsIG9yIHRyeSB0byBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgZG9lc24ndCBleGlzdC4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzLiBTbywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBMZXQncyBkaWcgaW50byBgcWNvbV9zY21fY2FsbGAgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIHRvIGVuc3VyaW5nIHN0YWJpbGl0eSBpbiBlbnZpcm9ubWVudHMgd2l0aG91dCBhIGZ1bGwgVHJ1c3Rab25lIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ1NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjM4OjUyLjgwMzQxNzY4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NzQ2MTU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxY29tX3NjbV9jYWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS1sZWdhY3kuYz0xMTA9c3RhdGljIHZvaWQgX19zY21fbGVnYWN5X2RvKGNvbnN0IHN0cnVjdCBhcm1fc21jY2NfYXJncyAqc21jLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLWxlZ2FjeS5jLTEyOC0gKiBOb3RlIHRoYXQgYW55IGJ1ZmZlcnMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgYWNjZXNzZWQgYnkgdGhlIHNlY3VyZSB3b3JsZFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS1sZWdhY3kuYzoxMjk6ICogbXVzdCBiZSBmbHVzaGVkIGJlZm9yZSBpbnZva2luZyBxY29tX3NjbV9jYWxsIGFuZCBpbnZhbGlkYXRlZCBpbiB0aGUgY2FjaGVcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20tbGVnYWN5LmM6MTMwOiAqIGltbWVkaWF0ZWx5IGFmdGVyIHFjb21fc2NtX2NhbGwgcmV0dXJucy4gQ2FjaGUgbWFpbnRlbmFuY2Ugb24gdGhlIGNvbW1hbmRcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20tbGVnYWN5LmM6MTMxOiAqIGFuZCByZXNwb25zZSBidWZmZXJzIGlzIHRha2VuIGNhcmUgb2YgYnkgcWNvbV9zY21fY2FsbDsgaG93ZXZlciwgY2FsbGVycyBhcmVcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20tbGVnYWN5LmMtMTMyLSAqIHJlc3BvbnNpYmxlIGZvciBhbnkgb3RoZXIgY2FjaGVkIGJ1ZmZlcnMgcGFzc2VkIG92ZXIgdG8gdGhlIHNlY3VyZSB3b3JsZC5cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTIzOD1zdGF0aWMgZW51bSBxY29tX3NjbV9jb252ZW50aW9uIF9fZ2V0X2NvbnZlbnRpb24odm9pZClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTMwNS0vKipcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzozMDY6ICogcWNvbV9zY21fY2FsbCgpIC0gSW52b2tlIGEgc3lzY2FsbCBpbiB0aGUgc2VjdXJlIHdvcmxkXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMzA3LSAqIEBkZXY6XFx0ZGV2aWNlXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zMTMtICovXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MzE0OnN0YXRpYyBpbnQgcWNvbV9zY21fY2FsbChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBxY29tX3NjbV9kZXNjICpkZXNjLFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTMxNS1cXHRcXHRcXHQgc3RydWN0IHFjb21fc2NtX3JlcyAqcmVzKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMzMwLS8qKlxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjMzMTogKiBxY29tX3NjbV9jYWxsX2F0b21pYygpIC0gYXRvbWljIHZhcmlhdGlvbiBvZiBxY29tX3NjbV9jYWxsKClcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zMzItICogQGRldjpcXHRkZXZpY2VcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTMzOC0gKi9cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzozMzk6c3RhdGljIGludCBxY29tX3NjbV9jYWxsX2F0b21pYyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMzQwLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBxY29tX3NjbV9kZXNjICpkZXNjLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MzU1PXN0YXRpYyBib29sIF9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgc3ZjX2lkLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMzgwLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjM4MTpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKGRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTM4Mi1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTM4Nj1zdGF0aWMgaW50IHFjb21fc2NtX3NldF9ib290X2FkZHIodm9pZCAqZW50cnksIGNvbnN0IHU4ICpjcHVfYml0cylcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTQwNS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo0MDY6XFx0cmV0dXJuIHFjb21fc2NtX2NhbGxfYXRvbWljKF9fc2NtID8gX19zY20tXFx1MDAzZWRldiA6IE5VTEwsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy00MDctfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9NDA5PXN0YXRpYyBpbnQgcWNvbV9zY21fc2V0X2Jvb3RfYWRkcl9tYyh2b2lkICplbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNDI3LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjQyODpcXHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNDI5LX1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTQ2OD12b2lkIHFjb21fc2NtX2NwdV9wb3dlcl9kb3duKHUzMiBmbGFncylcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTQ3Ny1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo0Nzg6XFx0cWNvbV9zY21fY2FsbF9hdG9taWMoX19zY20gPyBfX3NjbS1cXHUwMDNlZGV2IDogTlVMTCwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTQ3OS19XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz00ODI9aW50IHFjb21fc2NtX3NldF9yZW1vdGVfc3RhdGUodTMyIHN0YXRlLCB1MzIgaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy00OTQtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6NDk1OlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTQ5Ni1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTUwMT1zdGF0aWMgaW50IHFjb21fc2NtX2Rpc2FibGVfc2RpKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy01MTYtXFx0XFx0cmV0dXJuIHJldDtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo1MTc6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNTE4LVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9NTI0PXN0YXRpYyBpbnQgX19xY29tX3NjbV9zZXRfZGxvYWRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNTM1LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjUzNjpcXHRyZXR1cm4gcWNvbV9zY21fY2FsbF9hdG9taWMoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTUzNy19XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz02MDc9c3RhdGljIGludCBfX3Fjb21fc2NtX3Bhc19pbml0X2ltYWdlKHUzMiBwYXNfaWQsIGRtYV9hZGRyX3QgbWRhdGFfcGh5cyxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTYyOC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo2Mjk6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgcmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy02MzAtXFx0cWNvbV9zY21fYndfZGlzYWJsZSgpO1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9NzQ5PWludCBxY29tX3NjbV9wYXNfbWVtX3NldHVwKHUzMiBwYXNfaWQsIHBoeXNfYWRkcl90IGFkZHIsIHBoeXNfYWRkcl90IHNpemUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy03NzAtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6NzcxOlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTc3Mi1cXHRxY29tX3NjbV9id19kaXNhYmxlKCk7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz03ODE9c3RhdGljIHZvaWQgKl9fcWNvbV9zY21fcGFzX2dldF9yc2NfdGFibGUodTMyIHBhc19pZCwgdm9pZCAqaW5wdXRfcnRfdHptLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtODE1LVxcdCAqL1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjgxNjpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy04MTctXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcmVzLnJlc3VsdFsyXSBcXHUwMDNlIFNaXzFHKSB7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz05NTU9aW50IHFjb21fc2NtX3Bhc19hdXRoX2FuZF9yZXNldCh1MzIgcGFzX2lkKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtOTc0LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjk3NTpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy05NzYtXFx0cWNvbV9zY21fYndfZGlzYWJsZSgpO1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTAzOD1pbnQgcWNvbV9zY21fcGFzX3NodXRkb3duKHUzMiBwYXNfaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMDU3LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEwNTg6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTA1OS1cXHRxY29tX3NjbV9id19kaXNhYmxlKCk7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMDc1PWJvb2wgcWNvbV9zY21fcGFzX3N1cHBvcnRlZCh1MzIgcGFzX2lkKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTA5MC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMDkxOlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEwOTItXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMDk3PXN0YXRpYyBpbnQgX19xY29tX3NjbV9wYXNfbXNzX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCByZXNldClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTExMDktXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTExMDpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTExLVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTEzOD1pbnQgcWNvbV9zY21faW9fcmVhZGwocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgaW50ICp2YWwpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTUwLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjExNTE6XFx0cmV0ID0gcWNvbV9zY21fY2FsbF9hdG9taWMoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTExNTItXFx0aWYgKHJldCBcXHUwMDNlPSAwKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTE1OT1pbnQgcWNvbV9zY21faW9fd3JpdGVsKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGludCB2YWwpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTY5LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjExNzA6XFx0cmV0dXJuIHFjb21fc2NtX2NhbGxfYXRvbWljKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTcxLX1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTExODc9aW50IHFjb21fc2NtX3Jlc3RvcmVfc2VjX2NmZyh1MzIgZGV2aWNlX2lkLCB1MzIgc3BhcmUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTk5LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEyMDA6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTIwMS1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEyMTU9aW50IHFjb21fc2NtX3NldF9ncHVfc21tdV9hcGVydHVyZSh1bnNpZ25lZCBpbnQgY29udGV4dF9iYW5rKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTIyNy1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMjI4OlxcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjI5LX1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEyMzI9aW50IHFjb21fc2NtX2lvbW11X3NlY3VyZV9wdGJsX3NpemUodTMyIHNwYXJlLCBzaXplX3QgKnNpemUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjQzLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEyNDQ6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTI0NS1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEyNTM9aW50IHFjb21fc2NtX2lvbW11X3NlY3VyZV9wdGJsX2luaXQodTY0IGFkZHIsIHUzMiBzaXplLCB1MzIgc3BhcmUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjY2LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEyNjc6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTI2OC1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEyNzc9aW50IHFjb21fc2NtX2lvbW11X3NldF9jcF9wb29sX3NpemUodTMyIHNwYXJlLCB1MzIgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEyODctXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTI4ODpcXHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTI4OS19XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMjkyPWludCBxY29tX3NjbV9tZW1fcHJvdGVjdF92aWRlb192YXIodTMyIGNwX3N0YXJ0LCB1MzIgY3Bfc2l6ZSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEzMDktXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTMxMDpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMzExLVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTMxNj1zdGF0aWMgaW50IF9fcWNvbV9zY21fYXNzaWduX21lbShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBoeXNfYWRkcl90IG1lbV9yZWdpb24sXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMzM3LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEzMzg6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMzM5LVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTQ0NT1pbnQgcWNvbV9zY21fb2NtZW1fbG9jayhlbnVtIHFjb21fc2NtX29jbWVtX2NsaWVudCBpZCwgdTMyIG9mZnNldCwgdTMyIHNpemUsXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDU3LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE0NTg6XFx0cmV0dXJuIHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE0NTktfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTQ3MD1pbnQgcWNvbV9zY21fb2NtZW1fdW5sb2NrKGVudW0gcWNvbV9zY21fb2NtZW1fY2xpZW50IGlkLCB1MzIgb2Zmc2V0LCB1MzIgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE0ODAtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTQ4MTpcXHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTQ4Mi19XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xNTEyPWludCBxY29tX3NjbV9pY2VfaW52YWxpZGF0ZV9rZXkodTMyIGluZGV4KVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTUyMS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNTIyOlxcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNTIzLX1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE1NDc9aW50IHFjb21fc2NtX2ljZV9zZXRfa2V5KHUzMiBpbmRleCwgY29uc3QgdTggKmtleSwgdTMyIGtleV9zaXplLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTU3Mi1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNTczOlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE1NzQtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xNjEwPWludCBxY29tX3NjbV9kZXJpdmVfc3dfc2VjcmV0KGNvbnN0IHU4ICplcGhfa2V5LCBzaXplX3QgZXBoX2tleV9zaXplLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTYzOS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNjQwOlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE2NDEtXFx0aWYgKCFyZXQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xNjYxPWludCBxY29tX3NjbV9nZW5lcmF0ZV9pY2Vfa2V5KHU4ICpsdF9rZXksIHNpemVfdCBsdF9rZXlfc2l6ZSlcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE2NzktXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTY4MDpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNjgxLVxcdGlmICghcmV0KVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTcwMj1pbnQgcWNvbV9zY21fcHJlcGFyZV9pY2Vfa2V5KGNvbnN0IHU4ICpsdF9rZXksIHNpemVfdCBsdF9rZXlfc2l6ZSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE3MzEtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTczMjpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNzMzLVxcdGlmICghcmV0KVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTc1NT1pbnQgcWNvbV9zY21faW1wb3J0X2ljZV9rZXkoY29uc3QgdTggKnJhd19rZXksIHNpemVfdCByYXdfa2V5X3NpemUsXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNzg0LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE3ODU6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTc4Ni1cXHRpZiAoIXJldClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE4MjU9aW50IHFjb21fc2NtX2hkY3BfcmVxKHN0cnVjdCBxY29tX3NjbV9oZGNwX3JlcSAqcmVxLCB1MzIgcmVxX2NudCwgdTMyICpyZXNwKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTg1NC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxODU1OlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE4NTYtXFx0KnJlc3AgPSByZXMucmVzdWx0WzBdO1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTg2ND1pbnQgcWNvbV9zY21faW9tbXVfc2V0X3B0X2Zvcm1hdCh1MzIgc2VjX2lkLCB1MzIgY3R4X251bSwgdTMyIHB0X2ZtdClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE4NzUtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTg3NjpcXHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTg3Ny19XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xODgwPWludCBxY29tX3NjbV9xc21tdTUwMF93YWl0X3NhZmVfdG9nZ2xlKGJvb2wgZW4pXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xODkxLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE4OTI6XFx0cmV0dXJuIHFjb21fc2NtX2NhbGxfYXRvbWljKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xODkzLX1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE5MDg9aW50IHFjb21fc2NtX3NobV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKnNjbV9kZXYpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTIzLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE5MjQ6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChzY21fZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTkyNS1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE5MzY9aW50IHFjb21fc2NtX3NobV9icmlkZ2VfY3JlYXRlKHU2NCBwZm5fYW5kX25zX3Blcm1fZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTU0LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE5NTU6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTk1Ni1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE5NjQ9aW50IHFjb21fc2NtX3NobV9icmlkZ2VfZGVsZXRlKHU2NCBoYW5kbGUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTczLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE5NzQ6XFx0cmV0dXJuIHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5NzUtfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTk3OD1pbnQgcWNvbV9zY21fbG1oX3Byb2ZpbGVfY2hhbmdlKHUzMiBwcm9maWxlX2lkKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTk4Ny1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxOTg4OlxcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTg5LX1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE5OTI9aW50IHFjb21fc2NtX2xtaF9kY3ZzaCh1MzIgcGF5bG9hZF9mbiwgdTMyIHBheWxvYWRfcmVnLCB1MzIgcGF5bG9hZF92YWwsXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yMDIyLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjIwMjM6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjAyNC1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTIwMjk9aW50IHFjb21fc2NtX2dwdV9pbml0X3JlZ3ModTMyIGdwdV9yZXEpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yMDM4LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjIwMzk6XFx0cmV0dXJuIHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTIwNDAtfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjA3ND1zdGF0aWMgaW50IF9fcWNvbV9zY21fcXNlZWNvbV9jYWxsKGNvbnN0IHN0cnVjdCBxY29tX3NjbV9kZXNjICpkZXNjLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjA4NS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyMDg2OlxcdHN0YXR1cyA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgZGVzYywgXFx1MDAyNnNjbV9yZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTIwODctXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yNDA0PWludCBxY29tX3NjbV9xdGVlX2ludm9rZV9zbWMocGh5c19hZGRyX3QgaW5idWYsIHNpemVfdCBpbmJ1Zl9zaXplLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjQyMS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNDIyOlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI0MjMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI0NDc9aW50IHFjb21fc2NtX3F0ZWVfY2FsbGJhY2tfcmVzcG9uc2UocGh5c19hZGRyX3QgYnVmLCBzaXplX3QgYnVmX3NpemUsXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNDYwLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI0NjE6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjQ2Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjU4NT1zdGF0aWMgaW50IHFjb21fc2NtX3F1ZXJ5X3dhaXRxX2NvdW50KHN0cnVjdCBxY29tX3NjbSAqc2NtKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjU5NC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNTk1OlxcdHJldCA9IHFjb21fc2NtX2NhbGxfYXRvbWljKHNjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjU5Ni1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjYwMj1zdGF0aWMgaW50IHFjb21fc2NtX2dldF93YWl0cV9pcnEoc3RydWN0IHFjb21fc2NtICpzY20pXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNjE0LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI2MTU6XFx0cmV0ID0gcWNvbV9zY21fY2FsbF9hdG9taWMoc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNjE2LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjM4OjU0Ljk3MDg4NDU1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODg1MTk4MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEZhaWx1cmUgUG9pbnRzIGluIGBxY29tX3NjbV9wcm9iZWAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgcWNvbV9zY21fcHJvYmVgIGlzIGNhbGxpbmcgYHFjb21fc2NtX3F1ZXJ5X3dhaXRxX2NvdW50YCwgd2hpY2ggaW4gdHVybiBsZWFkcyB0byBgcWNvbV9zY21fY2FsbF9hdG9taWNgLiBBbmQsIGFzIGFuIGV4cGVydCwgSSBrbm93IHRoYXQgYHFjb21fc2NtX2NhbGxfYXRvbWljYCBpcyBtYWtpbmcgYW4gU01DIGNhbGwuIE5vdywgaWYgd2UncmUgcnVubmluZyB0aGlzIG9uIGEgZ2VuZXJpYyBRRU1VIGFybTY0IFZNLCB0aGlzIFNNQyBjYWxsIGlzIGdvaW5nIHRvIGdldCBpbnRlcmVzdGluZy4gUUVNVSBtaWdodCBoYW5kbGUgaXQgKHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYW4gZXJyb3Igb3IgZXZlbiBhIGNyYXNoKSwgb3IgVEYtQSBtaWdodCBiZSBpbiBjb250cm9sLlxuXG5NeSBjb25jZXJuIHdhcyB0aGF0IGEgZmFpbHVyZSBpbiB0aGlzIFNNQyBjYWxsIHdvdWxkIHRyaWNrbGUgdXAgYW5kIGNhdXNlIGBxY29tX3NjbV9wcm9iZWAgdG8gZmFpbC4gQnV0IGhvbGQgb24sIEkgbWlzc2VkIHNvbWV0aGluZyEgYHFjb21fc2NtX3F1ZXJ5X3dhaXRxX2NvdW50YCByZXR1cm5zIGByZXQgXHUwMDNjIDAgPyBRQ09NX1NDTV9ERUZBVUxUX1dBSVRRX0NPVU5UIDogcmV0O2AuIFRoYXQgbWVhbnMgaWYgdGhlIFNNQyBjYWxsIGZhaWxzLCBpdCBzaW1wbHkgdXNlcyBhIGRlZmF1bHQgd2FpdCBxdWV1ZSBjb3VudC4gVGhhdCdzIGEgY2xldmVyIGZhbGxiYWNrIVxuXG5TbywgdGhlIG5leHQgbGluZSBvZiB0aG91Z2h0IGlzIHRoYXQgaXQgY2FsbHMgYHFjb21fc2NtX2dldF93YWl0cV9pcnFgLiBJZiB0aGF0IGZhaWxzLCB0aGVyZSdzIGFub3RoZXIgZmFsbGJhY2sgdG8gYHBsYXRmb3JtX2dldF9pcnFfb3B0aW9uYWxgLiBTbywgYWN0dWFsbHksIGBxY29tX3NjbV9wcm9iZWAgKm1pZ2h0KiBzdGlsbCBzdWNjZWVkIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgU01DIGNhbGxzIGFyZSBmYWlsaW5nLiBUaGF0J3MgZ29vZCB0byBrbm93LiBJdCdzIG1vcmUgcmVzaWxpZW50IHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBub3cuIFdhaXQsIGJlZm9yZSBhbGwgdGhpcyBgcWNvbV9zY21fZmluZF9kbG9hZF9hZGRyZXNzYCBpcyBjYWxsZWQuIExldCdzIHNlZSB3aGF0IHRoYXQgaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjA2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjM5OjAwLjg1NjA4NTg5M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwOTc5OTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxY29tX3NjbV9maW5kX2Rsb2FkX2FkZHJlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjA0MT1FWFBPUlRfU1lNQk9MX0dQTChxY29tX3NjbV9ncHVfaW5pdF9yZWdzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yMDQyLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjIwNDM6c3RhdGljIGludCBxY29tX3NjbV9maW5kX2Rsb2FkX2FkZHJlc3Moc3RydWN0IGRldmljZSAqZGV2LCB1NjQgKmFkZHIpXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjA0NC17XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yNzM3PXN0YXRpYyBpbnQgcWNvbV9zY21fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI3NDgtXFx0c2NtLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjI3NDk6XFx0cmV0ID0gcWNvbV9zY21fZmluZF9kbG9hZF9hZGRyZXNzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZzY20tXFx1MDAzZWRsb2FkX21vZGVfYWRkcik7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjc1MC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6Mzk6MDIuNzY1ODkxMTQ5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzcxNDc4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBxY29tX3NjbV9maW5kX2Rsb2FkX2FkZHJlc3NgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHFjb21fc2NtX2ZpbmRfZGxvYWRfYWRkcmVzc2AuIEkga25vdyB0aGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIFF1YWxjb21tIFNlY3VyZSBFeGVjdXRpb24gRW52aXJvbm1lbnQgKFNFRSkgYW5kIHNwZWNpZmljYWxseSwgdGhlIHByb2Nlc3Mgb2YgbG9jYXRpbmcgdGhlIGRvd25sb2FkIGFkZHJlc3MgZm9yIHNvbWUgY29tcG9uZW50LCBwcm9iYWJseSBmb3Igc2VjdXJlIGJvb3Qgb3IgYSBzeXN0ZW0gdXBkYXRlLiBHaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgbXkgaW1tZWRpYXRlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyBpbnZvbHZlcyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIFNlY3VyZSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgKFNDTSkgb3IgcG90ZW50aWFsbHkgYSBzaW1pbGFyIG1lY2hhbmlzbSB0byBmZXRjaCB0aGlzIGNyaXRpY2FsIGFkZHJlc3MuIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIHNlY3VyZWx5IGRldGVybWluaW5nIHdoZXJlIHRoZSBib290bG9hZGVyIG9yIHNvbWUgb3RoZXIgY3JpdGljYWwgcGllY2Ugb2YgZmlybXdhcmUgcmVzaWRlcywgc28gdGhhdCB0aGUgU0VFIGNhbiBzdWJzZXF1ZW50bHkgbG9hZCBhbmQgZXhlY3V0ZSBpdC4gTXkgZ3Vlc3MgaXMgaXQgaW52b2x2ZXMgc29tZSBoYXJkd2FyZS1sZXZlbCBpbnRlcmFjdGlvbnMg4oCTIHJlYWRpbmcgZnJvbSBwcm90ZWN0ZWQgbWVtb3J5IHJlZ2lvbnMsIHBvc3NpYmx5IHVzaW5nIFNDTSBjb21tYW5kcyB0byBxdWVyeSBzZWN1cmUgcmVnaXN0ZXJzLCBvciBtYXliZSBldmVuIHBlcmZvcm1pbmcgYSBjcnlwdG9ncmFwaGljIHZlcmlmaWNhdGlvbiB0byB2YWxpZGF0ZSB0aGUgYWRkcmVzcy4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgc3BlY2lmaWMgc2VjdXJpdHkgbWVjaGFuaXNtcyBpbiBwbGF5LiBJJ20ga2VlbiB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiB1c2VzIGFueSBzdGFuZGFyZCBvciBjdXN0b20gY29tbXVuaWNhdGlvbiBwcm90b2NvbHMuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSdzIGludGVybmFsIG1lbW9yeS4gSXQncyBhbHNvIHBvc3NpYmxlIHRoYXQgaXQgaW5jb3Jwb3JhdGVzIHNvbWUga2luZCBvZiBmYWxsYmFjayBvciBlcnJvci1oYW5kbGluZyBtZWNoYW5pc20gaW4gY2FzZSB0aGUgcHJpbWFyeSBtZXRob2Qgb2YgYWRkcmVzcyBkaXNjb3ZlcnkgZmFpbHMsIG9yIHRoZSBsb2NhdGlvbiBpcyBjb21wcm9taXNlZC4gTGV0J3Mgc2VlLi4uIEknbGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24ncyBjYWxsIHN0YWNrIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgYm9vdCBzZXF1ZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1NDksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTozOTowNy42NDMwNDE4NjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNDMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNDM6XFx0c3RhdGljIGludCBxY29tX3NjbV9maW5kX2Rsb2FkX2FkZHJlc3Moc3RydWN0IGRldmljZSAqZGV2LCB1NjQgKmFkZHIpXFxuMjA0NDpcXHR7XFxuMjA0NTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnRjc3I7XFxuMjA0NjpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVxcdTAwM2VvZl9ub2RlO1xcbjIwNDc6XFx0XFx0c3RydWN0IHJlc291cmNlIHJlcztcXG4yMDQ4OlxcdFxcdHUzMiBvZmZzZXQ7XFxuMjA0OTpcXHRcXHRpbnQgcmV0O1xcbjIwNTA6XFx0XFxuMjA1MTpcXHRcXHR0Y3NyID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgXFxcInFjb20sZGxvYWQtbW9kZVxcXCIsIDApO1xcbjIwNTI6XFx0XFx0aWYgKCF0Y3NyKVxcbjIwNTM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjA1NDpcXHRcXG4yMDU1OlxcdFxcdHJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UodGNzciwgMCwgXFx1MDAyNnJlcyk7XFxuMjA1NjpcXHRcXHRvZl9ub2RlX3B1dCh0Y3NyKTtcXG4yMDU3OlxcdFxcdGlmIChyZXQpXFxuMjA1ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIwNTk6XFx0XFxuMjA2MDpcXHRcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgXFxcInFjb20sZGxvYWQtbW9kZVxcXCIsIDEsIFxcdTAwMjZvZmZzZXQpO1xcbjIwNjE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjA2MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTozOTowNy42NDMyNTU4NzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMDMyMTUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgRGxvYWQgTW9kZSBhbmQgVFpNZW0gRW5hYmxlbWVudCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gcGlja2luZyB1cCBvbiBpcyB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjb2RlIHJlbGF0ZWQgdG8gdGhlIGBxY29tLGRsb2FkLW1vZGVgIHByb3BlcnR5LiBJIHNlZSB0aGF0IGlmIGl0J3MgKm1pc3NpbmcqLCB0aGUgZnVuY3Rpb24gaXMgcmV0dXJuaW5nIGEgMC4gVGhhdCdzIGludGVyZXN0aW5nLCBiZWNhdXNlIGEgemVybyByZXR1cm4gb2Z0ZW4gaW5kaWNhdGVzIHN1Y2Nlc3MgaW4gdGhpcyBjb250ZXh0LiBJdCBzZWVtcyBsaWtlIHRoZSBhYnNlbmNlIG9mIHRoaXMgcHJvcGVydHkgaXNuJ3QgdHJlYXRlZCBhcyBhbiBlcnJvciBjb25kaXRpb24sIHdoaWNoIGlzIHNvbWV0aGluZyBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuIFRoaXMgbGlrZWx5IG1lYW5zIHNvbWUgZGVmYXVsdCBiZWhhdmlvciBpcyBlbXBsb3llZCB3aGVuIHRoZSBkbG9hZCBtb2RlIGNvbmZpZ3VyYXRpb24gaXMgbm90IHByb3ZpZGVkLlxuXG5Ob3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHFjb21fdHptZW1fZW5hYmxlYC4gSSdtIHdvbmRlcmluZyBob3cgdGhpcyByZWxhdGVzIHRvIHRoZSBgZGxvYWQtbW9kZWAgc2NlbmFyaW8uIElzIGB0em1lbV9lbmFibGVgIGFsc28gaGFuZGxlZCBpbiBhIHdheSB0aGF0IGRvZXNuJ3QgbmVjZXNzYXJpbHkgaW5kaWNhdGUgZmFpbHVyZSBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBhYnNlbnQ/IERvZXMgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2Ygb25lIHByb3BlcnR5IGFmZmVjdCB0aGUgb3RoZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXNlIHR3byBtZWNoYW5pc21zIGFyZSBsaW5rZWQgb3IgaW5kZXBlbmRlbnQuIEtub3dpbmcgaG93IHRoZSBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKSBtZW1vcnkgZW5hYmxlbWVudCBpbnRlcmFjdHMgd2l0aCBkbG9hZCBtb2RlIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IsIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI2MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6Mzk6MTEuNTczNTc5NzQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg1MTM4MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFjb21fdHptZW1fZW5hYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI3Mzc9c3RhdGljIGludCBxY29tX3NjbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjc4OC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNzg5OlxcdHJldCA9IHFjb21fdHptZW1fZW5hYmxlKHNjbS1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNzkwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jPTUwOD1FWFBPUlRfU1lNQk9MX0dQTChxY29tX3R6bWVtX3RvX3BoeXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtNTA5LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM6NTEwOmludCBxY29tX3R6bWVtX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy01MTEte1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy01MTgtfVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM6NTE5OkVYUE9SVF9TWU1CT0xfR1BMKHFjb21fdHptZW1fZW5hYmxlKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTUyMC1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmg9OT1zdHJ1Y3QgZGV2aWNlO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmgtMTAtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uaDoxMTppbnQgcWNvbV90em1lbV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5oLTEyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTozOToxMy42NTg3MjIyMzlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI1NzY3MzE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBxY29tX3R6bWVtX2VuYWJsZWA6XG5cbioqRGVlcCBEaXZlIGludG8gYHFjb21fdHptZW1fZW5hYmxlYCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHN0YXJ0IGRpc3NlY3RpbmcgYHFjb21fdHptZW1fZW5hYmxlYC4gVGhlIG5hbWUgaXRzZWxmIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBlbmFibGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBUcnVzdFpvbmUgbWVtb3J5LiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGNhbiBhbHJlYWR5IGFudGljaXBhdGUgc29tZSBvZiB0aGUgcG90ZW50aWFsIGNoYWxsZW5nZXMgYW5kIGNvbnNpZGVyYXRpb25zLiBXZSdyZSBsaWtlbHkgdGFsa2luZyBhYm91dDpcblxuKiAgICoqU2VjdXJlIE1lbW9yeSBBbGxvY2F0aW9uOioqIFRoaXMgZnVuY3Rpb24gcHJvYmFibHkgb3JjaGVzdHJhdGVzIHRoZSBhbGxvY2F0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIG1lbW9yeSByZWdpb25zIHRoYXQgYXJlIGFjY2Vzc2libGUgb25seSB0byB0aGUgVHJ1c3Rab25lIChvciBTZWN1cmUgV29ybGQpLiBJdCB3b3VsZCBiZSB1c2VkIHRvIHN0b3JlIHNlY3JldHMsIGtleXMsIG9yIHNlY3VyaXR5LXNlbnNpdGl2ZSBkYXRhLlxuKiAgICoqUGVybWlzc2lvbnMgYW5kIEFjY2VzcyBDb250cm9sOioqIEkgYmV0IHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoTU1VKSBtYXBwaW5ncywgYW5kIGFjY2VzcyBjb250cm9sIHJlZ2lzdGVycyB0byBlbnN1cmUgdGhhdCBvbmx5IGF1dGhvcml6ZWQgY29kZSAocnVubmluZyB3aXRoaW4gdGhlIFNlY3VyZSBXb3JsZCkgY2FuIHJlYWQgZnJvbSBvciB3cml0ZSB0byB0aGUgYWxsb2NhdGVkIG1lbW9yeS5cbiogICAqKlBvdGVudGlhbCBmb3IgUmFjZSBDb25kaXRpb25zOioqIEVuYWJsaW5nIGFuZCBjb25maWd1cmluZyBzZWN1cmUgbWVtb3J5IHJlZ2lvbnMgaXMgYSBjbGFzc2ljIHBsYWNlIHRvIGxvb2sgZm9yIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRoZSBOb3JtYWwgV29ybGQgKGUuZy4sIHRoZSBtYWluIE9TKSBhbmQgdGhlIFNlY3VyZSBXb3JsZC4gQ29uY3VycmVudCBhY2Nlc3MgbWlnaHQgbmVlZCB0byBiZSBoYW5kbGVkIGNhcmVmdWxseS5cbiogICAqKkludGVncmF0aW9uIHdpdGggdGhlIFRydXN0Wm9uZSBBcmNoaXRlY3R1cmU6KiogSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0byBpbnRlcmFjdCB3aXRoIFF1YWxjb21tJ3Mgc3BlY2lmaWMgVHJ1c3Rab25lIGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gdGhlaXIgc2VjdXJlIE9TIG9yIFRydXN0Wm9uZSBkcml2ZXJzIGFuZCBBUElzLiBJIHdpbGwgaW52ZXN0aWdhdGUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBib290IGFuZCBzZWN1cmUgZXhlY3V0aW9uIGZsb3cuXG4qICAgKipFcnJvciBIYW5kbGluZyBhbmQgU2VjdXJpdHk6KiogR29vZCBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCBoZXJlLiBBbnkgZmFpbHVyZXMgaW4gc2VjdXJlIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGNvbmZpZ3VyYXRpb24gY291bGQgY3JlYXRlIHNpZ25pZmljYW50IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGNvZGVzIGFuZCBhbnkgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3JzLlxuKiAgICoqUG9zc2libGUgSW50ZXJhY3Rpb25zOioqIEhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBkZXZpY2UncyBib290IHByb2Nlc3MgYW5kIG90aGVyIHNlY3VyaXR5IGZlYXR1cmVzIChsaWtlIHNlY3VyZSBib290KSBpcyBvZiBncmVhdCBpbnRlcmVzdC5cblxuSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIG15IGFzc3VtcHRpb25zIGhvbGQgdHJ1ZS4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhlIGludGVncml0eSBhbmQgY29uZmlkZW50aWFsaXR5IG9mIHNlY3VyZSBtZW1vcnkgcmVnaW9ucyB3aXRoaW4gdGhlIHRhcmdldCBzeXN0ZW0uIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDI1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6Mzk6MTguOTE2Mzk4MzU0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTEwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTEwOlxcdGludCBxY29tX3R6bWVtX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIDUxMTpcXHR7XFxuIDUxMjpcXHRcXHRpZiAocWNvbV90em1lbV9kZXYpXFxuIDUxMzpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA1MTQ6XFx0XFxuIDUxNTpcXHRcXHRxY29tX3R6bWVtX2RldiA9IGRldjtcXG4gNTE2OlxcdFxcbiA1MTc6XFx0XFx0cmV0dXJuIHFjb21fdHptZW1faW5pdCgpO1xcbiA1MTg6XFx0fVxcbiA1MTk6XFx0RVhQT1JUX1NZTUJPTF9HUEwocWNvbV90em1lbV9lbmFibGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTozOToxOC45MTY0NzAxNDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5ODMwMTk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBJbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIFF1YWxjb21tIFRydXN0Wm9uZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiB0aGUgUXVhbGNvbW0gVHJ1c3Rab25lLiBUaGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgYXJlLCBvZiBjb3Vyc2UsIGZhbWlsaWFyLCBidXQgSSdtIHRoaW5raW5nIGJleW9uZCB0aGUgYmFzaWNzLiBXaGVyZSBkbyB3ZSBiZWdpbiB3aGVuIGRpZ2dpbmcgaW50byBhIHNwZWNpZmljIHZlbmRvcidzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKT9cblxuVGhlIHF1ZXN0aW9uIHRoYXQgaXMgdG9wIG9mIG1pbmQgaXMgaG93IGBxY29tX3R6bWVtX2luaXRgIGlzIGltcGxlbWVudGVkPyBJIGFtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGhvdyBtZW1vcnkgcmVnaW9ucyBhcmUgYWxsb2NhdGVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgVHJ1c3Rab25lLiBBcmUgd2UgZGVhbGluZyB3aXRoIHN0YXRpYyBhbGxvY2F0aW9ucywgZHluYW1pYyBhbGxvY2F0aW9ucywgb3Igc29tZSBoeWJyaWQgYXBwcm9hY2g/IFdoYXQga2luZCBvZiBtZW1vcnkgYXR0cmlidXRlcyAoZS5nLiwgU2VjdXJlLCBOb24tU2VjdXJlLCBDYWNoZWFiaWxpdHkpIGFyZSBiZWluZyBzZXQ/IFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gb3JjaGVzdHJhdGVzIHRoZSBpbml0aWFsIHNldHVwIGlzIGNyaXRpY2FsIHRvIG1hcHBpbmcgaG93IHRoZSBUWiBpcyBzdHJ1Y3R1cmVkLiBXaGF0IGFzc3VtcHRpb25zIGlzIHRoZSB2ZW5kb3IgbWFraW5nIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBib290IHByb2Nlc3M/IFRoaXMgaXMgZGVmaW5pdGVseSB0aGUgZnVuY3Rpb24gdG8gZGVsdmUgaW50by5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NzcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjM5OjIyLjQxNDc3NDI5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE0OTQyMjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFjb21fdHptZW1faW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jPTUwPXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socWNvbV90em1lbV9jaHVua3NfbG9jayk7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTUzLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM6NTQ6c3RhdGljIGludCBxY29tX3R6bWVtX2luaXQodm9pZClcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTU1LXtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtNTgtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYzo1OTpzdGF0aWMgaW50IHFjb21fdHptZW1faW5pdF9hcmVhKHN0cnVjdCBxY29tX3R6bWVtX2FyZWEgKmFyZWEpXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy02MC17XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jPTc5PXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBxY29tX3R6bWVtX2JsYWNrbGlzdFtdID0ge1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy04OC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jOjg5OnN0YXRpYyBpbnQgcWNvbV90em1lbV9pbml0KHZvaWQpXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy05MC17XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jPTE2NT1FWFBPUlRfU1lNQk9MX0dQTChxY29tX3R6bWVtX3NobV9icmlkZ2VfZGVsZXRlKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTE2Ni1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jOjE2NzpzdGF0aWMgaW50IHFjb21fdHptZW1faW5pdF9hcmVhKHN0cnVjdCBxY29tX3R6bWVtX2FyZWEgKmFyZWEpXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy0xNjgte1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYz0xOTQ9c3RhdGljIGludCBxY29tX3R6bWVtX3Bvb2xfYWRkX21lbW9yeShzdHJ1Y3QgcWNvbV90em1lbV9wb29sICpwb29sLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy0yMTAtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYzoyMTE6XFx0cmV0ID0gcWNvbV90em1lbV9pbml0X2FyZWEoYXJlYSk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYy0yMTItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fdHptZW0uYz01MTA9aW50IHFjb21fdHptZW1fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtNTE2LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM6NTE3OlxcdHJldHVybiBxY29tX3R6bWVtX2luaXQoKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTUxOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjM5OjI0LjQyOTcyNjM0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc4NTI2Mjc2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gcWNvbV90em1lbV9pbml0KipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHplcm8gaW4gb24gYHFjb21fdHptZW1faW5pdGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4OS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgVHJ1c3Rab25lIG1lbW9yeSBpcyBpbml0aWFsaXplZCBvbiB0aGlzIFF1YWxjb21tIHBsYXRmb3JtLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBsaWtlbHkgZW50cnkgcG9pbnQsIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbWVtb3J5IHJlZ2lvbiBzZXR1cC4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gcmVnaXN0ZXIgbWVtb3J5IHJlZ2lvbnMsIHBlcmhhcHMgc29tZSBzZWN1cml0eSBjb250ZXh0IGluaXRpYWxpemF0aW9uLCBhbmQgcG90ZW50aWFsbHkgc29tZSBkZXZpY2Utc3BlY2lmaWMgaGFyZHdhcmUgc2V0dXAgZm9yIG1lbW9yeSBwcm90ZWN0aW9uLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBwZXJmb3JtZWQsIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzYyNiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjQ1OjAyLjI4MjM1NzM0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODk6XFx0c3RhdGljIGludCBxY29tX3R6bWVtX2luaXQodm9pZClcXG4gIDkwOlxcdHtcXG4gIDkxOlxcdFxcdGNvbnN0IGNoYXIgKmNvbnN0ICpwbGF0Zm9ybTtcXG4gIDkyOlxcdFxcdGludCByZXQ7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdGZvciAocGxhdGZvcm0gPSBxY29tX3R6bWVtX2JsYWNrbGlzdDsgKnBsYXRmb3JtOyBwbGF0Zm9ybSsrKSB7XFxuICA5NTpcXHRcXHRcXHRpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCpwbGF0Zm9ybSkpXFxuICA5NjpcXHRcXHRcXHRcXHRnb3RvIG5vdHN1cHA7XFxuICA5NzpcXHRcXHR9XFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdHJldCA9IHFjb21fc2NtX3NobV9icmlkZ2VfZW5hYmxlKHFjb21fdHptZW1fZGV2KTtcXG4gMTAwOlxcdFxcdGlmIChyZXQgPT0gLUVPUE5PVFNVUFApXFxuIDEwMTpcXHRcXHRcXHRnb3RvIG5vdHN1cHA7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmICghcmV0KVxcbiAxMDQ6XFx0XFx0XFx0cWNvbV90em1lbV91c2luZ19zaG1fYnJpZGdlID0gdHJ1ZTtcXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTA3OlxcdFxcbiAxMDg6XFx0bm90c3VwcDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6NDU6MDIuMjgyNDQ2NjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3NDIwODE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNlY3VyZSBNZW1vcnkgQnJpZGdlIEVuYWJsZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBxY29tX3NjbV9zaG1fYnJpZGdlX2VuYWJsZWAgZnVuY3Rpb24sIGFuZCBpdCdzIGNhbGxpbmcgYHFjb21fc2NtX2NhbGxgLiAgVGhhdCdzIHRoZSBzdGFuZGFyZCBzZWN1cmUgY2FsbCBtZWNoYW5pc20sIHdoaWNoIGlzIGV4cGVjdGVkLiAgQnV0IGhlcmUncyBhIGNydWNpYWwgcG9pbnQ6IElmIGBxY29tX3NjbV9jYWxsYCByZXR1cm5zIGAtRU9QTk9UU1VQUGAsIG1lYW5pbmcgdGhlIFNNQyAoU2VjdXJlIE1vbml0b3IgQ2FsbCkgaXNuJ3Qgc3VwcG9ydGVkLCB0aGUgY29kZSAqZG9lc24ndCogZmFpbCBpbW1lZGlhdGVseS4gSXQganVtcHMgdG8gYG5vdHN1cHBgIGFuZCBqdXN0IHJldHVybnMgMC5cblxuVGhhdCdzIGFuIGltcG9ydGFudCBkZXRhaWwuIEl0IG1lYW5zIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgdHJ1c3RlZCB6b25lIG1lbW9yeSwgcHJlc3VtYWJseSBoYW5kbGVkIGJ5IGBxY29tX3R6bWVtX2luaXRgLCBjYW4gcG90ZW50aWFsbHkgKnN1Y2NlZWQqIGV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBzZWN1cmUgY2FsbHMgYXJlIG5vdCBvcGVyYXRpb25hbC4gVGhpcyBpcyBieSBkZXNpZ24sIG9mIGNvdXJzZSFcblxuQnV0Li4uIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZyBpbiBteSBoZWFkLiBXaGF0IHByZWNpc2VseSAqZG9lcyogYHFjb21fc2NtX3NobV9icmlkZ2VfZW5hYmxlYCByZXR1cm4gaW4gdGhlIHNwZWNpZmljIHNjZW5hcmlvIHdoZXJlIHRoZXJlIGlzICpubyogU01DIHN1cHBvcnQ/IEEgcmV0dXJuIG9mIDAgZnJvbSBgcWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGVgIG1pZ2h0IGFwcGVhciBhcyBhIHN1Y2Nlc3MsIGhvd2V2ZXIsIHRoYXQgbWlnaHQgYmUgbWlzbGVhZGluZyBpZiB0aGUgdW5kZXJseWluZyBTTUMgZnVuY3Rpb25hbGl0eSBpcyBub3QgYXZhaWxhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGVkZ2UgY2FzZSBiZXR0ZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSByYW1pZmljYXRpb25zIG9mIHRoYXQgcmV0dXJuIHZhbHVlLiBUaGlzIGRldGFpbCBjb3VsZCBpbXBhY3QgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBzZWN1cmUgbWVtb3J5IGluIHRoZSBhYnNlbmNlIG9mIGEgcHJvcGVyIFNNQyBpbmZyYXN0cnVjdHVyZSwgYW5kIHRoYXQncyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyByaWdvcm91cyBzY3J1dGlueS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzeXN0ZW0gcmVwb3J0cyBpdHMgYWN0dWFsIGNvbmZpZ3VyYXRpb24gc28gdGhhdCBJIGFtIGFibGUgdG8gY29ycmVjdGx5IGludGVycHJldCBpdHMgcnVudGltZSBiZWhhdmlvdXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTExLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTo0NTowNi45NTY2NTY5MTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzc2MDc5ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTkwMD1FWFBPUlRfU1lNQk9MX0dQTChxY29tX3NjbV9sbWhfZGN2c2hfYXZhaWxhYmxlKTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5MDctICovXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTkwODppbnQgcWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGUoc3RydWN0IGRldmljZSAqc2NtX2RldilcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTA5LXtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5MzMtfVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE5MzQ6RVhQT1JUX1NZTUJPTF9HUEwocWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGUpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5MzUtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaD04NT1zdHJ1Y3QgcWNvbV90em1lbV9wb29sICpxY29tX3NjbV9nZXRfdHptZW1fcG9vbCh2b2lkKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uaDo4NjppbnQgcWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGUoc3RydWN0IGRldmljZSAqc2NtX2Rldik7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmgtODctXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jPTg5PXN0YXRpYyBpbnQgcWNvbV90em1lbV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV90em1lbS5jLTk4LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmM6OTk6XFx0cmV0ID0gcWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGUocWNvbV90em1lbV9kZXYpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3R6bWVtLmMtMTAwLVxcdGlmIChyZXQgPT0gLUVPUE5PVFNVUFApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjQ1OjEwLjAzNDI3MjM3NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzUyMDM1NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgZnVuY3Rpb24sIGFzc3VtaW5nIEknbSBhbHJlYWR5IHdlbGwtdmVyc2VkIGluIHN5c3RlbS1vbi1jaGlwIChTb0MpIGFyY2hpdGVjdHVyZSwgc2hhcmVkIG1lbW9yeSwgYW5kIFF1YWxjb21tJ3MgU0NNIChTZWN1cmUgQ29tbWFuZCBNYW5hZ2VyKSBjb250ZXh0LlxuXG4qKkRlY29uc3RydWN0aW5nIGBxY29tX3NjbV9zaG1fYnJpZGdlX2VuYWJsZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYHFjb21fc2NtX3NobV9icmlkZ2VfZW5hYmxlYC4gR2l2ZW4gdGhlIG5hbWUsIEkgaW1tZWRpYXRlbHkgYW50aWNpcGF0ZSB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyBhIGJyaWRnZSDigJMgbGlrZWx5IGEgaGFyZHdhcmUgYnJpZGdlIOKAkyB0aGF0IGZhY2lsaXRhdGVzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgUXVhbGNvbW0gU0NNIGFuZCBTaGFyZWQgTWVtb3J5LiBUaGUgdGVybSBcImJyaWRnZVwiIGlzIGtleSBoZXJlLiBJdCBpbXBsaWVzIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uc3RydWN0IGRlc2lnbmVkIGZvciBzZWN1cmUgY29tbXVuaWNhdGlvbiwgZ2l2ZW4gdGhlIFNDTSdzIHJvbGUuXG5cbk15IGluaXRpYWwgcXVlc3Rpb25zIGFyZTpcblxuKiAgICoqV2hhdCB0eXBlIG9mIFNoYXJlZCBNZW1vcnkgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/KiogSXMgdGhpcyBhIGRlZGljYXRlZCBwaHlzaWNhbCByZWdpb24sIGEgdmlydHVhbCBtZW1vcnkgcmVnaW9uIG1hcHBlZCBpbnRvIG11bHRpcGxlIGNvbnRleHRzLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBUaGUgc3BlY2lmaWMgc2hhcmVkIG1lbW9yeSB0eXBlIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgbWVjaGFuaXNtcy5cbiogICAqKldoYXQgYXJlIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnM/KiogVGhlIFNDTSBpcyBhbG1vc3QgY2VydGFpbmx5IGludm9sdmVkIGJlY2F1c2Ugd2UncmUgY3Jvc3Npbmcgc2VjdXJpdHkgZG9tYWlucy4gVGhpcyBpcyBsaWtlbHkgYWJvdXQgY29udHJvbGxpbmcgYWNjZXNzLCBtZWRpYXRpbmcgY29tbXVuaWNhdGlvbiwgYW5kIGVuZm9yY2luZyBzZWN1cml0eSBwb2xpY2llcy4gSG93IGFyZSB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcyBoYW5kbGVkIHdpdGhpbiB0aGUgbWVtb3J5IHNoYXJlZCBpbiB0aGlzIHNjZW5hcmlvPyBBcmUgdGhlcmUgc3BlY2lmaWMgYWNjZXNzIGNvbnRyb2xzIGluIHBsYWNlPyBXaGF0IHNlY3VyaXR5IGNvbnRleHRzIGFyZSBpbnZvbHZlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgVHJ1c3Rab25lLCBzZWN1cmUgYm9vdCwgb3Igb3RoZXIgc2VjdXJpdHkgZmVhdHVyZXM/XG4qICAgKipXaGF0J3MgdGhlIGhhcmR3YXJlIGNvbnRleHQ/KiogSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIFNvQyBhcmNoaXRlY3R1cmUgYW5kIHRoZSBoYXJkd2FyZSBibG9ja3MgaW52b2x2ZWQuIERvZXMgdGhpcyByZWx5IG9uIGEgc3BlY2lmaWMgaW50ZXJjb25uZWN0LCBhIGhhcmR3YXJlIG1lbW9yeSBjb250cm9sbGVyIGZlYXR1cmUsIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIHRoZXJlIGEgZGVzaWduYXRlZCBoYXJkd2FyZSBicmlkZ2UsIGFuZCBpZiBzbywgd2hhdCdzIGl0cyByb2xlP1xuKiAgICoqV2hhdCdzIHRoZSBlbmFibGluZyBwcm9jZWR1cmU/KiogV2hhdCBzdGVwcyBhcmUgbmVjZXNzYXJ5PyBJcyB0aGlzIGEgc2ltcGxlIHJlZ2lzdGVyIHdyaXRlLCBhIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMsIG9yIGEgY29tcGxleCBpbml0aWFsaXphdGlvbiBwcm9jZXNzPyBEb2VzIGl0IGludm9sdmUgZW5hYmxpbmcgaW50ZXJydXB0cywgY29uZmlndXJpbmcgYWRkcmVzcyBtYXBwaW5nLCBvciBzZXR0aW5nIHVwIG1lbW9yeSBwcm90ZWN0aW9uIHVuaXRzIChNUFVzKT9cbiogICAqKkVycm9yIGhhbmRsaW5nPyoqIEdpdmVuIHRoZSBzZWN1cml0eSBhc3BlY3RzLCBJIGV4cGVjdCByb2J1c3QgZXJyb3IgaGFuZGxpbmcuIEFyZSB0aGVyZSBjaGVja3MgZm9yIGludmFsaWQgcGFyYW1ldGVycywgc2VjdXJpdHkgdmlvbGF0aW9ucywgb3IgaGFyZHdhcmUgZmFpbHVyZXM/IFdoYXQgYXJlIHRoZSBmYWlsdXJlIG1vZGVzLCBhbmQgaG93IGFyZSB0aGV5IGhhbmRsZWQ/IElzIHRoaXMgaW50ZXJydXB0LWRyaXZlbiBvciBwb2xsZWQ/IFdoYXQgYXJlIHRoZSBmYWlsdXJlIG1vZGVzIGFuZCByZWNvdmVyeSBwcm9jZWR1cmVzP1xuKiAgICoqV2hpY2ggY29udGV4dHMgZG9lcyB0aGlzIGludm9sdmU/KiogSXMgdGhpcyBydW5uaW5nIHdpdGhpbiB0aGUgVHJ1c3Rab25lLCBvciBpbiB0aGUgbm9ybWFsIHdvcmxkPyBEb2VzIHRoaXMgb3BlcmF0ZSBmcm9tIGJvdGg/IERvZXMgdGhpcyBpbXBhY3Qgb3RoZXIgc3lzdGVtIGRyaXZlcnMgb3Igc2VydmljZXM/XG4qICAgKipXaGF0IGlzIHRoZSBib290LXVwIHNlcXVlbmNlPyoqIERvZXMgdGhpcyBoYXBwZW4gZWFybHkgaW4gdGhlIGJvb3QtdXAsIG9yIGxhdGVyPyBIb3cgZG9lcyB0aGlzIGludGVyYWN0IHdpdGggb3RoZXIgaW5pdGlhbGl6YXRpb24gcHJvY2VkdXJlcz9cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgY29kZSBpdHNlbGYsIHN0YXJ0aW5nIHdpdGggdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLCBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucy4gSSdsbCBiZSBleHBlY3RpbmcgdG8gc2VlIGEgY29tYmluYXRpb24gb2YgaGFyZHdhcmUgYWNjZXNzLCBzZWN1cml0eSBjaGVja3MsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgbGF5IHRoZSBmb3VuZGF0aW9uIGZvciBzZWN1cmUgY29tbXVuaWNhdGlvbiBhY3Jvc3MgYSBzaGFyZWQgbWVtb3J5IGludGVyZmFjZSBvbiBhIFF1YWxjb21tIFNvQy4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAzMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjQ1OjE2LjM4NjMxMDc4NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwOCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkwODpcXHRpbnQgcWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGUoc3RydWN0IGRldmljZSAqc2NtX2RldilcXG4xOTA5OlxcdHtcXG4xOTEwOlxcdFxcdGludCByZXQ7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdHN0cnVjdCBxY29tX3NjbV9kZXNjIGRlc2MgPSB7XFxuMTkxMzpcXHRcXHRcXHQuc3ZjID0gUUNPTV9TQ01fU1ZDX01QLFxcbjE5MTQ6XFx0XFx0XFx0LmNtZCA9IFFDT01fU0NNX01QX1NITV9CUklER0VfRU5BQkxFLFxcbjE5MTU6XFx0XFx0XFx0Lm93bmVyID0gQVJNX1NNQ0NDX09XTkVSX1NJUFxcbjE5MTY6XFx0XFx0fTtcXG4xOTE3OlxcdFxcbjE5MTg6XFx0XFx0c3RydWN0IHFjb21fc2NtX3JlcyByZXM7XFxuMTkxOTpcXHRcXG4xOTIwOlxcdFxcdGlmICghX19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZShzY21fZGV2LCBRQ09NX1NDTV9TVkNfTVAsXFxuMTkyMTpcXHRcXHRcXHRcXHRcXHRcXHQgIFFDT01fU0NNX01QX1NITV9CUklER0VfRU5BQkxFKSlcXG4xOTIyOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xOTIzOlxcdFxcbjE5MjQ6XFx0XFx0cmV0ID0gcWNvbV9zY21fY2FsbChzY21fZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuMTkyNTpcXHRcXG4xOTI2OlxcdFxcdGlmIChyZXQpXFxuMTkyNzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTo0NToxNi4zODY0NTQ5MzRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMDEyNzAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFN5c3RlbSBDYWxsIEF2YWlsYWJpbGl0eSBJc3N1ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGEgc2l0dWF0aW9uIHdoZXJlIGEgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBgX19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZWAsIHNlZW1zIHRvIGJlIHJldHVybmluZyBgLUVPUE5PVFNVUFBgLiBUaGF0J3MgYSBjbGVhciBzaWduYWwgdGhhdCB0aGUgdW5kZXJseWluZyBzZWN1cmUgY2FsbCwgb3IgYXQgbGVhc3QgdGhlIG1lY2hhbmlzbSB0byBjaGVjayBpdCwgaXNuJ3Qgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhhdCBgX19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZWAgZnVuY3Rpb24gaXRzZWxmLiBJdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyAqd2h5KiB3ZSdyZSBoaXR0aW5nIHRoaXMgXCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiIGVycm9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMsIHRoZSBjaGVja3MgaXQgcGVyZm9ybXMsIGFuZCB3aGF0IGNvbmRpdGlvbnMgYXJlIGNhdXNpbmcgaXQgdG8gcmV0dXJuIGZhbHNlLiBJcyBpdCBhIGhhcmR3YXJlIGNhcGFiaWxpdHkgaXNzdWU/IEEgbWlzc2luZyBkcml2ZXI/IENvbmZpZ3VyYXRpb24gZmxhZ3M/IFRoZSBjb2RlIGl0c2VsZiBzaG91bGQgcHJvdmlkZSB0aGUgYW5zd2Vycywgc28gbGV0J3Mgc3RhcnQgdGhlcmUuIFRoaXMgaXMgbGlrZWx5IHRoZSByb290IGNhdXNlIG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA0NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6NDU6MTkuNzE2NTg1MDM2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4NDg2ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MzM5PXN0YXRpYyBpbnQgcWNvbV9zY21fY2FsbF9hdG9taWMoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMzU0LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjM1NTpzdGF0aWMgYm9vbCBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN2Y19pZCxcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zNTYtXFx0XFx0XFx0XFx0XFx0IHUzMiBjbWRfaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz01NTQ9c3RhdGljIHZvaWQgcWNvbV9zY21fc2V0X2Rvd25sb2FkX21vZGUodTMyIGRsb2FkX21vZGUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy01NjAtXFx0XFx0XFx0XFx0ICAgICAgRklFTERfUFJFUChRQ09NX0RMT0FEX01BU0ssIGRsb2FkX21vZGUpKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo1NjE6XFx0fSBlbHNlIGlmIChfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKF9fc2NtLVxcdTAwM2VkZXYsIFFDT01fU0NNX1NWQ19CT09ULFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTU2Mi1cXHRcXHRcXHRcXHRcXHRcXHRRQ09NX1NDTV9CT09UX1NFVF9ETE9BRF9NT0RFKSkge1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTA3NT1ib29sIHFjb21fc2NtX3Bhc19zdXBwb3J0ZWQodTMyIHBhc19pZClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEwODYtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTA4NzpcXHRpZiAoIV9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoX19zY20tXFx1MDAzZWRldiwgUUNPTV9TQ01fU1ZDX1BJTCxcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMDg4LVxcdFxcdFxcdFxcdFxcdCAgUUNPTV9TQ01fUElMX1BBU19JU19TVVBQT1JURUQpKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTE4MD1ib29sIHFjb21fc2NtX3Jlc3RvcmVfc2VjX2NmZ19hdmFpbGFibGUodm9pZClcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTgxLXtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMTgyOlxcdHJldHVybiBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKF9fc2NtLVxcdTAwM2VkZXYsIFFDT01fU0NNX1NWQ19NUCxcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTgzLVxcdFxcdFxcdFxcdFxcdCAgICBRQ09NX1NDTV9NUF9SRVNUT1JFX1NFQ19DRkcpO1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTIwOD1ib29sIHFjb21fc2NtX3NldF9ncHVfc21tdV9hcGVydHVyZV9pc19hdmFpbGFibGUodm9pZClcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjA5LXtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMjEwOlxcdHJldHVybiBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKF9fc2NtLVxcdTAwM2VkZXYsIFFDT01fU0NNX1NWQ19NUCxcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjExLVxcdFxcdFxcdFxcdFxcdCAgICBRQ09NX1NDTV9NUF9DUF9TTU1VX0FQRVJUVVJFX0lEKTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE0Mjk9Ym9vbCBxY29tX3NjbV9vY21lbV9sb2NrX2F2YWlsYWJsZSh2b2lkKVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE0MzAte1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE0MzE6XFx0cmV0dXJuIF9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoX19zY20tXFx1MDAzZWRldiwgUUNPTV9TQ01fU1ZDX09DTUVNLFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE0MzItXFx0XFx0XFx0XFx0XFx0ICAgIFFDT01fU0NNX09DTUVNX0xPQ0tfQ01EKTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE0OTE9Ym9vbCBxY29tX3NjbV9pY2VfYXZhaWxhYmxlKHZvaWQpXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTQ5Mi17XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTQ5MzpcXHRyZXR1cm4gX19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZShfX3NjbS1cXHUwMDNlZGV2LCBRQ09NX1NDTV9TVkNfRVMsXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTQ5NC1cXHRcXHRcXHRcXHRcXHQgICAgUUNPTV9TQ01fRVNfSU5WQUxJREFURV9JQ0VfS0VZKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE0OTU6XFx0XFx0X19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZShfX3NjbS1cXHUwMDNlZGV2LCBRQ09NX1NDTV9TVkNfRVMsXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTQ5Ni1cXHRcXHRcXHRcXHRcXHQgICAgIFFDT01fU0NNX0VTX0NPTkZJR19TRVRfSUNFX0tFWSk7XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xNTgxPWJvb2wgcWNvbV9zY21faGFzX3dyYXBwZWRfa2V5X3N1cHBvcnQodm9pZClcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNTgyLXtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNTgzOlxcdHJldHVybiBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKF9fc2NtLVxcdTAwM2VkZXYsIFFDT01fU0NNX1NWQ19FUyxcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNTg0LVxcdFxcdFxcdFxcdFxcdCAgICBRQ09NX1NDTV9FU19ERVJJVkVfU1dfU0VDUkVUKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE1ODU6XFx0ICAgICAgIF9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoX19zY20tXFx1MDAzZWRldiwgUUNPTV9TQ01fU1ZDX0VTLFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE1ODYtXFx0XFx0XFx0XFx0XFx0ICAgIFFDT01fU0NNX0VTX0dFTkVSQVRFX0lDRV9LRVkpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTU4NzpcXHQgICAgICAgX19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZShfX3NjbS1cXHUwMDNlZGV2LCBRQ09NX1NDTV9TVkNfRVMsXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTU4OC1cXHRcXHRcXHRcXHRcXHQgICAgUUNPTV9TQ01fRVNfUFJFUEFSRV9JQ0VfS0VZKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE1ODk6XFx0ICAgICAgIF9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoX19zY20tXFx1MDAzZWRldiwgUUNPTV9TQ01fU1ZDX0VTLFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE1OTAtXFx0XFx0XFx0XFx0XFx0ICAgIFFDT01fU0NNX0VTX0lNUE9SVF9JQ0VfS0VZKTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE4MDA9Ym9vbCBxY29tX3NjbV9oZGNwX2F2YWlsYWJsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTgwNy1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxODA4OlxcdGF2YWlsID0gX19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZShfX3NjbS1cXHUwMDNlZGV2LCBRQ09NX1NDTV9TVkNfSERDUCxcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xODA5LVxcdFxcdFxcdFxcdFxcdFxcdFFDT01fU0NNX0hEQ1BfSU5WT0tFKTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE4OTY9Ym9vbCBxY29tX3NjbV9sbWhfZGN2c2hfYXZhaWxhYmxlKHZvaWQpXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTg5Ny17XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTg5ODpcXHRyZXR1cm4gX19xY29tX3NjbV9pc19jYWxsX2F2YWlsYWJsZShfX3NjbS1cXHUwMDNlZGV2LCBRQ09NX1NDTV9TVkNfTE1ILCBRQ09NX1NDTV9MTUhfTElNSVRfRENWU0gpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE4OTktfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTkwOD1pbnQgcWNvbV9zY21fc2htX2JyaWRnZV9lbmFibGUoc3RydWN0IGRldmljZSAqc2NtX2RldilcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5MTktXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTkyMDpcXHRpZiAoIV9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoc2NtX2RldiwgUUNPTV9TQ01fU1ZDX01QLFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5MjEtXFx0XFx0XFx0XFx0XFx0ICBRQ09NX1NDTV9NUF9TSE1fQlJJREdFX0VOQUJMRSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjQ1OjIxLjk3NTA3ODcyOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQwMTczMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBRdWFsY29tbSBTQ006XG5cbioqQW5hbHl6aW5nIGBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBmdW5jdGlvbi4gYF9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGVgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBTQ00gKFNlY3VyZSBDb25maWd1cmF0aW9uIE1vZHVsZSkgcHV6emxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgc2VjdXJlIGNhbGwsIGxpa2VseSB0byB0aGUgVHJ1c3Rab25lIG9yIGEgc2ltaWxhciBzZWN1cmUgZW52aXJvbm1lbnQsIGNhbiBiZSBtYWRlLiBUaGlzIHVzdWFsbHkgaW52b2x2ZXMgY2hlY2tpbmcgZm9yIGEgdmFyaWV0eSBvZiBjb25kaXRpb25zLCB0aGluZ3MgbGlrZTpcblxuKiAgICoqU2VjdXJpdHkgQ29udGV4dDoqKiBBbSBJLCB0aGUgY2FsbGVyLCBydW5uaW5nIGluIGEgY29udGV4dCB3aGVyZSBzZWN1cmUgY2FsbHMgYXJlIGV2ZW4gKmFsbG93ZWQqPyBBcmUgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucywgY2FwYWJpbGl0aWVzLCBvciBjb25maWd1cmF0aW9ucyBzZXQ/XG4qICAgKipTQ00gU3RhdGU6KiogSXMgdGhlIFNDTSBpdHNlbGYgaW5pdGlhbGl6ZWQgYW5kIGZ1bmN0aW9uaW5nIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBnbG9iYWwgZXJyb3JzLCBzaHV0ZG93bnMsIG9yIHN0YXRlcyB0aGF0IHdvdWxkIHByZXZlbnQgYSBzZWN1cmUgY2FsbD9cbiogICAqKkNhbGwgSUQgVmFsaWRpdHk6KiogSXMgdGhlIHNwZWNpZmljIGNhbGwgSUQgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgZm9yIGluc3RhbmNlLCBgU0NNX0NBTExfU09NRV9UUlVTVFpPTkVfRlVOQ1RJT05fWGAsIGFjdHVhbGx5IGEgKnZhbGlkKiBvbmUgZm9yIHRoaXMgc3lzdGVtPyBJcyBpdCBzdXBwb3J0ZWQgYnkgdGhlIGluc3RhbGxlZCBUcnVzdFpvbmUgaW1hZ2U/XG4qICAgKipSZXNvdXJjZSBBdmFpbGFiaWxpdHk6KiogQXJlIHRoZSByZXNvdXJjZXMgbmVlZGVkIGZvciB0aGlzIHNwZWNpZmljIHNlY3VyZSBjYWxsLCB0aGluZ3MgbGlrZSBtZW1vcnkgYnVmZmVycywgc2VjdXJlIGludGVycnVwdHMsIGFuZCBvdGhlciBuZWNlc3NhcnkgYml0cywgYWN0dWFsbHkgYXZhaWxhYmxlIGFuZCBpbiBhIHVzYWJsZSBzdGF0ZT9cbiogICAqKlBsYXRmb3JtLVNwZWNpZmljIENvbnN0cmFpbnRzOioqIFRoaXMgaXMgYWx3YXlzIGEgYmlnIG9uZS4gRG9lcyB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBwbGF0Zm9ybSBoYXZlIGFueSB1bmlxdWUgbGltaXRhdGlvbnMgb3IgcXVpcmtzIHRoYXQgd291bGQgbWFrZSB0aGlzIGNhbGwgdW5hdmFpbGFibGU/IFBvd2VyIHN0YXRlLCBjbG9jayBnYXRpbmcsIGFuZCBoYXJkd2FyZSByZXZpc2lvbiBjb3VsZCBhbGwgaW1wYWN0IHRoZSBvdXRjb21lIGhlcmUuXG5cbk15IGdvYWwgaXMgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IG1ha2VzIGl0cyBkZWNpc2lvbi4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlIGNsb3NlbHksIHBheWluZyBhdHRlbnRpb24gdG8gYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBTQ00gbW9kdWxlcywgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzLCBvciBwbGF0Zm9ybS1zcGVjaWZpYyBkcml2ZXJzLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGFuZCBjcml0aWNhbCB0byB0aGUgb3ZlcmFsbCBzZWN1cml0eSBwb3N0dXJlIGFuZCBmdW5jdGlvbiBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjMzMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjQ1OjI2LjIxNTI1MzY1NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU1OlxcdHN0YXRpYyBib29sIF9fcWNvbV9zY21faXNfY2FsbF9hdmFpbGFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgc3ZjX2lkLFxcbiAzNTY6XFx0XFx0XFx0XFx0XFx0XFx0IHUzMiBjbWRfaWQpXFxuIDM1NzpcXHR7XFxuIDM1ODpcXHRcXHRpbnQgcmV0O1xcbiAzNTk6XFx0XFx0c3RydWN0IHFjb21fc2NtX2Rlc2MgZGVzYyA9IHtcXG4gMzYwOlxcdFxcdFxcdC5zdmMgPSBRQ09NX1NDTV9TVkNfSU5GTyxcXG4gMzYxOlxcdFxcdFxcdC5jbWQgPSBRQ09NX1NDTV9JTkZPX0lTX0NBTExfQVZBSUwsXFxuIDM2MjpcXHRcXHRcXHQub3duZXIgPSBBUk1fU01DQ0NfT1dORVJfU0lQLFxcbiAzNjM6XFx0XFx0fTtcXG4gMzY0OlxcdFxcdHN0cnVjdCBxY29tX3NjbV9yZXMgcmVzO1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRcXHRkZXNjLmFyZ2luZm8gPSBRQ09NX1NDTV9BUkdTKDEpO1xcbiAzNjc6XFx0XFx0c3dpdGNoIChfX2dldF9jb252ZW50aW9uKCkpIHtcXG4gMzY4OlxcdFxcdGNhc2UgU01DX0NPTlZFTlRJT05fQVJNXzMyOlxcbiAzNjk6XFx0XFx0Y2FzZSBTTUNfQ09OVkVOVElPTl9BUk1fNjQ6XFxuIDM3MDpcXHRcXHRcXHRkZXNjLmFyZ3NbMF0gPSBTQ01fU01DX0ZOSUQoc3ZjX2lkLCBjbWRfaWQpIHxcXG4gMzcxOlxcdFxcdFxcdFxcdFxcdChBUk1fU01DQ0NfT1dORVJfU0lQIFxcdTAwM2NcXHUwMDNjIEFSTV9TTUNDQ19PV05FUl9TSElGVCk7XFxuIDM3MjpcXHRcXHRcXHRicmVhaztcXG4gMzczOlxcdFxcdGNhc2UgU01DX0NPTlZFTlRJT05fTEVHQUNZOlxcbiAzNzQ6XFx0XFx0XFx0ZGVzYy5hcmdzWzBdID0gU0NNX0xFR0FDWV9GTklEKHN2Y19pZCwgY21kX2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6NDU6MjYuMjE1NDQ1MjQ1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NzkzNzgzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEluaXRpYWxpemF0aW9uIEZsb3cqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBzdGFydHMgd2l0aCBhIGNhbGwgdG8gYHFjb21fc2NtX2NhbGxgLiBJZiAqdGhhdCogZmFpbHMsIHdlJ3JlIGxvb2tpbmcgYXQgYSByZXR1cm4gb2YgYGZhbHNlYCwgd2hpY2ggdGhlbiBjYXVzZXMgYHFjb21fc2NtX3NobV9icmlkZ2VfZW5hYmxlYCB0byBjb3VnaCB1cCBhbiBgLUVPUE5PVFNVUFBgIGVycm9yLiBIb3dldmVyLCBgcWNvbV90em1lbV9pbml0YCBzb21laG93ICpzdGlsbCogbWFuYWdlcyB0byByZXR1cm4gMCwgYW5kIHRoYXQgY2FzY2FkZXMgaW50byBgcWNvbV90em1lbV9lbmFibGVgIGFsc28gcmV0dXJuaW5nIDAuIFRoYXTigJlzIGFscmVhZHkgYSBiaXQgb2RkLCBidXQgbGV0J3Mga2VlcCBnb2luZy5cblxuTm93LCBgcWNvbV9zY21fcHJvYmVgIGtpY2tzIGluIGFuZCB2ZW50dXJlcyBpbnRvIGBxY29tX3NjbV9xdWVyeV93YWl0cV9jb3VudGAuIFRoaXMgaXMgd2hlcmUgaXQgY2FsbHMgYHFjb21fc2NtX2NhbGxfYXRvbWljYCwgYW5kIGlmICp0aGF0KiBmYWlscywgaXQgcmVzb3J0cyB0byB0aGUgYFFDT01fU0NNX0RFRkFVTFRfV0FJVFFfQ09VTlRgLCB3aGljaCBpcyAxLiBGaW5lLCBtYWtlcyBzZW5zZSBhcyBhIGZhbGxiYWNrLiAgVGhlbiwgaXQgYWxsb2NhdGVzIGB3YWl0cV9jb21wc2AuXG5cbk5leHQsIHdlIHNlZSBgcWNvbV9zY21fZ2V0X3dhaXRxX2lycWAgYmVpbmcgY2FsbGVkLCB3aGljaCwgKmFnYWluKiwgY2FsbHMgYHFjb21fc2NtX2NhbGxfYXRvbWljYC4gSWYgKnRoYXQqIGJvbWJzLCBpdCByZXR1cm5zIHRoZSBlcnJvciBjb2RlLiBOb3csIHRoZSBgaXJxYCB2YWx1ZSBiZWNvbWVzIG5lZ2F0aXZlLiBIZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogaXQgZmFsbHMgYmFjayB0byB1c2luZyBgcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAwKWAuIElmICp0aGF0KiBkb2Vzbid0IGZpbmQgYW4gSVJRLCBpdCdsbCByZXR1cm4gYC1FTlhJT2AuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbmFsOiBgaWYgKGlycSBcdTAwM2MgMCkgeyBpZiAoaXJxICE9IC1FTlhJTykgcmV0dXJuIGlycTsgfWAuICBFc3NlbnRpYWxseSwgaWYgdGhlIElSUSBpcyAqbmVnYXRpdmUqIGJ1dCBOT1QgYC1FTlhJT2AsIGl0IHJldHVybnMuIEhvd2V2ZXIsIGlmIHRoZSBJUlEgaXMgYC1FTlhJT2AsICppdCBjb250aW51ZXMhKiAgVGhhdOKAmXMgdGhlIGNydWNpYWwgb2JzZXJ2YXRpb24uXG5cbkJlY2F1c2UgaWYgdGhlIElSUSBpcyBgLUVOWElPYCwgaXQgdGhlbiBzZXRzIGBzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZfX3NjbSwgc2NtKTtgIGFuZCByZXR1cm5zIDAhIFRoaXMgaXMgdGhlIHN1cnByaXNpbmcgcGFydDogYHFjb21fc2NtX3Byb2JlYCBjYW4sIGFuZCAqd2lsbCosIHN1Y2NlZWQgZXZlbiBpZiB0aGVyZSBpcyBhYnNvbHV0ZWx5ICpubyogU01DIHN1cHBvcnQhIFRoaXMgZGlyZWN0bHkgaW1wbGllcyB0aGF0IGBxY29tX3NjbV9pc19hdmFpbGFibGUoKWAgaXMgZ29pbmcgdG8gcmV0dXJuIGB0cnVlYCBldmVuIHdoZW4gaXQgc2hvdWxkbuKAmXQuXG5cbkZpbmFsbHksIGBiYW1fZG11eF9hbGxvY19jb2hlcmVudF9yeGAgaXMgY2FsbGVkLiBJdCB3aWxsIGNhbGwgYHFjb21fc2NtX2Fzc2lnbl9tZW1gLlxuXG5TbywgdGhlIGNyaXRpY2FsIHRha2Vhd2F5IGlzIHRoYXQgdGhlIHByb2JlJ3Mgc3VjY2VzcyBpcyBkZWNvdXBsZWQgZnJvbSB0aGUgYWN0dWFsIGF2YWlsYWJpbGl0eSBvZiBTTUMgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpbiBgYmFtX2RtdXhfYWxsb2NfY29oZXJlbnRfcnhgIGFuZCBgcWNvbV9zY21fYXNzaWduX21lbWAsIGFzIHRoZXkgd2lsbCBsaWtlbHkgYmUgb3BlcmF0aW5nIHVuZGVyIGEgZmFsc2UgYXNzdW1wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxODAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTo0NTozMy42OTQ4MjU2NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyOTEyMTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxY29tX3NjbV9hc3NpZ25fbWVtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEzMTQ9RVhQT1JUX1NZTUJPTF9HUEwocWNvbV9zY21fbWVtX3Byb3RlY3RfdmlkZW9fdmFyKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMzE1LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEzMTY6c3RhdGljIGludCBfX3Fjb21fc2NtX2Fzc2lnbl9tZW0oc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBtZW1fcmVnaW9uLFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEzMTctXFx0XFx0XFx0XFx0IHNpemVfdCBtZW1fc3osIHBoeXNfYWRkcl90IHNyYywgc2l6ZV90IHNyY19zeixcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEzNDMtLyoqXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTM0NDogKiBxY29tX3NjbV9hc3NpZ25fbWVtKCkgLSBNYWtlIGEgc2VjdXJlIGNhbGwgdG8gcmVhc3NpZ24gbWVtb3J5IG93bmVyc2hpcFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEzNDUtICogQG1lbV9hZGRyOiBtZW0gcmVnaW9uIHdob3NlIG93bmVyc2hpcCBuZWVkIHRvIGJlIHJlYXNzaWduZWRcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEzNTQtICovXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTM1NTppbnQgcWNvbV9zY21fYXNzaWduX21lbShwaHlzX2FkZHJfdCBtZW1fYWRkciwgc2l6ZV90IG1lbV9zeixcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMzU2LVxcdFxcdFxcdHU2NCAqc3Jjdm0sXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDEyLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE0MTM6XFx0cmV0ID0gX19xY29tX3NjbV9hc3NpZ25fbWVtKF9fc2NtLVxcdTAwM2VkZXYsIG1lbV90b19tYXBfcGh5cywgbWVtX3RvX21hcF9zeixcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDE0LVxcdFxcdFxcdFxcdCAgICBwdHJfcGh5cywgc3JjX3N6LCBkZXN0X3BoeXMsIGRlc3Rfc3opO1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTQyMy19XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTQyNDpFWFBPUlRfU1lNQk9MX0dQTChxY29tX3NjbV9hc3NpZ25fbWVtKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDI1LVxcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz0zMzU9c3RhdGljIHZvaWQgZmFzdHJwY19mcmVlX21hcChzdHJ1Y3Qga3JlZiAqcmVmKVxcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy0zNDktXFx0XFx0XFx0cGVybS5wZXJtID0gUUNPTV9TQ01fUEVSTV9SV1g7XFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYzozNTA6XFx0XFx0XFx0ZXJyID0gcWNvbV9zY21fYXNzaWduX21lbShtYXAtXFx1MDAzZWRtYV9hZGRyLCBtYXAtXFx1MDAzZWxlbixcXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTM1MS1cXHRcXHRcXHRcXHRcXHUwMDI2c3JjX3Blcm1zLCBcXHUwMDI2cGVybSwgMSk7XFxuLS1cXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jPTgzND1zdGF0aWMgaW50IGZhc3RycGNfbWFwX2F0dGFjaChzdHJ1Y3QgZmFzdHJwY191c2VyICpmbCwgaW50IGZkLFxcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy05MDAtXFx0XFx0bWFwLVxcdTAwM2VhdHRyID0gYXR0cjtcXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjkwMTpcXHRcXHRlcnIgPSBxY29tX3NjbV9hc3NpZ25fbWVtKG1hcC1cXHUwMDNlZG1hX2FkZHIsICh1NjQpbWFwLVxcdTAwM2VsZW4sIFxcdTAwMjZzcmNfcGVybXMsIGRzdF9wZXJtcywgMik7XFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy05MDItXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz0xMzM4PXN0YXRpYyBpbnQgZmFzdHJwY19pbml0X2NyZWF0ZV9zdGF0aWNfcHJvY2VzcyhzdHJ1Y3QgZmFzdHJwY191c2VyICpmbCxcXG4tLVxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTM4My1cXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jOjEzODQ6XFx0XFx0XFx0ZXJyID0gcWNvbV9zY21fYXNzaWduX21lbShmbC1cXHUwMDNlY2N0eC1cXHUwMDNlcmVtb3RlX2hlYXAtXFx1MDAzZWRtYV9hZGRyLFxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTM4NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQodTY0KWZsLVxcdTAwM2VjY3R4LVxcdTAwM2VyZW1vdGVfaGVhcC1cXHUwMDNlc2l6ZSxcXG4tLVxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmMtMTQ0MC1cXHRcXHRkc3RfcGVybXMucGVybSA9IFFDT01fU0NNX1BFUk1fUldYO1xcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmM6MTQ0MTpcXHRcXHRlcnIgPSBxY29tX3NjbV9hc3NpZ25fbWVtKGZsLVxcdTAwM2VjY3R4LVxcdTAwM2VyZW1vdGVfaGVhcC1cXHUwMDNlZG1hX2FkZHIsXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy0xNDQyLVxcdFxcdFxcdFxcdFxcdFxcdCh1NjQpZmwtXFx1MDAzZWNjdHgtXFx1MDAzZXJlbW90ZV9oZWFwLVxcdTAwM2VzaXplLFxcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYz0xOTMwPXN0YXRpYyBpbnQgZmFzdHJwY19yZXFfbW1hcChzdHJ1Y3QgZmFzdHJwY191c2VyICpmbCwgY2hhciBfX3VzZXIgKmFyZ3ApXFxuLS1cXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTIwMDEtXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYzoyMDAyOlxcdFxcdGVyciA9IHFjb21fc2NtX2Fzc2lnbl9tZW0oYnVmLVxcdTAwM2VkbWFfYWRkciwgKHU2NClidWYtXFx1MDAzZXNpemUsXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy0yMDAzLVxcdFxcdFxcdFxcdTAwMjZzcmNfcGVybXMsIGZsLVxcdTAwM2VjY3R4LVxcdTAwM2V2bXBlcm1zLCBmbC1cXHUwMDNlY2N0eC1cXHUwMDNldm1jb3VudCk7XFxuLS1cXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jPTIzNjQ9c3RhdGljIGludCBmYXN0cnBjX3JwbXNnX3Byb2JlKHN0cnVjdCBycG1zZ19kZXZpY2UgKnJwZGV2KVxcbi0tXFxuZHJpdmVycy9taXNjL2Zhc3RycGMuYy0yNDE4LVxcbmRyaXZlcnMvbWlzYy9mYXN0cnBjLmM6MjQxOTpcXHRcXHRcXHRlcnIgPSBxY29tX3NjbV9hc3NpZ25fbWVtKHJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZShcXHUwMDI2cmVzKSwgXFx1MDAyNnNyY19wZXJtcyxcXG5kcml2ZXJzL21pc2MvZmFzdHJwYy5jLTI0MjAtXFx0XFx0XFx0XFx0ICAgIGRhdGEtXFx1MDAzZXZtcGVybXMsIGRhdGEtXFx1MDAzZXZtY291bnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9xbWkuYz0zMj1zdGF0aWMgaW50IGF0aDEwa19xbWlfbWFwX21zYV9wZXJtaXNzaW9uKHN0cnVjdCBhdGgxMGtfcW1pICpxbWksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3FtaS5jLTU1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvcW1pLmM6NTY6XFx0cmV0ID0gcWNvbV9zY21fYXNzaWduX21lbShtZW1faW5mby1cXHUwMDNlYWRkciwgbWVtX2luZm8tXFx1MDAzZXNpemUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9xbWkuYy01Ny1cXHRcXHRcXHRcXHQgIFxcdTAwMjZzcmNfcGVybXMsIGRzdF9wZXJtcywgcGVybV9jb3VudCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3FtaS5jPTY0PXN0YXRpYyBpbnQgYXRoMTBrX3FtaV91bm1hcF9tc2FfcGVybWlzc2lvbihzdHJ1Y3QgYXRoMTBrX3FtaSAqcW1pLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9xbWkuYy03OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3FtaS5jOjgwOlxcdHJldCA9IHFjb21fc2NtX2Fzc2lnbl9tZW0obWVtX2luZm8tXFx1MDAzZWFkZHIsIG1lbV9pbmZvLVxcdTAwM2VzaXplLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvcW1pLmMtODEtXFx0XFx0XFx0XFx0ICBcXHUwMDI2c3JjX3Blcm1zLCBcXHUwMDI2ZHN0X3Blcm1zLCAxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jPTgwMz1zdGF0aWMgaW50IGJhbV9kbXV4X2FsbG9jX2NvaGVyZW50X3J4KHN0cnVjdCBiYW1fZG11eCAqZG11eClcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTgzMS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo4MzI6XFx0cmV0ID0gcWNvbV9zY21fYXNzaWduX21lbShkbXV4LVxcdTAwM2VyeF9idWZfZG1hLCBzaXplLCBcXHUwMDI2c3JjLCBkc3QsIEFSUkFZX1NJWkUoZHN0KSk7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtODMzLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jPTg0ND1zdGF0aWMgdm9pZCBiYW1fZG11eF9mcmVlX2NvaGVyZW50X3J4KHN0cnVjdCBiYW1fZG11eCAqZG11eClcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTg1NS1cXHRpZiAoZG11eC1cXHUwMDNlcnhfYnVmX3Blcm1zKSB7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6ODU2OlxcdFxcdGlmIChxY29tX3NjbV9hc3NpZ25fbWVtKGRtdXgtXFx1MDAzZXJ4X2J1Zl9kbWEsIHNpemUsIFxcdTAwMjZkbXV4LVxcdTAwM2VyeF9idWZfcGVybXMsXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtODU3LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZobG9zLCAxKSkge1xcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYz00NjM9c3RhdGljIGludCBxNnY1X3hmZXJfbWVtX293bmVyc2hpcChzdHJ1Y3QgcTZ2NSAqcXByb2MsIHU2NCAqY3VycmVudF9wZXJtLFxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYy00ODgtXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYzo0ODk6XFx0cmV0dXJuIHFjb21fc2NtX2Fzc2lnbl9tZW0oYWRkciwgQUxJR04oc2l6ZSwgU1pfNEspLFxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmMtNDkwLVxcdFxcdFxcdFxcdCAgIGN1cnJlbnRfcGVybSwgbmV4dCwgcGVybXMpO1xcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9wYXMuYz02NjA9c3RhdGljIGludCBxY29tX3Bhc19hc3NpZ25fbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgcWNvbV9wYXMgKnBhcylcXG4tLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfcGFzLmMtNjk3LVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfcGFzLmM6Njk4OlxcdFxcdHJldCA9IHFjb21fc2NtX2Fzc2lnbl9tZW0ocGFzLVxcdTAwM2VyZWdpb25fYXNzaWduX3BoeXNbb2Zmc2V0XSxcXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X3Bhcy5jLTY5OS1cXHRcXHRcXHRcXHRcXHQgIHBhcy1cXHUwMDNlcmVnaW9uX2Fzc2lnbl9zaXplW29mZnNldF0sXFxuLS1cXG5kcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X3Bhcy5jPTcxMT1zdGF0aWMgdm9pZCBxY29tX3Bhc191bmFzc2lnbl9tZW1vcnlfcmVnaW9uKHN0cnVjdCBxY29tX3BhcyAqcGFzKVxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9wYXMuYy03MjMtXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9wYXMuYzo3MjQ6XFx0XFx0cmV0ID0gcWNvbV9zY21fYXNzaWduX21lbShwYXMtXFx1MDAzZXJlZ2lvbl9hc3NpZ25fcGh5c1tvZmZzZXRdLFxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfcGFzLmMtNzI1LVxcdFxcdFxcdFxcdFxcdCAgcGFzLVxcdTAwM2VyZWdpb25fYXNzaWduX3NpemVbb2Zmc2V0XSxcXG4tLVxcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmM9MTcxPXN0YXRpYyBpbnQgcWNvbV9ybXRmc19tZW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmMtMjcyLVxcdFxcdHJtdGZzX21lbS1cXHUwMDNlcGVybXMgPSBCSVQoUUNPTV9TQ01fVk1JRF9ITE9TKTtcXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jOjI3MzpcXHRcXHRyZXQgPSBxY29tX3NjbV9hc3NpZ25fbWVtKHJtdGZzX21lbS1cXHUwMDNlYWRkciwgcm10ZnNfbWVtLVxcdTAwM2VzaXplLFxcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmMtMjc0LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnJtdGZzX21lbS1cXHUwMDNlcGVybXMsIHBlcm1zLCBudW1fdm1pZHMgKyAxKTtcXG4tLVxcbmRyaXZlcnMvc29jL3Fjb20vcm10ZnNfbWVtLmM9MjkzPXN0YXRpYyB2b2lkIHFjb21fcm10ZnNfbWVtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYy0zMDEtXFxuZHJpdmVycy9zb2MvcWNvbS9ybXRmc19tZW0uYzozMDI6XFx0XFx0cWNvbV9zY21fYXNzaWduX21lbShybXRmc19tZW0tXFx1MDAzZWFkZHIsIHJtdGZzX21lbS1cXHUwMDNlc2l6ZSxcXG5kcml2ZXJzL3NvYy9xY29tL3JtdGZzX21lbS5jLTMwMy1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNnJtdGZzX21lbS1cXHUwMDNlcGVybXMsIFxcdTAwMjZwZXJtLCAxKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oPTEwNz1pbnQgcWNvbV9zY21fbWVtX3Byb3RlY3RfdmlkZW9fdmFyKHUzMiBjcF9zdGFydCwgdTMyIGNwX3NpemUsXFxuaW5jbHVkZS9saW51eC9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmgtMTA4LVxcdFxcdFxcdFxcdCAgIHUzMiBjcF9ub25waXhlbF9zdGFydCwgdTMyIGNwX25vbnBpeGVsX3NpemUpO1xcbmluY2x1ZGUvbGludXgvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5oOjEwOTppbnQgcWNvbV9zY21fYXNzaWduX21lbShwaHlzX2FkZHJfdCBtZW1fYWRkciwgc2l6ZV90IG1lbV9zeiwgdTY0ICpzcmMsXFxuaW5jbHVkZS9saW51eC9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmgtMTEwLVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBxY29tX3NjbV92bXBlcm0gKm5ld3ZtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTo0NTozNS45MjM5NTEzNzRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5MTAwODcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBxY29tX3NjbV9hc3NpZ25fbWVtYCwgcHV0dGluZyBteXNlbGYgaW4gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgcWNvbV9zY21fYXNzaWduX21lbWAqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYHFjb21fc2NtX2Fzc2lnbl9tZW1gLiBGaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBpdCdzICpzdXBwb3NlZCogdG8gZG8uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGFzc2lnbm1lbnQgd2l0aGluIHRoZSBRdWFsY29tbSBTZWN1cmUgQ29tcHV0ZSBNb2R1bGUgKFNDTSkgY29udGV4dC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHNlY3VyZWx5IGFsbG9jYXRpbmcgYW5kL29yIG1hcHBpbmcgbWVtb3J5IHJlZ2lvbnMsIGxpa2VseSBmb3IgdXNlIGJ5IHRydXN0ZWQgYXBwbGljYXRpb25zIG9yIHNlY3VyZSBwcm9jZXNzaW5nIGVudmlyb25tZW50cy4gSXQncyBwcm9iYWJseSBjYWxsZWQgZnJvbSB0aGUgU0NNIHNpZGUsIG9yIG1heWJlIGEgY29udGV4dCB0aGF0IGludGVyYWN0cyB3aXRoIGl0LCB0byBzZXR1cCB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBmb3IgdmFyaW91cyBzZWN1cmUgb3BlcmF0aW9ucy4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgYXNwZWN0czpcblxuKiAgICoqU2VjdXJpdHkgQ29udGV4dDoqKiBUaGlzIGlzIGFuIFNDTSBmdW5jdGlvbiwgc28gaXQncyBjcml0aWNhbCB0byBjb25zaWRlciB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIHJpZ2h0IGF3YXkuIFRoaW5ncyBsaWtlIG1lbW9yeSBwcm90ZWN0aW9uLCBhY2Nlc3MgY29udHJvbCwgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIGluY29ycmVjdCBtZW1vcnkgYm91bmRhcmllcyBhcmUgZ29pbmcgdG8gYmUga2V5IGNvbmNlcm5zIHRvIHdhdGNoIGZvci5cbiogICAqKlBsYXRmb3JtIFNwZWNpZmljczoqKiBRdWFsY29tbSBwbGF0Zm9ybXMgaGF2ZSB0aGVpciBvd24gaW50cmljYWNpZXMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gU28gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udGFpbiBjb2RlIHNwZWNpZmljIHRvIHRoZSBwYXJ0aWN1bGFyIFNvQywgbWVtb3J5IGNvbnRyb2xsZXJzLCBhbmQgc2VjdXJpdHkgZmVhdHVyZXMgaW1wbGVtZW50ZWQgb24gdGhlIHBsYXRmb3JtLiBUaGlzIG1heSBjb250YWluIGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIGRpZmZlcmVudCBoYXJkd2FyZSByZXZpc2lvbnMgb3IgY29uZmlndXJhdGlvbnMsIGFuZCBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGlmIHRoaXMgaXMgaGFuZGxlZCBjb3JyZWN0bHkuXG4qICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGJlIGRvaW5nIHNvbWUgYm9va2tlZXBpbmcgb24gcmVzb3VyY2UgYXZhaWxhYmlsaXR5IGFuZCBjb25zdHJhaW50cywgd2l0aCBjYXJlZnVsIGhhbmRsaW5nIG9mIHBvdGVudGlhbCBhbGxvY2F0aW9uIGZhaWx1cmVzLiBJJ20gYWxzbyByZWFkeSB0byBzZWUgc29tZSBlcnJvciBoYW5kbGluZy5cbiogICAqKkludGVyYWN0aW9uczoqKiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbnRlcmFjdGlvbnMgdGhpcyBmdW5jdGlvbiBtaWdodCBoYXZlIHdpdGggb3RoZXIgU0NNIGNvbXBvbmVudHMsIHN1Y2ggYXMgbWVtb3J5IHByb3RlY3Rpb24gY29udHJvbGxlcnMsIGJvb3Rsb2FkZXJzLCBvciBvdGhlciBzZWN1cml0eSBtb2R1bGVzLiBIb3cgaXQgd29ya3Mgd2l0aCB0aGUgU0NNIGNvbnRleHQgYW5kIGl0cyBhc3NvY2lhdGVkIHNlY3VyaXR5IGZlYXR1cmVzIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwuXG4qICAgKipNZW1vcnkgTWFwcGluZyBEZXRhaWxzOioqIE1lbW9yeSBtYXBwaW5nIGRldGFpbHMgYXJlIGFsd2F5cyBpbXBvcnRhbnQuIFdoYXQgcmVnaW9ucyBhcmUgYmVpbmcgYXNzaWduZWQ/IEFyZSB0aGVyZSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBwaHlzaWNhbCB2cy4gdmlydHVhbCBhZGRyZXNzZXMsIGNhY2hlIGNvaGVyZW5jeSwgb3IgbWVtb3J5IGF0dHJpYnV0ZXM/XG4qICAgKipDb250ZXh0OioqIFdoYXQgY29udGV4dCBkb2VzIHRoaXMgZnVuY3Rpb24gb3BlcmF0ZSBpbj8gSXMgaXQgYW4gaW50ZXJydXB0IGNvbnRleHQsIHByb2Nlc3MgY29udGV4dCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb250ZXh0IHdpbGwgYmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmdW5jdGlvbiBpcyB1c2VkIGFuZCBhbnkgYXNzb2NpYXRlZCBsb2NrcyBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpdCB1c2VzLlxuXG5JJ20gbWVudGFsbHkgZ2VhcmluZyB1cCB0byBsb29rIGZvciBhbGwgdGhlc2UgYXNwZWN0cywgYW5kIG5vdyBJJ2xsIHN0YXJ0IGRpZ2dpbmcgaW4gYW5kIHNlZWluZyB3aGF0IHRoaXMgY29kZSBhY3R1YWxseSBkb2VzLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTM0LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6NDU6NDEuMjE0OTYzNDEyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzU1OlxcdGludCBxY29tX3NjbV9hc3NpZ25fbWVtKHBoeXNfYWRkcl90IG1lbV9hZGRyLCBzaXplX3QgbWVtX3N6LFxcbjEzNTY6XFx0XFx0XFx0XFx0dTY0ICpzcmN2bSxcXG4xMzU3OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBxY29tX3NjbV92bXBlcm0gKm5ld3ZtLFxcbjEzNTg6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGRlc3RfY250KVxcbjEzNTk6XFx0e1xcbjEzNjA6XFx0XFx0c3RydWN0IHFjb21fc2NtX2N1cnJlbnRfcGVybV9pbmZvICpkZXN0dm07XFxuMTM2MTpcXHRcXHRzdHJ1Y3QgcWNvbV9zY21fbWVtX21hcF9pbmZvICptZW1fdG9fbWFwO1xcbjEzNjI6XFx0XFx0cGh5c19hZGRyX3QgbWVtX3RvX21hcF9waHlzO1xcbjEzNjM6XFx0XFx0cGh5c19hZGRyX3QgZGVzdF9waHlzO1xcbjEzNjQ6XFx0XFx0cGh5c19hZGRyX3QgcHRyX3BoeXM7XFxuMTM2NTpcXHRcXHRzaXplX3QgbWVtX3RvX21hcF9zejtcXG4xMzY2OlxcdFxcdHNpemVfdCBkZXN0X3N6O1xcbjEzNjc6XFx0XFx0c2l6ZV90IHNyY19zejtcXG4xMzY4OlxcdFxcdHNpemVfdCBwdHJfc3o7XFxuMTM2OTpcXHRcXHRpbnQgbmV4dF92bTtcXG4xMzcwOlxcdFxcdF9fbGUzMiAqc3JjO1xcbjEzNzE6XFx0XFx0aW50IHJldCwgaSwgYjtcXG4xMzcyOlxcdFxcdHU2NCBzcmN2bV9iaXRzID0gKnNyY3ZtO1xcbjEzNzM6XFx0XFxuMTM3NDpcXHRcXHRzcmNfc3ogPSBod2VpZ2h0NjQoc3Jjdm1fYml0cykgKiBzaXplb2YoKnNyYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjQ1OjQxLjIxNTEwNjI4MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTY5Mzg0MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBBc3NpZ25tZW50IGluIHRoZSBRdWFsY29tbSBTQ00qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gKnFjb21fc2NtX2Fzc2lnbl9tZW0qLi4uIHRoYXQncyByaW5naW5nIGEgYmVsbC4gQWgsIHllcywgaXQgc2VlbXMgSSByZW1lbWJlciB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2UgaGVyZSwgc28gSSB3aWxsIGFuYWx5emUgdGhpcyBpbmZvcm1hdGlvbiB0aG9yb3VnaGx5LCByYXRoZXIgdGhhbiBtYWtlIGFzc3VtcHRpb25zLiAqcWNvbV9zY21fYXNzaWduX21lbSouLi5pdCdzIGRlZmluaXRlbHkgaW52b2x2ZWQgaW4gYXNzaWduaW5nIG1lbW9yeSB0aHJvdWdoIHRoZSBTZWN1cmUgQ2hhbm5lbCBNYW5hZ2VyIChTQ00pLCBhcyB0aGUgbmFtZSB3b3VsZCBzdWdnZXN0LiBBbmQgaWYgSSByZWNhbGwgY29ycmVjdGx5IGZyb20gbXkgcHJldmlvdXMgd29yaywgaXQgd291bGQgc2VlbSB0aGF0IGBxY29tX3NjbV9hc3NpZ25fbWVtYCBjYWxscyBgX19xY29tX3NjbV9hc3NpZ25fbWVtYCBpbnRlcm5hbGx5LiBJdCdzIGEgY29tbW9uIHBhdHRlcm4uIFVzdWFsbHksIHRoYXQga2luZCBvZiBzdHJ1Y3R1cmUgc3VnZ2VzdHMgYSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBvciBwZXJoYXBzIHNvbWUgcHJlLXByb2Nlc3NpbmcgYmVmb3JlIHRoZSBjb3JlIG1lbW9yeSBhc3NpZ25tZW50IHJvdXRpbmUgaXMgZW5nYWdlZC4gSSB3aWxsIG5lZWQgdG8gbG9vayBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDc2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTo0NTo0OS4xODQ0OTIxNjFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMTY6XFx0c3RhdGljIGludCBfX3Fjb21fc2NtX2Fzc2lnbl9tZW0oc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBtZW1fcmVnaW9uLFxcbjEzMTc6XFx0XFx0XFx0XFx0XFx0IHNpemVfdCBtZW1fc3osIHBoeXNfYWRkcl90IHNyYywgc2l6ZV90IHNyY19zeixcXG4xMzE4OlxcdFxcdFxcdFxcdFxcdCBwaHlzX2FkZHJfdCBkZXN0LCBzaXplX3QgZGVzdF9zeilcXG4xMzE5OlxcdHtcXG4xMzIwOlxcdFxcdGludCByZXQ7XFxuMTMyMTpcXHRcXHRzdHJ1Y3QgcWNvbV9zY21fZGVzYyBkZXNjID0ge1xcbjEzMjI6XFx0XFx0XFx0LnN2YyA9IFFDT01fU0NNX1NWQ19NUCxcXG4xMzIzOlxcdFxcdFxcdC5jbWQgPSBRQ09NX1NDTV9NUF9BU1NJR04sXFxuMTMyNDpcXHRcXHRcXHQuYXJnaW5mbyA9IFFDT01fU0NNX0FSR1MoNywgUUNPTV9TQ01fUk8sIFFDT01fU0NNX1ZBTCxcXG4xMzI1OlxcdFxcdFxcdFxcdFxcdFxcdCBRQ09NX1NDTV9STywgUUNPTV9TQ01fVkFMLCBRQ09NX1NDTV9STyxcXG4xMzI2OlxcdFxcdFxcdFxcdFxcdFxcdCBRQ09NX1NDTV9WQUwsIFFDT01fU0NNX1ZBTCksXFxuMTMyNzpcXHRcXHRcXHQuYXJnc1swXSA9IG1lbV9yZWdpb24sXFxuMTMyODpcXHRcXHRcXHQuYXJnc1sxXSA9IG1lbV9zeixcXG4xMzI5OlxcdFxcdFxcdC5hcmdzWzJdID0gc3JjLFxcbjEzMzA6XFx0XFx0XFx0LmFyZ3NbM10gPSBzcmNfc3osXFxuMTMzMTpcXHRcXHRcXHQuYXJnc1s0XSA9IGRlc3QsXFxuMTMzMjpcXHRcXHRcXHQuYXJnc1s1XSA9IGRlc3Rfc3osXFxuMTMzMzpcXHRcXHRcXHQuYXJnc1s2XSA9IDAsXFxuMTMzNDpcXHRcXHRcXHQub3duZXIgPSBBUk1fU01DQ0NfT1dORVJfU0lQLFxcbjEzMzU6XFx0XFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6NDU6NDkuMTg0NjQ3MjYxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxODg3NzQ0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUncyBGYWlsdXJlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIHBvdGVudGlhbCBwb2ludCBvZiBmYWlsdXJlLiBJdCdzIGNhbGxpbmcgYHFjb21fc2NtX2NhbGxgLiBJZiB0aGF0IGZ1bmN0aW9uIGZhaWxzLCB3aGljaCBjb3VsZCBoYXBwZW4gaWYgU01DIGlzbid0IHN1cHBvcnRlZCBvciB0aGUgU2VjdXJlIE1vbml0b3IgcmV0dXJucyBhbiBlcnJvciwgdGhlbiB0aGluZ3MgYXJlIGdvaW5nIHRvIHVucmF2ZWwgcHJldHR5IHF1aWNrbHkuIEkga25vdyB0aGlzIGJlY2F1c2UsIGlmIGBxY29tX3NjbV9jYWxsYCBkb2VzIGZhaWwsIHRoZW4gYHFjb21fc2NtX2Fzc2lnbl9tZW1gIHJldHVybnMgYW4gZXJyb3IuIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhhdCB0aGUgZmFpbHVyZSBvZiBgcWNvbV9zY21fYXNzaWduX21lbWAgZGlyZWN0bHkgY2F1c2VzIGBiYW1fZG11eF9hbGxvY19jb2hlcmVudF9yeGAgdG8gcmV0dXJuIGFuIGVycm9yLCB3aGljaCwgaW4gdHVybiwgY2F1c2VzIGBiYW1fZG11eF9wcm9iZWAgdG8gZmFpbC4gRXNzZW50aWFsbHksIGEgZmFpbGVkIFNDTSBjYWxsIHNpbmtzIHRoZSB3aG9sZSBwcm9iZS4gVGhlIGNvZGUgZXhwbGljaXRseSBzaG93cyB0aGlzIGVycm9yIHBhdGgsIHNvIGl0J3Mgc2ltcGxlIHRvIHJlYXNvbiBhYm91dCB0aGlzLlxuXG5Ob3csIG15IHJlYWwgcXVlc3Rpb24gaXMsIGNhbiBgcWNvbV9zY21fYXNzaWduX21lbWAgYWN0dWFsbHkgc3VjY2VlZCBpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IEkgYW0gY29uY2VybmVkIGhlcmUgYmVjYXVzZSBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIHR5cGljYWwgUUVNVSBhcm02NCBWTSwgYHFjb21fc2NtX2NhbGxgIGlzIGdvaW5nIHRvIG1ha2UgYW4gU01DIGNhbGwuIEknbSB3b25kZXJpbmcgd2hhdCBoYXBwZW5zIHdpdGggU01DIGNhbGxzIHdoZW4gbm8gRUwzIGZpcm13YXJlLCBzdWNoIGFzIFRGLUEsIGlzIHByZXNlbnQuIFRoZW4gSSByZW1lbWJlciB0aGF0IGlmIFFFTVUgaXMgbGF1bmNoZWQgd2l0aCBgLW1hY2hpbmUgdmlydCxzZWN1cmU9b2ZmYCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgdGhlbiBTTUMgaW5zdHJ1Y3Rpb25zIGJlY29tZSBVTkRFRklORUQgYW5kIHdpbGwgZ2VuZXJhdGUgYW4gZXhjZXB0aW9uLCB0aGF0IHRoZSBrZXJuZWwgd2lsbCBsaWtlbHkgaGFuZGxlLiBCdXQsIHdhaXQsIHRoYXQgaXMgaWYgU01DIGlzIGV2ZW4gc3VwcG9ydGVkLiBXZSBzaG91bGQgY2hlY2sgd2hhdCBoYXBwZW5zIGlmIGl0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gYHFjb21fc2NtX2NhbGxgLiBJIHNob3VsZCBnbyBsb29rIGF0IGBxY29tX3NjbV9jYWxsYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg3NDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTo0NTo1Ni4zNzM0MjQ1NTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MDAwNDIzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWNvbV9zY21fY2FsbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20tbGVnYWN5LmM9MTEwPXN0YXRpYyB2b2lkIF9fc2NtX2xlZ2FjeV9kbyhjb25zdCBzdHJ1Y3QgYXJtX3NtY2NjX2FyZ3MgKnNtYyxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS1sZWdhY3kuYy0xMjgtICogTm90ZSB0aGF0IGFueSBidWZmZXJzIHRoYXQgYXJlIGV4cGVjdGVkIHRvIGJlIGFjY2Vzc2VkIGJ5IHRoZSBzZWN1cmUgd29ybGRcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20tbGVnYWN5LmM6MTI5OiAqIG11c3QgYmUgZmx1c2hlZCBiZWZvcmUgaW52b2tpbmcgcWNvbV9zY21fY2FsbCBhbmQgaW52YWxpZGF0ZWQgaW4gdGhlIGNhY2hlXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLWxlZ2FjeS5jOjEzMDogKiBpbW1lZGlhdGVseSBhZnRlciBxY29tX3NjbV9jYWxsIHJldHVybnMuIENhY2hlIG1haW50ZW5hbmNlIG9uIHRoZSBjb21tYW5kXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLWxlZ2FjeS5jOjEzMTogKiBhbmQgcmVzcG9uc2UgYnVmZmVycyBpcyB0YWtlbiBjYXJlIG9mIGJ5IHFjb21fc2NtX2NhbGw7IGhvd2V2ZXIsIGNhbGxlcnMgYXJlXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLWxlZ2FjeS5jLTEzMi0gKiByZXNwb25zaWJsZSBmb3IgYW55IG90aGVyIGNhY2hlZCBidWZmZXJzIHBhc3NlZCBvdmVyIHRvIHRoZSBzZWN1cmUgd29ybGQuXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yMzg9c3RhdGljIGVudW0gcWNvbV9zY21fY29udmVudGlvbiBfX2dldF9jb252ZW50aW9uKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zMDUtLyoqXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MzA2OiAqIHFjb21fc2NtX2NhbGwoKSAtIEludm9rZSBhIHN5c2NhbGwgaW4gdGhlIHNlY3VyZSB3b3JsZFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTMwNy0gKiBAZGV2OlxcdGRldmljZVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMzEzLSAqL1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjMxNDpzdGF0aWMgaW50IHFjb21fc2NtX2NhbGwoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgcWNvbV9zY21fZGVzYyAqZGVzYyxcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zMTUtXFx0XFx0XFx0IHN0cnVjdCBxY29tX3NjbV9yZXMgKnJlcylcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTMzMC0vKipcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzozMzE6ICogcWNvbV9zY21fY2FsbF9hdG9taWMoKSAtIGF0b21pYyB2YXJpYXRpb24gb2YgcWNvbV9zY21fY2FsbCgpXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMzMyLSAqIEBkZXY6XFx0ZGV2aWNlXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zMzgtICovXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MzM5OnN0YXRpYyBpbnQgcWNvbV9zY21fY2FsbF9hdG9taWMoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTM0MC1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgcWNvbV9zY21fZGVzYyAqZGVzYyxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTM1NT1zdGF0aWMgYm9vbCBfX3Fjb21fc2NtX2lzX2NhbGxfYXZhaWxhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN2Y19pZCxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTM4MC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzozODE6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0zODItXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0zODY9c3RhdGljIGludCBxY29tX3NjbV9zZXRfYm9vdF9hZGRyKHZvaWQgKmVudHJ5LCBjb25zdCB1OCAqY3B1X2JpdHMpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy00MDUtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6NDA2OlxcdHJldHVybiBxY29tX3NjbV9jYWxsX2F0b21pYyhfX3NjbSA/IF9fc2NtLVxcdTAwM2VkZXYgOiBOVUxMLCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNDA3LX1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTQwOT1zdGF0aWMgaW50IHFjb21fc2NtX3NldF9ib290X2FkZHJfbWModm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTQyNy1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo0Mjg6XFx0cmV0dXJuIHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTQyOS19XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz00Njg9dm9pZCBxY29tX3NjbV9jcHVfcG93ZXJfZG93bih1MzIgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy00NzctXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6NDc4OlxcdHFjb21fc2NtX2NhbGxfYXRvbWljKF9fc2NtID8gX19zY20tXFx1MDAzZWRldiA6IE5VTEwsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy00NzktfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9NDgyPWludCBxY29tX3NjbV9zZXRfcmVtb3RlX3N0YXRlKHUzMiBzdGF0ZSwgdTMyIGlkKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNDk0LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjQ5NTpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy00OTYtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz01MDE9c3RhdGljIGludCBxY29tX3NjbV9kaXNhYmxlX3NkaSh2b2lkKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNTE2LVxcdFxcdHJldHVybiByZXQ7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6NTE3OlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTUxOC1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTUyND1zdGF0aWMgaW50IF9fcWNvbV9zY21fc2V0X2Rsb2FkX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSlcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTUzNS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo1MzY6XFx0cmV0dXJuIHFjb21fc2NtX2NhbGxfYXRvbWljKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy01MzctfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9NjA3PXN0YXRpYyBpbnQgX19xY29tX3NjbV9wYXNfaW5pdF9pbWFnZSh1MzIgcGFzX2lkLCBkbWFfYWRkcl90IG1kYXRhX3BoeXMsXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy02MjgtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6NjI5OlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIHJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNjMwLVxcdHFjb21fc2NtX2J3X2Rpc2FibGUoKTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTc0OT1pbnQgcWNvbV9zY21fcGFzX21lbV9zZXR1cCh1MzIgcGFzX2lkLCBwaHlzX2FkZHJfdCBhZGRyLCBwaHlzX2FkZHJfdCBzaXplKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtNzcwLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjc3MTpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy03NzItXFx0cWNvbV9zY21fYndfZGlzYWJsZSgpO1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9NzgxPXN0YXRpYyB2b2lkICpfX3Fjb21fc2NtX3Bhc19nZXRfcnNjX3RhYmxlKHUzMiBwYXNfaWQsIHZvaWQgKmlucHV0X3J0X3R6bSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTgxNS1cXHQgKi9cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo4MTY6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtODE3LVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHJlcy5yZXN1bHRbMl0gXFx1MDAzZSBTWl8xRykge1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9OTU1PWludCBxY29tX3NjbV9wYXNfYXV0aF9hbmRfcmVzZXQodTMyIHBhc19pZClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTk3NC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzo5NzU6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtOTc2LVxcdHFjb21fc2NtX2J3X2Rpc2FibGUoKTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEwMzg9aW50IHFjb21fc2NtX3Bhc19zaHV0ZG93bih1MzIgcGFzX2lkKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTA1Ny1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMDU4OlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEwNTktXFx0cWNvbV9zY21fYndfZGlzYWJsZSgpO1xcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTA3NT1ib29sIHFjb21fc2NtX3Bhc19zdXBwb3J0ZWQodTMyIHBhc19pZClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEwOTAtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTA5MTpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMDkyLVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTA5Nz1zdGF0aWMgaW50IF9fcWNvbV9zY21fcGFzX21zc19yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgcmVzZXQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTA5LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjExMTA6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTExMS1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTExMzg9aW50IHFjb21fc2NtX2lvX3JlYWRsKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGludCAqdmFsKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTE1MC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMTUxOlxcdHJldCA9IHFjb21fc2NtX2NhbGxfYXRvbWljKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMTUyLVxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTExNTk9aW50IHFjb21fc2NtX2lvX3dyaXRlbChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBpbnQgdmFsKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTE2OS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMTcwOlxcdHJldHVybiBxY29tX3NjbV9jYWxsX2F0b21pYyhfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTE3MS19XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMTg3PWludCBxY29tX3NjbV9yZXN0b3JlX3NlY19jZmcodTMyIGRldmljZV9pZCwgdTMyIHNwYXJlKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTE5OS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMjAwOlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEyMDEtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMjE1PWludCBxY29tX3NjbV9zZXRfZ3B1X3NtbXVfYXBlcnR1cmUodW5zaWduZWQgaW50IGNvbnRleHRfYmFuaylcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEyMjctXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTIyODpcXHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTIyOS19XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMjMyPWludCBxY29tX3NjbV9pb21tdV9zZWN1cmVfcHRibF9zaXplKHUzMiBzcGFyZSwgc2l6ZV90ICpzaXplKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTI0My1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMjQ0OlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEyNDUtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMjUzPWludCBxY29tX3NjbV9pb21tdV9zZWN1cmVfcHRibF9pbml0KHU2NCBhZGRyLCB1MzIgc2l6ZSwgdTMyIHNwYXJlKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTI2Ni1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMjY3OlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEyNjgtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xMjc3PWludCBxY29tX3NjbV9pb21tdV9zZXRfY3BfcG9vbF9zaXplKHUzMiBzcGFyZSwgdTMyIHNpemUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMjg3LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEyODg6XFx0cmV0dXJuIHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTEyODktfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTI5Mj1pbnQgcWNvbV9zY21fbWVtX3Byb3RlY3RfdmlkZW9fdmFyKHUzMiBjcF9zdGFydCwgdTMyIGNwX3NpemUsXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xMzA5LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjEzMTA6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTMxMS1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTEzMTY9c3RhdGljIGludCBfX3Fjb21fc2NtX2Fzc2lnbl9tZW0oc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBtZW1fcmVnaW9uLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTMzNy1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxMzM4OlxcdHJldCA9IHFjb21fc2NtX2NhbGwoZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTMzOS1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE0NDU9aW50IHFjb21fc2NtX29jbWVtX2xvY2soZW51bSBxY29tX3NjbV9vY21lbV9jbGllbnQgaWQsIHUzMiBvZmZzZXQsIHUzMiBzaXplLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTQ1Ny1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNDU4OlxcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDU5LX1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE0NzA9aW50IHFjb21fc2NtX29jbWVtX3VubG9jayhlbnVtIHFjb21fc2NtX29jbWVtX2NsaWVudCBpZCwgdTMyIG9mZnNldCwgdTMyIHNpemUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNDgwLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE0ODE6XFx0cmV0dXJuIHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE0ODItfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTUxMj1pbnQgcWNvbV9zY21faWNlX2ludmFsaWRhdGVfa2V5KHUzMiBpbmRleClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE1MjEtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTUyMjpcXHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTUyMy19XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xNTQ3PWludCBxY29tX3NjbV9pY2Vfc2V0X2tleSh1MzIgaW5kZXgsIGNvbnN0IHU4ICprZXksIHUzMiBrZXlfc2l6ZSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE1NzItXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTU3MzpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNTc0LVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTYxMD1pbnQgcWNvbV9zY21fZGVyaXZlX3N3X3NlY3JldChjb25zdCB1OCAqZXBoX2tleSwgc2l6ZV90IGVwaF9rZXlfc2l6ZSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE2MzktXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTY0MDpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNjQxLVxcdGlmICghcmV0KVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTY2MT1pbnQgcWNvbV9zY21fZ2VuZXJhdGVfaWNlX2tleSh1OCAqbHRfa2V5LCBzaXplX3QgbHRfa2V5X3NpemUpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNjc5LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE2ODA6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTY4MS1cXHRpZiAoIXJldClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE3MDI9aW50IHFjb21fc2NtX3ByZXBhcmVfaWNlX2tleShjb25zdCB1OCAqbHRfa2V5LCBzaXplX3QgbHRfa2V5X3NpemUsXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xNzMxLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE3MzI6XFx0cmV0ID0gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTczMy1cXHRpZiAoIXJldClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE3NTU9aW50IHFjb21fc2NtX2ltcG9ydF9pY2Vfa2V5KGNvbnN0IHU4ICpyYXdfa2V5LCBzaXplX3QgcmF3X2tleV9zaXplLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTc4NC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxNzg1OlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE3ODYtXFx0aWYgKCFyZXQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xODI1PWludCBxY29tX3NjbV9oZGNwX3JlcShzdHJ1Y3QgcWNvbV9zY21faGRjcF9yZXEgKnJlcSwgdTMyIHJlcV9jbnQsIHUzMiAqcmVzcClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE4NTQtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTg1NTpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xODU2LVxcdCpyZXNwID0gcmVzLnJlc3VsdFswXTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE4NjQ9aW50IHFjb21fc2NtX2lvbW11X3NldF9wdF9mb3JtYXQodTMyIHNlY19pZCwgdTMyIGN0eF9udW0sIHUzMiBwdF9mbXQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xODc1LVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jOjE4NzY6XFx0cmV0dXJuIHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE4NzctfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MTg4MD1pbnQgcWNvbV9zY21fcXNtbXU1MDBfd2FpdF9zYWZlX3RvZ2dsZShib29sIGVuKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTg5MS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxODkyOlxcdHJldHVybiBxY29tX3NjbV9jYWxsX2F0b21pYyhfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTg5My19XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xOTA4PWludCBxY29tX3NjbV9zaG1fYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpzY21fZGV2KVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTkyMy1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxOTI0OlxcdHJldCA9IHFjb21fc2NtX2NhbGwoc2NtX2RldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5MjUtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xOTM2PWludCBxY29tX3NjbV9zaG1fYnJpZGdlX2NyZWF0ZSh1NjQgcGZuX2FuZF9uc19wZXJtX2ZsYWdzLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTk1NC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxOTU1OlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5NTYtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xOTY0PWludCBxY29tX3NjbV9zaG1fYnJpZGdlX2RlbGV0ZSh1NjQgaGFuZGxlKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTk3My1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoxOTc0OlxcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0xOTc1LX1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTE5Nzg9aW50IHFjb21fc2NtX2xtaF9wcm9maWxlX2NoYW5nZSh1MzIgcHJvZmlsZV9pZClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTE5ODctXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MTk4ODpcXHRyZXR1cm4gcWNvbV9zY21fY2FsbChfX3NjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgTlVMTCk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMTk4OS19XFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0xOTkyPWludCBxY29tX3NjbV9sbWhfZGN2c2godTMyIHBheWxvYWRfZm4sIHUzMiBwYXlsb2FkX3JlZywgdTMyIHBheWxvYWRfdmFsLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjAyMi1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyMDIzOlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIE5VTEwpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTIwMjQtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yMDI5PWludCBxY29tX3NjbV9ncHVfaW5pdF9yZWdzKHUzMiBncHVfcmVxKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjAzOC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyMDM5OlxcdHJldHVybiBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBOVUxMKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yMDQwLX1cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTIwNzQ9c3RhdGljIGludCBfX3Fjb21fc2NtX3FzZWVjb21fY2FsbChjb25zdCBzdHJ1Y3QgcWNvbV9zY21fZGVzYyAqZGVzYyxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTIwODUtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjA4NjpcXHRzdGF0dXMgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIGRlc2MsIFxcdTAwMjZzY21fcmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yMDg3LVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM9MjQwND1pbnQgcWNvbV9zY21fcXRlZV9pbnZva2Vfc21jKHBoeXNfYWRkcl90IGluYnVmLCBzaXplX3QgaW5idWZfc2l6ZSxcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI0MjEtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjQyMjpcXHRyZXQgPSBxY29tX3NjbV9jYWxsKF9fc2NtLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXNjLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYy0yNDIzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYz0yNDQ3PWludCBxY29tX3NjbV9xdGVlX2NhbGxiYWNrX3Jlc3BvbnNlKHBoeXNfYWRkcl90IGJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjQ2MC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNDYxOlxcdHJldCA9IHFjb21fc2NtX2NhbGwoX19zY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI0NjItXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI1ODU9c3RhdGljIGludCBxY29tX3NjbV9xdWVyeV93YWl0cV9jb3VudChzdHJ1Y3QgcWNvbV9zY20gKnNjbSlcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI1OTQtXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmM6MjU5NTpcXHRyZXQgPSBxY29tX3NjbV9jYWxsX2F0b21pYyhzY20tXFx1MDAzZWRldiwgXFx1MDAyNmRlc2MsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jLTI1OTYtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jPTI2MDI9c3RhdGljIGludCBxY29tX3NjbV9nZXRfd2FpdHFfaXJxKHN0cnVjdCBxY29tX3NjbSAqc2NtKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjYxNC1cXG5kcml2ZXJzL2Zpcm13YXJlL3Fjb20vcWNvbV9zY20uYzoyNjE1OlxcdHJldCA9IHFjb21fc2NtX2NhbGxfYXRvbWljKHNjbS1cXHUwMDNlZGV2LCBcXHUwMDI2ZGVzYywgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fc2NtLmMtMjYxNi1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTo0NjowMC4wNzM0NzE3MzNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NTE2MjY3Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBgcWNvbV9iYW1fZG11eGAgQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCdzIGZ1enphYmxlLiBUaGUga2V5IGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiByZWFjaCBpdC4gSSBzdGFydGVkIGJ5IHRoaW5raW5nIGFib3V0IGhvdyBgcWNvbV9zY21fY2FsbGAgd29ya3MuIEl0IGNhbiBsZWFkIHRvIGFuIHVuZGVmaW5lZCBpbnN0cnVjdGlvbiBleGNlcHRpb24gaWYgU01DIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHRoZSBrZXJuZWwgaXMgcnVubmluZyBpbiBFTDEsIGJ1dCB0aGF0J3MgY2hlY2tlZCBkdXJpbmcgYm9vdC4gVGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgcWNvbV9zY21fcHJvYmVgIGV2ZW4gKnJ1bnMqLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQncyB0cmlnZ2VyZWQgYnkgdGhlIHByZXNlbmNlIG9mIGEgYHFjb20sc2NtYCBub2RlIGluIHRoZSBkZXZpY2UgdHJlZS4gU3l6a2FsbGVyIGRvZXNuJ3QgZGlyZWN0bHkgaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBzbyB0aGF0J3MgYSBkZWFkIGVuZC5cblxuVGhlbiBpdCBoaXRzIG1lLCB0aGlzIHBhdGNoIGlzICp0ZXN0ZWQqIGJ5IHN5emthbGxlci4gVGhlIGF1dGhvciBpcyBgc3l6LWNsdXN0ZXJgLCBtZWFuaW5nIGl0J3MgYSBwYXRjaCB1bmRlciB0ZXN0LiBJZiBzeXprYWxsZXIgaXMgdGVzdGluZyBpdCwgdGhlbiBpdCAqY2FuKiByZWFjaCB0aGUgY29kZSBwYXRoLiBUaGF0J3MgdGhlIGNydWNpYWwgcG9pbnQuXG5cbkJ1dCAqaG93Kj8gYHFjb21fYmFtX2RtdXhgIGlzIGEgcGxhdGZvcm0gZHJpdmVyLiBTbywgaXQgKm11c3QqIGJlIHJlYWNoYWJsZSBzb21laG93LiBUaGUgcHJvbXB0IGdpdmVzIG1lIHRoZSBgV29ydGhGdXp6aW5nPWZhbHNlYCBsb2dpYyBmb3IgdW5yZWFjaGFibGUgY29kZS4gQnV0LCBzeXprYWxsZXIgKnRlc3RzKiB0aGUgcGF0Y2gsIGFuZCBzeXprYWxsZXIgdGVzdHMgb24gdGhlIHNhbWUgaW5mcmFzdHJ1Y3R1cmUgd2hlcmUgdGhlIGJ1ZyB3YXMgZm91bmQuIElmIHN5emthbGxlciBmb3VuZCBpdCwgaXQgaXMgcmVhY2hhYmxlLlxuXG5UaGVuIEkgY29uc2lkZXIgYSBkaWZmZXJlbnQgc2NlbmFyaW86IE1heWJlIHN5emJvdCBpcyBqdXN0IHRlc3RpbmcgYSBkZXZlbG9wZXIncyBwYXRjaC4gSW4gdGhpcyBjYXNlLCBpZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSwgc3l6Ym90IHdvdWxkIHNpbXBseSByZXBvcnQgXCJPS1wiIHdpdGhvdXQgZnV6emluZyB0aGUgbmV3IGNvZGUuIFNvIHRoYXQgaGVscHMgZGV0ZXJtaW5lIHRoZSBsaWtlbGlob29kIG9mIHJlYWNoYWJpbGl0eS4gV2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgcmVhY2hhYmxlIG9yIG5vdC5cblxuTm93LCBob3cgYWJvdXQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBJcyB0aGVyZSBzb21lIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGludm9sdmVkPyBOby4gSXMgYGJhbV9kbXV4X3Byb2JlYCByZWFjaGFibGUgaW4gUUVNVT8gT25seSBpZiB0aGUgZGV2aWNlIHRyZWUgaGFzIGBxY29tLGJhbS1kbXV4YC4gRG9lcyB0aGUgZGVmYXVsdCBgdmlydGAgbWFjaGluZSBpbiBRRU1VIGhhdmUgdGhhdD8gTm8uIFN5emthbGxlciB0eXBpY2FsbHkgdXNlcyBgdmlydGAuIENvdWxkIGl0IGJlIHJlYWNoYWJsZSB2aWEgYHN5el9kZXZfY3JlYXRlYD8gTm9wZSwgdGhhdCdzIGZvciBgL2Rldi9gIG5vZGVzLiBXYWl0Li4uIGRvZXMgc3l6a2FsbGVyIGhhdmUgYSBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgIGNhbGwgdGhhdCBtaWdodCBkbyBpdD8gSSBzaG91bGQgY2hlY2sgdGhlIHN5emthbGxlciBwc2V1ZG8tc3lzY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjcwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjUxOjI5LjU4OTc0MzI0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE5NTQ0MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9pb21tdWZkL2lvYXMuYz0yODM9aW50IGlvbW11ZmRfaW9hc19jb3B5KHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jLTI5Mi1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jOjI5MzpcXHRpb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YV9pZCh1Y21kLCBjbWQtXFx1MDAzZXNyY19pb2FzX2lkLCBcXHUwMDI2Y21kLVxcdTAwM2VzcmNfaW92YSxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jLTI5NC1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2Y21kLVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg9NzEyPWV4dGVybiBzaXplX3QgaW9tbXVmZF90ZXN0X21lbW9yeV9saW1pdDtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg6NzEzOnZvaWQgaW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmFfaWQoc3RydWN0IGlvbW11ZmRfdWNtZCAqdWNtZCxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmgtNzE0LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBpb2FzX2lkLCB1NjQgKmlvdmEsIHUzMiAqZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvbW11ZmRfcHJpdmF0ZS5oPTcxOT1pbnQgaW9tbXVmZF90ZXN0X2RtYV9idWZfaW9tbXVmZF9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaC03MjEtI2Vsc2VcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg6NzIyOnN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YV9pZChzdHJ1Y3QgaW9tbXVmZF91Y21kICp1Y21kLFxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaC03MjMtXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBpb2FzX2lkLFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM9NTE9c3RhdGljIHZvaWQgbW9ja19kZXZfZGlzYWJsZV9pb3BmKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKTtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTU4LSAqL1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjU5OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoc3RydWN0IGlvX3BhZ2V0YWJsZSAqaW9wdCxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02MC1cXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCAqaW92YSlcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02MS17XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6NjI6XFx0c3RydWN0IHN5el9sYXlvdXQge1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTYzLVxcdFxcdF9fdTMyIG50aF9hcmVhO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtNjUtXFx0fTtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo2NjpcXHRzdHJ1Y3Qgc3l6X2xheW91dCAqc3l6ID0gKHZvaWQgKilpb3ZhO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTY3LVxcdHVuc2lnbmVkIGludCBudGggPSBzeXotXFx1MDAzZW50aF9hcmVhO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtODMtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6ODQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgaW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoc3RydWN0IGlvbW11ZmRfYWNjZXNzICphY2Nlc3MsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtODUtXFx0XFx0XFx0XFx0XFx0XFx0dTY0ICppb3ZhKVxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtOTMtXFx0fVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjk0OlxcdHJldCA9IF9faW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoXFx1MDAyNmFjY2Vzcy1cXHUwMDNlaW9hcy1cXHUwMDNlaW9wdCwgaW92YSk7XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtOTUtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhY2Nlc3MtXFx1MDAzZWlvYXNfbG9jayk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy05OC1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo5OTp2b2lkIGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhX2lkKHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTAwLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBpb2FzX2lkLCB1NjQgKmlvdmEsIHUzMiAqZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy0xMTAtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjExMTpcXHQqaW92YSA9IF9faW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoXFx1MDAyNmlvYXMtXFx1MDAzZWlvcHQsIGlvdmEpO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTExMi1cXHRpb21tdWZkX3B1dF9vYmplY3QodWNtZC1cXHUwMDNlaWN0eCwgXFx1MDAyNmlvYXMtXFx1MDAzZW9iaik7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYz0xNTI5PXN0YXRpYyBpbnQgaW9tbXVmZF90ZXN0X2FjY2Vzc19wYWdlcyhzdHJ1Y3QgaW9tbXVmZF91Y21kICp1Y21kLFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTU1Ny1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBNT0NLX0ZMQUdTX0FDQ0VTU19TWVopXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6MTU1ODpcXHRcXHRpb3ZhID0gaW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoc3RhY2Nlc3MtXFx1MDAzZWFjY2VzcyxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy0xNTU5LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNtZC1cXHUwMDNlYWNjZXNzX3BhZ2VzLmlvdmEpO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM9MTYyND1zdGF0aWMgaW50IGlvbW11ZmRfdGVzdF9hY2Nlc3Nfcncoc3RydWN0IGlvbW11ZmRfdWNtZCAqdWNtZCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTE2NTktXFx0aWYgKGZsYWdzIFxcdTAwMjYgTU9DS19GTEFHU19BQ0NFU1NfU1laKVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjE2NjA6XFx0XFx0aW92YSA9IGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhKHN0YWNjZXNzLVxcdTAwM2VhY2Nlc3MsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTY2MS1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjbWQtXFx1MDAzZWFjY2Vzc19ydy5pb3ZhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6NTE6MzIuMTA5Mjk5ODAzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MjQzNjY3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBgcWNvbV9iYW1fZG11eGAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgdGhpcyBgcWNvbV9iYW1fZG11eGAgZHJpdmVyLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0aGF0IGBzeXpfYCBwcmVmaXhlcyBhcmUgdXN1YWxseSBleGVjdXRvci1zaWRlIGNvZGUsIG5vdCBrZXJuZWwgY29kZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBJIHJlbWVtYmVyIHRoYXQgc3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgbWVjaGFuaXNtIGZvciB0ZXN0aW5nIHBhdGNoZXMuIEhvd2V2ZXIsIGlmIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgYSBkcml2ZXIsIGFuZCB0aGF0IGRyaXZlciBpc24ndCBhY3R1YWxseSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgUUVNVSBlbnZpcm9ubWVudCDigJMgbWVhbmluZyBpdCdzIG5vdCByZWFjaGFibGUgZHVyaW5nIHRlc3Rpbmcg4oCTIHRoZW4gZnV6emluZyBpdCBpcywgcmVhbGlzdGljYWxseSwgYSB3YXN0ZSBvZiB0aW1lLlxuXG5TbywgdGhlIGtleSBxdWVzdGlvbiBiZWNvbWVzOiBpcyBgcWNvbV9iYW1fZG11eGAgcmVhY2hhYmxlIGluIFFFTVU/IExldCBtZSB0aGluay4uLiBJdCdzIGEgcGxhdGZvcm0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGEgUXVhbGNvbW0gaGFyZHdhcmUgYmxvY2sgY2FsbGVkIHRoZSBCQU0gRGF0YSBNdWx0aXBsZXhlci4gUmlnaHQsIGl0J3MgcHJldHR5IHBsYXRmb3JtLXNwZWNpZmljLiBVbmxlc3MgdGhlcmUncyBhIFFFTVUgbWFjaGluZSBzcGVjaWZpY2FsbHkgZW11bGF0aW5nIHRoYXQgcGFydGljdWxhciBoYXJkd2FyZSwgb3IgdW5sZXNzIHRoZXJl4oCZcyBzb21lIGtpbmQgb2YgY2xldmVyIHN5emthbGxlciBwc2V1ZG8tZGV2aWNlIG9yIG1vZHVsZSBpbiBwbGFjZSB0byBzaW11bGF0ZSBpdCwgdGhlIGFuc3dlciBpcyBwcm9iYWJseSBubywgaXTigJlzIG5vdCBhY2Nlc3NpYmxlLlxuXG5UaGVyZWZvcmUsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGFueSBldmlkZW5jZSBvZiBhIHN5emthbGxlciBwc2V1ZG8tZGV2aWNlIG9yIHRlc3QgbW9kdWxlIHNwZWNpZmljYWxseSBjcmFmdGVkIGZvciBgcWNvbV9iYW1fZG11eGAuIExldOKAmXMgc2VlIHdoYXQncyBvdXQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTYyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjUxOjM3LjczMzY2ODgxNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5OTg3MzE2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxY29tX2JhbV9kbXV4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIk1BSU5UQUlORVJTPTIyMTAxPUY6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWxcXG5NQUlOVEFJTkVSUzoyMjEwMjpGOlxcdGRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXFxuTUFJTlRBSU5FUlMtMjIxMDMtXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc9NjU9Y29uZmlnIFFDT01fQkFNX0RNVVhcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy03Ni1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo3NzpcXHQgIGNhbGxlZCBxY29tX2JhbV9kbXV4LlxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy03OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGU9MTI9b2JqLSQoQ09ORklHX01ISV9XV0FOX01CSU0pICs9IG1oaV93d2FuX21iaW0ub1xcbmRyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1FDT01fQkFNX0RNVVgpICs9IHFjb21fYmFtX2RtdXgub1xcbmRyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX1JQTVNHX1dXQU5fQ1RSTCkgKz0gcnBtc2dfd3dhbl9jdHJsLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6NTE6NDAuMzMzNTQ5NjEzWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODI5MTI5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN5emthbGxlcidzIFBsYXRmb3JtIERldmljZSBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIG5vIGRlZGljYXRlZCB0ZXN0IG1vZHVsZSBmb3IgcGxhdGZvcm0gZGV2aWNlcywgdGhhdCdzIGNsZWFyLiBIbW0sIGNhbiBTeXprYWxsZXIgaW5qZWN0IHRoZW0gdmlhIGBzeXpfZGV2X2NyZWF0ZWA/IE5vcGUsIHRoYXQgb25seSBoYW5kbGVzIGAvZGV2L2Agbm9kZXMuIFdoYXQgYWJvdXQgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYD8gTm8gbHVjayB0aGVyZSBlaXRoZXIuIERvZXMgaXQgaGF2ZSBhbnl0aGluZyB3aXRoIG5ldHdvcmsgc29ja2V0cyB0aGF0IG1pZ2h0IHJlbGF0ZSwgbWF5YmUgYHN5el9pbml0X25ldF9zb2NrZXRgPyBOb3BlLiBUaGVyZSBpcyBgc3l6X3VzYl9jb25uZWN0YCwgdGhvdWdoLCBmb3IgVVNCIGRldmljZXMuIEJ1dCBub3RoaW5nIGRpcmVjdGx5IGZvciBwbGF0Zm9ybSBkZXZpY2VzLlxuXG5TbywgaXQgc2VlbXMgU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhICpnZW5lcmljKiB3YXkgdG8gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBwc2V1ZG8tZGV2aWNlIGRyaXZlciBpbnZvbHZlZCDigJMgdGhpbmdzIGxpa2UgYG1hYzgwMjExX2h3c2ltYCwgYHZrbXNgLCBvciBgdmhjaWAuIElmIGBxY29tX2JhbV9kbXV4YCAqaXMqIGEgcGxhdGZvcm0gZHJpdmVyLCB0aGVuIGl0IHdpbGwgbmVlZCBhIHBsYXRmb3JtIGRldmljZSB0byBiZSByZWdpc3RlcmVkIGZpcnN0LiBUaGUgcXVlc3Rpb24gaXMsIGhvdyBkbyB5b3UgcmVnaXN0ZXIgc3VjaCBhIGRldmljZSBmcm9tIHVzZXJzcGFjZT9cblxuVGhlcmUgYXJlIGEgZmV3IHBvdGVudGlhbCBhdmVudWVzOiBEZXZpY2UgVHJlZSBPdmVybGF5cyAoRFRPKSB2aWEgY29uZmlnZnMsIHdyaXRpbmcgdG8gYSBzeXNmcyBmaWxlIChsaWtlIGBuZXdfZGV2aWNlYCBmb3IgSTJDL1NQSSwgYnV0IEkgZG9uJ3QgdGhpbmsgaXQncyBmb3IgcGxhdGZvcm0gYnVzZXMpLCBvciBhIGtlcm5lbCBtb2R1bGUgdGhhdCByZWdpc3RlcnMgaXQuIERvZXMgU3l6a2FsbGVyIHVzZSBEVE8/IExvb2tzIGxpa2UgdGhlcmUgaXMgc29tZSBtZW50aW9uIG9mIGl0LCBidXQgbm8sIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLlxuXG5XYWl0LCBpZiB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSwgd2h5IHdhcyBTeXprYWxsZXIgZXZlbiB0ZXN0aW5nIGl0PyBBaCwgcmlnaHQsIFN5emthbGxlciB0ZXN0cyBwYXRjaGVzIHN1Ym1pdHRlZCB0aHJvdWdoIGVtYWlsIG9yIEdlcnJpdC4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBwYXRjaCB3YXMgc2VudCB0byBzeXpib3QgZm9yIHRlc3RpbmcuIFN5emJvdCBtaWdodCBjb21waWxlIGFuZCBydW4gdGhlIHBhdGNoLCBhbmQgaWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUsIHN5emJvdCB3aWxsIHJlcG9ydCBcIk9LXCIgc2luY2UgaXQgZGlkbid0IGNyYXNoLlxuXG5CdXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHNldCBcIldvcnRoRnV6emluZz1mYWxzZVwiIGlmIHRoZSBwYXRjaCBjb250YWlucyB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gU2luY2UgYHFjb21fYmFtX2RtdXhgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgUXVhbGNvbW0gaGFyZHdhcmUsIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBUaGF0IG1lYW5zIGl0J3MgaW1wb3NzaWJsZSB0byByZWFjaCBpdC5cblxuQWxyaWdodCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBtb3JlIHRpbWUsIG1ha2Ugc3VyZSBJIGRpZG4ndCBtaXNzIHNvbWV0aGluZy4gSXMgdGhlcmUgYW55IG90aGVyIGRyaXZlciB0aGF0IHJlZ2lzdGVycyBgcWNvbSxiYW0tZG11eGA/IEJldHRlciBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5NDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6NTE6NDguNTE2NDY0Nzc2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE3NzA1ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInFjb20sYmFtLWRtdXhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwtMy0tLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3Fjb20sYmFtLWRtdXgueWFtbCNcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC01LSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWw9MjM9cHJvcGVydGllczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTI1LSAgICBvbmVPZjpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbDoyNjogICAgICAtIGNvbnN0OiBxY29tLGJhbS1kbXV4XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwtMjctICAgICAgLSBpdGVtczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTMwLSAgICAgICAgICAgICAgLSBxY29tLHNoaWtyYS1iYW0tZG11eFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sOjMxOiAgICAgICAgICAtIGNvbnN0OiBxY29tLGJhbS1kbXV4XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwtMzItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbD05Mj1leGFtcGxlczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTk3LSAgICAgICAgYmFtLWRtdXgge1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sOjk4OiAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwicWNvbSxiYW0tZG11eFxcXCI7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwtOTktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVtb3RlcHJvYy9xY29tLG1zbTg5MTYtbXNzLXBpbC55YW1sPTE2PXByb3BlcnRpZXM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVtb3RlcHJvYy9xY29tLG1zbTg5MTYtbXNzLXBpbC55YW1sLTE1NC0gIGJhbS1kbXV4OlxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbXNtODkxNi1tc3MtcGlsLnlhbWw6MTU1OiAgICAkcmVmOiAvc2NoZW1hcy9uZXQvcWNvbSxiYW0tZG11eC55YW1sI1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbXNtODkxNi1tc3MtcGlsLnlhbWwtMTU2LSAgICBkZXNjcmlwdGlvbjpcXG4tLVxcbk1BSU5UQUlORVJTPTIyMTAwPVM6XFx0TWFpbnRhaW5lZFxcbk1BSU5UQUlORVJTOjIyMTAxOkY6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWxcXG5NQUlOVEFJTkVSUy0yMjEwMi1GOlxcdGRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODIyNi5kdHNpPTk3NT1cXHRcXHRcXHRiYW1fZG11eDogYmFtLWRtdXgge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k6OTc2OlxcdFxcdFxcdFxcdGNvbXBhdGlibGUgPSBcXFwicWNvbSxiYW0tZG11eFxcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTgyMjYuZHRzaS05NzctXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpPTE1ODg9XFx0XFx0XFx0YmFtX2RtdXg6IGJhbS1kbXV4IHtcXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpOjE1ODk6XFx0XFx0XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS1kbXV4XFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpLTE1OTAtXFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi5kdHNpPTE5NzY9XFx0XFx0XFx0YmFtX2RtdXg6IGJhbS1kbXV4IHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi5kdHNpOjE5Nzc6XFx0XFx0XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS1kbXV4XFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi5kdHNpLTE5NzgtXFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpPTE3NTU9XFx0XFx0XFx0YmFtX2RtdXg6IGJhbS1kbXV4IHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpOjE3NTY6XFx0XFx0XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS1kbXV4XFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpLTE3NTctXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYz0xMDAxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJhbV9kbXV4X29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTAwMi1cXHR7IC5jb21wYXRpYmxlID0gXFxcInFjb20sc2hpa3JhLWJhbS1kbXV4XFxcIiwgLmRhdGEgPSBcXHUwMDI2c2hpa3JhX2RhdGEgfSxcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxMDAzOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwicWNvbSxiYW0tZG11eFxcXCIgfSxcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMDA0LVxcdHsgLyogc2VudGluZWwgKi8gfVxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYz0yMDY3PXN0YXRpYyBpbnQgcTZ2NV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYy0yMjAzLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmM6MjIwNDpcXHRub2RlID0gb2ZfZ2V0X2NvbXBhdGlibGVfY2hpbGQocGRldi1cXHUwMDNlZGV2Lm9mX25vZGUsIFxcXCJxY29tLGJhbS1kbXV4XFxcIik7XFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYy0yMjA1LVxcdHFwcm9jLVxcdTAwM2ViYW1fZG11eCA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobm9kZSwgTlVMTCwgXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDA5OjUxOjUxLjEzNDE3NjE0MloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDkyOTUzMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgUGF0aCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHFjb21fcTZ2NV9tc3MuY2AgZmlsZSBhbmQgSSBzZWUgaXQncyByZWdpc3RlcmluZyBgcWNvbSxiYW0tZG11eGAuIFRoYXQncyBpbnRlcmVzdGluZywgYnV0IHRoZW4gSSByZW1lbWJlciBgcWNvbV9xNnY1X21zc2AgaXMgaXRzZWxmIGEgcGxhdGZvcm0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIEhleGFnb24gRFNQcy4gUmlnaHQgYXdheSwgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluIGFuZCBJIGtub3cgdGhhdCBtZWFucyBpdCByZWxpZXMgb24gYSBkZXZpY2UgdHJlZSBub2RlIGZvciB0aGUgcmVtb3RlcHJvYyBkZXZpY2UuXG5cbk15IGNvbmNlcm4gaXMgd2hldGhlciBvciBub3QgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHN5emthbGxlci4gSSBrbm93IHN5emthbGxlciBkb2Vzbid0IHJ1biBvbiBhY3R1YWwgUXVhbGNvbW0gaGFyZHdhcmU7IGl0J3MgdXNpbmcgZ2VuZXJpYyBRRU1VL0dDRSBWTXMuIFNvLCBjYW4gd2UgYWN0dWFsbHkgaW5zdGFudGlhdGUgdGhpcyBgcWNvbV9xNnY1X21zc2AgZHJpdmVyIGluIG91ciB0ZXN0aW5nIGVudmlyb25tZW50PyBUaGUgYW5zd2VyIGlzIGEgc29saWQgbm8sIGFuZCBteSByZWFzb25pbmcgaXMgYXMgZm9sbG93czogVGhlcmUgaXMgbm8gd2F5IHdlIGNhbiBhY2hpZXZlIHRoYXQuXG5cbkxldCBtZSB0aGluayBpdCB0aHJvdWdoOiBJcyB0aGVyZSBhbnkgKm90aGVyKiB3YXk/IENhbiBzeXprYWxsZXIgdXNlIGBzeXpfZGV2X2NyZWF0ZWAgdG8gY3JlYXRlIHRoZSBwbGF0Zm9ybSBkZXZpY2UsIG9yIG1heWJlIGBzeXpfbW91bnRgPyBObywgdGhhdCdzIG5vdCBob3cgc3l6a2FsbGVyIG9yIHRoZSBrZXJuZWwgd29ya3MuIEhtbSwgd2hhdCBhYm91dCB1c2luZyBjb25maWdmcyB0byBsb2FkIGEgZGV2aWNlIHRyZWUgb3ZlcmxheT8gSSBxdWlja2x5IGNoZWNrIG15IG1lbnRhbCBtYXAgb2YgTGludXgga2VybmVsIGZlYXR1cmVzIGFuZCByZWNhbGwgdGhhdCB0aGVyZSdzIG5vIHVwc3RyZWFtIGNvbmZpZ2ZzIGludGVyZmFjZSBmb3IgZGV2aWNlIHRyZWUgb3ZlcmxheXMuIFRoZXJlIHdhcyBhIHByb3Bvc2FsLCBidXQgaXQgbmV2ZXIgbGFuZGVkLiBUaGlzIG1lYW5zIERUTyBmcm9tIHVzZXJzcGFjZSBpcyBhIGRlYWQgZW5kLiBQbGF0Zm9ybSBkZXZpY2VzLCBpbiBnZW5lcmFsLCBuZWVkIGEgcmVhbCBkZXZpY2UgdHJlZSBlbnRyeSB0byBnZXQgc3RhcnRlZCB1bmxlc3MgdGhlcmUncyBzb21lIHNwZWNpYWwgZHJpdmVyIHRoYXQgZW11bGF0ZXMgdGhlIGhhcmR3YXJlLiBJbiBteSBleHBlcmllbmNlLCBJIGRvIG5vdCBzZWUgdGhhdCBoYXBwZW5pbmcgZm9yIGBxY29tX2JhbV9kbXV4YC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoaXMgbG9naWMuIFRoZSBwcm9tcHQgbWVudGlvbnMgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBTaW5jZSBgcWNvbV9iYW1fZG11eGAgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIGRldmljZSB0cmVlLCBhbmQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gSSBrbm93IG9mLCBpdCdzIGRlZmluaXRpdmVseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIFFFTVUvR0NFLiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoZSBwcm9tcHQncyBjcml0ZXJpYSwgdGhlIGZ1enppbmcgaXMgbm90IHdvcnRoIGl0LCBhbmQgSSBzaG91bGQgcmV0dXJuIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjUyNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwOTo1MjowMC4yMjcxMzIwMzhaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MzgzMjc2MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFtX2RtdXhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1OTggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sPTkyPWV4YW1wbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwtMTA2LVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sOjEwNzogICAgICAgICAgICBkbWFzID0gXFx1MDAzY1xcdTAwMjZiYW1fZG11eF9kbWEgNFxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YmFtX2RtdXhfZG1hIDVcXHUwMDNlO1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTEwOC0gICAgICAgICAgICBkbWEtbmFtZXMgPSBcXFwidHhcXFwiLCBcXFwicnhcXFwiO1xcbi0tXFxuTUFJTlRBSU5FUlM9MjIxMDE9RjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbFxcbk1BSU5UQUlORVJTOjIyMTAyOkY6XFx0ZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcXG5NQUlOVEFJTkVSUy0yMjEwMy1cXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k9OTA0PVxcdFxcdHNwbWlfYnVzOiBzcG1pQGZjNGNmMDAwIHtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2ktOTE5LVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k6OTIwOlxcdFxcdGJhbV9kbXV4X2RtYTogZG1hLWNvbnRyb2xsZXJAZmM4MzQwMDAge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2ktOTIxLVxcdFxcdFxcdGNvbXBhdGlibGUgPSBcXFwicWNvbSxiYW0tdjEuNC4wXFxcIjtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k9OTMyPVxcdFxcdG1vZGVtOiByZW1vdGVwcm9jQGZjODgwMDAwIHtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2ktOTc0LVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k6OTc1OlxcdFxcdFxcdGJhbV9kbXV4OiBiYW0tZG11eCB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTgyMjYuZHRzaS05NzYtXFx0XFx0XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS1kbXV4XFxcIjtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2ktOTg0LVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k6OTg1OlxcdFxcdFxcdFxcdGRtYXMgPSBcXHUwMDNjXFx1MDAyNmJhbV9kbXV4X2RtYSA0XFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZiYW1fZG11eF9kbWEgNVxcdTAwM2U7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTgyMjYuZHRzaS05ODYtXFx0XFx0XFx0XFx0ZG1hLW5hbWVzID0gXFxcInR4XFxcIiwgXFxcInJ4XFxcIjtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2k9MTUyMT1cXHRcXHRzcG1pX2J1czogc3BtaUBmYzRjZjAwMCB7XFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpLTE1MzYtXFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTg5NzQuZHRzaToxNTM3OlxcdFxcdGJhbV9kbXV4X2RtYTogZG1hLWNvbnRyb2xsZXJAZmM4MzQwMDAge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2ktMTUzOC1cXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20sYmFtLXYxLjQuMFxcXCI7XFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpPTE1ODQ9XFx0XFx0XFx0bXBzcyB7XFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpLTE1ODctXFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTg5NzQuZHRzaToxNTg4OlxcdFxcdFxcdGJhbV9kbXV4OiBiYW0tZG11eCB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTg5NzQuZHRzaS0xNTg5LVxcdFxcdFxcdFxcdGNvbXBhdGlibGUgPSBcXFwicWNvbSxiYW0tZG11eFxcXCI7XFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpLTE1OTctXFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTg5NzQuZHRzaToxNTk4OlxcdFxcdFxcdFxcdGRtYXMgPSBcXHUwMDNjXFx1MDAyNmJhbV9kbXV4X2RtYSA0XFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZiYW1fZG11eF9kbWEgNVxcdTAwM2U7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTg5NzQuZHRzaS0xNTk5LVxcdFxcdFxcdFxcdGRtYS1uYW1lcyA9IFxcXCJ0eFxcXCIsIFxcXCJyeFxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi1tb2RlbS1xZHNwNi5kdHNpPTEyPVxcdTAwMjZhcHIge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYtbW9kZW0tcWRzcDYuZHRzaS0xNS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi1tb2RlbS1xZHNwNi5kdHNpOjE2OlxcdTAwMjZiYW1fZG11eCB7XFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYtbW9kZW0tcWRzcDYuZHRzaS0xNy1cXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi1tb2RlbS1xZHNwNi5kdHNpLTE5LVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LW1vZGVtLXFkc3A2LmR0c2k6MjA6XFx1MDAyNmJhbV9kbXV4X2RtYSB7XFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYtbW9kZW0tcWRzcDYuZHRzaS0yMS1cXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi11ZmkuZHRzaT01OD1cXHRcXHRsZWRfYjogbGVkLWIge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYtdWZpLmR0c2ktNjUtXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYtdWZpLmR0c2k6NjY6XFx1MDAyNmJhbV9kbXV4IHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi11ZmkuZHRzaS02Ny1cXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi11ZmkuZHRzaS02OS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi11ZmkuZHRzaTo3MDpcXHUwMDI2YmFtX2RtdXhfZG1hIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi11ZmkuZHRzaS03MS1cXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi5kdHNpPTE5MDE9XFx0XFx0c3BtaV9idXM6IHNwbWlAMjAwZjAwMCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi5kdHNpLTE5MTgtXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYuZHRzaToxOTE5OlxcdFxcdGJhbV9kbXV4X2RtYTogZG1hLWNvbnRyb2xsZXJANDA0NDAwMCB7XFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYuZHRzaS0xOTIwLVxcdFxcdFxcdGNvbXBhdGlibGUgPSBcXFwicWNvbSxiYW0tdjEuNy4wXFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2k9MTk3Mj1cXHRcXHRcXHRtcHNzIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2ktMTk3NS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi5kdHNpOjE5NzY6XFx0XFx0XFx0YmFtX2RtdXg6IGJhbS1kbXV4IHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi5kdHNpLTE5NzctXFx0XFx0XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS1kbXV4XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2ktMTk4NS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi5kdHNpOjE5ODY6XFx0XFx0XFx0XFx0ZG1hcyA9IFxcdTAwM2NcXHUwMDI2YmFtX2RtdXhfZG1hIDRcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmJhbV9kbXV4X2RtYSA1XFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi5kdHNpLTE5ODctXFx0XFx0XFx0XFx0ZG1hLW5hbWVzID0gXFxcInR4XFxcIiwgXFxcInJ4XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE3LmR0c2k9MTIzOT1cXHRcXHRzcG1pX2J1czogc3BtaUAyMDBmMDAwIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE3LmR0c2ktMTI2MC1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNy5kdHNpOjEyNjE6XFx0XFx0YmFtX2RtdXhfZG1hOiBkbWEtY29udHJvbGxlckA0MDQ0MDAwIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNy5kdHNpLTEyNjItXFx0XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS12MS43LjBcXFwiO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzcuZHRzaT0xNDAzPVxcdFxcdHNwbWlfYnVzOiBzcG1pQDIwMGYwMDAge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzcuZHRzaS0xNDI0LVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM3LmR0c2k6MTQyNTpcXHRcXHRiYW1fZG11eF9kbWE6IGRtYS1jb250cm9sbGVyQDQwNDQwMDAge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM3LmR0c2ktMTQyNi1cXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20sYmFtLXYxLjcuMFxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpPTE2OTE9XFx0XFx0c3BtaV9idXM6IHNwbWlAMjAwZjAwMCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpLTE3MDgtXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzkuZHRzaToxNzA5OlxcdFxcdGJhbV9kbXV4X2RtYTogZG1hLWNvbnRyb2xsZXJANDA0NDAwMCB7XFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzkuZHRzaS0xNzEwLVxcdFxcdFxcdGNvbXBhdGlibGUgPSBcXFwicWNvbSxiYW0tdjEuNy4wXFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2k9MTcyMz1cXHRcXHRtcHNzOiByZW1vdGVwcm9jQDQwODAwMDAge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzkuZHRzaS0xNzU0LVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2k6MTc1NTpcXHRcXHRcXHRiYW1fZG11eDogYmFtLWRtdXgge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2ktMTc1Ni1cXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20sYmFtLWRtdXhcXFwiO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzkuZHRzaS0xNzY0LVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2k6MTc2NTpcXHRcXHRcXHRcXHRkbWFzID0gXFx1MDAzY1xcdTAwMjZiYW1fZG11eF9kbWEgNFxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YmFtX2RtdXhfZG1hIDVcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2ktMTc2Ni1cXHRcXHRcXHRcXHRkbWEtbmFtZXMgPSBcXFwidHhcXFwiLCBcXFwicnhcXFwiO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTY1PWNvbmZpZyBRQ09NX0JBTV9ETVVYXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNzYtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6Nzc6XFx0ICBjYWxsZWQgcWNvbV9iYW1fZG11eC5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNzgtXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlPTEyPW9iai0kKENPTkZJR19NSElfV1dBTl9NQklNKSArPSBtaGlfd3dhbl9tYmltLm9cXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19RQ09NX0JBTV9ETVVYKSArPSBxY29tX2JhbV9kbXV4Lm9cXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlLTE0LW9iai0kKENPTkZJR19SUE1TR19XV0FOX0NUUkwpICs9IHJwbXNnX3d3YW5fY3RybC5vXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yNi0jZGVmaW5lIEJBTV9ETVVYX0JVRkZFUl9TSVpFXFx0XFx0U1pfMktcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoyNzojZGVmaW5lIEJBTV9ETVVYX0hEUl9TSVpFXFx0XFx0c2l6ZW9mKHN0cnVjdCBiYW1fZG11eF9oZHIpXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjgtI2RlZmluZSBCQU1fRE1VWF9NQVhfREFUQV9TSVpFXFx0XFx0KEJBTV9ETVVYX0JVRkZFUl9TSVpFIC0gQkFNX0RNVVhfSERSX1NJWkUpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYz00Mj1lbnVtIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTUzLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjU0OnN0cnVjdCBiYW1fZG11eF9oZHIge1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTU1LVxcdHUxNiBtYWdpYztcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTYyLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjYzOnN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2NDpcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXg7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjUtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY5LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjcwOnN0cnVjdCBiYW1fZG11eCB7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzEtXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtODQtXFx0dTY0IHJ4X2J1Zl9wZXJtczsgLyogU0NNIHNvdXJjZS1WTUlEIGJpdG1hc2sgb2YgcnhfYnVmICovXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6ODU6XFx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgcnhfc2tic1tCQU1fRE1VWF9OVU1fU0tCXTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo4NjpcXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSB0eF9za2JzW0JBTV9ETVVYX05VTV9TS0JdO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTg3LVxcdHNwaW5sb2NrX3QgdHhfbG9jazsgLyogUHJvdGVjdCB0eF9za2JzLCB0eF9uZXh0X3NrYiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtOTYtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6OTc6c3RydWN0IGJhbV9kbXV4X25ldGRldiB7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6OTg6XFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4O1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTk5LVxcdHU4IGNoO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTAxLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjEwMjpzdHJ1Y3QgYmFtX2RtdXhfZGF0YSB7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTAzLVxcdHUzMiB2bWlkO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTA1LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjEwNjpzdGF0aWMgdm9pZCBiYW1fZG11eF9wY192b3RlKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgYm9vbCBlbmFibGUpXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTA3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTExMi1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxMTM6c3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfYWNrKHN0cnVjdCBiYW1fZG11eCAqZG11eClcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMTQte1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTE5LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjEyMDpzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX21hcChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSxcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMjEtXFx0XFx0XFx0XFx0IGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTEzNy1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxMzg6c3RhdGljIHZvaWQgYmFtX2RtdXhfc2tiX2RtYV91bm1hcChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSxcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMzktXFx0XFx0XFx0XFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTQ3LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjE0ODpzdGF0aWMgdm9pZCBiYW1fZG11eF90eF93YWtlX3F1ZXVlcyhzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTQ5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTE2MS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxNjI6c3RhdGljIHZvaWQgYmFtX2RtdXhfdHhfc3RvcF9xdWV1ZXMoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTE2My17XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xNzUtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MTc2OnN0YXRpYyB2b2lkIGJhbV9kbXV4X3R4X2RvbmUoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTc3LXtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxNzg6XFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gc2tiX2RtYS1cXHUwMDNlZG11eDtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xNzktXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTE4My1cXHRpZiAoc2tiX2RtYS1cXHUwMDNlYWRkcilcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxODQ6XFx0XFx0YmFtX2RtdXhfc2tiX2RtYV91bm1hcChza2JfZG1hLCBETUFfVE9fREVWSUNFKTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xODUtXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xODgtXFx0aWYgKHNrYl9kbWEgPT0gXFx1MDAyNmRtdXgtXFx1MDAzZXR4X3NrYnNbZG11eC1cXHUwMDNldHhfbmV4dF9za2IgJSBCQU1fRE1VWF9OVU1fU0tCXSlcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxODk6XFx0XFx0YmFtX2RtdXhfdHhfd2FrZV9xdWV1ZXMoZG11eCk7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTkwLVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRtdXgtXFx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTE5Mi1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxOTM6c3RhdGljIHZvaWQgYmFtX2RtdXhfdHhfY2FsbGJhY2sodm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xOTQte1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjE5NTpcXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSA9IGRhdGE7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTk2LVxcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfZG1hLVxcdTAwM2Vza2I7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMTk3LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjE5ODpcXHRiYW1fZG11eF90eF9kb25lKHNrYl9kbWEpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTE5OS1cXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yMDEtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MjAyOnN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3R4KHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTIwMy17XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MjA0OlxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtXFx1MDAzZWRtdXg7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjA1LVxcdHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYztcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTIxNC1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoyMTU6XFx0ZGVzYy1cXHUwMDNlY2FsbGJhY2sgPSBiYW1fZG11eF90eF9jYWxsYmFjaztcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yMTYtXFx0ZGVzYy1cXHUwMDNlY2FsbGJhY2tfcGFyYW0gPSBza2JfZG1hO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjIwLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjIyMTpzdGF0aWMgc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKlxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjIyMjpiYW1fZG11eF90eF9xdWV1ZShzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjIzLXtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoyMjQ6XFx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWE7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjI1LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yMzAtXFx0aWYgKHNrYl9kbWEtXFx1MDAzZXNrYikge1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjIzMTpcXHRcXHRiYW1fZG11eF90eF9zdG9wX3F1ZXVlcyhkbXV4KTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yMzItXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZG11eC1cXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjM4LVxcdGlmIChkbXV4LVxcdTAwM2V0eF9za2JzW2RtdXgtXFx1MDAzZXR4X25leHRfc2tiICUgQkFNX0RNVVhfTlVNX1NLQl0uc2tiKVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjIzOTpcXHRcXHRiYW1fZG11eF90eF9zdG9wX3F1ZXVlcyhkbXV4KTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yNDAtXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yNDQtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MjQ1OnN0YXRpYyBpbnQgYmFtX2RtdXhfc2VuZF9jbWQoc3RydWN0IGJhbV9kbXV4X25ldGRldiAqYm5kZXYsIHU4IGNtZClcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yNDYte1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjI0NzpcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBibmRldi1cXHUwMDNlZG11eDtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoyNDg6XFx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWE7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MjQ5OlxcdHN0cnVjdCBiYW1fZG11eF9oZHIgKmhkcjtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yNTAtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTI2MS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoyNjI6XFx0c2tiX2RtYSA9IGJhbV9kbXV4X3R4X3F1ZXVlKGRtdXgsIHNrYik7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjYzLVxcdGlmICghc2tiX2RtYSkge1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjcxLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjI3MjpcXHRpZiAoIWJhbV9kbXV4X3NrYl9kbWFfbWFwKHNrYl9kbWEsIERNQV9UT19ERVZJQ0UpKSB7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjczLVxcdFxcdHJldCA9IC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yNzYtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6Mjc3OlxcdGlmICghYmFtX2RtdXhfc2tiX2RtYV9zdWJtaXRfdHgoc2tiX2RtYSkpIHtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yNzgtXFx0XFx0cmV0ID0gLUVJTztcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTI4NS10eF9mYWlsOlxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjI4NjpcXHRiYW1fZG11eF90eF9kb25lKHNrYl9kbWEpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTI4Ny1mcmVlX3NrYjpcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTI5MS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoyOTI6c3RhdGljIGludCBiYW1fZG11eF9uZXRkZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTI5My17XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6Mjk0OlxcdHN0cnVjdCBiYW1fZG11eF9uZXRkZXYgKmJuZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yOTUtXFx0aW50IHJldDtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0yOTYtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6Mjk3OlxcdHJldCA9IGJhbV9kbXV4X3NlbmRfY21kKGJuZGV2LCBCQU1fRE1VWF9DTURfT1BFTik7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMjk4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zMDQtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MzA1OnN0YXRpYyBpbnQgYmFtX2RtdXhfbmV0ZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zMDYte1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjMwNzpcXHRzdHJ1Y3QgYmFtX2RtdXhfbmV0ZGV2ICpibmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMzA4LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTMwOS1cXHRuZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MzEwOlxcdGJhbV9kbXV4X3NlbmRfY21kKGJuZGV2LCBCQU1fRE1VWF9DTURfQ0xPU0UpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTMxMS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jPTMxND1zdGF0aWMgdW5zaWduZWQgaW50IG5lZWRlZF9yb29tKHVuc2lnbmVkIGludCBhdmFpbCwgdW5zaWduZWQgaW50IG5lZWRlZClcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTMyMC1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzozMjE6c3RhdGljIGludCBiYW1fZG11eF90eF9wcmVwYXJlX3NrYihzdHJ1Y3QgYmFtX2RtdXhfbmV0ZGV2ICpibmRldixcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zMjItXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTMyNi1cXHR1bnNpZ25lZCBpbnQgdGFpbCA9IG5lZWRlZF9yb29tKHNrYl90YWlscm9vbShza2IpLCBwYWQpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjMyNzpcXHRzdHJ1Y3QgYmFtX2RtdXhfaGRyICpoZHI7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMzI4LVxcdGludCByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zNDgtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MzQ5OnN0YXRpYyBuZXRkZXZfdHhfdCBiYW1fZG11eF9uZXRkZXZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM1MC1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM1MS17XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MzUyOlxcdHN0cnVjdCBiYW1fZG11eF9uZXRkZXYgKmJuZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzozNTM6XFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gYm5kZXYtXFx1MDAzZWRtdXg7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MzU0OlxcdHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM1NS1cXHRpbnQgYWN0aXZlLCByZXQ7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMzU2LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjM1NzpcXHRza2JfZG1hID0gYmFtX2RtdXhfdHhfcXVldWUoZG11eCwgc2tiKTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zNTgtXFx0aWYgKCFza2JfZG1hKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMzY0LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjM2NTpcXHRyZXQgPSBiYW1fZG11eF90eF9wcmVwYXJlX3NrYihibmRldiwgc2tiKTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zNjYtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM2OC1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzozNjk6XFx0aWYgKCFiYW1fZG11eF9za2JfZG1hX21hcChza2JfZG1hLCBETUFfVE9fREVWSUNFKSlcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zNzAtXFx0XFx0Z290byBkcm9wO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtMzc5LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjM4MDpcXHRpZiAoIWJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3R4KHNrYl9kbWEpKVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM4MS1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zODYtZHJvcDpcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzozODc6XFx0YmFtX2RtdXhfdHhfZG9uZShza2JfZG1hKTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zODgtXFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM5MS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzozOTI6c3RhdGljIHZvaWQgYmFtX2RtdXhfdHhfd2FrZXVwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTM5My17XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6Mzk0OlxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmFtX2RtdXgsIHR4X3dha2V1cF93b3JrKTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0zOTUtXFx0dW5zaWduZWQgbG9uZyBwZW5kaW5nO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDA5LVxcdGZvcl9lYWNoX3NldF9iaXQoaSwgXFx1MDAyNnBlbmRpbmcsIEJBTV9ETVVYX05VTV9TS0IpIHtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo0MTA6XFx0XFx0YmFtX2RtdXhfc2tiX2RtYV9zdWJtaXRfdHgoXFx1MDAyNmRtdXgtXFx1MDAzZXR4X3NrYnNbaV0pO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQxMS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MTctXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDE4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmFtX2RtdXhfb3BzID0ge1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQxOTpcXHQubmRvX29wZW5cXHQ9IGJhbV9kbXV4X25ldGRldl9vcGVuLFxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQyMDpcXHQubmRvX3N0b3BcXHQ9IGJhbV9kbXV4X25ldGRldl9zdG9wLFxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQyMTpcXHQubmRvX3N0YXJ0X3htaXRcXHQ9IGJhbV9kbXV4X25ldGRldl9zdGFydF94bWl0LFxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQyMi19O1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM9NDI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3dhbl90eXBlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDI3LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQyODpzdGF0aWMgdm9pZCBiYW1fZG11eF9uZXRkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00Mjkte1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQzMDpcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2YmFtX2RtdXhfb3BzO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQzMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQzNy1cXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBCQU1fRE1VWF9NQVhfREFUQV9TSVpFO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQzODpcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYmFtX2RtdXhfaGRyKTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MzktXFx0ZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb20gPSBzaXplb2YodTMyKTsgLyogd29yZC1hbGlnbmVkICovXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00NDYtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDQ3OnN0YXRpYyB2b2lkIGJhbV9kbXV4X3JlZ2lzdGVyX25ldGRldl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00NDgte1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQ0OTpcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJhbV9kbXV4LCByZWdpc3Rlcl9uZXRkZXZfd29yayk7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDUwOlxcdHN0cnVjdCBiYW1fZG11eF9uZXRkZXYgKmJuZGV2O1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQ1MS1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDU4LVxcdFxcdG5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmJuZGV2KSwgXFxcInd3YW4lZFxcXCIsIE5FVF9OQU1FX0VOVU0sXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDU5OlxcdFxcdFxcdFxcdCAgICAgIGJhbV9kbXV4X25ldGRldl9zZXR1cCk7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDYwLVxcdFxcdGlmICghbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDgxLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQ4MjpzdGF0aWMgdm9pZCBiYW1fZG11eF9yeF9jYWxsYmFjayh2b2lkICpkYXRhKTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00ODMtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDg0OnN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4KHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQ4NS17XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDg2OlxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtXFx1MDAzZWRtdXg7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDg3LVxcdHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYztcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQ5Ny1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo0OTg6XFx0ZGVzYy1cXHUwMDNlY2FsbGJhY2sgPSBiYW1fZG11eF9yeF9jYWxsYmFjaztcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00OTktXFx0ZGVzYy1cXHUwMDNlY2FsbGJhY2tfcGFyYW0gPSBza2JfZG1hO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNTAzLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjUwNDpzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX3F1ZXVlX3J4KHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hLCBnZnBfdCBnZnApXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNTA1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTUwNy1cXHRpZiAoc2tiX2RtYS1cXHUwMDNlcnhfdmlydClcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo1MDg6XFx0XFx0cmV0dXJuIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4KHNrYl9kbWEpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTUwOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTUxNi1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo1MTc6XFx0cmV0dXJuIGJhbV9kbXV4X3NrYl9kbWFfbWFwKHNrYl9kbWEsIERNQV9GUk9NX0RFVklDRSkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo1MTg6XFx0ICAgICAgIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4KHNrYl9kbWEpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTUxOS19XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNTIwLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjUyMTpzdGF0aWMgdm9pZCBiYW1fZG11eF9jbWRfZGF0YShzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSlcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy01MjIte1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjUyMzpcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBza2JfZG1hLVxcdTAwM2VkbXV4O1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjUyNDpcXHRzdHJ1Y3QgYmFtX2RtdXhfaGRyICpoZHIgPSBza2JfZG1hLVxcdTAwM2VyeF92aXJ0ID8gc2tiX2RtYS1cXHUwMDNlcnhfdmlydCA6XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NTI1OlxcdFxcdFxcdFxcdCAgIChzdHJ1Y3QgYmFtX2RtdXhfaGRyICopc2tiX2RtYS1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTUyNi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZG11eC1cXHUwMDNlbmV0ZGV2c1toZHItXFx1MDAzZWNoXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTU2OS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo1NzA6c3RhdGljIHZvaWQgYmFtX2RtdXhfY21kX29wZW4oc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBzdHJ1Y3QgYmFtX2RtdXhfaGRyICpoZHIpXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTU4OC1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo1ODk6c3RhdGljIHZvaWQgYmFtX2RtdXhfY21kX2Nsb3NlKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgc3RydWN0IGJhbV9kbXV4X2hkciAqaGRyKVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTU5MC17XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02MDMtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NjA0OnN0YXRpYyB2b2lkIGJhbV9kbXV4X3J4X2NhbGxiYWNrKHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjA1LXtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2MDY6XFx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEgPSBkYXRhO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjYwNzpcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBza2JfZG1hLVxcdTAwM2VkbXV4O1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjYwODpcXHRzdHJ1Y3QgYmFtX2RtdXhfaGRyICpoZHI7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjA5LVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjEyLVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NjEzOlxcdFxcdGJhbV9kbXV4X3NrYl9kbWFfdW5tYXAoc2tiX2RtYSwgRE1BX0ZST01fREVWSUNFKTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2MTQ6XFx0XFx0aGRyID0gKHN0cnVjdCBiYW1fZG11eF9oZHIgKilza2JfZG1hLVxcdTAwM2Vza2ItXFx1MDAzZWRhdGE7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjE1LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTYyOC1cXHRjYXNlIEJBTV9ETVVYX0NNRF9EQVRBOlxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjYyOTpcXHRcXHRiYW1fZG11eF9jbWRfZGF0YShza2JfZG1hKTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02MzAtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjMxLVxcdGNhc2UgQkFNX0RNVVhfQ01EX09QRU46XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NjMyOlxcdFxcdGJhbV9kbXV4X2NtZF9vcGVuKGRtdXgsIGhkcik7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjMzLVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTYzNC1cXHRjYXNlIEJBTV9ETVVYX0NNRF9DTE9TRTpcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2MzU6XFx0XFx0YmFtX2RtdXhfY21kX2Nsb3NlKGRtdXgsIGhkcik7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjM2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjQzLW91dDpcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2NDQ6XFx0aWYgKGJhbV9kbXV4X3NrYl9kbWFfcXVldWVfcngoc2tiX2RtYSwgR0ZQX0FUT01JQykpXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjQ1LVxcdFxcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGRtdXgtXFx1MDAzZXJ4KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY0Ny1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2NDg6c3RhdGljIGJvb2wgYmFtX2RtdXhfcG93ZXJfb24oc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY0OS17XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02NjUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJBTV9ETVVYX05VTV9TS0I7IGkrKykge1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjY2NjpcXHRcXHRpZiAoIWJhbV9kbXV4X3NrYl9kbWFfcXVldWVfcngoXFx1MDAyNmRtdXgtXFx1MDAzZXJ4X3NrYnNbaV0sIEdGUF9LRVJORUwpKVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY2Ny1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02NzMtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6Njc0OnN0YXRpYyB2b2lkIGJhbV9kbXV4X2ZyZWVfc2ticyhzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSBza2JzW10sXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjc1LVxcdFxcdFxcdCAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02NzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJBTV9ETVVYX05VTV9TS0I7IGkrKykge1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjY4MDpcXHRcXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSA9IFxcdTAwMjZza2JzW2ldO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY4NS1cXHRcXHRpZiAoc2tiX2RtYS1cXHUwMDNlYWRkcilcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo2ODY6XFx0XFx0XFx0YmFtX2RtdXhfc2tiX2RtYV91bm1hcChza2JfZG1hLCBkaXIpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTY4Ny1cXHRcXHRpZiAoc2tiX2RtYS1cXHUwMDNlc2tiKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy02OTMtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6Njk0OnN0YXRpYyB2b2lkIGJhbV9kbXV4X3Bvd2VyX29mZihzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNjk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTcwNy1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo3MDg6XFx0YmFtX2RtdXhfZnJlZV9za2JzKGRtdXgtXFx1MDAzZXJ4X3NrYnMsIERNQV9GUk9NX0RFVklDRSk7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzA5LX1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03MTAtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzExOnN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03MTIte1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjcxMzpcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkYXRhO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTcxNC1cXHRib29sIG5ld19zdGF0ZSA9ICFkbXV4LVxcdTAwM2VwY19zdGF0ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTcxOC1cXHRpZiAobmV3X3N0YXRlKSB7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzE5OlxcdFxcdGlmIChiYW1fZG11eF9wb3dlcl9vbihkbXV4KSlcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo3MjA6XFx0XFx0XFx0YmFtX2RtdXhfcGNfYWNrKGRtdXgpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTcyMS1cXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzIyOlxcdFxcdFxcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03MjMtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo3MjQ6XFx0XFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjcyNTpcXHRcXHRiYW1fZG11eF9wY19hY2soZG11eCk7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzI2LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTczMy1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo3MzQ6c3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2Fja19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03MzUte1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjczNjpcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkYXRhO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTczNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc0My1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo3NDQ6c3RhdGljIGludCBiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc0NS17XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzQ2OlxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc0Ny1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03NDgtXFx0ZGV2X2RiZyhkZXYsIFxcXCJydW50aW1lIHN1c3BlbmRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjc0OTpcXHRiYW1fZG11eF9wY192b3RlKGRtdXgsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03NTAtXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03NTMtXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzU0OnN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc1NS17XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzU2OlxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc1Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc2NS1cXHQvKiBWb3RlIGZvciBwb3dlciBzdGF0ZSAqL1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjc2NjpcXHRiYW1fZG11eF9wY192b3RlKGRtdXgsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc2Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc3MC1cXHRcXHRcXHRcXHRcXHQgQkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKSB7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NzcxOlxcdFxcdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc3Mi1cXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTc3Ny1cXHRcXHRcXHRcXHRCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpIHtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo3Nzg6XFx0XFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzc5LVxcdFxcdHJldHVybiAtRVRJTUVET1VUO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzgzLVxcdGlmICghZG11eC1cXHUwMDNlcngpIHtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo3ODQ6XFx0XFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNzg1LVxcdFxcdHJldHVybiAtRU5YSU87XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03OTUtXFx0XFx0ZG11eC1cXHUwMDNldHggPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjc5NjpcXHRcXHRiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoZGV2KTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy03OTctXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTgwMi1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo4MDM6c3RhdGljIGludCBiYW1fZG11eF9hbGxvY19jb2hlcmVudF9yeChzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtODA0LXtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy04MDUtXFx0c3RydWN0IGRldmljZSAqZGV2ID0gZG11eC1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjgwNjpcXHRjb25zdCBzdHJ1Y3QgYmFtX2RtdXhfZGF0YSAqZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTgwNy1cXHRzaXplX3Qgc2l6ZSA9IEJBTV9ETVVYX05VTV9TS0IgKiBCQU1fRE1VWF9CVUZGRVJfU0laRTtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTg0My1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6NTI6MDIuNzY1NDY2ODE5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTEyNTAwMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBUaGUgYHFjb21fYmFtX2RtdXhgIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2gsIHdoaWNoIHRvdWNoZXMgYHFjb21fYmFtX2RtdXhgLCBpcyB3b3J0aCBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJOby5cIiBUaGVyZSdzIG5vIGVtdWxhdG9yLCB3aGljaCBtZWFucyBgcWNvbV9iYW1fZG11eGAgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLCBidXQgSSdtIHByZXR0eSBzdXJlIHRoYXQgbWFrZXMgaXQgdW5yZWFjaGFibGUgaW4gUUVNVSwgcmlnaHQ/XG5cblN5emthbGxlciB0ZXN0cyBwYXRjaGVzLCB5ZXMsIGFuZCBjb21waWxlcyB0aGUga2VybmVsLCBydW5zIGl0cyBjb3JwdXMuIEJ1dCBpZiB0aGUgY29kZSdzIG5ldmVyIGFjdHVhbGx5ICpleGVjdXRlZCogYmVjYXVzZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpc24ndCBlbXVsYXRlZCwgc3l6a2FsbGVyIHdpbGwganVzdCByZXBvcnQgXCJPS1wiIOKAkyBhIGZhbHNlIHBvc2l0aXZlLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFNvLCB0aGF0J3MgdGhlIHRocmVzaG9sZCBJIG5lZWQgdG8gbWVldC5cblxuTGV0IG1lIGRvdWJsZS1jaGVjay4gSXMgdGhlcmUgKmFueSogd2F5IHRvIHJlYWNoIHRoaXMgY29kZT8gQSBgcWNvbSxiYW0tZG11eGAgZGV2aWNlIGluICphbnkqIG9mIHRoZSBRRU1VIG1hY2hpbmVzPyBOb3BlLiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBRdWFsY29tbSBCQU0gRE1VWC4gQW5kIEknbSBub3QgYXdhcmUgb2YgYW55IG90aGVyIGRyaXZlciB0aGF0IGNvdWxkIHNvbWVob3cgdHJpZ2dlciBpdCBpbmRpcmVjdGx5LlxuXG5TbywgaGVyZSdzIG15IHJlYXNvbmluZywgYW5kIGl0J3MgcHJldHR5IHNvbGlkOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBxY29tX2JhbV9kbXV4YCBkcml2ZXIgdG8gc3VwcG9ydCBhIG5ldyBjb21wYXRpYmxlIHN0cmluZyBhbmQgYWxsb2NhdGVzIGEgY29oZXJlbnQgUlggYnVmZmVyIHVzaW5nIFNDTSBjYWxscy4gSG93ZXZlciwgdGhpcyBpcyBmb3IgYSB2ZXJ5IHNwZWNpZmljIFF1YWxjb21tIGhhcmR3YXJlIGJsb2NrIOKAkyB0aGUgQkFNIERhdGEgTXVsdGlwbGV4ZXIg4oCTIGFuZCByZXF1aXJlcyBhIGNvcnJlc3BvbmRpbmcgZGV2aWNlIHRyZWUgbm9kZSB0byBwcm9iZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgR0NFLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHRob3NlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBhZGQgdmFsdWUgZm9yIGZ1enppbmcgaW4gdGhlIHJlbGV2YW50IGVudmlyb25tZW50cy4gU28gaGVyZSdzIHRoZSByZXNwb25zZSBJIG5lZWQgdG8gZm9ybXVsYXRlOlxuXG5Xb3J0aEZ1enppbmc6IGZhbHNlXG5SZWFzb25pbmc6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHFjb21fYmFtX2RtdXhgIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIFF1YWxjb21tIGhhcmR3YXJlLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBjYW5ub3QgYmUgZnV6emVkLlxuRm9jdXNTeW1ib2xzOiBbXVxuRW5hYmxlQ29uZmlnczogW11cblxuXG4iLCJJbnB1dFRva2VucyI6NjczMDQsIk91dHB1dFRva2VucyI6OTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDk6NTI6MTguNjc3OTcxNzY5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBxY29tX2JhbV9kbXV4YCBkcml2ZXIsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBRdWFsY29tbSBoYXJkd2FyZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcWNvbV9iYW1fZG11eGAgZHJpdmVyLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgUXVhbGNvbW0gaGFyZHdhcmUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGNhbm5vdCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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,}