Name: series-workflowxft4k Phase: Failed StartedAt: 2026-06-30 07:01:30 +0000 UTC FinishedAt: 2026-06-30 07:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxft4k[0] Phase: Succeeded StartedAt: 2026-06-30 07:01:30 +0000 UTC FinishedAt: 2026-06-30 07:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxft4k[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 07:01:30 +0000 UTC FinishedAt: 2026-06-30 07:24:06 +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+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHByb2JlIGxvZ2ljIGZvciB0aGUgTWFydmVsbCBORVRBIEJ1ZmZlciBNYW5hZ2VyIChtdm5ldGFfYm0pLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRldmljZSBzcGVjaWZpYyB0byBNYXJ2ZWxsIEFybWFkYSBTb0NzLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSYjMzk7cyAmIzM5O3ZpcnQmIzM5OyBtYWNoaW5lKSB1c2VkIGJ5IGZ1enplcnMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMjVlNzA1OGQ0MmZlMjQ0Njk4YjFkNDVmZTNmZjIzMmVkZDFiMDNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMDc6MjE6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcbmluZGV4IDc0NGQ2NTg1YTk0OWQxLi41NDNlNTY2NDI1YzFlNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcbkBAIC01Njc4LDYgJiM0Mzs1Njc4LDI0IEBAIHN0YXRpYyBpbnQgbXZuZXRhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRcdFx0XHRcdCBcJiMzNDt1c2UgU1cgYnVmZmVyIG1hbmFnZW1lbnRcXG5cJiMzNDspO1xuIFx0XHRcdFx0bXZuZXRhX2JtX3B1dChwcC1cdTAwM2VibV9wcml2KTtcbiBcdFx0XHRcdHBwLVx1MDAzZWJtX3ByaXYgPSBOVUxMO1xuJiM0MztcdFx0XHR9IGVsc2UgaWYgKCFkZXZpY2VfbGlua19hZGQoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBcdTAwMjZwcC1cdTAwM2VibV9wcml2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuJiM0MztcdFx0XHRcdC8qXG4mIzQzO1x0XHRcdFx0ICogTGluayBndWFyYW50ZWVzIEJNIHJlc3VtZXMgYmVmb3JlIG12bmV0YS5cbiYjNDM7XHRcdFx0XHQgKiBXaXRob3V0IGl0LCBCTSBtYXkgbm90IGJlIHJlYWR5IHdoZW5cbiYjNDM7XHRcdFx0XHQgKiBtdm5ldGFfYm1fcG9ydF9pbml0KCkgcnVucyBvbiByZXN1bWUsXG4mIzQzO1x0XHRcdFx0ICogY2F1c2luZyBzdGFsZSBidWZmZXIgYWRkcmVzc2VzIGFuZCBhIGNyYXNoLlxuJiM0MztcdFx0XHRcdCAqIEZhbGwgYmFjayB0byBTVyBtYW5hZ2VtZW50IHRvIGJlIHNhZmUuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7ZmFpbGVkIHRvIGxpbmsgdG8gQk0sIHVzZSBTVyBidWZmZXIgbWFuYWdlbWVudFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0bXZuZXRhX2JtX3Bvb2xfZGVzdHJveShwcC1cdTAwM2VibV9wcml2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgcHAtXHUwMDNlcG9vbF9sb25nLCAxIFx1MDAzY1x1MDAzYyBwcC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRcdFx0bXZuZXRhX2JtX3Bvb2xfZGVzdHJveShwcC1cdTAwM2VibV9wcml2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgcHAtXHUwMDNlcG9vbF9zaG9ydCwgMSBcdTAwM2NcdTAwM2MgcHAtXHUwMDNlaWQpO1xuJiM0MztcdFx0XHRcdG12bmV0YV9ibV9wdXQocHAtXHUwMDNlYm1fcHJpdik7XG4mIzQzO1x0XHRcdFx0cHAtXHUwMDNlYm1fcHJpdiA9IE5VTEw7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdC8qIFNldCBSWCBwYWNrZXQgb2Zmc2V0IGNvcnJlY3Rpb24gZm9yIHBsYXRmb3Jtcywgd2hvc2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YV9ibS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uY1xuaW5kZXggNmJiMzgwNDk0OTE5MDYuLmUwYzY5M2MwYTkxMDYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uY1xuQEAgLTEyOSw2ICYjNDM7MTI5LDcgQEAgc3RhdGljIGludCBtdm5ldGFfYm1fcG9vbF9jcmVhdGUoc3RydWN0IG12bmV0YV9ibSAqcHJpdixcbiBcdGlmICghSVNfQUxJR05FRCgodTMyKWJtX3Bvb2wtXHUwMDNldmlydF9hZGRyLCBNVk5FVEFfQk1fUE9PTF9QVFJfQUxJR04pKSB7XG4gXHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplX2J5dGVzLCBibV9wb29sLVx1MDAzZXZpcnRfYWRkcixcbiBcdFx0XHRcdCAgYm1fcG9vbC1cdTAwM2VwaHlzX2FkZHIpO1xuJiM0MztcdFx0Ym1fcG9vbC1cdTAwM2V2aXJ0X2FkZHIgPSBOVUxMO1xuIFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtCTSBwb29sICVkIGlzIG5vdCAlZCBieXRlcyBhbGlnbmVkXFxuXCYjMzQ7LFxuIFx0XHRcdGJtX3Bvb2wtXHUwMDNlaWQsIE1WTkVUQV9CTV9QT09MX1BUUl9BTElHTik7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTEzOSw2ICYjNDM7MTQwLDcgQEAgc3RhdGljIGludCBtdm5ldGFfYm1fcG9vbF9jcmVhdGUoc3RydWN0IG12bmV0YV9ibSAqcHJpdixcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVfYnl0ZXMsIGJtX3Bvb2wtXHUwMDNldmlydF9hZGRyLFxuIFx0XHRcdFx0ICBibV9wb29sLVx1MDAzZXBoeXNfYWRkcik7XG4mIzQzO1x0XHRibV9wb29sLVx1MDAzZXZpcnRfYWRkciA9IE5VTEw7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG5AQCAtNDc3LDYgJiM0Mzs0NzksNzUgQEAgc3RhdGljIHZvaWQgbXZuZXRhX2JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlY2xrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXZuZXRhX2JtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG12bmV0YV9ibSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBEcmFpbiBidWZmZXJzIGFuZCBmcmVlIHBvb2wgcmVzb3VyY2VzIHdoaWxlIEJNIGlzIHN0aWxsIGNsb2NrZWQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNVk5FVEFfQk1fUE9PTFNfTlVNOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IG12bmV0YV9ibV9wb29sICpibV9wb29sID0gXHUwMDI2cHJpdi1cdTAwM2VibV9wb29sc1tpXTtcbiYjNDM7XHRcdGludCBzaXplX2J5dGVzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChibV9wb29sLVx1MDAzZXR5cGUgPT0gTVZORVRBX0JNX0ZSRUUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG12bmV0YV9ibV9idWZzX2ZyZWUocHJpdiwgYm1fcG9vbCwgYm1fcG9vbC1cdTAwM2Vwb3J0X21hcCk7XG4mIzQzO1x0XHRpZiAoYm1fcG9vbC1cdTAwM2Vod2JtX3Bvb2wuYnVmX251bSlcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7cG9vbCAlZDogJWQgYnVmZmVycyBub3QgZnJlZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IGJtX3Bvb2wtXHUwMDNlaWQsIGJtX3Bvb2wtXHUwMDNlaHdibV9wb29sLmJ1Zl9udW0pO1xuJiM0MztcbiYjNDM7XHRcdG12bmV0YV9ibV9wb29sX2Rpc2FibGUocHJpdiwgYm1fcG9vbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGJtX3Bvb2wtXHUwMDNldmlydF9hZGRyKSB7XG4mIzQzO1x0XHRcdHNpemVfYnl0ZXMgPSBzaXplb2YodTMyKSAqIGJtX3Bvb2wtXHUwMDNlaHdibV9wb29sLnNpemU7XG4mIzQzO1x0XHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnByaXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIHNpemVfYnl0ZXMsXG4mIzQzO1x0XHRcdFx0XHQgIGJtX3Bvb2wtXHUwMDNldmlydF9hZGRyLFxuJiM0MztcdFx0XHRcdFx0ICBibV9wb29sLVx1MDAzZXBoeXNfYWRkcik7XG4mIzQzO1x0XHRcdGJtX3Bvb2wtXHUwMDNldmlydF9hZGRyID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBTYWZlIHRvIGRlc3Ryb3k6IGRldmljZV9saW5rIGd1YXJhbnRlZXMgYWxsIG12bmV0YSBwb3J0c1xuJiM0MztcdFx0ICogaGF2ZSBhbHJlYWR5IHN1c3BlbmRlZCwgc28gbm8gaHdibV9wb29sX2FkZCgpIGNhbiBiZSBpblxuJiM0MztcdFx0ICogcHJvZ3Jlc3MgaG9sZGluZyBidWZfbG9jay4gIFBhaXJzIHdpdGggbXV0ZXhfaW5pdCgpIGluXG4mIzQzO1x0XHQgKiBtdm5ldGFfYm1fcG9vbF91c2UoKSBvbiByZXN1bWUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2Ym1fcG9vbC1cdTAwM2Vod2JtX3Bvb2wuYnVmX2xvY2spO1xuJiM0MztcdFx0Ym1fcG9vbC1cdTAwM2V0eXBlID0gTVZORVRBX0JNX0ZSRUU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX0NPTU1BTkRfUkVHLCBNVk5FVEFfQk1fU1RPUF9NQVNLKTtcbiYjNDM7XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG12bmV0YV9ibV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG12bmV0YV9ibSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcdGludCBpLCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFJlaW5pdGlhbGl6ZSBCTSBoYXJkd2FyZTsgcG9vbHMgYXJlIHJlZmlsbGVkIGJ5IG12bmV0YV9yZXN1bWUoKSAqL1xuJiM0MztcdG12bmV0YV9ibV9kZWZhdWx0X3NldChwcml2KTtcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSBwb29sIHJlZ2lzdGVycyBsb3N0IGR1cmluZyBjbG9jayBnYXRpbmcgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNVk5FVEFfQk1fUE9PTFNfTlVNOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0bXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9QT09MX1JFQURfUFRSX1JFRyhpKSwgMCk7XG4mIzQzO1x0XHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX1BPT0xfV1JJVEVfUFRSX1JFRyhpKSwgMCk7XG4mIzQzO1x0XHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX1BPT0xfU0laRV9SRUcoaSksXG4mIzQzO1x0XHRcdFx0cHJpdi1cdTAwM2VibV9wb29sc1tpXS5od2JtX3Bvb2wuc2l6ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX0NPTU1BTkRfUkVHLCBNVk5FVEFfQk1fU1RBUlRfTUFTSyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfU0lNUExFX0RFVl9QTV9PUFMobXZuZXRhX2JtX3BtX29wcywgbXZuZXRhX2JtX3N1c3BlbmQsIG12bmV0YV9ibV9yZXN1bWUpO1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdm5ldGFfYm1fbWF0Y2hbXSA9IHtcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttYXJ2ZWxsLGFybWFkYS0zODAtbmV0YS1ibVwmIzM0OyB9LFxuIFx0eyB9XG5AQCAtNDg5LDYgJiM0Mzs1NjAsNyBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdm5ldGFfYm1fZHJpdmVyID0ge1xuIFx0LmRyaXZlciA9IHtcbiBcdFx0Lm5hbWUgPSBNVk5FVEFfQk1fRFJJVkVSX05BTUUsXG4gXHRcdC5vZl9tYXRjaF90YWJsZSA9IG12bmV0YV9ibV9tYXRjaCxcbiYjNDM7XHRcdC5wbSA9IHBtX3NsZWVwX3B0cihcdTAwMjZtdm5ldGFfYm1fcG1fb3BzKSxcbiBcdH0sXG4gfTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNzoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwb3dlciBtYW5hZ2VtZW50IGFuZCBwcm9iZSBsb2dpYyBmb3IgdGhlIE1hcnZlbGwgTkVUQSBCdWZmZXIgTWFuYWdlciAobXZuZXRhX2JtKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkZXZpY2Ugc3BlY2lmaWMgdG8gTWFydmVsbCBBcm1hZGEgU29Dcy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUmIzM5O3MgJiMzOTt2aXJ0JiMzOTsgbWFjaGluZSkgdXNlZCBieSBmdXp6ZXJzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMjVlNzA1OGQ0MmZlMjQ0Njk4YjFkNDVmZTNmZjIzMmVkZDFiMDNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMDc6MjE6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYwppbmRleCA3NDRkNjU4NWE5NDlkMS4uNTQzZTU2NjQyNWMxZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYwpAQCAtNTY3OCw2ICYjNDM7NTY3OCwyNCBAQCBzdGF0aWMgaW50IG12bmV0YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQkJCQkgJiMzNDt1c2UgU1cgYnVmZmVyIG1hbmFnZW1lbnRcbiYjMzQ7KTsKIAkJCQltdm5ldGFfYm1fcHV0KHBwLSZndDtibV9wcml2KTsKIAkJCQlwcC0mZ3Q7Ym1fcHJpdiA9IE5VTEw7CiYjNDM7CQkJfSBlbHNlIGlmICghZGV2aWNlX2xpbmtfYWRkKCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJCSAgICAmYW1wO3BwLSZndDtibV9wcml2LSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkJICAgIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogTGluayBndWFyYW50ZWVzIEJNIHJlc3VtZXMgYmVmb3JlIG12bmV0YS4KJiM0MzsJCQkJICogV2l0aG91dCBpdCwgQk0gbWF5IG5vdCBiZSByZWFkeSB3aGVuCiYjNDM7CQkJCSAqIG12bmV0YV9ibV9wb3J0X2luaXQoKSBydW5zIG9uIHJlc3VtZSwKJiM0MzsJCQkJICogY2F1c2luZyBzdGFsZSBidWZmZXIgYWRkcmVzc2VzIGFuZCBhIGNyYXNoLgomIzQzOwkJCQkgKiBGYWxsIGJhY2sgdG8gU1cgbWFuYWdlbWVudCB0byBiZSBzYWZlLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJZGV2X3dhcm4oJmFtcDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkgJiMzNDtmYWlsZWQgdG8gbGluayB0byBCTSwgdXNlIFNXIGJ1ZmZlciBtYW5hZ2VtZW50XG4mIzM0Oyk7CiYjNDM7CQkJCW12bmV0YV9ibV9wb29sX2Rlc3Ryb3kocHAtJmd0O2JtX3ByaXYsCiYjNDM7CQkJCQkJICAgICAgIHBwLSZndDtwb29sX2xvbmcsIDEgJmx0OyZsdDsgcHAtJmd0O2lkKTsKJiM0MzsJCQkJbXZuZXRhX2JtX3Bvb2xfZGVzdHJveShwcC0mZ3Q7Ym1fcHJpdiwKJiM0MzsJCQkJCQkgICAgICAgcHAtJmd0O3Bvb2xfc2hvcnQsIDEgJmx0OyZsdDsgcHAtJmd0O2lkKTsKJiM0MzsJCQkJbXZuZXRhX2JtX3B1dChwcC0mZ3Q7Ym1fcHJpdik7CiYjNDM7CQkJCXBwLSZndDtibV9wcml2ID0gTlVMTDsKIAkJCX0KIAkJfQogCQkvKiBTZXQgUlggcGFja2V0IG9mZnNldCBjb3JyZWN0aW9uIGZvciBwbGF0Zm9ybXMsIHdob3NlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YV9ibS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uYwppbmRleCA2YmIzODA0OTQ5MTkwNi4uZTBjNjkzYzBhOTEwNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhX2JtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uYwpAQCAtMTI5LDYgJiM0MzsxMjksNyBAQCBzdGF0aWMgaW50IG12bmV0YV9ibV9wb29sX2NyZWF0ZShzdHJ1Y3QgbXZuZXRhX2JtICpwcml2LAogCWlmICghSVNfQUxJR05FRCgodTMyKWJtX3Bvb2wtJmd0O3ZpcnRfYWRkciwgTVZORVRBX0JNX1BPT0xfUFRSX0FMSUdOKSkgewogCQlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2Rldiwgc2l6ZV9ieXRlcywgYm1fcG9vbC0mZ3Q7dmlydF9hZGRyLAogCQkJCSAgYm1fcG9vbC0mZ3Q7cGh5c19hZGRyKTsKJiM0MzsJCWJtX3Bvb2wtJmd0O3ZpcnRfYWRkciA9IE5VTEw7CiAJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7Qk0gcG9vbCAlZCBpcyBub3QgJWQgYnl0ZXMgYWxpZ25lZFxuJiMzNDssCiAJCQlibV9wb29sLSZndDtpZCwgTVZORVRBX0JNX1BPT0xfUFRSX0FMSUdOKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMzksNiAmIzQzOzE0MCw3IEBAIHN0YXRpYyBpbnQgbXZuZXRhX2JtX3Bvb2xfY3JlYXRlKHN0cnVjdCBtdm5ldGFfYm0gKnByaXYsCiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJZG1hX2ZyZWVfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVfYnl0ZXMsIGJtX3Bvb2wtJmd0O3ZpcnRfYWRkciwKIAkJCQkgIGJtX3Bvb2wtJmd0O3BoeXNfYWRkcik7CiYjNDM7CQlibV9wb29sLSZndDt2aXJ0X2FkZHIgPSBOVUxMOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNDc3LDYgJiM0Mzs0NzksNzUgQEAgc3RhdGljIHZvaWQgbXZuZXRhX2JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LSZndDtjbGspOwogfQogCiYjNDM7c3RhdGljIGludCBtdm5ldGFfYm1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXZuZXRhX2JtICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiBEcmFpbiBidWZmZXJzIGFuZCBmcmVlIHBvb2wgcmVzb3VyY2VzIHdoaWxlIEJNIGlzIHN0aWxsIGNsb2NrZWQgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1WTkVUQV9CTV9QT09MU19OVU07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgbXZuZXRhX2JtX3Bvb2wgKmJtX3Bvb2wgPSAmYW1wO3ByaXYtJmd0O2JtX3Bvb2xzW2ldOwomIzQzOwkJaW50IHNpemVfYnl0ZXM7CiYjNDM7CiYjNDM7CQlpZiAoYm1fcG9vbC0mZ3Q7dHlwZSA9PSBNVk5FVEFfQk1fRlJFRSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCW12bmV0YV9ibV9idWZzX2ZyZWUocHJpdiwgYm1fcG9vbCwgYm1fcG9vbC0mZ3Q7cG9ydF9tYXApOwomIzQzOwkJaWYgKGJtX3Bvb2wtJmd0O2h3Ym1fcG9vbC5idWZfbnVtKQomIzQzOwkJCWRldl93YXJuKCZhbXA7cHJpdi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtwb29sICVkOiAlZCBidWZmZXJzIG5vdCBmcmVlZFxuJiMzNDssCiYjNDM7CQkJCSBibV9wb29sLSZndDtpZCwgYm1fcG9vbC0mZ3Q7aHdibV9wb29sLmJ1Zl9udW0pOwomIzQzOwomIzQzOwkJbXZuZXRhX2JtX3Bvb2xfZGlzYWJsZShwcml2LCBibV9wb29sLSZndDtpZCk7CiYjNDM7CiYjNDM7CQlpZiAoYm1fcG9vbC0mZ3Q7dmlydF9hZGRyKSB7CiYjNDM7CQkJc2l6ZV9ieXRlcyA9IHNpemVvZih1MzIpICogYm1fcG9vbC0mZ3Q7aHdibV9wb29sLnNpemU7CiYjNDM7CQkJZG1hX2ZyZWVfY29oZXJlbnQoJmFtcDtwcml2LSZndDtwZGV2LSZndDtkZXYsIHNpemVfYnl0ZXMsCiYjNDM7CQkJCQkgIGJtX3Bvb2wtJmd0O3ZpcnRfYWRkciwKJiM0MzsJCQkJCSAgYm1fcG9vbC0mZ3Q7cGh5c19hZGRyKTsKJiM0MzsJCQlibV9wb29sLSZndDt2aXJ0X2FkZHIgPSBOVUxMOwomIzQzOwkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIFNhZmUgdG8gZGVzdHJveTogZGV2aWNlX2xpbmsgZ3VhcmFudGVlcyBhbGwgbXZuZXRhIHBvcnRzCiYjNDM7CQkgKiBoYXZlIGFscmVhZHkgc3VzcGVuZGVkLCBzbyBubyBod2JtX3Bvb2xfYWRkKCkgY2FuIGJlIGluCiYjNDM7CQkgKiBwcm9ncmVzcyBob2xkaW5nIGJ1Zl9sb2NrLiAgUGFpcnMgd2l0aCBtdXRleF9pbml0KCkgaW4KJiM0MzsJCSAqIG12bmV0YV9ibV9wb29sX3VzZSgpIG9uIHJlc3VtZS4KJiM0MzsJCSAqLwomIzQzOwkJbXV0ZXhfZGVzdHJveSgmYW1wO2JtX3Bvb2wtJmd0O2h3Ym1fcG9vbC5idWZfbG9jayk7CiYjNDM7CQlibV9wb29sLSZndDt0eXBlID0gTVZORVRBX0JNX0ZSRUU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9DT01NQU5EX1JFRywgTVZORVRBX0JNX1NUT1BfTUFTSyk7CiYjNDM7CWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LSZndDtjbGspOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtdm5ldGFfYm1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtdm5ldGFfYm0gKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwkvKiBSZWluaXRpYWxpemUgQk0gaGFyZHdhcmU7IHBvb2xzIGFyZSByZWZpbGxlZCBieSBtdm5ldGFfcmVzdW1lKCkgKi8KJiM0MzsJbXZuZXRhX2JtX2RlZmF1bHRfc2V0KHByaXYpOwomIzQzOwomIzQzOwkvKiBSZXN0b3JlIHBvb2wgcmVnaXN0ZXJzIGxvc3QgZHVyaW5nIGNsb2NrIGdhdGluZyAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTVZORVRBX0JNX1BPT0xTX05VTTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW12bmV0YV9ibV93cml0ZShwcml2LCBNVk5FVEFfQk1fUE9PTF9SRUFEX1BUUl9SRUcoaSksIDApOwomIzQzOwkJbXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9QT09MX1dSSVRFX1BUUl9SRUcoaSksIDApOwomIzQzOwkJbXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9QT09MX1NJWkVfUkVHKGkpLAomIzQzOwkJCQlwcml2LSZndDtibV9wb29sc1tpXS5od2JtX3Bvb2wuc2l6ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9DT01NQU5EX1JFRywgTVZORVRBX0JNX1NUQVJUX01BU0spOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9TSU1QTEVfREVWX1BNX09QUyhtdm5ldGFfYm1fcG1fb3BzLCBtdm5ldGFfYm1fc3VzcGVuZCwgbXZuZXRhX2JtX3Jlc3VtZSk7CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdm5ldGFfYm1fbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gJiMzNDttYXJ2ZWxsLGFybWFkYS0zODAtbmV0YS1ibSYjMzQ7IH0sCiAJeyB9CkBAIC00ODksNiAmIzQzOzU2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12bmV0YV9ibV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSBNVk5FVEFfQk1fRFJJVkVSX05BTUUsCiAJCS5vZl9tYXRjaF90YWJsZSA9IG12bmV0YV9ibV9tYXRjaCwKJiM0MzsJCS5wbSA9IHBtX3NsZWVwX3B0cigmYW1wO212bmV0YV9ibV9wbV9vcHMpLAogCX0sCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0b3VjaGluZyBgbXZuZXRhLmNgIGFuZCBgbXZuZXRhX2JtLmNgIOKAkyBzcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBwb3dlciBtYW5hZ2VtZW50IGhvb2tzLCBzdXNwZW5kL3Jlc3VtZSwgZm9yIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBkZXZpY2UgbGluaywgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIGZvciBlbnN1cmluZyBwcm9wZXIgZGV2aWNlIG9yZGVyaW5nIGR1cmluZyBwb3dlciB0cmFuc2l0aW9ucywgYW5kIGZpeGVzIGEgcG9zc2libGUgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBtdm5ldGFfYm1fcG9vbF9jcmVhdGVgIGFmdGVyIGEgYGRtYV9mcmVlX2NvaGVyZW50YCBjYWxsLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGV2ZW4gd29ydGggZGlnZ2luZyBpbnRvIGZvciBmdXp6aW5nPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY29kZSYjMzk7cyByZWFjaGFiaWxpdHkuIFRoaXMgZHJpdmVyIHRhcmdldHMgTWFydmVsbCBBcm1hZGEgMzgwLzM4eCBTb0NzLiBUaG9zZSBhcmUgZ2VuZXJhbGx5ICpub3QqIGVhc2lseSBhY2Nlc3NpYmxlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBTb0Mtc3BlY2lmaWMgRXRoZXJuZXQgZHJpdmVycyBjYW4gYmUgYSBwYWluIGluIFFFTVUgdW5sZXNzIHlvdSBoYXZlIGEgZGVkaWNhdGVkIG1hY2hpbmUgbW9kZWwgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgZm9yIHRoZSB0YXJnZXQgaGFyZHdhcmUsIG9yIGlmIGl0IHByZXNlbnRzIGFzIGEgUENJIGRldmljZS4gU28sIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhlIGRldmljZSYjMzk7cyBzZXR1cCB0byBzZWUgaXRzIHJlYWNoYWJpbGl0eS4KCkxldCYjMzk7cyBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgYE1WTkVUQWAgYW5kIGBNVk5FVEFfQk1gIHN5bWJvbHMsIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgZWFzeSB3YXkgdG8gZW5hYmxlIHRoaXMgaW4gYSBtb3JlIGdlbmVyYWwgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVZORVRBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz0zND1jb25maWcgTVZNRElPXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjQ1OmNvbmZpZyBNVk5FVEFfQk1fRU5BQkxFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIEFybWFkYSAzOHgvWFAgbmV0d29yayBpbnRlcmZhY2UgQk0gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy01OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo1OTpjb25maWcgTVZORVRBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjAtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIEFybWFkYSAzNzAvMzh4L1hQLzM3eHggbmV0d29yayBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy03NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo3NTpjb25maWcgTVZORVRBX0JNXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNzYtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNYXJ2ZWxsIEFybWFkYSBOZXR3b3JrIERyaXZlciBpbiBSZWxhdGlvbiB0byBRRU1VIGFuZCBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgJiMzNDtNYXJ2ZWxsIEFybWFkYSAzNzAvMzh4L1hQLzM3eHggbmV0d29yayBpbnRlcmZhY2Ugc3VwcG9ydC4mIzM0OyBJdCYjMzk7cyBhIGBwbGF0Zm9ybV9kcml2ZXJgLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBRRU1VIGVtdWxhdGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgKnJlYXNvbmFibHkqIGVtdWxhdGUgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciB3aXRoaW4gUUVNVT8gSSBuZWVkIHRvIGNoZWNrIHdoaWNoIEFSTSBib2FyZHMgUUVNVSAqYWN0dWFsbHkqIHN1cHBvcnRzLCBhbmQgc3BlY2lmaWNhbGx5IGlmIGFueSBvZiB0aG9zZSBib2FyZHMgYXJlIEFybWFkYSAzODAvMzh4L1hQIGJhc2VkLiBJZiBub3QsIHRoaXMgaXMgZ29pbmcgdG8gYmUgYSB0b3VnaCByb2FkLgoKTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIHBsYXRmb3JtIGRldmljZSBkcml2ZXJzLCBkZXNpZ25lZCBmb3Igc3BlY2lmaWMgU29DcywgYXJlIHJhcmVseSBlYXNpbHkgZnV6emFibGUgKnVubGVzcyogd2UgaGF2ZSBhIFFFTVUgbWFjaGluZSBmb3IgdGhhdCBleGFjdCBwbGF0Zm9ybS4gT3IsIGZhaWxpbmcgUUVNVSwgdGhlcmUgbmVlZHMgdG8gYmUgc29tZSB3YXkgdG8gaW5qZWN0IHRoZSBwbGF0Zm9ybSBkZXZpY2UuIFN5emthbGxlciYjMzk7cyBwc2V1ZG8tZGV2aWNlIGluamVjdGlvbiBjb21lcyB0byBtaW5kLCBidXQgdGhhdCYjMzk7cyBub3QgdGhlIHVzdWFsIGNhc2UuIFN5emthbGxlciBnZW5lcmFsbHkgZG9lc24mIzM5O3QgaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGRlc2NyaXB0aW9uIHByb3ZpZGVkLiBJIGRvIG5lZWQgdG8gcmVjYWxsIGlmIFN5emthbGxlciBoYXMgYW55ICpzdXBwb3J0KiBmb3IgaW5qZWN0aW5nIHBsYXRmb3JtIGRldmljZXMsIHByb3ZpZGVkIHRoZXkgaGF2ZSBhIGRldmljZSBkZXNjcmlwdGlvbiwgYnV0IHRoZSBjaGFuY2VzIG9mIGl0IGJlaW5nIGFibGUgdG8gaGFuZGxlIGEgcmFuZG9tIFNvQyBldGhlcm5ldCBkcml2ZXIgYXJlIHVzdWFsbHkgcHJldHR5IHNsaW0uCgpPa2F5LCBsZXQgbWUgZWxpbWluYXRlIHNvbWUgb2YgdGhlc2UgZG91YnRzOiBpcyB0aGUgYE1WTkVUQWAgaW50ZXJmYWNlIGEgUENJIGRldmljZT8gUXVpY2sgY2hlY2suLi4gbm9wZSwgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkZXZpY2UuIE5vdywgSSBuZWVkIHRvIGxvb2sgZGlyZWN0bHkgYXQgdGhlIGRyaXZlciBjb2RlIGl0c2VsZi4gSSYjMzk7bGwgb3BlbiB1cCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuY2AgYW5kIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBhIGBwbGF0Zm9ybV9kcml2ZXJgIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsYXRmb3JtX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYz01OTM3PU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG12bmV0YV9tYXRjaCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jLTU5MzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jOjU5Mzk6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZuZXRhX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtNTk0MC1cdC5wcm9iZSA9IG12bmV0YV9wcm9iZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jPTU5NDk9c3RhdGljIGludCBfX2luaXQgbXZuZXRhX2RyaXZlcl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01OTY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYzo1OTY2Olx0cmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNm12bmV0YV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01OTY3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jPTU5ODA9c3RhdGljIHZvaWQgX19leGl0IG12bmV0YV9kcml2ZXJfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01OTgxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM6NTk4MjpcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNm12bmV0YV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01OTgzLVx0Y3B1aHBfcmVtb3ZlX211bHRpX3N0YXRlKENQVUhQX05FVF9NVk5FVEFfREVBRCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ0MwoJCQkJCQkJb3V0cHV0OiAxMDIKCQkJCQkJCXRob3VnaHRzOiAzNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZTogUGxhdGZvcm0gRGV2aWNlIGluIGEgVmlydHVhbGl6ZWQgV29ybGQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQmIzM5O3MgYSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBhIHBsYXRmb3JtIGRldmljZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtJcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudD8mIzM0OyBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIG5vLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCB0aGUgQXJtYWRhIDM4eCBTb0MuIFVubGVzcyBRRU1VIHNwZWNpZmljYWxseSBlbXVsYXRlcyAqdGhhdCogcGFydGljdWxhciBTb0MsIHdlJiMzOTtyZSBsaWtlbHkgb3V0IG9mIGx1Y2suCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgUUVNVSBldmVuICpoYXMqIEFybWFkYSAzOHggc3VwcG9ydC4gSG1tLCB5ZWFoLCBJIGRvbiYjMzk7dCB0aGluayBpdCBkb2VzLCBhbmQgZXZlbiBpZiBpdCBkaWQsIFN5emthbGxlciwgd2hpY2ggaXMgd2hhdCB3ZSYjMzk7cmUgcHJvYmFibHkgdXNpbmcgZm9yIGZ1enppbmcgaGVyZSwgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGJvb3Qgd2l0aCB0aGF0IHNwZWNpZmljIG1hY2hpbmUgdHlwZSBhbnl3YXkuIFN5emthbGxlciBzdGlja3MgdG8gYHZpcnRgIGZvciBBUk02NCwgYW5kIG1heWJlIGB2ZXhwcmVzc2Agb3IgYHZpcnRgIGZvciBBUk0zMi4gU28sIHRoaXMgY29kZSBwYXRoIGlzIHByZXR0eSBtdWNoIGRlYWQgaW4gdGhlIHdhdGVyIGFzIGZhciBhcyBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBnb2VzLgoKU28sIHNpbmNlIGl0JiMzOTtzIHVucmVhY2hhYmxlIGluIHRob3NlIGVudmlyb25tZW50cywgbXkgZmlyc3QgY29uY2x1c2lvbiBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBmYWxzZWAuCgpCdXQsIGxldCYjMzk7cyBkb3VibGUgY2hlY2suIEp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyAqYW55KiBvdGhlciBwb3NzaWJsZSBhbmdsZS4gT2theSwgdGhlIHBhdGNoIG1vZGlmaWVzIGBtdm5ldGFfcHJvYmVgIHRvIGFkZCBhIGRldmljZSBsaW5rLCBhbmQgaXQgYWxzbyBhZGRzIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9ucyB0byBgbXZuZXRhX2JtLmNgLiBUaGUgc3VzcGVuZC9yZXN1bWUgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBkdXJpbmcgc3lzdGVtIHN1c3BlbmQvcmVzdW1lLCB3aGljaCBtZWFucyB0aGV5JiMzOTtsbCBvbmx5IGJlIHRyaWdnZXJlZCBpZiB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IHByb2JlZC4KCkFuZCBzaW5jZSB0aGlzIGRldmljZSBpcyBhIHBsYXRmb3JtIGRldmljZSwgYm91bmQgdmlhIGEgZGV2aWNlIHRyZWUgZW50cnkgKGBtYXJ2ZWxsLGFybWFkYS0zODAtbmV0YS1ibWApLCB0aGUga2VybmVsIHdpbGwgb25seSBwcm9iZSBpdCBpZiB0aGF0IG5vZGUgaXMgcHJlc2VudCBpbiB0aGUgRFQuIFRoZSB0aGluZyBpcywgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGp1c3QgZHluYW1pY2FsbHkgYWRkIGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcyBmb3IgcGxhdGZvcm0gZGV2aWNlcy4gU28sIHRoYXQmIzM5O3MgYW5vdGhlciBkZWFkIGVuZC4gSXQmIzM5O3MgdW5yZWFjaGFibGUuCgpPa2F5LCB0aGF0IHNlYWxzIGl0LiBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nID0gZmFsc2VgLiBUaGUgbG9naWMgY2hhbmdlcyBwb3dlciBtYW5hZ2VtZW50IGFuZCBwcm9iZSBsb2dpYyBmb3IgdGhlIE1hcnZlbGwgTkVUQSBCdWZmZXIgTWFuYWdlci4gVGhlIE1hcnZlbGwgTkVUQSBCdWZmZXIgTWFuYWdlciBpcyBvbmx5IGF2YWlsYWJsZSBvbiBNYXJ2ZWxsIEFybWFkYSAzOHggU29Dcy4gQW5kIHRoYXQgaXMgbm90IHNvbWV0aGluZyB0aGF0IGlzIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggbWFrZXMgdGhpcyBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcG93ZXIgbWFuYWdlbWVudCBhbmQgcHJvYmUgbG9naWMgZm9yIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIgKG12bmV0YV9ibSksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZGV2aWNlIHNwZWNpZmljIHRvIE1hcnZlbGwgQXJtYWRhIFNvQ3MuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VJiMzOTtzICYjMzk7dmlydCYjMzk7IG1hY2hpbmUpIHVzZWQgYnkgZnV6emVycywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcG93ZXIgbWFuYWdlbWVudCBhbmQgcHJvYmUgbG9naWMgZm9yIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIgKG12bmV0YV9ibSksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZGV2aWNlIHNwZWNpZmljIHRvIE1hcnZlbGwgQXJtYWRhIFNvQ3MuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VJiMzOTtzICYjMzk7dmlydCYjMzk7IG1hY2hpbmUpIHVzZWQgYnkgZnV6emVycywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjIxOjMzLjA2MzMwNjQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NTk3MzQ3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHByb2JlIGxvZ2ljIGZvciB0aGUgTWFydmVsbCBORVRBIEJ1ZmZlciBNYW5hZ2VyIChtdm5ldGFfYm0pLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRldmljZSBzcGVjaWZpYyB0byBNYXJ2ZWxsIEFybWFkYSBTb0NzLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSdzICd2aXJ0JyBtYWNoaW5lKSB1c2VkIGJ5IGZ1enplcnMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjIxOjMzLjA2MzMxMzczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA1NDQ2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMjVlNzA1OGQ0MmZlMjQ0Njk4YjFkNDVmZTNmZjIzMmVkZDFiMDNmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDA3OjIxOjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jXFxuaW5kZXggNzQ0ZDY1ODVhOTQ5ZDEuLjU0M2U1NjY0MjVjMWU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jXFxuQEAgLTU2NzgsNiArNTY3OCwyNCBAQCBzdGF0aWMgaW50IG12bmV0YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHRcXHRcXHRcXHQgXFxcInVzZSBTVyBidWZmZXIgbWFuYWdlbWVudFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdG12bmV0YV9ibV9wdXQocHAtXFx1MDAzZWJtX3ByaXYpO1xcbiBcXHRcXHRcXHRcXHRwcC1cXHUwMDNlYm1fcHJpdiA9IE5VTEw7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoIWRldmljZV9saW5rX2FkZChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnBwLVxcdTAwM2VibV9wcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XFxuK1xcdFxcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdFxcdCAqIExpbmsgZ3VhcmFudGVlcyBCTSByZXN1bWVzIGJlZm9yZSBtdm5ldGEuXFxuK1xcdFxcdFxcdFxcdCAqIFdpdGhvdXQgaXQsIEJNIG1heSBub3QgYmUgcmVhZHkgd2hlblxcbitcXHRcXHRcXHRcXHQgKiBtdm5ldGFfYm1fcG9ydF9pbml0KCkgcnVucyBvbiByZXN1bWUsXFxuK1xcdFxcdFxcdFxcdCAqIGNhdXNpbmcgc3RhbGUgYnVmZmVyIGFkZHJlc3NlcyBhbmQgYSBjcmFzaC5cXG4rXFx0XFx0XFx0XFx0ICogRmFsbCBiYWNrIHRvIFNXIG1hbmFnZW1lbnQgdG8gYmUgc2FmZS5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiZmFpbGVkIHRvIGxpbmsgdG8gQk0sIHVzZSBTVyBidWZmZXIgbWFuYWdlbWVudFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdG12bmV0YV9ibV9wb29sX2Rlc3Ryb3kocHAtXFx1MDAzZWJtX3ByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBwcC1cXHUwMDNlcG9vbF9sb25nLCAxIFxcdTAwM2NcXHUwMDNjIHBwLVxcdTAwM2VpZCk7XFxuK1xcdFxcdFxcdFxcdG12bmV0YV9ibV9wb29sX2Rlc3Ryb3kocHAtXFx1MDAzZWJtX3ByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBwcC1cXHUwMDNlcG9vbF9zaG9ydCwgMSBcXHUwMDNjXFx1MDAzYyBwcC1cXHUwMDNlaWQpO1xcbitcXHRcXHRcXHRcXHRtdm5ldGFfYm1fcHV0KHBwLVxcdTAwM2VibV9wcml2KTtcXG4rXFx0XFx0XFx0XFx0cHAtXFx1MDAzZWJtX3ByaXYgPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0LyogU2V0IFJYIHBhY2tldCBvZmZzZXQgY29ycmVjdGlvbiBmb3IgcGxhdGZvcm1zLCB3aG9zZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YV9ibS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uY1xcbmluZGV4IDZiYjM4MDQ5NDkxOTA2Li5lMGM2OTNjMGE5MTA2MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YV9ibS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uY1xcbkBAIC0xMjksNiArMTI5LDcgQEAgc3RhdGljIGludCBtdm5ldGFfYm1fcG9vbF9jcmVhdGUoc3RydWN0IG12bmV0YV9ibSAqcHJpdixcXG4gXFx0aWYgKCFJU19BTElHTkVEKCh1MzIpYm1fcG9vbC1cXHUwMDNldmlydF9hZGRyLCBNVk5FVEFfQk1fUE9PTF9QVFJfQUxJR04pKSB7XFxuIFxcdFxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVfYnl0ZXMsIGJtX3Bvb2wtXFx1MDAzZXZpcnRfYWRkcixcXG4gXFx0XFx0XFx0XFx0ICBibV9wb29sLVxcdTAwM2VwaHlzX2FkZHIpO1xcbitcXHRcXHRibV9wb29sLVxcdTAwM2V2aXJ0X2FkZHIgPSBOVUxMO1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJCTSBwb29sICVkIGlzIG5vdCAlZCBieXRlcyBhbGlnbmVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRibV9wb29sLVxcdTAwM2VpZCwgTVZORVRBX0JNX1BPT0xfUFRSX0FMSUdOKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTEzOSw2ICsxNDAsNyBAQCBzdGF0aWMgaW50IG12bmV0YV9ibV9wb29sX2NyZWF0ZShzdHJ1Y3QgbXZuZXRhX2JtICpwcml2LFxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplX2J5dGVzLCBibV9wb29sLVxcdTAwM2V2aXJ0X2FkZHIsXFxuIFxcdFxcdFxcdFxcdCAgYm1fcG9vbC1cXHUwMDNlcGh5c19hZGRyKTtcXG4rXFx0XFx0Ym1fcG9vbC1cXHUwMDNldmlydF9hZGRyID0gTlVMTDtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG5AQCAtNDc3LDYgKzQ3OSw3NSBAQCBzdGF0aWMgdm9pZCBtdm5ldGFfYm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVxcdTAwM2VjbGspO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG12bmV0YV9ibV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbXZuZXRhX2JtICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogRHJhaW4gYnVmZmVycyBhbmQgZnJlZSBwb29sIHJlc291cmNlcyB3aGlsZSBCTSBpcyBzdGlsbCBjbG9ja2VkICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNVk5FVEFfQk1fUE9PTFNfTlVNOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IG12bmV0YV9ibV9wb29sICpibV9wb29sID0gXFx1MDAyNnByaXYtXFx1MDAzZWJtX3Bvb2xzW2ldO1xcbitcXHRcXHRpbnQgc2l6ZV9ieXRlcztcXG4rXFxuK1xcdFxcdGlmIChibV9wb29sLVxcdTAwM2V0eXBlID09IE1WTkVUQV9CTV9GUkVFKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdG12bmV0YV9ibV9idWZzX2ZyZWUocHJpdiwgYm1fcG9vbCwgYm1fcG9vbC1cXHUwMDNlcG9ydF9tYXApO1xcbitcXHRcXHRpZiAoYm1fcG9vbC1cXHUwMDNlaHdibV9wb29sLmJ1Zl9udW0pXFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwicG9vbCAlZDogJWQgYnVmZmVycyBub3QgZnJlZWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBibV9wb29sLVxcdTAwM2VpZCwgYm1fcG9vbC1cXHUwMDNlaHdibV9wb29sLmJ1Zl9udW0pO1xcbitcXG4rXFx0XFx0bXZuZXRhX2JtX3Bvb2xfZGlzYWJsZShwcml2LCBibV9wb29sLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRcXHRpZiAoYm1fcG9vbC1cXHUwMDNldmlydF9hZGRyKSB7XFxuK1xcdFxcdFxcdHNpemVfYnl0ZXMgPSBzaXplb2YodTMyKSAqIGJtX3Bvb2wtXFx1MDAzZWh3Ym1fcG9vbC5zaXplO1xcbitcXHRcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBzaXplX2J5dGVzLFxcbitcXHRcXHRcXHRcXHRcXHQgIGJtX3Bvb2wtXFx1MDAzZXZpcnRfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICBibV9wb29sLVxcdTAwM2VwaHlzX2FkZHIpO1xcbitcXHRcXHRcXHRibV9wb29sLVxcdTAwM2V2aXJ0X2FkZHIgPSBOVUxMO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNhZmUgdG8gZGVzdHJveTogZGV2aWNlX2xpbmsgZ3VhcmFudGVlcyBhbGwgbXZuZXRhIHBvcnRzXFxuK1xcdFxcdCAqIGhhdmUgYWxyZWFkeSBzdXNwZW5kZWQsIHNvIG5vIGh3Ym1fcG9vbF9hZGQoKSBjYW4gYmUgaW5cXG4rXFx0XFx0ICogcHJvZ3Jlc3MgaG9sZGluZyBidWZfbG9jay4gIFBhaXJzIHdpdGggbXV0ZXhfaW5pdCgpIGluXFxuK1xcdFxcdCAqIG12bmV0YV9ibV9wb29sX3VzZSgpIG9uIHJlc3VtZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmJtX3Bvb2wtXFx1MDAzZWh3Ym1fcG9vbC5idWZfbG9jayk7XFxuK1xcdFxcdGJtX3Bvb2wtXFx1MDAzZXR5cGUgPSBNVk5FVEFfQk1fRlJFRTtcXG4rXFx0fVxcbitcXG4rXFx0bXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9DT01NQU5EX1JFRywgTVZORVRBX0JNX1NUT1BfTUFTSyk7XFxuK1xcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtdm5ldGFfYm1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbXZuZXRhX2JtICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcdGludCBpLCBlcnI7XFxuK1xcbitcXHRlcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdC8qIFJlaW5pdGlhbGl6ZSBCTSBoYXJkd2FyZTsgcG9vbHMgYXJlIHJlZmlsbGVkIGJ5IG12bmV0YV9yZXN1bWUoKSAqL1xcbitcXHRtdm5ldGFfYm1fZGVmYXVsdF9zZXQocHJpdik7XFxuK1xcbitcXHQvKiBSZXN0b3JlIHBvb2wgcmVnaXN0ZXJzIGxvc3QgZHVyaW5nIGNsb2NrIGdhdGluZyAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTVZORVRBX0JNX1BPT0xTX05VTTsgaSsrKSB7XFxuK1xcdFxcdG12bmV0YV9ibV93cml0ZShwcml2LCBNVk5FVEFfQk1fUE9PTF9SRUFEX1BUUl9SRUcoaSksIDApO1xcbitcXHRcXHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX1BPT0xfV1JJVEVfUFRSX1JFRyhpKSwgMCk7XFxuK1xcdFxcdG12bmV0YV9ibV93cml0ZShwcml2LCBNVk5FVEFfQk1fUE9PTF9TSVpFX1JFRyhpKSxcXG4rXFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlYm1fcG9vbHNbaV0uaHdibV9wb29sLnNpemUpO1xcbitcXHR9XFxuK1xcbitcXHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX0NPTU1BTkRfUkVHLCBNVk5FVEFfQk1fU1RBUlRfTUFTSyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKG12bmV0YV9ibV9wbV9vcHMsIG12bmV0YV9ibV9zdXNwZW5kLCBtdm5ldGFfYm1fcmVzdW1lKTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG12bmV0YV9ibV9tYXRjaFtdID0ge1xcbiBcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1hcnZlbGwsYXJtYWRhLTM4MC1uZXRhLWJtXFxcIiB9LFxcbiBcXHR7IH1cXG5AQCAtNDg5LDYgKzU2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12bmV0YV9ibV9kcml2ZXIgPSB7XFxuIFxcdC5kcml2ZXIgPSB7XFxuIFxcdFxcdC5uYW1lID0gTVZORVRBX0JNX0RSSVZFUl9OQU1FLFxcbiBcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBtdm5ldGFfYm1fbWF0Y2gsXFxuK1xcdFxcdC5wbSA9IHBtX3NsZWVwX3B0cihcXHUwMDI2bXZuZXRhX2JtX3BtX29wcyksXFxuIFxcdH0sXFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzoyMTozMy42NzQ3NzMyOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEzNDgyNTc4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHByb2JlIGxvZ2ljIGZvciB0aGUgTWFydmVsbCBORVRBIEJ1ZmZlciBNYW5hZ2VyIChtdm5ldGFfYm0pLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRldmljZSBzcGVjaWZpYyB0byBNYXJ2ZWxsIEFybWFkYSBTb0NzLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSdzICd2aXJ0JyBtYWNoaW5lKSB1c2VkIGJ5IGZ1enplcnMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTI1ZTcwNThkNDJmZTI0NDY5OGIxZDQ1ZmUzZmYyMzJlZGQxYjAzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDA3OjIxOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcbmluZGV4IDc0NGQ2NTg1YTk0OWQxLi41NDNlNTY2NDI1YzFlNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcbkBAIC01Njc4LDYgKzU2NzgsMjQgQEAgc3RhdGljIGludCBtdm5ldGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0XHRcdFx0IFwidXNlIFNXIGJ1ZmZlciBtYW5hZ2VtZW50XFxuXCIpO1xuIFx0XHRcdFx0bXZuZXRhX2JtX3B1dChwcC1cdTAwM2VibV9wcml2KTtcbiBcdFx0XHRcdHBwLVx1MDAzZWJtX3ByaXYgPSBOVUxMO1xuK1x0XHRcdH0gZWxzZSBpZiAoIWRldmljZV9saW5rX2FkZChcdTAwMjZwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XHQgICAgXHUwMDI2cHAtXHUwMDNlYm1fcHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XHQgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIExpbmsgZ3VhcmFudGVlcyBCTSByZXN1bWVzIGJlZm9yZSBtdm5ldGEuXG4rXHRcdFx0XHQgKiBXaXRob3V0IGl0LCBCTSBtYXkgbm90IGJlIHJlYWR5IHdoZW5cbitcdFx0XHRcdCAqIG12bmV0YV9ibV9wb3J0X2luaXQoKSBydW5zIG9uIHJlc3VtZSxcbitcdFx0XHRcdCAqIGNhdXNpbmcgc3RhbGUgYnVmZmVyIGFkZHJlc3NlcyBhbmQgYSBjcmFzaC5cbitcdFx0XHRcdCAqIEZhbGwgYmFjayB0byBTVyBtYW5hZ2VtZW50IHRvIGJlIHNhZmUuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHQgXCJmYWlsZWQgdG8gbGluayB0byBCTSwgdXNlIFNXIGJ1ZmZlciBtYW5hZ2VtZW50XFxuXCIpO1xuK1x0XHRcdFx0bXZuZXRhX2JtX3Bvb2xfZGVzdHJveShwcC1cdTAwM2VibV9wcml2LFxuK1x0XHRcdFx0XHRcdCAgICAgICBwcC1cdTAwM2Vwb29sX2xvbmcsIDEgXHUwMDNjXHUwMDNjIHBwLVx1MDAzZWlkKTtcbitcdFx0XHRcdG12bmV0YV9ibV9wb29sX2Rlc3Ryb3kocHAtXHUwMDNlYm1fcHJpdixcbitcdFx0XHRcdFx0XHQgICAgICAgcHAtXHUwMDNlcG9vbF9zaG9ydCwgMSBcdTAwM2NcdTAwM2MgcHAtXHUwMDNlaWQpO1xuK1x0XHRcdFx0bXZuZXRhX2JtX3B1dChwcC1cdTAwM2VibV9wcml2KTtcbitcdFx0XHRcdHBwLVx1MDAzZWJtX3ByaXYgPSBOVUxMO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHQvKiBTZXQgUlggcGFja2V0IG9mZnNldCBjb3JyZWN0aW9uIGZvciBwbGF0Zm9ybXMsIHdob3NlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhX2JtLmNcbmluZGV4IDZiYjM4MDQ5NDkxOTA2Li5lMGM2OTNjMGE5MTA2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhX2JtLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhX2JtLmNcbkBAIC0xMjksNiArMTI5LDcgQEAgc3RhdGljIGludCBtdm5ldGFfYm1fcG9vbF9jcmVhdGUoc3RydWN0IG12bmV0YV9ibSAqcHJpdixcbiBcdGlmICghSVNfQUxJR05FRCgodTMyKWJtX3Bvb2wtXHUwMDNldmlydF9hZGRyLCBNVk5FVEFfQk1fUE9PTF9QVFJfQUxJR04pKSB7XG4gXHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplX2J5dGVzLCBibV9wb29sLVx1MDAzZXZpcnRfYWRkcixcbiBcdFx0XHRcdCAgYm1fcG9vbC1cdTAwM2VwaHlzX2FkZHIpO1xuK1x0XHRibV9wb29sLVx1MDAzZXZpcnRfYWRkciA9IE5VTEw7XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiQk0gcG9vbCAlZCBpcyBub3QgJWQgYnl0ZXMgYWxpZ25lZFxcblwiLFxuIFx0XHRcdGJtX3Bvb2wtXHUwMDNlaWQsIE1WTkVUQV9CTV9QT09MX1BUUl9BTElHTik7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTEzOSw2ICsxNDAsNyBAQCBzdGF0aWMgaW50IG12bmV0YV9ibV9wb29sX2NyZWF0ZShzdHJ1Y3QgbXZuZXRhX2JtICpwcml2LFxuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZV9ieXRlcywgYm1fcG9vbC1cdTAwM2V2aXJ0X2FkZHIsXG4gXHRcdFx0XHQgIGJtX3Bvb2wtXHUwMDNlcGh5c19hZGRyKTtcbitcdFx0Ym1fcG9vbC1cdTAwM2V2aXJ0X2FkZHIgPSBOVUxMO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuQEAgLTQ3Nyw2ICs0NzksNzUgQEAgc3RhdGljIHZvaWQgbXZuZXRhX2JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlY2xrKTtcbiB9XG4gXG4rc3RhdGljIGludCBtdm5ldGFfYm1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IG12bmV0YV9ibSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0aW50IGk7XG4rXG4rXHQvKiBEcmFpbiBidWZmZXJzIGFuZCBmcmVlIHBvb2wgcmVzb3VyY2VzIHdoaWxlIEJNIGlzIHN0aWxsIGNsb2NrZWQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1WTkVUQV9CTV9QT09MU19OVU07IGkrKykge1xuK1x0XHRzdHJ1Y3QgbXZuZXRhX2JtX3Bvb2wgKmJtX3Bvb2wgPSBcdTAwMjZwcml2LVx1MDAzZWJtX3Bvb2xzW2ldO1xuK1x0XHRpbnQgc2l6ZV9ieXRlcztcbitcbitcdFx0aWYgKGJtX3Bvb2wtXHUwMDNldHlwZSA9PSBNVk5FVEFfQk1fRlJFRSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0bXZuZXRhX2JtX2J1ZnNfZnJlZShwcml2LCBibV9wb29sLCBibV9wb29sLVx1MDAzZXBvcnRfbWFwKTtcbitcdFx0aWYgKGJtX3Bvb2wtXHUwMDNlaHdibV9wb29sLmJ1Zl9udW0pXG4rXHRcdFx0ZGV2X3dhcm4oXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdCBcInBvb2wgJWQ6ICVkIGJ1ZmZlcnMgbm90IGZyZWVkXFxuXCIsXG4rXHRcdFx0XHQgYm1fcG9vbC1cdTAwM2VpZCwgYm1fcG9vbC1cdTAwM2Vod2JtX3Bvb2wuYnVmX251bSk7XG4rXG4rXHRcdG12bmV0YV9ibV9wb29sX2Rpc2FibGUocHJpdiwgYm1fcG9vbC1cdTAwM2VpZCk7XG4rXG4rXHRcdGlmIChibV9wb29sLVx1MDAzZXZpcnRfYWRkcikge1xuK1x0XHRcdHNpemVfYnl0ZXMgPSBzaXplb2YodTMyKSAqIGJtX3Bvb2wtXHUwMDNlaHdibV9wb29sLnNpemU7XG4rXHRcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgc2l6ZV9ieXRlcyxcbitcdFx0XHRcdFx0ICBibV9wb29sLVx1MDAzZXZpcnRfYWRkcixcbitcdFx0XHRcdFx0ICBibV9wb29sLVx1MDAzZXBoeXNfYWRkcik7XG4rXHRcdFx0Ym1fcG9vbC1cdTAwM2V2aXJ0X2FkZHIgPSBOVUxMO1xuK1x0XHR9XG4rXHRcdC8qXG4rXHRcdCAqIFNhZmUgdG8gZGVzdHJveTogZGV2aWNlX2xpbmsgZ3VhcmFudGVlcyBhbGwgbXZuZXRhIHBvcnRzXG4rXHRcdCAqIGhhdmUgYWxyZWFkeSBzdXNwZW5kZWQsIHNvIG5vIGh3Ym1fcG9vbF9hZGQoKSBjYW4gYmUgaW5cbitcdFx0ICogcHJvZ3Jlc3MgaG9sZGluZyBidWZfbG9jay4gIFBhaXJzIHdpdGggbXV0ZXhfaW5pdCgpIGluXG4rXHRcdCAqIG12bmV0YV9ibV9wb29sX3VzZSgpIG9uIHJlc3VtZS5cbitcdFx0ICovXG4rXHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2Ym1fcG9vbC1cdTAwM2Vod2JtX3Bvb2wuYnVmX2xvY2spO1xuK1x0XHRibV9wb29sLVx1MDAzZXR5cGUgPSBNVk5FVEFfQk1fRlJFRTtcbitcdH1cbitcbitcdG12bmV0YV9ibV93cml0ZShwcml2LCBNVk5FVEFfQk1fQ09NTUFORF9SRUcsIE1WTkVUQV9CTV9TVE9QX01BU0spO1xuK1x0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlY2xrKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG12bmV0YV9ibV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBtdm5ldGFfYm0gKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcdGludCBpLCBlcnI7XG4rXG4rXHRlcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIFJlaW5pdGlhbGl6ZSBCTSBoYXJkd2FyZTsgcG9vbHMgYXJlIHJlZmlsbGVkIGJ5IG12bmV0YV9yZXN1bWUoKSAqL1xuK1x0bXZuZXRhX2JtX2RlZmF1bHRfc2V0KHByaXYpO1xuK1xuK1x0LyogUmVzdG9yZSBwb29sIHJlZ2lzdGVycyBsb3N0IGR1cmluZyBjbG9jayBnYXRpbmcgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1WTkVUQV9CTV9QT09MU19OVU07IGkrKykge1xuK1x0XHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX1BPT0xfUkVBRF9QVFJfUkVHKGkpLCAwKTtcbitcdFx0bXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9QT09MX1dSSVRFX1BUUl9SRUcoaSksIDApO1xuK1x0XHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX1BPT0xfU0laRV9SRUcoaSksXG4rXHRcdFx0XHRwcml2LVx1MDAzZWJtX3Bvb2xzW2ldLmh3Ym1fcG9vbC5zaXplKTtcbitcdH1cbitcbitcdG12bmV0YV9ibV93cml0ZShwcml2LCBNVk5FVEFfQk1fQ09NTUFORF9SRUcsIE1WTkVUQV9CTV9TVEFSVF9NQVNLKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKG12bmV0YV9ibV9wbV9vcHMsIG12bmV0YV9ibV9zdXNwZW5kLCBtdm5ldGFfYm1fcmVzdW1lKTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdm5ldGFfYm1fbWF0Y2hbXSA9IHtcbiBcdHsgLmNvbXBhdGlibGUgPSBcIm1hcnZlbGwsYXJtYWRhLTM4MC1uZXRhLWJtXCIgfSxcbiBcdHsgfVxuQEAgLTQ4OSw2ICs1NjAsNyBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdm5ldGFfYm1fZHJpdmVyID0ge1xuIFx0LmRyaXZlciA9IHtcbiBcdFx0Lm5hbWUgPSBNVk5FVEFfQk1fRFJJVkVSX05BTUUsXG4gXHRcdC5vZl9tYXRjaF90YWJsZSA9IG12bmV0YV9ibV9tYXRjaCxcbitcdFx0LnBtID0gcG1fc2xlZXBfcHRyKFx1MDAyNm12bmV0YV9ibV9wbV9vcHMpLFxuIFx0fSxcbiB9O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6MjE6MzMuNjc0Nzc1NTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDY3NTk3MDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWFydmVsbCBORVRBIEJ1ZmZlciBNYW5hZ2VyIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYG12bmV0YS5jYCBhbmQgYG12bmV0YV9ibS5jYCDigJMgc3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBwb3dlciBtYW5hZ2VtZW50IGhvb2tzLCBzdXNwZW5kL3Jlc3VtZSwgZm9yIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBkZXZpY2UgbGluaywgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIGZvciBlbnN1cmluZyBwcm9wZXIgZGV2aWNlIG9yZGVyaW5nIGR1cmluZyBwb3dlciB0cmFuc2l0aW9ucywgYW5kIGZpeGVzIGEgcG9zc2libGUgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBtdm5ldGFfYm1fcG9vbF9jcmVhdGVgIGFmdGVyIGEgYGRtYV9mcmVlX2NvaGVyZW50YCBjYWxsLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZXZlbiB3b3J0aCBkaWdnaW5nIGludG8gZm9yIGZ1enppbmc/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb2RlJ3MgcmVhY2hhYmlsaXR5LiBUaGlzIGRyaXZlciB0YXJnZXRzIE1hcnZlbGwgQXJtYWRhIDM4MC8zOHggU29Dcy4gVGhvc2UgYXJlIGdlbmVyYWxseSAqbm90KiBlYXNpbHkgYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVS4gU29DLXNwZWNpZmljIEV0aGVybmV0IGRyaXZlcnMgY2FuIGJlIGEgcGFpbiBpbiBRRU1VIHVubGVzcyB5b3UgaGF2ZSBhIGRlZGljYXRlZCBtYWNoaW5lIG1vZGVsIHNwZWNpZmljYWxseSBjb25maWd1cmVkIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlLCBvciBpZiBpdCBwcmVzZW50cyBhcyBhIFBDSSBkZXZpY2UuIFNvLCB0aGUgZmlyc3Qgc3RlcCBpcyB0byBjb25maXJtIHRoZSBkZXZpY2UncyBzZXR1cCB0byBzZWUgaXRzIHJlYWNoYWJpbGl0eS5cblxuTGV0J3MgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIGBNVk5FVEFgIGFuZCBgTVZORVRBX0JNYCBzeW1ib2xzLCBzZWUgaWYgdGhlcmUncyBhbnkgZWFzeSB3YXkgdG8gZW5hYmxlIHRoaXMgaW4gYSBtb3JlIGdlbmVyYWwgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjIxOjQwLjE0MjM3NDk0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEwOTAzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1WTkVUQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTM0PWNvbmZpZyBNVk1ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy00NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NDU6Y29uZmlnIE1WTkVUQV9CTV9FTkFCTEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNDYtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgQXJtYWRhIDM4eC9YUCBuZXR3b3JrIGludGVyZmFjZSBCTSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo1OTpjb25maWcgTVZORVRBXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIEFybWFkYSAzNzAvMzh4L1hQLzM3eHggbmV0d29yayBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy03NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NzU6Y29uZmlnIE1WTkVUQV9CTVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy03Ni1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzoyMTo0MC4yOTM0NzAzOTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzI1MjQ3OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWFydmVsbCBBcm1hZGEgTmV0d29yayBEcml2ZXIgaW4gUmVsYXRpb24gdG8gUUVNVSBhbmQgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyLCBcIk1hcnZlbGwgQXJtYWRhIDM3MC8zOHgvWFAvMzd4eCBuZXR3b3JrIGludGVyZmFjZSBzdXBwb3J0LlwiIEl0J3MgYSBgcGxhdGZvcm1fZHJpdmVyYCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgUUVNVSBlbXVsYXRpb24uIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICpyZWFzb25hYmx5KiBlbXVsYXRlIHRoaXMgcGFydGljdWxhciBkcml2ZXIgd2l0aGluIFFFTVU/IEkgbmVlZCB0byBjaGVjayB3aGljaCBBUk0gYm9hcmRzIFFFTVUgKmFjdHVhbGx5KiBzdXBwb3J0cywgYW5kIHNwZWNpZmljYWxseSBpZiBhbnkgb2YgdGhvc2UgYm9hcmRzIGFyZSBBcm1hZGEgMzgwLzM4eC9YUCBiYXNlZC4gSWYgbm90LCB0aGlzIGlzIGdvaW5nIHRvIGJlIGEgdG91Z2ggcm9hZC5cblxuTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIHBsYXRmb3JtIGRldmljZSBkcml2ZXJzLCBkZXNpZ25lZCBmb3Igc3BlY2lmaWMgU29DcywgYXJlIHJhcmVseSBlYXNpbHkgZnV6emFibGUgKnVubGVzcyogd2UgaGF2ZSBhIFFFTVUgbWFjaGluZSBmb3IgdGhhdCBleGFjdCBwbGF0Zm9ybS4gT3IsIGZhaWxpbmcgUUVNVSwgdGhlcmUgbmVlZHMgdG8gYmUgc29tZSB3YXkgdG8gaW5qZWN0IHRoZSBwbGF0Zm9ybSBkZXZpY2UuIFN5emthbGxlcidzIHBzZXVkby1kZXZpY2UgaW5qZWN0aW9uIGNvbWVzIHRvIG1pbmQsIGJ1dCB0aGF0J3Mgbm90IHRoZSB1c3VhbCBjYXNlLiBTeXprYWxsZXIgZ2VuZXJhbGx5IGRvZXNuJ3QgaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgZGVzY3JpcHRpb24gcHJvdmlkZWQuIEkgZG8gbmVlZCB0byByZWNhbGwgaWYgU3l6a2FsbGVyIGhhcyBhbnkgKnN1cHBvcnQqIGZvciBpbmplY3RpbmcgcGxhdGZvcm0gZGV2aWNlcywgcHJvdmlkZWQgdGhleSBoYXZlIGEgZGV2aWNlIGRlc2NyaXB0aW9uLCBidXQgdGhlIGNoYW5jZXMgb2YgaXQgYmVpbmcgYWJsZSB0byBoYW5kbGUgYSByYW5kb20gU29DIGV0aGVybmV0IGRyaXZlciBhcmUgdXN1YWxseSBwcmV0dHkgc2xpbS5cblxuT2theSwgbGV0IG1lIGVsaW1pbmF0ZSBzb21lIG9mIHRoZXNlIGRvdWJ0czogaXMgdGhlIGBNVk5FVEFgIGludGVyZmFjZSBhIFBDSSBkZXZpY2U/IFF1aWNrIGNoZWNrLi4uIG5vcGUsIGl0J3MgYSBwbGF0Zm9ybSBkZXZpY2UuIE5vdywgSSBuZWVkIHRvIGxvb2sgZGlyZWN0bHkgYXQgdGhlIGRyaXZlciBjb2RlIGl0c2VsZi4gSSdsbCBvcGVuIHVwIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jYCBhbmQgY29uZmlybSB0aGF0IGl0J3MgYSBgcGxhdGZvcm1fZHJpdmVyYCBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzoyMTo0Ni42MTg3MjA2NDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwODM2MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBsYXRmb3JtX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM9NTkzNz1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdm5ldGFfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtNTkzOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jOjU5Mzk6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZuZXRhX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jLTU5NDAtXFx0LnByb2JlID0gbXZuZXRhX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYz01OTQ5PXN0YXRpYyBpbnQgX19pbml0IG12bmV0YV9kcml2ZXJfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01OTY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM6NTk2NjpcXHRyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNm12bmV0YV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtNTk2Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYz01OTgwPXN0YXRpYyB2b2lkIF9fZXhpdCBtdm5ldGFfZHJpdmVyX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jLTU5ODEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM6NTk4MjpcXHRwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2bXZuZXRhX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01OTgzLVxcdGNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9ORVRfTVZORVRBX0RFQUQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzoyMTo0Ni43OTk1NjE0MDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjIzNDM3ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGU6IFBsYXRmb3JtIERldmljZSBpbiBhIFZpcnR1YWxpemVkIFdvcmxkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCdzIGEgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgYSBwbGF0Zm9ybSBkZXZpY2UuIEknbSB0aGlua2luZywgXCJJcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudD9cIiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIG5vLCBnaXZlbiB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIHRoZSBBcm1hZGEgMzh4IFNvQy4gVW5sZXNzIFFFTVUgc3BlY2lmaWNhbGx5IGVtdWxhdGVzICp0aGF0KiBwYXJ0aWN1bGFyIFNvQywgd2UncmUgbGlrZWx5IG91dCBvZiBsdWNrLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgUUVNVSBldmVuICpoYXMqIEFybWFkYSAzOHggc3VwcG9ydC4gSG1tLCB5ZWFoLCBJIGRvbid0IHRoaW5rIGl0IGRvZXMsIGFuZCBldmVuIGlmIGl0IGRpZCwgU3l6a2FsbGVyLCB3aGljaCBpcyB3aGF0IHdlJ3JlIHByb2JhYmx5IHVzaW5nIGZvciBmdXp6aW5nIGhlcmUsIGRvZXNuJ3QgdHlwaWNhbGx5IGJvb3Qgd2l0aCB0aGF0IHNwZWNpZmljIG1hY2hpbmUgdHlwZSBhbnl3YXkuIFN5emthbGxlciBzdGlja3MgdG8gYHZpcnRgIGZvciBBUk02NCwgYW5kIG1heWJlIGB2ZXhwcmVzc2Agb3IgYHZpcnRgIGZvciBBUk0zMi4gU28sIHRoaXMgY29kZSBwYXRoIGlzIHByZXR0eSBtdWNoIGRlYWQgaW4gdGhlIHdhdGVyIGFzIGZhciBhcyBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBnb2VzLlxuXG5Tbywgc2luY2UgaXQncyB1bnJlYWNoYWJsZSBpbiB0aG9zZSBlbnZpcm9ubWVudHMsIG15IGZpcnN0IGNvbmNsdXNpb24gaXMgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLlxuXG5CdXQsIGxldCdzIGRvdWJsZSBjaGVjay4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLCBsZXQncyBzZWUgaWYgdGhlcmUncyAqYW55KiBvdGhlciBwb3NzaWJsZSBhbmdsZS4gT2theSwgdGhlIHBhdGNoIG1vZGlmaWVzIGBtdm5ldGFfcHJvYmVgIHRvIGFkZCBhIGRldmljZSBsaW5rLCBhbmQgaXQgYWxzbyBhZGRzIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9ucyB0byBgbXZuZXRhX2JtLmNgLiBUaGUgc3VzcGVuZC9yZXN1bWUgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBkdXJpbmcgc3lzdGVtIHN1c3BlbmQvcmVzdW1lLCB3aGljaCBtZWFucyB0aGV5J2xsIG9ubHkgYmUgdHJpZ2dlcmVkIGlmIHRoZSBkZXZpY2UgaXMgYWN0dWFsbHkgcHJvYmVkLlxuXG5BbmQgc2luY2UgdGhpcyBkZXZpY2UgaXMgYSBwbGF0Zm9ybSBkZXZpY2UsIGJvdW5kIHZpYSBhIGRldmljZSB0cmVlIGVudHJ5IChgbWFydmVsbCxhcm1hZGEtMzgwLW5ldGEtYm1gKSwgdGhlIGtlcm5lbCB3aWxsIG9ubHkgcHJvYmUgaXQgaWYgdGhhdCBub2RlIGlzIHByZXNlbnQgaW4gdGhlIERULiBUaGUgdGhpbmcgaXMsIFN5emthbGxlciBkb2Vzbid0IGp1c3QgZHluYW1pY2FsbHkgYWRkIGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcyBmb3IgcGxhdGZvcm0gZGV2aWNlcy4gU28sIHRoYXQncyBhbm90aGVyIGRlYWQgZW5kLiBJdCdzIHVucmVhY2hhYmxlLlxuXG5Pa2F5LCB0aGF0IHNlYWxzIGl0LiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuIFRoZSBsb2dpYyBjaGFuZ2VzIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHByb2JlIGxvZ2ljIGZvciB0aGUgTWFydmVsbCBORVRBIEJ1ZmZlciBNYW5hZ2VyLiBUaGUgTWFydmVsbCBORVRBIEJ1ZmZlciBNYW5hZ2VyIGlzIG9ubHkgYXZhaWxhYmxlIG9uIE1hcnZlbGwgQXJtYWRhIDM4eCBTb0NzLiBBbmQgdGhhdCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgaXMgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB3aGljaCBtYWtlcyB0aGlzIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDMsIk91dHB1dFRva2VucyI6MTAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjIxOjU1LjAyMzAwMTUyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcG93ZXIgbWFuYWdlbWVudCBhbmQgcHJvYmUgbG9naWMgZm9yIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIgKG12bmV0YV9ibSksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZGV2aWNlIHNwZWNpZmljIHRvIE1hcnZlbGwgQXJtYWRhIFNvQ3MuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VJ3MgJ3ZpcnQnIG1hY2hpbmUpIHVzZWQgYnkgZnV6emVycywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcG93ZXIgbWFuYWdlbWVudCBhbmQgcHJvYmUgbG9naWMgZm9yIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIgKG12bmV0YV9ibSksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZGV2aWNlIHNwZWNpZmljIHRvIE1hcnZlbGwgQXJtYWRhIFNvQ3MuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VJ3MgJ3ZpcnQnIG1hY2hpbmUpIHVzZWQgYnkgZnV6emVycywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxft4k[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 07:01:30 +0000 UTC FinishedAt: 2026-06-30 07:21:56 +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+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHByb2JlIGxvZ2ljIGZvciB0aGUgTWFydmVsbCBORVRBIEJ1ZmZlciBNYW5hZ2VyIChtdm5ldGFfYm0pLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRldmljZSBzcGVjaWZpYyB0byBNYXJ2ZWxsIEFybWFkYSBTb0NzLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSYjMzk7cyAmIzM5O3ZpcnQmIzM5OyBtYWNoaW5lKSB1c2VkIGJ5IGZ1enplcnMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMjVlNzA1OGQ0MmZlMjQ0Njk4YjFkNDVmZTNmZjIzMmVkZDFiMDNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMDc6MjE6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcbmluZGV4IDc0NGQ2NTg1YTk0OWQxLi41NDNlNTY2NDI1YzFlNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcbkBAIC01Njc4LDYgJiM0Mzs1Njc4LDI0IEBAIHN0YXRpYyBpbnQgbXZuZXRhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRcdFx0XHRcdCBcJiMzNDt1c2UgU1cgYnVmZmVyIG1hbmFnZW1lbnRcXG5cJiMzNDspO1xuIFx0XHRcdFx0bXZuZXRhX2JtX3B1dChwcC1cdTAwM2VibV9wcml2KTtcbiBcdFx0XHRcdHBwLVx1MDAzZWJtX3ByaXYgPSBOVUxMO1xuJiM0MztcdFx0XHR9IGVsc2UgaWYgKCFkZXZpY2VfbGlua19hZGQoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBcdTAwMjZwcC1cdTAwM2VibV9wcml2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuJiM0MztcdFx0XHRcdC8qXG4mIzQzO1x0XHRcdFx0ICogTGluayBndWFyYW50ZWVzIEJNIHJlc3VtZXMgYmVmb3JlIG12bmV0YS5cbiYjNDM7XHRcdFx0XHQgKiBXaXRob3V0IGl0LCBCTSBtYXkgbm90IGJlIHJlYWR5IHdoZW5cbiYjNDM7XHRcdFx0XHQgKiBtdm5ldGFfYm1fcG9ydF9pbml0KCkgcnVucyBvbiByZXN1bWUsXG4mIzQzO1x0XHRcdFx0ICogY2F1c2luZyBzdGFsZSBidWZmZXIgYWRkcmVzc2VzIGFuZCBhIGNyYXNoLlxuJiM0MztcdFx0XHRcdCAqIEZhbGwgYmFjayB0byBTVyBtYW5hZ2VtZW50IHRvIGJlIHNhZmUuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7ZmFpbGVkIHRvIGxpbmsgdG8gQk0sIHVzZSBTVyBidWZmZXIgbWFuYWdlbWVudFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0bXZuZXRhX2JtX3Bvb2xfZGVzdHJveShwcC1cdTAwM2VibV9wcml2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgcHAtXHUwMDNlcG9vbF9sb25nLCAxIFx1MDAzY1x1MDAzYyBwcC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRcdFx0bXZuZXRhX2JtX3Bvb2xfZGVzdHJveShwcC1cdTAwM2VibV9wcml2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgcHAtXHUwMDNlcG9vbF9zaG9ydCwgMSBcdTAwM2NcdTAwM2MgcHAtXHUwMDNlaWQpO1xuJiM0MztcdFx0XHRcdG12bmV0YV9ibV9wdXQocHAtXHUwMDNlYm1fcHJpdik7XG4mIzQzO1x0XHRcdFx0cHAtXHUwMDNlYm1fcHJpdiA9IE5VTEw7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdC8qIFNldCBSWCBwYWNrZXQgb2Zmc2V0IGNvcnJlY3Rpb24gZm9yIHBsYXRmb3Jtcywgd2hvc2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YV9ibS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uY1xuaW5kZXggNmJiMzgwNDk0OTE5MDYuLmUwYzY5M2MwYTkxMDYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uY1xuQEAgLTEyOSw2ICYjNDM7MTI5LDcgQEAgc3RhdGljIGludCBtdm5ldGFfYm1fcG9vbF9jcmVhdGUoc3RydWN0IG12bmV0YV9ibSAqcHJpdixcbiBcdGlmICghSVNfQUxJR05FRCgodTMyKWJtX3Bvb2wtXHUwMDNldmlydF9hZGRyLCBNVk5FVEFfQk1fUE9PTF9QVFJfQUxJR04pKSB7XG4gXHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplX2J5dGVzLCBibV9wb29sLVx1MDAzZXZpcnRfYWRkcixcbiBcdFx0XHRcdCAgYm1fcG9vbC1cdTAwM2VwaHlzX2FkZHIpO1xuJiM0MztcdFx0Ym1fcG9vbC1cdTAwM2V2aXJ0X2FkZHIgPSBOVUxMO1xuIFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtCTSBwb29sICVkIGlzIG5vdCAlZCBieXRlcyBhbGlnbmVkXFxuXCYjMzQ7LFxuIFx0XHRcdGJtX3Bvb2wtXHUwMDNlaWQsIE1WTkVUQV9CTV9QT09MX1BUUl9BTElHTik7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTEzOSw2ICYjNDM7MTQwLDcgQEAgc3RhdGljIGludCBtdm5ldGFfYm1fcG9vbF9jcmVhdGUoc3RydWN0IG12bmV0YV9ibSAqcHJpdixcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVfYnl0ZXMsIGJtX3Bvb2wtXHUwMDNldmlydF9hZGRyLFxuIFx0XHRcdFx0ICBibV9wb29sLVx1MDAzZXBoeXNfYWRkcik7XG4mIzQzO1x0XHRibV9wb29sLVx1MDAzZXZpcnRfYWRkciA9IE5VTEw7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG5AQCAtNDc3LDYgJiM0Mzs0NzksNzUgQEAgc3RhdGljIHZvaWQgbXZuZXRhX2JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlY2xrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXZuZXRhX2JtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG12bmV0YV9ibSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBEcmFpbiBidWZmZXJzIGFuZCBmcmVlIHBvb2wgcmVzb3VyY2VzIHdoaWxlIEJNIGlzIHN0aWxsIGNsb2NrZWQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNVk5FVEFfQk1fUE9PTFNfTlVNOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IG12bmV0YV9ibV9wb29sICpibV9wb29sID0gXHUwMDI2cHJpdi1cdTAwM2VibV9wb29sc1tpXTtcbiYjNDM7XHRcdGludCBzaXplX2J5dGVzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChibV9wb29sLVx1MDAzZXR5cGUgPT0gTVZORVRBX0JNX0ZSRUUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG12bmV0YV9ibV9idWZzX2ZyZWUocHJpdiwgYm1fcG9vbCwgYm1fcG9vbC1cdTAwM2Vwb3J0X21hcCk7XG4mIzQzO1x0XHRpZiAoYm1fcG9vbC1cdTAwM2Vod2JtX3Bvb2wuYnVmX251bSlcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7cG9vbCAlZDogJWQgYnVmZmVycyBub3QgZnJlZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IGJtX3Bvb2wtXHUwMDNlaWQsIGJtX3Bvb2wtXHUwMDNlaHdibV9wb29sLmJ1Zl9udW0pO1xuJiM0MztcbiYjNDM7XHRcdG12bmV0YV9ibV9wb29sX2Rpc2FibGUocHJpdiwgYm1fcG9vbC1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGJtX3Bvb2wtXHUwMDNldmlydF9hZGRyKSB7XG4mIzQzO1x0XHRcdHNpemVfYnl0ZXMgPSBzaXplb2YodTMyKSAqIGJtX3Bvb2wtXHUwMDNlaHdibV9wb29sLnNpemU7XG4mIzQzO1x0XHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnByaXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIHNpemVfYnl0ZXMsXG4mIzQzO1x0XHRcdFx0XHQgIGJtX3Bvb2wtXHUwMDNldmlydF9hZGRyLFxuJiM0MztcdFx0XHRcdFx0ICBibV9wb29sLVx1MDAzZXBoeXNfYWRkcik7XG4mIzQzO1x0XHRcdGJtX3Bvb2wtXHUwMDNldmlydF9hZGRyID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBTYWZlIHRvIGRlc3Ryb3k6IGRldmljZV9saW5rIGd1YXJhbnRlZXMgYWxsIG12bmV0YSBwb3J0c1xuJiM0MztcdFx0ICogaGF2ZSBhbHJlYWR5IHN1c3BlbmRlZCwgc28gbm8gaHdibV9wb29sX2FkZCgpIGNhbiBiZSBpblxuJiM0MztcdFx0ICogcHJvZ3Jlc3MgaG9sZGluZyBidWZfbG9jay4gIFBhaXJzIHdpdGggbXV0ZXhfaW5pdCgpIGluXG4mIzQzO1x0XHQgKiBtdm5ldGFfYm1fcG9vbF91c2UoKSBvbiByZXN1bWUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2Ym1fcG9vbC1cdTAwM2Vod2JtX3Bvb2wuYnVmX2xvY2spO1xuJiM0MztcdFx0Ym1fcG9vbC1cdTAwM2V0eXBlID0gTVZORVRBX0JNX0ZSRUU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX0NPTU1BTkRfUkVHLCBNVk5FVEFfQk1fU1RPUF9NQVNLKTtcbiYjNDM7XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG12bmV0YV9ibV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG12bmV0YV9ibSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcdGludCBpLCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFJlaW5pdGlhbGl6ZSBCTSBoYXJkd2FyZTsgcG9vbHMgYXJlIHJlZmlsbGVkIGJ5IG12bmV0YV9yZXN1bWUoKSAqL1xuJiM0MztcdG12bmV0YV9ibV9kZWZhdWx0X3NldChwcml2KTtcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSBwb29sIHJlZ2lzdGVycyBsb3N0IGR1cmluZyBjbG9jayBnYXRpbmcgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNVk5FVEFfQk1fUE9PTFNfTlVNOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0bXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9QT09MX1JFQURfUFRSX1JFRyhpKSwgMCk7XG4mIzQzO1x0XHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX1BPT0xfV1JJVEVfUFRSX1JFRyhpKSwgMCk7XG4mIzQzO1x0XHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX1BPT0xfU0laRV9SRUcoaSksXG4mIzQzO1x0XHRcdFx0cHJpdi1cdTAwM2VibV9wb29sc1tpXS5od2JtX3Bvb2wuc2l6ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX0NPTU1BTkRfUkVHLCBNVk5FVEFfQk1fU1RBUlRfTUFTSyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfU0lNUExFX0RFVl9QTV9PUFMobXZuZXRhX2JtX3BtX29wcywgbXZuZXRhX2JtX3N1c3BlbmQsIG12bmV0YV9ibV9yZXN1bWUpO1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdm5ldGFfYm1fbWF0Y2hbXSA9IHtcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttYXJ2ZWxsLGFybWFkYS0zODAtbmV0YS1ibVwmIzM0OyB9LFxuIFx0eyB9XG5AQCAtNDg5LDYgJiM0Mzs1NjAsNyBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdm5ldGFfYm1fZHJpdmVyID0ge1xuIFx0LmRyaXZlciA9IHtcbiBcdFx0Lm5hbWUgPSBNVk5FVEFfQk1fRFJJVkVSX05BTUUsXG4gXHRcdC5vZl9tYXRjaF90YWJsZSA9IG12bmV0YV9ibV9tYXRjaCxcbiYjNDM7XHRcdC5wbSA9IHBtX3NsZWVwX3B0cihcdTAwMjZtdm5ldGFfYm1fcG1fb3BzKSxcbiBcdH0sXG4gfTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNzoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwb3dlciBtYW5hZ2VtZW50IGFuZCBwcm9iZSBsb2dpYyBmb3IgdGhlIE1hcnZlbGwgTkVUQSBCdWZmZXIgTWFuYWdlciAobXZuZXRhX2JtKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkZXZpY2Ugc3BlY2lmaWMgdG8gTWFydmVsbCBBcm1hZGEgU29Dcy4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUmIzM5O3MgJiMzOTt2aXJ0JiMzOTsgbWFjaGluZSkgdXNlZCBieSBmdXp6ZXJzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMjVlNzA1OGQ0MmZlMjQ0Njk4YjFkNDVmZTNmZjIzMmVkZDFiMDNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMDc6MjE6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYwppbmRleCA3NDRkNjU4NWE5NDlkMS4uNTQzZTU2NjQyNWMxZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYwpAQCAtNTY3OCw2ICYjNDM7NTY3OCwyNCBAQCBzdGF0aWMgaW50IG12bmV0YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQkJCQkgJiMzNDt1c2UgU1cgYnVmZmVyIG1hbmFnZW1lbnRcbiYjMzQ7KTsKIAkJCQltdm5ldGFfYm1fcHV0KHBwLSZndDtibV9wcml2KTsKIAkJCQlwcC0mZ3Q7Ym1fcHJpdiA9IE5VTEw7CiYjNDM7CQkJfSBlbHNlIGlmICghZGV2aWNlX2xpbmtfYWRkKCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJCSAgICAmYW1wO3BwLSZndDtibV9wcml2LSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkJICAgIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogTGluayBndWFyYW50ZWVzIEJNIHJlc3VtZXMgYmVmb3JlIG12bmV0YS4KJiM0MzsJCQkJICogV2l0aG91dCBpdCwgQk0gbWF5IG5vdCBiZSByZWFkeSB3aGVuCiYjNDM7CQkJCSAqIG12bmV0YV9ibV9wb3J0X2luaXQoKSBydW5zIG9uIHJlc3VtZSwKJiM0MzsJCQkJICogY2F1c2luZyBzdGFsZSBidWZmZXIgYWRkcmVzc2VzIGFuZCBhIGNyYXNoLgomIzQzOwkJCQkgKiBGYWxsIGJhY2sgdG8gU1cgbWFuYWdlbWVudCB0byBiZSBzYWZlLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJZGV2X3dhcm4oJmFtcDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkgJiMzNDtmYWlsZWQgdG8gbGluayB0byBCTSwgdXNlIFNXIGJ1ZmZlciBtYW5hZ2VtZW50XG4mIzM0Oyk7CiYjNDM7CQkJCW12bmV0YV9ibV9wb29sX2Rlc3Ryb3kocHAtJmd0O2JtX3ByaXYsCiYjNDM7CQkJCQkJICAgICAgIHBwLSZndDtwb29sX2xvbmcsIDEgJmx0OyZsdDsgcHAtJmd0O2lkKTsKJiM0MzsJCQkJbXZuZXRhX2JtX3Bvb2xfZGVzdHJveShwcC0mZ3Q7Ym1fcHJpdiwKJiM0MzsJCQkJCQkgICAgICAgcHAtJmd0O3Bvb2xfc2hvcnQsIDEgJmx0OyZsdDsgcHAtJmd0O2lkKTsKJiM0MzsJCQkJbXZuZXRhX2JtX3B1dChwcC0mZ3Q7Ym1fcHJpdik7CiYjNDM7CQkJCXBwLSZndDtibV9wcml2ID0gTlVMTDsKIAkJCX0KIAkJfQogCQkvKiBTZXQgUlggcGFja2V0IG9mZnNldCBjb3JyZWN0aW9uIGZvciBwbGF0Zm9ybXMsIHdob3NlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YV9ibS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uYwppbmRleCA2YmIzODA0OTQ5MTkwNi4uZTBjNjkzYzBhOTEwNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhX2JtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uYwpAQCAtMTI5LDYgJiM0MzsxMjksNyBAQCBzdGF0aWMgaW50IG12bmV0YV9ibV9wb29sX2NyZWF0ZShzdHJ1Y3QgbXZuZXRhX2JtICpwcml2LAogCWlmICghSVNfQUxJR05FRCgodTMyKWJtX3Bvb2wtJmd0O3ZpcnRfYWRkciwgTVZORVRBX0JNX1BPT0xfUFRSX0FMSUdOKSkgewogCQlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2Rldiwgc2l6ZV9ieXRlcywgYm1fcG9vbC0mZ3Q7dmlydF9hZGRyLAogCQkJCSAgYm1fcG9vbC0mZ3Q7cGh5c19hZGRyKTsKJiM0MzsJCWJtX3Bvb2wtJmd0O3ZpcnRfYWRkciA9IE5VTEw7CiAJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7Qk0gcG9vbCAlZCBpcyBub3QgJWQgYnl0ZXMgYWxpZ25lZFxuJiMzNDssCiAJCQlibV9wb29sLSZndDtpZCwgTVZORVRBX0JNX1BPT0xfUFRSX0FMSUdOKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMzksNiAmIzQzOzE0MCw3IEBAIHN0YXRpYyBpbnQgbXZuZXRhX2JtX3Bvb2xfY3JlYXRlKHN0cnVjdCBtdm5ldGFfYm0gKnByaXYsCiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJZG1hX2ZyZWVfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVfYnl0ZXMsIGJtX3Bvb2wtJmd0O3ZpcnRfYWRkciwKIAkJCQkgIGJtX3Bvb2wtJmd0O3BoeXNfYWRkcik7CiYjNDM7CQlibV9wb29sLSZndDt2aXJ0X2FkZHIgPSBOVUxMOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNDc3LDYgJiM0Mzs0NzksNzUgQEAgc3RhdGljIHZvaWQgbXZuZXRhX2JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LSZndDtjbGspOwogfQogCiYjNDM7c3RhdGljIGludCBtdm5ldGFfYm1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXZuZXRhX2JtICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiBEcmFpbiBidWZmZXJzIGFuZCBmcmVlIHBvb2wgcmVzb3VyY2VzIHdoaWxlIEJNIGlzIHN0aWxsIGNsb2NrZWQgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1WTkVUQV9CTV9QT09MU19OVU07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgbXZuZXRhX2JtX3Bvb2wgKmJtX3Bvb2wgPSAmYW1wO3ByaXYtJmd0O2JtX3Bvb2xzW2ldOwomIzQzOwkJaW50IHNpemVfYnl0ZXM7CiYjNDM7CiYjNDM7CQlpZiAoYm1fcG9vbC0mZ3Q7dHlwZSA9PSBNVk5FVEFfQk1fRlJFRSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCW12bmV0YV9ibV9idWZzX2ZyZWUocHJpdiwgYm1fcG9vbCwgYm1fcG9vbC0mZ3Q7cG9ydF9tYXApOwomIzQzOwkJaWYgKGJtX3Bvb2wtJmd0O2h3Ym1fcG9vbC5idWZfbnVtKQomIzQzOwkJCWRldl93YXJuKCZhbXA7cHJpdi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtwb29sICVkOiAlZCBidWZmZXJzIG5vdCBmcmVlZFxuJiMzNDssCiYjNDM7CQkJCSBibV9wb29sLSZndDtpZCwgYm1fcG9vbC0mZ3Q7aHdibV9wb29sLmJ1Zl9udW0pOwomIzQzOwomIzQzOwkJbXZuZXRhX2JtX3Bvb2xfZGlzYWJsZShwcml2LCBibV9wb29sLSZndDtpZCk7CiYjNDM7CiYjNDM7CQlpZiAoYm1fcG9vbC0mZ3Q7dmlydF9hZGRyKSB7CiYjNDM7CQkJc2l6ZV9ieXRlcyA9IHNpemVvZih1MzIpICogYm1fcG9vbC0mZ3Q7aHdibV9wb29sLnNpemU7CiYjNDM7CQkJZG1hX2ZyZWVfY29oZXJlbnQoJmFtcDtwcml2LSZndDtwZGV2LSZndDtkZXYsIHNpemVfYnl0ZXMsCiYjNDM7CQkJCQkgIGJtX3Bvb2wtJmd0O3ZpcnRfYWRkciwKJiM0MzsJCQkJCSAgYm1fcG9vbC0mZ3Q7cGh5c19hZGRyKTsKJiM0MzsJCQlibV9wb29sLSZndDt2aXJ0X2FkZHIgPSBOVUxMOwomIzQzOwkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIFNhZmUgdG8gZGVzdHJveTogZGV2aWNlX2xpbmsgZ3VhcmFudGVlcyBhbGwgbXZuZXRhIHBvcnRzCiYjNDM7CQkgKiBoYXZlIGFscmVhZHkgc3VzcGVuZGVkLCBzbyBubyBod2JtX3Bvb2xfYWRkKCkgY2FuIGJlIGluCiYjNDM7CQkgKiBwcm9ncmVzcyBob2xkaW5nIGJ1Zl9sb2NrLiAgUGFpcnMgd2l0aCBtdXRleF9pbml0KCkgaW4KJiM0MzsJCSAqIG12bmV0YV9ibV9wb29sX3VzZSgpIG9uIHJlc3VtZS4KJiM0MzsJCSAqLwomIzQzOwkJbXV0ZXhfZGVzdHJveSgmYW1wO2JtX3Bvb2wtJmd0O2h3Ym1fcG9vbC5idWZfbG9jayk7CiYjNDM7CQlibV9wb29sLSZndDt0eXBlID0gTVZORVRBX0JNX0ZSRUU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9DT01NQU5EX1JFRywgTVZORVRBX0JNX1NUT1BfTUFTSyk7CiYjNDM7CWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LSZndDtjbGspOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtdm5ldGFfYm1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtdm5ldGFfYm0gKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwkvKiBSZWluaXRpYWxpemUgQk0gaGFyZHdhcmU7IHBvb2xzIGFyZSByZWZpbGxlZCBieSBtdm5ldGFfcmVzdW1lKCkgKi8KJiM0MzsJbXZuZXRhX2JtX2RlZmF1bHRfc2V0KHByaXYpOwomIzQzOwomIzQzOwkvKiBSZXN0b3JlIHBvb2wgcmVnaXN0ZXJzIGxvc3QgZHVyaW5nIGNsb2NrIGdhdGluZyAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTVZORVRBX0JNX1BPT0xTX05VTTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW12bmV0YV9ibV93cml0ZShwcml2LCBNVk5FVEFfQk1fUE9PTF9SRUFEX1BUUl9SRUcoaSksIDApOwomIzQzOwkJbXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9QT09MX1dSSVRFX1BUUl9SRUcoaSksIDApOwomIzQzOwkJbXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9QT09MX1NJWkVfUkVHKGkpLAomIzQzOwkJCQlwcml2LSZndDtibV9wb29sc1tpXS5od2JtX3Bvb2wuc2l6ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9DT01NQU5EX1JFRywgTVZORVRBX0JNX1NUQVJUX01BU0spOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9TSU1QTEVfREVWX1BNX09QUyhtdm5ldGFfYm1fcG1fb3BzLCBtdm5ldGFfYm1fc3VzcGVuZCwgbXZuZXRhX2JtX3Jlc3VtZSk7CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdm5ldGFfYm1fbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gJiMzNDttYXJ2ZWxsLGFybWFkYS0zODAtbmV0YS1ibSYjMzQ7IH0sCiAJeyB9CkBAIC00ODksNiAmIzQzOzU2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12bmV0YV9ibV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSBNVk5FVEFfQk1fRFJJVkVSX05BTUUsCiAJCS5vZl9tYXRjaF90YWJsZSA9IG12bmV0YV9ibV9tYXRjaCwKJiM0MzsJCS5wbSA9IHBtX3NsZWVwX3B0cigmYW1wO212bmV0YV9ibV9wbV9vcHMpLAogCX0sCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0b3VjaGluZyBgbXZuZXRhLmNgIGFuZCBgbXZuZXRhX2JtLmNgIOKAkyBzcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBwb3dlciBtYW5hZ2VtZW50IGhvb2tzLCBzdXNwZW5kL3Jlc3VtZSwgZm9yIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBkZXZpY2UgbGluaywgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIGZvciBlbnN1cmluZyBwcm9wZXIgZGV2aWNlIG9yZGVyaW5nIGR1cmluZyBwb3dlciB0cmFuc2l0aW9ucywgYW5kIGZpeGVzIGEgcG9zc2libGUgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBtdm5ldGFfYm1fcG9vbF9jcmVhdGVgIGFmdGVyIGEgYGRtYV9mcmVlX2NvaGVyZW50YCBjYWxsLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGV2ZW4gd29ydGggZGlnZ2luZyBpbnRvIGZvciBmdXp6aW5nPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY29kZSYjMzk7cyByZWFjaGFiaWxpdHkuIFRoaXMgZHJpdmVyIHRhcmdldHMgTWFydmVsbCBBcm1hZGEgMzgwLzM4eCBTb0NzLiBUaG9zZSBhcmUgZ2VuZXJhbGx5ICpub3QqIGVhc2lseSBhY2Nlc3NpYmxlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBTb0Mtc3BlY2lmaWMgRXRoZXJuZXQgZHJpdmVycyBjYW4gYmUgYSBwYWluIGluIFFFTVUgdW5sZXNzIHlvdSBoYXZlIGEgZGVkaWNhdGVkIG1hY2hpbmUgbW9kZWwgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgZm9yIHRoZSB0YXJnZXQgaGFyZHdhcmUsIG9yIGlmIGl0IHByZXNlbnRzIGFzIGEgUENJIGRldmljZS4gU28sIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhlIGRldmljZSYjMzk7cyBzZXR1cCB0byBzZWUgaXRzIHJlYWNoYWJpbGl0eS4KCkxldCYjMzk7cyBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgYE1WTkVUQWAgYW5kIGBNVk5FVEFfQk1gIHN5bWJvbHMsIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgZWFzeSB3YXkgdG8gZW5hYmxlIHRoaXMgaW4gYSBtb3JlIGdlbmVyYWwgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVZORVRBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz0zND1jb25maWcgTVZNRElPXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjQ1OmNvbmZpZyBNVk5FVEFfQk1fRU5BQkxFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIEFybWFkYSAzOHgvWFAgbmV0d29yayBpbnRlcmZhY2UgQk0gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy01OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo1OTpjb25maWcgTVZORVRBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjAtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIEFybWFkYSAzNzAvMzh4L1hQLzM3eHggbmV0d29yayBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy03NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo3NTpjb25maWcgTVZORVRBX0JNXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNzYtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNYXJ2ZWxsIEFybWFkYSBOZXR3b3JrIERyaXZlciBpbiBSZWxhdGlvbiB0byBRRU1VIGFuZCBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgJiMzNDtNYXJ2ZWxsIEFybWFkYSAzNzAvMzh4L1hQLzM3eHggbmV0d29yayBpbnRlcmZhY2Ugc3VwcG9ydC4mIzM0OyBJdCYjMzk7cyBhIGBwbGF0Zm9ybV9kcml2ZXJgLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBRRU1VIGVtdWxhdGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgKnJlYXNvbmFibHkqIGVtdWxhdGUgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciB3aXRoaW4gUUVNVT8gSSBuZWVkIHRvIGNoZWNrIHdoaWNoIEFSTSBib2FyZHMgUUVNVSAqYWN0dWFsbHkqIHN1cHBvcnRzLCBhbmQgc3BlY2lmaWNhbGx5IGlmIGFueSBvZiB0aG9zZSBib2FyZHMgYXJlIEFybWFkYSAzODAvMzh4L1hQIGJhc2VkLiBJZiBub3QsIHRoaXMgaXMgZ29pbmcgdG8gYmUgYSB0b3VnaCByb2FkLgoKTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIHBsYXRmb3JtIGRldmljZSBkcml2ZXJzLCBkZXNpZ25lZCBmb3Igc3BlY2lmaWMgU29DcywgYXJlIHJhcmVseSBlYXNpbHkgZnV6emFibGUgKnVubGVzcyogd2UgaGF2ZSBhIFFFTVUgbWFjaGluZSBmb3IgdGhhdCBleGFjdCBwbGF0Zm9ybS4gT3IsIGZhaWxpbmcgUUVNVSwgdGhlcmUgbmVlZHMgdG8gYmUgc29tZSB3YXkgdG8gaW5qZWN0IHRoZSBwbGF0Zm9ybSBkZXZpY2UuIFN5emthbGxlciYjMzk7cyBwc2V1ZG8tZGV2aWNlIGluamVjdGlvbiBjb21lcyB0byBtaW5kLCBidXQgdGhhdCYjMzk7cyBub3QgdGhlIHVzdWFsIGNhc2UuIFN5emthbGxlciBnZW5lcmFsbHkgZG9lc24mIzM5O3QgaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGRlc2NyaXB0aW9uIHByb3ZpZGVkLiBJIGRvIG5lZWQgdG8gcmVjYWxsIGlmIFN5emthbGxlciBoYXMgYW55ICpzdXBwb3J0KiBmb3IgaW5qZWN0aW5nIHBsYXRmb3JtIGRldmljZXMsIHByb3ZpZGVkIHRoZXkgaGF2ZSBhIGRldmljZSBkZXNjcmlwdGlvbiwgYnV0IHRoZSBjaGFuY2VzIG9mIGl0IGJlaW5nIGFibGUgdG8gaGFuZGxlIGEgcmFuZG9tIFNvQyBldGhlcm5ldCBkcml2ZXIgYXJlIHVzdWFsbHkgcHJldHR5IHNsaW0uCgpPa2F5LCBsZXQgbWUgZWxpbWluYXRlIHNvbWUgb2YgdGhlc2UgZG91YnRzOiBpcyB0aGUgYE1WTkVUQWAgaW50ZXJmYWNlIGEgUENJIGRldmljZT8gUXVpY2sgY2hlY2suLi4gbm9wZSwgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkZXZpY2UuIE5vdywgSSBuZWVkIHRvIGxvb2sgZGlyZWN0bHkgYXQgdGhlIGRyaXZlciBjb2RlIGl0c2VsZi4gSSYjMzk7bGwgb3BlbiB1cCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuY2AgYW5kIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBhIGBwbGF0Zm9ybV9kcml2ZXJgIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsYXRmb3JtX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYz01OTM3PU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG12bmV0YV9tYXRjaCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jLTU5MzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jOjU5Mzk6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZuZXRhX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtNTk0MC1cdC5wcm9iZSA9IG12bmV0YV9wcm9iZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jPTU5NDk9c3RhdGljIGludCBfX2luaXQgbXZuZXRhX2RyaXZlcl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01OTY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYzo1OTY2Olx0cmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNm12bmV0YV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01OTY3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jPTU5ODA9c3RhdGljIHZvaWQgX19leGl0IG12bmV0YV9kcml2ZXJfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01OTgxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM6NTk4MjpcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNm12bmV0YV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01OTgzLVx0Y3B1aHBfcmVtb3ZlX211bHRpX3N0YXRlKENQVUhQX05FVF9NVk5FVEFfREVBRCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ0MwoJCQkJCQkJb3V0cHV0OiAxMDIKCQkJCQkJCXRob3VnaHRzOiAzNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZTogUGxhdGZvcm0gRGV2aWNlIGluIGEgVmlydHVhbGl6ZWQgV29ybGQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQmIzM5O3MgYSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBhIHBsYXRmb3JtIGRldmljZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtJcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudD8mIzM0OyBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIG5vLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCB0aGUgQXJtYWRhIDM4eCBTb0MuIFVubGVzcyBRRU1VIHNwZWNpZmljYWxseSBlbXVsYXRlcyAqdGhhdCogcGFydGljdWxhciBTb0MsIHdlJiMzOTtyZSBsaWtlbHkgb3V0IG9mIGx1Y2suCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgUUVNVSBldmVuICpoYXMqIEFybWFkYSAzOHggc3VwcG9ydC4gSG1tLCB5ZWFoLCBJIGRvbiYjMzk7dCB0aGluayBpdCBkb2VzLCBhbmQgZXZlbiBpZiBpdCBkaWQsIFN5emthbGxlciwgd2hpY2ggaXMgd2hhdCB3ZSYjMzk7cmUgcHJvYmFibHkgdXNpbmcgZm9yIGZ1enppbmcgaGVyZSwgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGJvb3Qgd2l0aCB0aGF0IHNwZWNpZmljIG1hY2hpbmUgdHlwZSBhbnl3YXkuIFN5emthbGxlciBzdGlja3MgdG8gYHZpcnRgIGZvciBBUk02NCwgYW5kIG1heWJlIGB2ZXhwcmVzc2Agb3IgYHZpcnRgIGZvciBBUk0zMi4gU28sIHRoaXMgY29kZSBwYXRoIGlzIHByZXR0eSBtdWNoIGRlYWQgaW4gdGhlIHdhdGVyIGFzIGZhciBhcyBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBnb2VzLgoKU28sIHNpbmNlIGl0JiMzOTtzIHVucmVhY2hhYmxlIGluIHRob3NlIGVudmlyb25tZW50cywgbXkgZmlyc3QgY29uY2x1c2lvbiBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBmYWxzZWAuCgpCdXQsIGxldCYjMzk7cyBkb3VibGUgY2hlY2suIEp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyAqYW55KiBvdGhlciBwb3NzaWJsZSBhbmdsZS4gT2theSwgdGhlIHBhdGNoIG1vZGlmaWVzIGBtdm5ldGFfcHJvYmVgIHRvIGFkZCBhIGRldmljZSBsaW5rLCBhbmQgaXQgYWxzbyBhZGRzIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9ucyB0byBgbXZuZXRhX2JtLmNgLiBUaGUgc3VzcGVuZC9yZXN1bWUgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBkdXJpbmcgc3lzdGVtIHN1c3BlbmQvcmVzdW1lLCB3aGljaCBtZWFucyB0aGV5JiMzOTtsbCBvbmx5IGJlIHRyaWdnZXJlZCBpZiB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IHByb2JlZC4KCkFuZCBzaW5jZSB0aGlzIGRldmljZSBpcyBhIHBsYXRmb3JtIGRldmljZSwgYm91bmQgdmlhIGEgZGV2aWNlIHRyZWUgZW50cnkgKGBtYXJ2ZWxsLGFybWFkYS0zODAtbmV0YS1ibWApLCB0aGUga2VybmVsIHdpbGwgb25seSBwcm9iZSBpdCBpZiB0aGF0IG5vZGUgaXMgcHJlc2VudCBpbiB0aGUgRFQuIFRoZSB0aGluZyBpcywgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGp1c3QgZHluYW1pY2FsbHkgYWRkIGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcyBmb3IgcGxhdGZvcm0gZGV2aWNlcy4gU28sIHRoYXQmIzM5O3MgYW5vdGhlciBkZWFkIGVuZC4gSXQmIzM5O3MgdW5yZWFjaGFibGUuCgpPa2F5LCB0aGF0IHNlYWxzIGl0LiBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nID0gZmFsc2VgLiBUaGUgbG9naWMgY2hhbmdlcyBwb3dlciBtYW5hZ2VtZW50IGFuZCBwcm9iZSBsb2dpYyBmb3IgdGhlIE1hcnZlbGwgTkVUQSBCdWZmZXIgTWFuYWdlci4gVGhlIE1hcnZlbGwgTkVUQSBCdWZmZXIgTWFuYWdlciBpcyBvbmx5IGF2YWlsYWJsZSBvbiBNYXJ2ZWxsIEFybWFkYSAzOHggU29Dcy4gQW5kIHRoYXQgaXMgbm90IHNvbWV0aGluZyB0aGF0IGlzIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggbWFrZXMgdGhpcyBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcG93ZXIgbWFuYWdlbWVudCBhbmQgcHJvYmUgbG9naWMgZm9yIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIgKG12bmV0YV9ibSksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZGV2aWNlIHNwZWNpZmljIHRvIE1hcnZlbGwgQXJtYWRhIFNvQ3MuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VJiMzOTtzICYjMzk7dmlydCYjMzk7IG1hY2hpbmUpIHVzZWQgYnkgZnV6emVycywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcG93ZXIgbWFuYWdlbWVudCBhbmQgcHJvYmUgbG9naWMgZm9yIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIgKG12bmV0YV9ibSksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZGV2aWNlIHNwZWNpZmljIHRvIE1hcnZlbGwgQXJtYWRhIFNvQ3MuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VJiMzOTtzICYjMzk7dmlydCYjMzk7IG1hY2hpbmUpIHVzZWQgYnkgZnV6emVycywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjIxOjMzLjA2MzMwNjQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NTk3MzQ3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHByb2JlIGxvZ2ljIGZvciB0aGUgTWFydmVsbCBORVRBIEJ1ZmZlciBNYW5hZ2VyIChtdm5ldGFfYm0pLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRldmljZSBzcGVjaWZpYyB0byBNYXJ2ZWxsIEFybWFkYSBTb0NzLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSdzICd2aXJ0JyBtYWNoaW5lKSB1c2VkIGJ5IGZ1enplcnMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjIxOjMzLjA2MzMxMzczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA1NDQ2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMjVlNzA1OGQ0MmZlMjQ0Njk4YjFkNDVmZTNmZjIzMmVkZDFiMDNmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDA3OjIxOjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jXFxuaW5kZXggNzQ0ZDY1ODVhOTQ5ZDEuLjU0M2U1NjY0MjVjMWU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jXFxuQEAgLTU2NzgsNiArNTY3OCwyNCBAQCBzdGF0aWMgaW50IG12bmV0YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHRcXHRcXHRcXHQgXFxcInVzZSBTVyBidWZmZXIgbWFuYWdlbWVudFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdG12bmV0YV9ibV9wdXQocHAtXFx1MDAzZWJtX3ByaXYpO1xcbiBcXHRcXHRcXHRcXHRwcC1cXHUwMDNlYm1fcHJpdiA9IE5VTEw7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoIWRldmljZV9saW5rX2FkZChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnBwLVxcdTAwM2VibV9wcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XFxuK1xcdFxcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdFxcdCAqIExpbmsgZ3VhcmFudGVlcyBCTSByZXN1bWVzIGJlZm9yZSBtdm5ldGEuXFxuK1xcdFxcdFxcdFxcdCAqIFdpdGhvdXQgaXQsIEJNIG1heSBub3QgYmUgcmVhZHkgd2hlblxcbitcXHRcXHRcXHRcXHQgKiBtdm5ldGFfYm1fcG9ydF9pbml0KCkgcnVucyBvbiByZXN1bWUsXFxuK1xcdFxcdFxcdFxcdCAqIGNhdXNpbmcgc3RhbGUgYnVmZmVyIGFkZHJlc3NlcyBhbmQgYSBjcmFzaC5cXG4rXFx0XFx0XFx0XFx0ICogRmFsbCBiYWNrIHRvIFNXIG1hbmFnZW1lbnQgdG8gYmUgc2FmZS5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiZmFpbGVkIHRvIGxpbmsgdG8gQk0sIHVzZSBTVyBidWZmZXIgbWFuYWdlbWVudFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdG12bmV0YV9ibV9wb29sX2Rlc3Ryb3kocHAtXFx1MDAzZWJtX3ByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBwcC1cXHUwMDNlcG9vbF9sb25nLCAxIFxcdTAwM2NcXHUwMDNjIHBwLVxcdTAwM2VpZCk7XFxuK1xcdFxcdFxcdFxcdG12bmV0YV9ibV9wb29sX2Rlc3Ryb3kocHAtXFx1MDAzZWJtX3ByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBwcC1cXHUwMDNlcG9vbF9zaG9ydCwgMSBcXHUwMDNjXFx1MDAzYyBwcC1cXHUwMDNlaWQpO1xcbitcXHRcXHRcXHRcXHRtdm5ldGFfYm1fcHV0KHBwLVxcdTAwM2VibV9wcml2KTtcXG4rXFx0XFx0XFx0XFx0cHAtXFx1MDAzZWJtX3ByaXYgPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0LyogU2V0IFJYIHBhY2tldCBvZmZzZXQgY29ycmVjdGlvbiBmb3IgcGxhdGZvcm1zLCB3aG9zZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YV9ibS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uY1xcbmluZGV4IDZiYjM4MDQ5NDkxOTA2Li5lMGM2OTNjMGE5MTA2MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YV9ibS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uY1xcbkBAIC0xMjksNiArMTI5LDcgQEAgc3RhdGljIGludCBtdm5ldGFfYm1fcG9vbF9jcmVhdGUoc3RydWN0IG12bmV0YV9ibSAqcHJpdixcXG4gXFx0aWYgKCFJU19BTElHTkVEKCh1MzIpYm1fcG9vbC1cXHUwMDNldmlydF9hZGRyLCBNVk5FVEFfQk1fUE9PTF9QVFJfQUxJR04pKSB7XFxuIFxcdFxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVfYnl0ZXMsIGJtX3Bvb2wtXFx1MDAzZXZpcnRfYWRkcixcXG4gXFx0XFx0XFx0XFx0ICBibV9wb29sLVxcdTAwM2VwaHlzX2FkZHIpO1xcbitcXHRcXHRibV9wb29sLVxcdTAwM2V2aXJ0X2FkZHIgPSBOVUxMO1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJCTSBwb29sICVkIGlzIG5vdCAlZCBieXRlcyBhbGlnbmVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRibV9wb29sLVxcdTAwM2VpZCwgTVZORVRBX0JNX1BPT0xfUFRSX0FMSUdOKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTEzOSw2ICsxNDAsNyBAQCBzdGF0aWMgaW50IG12bmV0YV9ibV9wb29sX2NyZWF0ZShzdHJ1Y3QgbXZuZXRhX2JtICpwcml2LFxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplX2J5dGVzLCBibV9wb29sLVxcdTAwM2V2aXJ0X2FkZHIsXFxuIFxcdFxcdFxcdFxcdCAgYm1fcG9vbC1cXHUwMDNlcGh5c19hZGRyKTtcXG4rXFx0XFx0Ym1fcG9vbC1cXHUwMDNldmlydF9hZGRyID0gTlVMTDtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG5AQCAtNDc3LDYgKzQ3OSw3NSBAQCBzdGF0aWMgdm9pZCBtdm5ldGFfYm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVxcdTAwM2VjbGspO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG12bmV0YV9ibV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbXZuZXRhX2JtICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogRHJhaW4gYnVmZmVycyBhbmQgZnJlZSBwb29sIHJlc291cmNlcyB3aGlsZSBCTSBpcyBzdGlsbCBjbG9ja2VkICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNVk5FVEFfQk1fUE9PTFNfTlVNOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IG12bmV0YV9ibV9wb29sICpibV9wb29sID0gXFx1MDAyNnByaXYtXFx1MDAzZWJtX3Bvb2xzW2ldO1xcbitcXHRcXHRpbnQgc2l6ZV9ieXRlcztcXG4rXFxuK1xcdFxcdGlmIChibV9wb29sLVxcdTAwM2V0eXBlID09IE1WTkVUQV9CTV9GUkVFKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdG12bmV0YV9ibV9idWZzX2ZyZWUocHJpdiwgYm1fcG9vbCwgYm1fcG9vbC1cXHUwMDNlcG9ydF9tYXApO1xcbitcXHRcXHRpZiAoYm1fcG9vbC1cXHUwMDNlaHdibV9wb29sLmJ1Zl9udW0pXFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwicG9vbCAlZDogJWQgYnVmZmVycyBub3QgZnJlZWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBibV9wb29sLVxcdTAwM2VpZCwgYm1fcG9vbC1cXHUwMDNlaHdibV9wb29sLmJ1Zl9udW0pO1xcbitcXG4rXFx0XFx0bXZuZXRhX2JtX3Bvb2xfZGlzYWJsZShwcml2LCBibV9wb29sLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRcXHRpZiAoYm1fcG9vbC1cXHUwMDNldmlydF9hZGRyKSB7XFxuK1xcdFxcdFxcdHNpemVfYnl0ZXMgPSBzaXplb2YodTMyKSAqIGJtX3Bvb2wtXFx1MDAzZWh3Ym1fcG9vbC5zaXplO1xcbitcXHRcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBzaXplX2J5dGVzLFxcbitcXHRcXHRcXHRcXHRcXHQgIGJtX3Bvb2wtXFx1MDAzZXZpcnRfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICBibV9wb29sLVxcdTAwM2VwaHlzX2FkZHIpO1xcbitcXHRcXHRcXHRibV9wb29sLVxcdTAwM2V2aXJ0X2FkZHIgPSBOVUxMO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNhZmUgdG8gZGVzdHJveTogZGV2aWNlX2xpbmsgZ3VhcmFudGVlcyBhbGwgbXZuZXRhIHBvcnRzXFxuK1xcdFxcdCAqIGhhdmUgYWxyZWFkeSBzdXNwZW5kZWQsIHNvIG5vIGh3Ym1fcG9vbF9hZGQoKSBjYW4gYmUgaW5cXG4rXFx0XFx0ICogcHJvZ3Jlc3MgaG9sZGluZyBidWZfbG9jay4gIFBhaXJzIHdpdGggbXV0ZXhfaW5pdCgpIGluXFxuK1xcdFxcdCAqIG12bmV0YV9ibV9wb29sX3VzZSgpIG9uIHJlc3VtZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmJtX3Bvb2wtXFx1MDAzZWh3Ym1fcG9vbC5idWZfbG9jayk7XFxuK1xcdFxcdGJtX3Bvb2wtXFx1MDAzZXR5cGUgPSBNVk5FVEFfQk1fRlJFRTtcXG4rXFx0fVxcbitcXG4rXFx0bXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9DT01NQU5EX1JFRywgTVZORVRBX0JNX1NUT1BfTUFTSyk7XFxuK1xcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtdm5ldGFfYm1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbXZuZXRhX2JtICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcdGludCBpLCBlcnI7XFxuK1xcbitcXHRlcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdC8qIFJlaW5pdGlhbGl6ZSBCTSBoYXJkd2FyZTsgcG9vbHMgYXJlIHJlZmlsbGVkIGJ5IG12bmV0YV9yZXN1bWUoKSAqL1xcbitcXHRtdm5ldGFfYm1fZGVmYXVsdF9zZXQocHJpdik7XFxuK1xcbitcXHQvKiBSZXN0b3JlIHBvb2wgcmVnaXN0ZXJzIGxvc3QgZHVyaW5nIGNsb2NrIGdhdGluZyAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTVZORVRBX0JNX1BPT0xTX05VTTsgaSsrKSB7XFxuK1xcdFxcdG12bmV0YV9ibV93cml0ZShwcml2LCBNVk5FVEFfQk1fUE9PTF9SRUFEX1BUUl9SRUcoaSksIDApO1xcbitcXHRcXHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX1BPT0xfV1JJVEVfUFRSX1JFRyhpKSwgMCk7XFxuK1xcdFxcdG12bmV0YV9ibV93cml0ZShwcml2LCBNVk5FVEFfQk1fUE9PTF9TSVpFX1JFRyhpKSxcXG4rXFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlYm1fcG9vbHNbaV0uaHdibV9wb29sLnNpemUpO1xcbitcXHR9XFxuK1xcbitcXHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX0NPTU1BTkRfUkVHLCBNVk5FVEFfQk1fU1RBUlRfTUFTSyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKG12bmV0YV9ibV9wbV9vcHMsIG12bmV0YV9ibV9zdXNwZW5kLCBtdm5ldGFfYm1fcmVzdW1lKTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG12bmV0YV9ibV9tYXRjaFtdID0ge1xcbiBcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1hcnZlbGwsYXJtYWRhLTM4MC1uZXRhLWJtXFxcIiB9LFxcbiBcXHR7IH1cXG5AQCAtNDg5LDYgKzU2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12bmV0YV9ibV9kcml2ZXIgPSB7XFxuIFxcdC5kcml2ZXIgPSB7XFxuIFxcdFxcdC5uYW1lID0gTVZORVRBX0JNX0RSSVZFUl9OQU1FLFxcbiBcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBtdm5ldGFfYm1fbWF0Y2gsXFxuK1xcdFxcdC5wbSA9IHBtX3NsZWVwX3B0cihcXHUwMDI2bXZuZXRhX2JtX3BtX29wcyksXFxuIFxcdH0sXFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzoyMTozMy42NzQ3NzMyOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEzNDgyNTc4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHByb2JlIGxvZ2ljIGZvciB0aGUgTWFydmVsbCBORVRBIEJ1ZmZlciBNYW5hZ2VyIChtdm5ldGFfYm0pLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRldmljZSBzcGVjaWZpYyB0byBNYXJ2ZWxsIEFybWFkYSBTb0NzLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSdzICd2aXJ0JyBtYWNoaW5lKSB1c2VkIGJ5IGZ1enplcnMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTI1ZTcwNThkNDJmZTI0NDY5OGIxZDQ1ZmUzZmYyMzJlZGQxYjAzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDA3OjIxOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcbmluZGV4IDc0NGQ2NTg1YTk0OWQxLi41NDNlNTY2NDI1YzFlNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmNcbkBAIC01Njc4LDYgKzU2NzgsMjQgQEAgc3RhdGljIGludCBtdm5ldGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0XHRcdFx0IFwidXNlIFNXIGJ1ZmZlciBtYW5hZ2VtZW50XFxuXCIpO1xuIFx0XHRcdFx0bXZuZXRhX2JtX3B1dChwcC1cdTAwM2VibV9wcml2KTtcbiBcdFx0XHRcdHBwLVx1MDAzZWJtX3ByaXYgPSBOVUxMO1xuK1x0XHRcdH0gZWxzZSBpZiAoIWRldmljZV9saW5rX2FkZChcdTAwMjZwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XHQgICAgXHUwMDI2cHAtXHUwMDNlYm1fcHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XHQgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIExpbmsgZ3VhcmFudGVlcyBCTSByZXN1bWVzIGJlZm9yZSBtdm5ldGEuXG4rXHRcdFx0XHQgKiBXaXRob3V0IGl0LCBCTSBtYXkgbm90IGJlIHJlYWR5IHdoZW5cbitcdFx0XHRcdCAqIG12bmV0YV9ibV9wb3J0X2luaXQoKSBydW5zIG9uIHJlc3VtZSxcbitcdFx0XHRcdCAqIGNhdXNpbmcgc3RhbGUgYnVmZmVyIGFkZHJlc3NlcyBhbmQgYSBjcmFzaC5cbitcdFx0XHRcdCAqIEZhbGwgYmFjayB0byBTVyBtYW5hZ2VtZW50IHRvIGJlIHNhZmUuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHQgXCJmYWlsZWQgdG8gbGluayB0byBCTSwgdXNlIFNXIGJ1ZmZlciBtYW5hZ2VtZW50XFxuXCIpO1xuK1x0XHRcdFx0bXZuZXRhX2JtX3Bvb2xfZGVzdHJveShwcC1cdTAwM2VibV9wcml2LFxuK1x0XHRcdFx0XHRcdCAgICAgICBwcC1cdTAwM2Vwb29sX2xvbmcsIDEgXHUwMDNjXHUwMDNjIHBwLVx1MDAzZWlkKTtcbitcdFx0XHRcdG12bmV0YV9ibV9wb29sX2Rlc3Ryb3kocHAtXHUwMDNlYm1fcHJpdixcbitcdFx0XHRcdFx0XHQgICAgICAgcHAtXHUwMDNlcG9vbF9zaG9ydCwgMSBcdTAwM2NcdTAwM2MgcHAtXHUwMDNlaWQpO1xuK1x0XHRcdFx0bXZuZXRhX2JtX3B1dChwcC1cdTAwM2VibV9wcml2KTtcbitcdFx0XHRcdHBwLVx1MDAzZWJtX3ByaXYgPSBOVUxMO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHQvKiBTZXQgUlggcGFja2V0IG9mZnNldCBjb3JyZWN0aW9uIGZvciBwbGF0Zm9ybXMsIHdob3NlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGFfYm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhX2JtLmNcbmluZGV4IDZiYjM4MDQ5NDkxOTA2Li5lMGM2OTNjMGE5MTA2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhX2JtLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhX2JtLmNcbkBAIC0xMjksNiArMTI5LDcgQEAgc3RhdGljIGludCBtdm5ldGFfYm1fcG9vbF9jcmVhdGUoc3RydWN0IG12bmV0YV9ibSAqcHJpdixcbiBcdGlmICghSVNfQUxJR05FRCgodTMyKWJtX3Bvb2wtXHUwMDNldmlydF9hZGRyLCBNVk5FVEFfQk1fUE9PTF9QVFJfQUxJR04pKSB7XG4gXHRcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplX2J5dGVzLCBibV9wb29sLVx1MDAzZXZpcnRfYWRkcixcbiBcdFx0XHRcdCAgYm1fcG9vbC1cdTAwM2VwaHlzX2FkZHIpO1xuK1x0XHRibV9wb29sLVx1MDAzZXZpcnRfYWRkciA9IE5VTEw7XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiQk0gcG9vbCAlZCBpcyBub3QgJWQgYnl0ZXMgYWxpZ25lZFxcblwiLFxuIFx0XHRcdGJtX3Bvb2wtXHUwMDNlaWQsIE1WTkVUQV9CTV9QT09MX1BUUl9BTElHTik7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTEzOSw2ICsxNDAsNyBAQCBzdGF0aWMgaW50IG12bmV0YV9ibV9wb29sX2NyZWF0ZShzdHJ1Y3QgbXZuZXRhX2JtICpwcml2LFxuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZV9ieXRlcywgYm1fcG9vbC1cdTAwM2V2aXJ0X2FkZHIsXG4gXHRcdFx0XHQgIGJtX3Bvb2wtXHUwMDNlcGh5c19hZGRyKTtcbitcdFx0Ym1fcG9vbC1cdTAwM2V2aXJ0X2FkZHIgPSBOVUxMO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuQEAgLTQ3Nyw2ICs0NzksNzUgQEAgc3RhdGljIHZvaWQgbXZuZXRhX2JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlY2xrKTtcbiB9XG4gXG4rc3RhdGljIGludCBtdm5ldGFfYm1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IG12bmV0YV9ibSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0aW50IGk7XG4rXG4rXHQvKiBEcmFpbiBidWZmZXJzIGFuZCBmcmVlIHBvb2wgcmVzb3VyY2VzIHdoaWxlIEJNIGlzIHN0aWxsIGNsb2NrZWQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1WTkVUQV9CTV9QT09MU19OVU07IGkrKykge1xuK1x0XHRzdHJ1Y3QgbXZuZXRhX2JtX3Bvb2wgKmJtX3Bvb2wgPSBcdTAwMjZwcml2LVx1MDAzZWJtX3Bvb2xzW2ldO1xuK1x0XHRpbnQgc2l6ZV9ieXRlcztcbitcbitcdFx0aWYgKGJtX3Bvb2wtXHUwMDNldHlwZSA9PSBNVk5FVEFfQk1fRlJFRSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0bXZuZXRhX2JtX2J1ZnNfZnJlZShwcml2LCBibV9wb29sLCBibV9wb29sLVx1MDAzZXBvcnRfbWFwKTtcbitcdFx0aWYgKGJtX3Bvb2wtXHUwMDNlaHdibV9wb29sLmJ1Zl9udW0pXG4rXHRcdFx0ZGV2X3dhcm4oXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdCBcInBvb2wgJWQ6ICVkIGJ1ZmZlcnMgbm90IGZyZWVkXFxuXCIsXG4rXHRcdFx0XHQgYm1fcG9vbC1cdTAwM2VpZCwgYm1fcG9vbC1cdTAwM2Vod2JtX3Bvb2wuYnVmX251bSk7XG4rXG4rXHRcdG12bmV0YV9ibV9wb29sX2Rpc2FibGUocHJpdiwgYm1fcG9vbC1cdTAwM2VpZCk7XG4rXG4rXHRcdGlmIChibV9wb29sLVx1MDAzZXZpcnRfYWRkcikge1xuK1x0XHRcdHNpemVfYnl0ZXMgPSBzaXplb2YodTMyKSAqIGJtX3Bvb2wtXHUwMDNlaHdibV9wb29sLnNpemU7XG4rXHRcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgc2l6ZV9ieXRlcyxcbitcdFx0XHRcdFx0ICBibV9wb29sLVx1MDAzZXZpcnRfYWRkcixcbitcdFx0XHRcdFx0ICBibV9wb29sLVx1MDAzZXBoeXNfYWRkcik7XG4rXHRcdFx0Ym1fcG9vbC1cdTAwM2V2aXJ0X2FkZHIgPSBOVUxMO1xuK1x0XHR9XG4rXHRcdC8qXG4rXHRcdCAqIFNhZmUgdG8gZGVzdHJveTogZGV2aWNlX2xpbmsgZ3VhcmFudGVlcyBhbGwgbXZuZXRhIHBvcnRzXG4rXHRcdCAqIGhhdmUgYWxyZWFkeSBzdXNwZW5kZWQsIHNvIG5vIGh3Ym1fcG9vbF9hZGQoKSBjYW4gYmUgaW5cbitcdFx0ICogcHJvZ3Jlc3MgaG9sZGluZyBidWZfbG9jay4gIFBhaXJzIHdpdGggbXV0ZXhfaW5pdCgpIGluXG4rXHRcdCAqIG12bmV0YV9ibV9wb29sX3VzZSgpIG9uIHJlc3VtZS5cbitcdFx0ICovXG4rXHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2Ym1fcG9vbC1cdTAwM2Vod2JtX3Bvb2wuYnVmX2xvY2spO1xuK1x0XHRibV9wb29sLVx1MDAzZXR5cGUgPSBNVk5FVEFfQk1fRlJFRTtcbitcdH1cbitcbitcdG12bmV0YV9ibV93cml0ZShwcml2LCBNVk5FVEFfQk1fQ09NTUFORF9SRUcsIE1WTkVUQV9CTV9TVE9QX01BU0spO1xuK1x0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlY2xrKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG12bmV0YV9ibV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBtdm5ldGFfYm0gKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcdGludCBpLCBlcnI7XG4rXG4rXHRlcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIFJlaW5pdGlhbGl6ZSBCTSBoYXJkd2FyZTsgcG9vbHMgYXJlIHJlZmlsbGVkIGJ5IG12bmV0YV9yZXN1bWUoKSAqL1xuK1x0bXZuZXRhX2JtX2RlZmF1bHRfc2V0KHByaXYpO1xuK1xuK1x0LyogUmVzdG9yZSBwb29sIHJlZ2lzdGVycyBsb3N0IGR1cmluZyBjbG9jayBnYXRpbmcgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1WTkVUQV9CTV9QT09MU19OVU07IGkrKykge1xuK1x0XHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX1BPT0xfUkVBRF9QVFJfUkVHKGkpLCAwKTtcbitcdFx0bXZuZXRhX2JtX3dyaXRlKHByaXYsIE1WTkVUQV9CTV9QT09MX1dSSVRFX1BUUl9SRUcoaSksIDApO1xuK1x0XHRtdm5ldGFfYm1fd3JpdGUocHJpdiwgTVZORVRBX0JNX1BPT0xfU0laRV9SRUcoaSksXG4rXHRcdFx0XHRwcml2LVx1MDAzZWJtX3Bvb2xzW2ldLmh3Ym1fcG9vbC5zaXplKTtcbitcdH1cbitcbitcdG12bmV0YV9ibV93cml0ZShwcml2LCBNVk5FVEFfQk1fQ09NTUFORF9SRUcsIE1WTkVUQV9CTV9TVEFSVF9NQVNLKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKG12bmV0YV9ibV9wbV9vcHMsIG12bmV0YV9ibV9zdXNwZW5kLCBtdm5ldGFfYm1fcmVzdW1lKTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdm5ldGFfYm1fbWF0Y2hbXSA9IHtcbiBcdHsgLmNvbXBhdGlibGUgPSBcIm1hcnZlbGwsYXJtYWRhLTM4MC1uZXRhLWJtXCIgfSxcbiBcdHsgfVxuQEAgLTQ4OSw2ICs1NjAsNyBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdm5ldGFfYm1fZHJpdmVyID0ge1xuIFx0LmRyaXZlciA9IHtcbiBcdFx0Lm5hbWUgPSBNVk5FVEFfQk1fRFJJVkVSX05BTUUsXG4gXHRcdC5vZl9tYXRjaF90YWJsZSA9IG12bmV0YV9ibV9tYXRjaCxcbitcdFx0LnBtID0gcG1fc2xlZXBfcHRyKFx1MDAyNm12bmV0YV9ibV9wbV9vcHMpLFxuIFx0fSxcbiB9O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6MjE6MzMuNjc0Nzc1NTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDY3NTk3MDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWFydmVsbCBORVRBIEJ1ZmZlciBNYW5hZ2VyIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYG12bmV0YS5jYCBhbmQgYG12bmV0YV9ibS5jYCDigJMgc3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBwb3dlciBtYW5hZ2VtZW50IGhvb2tzLCBzdXNwZW5kL3Jlc3VtZSwgZm9yIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBkZXZpY2UgbGluaywgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIGZvciBlbnN1cmluZyBwcm9wZXIgZGV2aWNlIG9yZGVyaW5nIGR1cmluZyBwb3dlciB0cmFuc2l0aW9ucywgYW5kIGZpeGVzIGEgcG9zc2libGUgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBtdm5ldGFfYm1fcG9vbF9jcmVhdGVgIGFmdGVyIGEgYGRtYV9mcmVlX2NvaGVyZW50YCBjYWxsLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZXZlbiB3b3J0aCBkaWdnaW5nIGludG8gZm9yIGZ1enppbmc/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb2RlJ3MgcmVhY2hhYmlsaXR5LiBUaGlzIGRyaXZlciB0YXJnZXRzIE1hcnZlbGwgQXJtYWRhIDM4MC8zOHggU29Dcy4gVGhvc2UgYXJlIGdlbmVyYWxseSAqbm90KiBlYXNpbHkgYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVS4gU29DLXNwZWNpZmljIEV0aGVybmV0IGRyaXZlcnMgY2FuIGJlIGEgcGFpbiBpbiBRRU1VIHVubGVzcyB5b3UgaGF2ZSBhIGRlZGljYXRlZCBtYWNoaW5lIG1vZGVsIHNwZWNpZmljYWxseSBjb25maWd1cmVkIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlLCBvciBpZiBpdCBwcmVzZW50cyBhcyBhIFBDSSBkZXZpY2UuIFNvLCB0aGUgZmlyc3Qgc3RlcCBpcyB0byBjb25maXJtIHRoZSBkZXZpY2UncyBzZXR1cCB0byBzZWUgaXRzIHJlYWNoYWJpbGl0eS5cblxuTGV0J3MgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIGBNVk5FVEFgIGFuZCBgTVZORVRBX0JNYCBzeW1ib2xzLCBzZWUgaWYgdGhlcmUncyBhbnkgZWFzeSB3YXkgdG8gZW5hYmxlIHRoaXMgaW4gYSBtb3JlIGdlbmVyYWwgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjIxOjQwLjE0MjM3NDk0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEwOTAzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1WTkVUQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTM0PWNvbmZpZyBNVk1ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy00NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NDU6Y29uZmlnIE1WTkVUQV9CTV9FTkFCTEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNDYtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgQXJtYWRhIDM4eC9YUCBuZXR3b3JrIGludGVyZmFjZSBCTSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZzo1OTpjb25maWcgTVZORVRBXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIEFybWFkYSAzNzAvMzh4L1hQLzM3eHggbmV0d29yayBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy03NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NzU6Y29uZmlnIE1WTkVUQV9CTVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy03Ni1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzoyMTo0MC4yOTM0NzAzOTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzI1MjQ3OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWFydmVsbCBBcm1hZGEgTmV0d29yayBEcml2ZXIgaW4gUmVsYXRpb24gdG8gUUVNVSBhbmQgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyLCBcIk1hcnZlbGwgQXJtYWRhIDM3MC8zOHgvWFAvMzd4eCBuZXR3b3JrIGludGVyZmFjZSBzdXBwb3J0LlwiIEl0J3MgYSBgcGxhdGZvcm1fZHJpdmVyYCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgUUVNVSBlbXVsYXRpb24uIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICpyZWFzb25hYmx5KiBlbXVsYXRlIHRoaXMgcGFydGljdWxhciBkcml2ZXIgd2l0aGluIFFFTVU/IEkgbmVlZCB0byBjaGVjayB3aGljaCBBUk0gYm9hcmRzIFFFTVUgKmFjdHVhbGx5KiBzdXBwb3J0cywgYW5kIHNwZWNpZmljYWxseSBpZiBhbnkgb2YgdGhvc2UgYm9hcmRzIGFyZSBBcm1hZGEgMzgwLzM4eC9YUCBiYXNlZC4gSWYgbm90LCB0aGlzIGlzIGdvaW5nIHRvIGJlIGEgdG91Z2ggcm9hZC5cblxuTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIHBsYXRmb3JtIGRldmljZSBkcml2ZXJzLCBkZXNpZ25lZCBmb3Igc3BlY2lmaWMgU29DcywgYXJlIHJhcmVseSBlYXNpbHkgZnV6emFibGUgKnVubGVzcyogd2UgaGF2ZSBhIFFFTVUgbWFjaGluZSBmb3IgdGhhdCBleGFjdCBwbGF0Zm9ybS4gT3IsIGZhaWxpbmcgUUVNVSwgdGhlcmUgbmVlZHMgdG8gYmUgc29tZSB3YXkgdG8gaW5qZWN0IHRoZSBwbGF0Zm9ybSBkZXZpY2UuIFN5emthbGxlcidzIHBzZXVkby1kZXZpY2UgaW5qZWN0aW9uIGNvbWVzIHRvIG1pbmQsIGJ1dCB0aGF0J3Mgbm90IHRoZSB1c3VhbCBjYXNlLiBTeXprYWxsZXIgZ2VuZXJhbGx5IGRvZXNuJ3QgaW5qZWN0IGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgZGVzY3JpcHRpb24gcHJvdmlkZWQuIEkgZG8gbmVlZCB0byByZWNhbGwgaWYgU3l6a2FsbGVyIGhhcyBhbnkgKnN1cHBvcnQqIGZvciBpbmplY3RpbmcgcGxhdGZvcm0gZGV2aWNlcywgcHJvdmlkZWQgdGhleSBoYXZlIGEgZGV2aWNlIGRlc2NyaXB0aW9uLCBidXQgdGhlIGNoYW5jZXMgb2YgaXQgYmVpbmcgYWJsZSB0byBoYW5kbGUgYSByYW5kb20gU29DIGV0aGVybmV0IGRyaXZlciBhcmUgdXN1YWxseSBwcmV0dHkgc2xpbS5cblxuT2theSwgbGV0IG1lIGVsaW1pbmF0ZSBzb21lIG9mIHRoZXNlIGRvdWJ0czogaXMgdGhlIGBNVk5FVEFgIGludGVyZmFjZSBhIFBDSSBkZXZpY2U/IFF1aWNrIGNoZWNrLi4uIG5vcGUsIGl0J3MgYSBwbGF0Zm9ybSBkZXZpY2UuIE5vdywgSSBuZWVkIHRvIGxvb2sgZGlyZWN0bHkgYXQgdGhlIGRyaXZlciBjb2RlIGl0c2VsZi4gSSdsbCBvcGVuIHVwIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jYCBhbmQgY29uZmlybSB0aGF0IGl0J3MgYSBgcGxhdGZvcm1fZHJpdmVyYCBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzoyMTo0Ni42MTg3MjA2NDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwODM2MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBsYXRmb3JtX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM9NTkzNz1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdm5ldGFfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtNTkzOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jOjU5Mzk6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZuZXRhX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jLTU5NDAtXFx0LnByb2JlID0gbXZuZXRhX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYz01OTQ5PXN0YXRpYyBpbnQgX19pbml0IG12bmV0YV9kcml2ZXJfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01OTY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM6NTk2NjpcXHRyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNm12bmV0YV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMtNTk2Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYz01OTgwPXN0YXRpYyB2b2lkIF9fZXhpdCBtdm5ldGFfZHJpdmVyX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jLTU5ODEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmM6NTk4MjpcXHRwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2bXZuZXRhX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYy01OTgzLVxcdGNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShDUFVIUF9ORVRfTVZORVRBX0RFQUQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzoyMTo0Ni43OTk1NjE0MDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjIzNDM3ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGU6IFBsYXRmb3JtIERldmljZSBpbiBhIFZpcnR1YWxpemVkIFdvcmxkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBpdCdzIGEgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgYSBwbGF0Zm9ybSBkZXZpY2UuIEknbSB0aGlua2luZywgXCJJcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudD9cIiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIG5vLCBnaXZlbiB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIHRoZSBBcm1hZGEgMzh4IFNvQy4gVW5sZXNzIFFFTVUgc3BlY2lmaWNhbGx5IGVtdWxhdGVzICp0aGF0KiBwYXJ0aWN1bGFyIFNvQywgd2UncmUgbGlrZWx5IG91dCBvZiBsdWNrLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgUUVNVSBldmVuICpoYXMqIEFybWFkYSAzOHggc3VwcG9ydC4gSG1tLCB5ZWFoLCBJIGRvbid0IHRoaW5rIGl0IGRvZXMsIGFuZCBldmVuIGlmIGl0IGRpZCwgU3l6a2FsbGVyLCB3aGljaCBpcyB3aGF0IHdlJ3JlIHByb2JhYmx5IHVzaW5nIGZvciBmdXp6aW5nIGhlcmUsIGRvZXNuJ3QgdHlwaWNhbGx5IGJvb3Qgd2l0aCB0aGF0IHNwZWNpZmljIG1hY2hpbmUgdHlwZSBhbnl3YXkuIFN5emthbGxlciBzdGlja3MgdG8gYHZpcnRgIGZvciBBUk02NCwgYW5kIG1heWJlIGB2ZXhwcmVzc2Agb3IgYHZpcnRgIGZvciBBUk0zMi4gU28sIHRoaXMgY29kZSBwYXRoIGlzIHByZXR0eSBtdWNoIGRlYWQgaW4gdGhlIHdhdGVyIGFzIGZhciBhcyBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBnb2VzLlxuXG5Tbywgc2luY2UgaXQncyB1bnJlYWNoYWJsZSBpbiB0aG9zZSBlbnZpcm9ubWVudHMsIG15IGZpcnN0IGNvbmNsdXNpb24gaXMgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLlxuXG5CdXQsIGxldCdzIGRvdWJsZSBjaGVjay4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLCBsZXQncyBzZWUgaWYgdGhlcmUncyAqYW55KiBvdGhlciBwb3NzaWJsZSBhbmdsZS4gT2theSwgdGhlIHBhdGNoIG1vZGlmaWVzIGBtdm5ldGFfcHJvYmVgIHRvIGFkZCBhIGRldmljZSBsaW5rLCBhbmQgaXQgYWxzbyBhZGRzIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9ucyB0byBgbXZuZXRhX2JtLmNgLiBUaGUgc3VzcGVuZC9yZXN1bWUgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBkdXJpbmcgc3lzdGVtIHN1c3BlbmQvcmVzdW1lLCB3aGljaCBtZWFucyB0aGV5J2xsIG9ubHkgYmUgdHJpZ2dlcmVkIGlmIHRoZSBkZXZpY2UgaXMgYWN0dWFsbHkgcHJvYmVkLlxuXG5BbmQgc2luY2UgdGhpcyBkZXZpY2UgaXMgYSBwbGF0Zm9ybSBkZXZpY2UsIGJvdW5kIHZpYSBhIGRldmljZSB0cmVlIGVudHJ5IChgbWFydmVsbCxhcm1hZGEtMzgwLW5ldGEtYm1gKSwgdGhlIGtlcm5lbCB3aWxsIG9ubHkgcHJvYmUgaXQgaWYgdGhhdCBub2RlIGlzIHByZXNlbnQgaW4gdGhlIERULiBUaGUgdGhpbmcgaXMsIFN5emthbGxlciBkb2Vzbid0IGp1c3QgZHluYW1pY2FsbHkgYWRkIGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcyBmb3IgcGxhdGZvcm0gZGV2aWNlcy4gU28sIHRoYXQncyBhbm90aGVyIGRlYWQgZW5kLiBJdCdzIHVucmVhY2hhYmxlLlxuXG5Pa2F5LCB0aGF0IHNlYWxzIGl0LiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuIFRoZSBsb2dpYyBjaGFuZ2VzIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHByb2JlIGxvZ2ljIGZvciB0aGUgTWFydmVsbCBORVRBIEJ1ZmZlciBNYW5hZ2VyLiBUaGUgTWFydmVsbCBORVRBIEJ1ZmZlciBNYW5hZ2VyIGlzIG9ubHkgYXZhaWxhYmxlIG9uIE1hcnZlbGwgQXJtYWRhIDM4eCBTb0NzLiBBbmQgdGhhdCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgaXMgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB3aGljaCBtYWtlcyB0aGlzIGNvZGUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDMsIk91dHB1dFRva2VucyI6MTAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjIxOjU1LjAyMzAwMTUyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcG93ZXIgbWFuYWdlbWVudCBhbmQgcHJvYmUgbG9naWMgZm9yIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIgKG12bmV0YV9ibSksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZGV2aWNlIHNwZWNpZmljIHRvIE1hcnZlbGwgQXJtYWRhIFNvQ3MuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VJ3MgJ3ZpcnQnIG1hY2hpbmUpIHVzZWQgYnkgZnV6emVycywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcG93ZXIgbWFuYWdlbWVudCBhbmQgcHJvYmUgbG9naWMgZm9yIHRoZSBNYXJ2ZWxsIE5FVEEgQnVmZmVyIE1hbmFnZXIgKG12bmV0YV9ibSksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZGV2aWNlIHNwZWNpZmljIHRvIE1hcnZlbGwgQXJtYWRhIFNvQ3MuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VJ3MgJ3ZpcnQnIG1hY2hpbmUpIHVzZWQgYnkgZnV6emVycywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxft4k[1] Phase: Running StartedAt: 2026-06-30 07:24:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxft4k[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-30 07:24:06 +0000 UTC FinishedAt: 2026-06-30 07:24:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}