Name: series-workflowhzzbq Phase: Succeeded StartedAt: 2026-08-17 07:36:21 +0000 UTC FinishedAt: 2026-08-17 09:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[0] Phase: Succeeded StartedAt: 2026-08-17 07:36:21 +0000 UTC FinishedAt: 2026-08-17 08:07:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 07:36:21 +0000 UTC FinishedAt: 2026-08-17 08:07:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLIP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLIP" ], "series_id": "1c8513c1-4f66-4a26-bbf3-2619ff7f15bd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "slip_open", "slip_close", "sl_free_netdev", "sl_sync", "sl_alloc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMSVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbGlwX29wZW4mIzM0OywKICAgICYjMzQ7c2xpcF9jbG9zZSYjMzQ7LAogICAgJiMzNDtzbF9mcmVlX25ldGRldiYjMzQ7LAogICAgJiMzNDtzbF9zeW5jJiMzNDssCiAgICAmIzM0O3NsX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG11dGV4IChgc2xpcF9kZXZzX2xvY2tgKSB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBgc2xpcF9kZXZzYCBhcnJheSBpbiB0aGUgc2xpcCBkcml2ZXIuIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBmaXggYWltZWQgYXQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTElQIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIgYnkgaW50cm9kdWNpbmcgYSBtdXRleCB0byBwcm90ZWN0IHRoZSBgc2xpcF9kZXZzYCBhcnJheS4gVGhlIHJhY2Ugb2NjdXJzIGJldHdlZW4gYHNsX2ZyZWVfbmV0ZGV2YCAocnVubmluZyBhc3luY2hyb25vdXNseSBmcm9tIGBuZXRkZXZfcnVuX3RvZG9gKSBhbmQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHNsX2FsbG9jYCBhbmQgYHNsX3N5bmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjb25jdXJyZW5jeSBmaXggaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyZjg3MzkzYzlhYjM5MWZiYjhkYjBiYmQwZWJmOTFiMGEzNjA4YTdmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDg6MDY6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMgYi9kcml2ZXJzL25ldC9zbGlwL3NsaXAuY1xuaW5kZXggZmFhZTcxMWNmNzkzZC4uNWNkYWU5ODMxZjA4NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9zbGlwL3NsaXAuY1xuQEAgLTk2LDYgJiM0Mzs5NiwxMiBAQFxuIFxuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqKnNsaXBfZGV2cztcbiBcbiYjNDM7LyogU2VyaWFsaXNlcyBhY2Nlc3MgdG8gc2xpcF9kZXZzW10gYW5kIHRvIHRoZSBzbGlwIGNoYW5uZWxzIGl0IHBvaW50cyBhdC5cbiYjNDM7ICogUlROTCBpcyBub3QgZW5vdWdoOiBzbF9mcmVlX25ldGRldigpIGlzIHRoZSBwcml2X2Rlc3RydWN0b3IgYW5kIHRoZXJlZm9yZVxuJiM0MzsgKiBydW5zIGZyb20gbmV0ZGV2X3J1bl90b2RvKCksIHdoaWNoIGRlbGliZXJhdGVseSBkcm9wcyB0aGUgUlROTCBzZW1hcGhvcmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHNsaXBfZGV2c19sb2NrKTtcbiYjNDM7XG4gc3RhdGljIGludCBzbGlwX21heGRldiA9IFNMX05SVU5JVDtcbiBtb2R1bGVfcGFyYW0oc2xpcF9tYXhkZXYsIGludCwgMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhzbGlwX21heGRldiwgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2Ygc2xpcCBkZXZpY2VzXCYjMzQ7KTtcbkBAIC02MzUsNyAmIzQzOzY0MSwxMyBAQCBzdGF0aWMgdm9pZCBzbF9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGludCBpID0gZGV2LVx1MDAzZWJhc2VfYWRkcjtcbiBcbi1cdHNsaXBfZGV2c1tpXSA9IE5VTEw7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4mIzQzO1x0LyogT25seSBkcm9wIG91ciBvd24gZW50cnk6IHRoZSBzbG90IG1heSBhbHJlYWR5IGhhdmUgYmVlbiByZXVzZWQgYnlcbiYjNDM7XHQgKiBzbF9hbGxvYygpIGZvciBhIGRpZmZlcmVudCBjaGFubmVsLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzbGlwX2RldnNbaV0gPT0gZGV2KVxuJiM0MztcdFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNsX25ldGRldl9vcHMgPSB7XG5AQCAtNzI1LDYgJiM0Mzs3MzcsNyBAQCBzdGF0aWMgdm9pZCBzbF9zeW5jKHZvaWQpXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0c3RydWN0IHNsaXBcdCAgKnNsO1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbiBcdFx0aWYgKGRldiA9PSBOVUxMKVxuQEAgLTczNiw2ICYjNDM7NzQ5LDcgQEAgc3RhdGljIHZvaWQgc2xfc3luYyh2b2lkKVxuIFx0XHRpZiAoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApXG4gXHRcdFx0ZGV2X2Nsb3NlKGRldik7XG4gXHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiB9XG4gXG4gXG5AQCAtNzQ3LDE5ICYjNDM7NzYxLDI0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMO1xuIFx0c3RydWN0IHNsaXAgICAgICAgKnNsO1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbiBcdFx0aWYgKGRldiA9PSBOVUxMKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuIFx0LyogU29ycnksIHRvbyBtYW55LCBhbGwgc2xvdHMgaW4gdXNlICovXG4tXHRpZiAoaSBcdTAwM2U9IHNsaXBfbWF4ZGV2KVxuJiM0MztcdGlmIChpIFx1MDAzZT0gc2xpcF9tYXhkZXYpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiBcbiBcdHNwcmludGYobmFtZSwgXCYjMzQ7c2wlZFwmIzM0OywgaSk7XG4gXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpzbCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sIHNsX3NldHVwKTtcbi1cdGlmICghZGV2KVxuJiM0MztcdGlmICghZGV2KSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXG4gXHRkZXYtXHUwMDNlYmFzZV9hZGRyICA9IGk7XG4gXHRzbCA9IG5ldGRldl9wcml2KGRldik7XG5AQCAtNzc2LDYgJiM0Mzs3OTUsNyBAQCBzdGF0aWMgc3RydWN0IHNsaXAgKnNsX2FsbG9jKHZvaWQpXG4gXHR0aW1lcl9zZXR1cChcdTAwMjZzbC1cdTAwM2VvdXRmaWxsX3RpbWVyLCBzbF9vdXRmaWxsLCAwKTtcbiAjZW5kaWZcbiBcdHNsaXBfZGV2c1tpXSA9IGRldjtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIFx0cmV0dXJuIHNsO1xuIH1cbiBcbkBAIC0xMzMyLDYgJiM0MzsxMzUyLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKVxuIFx0XHRcdG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7XG4gXG4gXHRcdGJ1c3kgPSAwO1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbiBcdFx0XHRpZiAoIWRldilcbkBAIC0xMzQ0LDE2ICYjNDM7MTM2NSwxOSBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgc2xpcF9leGl0KHZvaWQpXG4gXHRcdFx0fVxuIFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNsLVx1MDAzZWxvY2spO1xuIFx0XHR9XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIFx0fSB3aGlsZSAoYnVzeSBcdTAwMjZcdTAwMjYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpO1xuIFxuIFx0LyogRklYTUU6IGhhbmd1cCBpcyBhc3luYyBzbyB3ZSBzaG91bGQgd2FpdCB3aGVuIGRvaW5nIHRoaXMgc2Vjb25kXG4gXHQgICBwaGFzZSAqL1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xuJiM0MztcdFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdGlmICghZGV2KVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRzbGlwX2RldnNbaV0gPSBOVUxMO1xuIFxuIFx0XHRzbCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRcdGlmIChzbC1cdTAwM2V0dHkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0xJUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NsaXBfb3BlbiYjMzQ7LAogICAgJiMzNDtzbGlwX2Nsb3NlJiMzNDssCiAgICAmIzM0O3NsX2ZyZWVfbmV0ZGV2JiMzNDssCiAgICAmIzM0O3NsX3N5bmMmIzM0OywKICAgICYjMzQ7c2xfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyIGJ5IGludHJvZHVjaW5nIGEgbXV0ZXggdG8gcHJvdGVjdCB0aGUgYHNsaXBfZGV2c2AgYXJyYXkuIFRoZSByYWNlIG9jY3VycyBiZXR3ZWVuIGBzbF9mcmVlX25ldGRldmAgKHJ1bm5pbmcgYXN5bmNocm9ub3VzbHkgZnJvbSBgbmV0ZGV2X3J1bl90b2RvYCkgYW5kIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBzbF9hbGxvY2AgYW5kIGBzbF9zeW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY29uY3VycmVuY3kgZml4IGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmY4NzM5M2M5YWIzOTFmYmI4ZGIwYmJkMGViZjkxYjBhMzYwOGE3ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA4OjA2OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMgYi9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYwppbmRleCBmYWFlNzExY2Y3OTNkLi41Y2RhZTk4MzFmMDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYwpAQCAtOTYsNiAmIzQzOzk2LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqKnNsaXBfZGV2czsKIAomIzQzOy8qIFNlcmlhbGlzZXMgYWNjZXNzIHRvIHNsaXBfZGV2c1tdIGFuZCB0byB0aGUgc2xpcCBjaGFubmVscyBpdCBwb2ludHMgYXQuCiYjNDM7ICogUlROTCBpcyBub3QgZW5vdWdoOiBzbF9mcmVlX25ldGRldigpIGlzIHRoZSBwcml2X2Rlc3RydWN0b3IgYW5kIHRoZXJlZm9yZQomIzQzOyAqIHJ1bnMgZnJvbSBuZXRkZXZfcnVuX3RvZG8oKSwgd2hpY2ggZGVsaWJlcmF0ZWx5IGRyb3BzIHRoZSBSVE5MIHNlbWFwaG9yZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHNsaXBfZGV2c19sb2NrKTsKJiM0MzsKIHN0YXRpYyBpbnQgc2xpcF9tYXhkZXYgPSBTTF9OUlVOSVQ7CiBtb2R1bGVfcGFyYW0oc2xpcF9tYXhkZXYsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNsaXBfbWF4ZGV2LCAmIzM0O01heGltdW0gbnVtYmVyIG9mIHNsaXAgZGV2aWNlcyYjMzQ7KTsKQEAgLTYzNSw3ICYjNDM7NjQxLDEzIEBAIHN0YXRpYyB2b2lkIHNsX2ZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGkgPSBkZXYtJmd0O2Jhc2VfYWRkcjsKIAotCXNsaXBfZGV2c1tpXSA9IE5VTEw7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiYjNDM7CS8qIE9ubHkgZHJvcCBvdXIgb3duIGVudHJ5OiB0aGUgc2xvdCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gcmV1c2VkIGJ5CiYjNDM7CSAqIHNsX2FsbG9jKCkgZm9yIGEgZGlmZmVyZW50IGNoYW5uZWwuCiYjNDM7CSAqLwomIzQzOwlpZiAoc2xpcF9kZXZzW2ldID09IGRldikKJiM0MzsJCXNsaXBfZGV2c1tpXSA9IE5VTEw7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3NsaXBfZGV2c19sb2NrKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzbF9uZXRkZXZfb3BzID0gewpAQCAtNzI1LDYgJiM0Mzs3MzcsNyBAQCBzdGF0aWMgdm9pZCBzbF9zeW5jKHZvaWQpCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2xpcAkgICpzbDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCWZvciAoaSA9IDA7IGkgJmx0OyBzbGlwX21heGRldjsgaSYjNDM7JiM0MzspIHsKIAkJZGV2ID0gc2xpcF9kZXZzW2ldOwogCQlpZiAoZGV2ID09IE5VTEwpCkBAIC03MzYsNiAmIzQzOzc0OSw3IEBAIHN0YXRpYyB2b2lkIHNsX3N5bmModm9pZCkKIAkJaWYgKGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1VQKQogCQkJZGV2X2Nsb3NlKGRldik7CiAJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiB9CiAKIApAQCAtNzQ3LDE5ICYjNDM7NzYxLDI0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZCkKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3Qgc2xpcCAgICAgICAqc2w7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3NsaXBfZGV2c19sb2NrKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7CiAJCWRldiA9IHNsaXBfZGV2c1tpXTsKIAkJaWYgKGRldiA9PSBOVUxMKQogCQkJYnJlYWs7CiAJfQogCS8qIFNvcnJ5LCB0b28gbWFueSwgYWxsIHNsb3RzIGluIHVzZSAqLwotCWlmIChpICZndDs9IHNsaXBfbWF4ZGV2KQomIzQzOwlpZiAoaSAmZ3Q7PSBzbGlwX21heGRldikgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCQlyZXR1cm4gTlVMTDsKJiM0MzsJfQogCiAJc3ByaW50ZihuYW1lLCAmIzM0O3NsJWQmIzM0OywgaSk7CiAJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqc2wpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLCBzbF9zZXR1cCk7Ci0JaWYgKCFkZXYpCiYjNDM7CWlmICghZGV2KSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJCXJldHVybiBOVUxMOwomIzQzOwl9CiAKIAlkZXYtJmd0O2Jhc2VfYWRkciAgPSBpOwogCXNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTc3Niw2ICYjNDM7Nzk1LDcgQEAgc3RhdGljIHN0cnVjdCBzbGlwICpzbF9hbGxvYyh2b2lkKQogCXRpbWVyX3NldHVwKCZhbXA7c2wtJmd0O291dGZpbGxfdGltZXIsIHNsX291dGZpbGwsIDApOwogI2VuZGlmCiAJc2xpcF9kZXZzW2ldID0gZGV2OwomIzQzOwltdXRleF91bmxvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJcmV0dXJuIHNsOwogfQogCkBAIC0xMzMyLDYgJiM0MzsxMzUyLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKQogCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsKIAogCQlidXN5ID0gMDsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBzbGlwX21heGRldjsgaSYjNDM7JiM0MzspIHsKIAkJCWRldiA9IHNsaXBfZGV2c1tpXTsKIAkJCWlmICghZGV2KQpAQCAtMTM0NCwxNiAmIzQzOzEzNjUsMTkgQEAgc3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKQogCQkJfQogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzbC0mZ3Q7bG9jayk7CiAJCX0KJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3NsaXBfZGV2c19sb2NrKTsKIAl9IHdoaWxlIChidXN5ICZhbXA7JmFtcDsgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOwogCiAJLyogRklYTUU6IGhhbmd1cCBpcyBhc3luYyBzbyB3ZSBzaG91bGQgd2FpdCB3aGVuIGRvaW5nIHRoaXMgc2Vjb25kCiAJICAgcGhhc2UgKi8KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBzbGlwX21heGRldjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJCWRldiA9IHNsaXBfZGV2c1tpXTsKJiM0MzsJCXNsaXBfZGV2c1tpXSA9IE5VTEw7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJCWlmICghZGV2KQogCQkJY29udGludWU7Ci0JCXNsaXBfZGV2c1tpXSA9IE5VTEw7CiAKIAkJc2wgPSBuZXRkZXZfcHJpdihkZXYpOwogCQlpZiAoc2wtJmd0O3R0eSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgRGV2aWNlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYGRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jYC4gU2VlbXMgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIG11dGV4LCBgc2xpcF9kZXZzX2xvY2tgLCB0byBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGBzbGlwX2RldnNbXWAgYXJyYXkuIFNtYXJ0IG1vdmUsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHBvaW50IG9mIHBvdGVudGlhbCBjb250ZW50aW9uLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgc2xfZnJlZV9uZXRkZXZgLCBgc2xfc3luY2AsIGBzbF9hbGxvY2AsIGFuZCBgc2xpcF9leGl0YCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgY29tcG9uZW50IGlzIGV2ZW4gYWN0aXZlbHkgdXNlZCwgb3IgaWYgdGhpcyBjaGFuZ2UgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZXRlcm1pbmUgaXRzIGZ1enphYmlsaXR5IG9yIHJlYWNoYWJpbGl0eS4gU0xJUC4uLiByaWdodCwgU2VyaWFsIExpbmUgSW50ZXJuZXQgUHJvdG9jb2wuIENsYXNzaWMuIEl0IGNhbiBiZSBhdHRhY2hlZCB0byBhIHB0eSB1c2luZyBgVElPQ1NFVERgIHdpdGggYE5fU0xJUGAuIEhtbSwgcHR5Li4uIHRoYXQgbWVhbnMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFyZSBkZWZpbml0ZWx5IGluIHBsYXkuIFRoYXQmIzM5O3MgYSBnb29kIGF0dGFjayBzdXJmYWNlLiBTbywgdGhlcmUgaXMgYSBnb29kIGNoYW5jZSB0aGF0IFNMSVAgaXMgcmVhY2hhYmxlLgoKTm93LCBsZXQgbWUgbG9vayBhdCB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUuIFdoZXJlIGlzIGl0IGVuYWJsZWQ/IEkmIzM5O2xsIHByb2JhYmx5IGZpbmQgYGRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZ2Agb3Igc2ltaWxhci4gSSYjMzk7bGwgc2VhcmNoIGZvciBgc2xpcC5jYCBpbiBgZHJpdmVycy9uZXQvc2xpcC9NYWtlZmlsZWAgYW5kIHNlZSBob3cgaXQgaXMgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG1vZHVsZSBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsaXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3NsaXAvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvc2xpcC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19TTElQKSAmIzQzOz0gc2xpcC5vXG5kcml2ZXJzL25ldC9zbGlwL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1NMSEMpICYjNDM7PSBzbGhjLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjY4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFNMSVAgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKCkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYENPTkZJR19TTElQYC4gUmlnaHQsIHNvIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBUaGF0IHdvdWxkIGJlIGBkcml2ZXJzL25ldC9zbGlwL0tjb25maWdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMsIGxpa2Ugc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIG9yIHJlbGF0ZWQgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IHRoaXMgYFNMSVBgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHRpZWQgdG8uIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgcXVpY2tseSBhc3Nlc3MgdGhlIGJyb2FkZXIgaW1wYWN0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBvbiB0aGUgb3ZlcmFsbCBidWlsZCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhZHZhbnRhZ2VzIGl0IG1pZ2h0IGludHJvZHVjZS4gVGltZSB0byBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNMSVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6Njpjb25maWcgU0xJUFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtTTElQIChzZXJpYWwgbGluZSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZz00Mz1pZiBTTElQXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NDU6Y29uZmlnIFNMSVBfQ09NUFJFU1NFRFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtDU0xJUCBjb21wcmVzc2VkIGhlYWRlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNjAtXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NjE6Y29uZmlnIFNMSVBfU01BUlRcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7S2VlcGFsaXZlIGFuZCBsaW5lZmlsbFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy02OC1cbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo2OTpjb25maWcgU0xJUF9NT0RFX1NMSVA2XG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNzAtXHRib29sIFwmIzM0O1NpeCBiaXQgU0xJUCBlbmNhcHN1bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIFNMSVAmIzM5O3MgRm91bmRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiBTTElQLiBCZWZvcmUgZGl2aW5nIGluLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZm91bmRhdGlvbi4gU3BlY2lmaWNhbGx5LCB3aGF0IGFyZSB0aGUgY29yZSBkZXBlbmRlbmNpZXMgdGhpcyB0aGluZyBpcyBidWlsdCB1cG9uPyBXZSBjYW4mIzM5O3QgbWVhbmluZ2Z1bGx5IGV2YWx1YXRlIG9yIHRyb3VibGVzaG9vdCB3aXRob3V0IGtub3dpbmcgd2hhdCBTTElQIHJlbGllcyBvbi4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgYWxzbyBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgZGVzaWduIGFuZCBwb3RlbnRpYWwgd2Vha25lc3Nlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZz02PWNvbmZpZyBTTElQXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1NMSVAgKHNlcmlhbCBsaW5lKSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6ODpcdGRlcGVuZHMgb24gVFRZXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctOS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc9NDU9Y29uZmlnIFNMSVBfQ09NUFJFU1NFRFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtDU0xJUCBjb21wcmVzc2VkIGhlYWRlcnNcJiMzNDtcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo0NzpcdGRlcGVuZHMgb24gU0xJUFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTQ4LVx0c2VsZWN0IFNMSENcbi0tXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc9NjE9Y29uZmlnIFNMSVBfU01BUlRcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7S2VlcGFsaXZlIGFuZCBsaW5lZmlsbFwmIzM0O1xuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBTTElQXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNjQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnPTY5PWNvbmZpZyBTTElQX01PREVfU0xJUDZcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7U2l4IGJpdCBTTElQIGVuY2Fwc3VsYXRpb25cJiMzNDtcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo3MTpcdGRlcGVuZHMgb24gU0xJUFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTcyLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1ODcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTElQIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBgQ09ORklHX1NMSVBgIG9wdGlvbiByZWxpZXMgb24gYFRUWWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBtdXRleCwgYHNsaXBfZGV2c19sb2NrYCwgdG8gc2FmZWd1YXJkIGFjY2VzcyB0byB0aGUgYHNsaXBfZGV2c2AgYXJyYXkuIFRoYXQmIzM5O3MgYSBzdGFuZGFyZCBwYXR0ZXJuIGZvciBjb25jdXJyZW50IGFjY2VzcywgZ29vZCB0byBzZWUuIFRoZSBmdW5jdGlvbnMgdGhleSYjMzk7dmUgdG91Y2hlZCBhcmUgYHNsX2ZyZWVfbmV0ZGV2YCwgYHNsX3N5bmNgLCBgc2xfYWxsb2NgLCBhbmQgYHNsaXBfZXhpdGAuCgpOb3csIGBzbF9hbGxvY2AgaXMgY2FsbGVkIHdoZW4gYSBTZXJpYWwgTGluZSBJbnRlcm5ldCBQcm90b2NvbCAoU0xJUCkgbGluZSBkaXNjaXBsaW5lIGlzIGF0dGFjaGVkLCBhbmQgdGhhdCYjMzk7cyB0aGUgaW50ZXJlc3Rpbmcgb25lIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCB2ZXJpZnkgZXhhY3RseSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIGNvbnRleHQuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgbmV3IGxvY2sgaW50ZXJhY3RzIHdpdGggdGhvc2UgY2FsbCBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2xfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz0xMTg9c3RhdGljIGludCBzbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCB2b2lkIF9fdXNlciAqZGF0YSwgaW50IGNtZCk7XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTIyLSogIEJ1ZmZlciBhZG1pbmlzdHJhdGlvbiByb3V0aW5lczpcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEyMzoqXHRzbF9hbGxvY19idWZzKClcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNC0qXHRzbF9mcmVlX2J1ZnMoKVxuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNi0qXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzoxMjc6KiBOT1RFOiBzbF9yZWFsbG9jX2J1ZnMgIT0gc2xfZnJlZV9idWZzICYjNDM7IHNsX2FsbG9jX2J1ZnMsIGJlY2F1c2VcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyOC0qXHRzbF9yZWFsbG9jX2J1ZnMgcHJvdmlkZXMgc3Ryb25nIGF0b21pY2l0eSBhbmQgcmVhbGxvY2F0aW9uXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTM1LVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6MTM2OnN0YXRpYyBpbnQgc2xfYWxsb2NfYnVmcyhzdHJ1Y3Qgc2xpcCAqc2wsIGludCBtdHUpXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMzcte1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTY0MD1zdGF0aWMgdm9pZCBzbF9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTY0NS1cdC8qIE9ubHkgZHJvcCBvdXIgb3duIGVudHJ5OiB0aGUgc2xvdCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gcmV1c2VkIGJ5XG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo2NDY6XHQgKiBzbF9hbGxvYygpIGZvciBhIGRpZmZlcmVudCBjaGFubmVsLlxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNjQ3LVx0ICovXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzM0PXN0YXRpYyB2b2lkIHNsX3N5bmModm9pZClcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03NTYtLyogRmluZCBhIGZyZWUgU0xJUCBjaGFubmVsLCBhbmQgbGluayBpbiB0aGlzIGB0dHkmIzM5OyBsaW5lLiAqL1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NzU3OnN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTc1OC17XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9ODEyPXN0YXRpYyBpbnQgc2xpcF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtODQwLVx0ZXJyID0gLUVORklMRTtcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjg0MTpcdHNsID0gc2xfYWxsb2MoKTtcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg0Mi1cdGlmIChzbCA9PSBOVUxMKVxuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg1MC1cdFx0LyogUGVyZm9ybSB0aGUgbG93LWxldmVsIFNMSVAgaW5pdGlhbGl6YXRpb24uICovXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4NTE6XHRcdGVyciA9IHNsX2FsbG9jX2J1ZnMoc2wsIFNMX01UVSk7XG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy04NTItXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIExpbmUgRGlzY2lwbGluZSYjMzk7cyBMaWZlY3ljbGUqKgoKT2theSwgc28gYHNsX2FsbG9jYCBpcyBkZWZpbml0ZWx5IGdldHRpbmcgY2FsbGVkIGZyb20gYHNsaXBfb3BlbmAuIFRoYXQmIzM5O3MgdGhlIGtleS4gQW5kIGBzbGlwX29wZW5gIGlzLCBvZiBjb3Vyc2UsIHRoZSBgb3BlbmAgbWV0aG9kIGZvciB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBwb2ludCBvZiBlbnRyeSB3aGVuIGEgZGV2aWNlIGlzIGJlaW5nIGJyb3VnaHQgdXAgd2l0aCBTTElQLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRob3NlIGVudHJ5IHBvaW50czogbGV0IG1lIGNoZWNrIGJvdGggYHNsaXBfb3BlbmAgKmFuZCogYHNsaXBfY2xvc2VgLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSBvZiBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gdG8gYmUgY2VydGFpbiB0aGF0IHRoZXJlIGlzbiYjMzk7dCBhIHJhY2UgY29uZGl0aW9uLCBvciBhIG1lbW9yeSBsZWFrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbGlwX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz03MDA9c3RhdGljIHZvaWQgc2xpcF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqY3AsIGNvbnN0IHU4ICpmcCxcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03MjktLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NzMwOiAqICBzbGlwX29wZW4gaGVscGVyIHJvdXRpbmVzLlxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNzMxLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzU3PXN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy04MTEtXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4MTI6c3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTgxMy17XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9MTI5Mj1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xfbGRpc2MgPSB7XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI5NS1cdC5uYW1lIFx0XHQ9IFwmIzM0O3NsaXBcJiMzNDssXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzoxMjk2Olx0Lm9wZW4gXHRcdD0gc2xpcF9vcGVuLFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI5Ny1cdC5jbG9zZVx0IFx0PSBzbGlwX2Nsb3NlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTE1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvbmN1cnJlbmN5IEZpeCBmb3IgdGhlIFNMSVAgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgU0xJUCBkcml2ZXIuIFRoZSBlbnRyeSBwb2ludCBoZXJlIGlzIGBzbGlwX29wZW5gLCBhbmQgdGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgYSByYWNlIGNvbmRpdGlvbi4gSXQgbG9va3MgbGlrZSBgc2xfZnJlZV9uZXRkZXZgLCB3aGljaCBhY3RzIGFzIHRoZSBkZXN0cnVjdG9yIGZvciB0aGUgbmV0d29yayBkZXZpY2UgKGBuZXRfZGV2aWNlYCksIGlzIGJlaW5nIGNhbGxlZCBhc3luY2hyb25vdXNseSBmcm9tIGBuZXRkZXZfcnVuX3RvZG8oKWAuIFRoaXMgY2F1c2VzIGEgcHJvYmxlbSBiZWNhdXNlIGl0IHJlbGVhc2VzIHRoZSBSVE5MIHNlbWFwaG9yZSwgYW5kIHRoaXMgb3BlbnMgdXAgYSB3aW5kb3cgZm9yIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBgc2xpcF9kZXZzW11gIGFycmF5LiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjb25jdXJyZW5jeSBidWcsIGEgZGVmaW5pdGUgcG90ZW50aWFsIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIGEgZmV3IGtleSBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuIExldCYjMzk7cyBsb29rIGF0IGBzbGlwX29wZW5gLCBgc2xpcF9jbG9zZWAsIGBzbF9mcmVlX25ldGRldmAsIGFuZCBgc2xfYWxsb2NgLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0LiBgc2xfZnJlZV9uZXRkZXZgIGlzIGRlZmluaXRlbHkgc3RhdGljLCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gYHNsaXBfb3BlbmAgYW5kIGBzbGlwX2Nsb3NlYCBhcmUgYWxzbyBzdGF0aWMsIGJ1dCB0aGV5JiMzOTtyZSBwYXJ0IG9mIHRoZSBsaW5lIGRpc2NpcGxpbmUgb3BlcmF0aW9ucy4gV2FpdCBhIG1pbnV0ZSwgYnV0IGBzbGlwX29wZW5gIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIENhbiBJIHVzZSBpdCBhcyBhIGZvY3VzIHN5bWJvbD8gWWVzLCBJIGNhbiB1c2Ugc3RhdGljIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzIGlmIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLiBBbmQgc2luY2UgYHNsaXBfb3BlbmAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIGBzbF9hbGxvY2AgaXMgc3RhdGljIGFuZCBjYWxsZWQgZnJvbSBgc2xpcF9vcGVuYC4gSSYjMzk7bSBnb2luZyB0byBndWVzcyBpdCAqbWlnaHQqIGJlIGlubGluZWQsIGJ1dCB0aGUgZnVuY3Rpb24mIzM5O3Mgc2l6ZSBtaWdodCBtYWtlIHRoYXQgdW5saWtlbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBzbF9mcmVlX25ldGRldmAgYSBsaXR0bGUgY2xvc2VyLiBPa2F5LCBpdCYjMzk7cyBwYXNzZWQgYXMgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yID0gc2xfZnJlZV9uZXRkZXY7YCBpbiBgc2xfc2V0dXBgLiBUaGF0IGNvbmZpcm1zIHRoYXQgaXQgaXNuJiMzOTt0IGlubGluZWQsIHNvIGl0JiMzOTtzIGEgZ29vZCBmb2N1cy4KCkkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBzbF9zZXR1cGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsX3NldHVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NjUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2xfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy02NjctXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo2Njg6c3RhdGljIHZvaWQgc2xfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTY2OS17XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzU3PXN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03NzYtXHRzcHJpbnRmKG5hbWUsIFwmIzM0O3NsJWRcJiMzNDssIGkpO1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6Nzc3Olx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqc2wpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLCBzbF9zZXR1cCk7XG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03NzgtXHRpZiAoIWRldikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTE1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqVmVyaWZ5aW5nIE5ldHdvcmsgRGV2aWNlIERlc3RydWN0b3IgQXNzaWdubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRvdWJsZS1jaGVja2luZyB0aGUgbmV0d29yayBkZXZpY2UgdGVhcmRvd24gc2VxdWVuY2UgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGVuc3VyZSB0aGF0IHJlc291cmNlcyBhcmUgcmVsZWFzZWQgcHJvcGVybHkgd2hlbiBhIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQgb3IgZ29lcyBvZmZsaW5lLiBMZXQmIzM5O3Mgc2VlLi4uIFllcCwgdGhhdCYjMzk7cyBpdC4gSW4gYHNsX3NldHVwYCwgdGhlIGBzbF9mcmVlX25ldGRldmAgZnVuY3Rpb24gaXMgY29ycmVjdGx5IGJlaW5nIGFzc2lnbmVkIHRvIGBkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvcmAuIFRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoZXJlIGl0IHNob3VsZCBiZS4gVGhlIGRlc3RydWN0b3IgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgYW55IGRyaXZlci1zcGVjaWZpYyBwcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXR3b3JrIGRldmljZSAoYGRldmApLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgc3RlcCBhbmQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbmZpcm0gaXMgaGFuZGxlZCBwcm9wZXJseSB3aGVuIHJldmlld2luZyBuZXR3b3JrIGRldmljZSBzZXR1cCBhbmQgdGVhcmRvd24uIFRoaXMgbG9va3MgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByaXZfZGVzdHJ1Y3RvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTk3PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqKnNsaXBfZGV2cztcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy05OS0vKiBTZXJpYWxpc2VzIGFjY2VzcyB0byBzbGlwX2RldnNbXSBhbmQgdG8gdGhlIHNsaXAgY2hhbm5lbHMgaXQgcG9pbnRzIGF0LlxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6MTAwOiAqIFJUTkwgaXMgbm90IGVub3VnaDogc2xfZnJlZV9uZXRkZXYoKSBpcyB0aGUgcHJpdl9kZXN0cnVjdG9yIGFuZCB0aGVyZWZvcmVcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEwMS0gKiBydW5zIGZyb20gbmV0ZGV2X3J1bl90b2RvKCksIHdoaWNoIGRlbGliZXJhdGVseSBkcm9wcyB0aGUgUlROTCBzZW1hcGhvcmUuXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NjY4PXN0YXRpYyB2b2lkIHNsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNjcxLVx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2XHQ9IHRydWU7XG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo2NzI6XHRkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yXHQ9IHNsX2ZyZWVfbmV0ZGV2O1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNjczLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTkwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgc2xfZnJlZV9uZXRkZXZgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzbF9mcmVlX25ldGRldmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBpdCYjMzk7cyAqbm90KiBpbmxpbmVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3MgdHJhY2UgaXRzIHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRocyBhbmQgc2VlIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHNsaXBfZXhpdGAuIFRoYXQmIzM5O3MgdGhlIG1vZHVsZSBleGl0IGZ1bmN0aW9uLCByaWdodD8gUmlnaHQsIGFuZCBJIGtub3cgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSBmb2N1cyBvbiBmdXp6aW5nIHRoZSBtb2R1bGUgdW5sb2FkaW5nIHBhdGguIEl04oCZcyBwcmV0dHkgcmFyZS4gU28sIGluIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGNvbnRleHQsIGBzbGlwX2V4aXRgIGlzIGxpa2VseSB1bnJlYWNoYWJsZSwgd2hpY2ggbWVhbnMgYW55dGhpbmcgY2FsbGVkIGZyb20gaXQgd29uJiMzOTt0IGJlIHRyaWdnZXJlZCwgbm9ybWFsbHkuIExldCYjMzk7cyBzZWUuLi4gQWhhISBgc2xfc3luY2AgaXMgY2FsbGVkIGZyb20gYHNsaXBfZXhpdGAuIFNvLCB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywgYHNsX3N5bmNgIHByb2JhYmx5IGlzbiYjMzk7dCBhIGxpa2VseSBmdXp6IHRhcmdldCBlaXRoZXIuIEkmIzM5O2xsIG1ha2UgYSBtZW50YWwgbm90ZSwgYmVjYXVzZSB0aGF0IG1lYW5zIHRoYXQgSSBzaG91bGQgY2hlY2sgdGhlIGVkZ2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsX3N5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz03MDA9c3RhdGljIHZvaWQgc2xpcF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqY3AsIGNvbnN0IHU4ICpmcCxcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03MzMtLyogQ29sbGVjdCBoYW5nZWQgdXAgY2hhbm5lbHMgKi9cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjczNDpzdGF0aWMgdm9pZCBzbF9zeW5jKHZvaWQpXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03MzUte1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTgxMj1zdGF0aWMgaW50IHNsaXBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTgyOS1cdC8qIENvbGxlY3QgaGFuZ2VkIHVwIGNoYW5uZWxzLiAqL1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6ODMwOlx0c2xfc3luYygpO1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtODMxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI2CgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU0xJUCBMaW5lIERpc2NpcGxpbmUgRHJpdmVyIEZpeCoqCgpPa2F5LCBzbyBgc2xfc3luY2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgc2xpcF9vcGVuYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYWNjZXNzaWJsZSBhbmQgcmVsZXZhbnQgdG8gbXkgYW5hbHlzaXMuIEkgbmVlZCB0byBrZWVwIHRob3NlIGNvbm5lY3Rpb25zIGluIG1pbmQuIE15IGZvY3VzIHJpZ2h0IG5vdyBuZWVkcyB0byBiZSBvbiB0aGVzZSBrZXkgc3ltYm9sczogYHNsaXBfb3BlbmAsIGBzbGlwX2Nsb3NlYCwgYHNsX2ZyZWVfbmV0ZGV2YCwgYHNsX3N5bmNgLCBhbmQgYHNsX2FsbG9jYC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSBvZiB0aGluZ3MuIEkgc2VlIGBTTElQYCBpcyBpbnZvbHZlZC4gSSBrbm93IHRoYXQgYFNMSVBgIGRlcGVuZHMgb24gYFRUWWAsIGFuZCBgVFRZYCBpcyBwcmV0dHkgc3RhbmRhcmQgYW5kIHVzdWFsbHkgZW5hYmxlZC4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCBgU0xJUGAgZG9lc24mIzM5O3QgaGF2ZSBhbnkgKm90aGVyKiBkZXBlbmRlbmNpZXMsIGJ1dCBiYXNlZCBvbiBteSBrbm93bGVkZ2UsIEkmIzM5O20gbm90IGV4cGVjdGluZyBhbnkgc3VycHJpc2VzIHRoZXJlLiBOb3BlLCBqdXN0IGBUVFlgLgoKTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBzbGlwX29wZW5gIGlzLCBhcyBJIHN1c3BlY3QsIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIHRoaXMgY29kZSwgYW5kIGl0IGlzIHRoZSBsZGlzYyBvcGVuLgoKQW5kIGBzbGlwX2Nsb3NlYCBzZWVtcyBzaW1pbGFybHkgcmVhY2hhYmxlLCB0cmlnZ2VyZWQgd2hlbiB0aGUgbGRpc2MgaXMgY2xvc2VkLgoKQWxyaWdodCwgYmFzZWQgb24gdGhpcywgSSYjMzk7bSBnb2luZyB0byBzZXQgc29tZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnV6emVyLiBJIG5lZWQgdG8gbWFyayB0aGlzIGFzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgYmVjYXVzZSBpdCBjbGVhcmx5IGludm9sdmVzIGNvbmN1cnJlbmN5LiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNvbmZpcm1lZDogYFsmIzM0O3NsaXBfb3BlbiYjMzQ7LCAmIzM0O3NsaXBfY2xvc2UmIzM0OywgJiMzNDtzbF9mcmVlX25ldGRldiYjMzQ7LCAmIzM0O3NsX3N5bmMmIzM0OywgJiMzNDtzbF9hbGxvYyYjMzQ7XWAuIEFuZCBJIG5lZWQgdG8gZW5hYmxlIHRoZSBgU0xJUGAgY29uZmlndXJhdGlvbi4KCk15IHJlYXNvbmluZz8gVGhpcyBwYXRjaCBpcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyLiBJdCYjMzk7cyB1c2luZyBhIG11dGV4IHRvIHByb3RlY3QgdGhlIGBzbGlwX2RldnNgIGFycmF5LCB3aGljaCBpbmRpY2F0ZXMgdGhlIHJhY2UgaXMgbGlrZWx5IGJldHdlZW4gYHNsX2ZyZWVfbmV0ZGV2YCAod2hpY2ggcnVucyBhc3luY2hyb25vdXNseSBmcm9tIGBuZXRkZXZfcnVuX3RvZG9gKSBhbmQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHNsX2FsbG9jYCBhbmQgYHNsX3N5bmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjb25jdXJyZW5jeSBmaXggYW5kIGludm9sdmVzIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBjb2RlIHRoYXQgaXMgd29ydGggZXhwbG9yaW5nIGZvciB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTElQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2xpcF9vcGVuJiMzNDssCiAgICAmIzM0O3NsaXBfY2xvc2UmIzM0OywKICAgICYjMzQ7c2xfZnJlZV9uZXRkZXYmIzM0OywKICAgICYjMzQ7c2xfc3luYyYjMzQ7LAogICAgJiMzNDtzbF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTElQIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIgYnkgaW50cm9kdWNpbmcgYSBtdXRleCB0byBwcm90ZWN0IHRoZSBgc2xpcF9kZXZzYCBhcnJheS4gVGhlIHJhY2Ugb2NjdXJzIGJldHdlZW4gYHNsX2ZyZWVfbmV0ZGV2YCAocnVubmluZyBhc3luY2hyb25vdXNseSBmcm9tIGBuZXRkZXZfcnVuX3RvZG9gKSBhbmQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHNsX2FsbG9jYCBhbmQgYHNsX3N5bmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjb25jdXJyZW5jeSBmaXggaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMSVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbGlwX29wZW4mIzM0OywKICAgICYjMzQ7c2xpcF9jbG9zZSYjMzQ7LAogICAgJiMzNDtzbF9mcmVlX25ldGRldiYjMzQ7LAogICAgJiMzNDtzbF9zeW5jJiMzNDssCiAgICAmIzM0O3NsX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lIGRyaXZlciBieSBpbnRyb2R1Y2luZyBhIG11dGV4IHRvIHByb3RlY3QgdGhlIGBzbGlwX2RldnNgIGFycmF5LiBUaGUgcmFjZSBvY2N1cnMgYmV0d2VlbiBgc2xfZnJlZV9uZXRkZXZgIChydW5uaW5nIGFzeW5jaHJvbm91c2x5IGZyb20gYG5ldGRldl9ydW5fdG9kb2ApIGFuZCBvdGhlciBmdW5jdGlvbnMgbGlrZSBgc2xfYWxsb2NgIGFuZCBgc2xfc3luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNvbmN1cnJlbmN5IGZpeCBpbiByZWFjaGFibGUgY29yZSBkcml2ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbXV0ZXggKGBzbGlwX2RldnNfbG9ja2ApIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGBzbGlwX2RldnNgIGFycmF5IGluIHRoZSBzbGlwIGRyaXZlci4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCBhaW1lZCBhdCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJmODczOTNjOWFiMzkxZmJiOGRiMGJiZDBlYmY5MWIwYTM2MDhhN2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAwODowNjo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMKaW5kZXggZmFhZTcxMWNmNzkzZC4uNWNkYWU5ODMxZjA4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMKQEAgLTk2LDYgJiM0Mzs5NiwxMiBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKipzbGlwX2RldnM7CiAKJiM0MzsvKiBTZXJpYWxpc2VzIGFjY2VzcyB0byBzbGlwX2RldnNbXSBhbmQgdG8gdGhlIHNsaXAgY2hhbm5lbHMgaXQgcG9pbnRzIGF0LgomIzQzOyAqIFJUTkwgaXMgbm90IGVub3VnaDogc2xfZnJlZV9uZXRkZXYoKSBpcyB0aGUgcHJpdl9kZXN0cnVjdG9yIGFuZCB0aGVyZWZvcmUKJiM0MzsgKiBydW5zIGZyb20gbmV0ZGV2X3J1bl90b2RvKCksIHdoaWNoIGRlbGliZXJhdGVseSBkcm9wcyB0aGUgUlROTCBzZW1hcGhvcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIERFRklORV9NVVRFWChzbGlwX2RldnNfbG9jayk7CiYjNDM7CiBzdGF0aWMgaW50IHNsaXBfbWF4ZGV2ID0gU0xfTlJVTklUOwogbW9kdWxlX3BhcmFtKHNsaXBfbWF4ZGV2LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhzbGlwX21heGRldiwgJiMzNDtNYXhpbXVtIG51bWJlciBvZiBzbGlwIGRldmljZXMmIzM0Oyk7CkBAIC02MzUsNyAmIzQzOzY0MSwxMyBAQCBzdGF0aWMgdm9pZCBzbF9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBpID0gZGV2LSZndDtiYXNlX2FkZHI7CiAKLQlzbGlwX2RldnNbaV0gPSBOVUxMOwomIzQzOwltdXRleF9sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwomIzQzOwkvKiBPbmx5IGRyb3Agb3VyIG93biBlbnRyeTogdGhlIHNsb3QgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIHJldXNlZCBieQomIzQzOwkgKiBzbF9hbGxvYygpIGZvciBhIGRpZmZlcmVudCBjaGFubmVsLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNsaXBfZGV2c1tpXSA9PSBkZXYpCiYjNDM7CQlzbGlwX2RldnNbaV0gPSBOVUxMOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2xfbmV0ZGV2X29wcyA9IHsKQEAgLTcyNSw2ICYjNDM7NzM3LDcgQEAgc3RhdGljIHZvaWQgc2xfc3luYyh2b2lkKQogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNsaXAJICAqc2w7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3NsaXBfZGV2c19sb2NrKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7CiAJCWRldiA9IHNsaXBfZGV2c1tpXTsKIAkJaWYgKGRldiA9PSBOVUxMKQpAQCAtNzM2LDYgJiM0Mzs3NDksNyBAQCBzdGF0aWMgdm9pZCBzbF9zeW5jKHZvaWQpCiAJCWlmIChkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkKIAkJCWRldl9jbG9zZShkZXYpOwogCX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogfQogCiAKQEAgLTc0NywxOSAmIzQzOzc2MSwyNCBAQCBzdGF0aWMgc3RydWN0IHNsaXAgKnNsX2FsbG9jKHZvaWQpCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJc3RydWN0IHNsaXAgICAgICAgKnNsOwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IHNsaXBfbWF4ZGV2OyBpJiM0MzsmIzQzOykgewogCQlkZXYgPSBzbGlwX2RldnNbaV07CiAJCWlmIChkZXYgPT0gTlVMTCkKIAkJCWJyZWFrOwogCX0KIAkvKiBTb3JyeSwgdG9vIG1hbnksIGFsbCBzbG90cyBpbiB1c2UgKi8KLQlpZiAoaSAmZ3Q7PSBzbGlwX21heGRldikKJiM0MzsJaWYgKGkgJmd0Oz0gc2xpcF9tYXhkZXYpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3NsaXBfZGV2c19sb2NrKTsKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCXNwcmludGYobmFtZSwgJiMzNDtzbCVkJiMzNDssIGkpOwogCWRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnNsKSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgc2xfc2V0dXApOwotCWlmICghZGV2KQomIzQzOwlpZiAoIWRldikgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCQlyZXR1cm4gTlVMTDsKJiM0MzsJfQogCiAJZGV2LSZndDtiYXNlX2FkZHIgID0gaTsKIAlzbCA9IG5ldGRldl9wcml2KGRldik7CkBAIC03NzYsNiAmIzQzOzc5NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZCkKIAl0aW1lcl9zZXR1cCgmYW1wO3NsLSZndDtvdXRmaWxsX3RpbWVyLCBzbF9vdXRmaWxsLCAwKTsKICNlbmRpZgogCXNsaXBfZGV2c1tpXSA9IGRldjsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCXJldHVybiBzbDsKIH0KIApAQCAtMTMzMiw2ICYjNDM7MTM1Miw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBzbGlwX2V4aXQodm9pZCkKIAkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7CiAKIAkJYnVzeSA9IDA7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7CiAJCQlkZXYgPSBzbGlwX2RldnNbaV07CiAJCQlpZiAoIWRldikKQEAgLTEzNDQsMTYgJiM0MzsxMzY1LDE5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBzbGlwX2V4aXQodm9pZCkKIAkJCX0KIAkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2wtJmd0O2xvY2spOwogCQl9CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJfSB3aGlsZSAoYnVzeSAmYW1wOyZhbXA7IHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTsKIAogCS8qIEZJWE1FOiBoYW5ndXAgaXMgYXN5bmMgc28gd2Ugc2hvdWxkIHdhaXQgd2hlbiBkb2luZyB0aGlzIHNlY29uZAogCSAgIHBoYXNlICovCiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCQlkZXYgPSBzbGlwX2RldnNbaV07CiYjNDM7CQlzbGlwX2RldnNbaV0gPSBOVUxMOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCQlpZiAoIWRldikKIAkJCWNvbnRpbnVlOwotCQlzbGlwX2RldnNbaV0gPSBOVUxMOwogCiAJCXNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJaWYgKHNsLSZndDt0dHkpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzMKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbmN1cnJlbmN5IEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBtdXRleCwgYHNsaXBfZGV2c19sb2NrYCwgdG8gc2FmZWx5IG1hbmFnZSBhY2Nlc3MgdG8gdGhlIGBzbGlwX2RldnNgIGFycmF5IGFuZCB0aGUgU0xJUCBjaGFubmVscyB3aXRoaW4gaXQuIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlIG1pdGlnYXRpb24sIGltbWVkaWF0ZWx5IHNpZ25hbGluZyBhIHJhY2UgY29uZGl0aW9uIGZpeC4gSXQmIzM5O3MgdGFyZ2V0aW5nIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGRvdWJsZSBmcmVlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgbmFzdHkgY29uY3VycmVuY3ktcmVsYXRlZCBidWdzLiBFeGNlbGxlbnQuCgpDcnVjaWFsbHksIGZyb20gYSBzZWN1cml0eSBzdGFuZHBvaW50LCBJIHNlZSBubyBpbmRpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIGhlcmUsIHNvIHRoYXQmIzM5O3MgZ29vZC4gV2UgYXJlbiYjMzk7dCB3b3JyaWVkIGFib3V0IEtNU0FOIGluIHRoaXMgY2FzZSAtIEtBU0FOIGFuZCBMT0NLREVQIGFyZSB0aGUgYXBwcm9wcmlhdGUgdG9vbHMgdG8gYmUgdXNpbmcgdG8gY2hlY2sgZm9yIHRoZSB0eXBlcyBvZiBpc3N1ZXMgaXQgaXMgbGlrZWx5IG1lYW50IHRvIGFkZHJlc3MuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlIGltcGxlbWVudGF0aW9uLiBPa2F5LCBzbyBgc2xfZnJlZV9uZXRkZXZgIG5vdyBjb3JyZWN0bHkgbG9ja3MgdGhlIGBzbGlwX2RldnNfbG9ja2AgKmJlZm9yZSogY2hlY2tpbmcgdGhlIGFycmF5IHNsb3QgYW5kLCBpbXBvcnRhbnRseSwgKmJlZm9yZSogc2V0dGluZyB0aGUgcG9pbnRlciB0byBOVUxMLiBgc2xfc3luY2Agbm93IHNlcmlhbGl6ZXMgaXRzIGxvb3Agd2l0aCB0aGUgbG9jayAtIGdvb2QgZm9yIHJhY2UgcHJvdGVjdGlvbiBvbiB0aGUgYXJyYXkgaXRzZWxmLiBgc2xfYWxsb2NgIHNpbWlsYXJseSBndWFyZHMgdGhlIHNsb3QgYWxsb2NhdGlvbiBwcm9jZXNzLiBGaW5hbGx5LCBgc2xpcF9leGl0YCBpcyBjb3JyZWN0bHkgbG9ja2luZyBhcm91bmQgY2hlY2tpbmcgYW5kIGNsZWFyaW5nIGBzbGlwX2RldnNgLgoKWWVwLCB0aGlzIG5haWxzIGl0LiBUaGlzIGlzIGEgdmVyeSBjbGVhciByYWNlIGNvbmRpdGlvbiBmaXgsIGxpa2VseSB0YXJnZXRpbmcgYSBVQUYgb3IgYSBzaW1pbGFyIGRlcmVmZXJlbmNlLXJlbGF0ZWQgcHJvYmxlbS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFyZSBhcHBhcmVudCwgYW5kIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQsIHdlbGwtdGFyZ2V0ZWQgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbXV0ZXggKGBzbGlwX2RldnNfbG9ja2ApIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGBzbGlwX2RldnNgIGFycmF5IGluIHRoZSBzbGlwIGRyaXZlci4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCBhaW1lZCBhdCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbXV0ZXggKGBzbGlwX2RldnNfbG9ja2ApIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGBzbGlwX2RldnNgIGFycmF5IGluIHRoZSBzbGlwIGRyaXZlci4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCBhaW1lZCBhdCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA2OjUwLjc5NTk4MjYyNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzE1MDY1MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMSVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbGlwX29wZW5cIixcbiAgICBcInNsaXBfY2xvc2VcIixcbiAgICBcInNsX2ZyZWVfbmV0ZGV2XCIsXG4gICAgXCJzbF9zeW5jXCIsXG4gICAgXCJzbF9hbGxvY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG11dGV4IChgc2xpcF9kZXZzX2xvY2tgKSB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBgc2xpcF9kZXZzYCBhcnJheSBpbiB0aGUgc2xpcCBkcml2ZXIuIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBmaXggYWltZWQgYXQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lIGRyaXZlciBieSBpbnRyb2R1Y2luZyBhIG11dGV4IHRvIHByb3RlY3QgdGhlIGBzbGlwX2RldnNgIGFycmF5LiBUaGUgcmFjZSBvY2N1cnMgYmV0d2VlbiBgc2xfZnJlZV9uZXRkZXZgIChydW5uaW5nIGFzeW5jaHJvbm91c2x5IGZyb20gYG5ldGRldl9ydW5fdG9kb2ApIGFuZCBvdGhlciBmdW5jdGlvbnMgbGlrZSBgc2xfYWxsb2NgIGFuZCBgc2xfc3luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNvbmN1cnJlbmN5IGZpeCBpbiByZWFjaGFibGUgY29yZSBkcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDY6NTAuNzk1OTg4NTc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzE2Mjk1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyZjg3MzkzYzlhYjM5MWZiYjhkYjBiYmQwZWJmOTFiMGEzNjA4YTdmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDA4OjA2OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcXG5pbmRleCBmYWFlNzExY2Y3OTNkLi41Y2RhZTk4MzFmMDg3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXFxuKysrIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcXG5AQCAtOTYsNiArOTYsMTIgQEBcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqKnNsaXBfZGV2cztcXG4gXFxuKy8qIFNlcmlhbGlzZXMgYWNjZXNzIHRvIHNsaXBfZGV2c1tdIGFuZCB0byB0aGUgc2xpcCBjaGFubmVscyBpdCBwb2ludHMgYXQuXFxuKyAqIFJUTkwgaXMgbm90IGVub3VnaDogc2xfZnJlZV9uZXRkZXYoKSBpcyB0aGUgcHJpdl9kZXN0cnVjdG9yIGFuZCB0aGVyZWZvcmVcXG4rICogcnVucyBmcm9tIG5ldGRldl9ydW5fdG9kbygpLCB3aGljaCBkZWxpYmVyYXRlbHkgZHJvcHMgdGhlIFJUTkwgc2VtYXBob3JlLlxcbisgKi9cXG4rc3RhdGljIERFRklORV9NVVRFWChzbGlwX2RldnNfbG9jayk7XFxuK1xcbiBzdGF0aWMgaW50IHNsaXBfbWF4ZGV2ID0gU0xfTlJVTklUO1xcbiBtb2R1bGVfcGFyYW0oc2xpcF9tYXhkZXYsIGludCwgMCk7XFxuIE1PRFVMRV9QQVJNX0RFU0Moc2xpcF9tYXhkZXYsIFxcXCJNYXhpbXVtIG51bWJlciBvZiBzbGlwIGRldmljZXNcXFwiKTtcXG5AQCAtNjM1LDcgKzY0MSwxMyBAQCBzdGF0aWMgdm9pZCBzbF9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdGludCBpID0gZGV2LVxcdTAwM2ViYXNlX2FkZHI7XFxuIFxcbi1cXHRzbGlwX2RldnNbaV0gPSBOVUxMO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuK1xcdC8qIE9ubHkgZHJvcCBvdXIgb3duIGVudHJ5OiB0aGUgc2xvdCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gcmV1c2VkIGJ5XFxuK1xcdCAqIHNsX2FsbG9jKCkgZm9yIGEgZGlmZmVyZW50IGNoYW5uZWwuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2xpcF9kZXZzW2ldID09IGRldilcXG4rXFx0XFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2xfbmV0ZGV2X29wcyA9IHtcXG5AQCAtNzI1LDYgKzczNyw3IEBAIHN0YXRpYyB2b2lkIHNsX3N5bmModm9pZClcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IHNsaXBcXHQgICpzbDtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcXG4gXFx0XFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xcbiBcXHRcXHRpZiAoZGV2ID09IE5VTEwpXFxuQEAgLTczNiw2ICs3NDksNyBAQCBzdGF0aWMgdm9pZCBzbF9zeW5jKHZvaWQpXFxuIFxcdFxcdGlmIChkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKVxcbiBcXHRcXHRcXHRkZXZfY2xvc2UoZGV2KTtcXG4gXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcXG4gfVxcbiBcXG4gXFxuQEAgLTc0NywxOSArNzYxLDI0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7XFxuIFxcdHN0cnVjdCBzbGlwICAgICAgICpzbDtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcXG4gXFx0XFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xcbiBcXHRcXHRpZiAoZGV2ID09IE5VTEwpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcdC8qIFNvcnJ5LCB0b28gbWFueSwgYWxsIHNsb3RzIGluIHVzZSAqL1xcbi1cXHRpZiAoaSBcXHUwMDNlPSBzbGlwX21heGRldilcXG4rXFx0aWYgKGkgXFx1MDAzZT0gc2xpcF9tYXhkZXYpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRzcHJpbnRmKG5hbWUsIFxcXCJzbCVkXFxcIiwgaSk7XFxuIFxcdGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnNsKSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgc2xfc2V0dXApO1xcbi1cXHRpZiAoIWRldilcXG4rXFx0aWYgKCFkZXYpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRkZXYtXFx1MDAzZWJhc2VfYWRkciAgPSBpO1xcbiBcXHRzbCA9IG5ldGRldl9wcml2KGRldik7XFxuQEAgLTc3Niw2ICs3OTUsNyBAQCBzdGF0aWMgc3RydWN0IHNsaXAgKnNsX2FsbG9jKHZvaWQpXFxuIFxcdHRpbWVyX3NldHVwKFxcdTAwMjZzbC1cXHUwMDNlb3V0ZmlsbF90aW1lciwgc2xfb3V0ZmlsbCwgMCk7XFxuICNlbmRpZlxcbiBcXHRzbGlwX2RldnNbaV0gPSBkZXY7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xcbiBcXHRyZXR1cm4gc2w7XFxuIH1cXG4gXFxuQEAgLTEzMzIsNiArMTM1Miw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBzbGlwX2V4aXQodm9pZClcXG4gXFx0XFx0XFx0bXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTtcXG4gXFxuIFxcdFxcdGJ1c3kgPSAwO1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzbGlwX21heGRldjsgaSsrKSB7XFxuIFxcdFxcdFxcdGRldiA9IHNsaXBfZGV2c1tpXTtcXG4gXFx0XFx0XFx0aWYgKCFkZXYpXFxuQEAgLTEzNDQsMTYgKzEzNjUsMTkgQEAgc3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzbC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdH1cXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIFxcdH0gd2hpbGUgKGJ1c3kgXFx1MDAyNlxcdTAwMjYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpO1xcbiBcXG4gXFx0LyogRklYTUU6IGhhbmd1cCBpcyBhc3luYyBzbyB3ZSBzaG91bGQgd2FpdCB3aGVuIGRvaW5nIHRoaXMgc2Vjb25kXFxuIFxcdCAgIHBoYXNlICovXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2xpcF9tYXhkZXY7IGkrKykge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIFxcdFxcdGRldiA9IHNsaXBfZGV2c1tpXTtcXG4rXFx0XFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIFxcdFxcdGlmICghZGV2KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcXG4gXFxuIFxcdFxcdHNsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0XFx0aWYgKHNsLVxcdTAwM2V0dHkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDY6NTEuMzI4NTc3MzcxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mzk5NDkxOTAzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xJUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNsaXBfb3BlblwiLFxuICAgIFwic2xpcF9jbG9zZVwiLFxuICAgIFwic2xfZnJlZV9uZXRkZXZcIixcbiAgICBcInNsX3N5bmNcIixcbiAgICBcInNsX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyIGJ5IGludHJvZHVjaW5nIGEgbXV0ZXggdG8gcHJvdGVjdCB0aGUgYHNsaXBfZGV2c2AgYXJyYXkuIFRoZSByYWNlIG9jY3VycyBiZXR3ZWVuIGBzbF9mcmVlX25ldGRldmAgKHJ1bm5pbmcgYXN5bmNocm9ub3VzbHkgZnJvbSBgbmV0ZGV2X3J1bl90b2RvYCkgYW5kIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBzbF9hbGxvY2AgYW5kIGBzbF9zeW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY29uY3VycmVuY3kgZml4IGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZjg3MzkzYzlhYjM5MWZiYjhkYjBiYmQwZWJmOTFiMGEzNjA4YTdmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDg6MDY6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG5pbmRleCBmYWFlNzExY2Y3OTNkLi41Y2RhZTk4MzFmMDg3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG5AQCAtOTYsNiArOTYsMTIgQEBcbiBcbiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKipzbGlwX2RldnM7XG4gXG4rLyogU2VyaWFsaXNlcyBhY2Nlc3MgdG8gc2xpcF9kZXZzW10gYW5kIHRvIHRoZSBzbGlwIGNoYW5uZWxzIGl0IHBvaW50cyBhdC5cbisgKiBSVE5MIGlzIG5vdCBlbm91Z2g6IHNsX2ZyZWVfbmV0ZGV2KCkgaXMgdGhlIHByaXZfZGVzdHJ1Y3RvciBhbmQgdGhlcmVmb3JlXG4rICogcnVucyBmcm9tIG5ldGRldl9ydW5fdG9kbygpLCB3aGljaCBkZWxpYmVyYXRlbHkgZHJvcHMgdGhlIFJUTkwgc2VtYXBob3JlLlxuKyAqL1xuK3N0YXRpYyBERUZJTkVfTVVURVgoc2xpcF9kZXZzX2xvY2spO1xuK1xuIHN0YXRpYyBpbnQgc2xpcF9tYXhkZXYgPSBTTF9OUlVOSVQ7XG4gbW9kdWxlX3BhcmFtKHNsaXBfbWF4ZGV2LCBpbnQsIDApO1xuIE1PRFVMRV9QQVJNX0RFU0Moc2xpcF9tYXhkZXYsIFwiTWF4aW11bSBudW1iZXIgb2Ygc2xpcCBkZXZpY2VzXCIpO1xuQEAgLTYzNSw3ICs2NDEsMTMgQEAgc3RhdGljIHZvaWQgc2xfZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRpbnQgaSA9IGRldi1cdTAwM2ViYXNlX2FkZHI7XG4gXG4tXHRzbGlwX2RldnNbaV0gPSBOVUxMO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4rXHQvKiBPbmx5IGRyb3Agb3VyIG93biBlbnRyeTogdGhlIHNsb3QgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIHJldXNlZCBieVxuK1x0ICogc2xfYWxsb2MoKSBmb3IgYSBkaWZmZXJlbnQgY2hhbm5lbC5cbitcdCAqL1xuK1x0aWYgKHNsaXBfZGV2c1tpXSA9PSBkZXYpXG4rXHRcdHNsaXBfZGV2c1tpXSA9IE5VTEw7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNsX25ldGRldl9vcHMgPSB7XG5AQCAtNzI1LDYgKzczNyw3IEBAIHN0YXRpYyB2b2lkIHNsX3N5bmModm9pZClcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3Qgc2xpcFx0ICAqc2w7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcbiBcdFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xuIFx0XHRpZiAoZGV2ID09IE5VTEwpXG5AQCAtNzM2LDYgKzc0OSw3IEBAIHN0YXRpYyB2b2lkIHNsX3N5bmModm9pZClcbiBcdFx0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKVxuIFx0XHRcdGRldl9jbG9zZShkZXYpO1xuIFx0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiB9XG4gXG4gXG5AQCAtNzQ3LDE5ICs3NjEsMjQgQEAgc3RhdGljIHN0cnVjdCBzbGlwICpzbF9hbGxvYyh2b2lkKVxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2xpcCAgICAgICAqc2w7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcbiBcdFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xuIFx0XHRpZiAoZGV2ID09IE5VTEwpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXHQvKiBTb3JyeSwgdG9vIG1hbnksIGFsbCBzbG90cyBpbiB1c2UgKi9cbi1cdGlmIChpIFx1MDAzZT0gc2xpcF9tYXhkZXYpXG4rXHRpZiAoaSBcdTAwM2U9IHNsaXBfbWF4ZGV2KSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuIFxuIFx0c3ByaW50ZihuYW1lLCBcInNsJWRcIiwgaSk7XG4gXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpzbCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sIHNsX3NldHVwKTtcbi1cdGlmICghZGV2KVxuK1x0aWYgKCFkZXYpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4gXG4gXHRkZXYtXHUwMDNlYmFzZV9hZGRyICA9IGk7XG4gXHRzbCA9IG5ldGRldl9wcml2KGRldik7XG5AQCAtNzc2LDYgKzc5NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcbiBcdHRpbWVyX3NldHVwKFx1MDAyNnNsLVx1MDAzZW91dGZpbGxfdGltZXIsIHNsX291dGZpbGwsIDApO1xuICNlbmRpZlxuIFx0c2xpcF9kZXZzW2ldID0gZGV2O1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdHJldHVybiBzbDtcbiB9XG4gXG5AQCAtMTMzMiw2ICsxMzUyLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKVxuIFx0XHRcdG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7XG4gXG4gXHRcdGJ1c3kgPSAwO1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2xpcF9tYXhkZXY7IGkrKykge1xuIFx0XHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbiBcdFx0XHRpZiAoIWRldilcbkBAIC0xMzQ0LDE2ICsxMzY1LDE5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBzbGlwX2V4aXQodm9pZClcbiBcdFx0XHR9XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2wtXHUwMDNlbG9jayk7XG4gXHRcdH1cbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdH0gd2hpbGUgKGJ1c3kgXHUwMDI2XHUwMDI2IHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbiBcbiBcdC8qIEZJWE1FOiBoYW5ndXAgaXMgYXN5bmMgc28gd2Ugc2hvdWxkIHdhaXQgd2hlbiBkb2luZyB0aGlzIHNlY29uZFxuIFx0ICAgcGhhc2UgKi9cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbitcdFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0aWYgKCFkZXYpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHNsaXBfZGV2c1tpXSA9IE5VTEw7XG4gXG4gXHRcdHNsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdFx0aWYgKHNsLVx1MDAzZXR0eSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDY6NTEuMzI4NTc5MzIxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4MTg0OTAxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIERldmljZSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNgLiBTZWVtcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBtdXRleCwgYHNsaXBfZGV2c19sb2NrYCwgdG8gaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBgc2xpcF9kZXZzW11gIGFycmF5LiBTbWFydCBtb3ZlLCB0aGF0J3MgZGVmaW5pdGVseSBhIHBvaW50IG9mIHBvdGVudGlhbCBjb250ZW50aW9uLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgc2xfZnJlZV9uZXRkZXZgLCBgc2xfc3luY2AsIGBzbF9hbGxvY2AsIGFuZCBgc2xpcF9leGl0YCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhpcyBjb21wb25lbnQgaXMgZXZlbiBhY3RpdmVseSB1c2VkLCBvciBpZiB0aGlzIGNoYW5nZSBpcyBnb2luZyB0byBiZSByZWxldmFudC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRldGVybWluZSBpdHMgZnV6emFiaWxpdHkgb3IgcmVhY2hhYmlsaXR5LiBTTElQLi4uIHJpZ2h0LCBTZXJpYWwgTGluZSBJbnRlcm5ldCBQcm90b2NvbC4gQ2xhc3NpYy4gSXQgY2FuIGJlIGF0dGFjaGVkIHRvIGEgcHR5IHVzaW5nIGBUSU9DU0VURGAgd2l0aCBgTl9TTElQYC4gSG1tLCBwdHkuLi4gdGhhdCBtZWFucyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYXJlIGRlZmluaXRlbHkgaW4gcGxheS4gVGhhdCdzIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS4gU28sIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhhdCBTTElQIGlzIHJlYWNoYWJsZS5cblxuTm93LCBsZXQgbWUgbG9vayBhdCB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUuIFdoZXJlIGlzIGl0IGVuYWJsZWQ/IEknbGwgcHJvYmFibHkgZmluZCBgZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnYCBvciBzaW1pbGFyLiBJJ2xsIHNlYXJjaCBmb3IgYHNsaXAuY2AgaW4gYGRyaXZlcnMvbmV0L3NsaXAvTWFrZWZpbGVgIGFuZCBzZWUgaG93IGl0IGlzIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgYnVpbGQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBtb2R1bGUgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA2OjU2LjUxMDQzMTUzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODMwNTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbGlwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvc2xpcC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvc2xpcC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19TTElQKSArPSBzbGlwLm9cXG5kcml2ZXJzL25ldC9zbGlwL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1NMSEMpICs9IHNsaGMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNjo1Ni42MDg3NDI4MjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzA0NDM1NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgU0xJUCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGBDT05GSUdfU0xJUGAuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gVGhhdCB3b3VsZCBiZSBgZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzLCBsaWtlIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBvciByZWxhdGVkIG5ldHdvcmtpbmcgZmVhdHVyZXMgdGhhdCB0aGlzIGBTTElQYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aWVkIHRvLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgYXNzZXNzIHRoZSBicm9hZGVyIGltcGFjdCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gb24gdGhlIG92ZXJhbGwgYnVpbGQgYW5kIHBvdGVudGlhbCBjb25mbGljdHMgb3IgYWR2YW50YWdlcyBpdCBtaWdodCBpbnRyb2R1Y2UuIFRpbWUgdG8gZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDY6NTkuMzEzMTgxMzY2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTcwNDQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0xJUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnOjY6Y29uZmlnIFNMSVBcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiU0xJUCAoc2VyaWFsIGxpbmUpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc9NDM9aWYgU0xJUFxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy00NC1cXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NDU6Y29uZmlnIFNMSVBfQ09NUFJFU1NFRFxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy00Ni1cXHRib29sIFxcXCJDU0xJUCBjb21wcmVzc2VkIGhlYWRlcnNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNjAtXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnOjYxOmNvbmZpZyBTTElQX1NNQVJUXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIktlZXBhbGl2ZSBhbmQgbGluZWZpbGxcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNjgtXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnOjY5OmNvbmZpZyBTTElQX01PREVfU0xJUDZcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiU2l4IGJpdCBTTElQIGVuY2Fwc3VsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA2OjU5LjQxODg5MDk3NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDg0NzYyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIFNMSVAncyBGb3VuZGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gU0xJUC4gQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb24uIFNwZWNpZmljYWxseSwgd2hhdCBhcmUgdGhlIGNvcmUgZGVwZW5kZW5jaWVzIHRoaXMgdGhpbmcgaXMgYnVpbHQgdXBvbj8gV2UgY2FuJ3QgbWVhbmluZ2Z1bGx5IGV2YWx1YXRlIG9yIHRyb3VibGVzaG9vdCB3aXRob3V0IGtub3dpbmcgd2hhdCBTTElQIHJlbGllcyBvbi4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgYWxzbyBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgZGVzaWduIGFuZCBwb3RlbnRpYWwgd2Vha25lc3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjAyLjI2NzM3MTY0NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzMxNTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL0tjb25maWc9Nj1jb25maWcgU0xJUFxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJTTElQIChzZXJpYWwgbGluZSkgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6ODpcXHRkZXBlbmRzIG9uIFRUWVxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZz00NT1jb25maWcgU0xJUF9DT01QUkVTU0VEXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIkNTTElQIGNvbXByZXNzZWQgaGVhZGVyc1xcXCJcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NDc6XFx0ZGVwZW5kcyBvbiBTTElQXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTQ4LVxcdHNlbGVjdCBTTEhDXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc9NjE9Y29uZmlnIFNMSVBfU01BUlRcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNjItXFx0Ym9vbCBcXFwiS2VlcGFsaXZlIGFuZCBsaW5lZmlsbFxcXCJcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NjM6XFx0ZGVwZW5kcyBvbiBTTElQXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTY0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZz02OT1jb25maWcgU0xJUF9NT0RFX1NMSVA2XFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIlNpeCBiaXQgU0xJUCBlbmNhcHN1bGF0aW9uXFxcIlxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo3MTpcXHRkZXBlbmRzIG9uIFNMSVBcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNzItXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNzowMi4zNjQ2OTU1NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ0MDEyMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xJUCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgQ09ORklHX1NMSVBgIG9wdGlvbiByZWxpZXMgb24gYFRUWWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBtdXRleCwgYHNsaXBfZGV2c19sb2NrYCwgdG8gc2FmZWd1YXJkIGFjY2VzcyB0byB0aGUgYHNsaXBfZGV2c2AgYXJyYXkuIFRoYXQncyBhIHN0YW5kYXJkIHBhdHRlcm4gZm9yIGNvbmN1cnJlbnQgYWNjZXNzLCBnb29kIHRvIHNlZS4gVGhlIGZ1bmN0aW9ucyB0aGV5J3ZlIHRvdWNoZWQgYXJlIGBzbF9mcmVlX25ldGRldmAsIGBzbF9zeW5jYCwgYHNsX2FsbG9jYCwgYW5kIGBzbGlwX2V4aXRgLlxuXG5Ob3csIGBzbF9hbGxvY2AgaXMgY2FsbGVkIHdoZW4gYSBTZXJpYWwgTGluZSBJbnRlcm5ldCBQcm90b2NvbCAoU0xJUCkgbGluZSBkaXNjaXBsaW5lIGlzIGF0dGFjaGVkLCBhbmQgdGhhdCdzIHRoZSBpbnRlcmVzdGluZyBvbmUgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgdmVyaWZ5IGV4YWN0bHkgd2hlcmUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aXRoaW4gdGhlIGRyaXZlcidzIGNvbnRleHQuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgbmV3IGxvY2sgaW50ZXJhY3RzIHdpdGggdGhvc2UgY2FsbCBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU4NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNzowNi42MDg3MTg2MjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDY1ODY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz0xMTg9c3RhdGljIGludCBzbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCB2b2lkIF9fdXNlciAqZGF0YSwgaW50IGNtZCk7XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMjItKiAgQnVmZmVyIGFkbWluaXN0cmF0aW9uIHJvdXRpbmVzOlxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEyMzoqXFx0c2xfYWxsb2NfYnVmcygpXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI0LSpcXHRzbF9mcmVlX2J1ZnMoKVxcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI2LSpcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzoxMjc6KiBOT1RFOiBzbF9yZWFsbG9jX2J1ZnMgIT0gc2xfZnJlZV9idWZzICsgc2xfYWxsb2NfYnVmcywgYmVjYXVzZVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyOC0qXFx0c2xfcmVhbGxvY19idWZzIHByb3ZpZGVzIHN0cm9uZyBhdG9taWNpdHkgYW5kIHJlYWxsb2NhdGlvblxcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTM1LVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEzNjpzdGF0aWMgaW50IHNsX2FsbG9jX2J1ZnMoc3RydWN0IHNsaXAgKnNsLCBpbnQgbXR1KVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYz02NDA9c3RhdGljIHZvaWQgc2xfZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTY0NS1cXHQvKiBPbmx5IGRyb3Agb3VyIG93biBlbnRyeTogdGhlIHNsb3QgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIHJldXNlZCBieVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjY0NjpcXHQgKiBzbF9hbGxvYygpIGZvciBhIGRpZmZlcmVudCBjaGFubmVsLlxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTY0Ny1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTczND1zdGF0aWMgdm9pZCBzbF9zeW5jKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03NTYtLyogRmluZCBhIGZyZWUgU0xJUCBjaGFubmVsLCBhbmQgbGluayBpbiB0aGlzIGB0dHknIGxpbmUuICovXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NzU3OnN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03NTgte1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9ODEyPXN0YXRpYyBpbnQgc2xpcF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy04NDAtXFx0ZXJyID0gLUVORklMRTtcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4NDE6XFx0c2wgPSBzbF9hbGxvYygpO1xcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg0Mi1cXHRpZiAoc2wgPT0gTlVMTClcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg1MC1cXHRcXHQvKiBQZXJmb3JtIHRoZSBsb3ctbGV2ZWwgU0xJUCBpbml0aWFsaXphdGlvbi4gKi9cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4NTE6XFx0XFx0ZXJyID0gc2xfYWxsb2NfYnVmcyhzbCwgU0xfTVRVKTtcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy04NTItXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDc6MDYuNzEzMzg1NDIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjI4NDU2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBMaW5lIERpc2NpcGxpbmUncyBMaWZlY3ljbGUqKlxuXG5Pa2F5LCBzbyBgc2xfYWxsb2NgIGlzIGRlZmluaXRlbHkgZ2V0dGluZyBjYWxsZWQgZnJvbSBgc2xpcF9vcGVuYC4gVGhhdCdzIHRoZSBrZXkuIEFuZCBgc2xpcF9vcGVuYCBpcywgb2YgY291cnNlLCB0aGUgYG9wZW5gIG1ldGhvZCBmb3IgdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBwb2ludCBvZiBlbnRyeSB3aGVuIGEgZGV2aWNlIGlzIGJlaW5nIGJyb3VnaHQgdXAgd2l0aCBTTElQLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhvc2UgZW50cnkgcG9pbnRzOiBsZXQgbWUgY2hlY2sgYm90aCBgc2xpcF9vcGVuYCAqYW5kKiBgc2xpcF9jbG9zZWAuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIG9mIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB0byBiZSBjZXJ0YWluIHRoYXQgdGhlcmUgaXNuJ3QgYSByYWNlIGNvbmRpdGlvbiwgb3IgYSBtZW1vcnkgbGVhay5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjA5LjYzNjIzNDE3M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNDAyMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNsaXBfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz03MDA9c3RhdGljIHZvaWQgc2xpcF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqY3AsIGNvbnN0IHU4ICpmcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTcyOS0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NzMwOiAqICBzbGlwX29wZW4gaGVscGVyIHJvdXRpbmVzLlxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTczMS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzU3PXN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTgxMS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4MTI6c3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy04MTMte1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9MTI5Mj1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xfbGRpc2MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMjk1LVxcdC5uYW1lIFxcdFxcdD0gXFxcInNsaXBcXFwiLFxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEyOTY6XFx0Lm9wZW4gXFx0XFx0PSBzbGlwX29wZW4sXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI5Ny1cXHQuY2xvc2VcXHQgXFx0PSBzbGlwX2Nsb3NlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNzowOS44MDg2NDE2NzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU4NTkxNDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25jdXJyZW5jeSBGaXggZm9yIHRoZSBTTElQIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBTTElQIGRyaXZlci4gVGhlIGVudHJ5IHBvaW50IGhlcmUgaXMgYHNsaXBfb3BlbmAsIGFuZCB0aGUgY29yZSBvZiB0aGUgZml4IHJldm9sdmVzIGFyb3VuZCBhIHJhY2UgY29uZGl0aW9uLiBJdCBsb29rcyBsaWtlIGBzbF9mcmVlX25ldGRldmAsIHdoaWNoIGFjdHMgYXMgdGhlIGRlc3RydWN0b3IgZm9yIHRoZSBuZXR3b3JrIGRldmljZSAoYG5ldF9kZXZpY2VgKSwgaXMgYmVpbmcgY2FsbGVkIGFzeW5jaHJvbm91c2x5IGZyb20gYG5ldGRldl9ydW5fdG9kbygpYC4gVGhpcyBjYXVzZXMgYSBwcm9ibGVtIGJlY2F1c2UgaXQgcmVsZWFzZXMgdGhlIFJUTkwgc2VtYXBob3JlLCBhbmQgdGhpcyBvcGVucyB1cCBhIHdpbmRvdyBmb3IgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGBzbGlwX2RldnNbXWAgYXJyYXkuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNvbmN1cnJlbmN5IGJ1ZywgYSBkZWZpbml0ZSBwb3RlbnRpYWwgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGhlcmUgd2lsbCBiZSBvbiBhIGZldyBrZXkgc3ltYm9scyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBMZXQncyBsb29rIGF0IGBzbGlwX29wZW5gLCBgc2xpcF9jbG9zZWAsIGBzbF9mcmVlX25ldGRldmAsIGFuZCBgc2xfYWxsb2NgLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQuIGBzbF9mcmVlX25ldGRldmAgaXMgZGVmaW5pdGVseSBzdGF0aWMsIHRoYXQncyBnb29kIHRvIGtub3cuIGBzbGlwX29wZW5gIGFuZCBgc2xpcF9jbG9zZWAgYXJlIGFsc28gc3RhdGljLCBidXQgdGhleSdyZSBwYXJ0IG9mIHRoZSBsaW5lIGRpc2NpcGxpbmUgb3BlcmF0aW9ucy4gV2FpdCBhIG1pbnV0ZSwgYnV0IGBzbGlwX29wZW5gIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIENhbiBJIHVzZSBpdCBhcyBhIGZvY3VzIHN5bWJvbD8gWWVzLCBJIGNhbiB1c2Ugc3RhdGljIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzIGlmIHRoZXkncmUgbm90IGlubGluZWQuIEFuZCBzaW5jZSBgc2xpcF9vcGVuYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCBpdCB3b24ndCBiZSBpbmxpbmVkLiBgc2xfYWxsb2NgIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGZyb20gYHNsaXBfb3BlbmAuIEknbSBnb2luZyB0byBndWVzcyBpdCAqbWlnaHQqIGJlIGlubGluZWQsIGJ1dCB0aGUgZnVuY3Rpb24ncyBzaXplIG1pZ2h0IG1ha2UgdGhhdCB1bmxpa2VseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBzbF9mcmVlX25ldGRldmAgYSBsaXR0bGUgY2xvc2VyLiBPa2F5LCBpdCdzIHBhc3NlZCBhcyBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvciA9IHNsX2ZyZWVfbmV0ZGV2O2AgaW4gYHNsX3NldHVwYC4gVGhhdCBjb25maXJtcyB0aGF0IGl0IGlzbid0IGlubGluZWQsIHNvIGl0J3MgYSBnb29kIGZvY3VzLlxuXG5JIG5lZWQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBzbF9zZXR1cGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDc6MTYuMzk0NTU5MDczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjkwODYyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2xfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NjUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2xfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTY2Ny1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo2Njg6c3RhdGljIHZvaWQgc2xfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy02Njkte1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzU3PXN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTc3Ni1cXHRzcHJpbnRmKG5hbWUsIFxcXCJzbCVkXFxcIiwgaSk7XFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6Nzc3OlxcdGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnNsKSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgc2xfc2V0dXApO1xcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTc3OC1cXHRpZiAoIWRldikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNzoxNi45NjM2NTExMjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2MjkwODU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqVmVyaWZ5aW5nIE5ldHdvcmsgRGV2aWNlIERlc3RydWN0b3IgQXNzaWdubWVudCoqXG5cbk9rYXksIHNvIEknbSBkb3VibGUtY2hlY2tpbmcgdGhlIG5ldHdvcmsgZGV2aWNlIHRlYXJkb3duIHNlcXVlbmNlIGZvciB0aGlzIHNwZWNpZmljIGRyaXZlci4gSXQncyBjcnVjaWFsIHRvIGVuc3VyZSB0aGF0IHJlc291cmNlcyBhcmUgcmVsZWFzZWQgcHJvcGVybHkgd2hlbiBhIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQgb3IgZ29lcyBvZmZsaW5lLiBMZXQncyBzZWUuLi4gWWVwLCB0aGF0J3MgaXQuIEluIGBzbF9zZXR1cGAsIHRoZSBgc2xfZnJlZV9uZXRkZXZgIGZ1bmN0aW9uIGlzIGNvcnJlY3RseSBiZWluZyBhc3NpZ25lZCB0byBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAuIFRoYXQncyBwcmVjaXNlbHkgd2hlcmUgaXQgc2hvdWxkIGJlLiBUaGUgZGVzdHJ1Y3RvciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBhbnkgZHJpdmVyLXNwZWNpZmljIHByaXZhdGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldHdvcmsgZGV2aWNlIChgZGV2YCkuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBzdGVwIGFuZCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY29uZmlybSBpcyBoYW5kbGVkIHByb3Blcmx5IHdoZW4gcmV2aWV3aW5nIG5ldHdvcmsgZGV2aWNlIHNldHVwIGFuZCB0ZWFyZG93bi4gVGhpcyBsb29rcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzExNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjE5LjgyNjU2Mjk1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NzYxNjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByaXZfZGVzdHJ1Y3RvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz05Nz1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKipzbGlwX2RldnM7XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy05OS0vKiBTZXJpYWxpc2VzIGFjY2VzcyB0byBzbGlwX2RldnNbXSBhbmQgdG8gdGhlIHNsaXAgY2hhbm5lbHMgaXQgcG9pbnRzIGF0LlxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEwMDogKiBSVE5MIGlzIG5vdCBlbm91Z2g6IHNsX2ZyZWVfbmV0ZGV2KCkgaXMgdGhlIHByaXZfZGVzdHJ1Y3RvciBhbmQgdGhlcmVmb3JlXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTAxLSAqIHJ1bnMgZnJvbSBuZXRkZXZfcnVuX3RvZG8oKSwgd2hpY2ggZGVsaWJlcmF0ZWx5IGRyb3BzIHRoZSBSVE5MIHNlbWFwaG9yZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTY2OD1zdGF0aWMgdm9pZCBzbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNjcxLVxcdGRldi1cXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXZcXHQ9IHRydWU7XFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NjcyOlxcdGRldi1cXHUwMDNlcHJpdl9kZXN0cnVjdG9yXFx0PSBzbF9mcmVlX25ldGRldjtcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy02NzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjE5Ljk3MjMyOTY4OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg1ODA1MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBzbF9mcmVlX25ldGRldmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzbF9mcmVlX25ldGRldmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBpdCdzICpub3QqIGlubGluZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3MgdHJhY2UgaXRzIHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRocyBhbmQgc2VlIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgc2xpcF9leGl0YC4gVGhhdCdzIHRoZSBtb2R1bGUgZXhpdCBmdW5jdGlvbiwgcmlnaHQ/IFJpZ2h0LCBhbmQgSSBrbm93IHN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSBmb2N1cyBvbiBmdXp6aW5nIHRoZSBtb2R1bGUgdW5sb2FkaW5nIHBhdGguIEl04oCZcyBwcmV0dHkgcmFyZS4gU28sIGluIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGNvbnRleHQsIGBzbGlwX2V4aXRgIGlzIGxpa2VseSB1bnJlYWNoYWJsZSwgd2hpY2ggbWVhbnMgYW55dGhpbmcgY2FsbGVkIGZyb20gaXQgd29uJ3QgYmUgdHJpZ2dlcmVkLCBub3JtYWxseS4gTGV0J3Mgc2VlLi4uIEFoYSEgYHNsX3N5bmNgIGlzIGNhbGxlZCBmcm9tIGBzbGlwX2V4aXRgLiBTbywgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsIGBzbF9zeW5jYCBwcm9iYWJseSBpc24ndCBhIGxpa2VseSBmdXp6IHRhcmdldCBlaXRoZXIuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlLCBiZWNhdXNlIHRoYXQgbWVhbnMgdGhhdCBJIHNob3VsZCBjaGVjayB0aGUgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU5MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjIzLjY1ODEzOTc1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTMxNzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNsX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzAwPXN0YXRpYyB2b2lkIHNsaXBfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdTggKmNwLCBjb25zdCB1OCAqZnAsXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03MzMtLyogQ29sbGVjdCBoYW5nZWQgdXAgY2hhbm5lbHMgKi9cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo3MzQ6c3RhdGljIHZvaWQgc2xfc3luYyh2b2lkKVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTczNS17XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYz04MTI9c3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTgyOS1cXHQvKiBDb2xsZWN0IGhhbmdlZCB1cCBjaGFubmVscy4gKi9cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4MzA6XFx0c2xfc3luYygpO1xcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTgzMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDc6MjMuODQyNzE4NjgzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMjc0Mzc4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNMSVAgTGluZSBEaXNjaXBsaW5lIERyaXZlciBGaXgqKlxuXG5Pa2F5LCBzbyBgc2xfc3luY2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgc2xpcF9vcGVuYCwgd2hpY2ggbWVhbnMgaXQncyBhY2Nlc3NpYmxlIGFuZCByZWxldmFudCB0byBteSBhbmFseXNpcy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgY29ubmVjdGlvbnMgaW4gbWluZC4gTXkgZm9jdXMgcmlnaHQgbm93IG5lZWRzIHRvIGJlIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBgc2xpcF9vcGVuYCwgYHNsaXBfY2xvc2VgLCBgc2xfZnJlZV9uZXRkZXZgLCBgc2xfc3luY2AsIGFuZCBgc2xfYWxsb2NgLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSBvZiB0aGluZ3MuIEkgc2VlIGBTTElQYCBpcyBpbnZvbHZlZC4gSSBrbm93IHRoYXQgYFNMSVBgIGRlcGVuZHMgb24gYFRUWWAsIGFuZCBgVFRZYCBpcyBwcmV0dHkgc3RhbmRhcmQgYW5kIHVzdWFsbHkgZW5hYmxlZC4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBTTElQYCBkb2Vzbid0IGhhdmUgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzLCBidXQgYmFzZWQgb24gbXkga25vd2xlZGdlLCBJJ20gbm90IGV4cGVjdGluZyBhbnkgc3VycHJpc2VzIHRoZXJlLiBOb3BlLCBqdXN0IGBUVFlgLlxuXG5MZXQgbWUganVzdCBjb25maXJtIHRoYXQgYHNsaXBfb3BlbmAgaXMsIGFzIEkgc3VzcGVjdCwgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gdGhpcyBjb2RlLCBhbmQgaXQgaXMgdGhlIGxkaXNjIG9wZW4uXG5cbkFuZCBgc2xpcF9jbG9zZWAgc2VlbXMgc2ltaWxhcmx5IHJlYWNoYWJsZSwgdHJpZ2dlcmVkIHdoZW4gdGhlIGxkaXNjIGlzIGNsb3NlZC5cblxuQWxyaWdodCwgYmFzZWQgb24gdGhpcywgSSdtIGdvaW5nIHRvIHNldCBzb21lIHBhcmFtZXRlcnMgZm9yIHRoZSBmdXp6ZXIuIEkgbmVlZCB0byBtYXJrIHRoaXMgYXMgXCJXb3J0aEZ1enppbmdcIiBiZWNhdXNlIGl0IGNsZWFybHkgaW52b2x2ZXMgY29uY3VycmVuY3kuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29uZmlybWVkOiBgW1wic2xpcF9vcGVuXCIsIFwic2xpcF9jbG9zZVwiLCBcInNsX2ZyZWVfbmV0ZGV2XCIsIFwic2xfc3luY1wiLCBcInNsX2FsbG9jXCJdYC4gQW5kIEkgbmVlZCB0byBlbmFibGUgdGhlIGBTTElQYCBjb25maWd1cmF0aW9uLlxuXG5NeSByZWFzb25pbmc/IFRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lIGRyaXZlci4gSXQncyB1c2luZyBhIG11dGV4IHRvIHByb3RlY3QgdGhlIGBzbGlwX2RldnNgIGFycmF5LCB3aGljaCBpbmRpY2F0ZXMgdGhlIHJhY2UgaXMgbGlrZWx5IGJldHdlZW4gYHNsX2ZyZWVfbmV0ZGV2YCAod2hpY2ggcnVucyBhc3luY2hyb25vdXNseSBmcm9tIGBuZXRkZXZfcnVuX3RvZG9gKSBhbmQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHNsX2FsbG9jYCBhbmQgYHNsX3N5bmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjb25jdXJyZW5jeSBmaXggYW5kIGludm9sdmVzIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBjb2RlIHRoYXQgaXMgd29ydGggZXhwbG9yaW5nIGZvciB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjYsIk91dHB1dFRva2VucyI6MTQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjMxLjA3MDE2MDEzNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzU5MzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xJUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNsaXBfb3BlblwiLFxuICAgIFwic2xpcF9jbG9zZVwiLFxuICAgIFwic2xfZnJlZV9uZXRkZXZcIixcbiAgICBcInNsX3N5bmNcIixcbiAgICBcInNsX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyIGJ5IGludHJvZHVjaW5nIGEgbXV0ZXggdG8gcHJvdGVjdCB0aGUgYHNsaXBfZGV2c2AgYXJyYXkuIFRoZSByYWNlIG9jY3VycyBiZXR3ZWVuIGBzbF9mcmVlX25ldGRldmAgKHJ1bm5pbmcgYXN5bmNocm9ub3VzbHkgZnJvbSBgbmV0ZGV2X3J1bl90b2RvYCkgYW5kIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBzbF9hbGxvY2AgYW5kIGBzbF9zeW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY29uY3VycmVuY3kgZml4IGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMSVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbGlwX29wZW5cIixcbiAgICBcInNsaXBfY2xvc2VcIixcbiAgICBcInNsX2ZyZWVfbmV0ZGV2XCIsXG4gICAgXCJzbF9zeW5jXCIsXG4gICAgXCJzbF9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lIGRyaXZlciBieSBpbnRyb2R1Y2luZyBhIG11dGV4IHRvIHByb3RlY3QgdGhlIGBzbGlwX2RldnNgIGFycmF5LiBUaGUgcmFjZSBvY2N1cnMgYmV0d2VlbiBgc2xfZnJlZV9uZXRkZXZgIChydW5uaW5nIGFzeW5jaHJvbm91c2x5IGZyb20gYG5ldGRldl9ydW5fdG9kb2ApIGFuZCBvdGhlciBmdW5jdGlvbnMgbGlrZSBgc2xfYWxsb2NgIGFuZCBgc2xfc3luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNvbmN1cnJlbmN5IGZpeCBpbiByZWFjaGFibGUgY29yZSBkcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDc6MzEuMjc3NzczNTQ1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjMzMjYxNjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDc6MzEuMjc4NzAzNDk0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcyMzIzMjYzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtdXRleCAoYHNsaXBfZGV2c19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgYHNsaXBfZGV2c2AgYXJyYXkgaW4gdGhlIHNsaXAgZHJpdmVyLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgZml4IGFpbWVkIGF0IHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLCB3aGljaCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZjg3MzkzYzlhYjM5MWZiYjhkYjBiYmQwZWJmOTFiMGEzNjA4YTdmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDg6MDY6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG5pbmRleCBmYWFlNzExY2Y3OTNkLi41Y2RhZTk4MzFmMDg3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG5AQCAtOTYsNiArOTYsMTIgQEBcbiBcbiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKipzbGlwX2RldnM7XG4gXG4rLyogU2VyaWFsaXNlcyBhY2Nlc3MgdG8gc2xpcF9kZXZzW10gYW5kIHRvIHRoZSBzbGlwIGNoYW5uZWxzIGl0IHBvaW50cyBhdC5cbisgKiBSVE5MIGlzIG5vdCBlbm91Z2g6IHNsX2ZyZWVfbmV0ZGV2KCkgaXMgdGhlIHByaXZfZGVzdHJ1Y3RvciBhbmQgdGhlcmVmb3JlXG4rICogcnVucyBmcm9tIG5ldGRldl9ydW5fdG9kbygpLCB3aGljaCBkZWxpYmVyYXRlbHkgZHJvcHMgdGhlIFJUTkwgc2VtYXBob3JlLlxuKyAqL1xuK3N0YXRpYyBERUZJTkVfTVVURVgoc2xpcF9kZXZzX2xvY2spO1xuK1xuIHN0YXRpYyBpbnQgc2xpcF9tYXhkZXYgPSBTTF9OUlVOSVQ7XG4gbW9kdWxlX3BhcmFtKHNsaXBfbWF4ZGV2LCBpbnQsIDApO1xuIE1PRFVMRV9QQVJNX0RFU0Moc2xpcF9tYXhkZXYsIFwiTWF4aW11bSBudW1iZXIgb2Ygc2xpcCBkZXZpY2VzXCIpO1xuQEAgLTYzNSw3ICs2NDEsMTMgQEAgc3RhdGljIHZvaWQgc2xfZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRpbnQgaSA9IGRldi1cdTAwM2ViYXNlX2FkZHI7XG4gXG4tXHRzbGlwX2RldnNbaV0gPSBOVUxMO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4rXHQvKiBPbmx5IGRyb3Agb3VyIG93biBlbnRyeTogdGhlIHNsb3QgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIHJldXNlZCBieVxuK1x0ICogc2xfYWxsb2MoKSBmb3IgYSBkaWZmZXJlbnQgY2hhbm5lbC5cbitcdCAqL1xuK1x0aWYgKHNsaXBfZGV2c1tpXSA9PSBkZXYpXG4rXHRcdHNsaXBfZGV2c1tpXSA9IE5VTEw7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNsX25ldGRldl9vcHMgPSB7XG5AQCAtNzI1LDYgKzczNyw3IEBAIHN0YXRpYyB2b2lkIHNsX3N5bmModm9pZClcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3Qgc2xpcFx0ICAqc2w7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcbiBcdFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xuIFx0XHRpZiAoZGV2ID09IE5VTEwpXG5AQCAtNzM2LDYgKzc0OSw3IEBAIHN0YXRpYyB2b2lkIHNsX3N5bmModm9pZClcbiBcdFx0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKVxuIFx0XHRcdGRldl9jbG9zZShkZXYpO1xuIFx0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiB9XG4gXG4gXG5AQCAtNzQ3LDE5ICs3NjEsMjQgQEAgc3RhdGljIHN0cnVjdCBzbGlwICpzbF9hbGxvYyh2b2lkKVxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2xpcCAgICAgICAqc2w7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcbiBcdFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xuIFx0XHRpZiAoZGV2ID09IE5VTEwpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXHQvKiBTb3JyeSwgdG9vIG1hbnksIGFsbCBzbG90cyBpbiB1c2UgKi9cbi1cdGlmIChpIFx1MDAzZT0gc2xpcF9tYXhkZXYpXG4rXHRpZiAoaSBcdTAwM2U9IHNsaXBfbWF4ZGV2KSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuIFxuIFx0c3ByaW50ZihuYW1lLCBcInNsJWRcIiwgaSk7XG4gXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpzbCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sIHNsX3NldHVwKTtcbi1cdGlmICghZGV2KVxuK1x0aWYgKCFkZXYpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4gXG4gXHRkZXYtXHUwMDNlYmFzZV9hZGRyICA9IGk7XG4gXHRzbCA9IG5ldGRldl9wcml2KGRldik7XG5AQCAtNzc2LDYgKzc5NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcbiBcdHRpbWVyX3NldHVwKFx1MDAyNnNsLVx1MDAzZW91dGZpbGxfdGltZXIsIHNsX291dGZpbGwsIDApO1xuICNlbmRpZlxuIFx0c2xpcF9kZXZzW2ldID0gZGV2O1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdHJldHVybiBzbDtcbiB9XG4gXG5AQCAtMTMzMiw2ICsxMzUyLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKVxuIFx0XHRcdG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7XG4gXG4gXHRcdGJ1c3kgPSAwO1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2xpcF9tYXhkZXY7IGkrKykge1xuIFx0XHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbiBcdFx0XHRpZiAoIWRldilcbkBAIC0xMzQ0LDE2ICsxMzY1LDE5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBzbGlwX2V4aXQodm9pZClcbiBcdFx0XHR9XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2wtXHUwMDNlbG9jayk7XG4gXHRcdH1cbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdH0gd2hpbGUgKGJ1c3kgXHUwMDI2XHUwMDI2IHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbiBcbiBcdC8qIEZJWE1FOiBoYW5ndXAgaXMgYXN5bmMgc28gd2Ugc2hvdWxkIHdhaXQgd2hlbiBkb2luZyB0aGlzIHNlY29uZFxuIFx0ICAgcGhhc2UgKi9cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbitcdFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0aWYgKCFkZXYpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHNsaXBfZGV2c1tpXSA9IE5VTEw7XG4gXG4gXHRcdHNsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdFx0aWYgKHNsLVx1MDAzZXR0eSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDc6MzEuMjc4NzA1MTU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMzIyOTIwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uY3VycmVuY3kgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbXV0ZXgsIGBzbGlwX2RldnNfbG9ja2AsIHRvIHNhZmVseSBtYW5hZ2UgYWNjZXNzIHRvIHRoZSBgc2xpcF9kZXZzYCBhcnJheSBhbmQgdGhlIFNMSVAgY2hhbm5lbHMgd2l0aGluIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBpc3N1ZSBtaXRpZ2F0aW9uLCBpbW1lZGlhdGVseSBzaWduYWxpbmcgYSByYWNlIGNvbmRpdGlvbiBmaXguIEl0J3MgdGFyZ2V0aW5nIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGRvdWJsZSBmcmVlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgbmFzdHkgY29uY3VycmVuY3ktcmVsYXRlZCBidWdzLiBFeGNlbGxlbnQuXG5cbkNydWNpYWxseSwgZnJvbSBhIHNlY3VyaXR5IHN0YW5kcG9pbnQsIEkgc2VlIG5vIGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgaGVyZSwgc28gdGhhdCdzIGdvb2QuIFdlIGFyZW4ndCB3b3JyaWVkIGFib3V0IEtNU0FOIGluIHRoaXMgY2FzZSAtIEtBU0FOIGFuZCBMT0NLREVQIGFyZSB0aGUgYXBwcm9wcmlhdGUgdG9vbHMgdG8gYmUgdXNpbmcgdG8gY2hlY2sgZm9yIHRoZSB0eXBlcyBvZiBpc3N1ZXMgaXQgaXMgbGlrZWx5IG1lYW50IHRvIGFkZHJlc3MuXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbi4gT2theSwgc28gYHNsX2ZyZWVfbmV0ZGV2YCBub3cgY29ycmVjdGx5IGxvY2tzIHRoZSBgc2xpcF9kZXZzX2xvY2tgICpiZWZvcmUqIGNoZWNraW5nIHRoZSBhcnJheSBzbG90IGFuZCwgaW1wb3J0YW50bHksICpiZWZvcmUqIHNldHRpbmcgdGhlIHBvaW50ZXIgdG8gTlVMTC4gYHNsX3N5bmNgIG5vdyBzZXJpYWxpemVzIGl0cyBsb29wIHdpdGggdGhlIGxvY2sgLSBnb29kIGZvciByYWNlIHByb3RlY3Rpb24gb24gdGhlIGFycmF5IGl0c2VsZi4gYHNsX2FsbG9jYCBzaW1pbGFybHkgZ3VhcmRzIHRoZSBzbG90IGFsbG9jYXRpb24gcHJvY2Vzcy4gRmluYWxseSwgYHNsaXBfZXhpdGAgaXMgY29ycmVjdGx5IGxvY2tpbmcgYXJvdW5kIGNoZWNraW5nIGFuZCBjbGVhcmluZyBgc2xpcF9kZXZzYC5cblxuWWVwLCB0aGlzIG5haWxzIGl0LiBUaGlzIGlzIGEgdmVyeSBjbGVhciByYWNlIGNvbmRpdGlvbiBmaXgsIGxpa2VseSB0YXJnZXRpbmcgYSBVQUYgb3IgYSBzaW1pbGFyIGRlcmVmZXJlbmNlLXJlbGF0ZWQgcHJvYmxlbS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFyZSBhcHBhcmVudCwgYW5kIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQsIHdlbGwtdGFyZ2V0ZWQgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDczLCJPdXRwdXRUb2tlbnMiOjEzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjM4LjUxMTAwMTI5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG11dGV4IChgc2xpcF9kZXZzX2xvY2tgKSB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBgc2xpcF9kZXZzYCBhcnJheSBpbiB0aGUgc2xpcCBkcml2ZXIuIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBmaXggYWltZWQgYXQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtdXRleCAoYHNsaXBfZGV2c19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgYHNsaXBfZGV2c2AgYXJyYXkgaW4gdGhlIHNsaXAgZHJpdmVyLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgZml4IGFpbWVkIGF0IHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLCB3aGljaCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzzbq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 07:36:21 +0000 UTC FinishedAt: 2026-08-17 08:07:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLIP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SLIP" ], "series_id": "1c8513c1-4f66-4a26-bbf3-2619ff7f15bd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "slip_open", "slip_close", "sl_free_netdev", "sl_sync", "sl_alloc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMSVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbGlwX29wZW4mIzM0OywKICAgICYjMzQ7c2xpcF9jbG9zZSYjMzQ7LAogICAgJiMzNDtzbF9mcmVlX25ldGRldiYjMzQ7LAogICAgJiMzNDtzbF9zeW5jJiMzNDssCiAgICAmIzM0O3NsX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG11dGV4IChgc2xpcF9kZXZzX2xvY2tgKSB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBgc2xpcF9kZXZzYCBhcnJheSBpbiB0aGUgc2xpcCBkcml2ZXIuIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBmaXggYWltZWQgYXQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTElQIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIgYnkgaW50cm9kdWNpbmcgYSBtdXRleCB0byBwcm90ZWN0IHRoZSBgc2xpcF9kZXZzYCBhcnJheS4gVGhlIHJhY2Ugb2NjdXJzIGJldHdlZW4gYHNsX2ZyZWVfbmV0ZGV2YCAocnVubmluZyBhc3luY2hyb25vdXNseSBmcm9tIGBuZXRkZXZfcnVuX3RvZG9gKSBhbmQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHNsX2FsbG9jYCBhbmQgYHNsX3N5bmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjb25jdXJyZW5jeSBmaXggaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyZjg3MzkzYzlhYjM5MWZiYjhkYjBiYmQwZWJmOTFiMGEzNjA4YTdmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDg6MDY6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMgYi9kcml2ZXJzL25ldC9zbGlwL3NsaXAuY1xuaW5kZXggZmFhZTcxMWNmNzkzZC4uNWNkYWU5ODMxZjA4NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9zbGlwL3NsaXAuY1xuQEAgLTk2LDYgJiM0Mzs5NiwxMiBAQFxuIFxuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqKnNsaXBfZGV2cztcbiBcbiYjNDM7LyogU2VyaWFsaXNlcyBhY2Nlc3MgdG8gc2xpcF9kZXZzW10gYW5kIHRvIHRoZSBzbGlwIGNoYW5uZWxzIGl0IHBvaW50cyBhdC5cbiYjNDM7ICogUlROTCBpcyBub3QgZW5vdWdoOiBzbF9mcmVlX25ldGRldigpIGlzIHRoZSBwcml2X2Rlc3RydWN0b3IgYW5kIHRoZXJlZm9yZVxuJiM0MzsgKiBydW5zIGZyb20gbmV0ZGV2X3J1bl90b2RvKCksIHdoaWNoIGRlbGliZXJhdGVseSBkcm9wcyB0aGUgUlROTCBzZW1hcGhvcmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHNsaXBfZGV2c19sb2NrKTtcbiYjNDM7XG4gc3RhdGljIGludCBzbGlwX21heGRldiA9IFNMX05SVU5JVDtcbiBtb2R1bGVfcGFyYW0oc2xpcF9tYXhkZXYsIGludCwgMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhzbGlwX21heGRldiwgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2Ygc2xpcCBkZXZpY2VzXCYjMzQ7KTtcbkBAIC02MzUsNyAmIzQzOzY0MSwxMyBAQCBzdGF0aWMgdm9pZCBzbF9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGludCBpID0gZGV2LVx1MDAzZWJhc2VfYWRkcjtcbiBcbi1cdHNsaXBfZGV2c1tpXSA9IE5VTEw7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4mIzQzO1x0LyogT25seSBkcm9wIG91ciBvd24gZW50cnk6IHRoZSBzbG90IG1heSBhbHJlYWR5IGhhdmUgYmVlbiByZXVzZWQgYnlcbiYjNDM7XHQgKiBzbF9hbGxvYygpIGZvciBhIGRpZmZlcmVudCBjaGFubmVsLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzbGlwX2RldnNbaV0gPT0gZGV2KVxuJiM0MztcdFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNsX25ldGRldl9vcHMgPSB7XG5AQCAtNzI1LDYgJiM0Mzs3MzcsNyBAQCBzdGF0aWMgdm9pZCBzbF9zeW5jKHZvaWQpXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIFx0c3RydWN0IHNsaXBcdCAgKnNsO1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbiBcdFx0aWYgKGRldiA9PSBOVUxMKVxuQEAgLTczNiw2ICYjNDM7NzQ5LDcgQEAgc3RhdGljIHZvaWQgc2xfc3luYyh2b2lkKVxuIFx0XHRpZiAoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApXG4gXHRcdFx0ZGV2X2Nsb3NlKGRldik7XG4gXHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiB9XG4gXG4gXG5AQCAtNzQ3LDE5ICYjNDM7NzYxLDI0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMO1xuIFx0c3RydWN0IHNsaXAgICAgICAgKnNsO1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbiBcdFx0aWYgKGRldiA9PSBOVUxMKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuIFx0LyogU29ycnksIHRvbyBtYW55LCBhbGwgc2xvdHMgaW4gdXNlICovXG4tXHRpZiAoaSBcdTAwM2U9IHNsaXBfbWF4ZGV2KVxuJiM0MztcdGlmIChpIFx1MDAzZT0gc2xpcF9tYXhkZXYpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiBcbiBcdHNwcmludGYobmFtZSwgXCYjMzQ7c2wlZFwmIzM0OywgaSk7XG4gXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpzbCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sIHNsX3NldHVwKTtcbi1cdGlmICghZGV2KVxuJiM0MztcdGlmICghZGV2KSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXG4gXHRkZXYtXHUwMDNlYmFzZV9hZGRyICA9IGk7XG4gXHRzbCA9IG5ldGRldl9wcml2KGRldik7XG5AQCAtNzc2LDYgJiM0Mzs3OTUsNyBAQCBzdGF0aWMgc3RydWN0IHNsaXAgKnNsX2FsbG9jKHZvaWQpXG4gXHR0aW1lcl9zZXR1cChcdTAwMjZzbC1cdTAwM2VvdXRmaWxsX3RpbWVyLCBzbF9vdXRmaWxsLCAwKTtcbiAjZW5kaWZcbiBcdHNsaXBfZGV2c1tpXSA9IGRldjtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIFx0cmV0dXJuIHNsO1xuIH1cbiBcbkBAIC0xMzMyLDYgJiM0MzsxMzUyLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKVxuIFx0XHRcdG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7XG4gXG4gXHRcdGJ1c3kgPSAwO1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbiBcdFx0XHRpZiAoIWRldilcbkBAIC0xMzQ0LDE2ICYjNDM7MTM2NSwxOSBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgc2xpcF9leGl0KHZvaWQpXG4gXHRcdFx0fVxuIFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNsLVx1MDAzZWxvY2spO1xuIFx0XHR9XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIFx0fSB3aGlsZSAoYnVzeSBcdTAwMjZcdTAwMjYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpO1xuIFxuIFx0LyogRklYTUU6IGhhbmd1cCBpcyBhc3luYyBzbyB3ZSBzaG91bGQgd2FpdCB3aGVuIGRvaW5nIHRoaXMgc2Vjb25kXG4gXHQgICBwaGFzZSAqL1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xuJiM0MztcdFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdGlmICghZGV2KVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRzbGlwX2RldnNbaV0gPSBOVUxMO1xuIFxuIFx0XHRzbCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRcdGlmIChzbC1cdTAwM2V0dHkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0xJUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NsaXBfb3BlbiYjMzQ7LAogICAgJiMzNDtzbGlwX2Nsb3NlJiMzNDssCiAgICAmIzM0O3NsX2ZyZWVfbmV0ZGV2JiMzNDssCiAgICAmIzM0O3NsX3N5bmMmIzM0OywKICAgICYjMzQ7c2xfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyIGJ5IGludHJvZHVjaW5nIGEgbXV0ZXggdG8gcHJvdGVjdCB0aGUgYHNsaXBfZGV2c2AgYXJyYXkuIFRoZSByYWNlIG9jY3VycyBiZXR3ZWVuIGBzbF9mcmVlX25ldGRldmAgKHJ1bm5pbmcgYXN5bmNocm9ub3VzbHkgZnJvbSBgbmV0ZGV2X3J1bl90b2RvYCkgYW5kIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBzbF9hbGxvY2AgYW5kIGBzbF9zeW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY29uY3VycmVuY3kgZml4IGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmY4NzM5M2M5YWIzOTFmYmI4ZGIwYmJkMGViZjkxYjBhMzYwOGE3ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA4OjA2OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMgYi9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYwppbmRleCBmYWFlNzExY2Y3OTNkLi41Y2RhZTk4MzFmMDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYwpAQCAtOTYsNiAmIzQzOzk2LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqKnNsaXBfZGV2czsKIAomIzQzOy8qIFNlcmlhbGlzZXMgYWNjZXNzIHRvIHNsaXBfZGV2c1tdIGFuZCB0byB0aGUgc2xpcCBjaGFubmVscyBpdCBwb2ludHMgYXQuCiYjNDM7ICogUlROTCBpcyBub3QgZW5vdWdoOiBzbF9mcmVlX25ldGRldigpIGlzIHRoZSBwcml2X2Rlc3RydWN0b3IgYW5kIHRoZXJlZm9yZQomIzQzOyAqIHJ1bnMgZnJvbSBuZXRkZXZfcnVuX3RvZG8oKSwgd2hpY2ggZGVsaWJlcmF0ZWx5IGRyb3BzIHRoZSBSVE5MIHNlbWFwaG9yZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHNsaXBfZGV2c19sb2NrKTsKJiM0MzsKIHN0YXRpYyBpbnQgc2xpcF9tYXhkZXYgPSBTTF9OUlVOSVQ7CiBtb2R1bGVfcGFyYW0oc2xpcF9tYXhkZXYsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNsaXBfbWF4ZGV2LCAmIzM0O01heGltdW0gbnVtYmVyIG9mIHNsaXAgZGV2aWNlcyYjMzQ7KTsKQEAgLTYzNSw3ICYjNDM7NjQxLDEzIEBAIHN0YXRpYyB2b2lkIHNsX2ZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGkgPSBkZXYtJmd0O2Jhc2VfYWRkcjsKIAotCXNsaXBfZGV2c1tpXSA9IE5VTEw7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiYjNDM7CS8qIE9ubHkgZHJvcCBvdXIgb3duIGVudHJ5OiB0aGUgc2xvdCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gcmV1c2VkIGJ5CiYjNDM7CSAqIHNsX2FsbG9jKCkgZm9yIGEgZGlmZmVyZW50IGNoYW5uZWwuCiYjNDM7CSAqLwomIzQzOwlpZiAoc2xpcF9kZXZzW2ldID09IGRldikKJiM0MzsJCXNsaXBfZGV2c1tpXSA9IE5VTEw7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3NsaXBfZGV2c19sb2NrKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzbF9uZXRkZXZfb3BzID0gewpAQCAtNzI1LDYgJiM0Mzs3MzcsNyBAQCBzdGF0aWMgdm9pZCBzbF9zeW5jKHZvaWQpCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2xpcAkgICpzbDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCWZvciAoaSA9IDA7IGkgJmx0OyBzbGlwX21heGRldjsgaSYjNDM7JiM0MzspIHsKIAkJZGV2ID0gc2xpcF9kZXZzW2ldOwogCQlpZiAoZGV2ID09IE5VTEwpCkBAIC03MzYsNiAmIzQzOzc0OSw3IEBAIHN0YXRpYyB2b2lkIHNsX3N5bmModm9pZCkKIAkJaWYgKGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1VQKQogCQkJZGV2X2Nsb3NlKGRldik7CiAJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiB9CiAKIApAQCAtNzQ3LDE5ICYjNDM7NzYxLDI0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZCkKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3Qgc2xpcCAgICAgICAqc2w7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3NsaXBfZGV2c19sb2NrKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7CiAJCWRldiA9IHNsaXBfZGV2c1tpXTsKIAkJaWYgKGRldiA9PSBOVUxMKQogCQkJYnJlYWs7CiAJfQogCS8qIFNvcnJ5LCB0b28gbWFueSwgYWxsIHNsb3RzIGluIHVzZSAqLwotCWlmIChpICZndDs9IHNsaXBfbWF4ZGV2KQomIzQzOwlpZiAoaSAmZ3Q7PSBzbGlwX21heGRldikgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCQlyZXR1cm4gTlVMTDsKJiM0MzsJfQogCiAJc3ByaW50ZihuYW1lLCAmIzM0O3NsJWQmIzM0OywgaSk7CiAJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqc2wpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLCBzbF9zZXR1cCk7Ci0JaWYgKCFkZXYpCiYjNDM7CWlmICghZGV2KSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJCXJldHVybiBOVUxMOwomIzQzOwl9CiAKIAlkZXYtJmd0O2Jhc2VfYWRkciAgPSBpOwogCXNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTc3Niw2ICYjNDM7Nzk1LDcgQEAgc3RhdGljIHN0cnVjdCBzbGlwICpzbF9hbGxvYyh2b2lkKQogCXRpbWVyX3NldHVwKCZhbXA7c2wtJmd0O291dGZpbGxfdGltZXIsIHNsX291dGZpbGwsIDApOwogI2VuZGlmCiAJc2xpcF9kZXZzW2ldID0gZGV2OwomIzQzOwltdXRleF91bmxvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJcmV0dXJuIHNsOwogfQogCkBAIC0xMzMyLDYgJiM0MzsxMzUyLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKQogCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsKIAogCQlidXN5ID0gMDsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBzbGlwX21heGRldjsgaSYjNDM7JiM0MzspIHsKIAkJCWRldiA9IHNsaXBfZGV2c1tpXTsKIAkJCWlmICghZGV2KQpAQCAtMTM0NCwxNiAmIzQzOzEzNjUsMTkgQEAgc3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKQogCQkJfQogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzbC0mZ3Q7bG9jayk7CiAJCX0KJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3NsaXBfZGV2c19sb2NrKTsKIAl9IHdoaWxlIChidXN5ICZhbXA7JmFtcDsgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOwogCiAJLyogRklYTUU6IGhhbmd1cCBpcyBhc3luYyBzbyB3ZSBzaG91bGQgd2FpdCB3aGVuIGRvaW5nIHRoaXMgc2Vjb25kCiAJICAgcGhhc2UgKi8KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBzbGlwX21heGRldjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJCWRldiA9IHNsaXBfZGV2c1tpXTsKJiM0MzsJCXNsaXBfZGV2c1tpXSA9IE5VTEw7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJCWlmICghZGV2KQogCQkJY29udGludWU7Ci0JCXNsaXBfZGV2c1tpXSA9IE5VTEw7CiAKIAkJc2wgPSBuZXRkZXZfcHJpdihkZXYpOwogCQlpZiAoc2wtJmd0O3R0eSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgRGV2aWNlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYGRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jYC4gU2VlbXMgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIG11dGV4LCBgc2xpcF9kZXZzX2xvY2tgLCB0byBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGBzbGlwX2RldnNbXWAgYXJyYXkuIFNtYXJ0IG1vdmUsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHBvaW50IG9mIHBvdGVudGlhbCBjb250ZW50aW9uLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgc2xfZnJlZV9uZXRkZXZgLCBgc2xfc3luY2AsIGBzbF9hbGxvY2AsIGFuZCBgc2xpcF9leGl0YCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgY29tcG9uZW50IGlzIGV2ZW4gYWN0aXZlbHkgdXNlZCwgb3IgaWYgdGhpcyBjaGFuZ2UgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZXRlcm1pbmUgaXRzIGZ1enphYmlsaXR5IG9yIHJlYWNoYWJpbGl0eS4gU0xJUC4uLiByaWdodCwgU2VyaWFsIExpbmUgSW50ZXJuZXQgUHJvdG9jb2wuIENsYXNzaWMuIEl0IGNhbiBiZSBhdHRhY2hlZCB0byBhIHB0eSB1c2luZyBgVElPQ1NFVERgIHdpdGggYE5fU0xJUGAuIEhtbSwgcHR5Li4uIHRoYXQgbWVhbnMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFyZSBkZWZpbml0ZWx5IGluIHBsYXkuIFRoYXQmIzM5O3MgYSBnb29kIGF0dGFjayBzdXJmYWNlLiBTbywgdGhlcmUgaXMgYSBnb29kIGNoYW5jZSB0aGF0IFNMSVAgaXMgcmVhY2hhYmxlLgoKTm93LCBsZXQgbWUgbG9vayBhdCB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUuIFdoZXJlIGlzIGl0IGVuYWJsZWQ/IEkmIzM5O2xsIHByb2JhYmx5IGZpbmQgYGRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZ2Agb3Igc2ltaWxhci4gSSYjMzk7bGwgc2VhcmNoIGZvciBgc2xpcC5jYCBpbiBgZHJpdmVycy9uZXQvc2xpcC9NYWtlZmlsZWAgYW5kIHNlZSBob3cgaXQgaXMgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG1vZHVsZSBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsaXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3NsaXAvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvc2xpcC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19TTElQKSAmIzQzOz0gc2xpcC5vXG5kcml2ZXJzL25ldC9zbGlwL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1NMSEMpICYjNDM7PSBzbGhjLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjY4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFNMSVAgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKCkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYENPTkZJR19TTElQYC4gUmlnaHQsIHNvIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBUaGF0IHdvdWxkIGJlIGBkcml2ZXJzL25ldC9zbGlwL0tjb25maWdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMsIGxpa2Ugc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIG9yIHJlbGF0ZWQgbmV0d29ya2luZyBmZWF0dXJlcyB0aGF0IHRoaXMgYFNMSVBgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHRpZWQgdG8uIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgcXVpY2tseSBhc3Nlc3MgdGhlIGJyb2FkZXIgaW1wYWN0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBvbiB0aGUgb3ZlcmFsbCBidWlsZCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhZHZhbnRhZ2VzIGl0IG1pZ2h0IGludHJvZHVjZS4gVGltZSB0byBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNMSVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6Njpjb25maWcgU0xJUFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtTTElQIChzZXJpYWwgbGluZSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZz00Mz1pZiBTTElQXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NDU6Y29uZmlnIFNMSVBfQ09NUFJFU1NFRFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtDU0xJUCBjb21wcmVzc2VkIGhlYWRlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNjAtXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NjE6Y29uZmlnIFNMSVBfU01BUlRcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7S2VlcGFsaXZlIGFuZCBsaW5lZmlsbFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy02OC1cbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo2OTpjb25maWcgU0xJUF9NT0RFX1NMSVA2XG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNzAtXHRib29sIFwmIzM0O1NpeCBiaXQgU0xJUCBlbmNhcHN1bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIFNMSVAmIzM5O3MgRm91bmRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiBTTElQLiBCZWZvcmUgZGl2aW5nIGluLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZm91bmRhdGlvbi4gU3BlY2lmaWNhbGx5LCB3aGF0IGFyZSB0aGUgY29yZSBkZXBlbmRlbmNpZXMgdGhpcyB0aGluZyBpcyBidWlsdCB1cG9uPyBXZSBjYW4mIzM5O3QgbWVhbmluZ2Z1bGx5IGV2YWx1YXRlIG9yIHRyb3VibGVzaG9vdCB3aXRob3V0IGtub3dpbmcgd2hhdCBTTElQIHJlbGllcyBvbi4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgYWxzbyBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgZGVzaWduIGFuZCBwb3RlbnRpYWwgd2Vha25lc3Nlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZz02PWNvbmZpZyBTTElQXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1NMSVAgKHNlcmlhbCBsaW5lKSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6ODpcdGRlcGVuZHMgb24gVFRZXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctOS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc9NDU9Y29uZmlnIFNMSVBfQ09NUFJFU1NFRFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtDU0xJUCBjb21wcmVzc2VkIGhlYWRlcnNcJiMzNDtcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo0NzpcdGRlcGVuZHMgb24gU0xJUFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTQ4LVx0c2VsZWN0IFNMSENcbi0tXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc9NjE9Y29uZmlnIFNMSVBfU01BUlRcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7S2VlcGFsaXZlIGFuZCBsaW5lZmlsbFwmIzM0O1xuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBTTElQXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNjQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnPTY5PWNvbmZpZyBTTElQX01PREVfU0xJUDZcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7U2l4IGJpdCBTTElQIGVuY2Fwc3VsYXRpb25cJiMzNDtcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo3MTpcdGRlcGVuZHMgb24gU0xJUFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTcyLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1ODcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTElQIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBgQ09ORklHX1NMSVBgIG9wdGlvbiByZWxpZXMgb24gYFRUWWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBtdXRleCwgYHNsaXBfZGV2c19sb2NrYCwgdG8gc2FmZWd1YXJkIGFjY2VzcyB0byB0aGUgYHNsaXBfZGV2c2AgYXJyYXkuIFRoYXQmIzM5O3MgYSBzdGFuZGFyZCBwYXR0ZXJuIGZvciBjb25jdXJyZW50IGFjY2VzcywgZ29vZCB0byBzZWUuIFRoZSBmdW5jdGlvbnMgdGhleSYjMzk7dmUgdG91Y2hlZCBhcmUgYHNsX2ZyZWVfbmV0ZGV2YCwgYHNsX3N5bmNgLCBgc2xfYWxsb2NgLCBhbmQgYHNsaXBfZXhpdGAuCgpOb3csIGBzbF9hbGxvY2AgaXMgY2FsbGVkIHdoZW4gYSBTZXJpYWwgTGluZSBJbnRlcm5ldCBQcm90b2NvbCAoU0xJUCkgbGluZSBkaXNjaXBsaW5lIGlzIGF0dGFjaGVkLCBhbmQgdGhhdCYjMzk7cyB0aGUgaW50ZXJlc3Rpbmcgb25lIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCB2ZXJpZnkgZXhhY3RseSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIGNvbnRleHQuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgbmV3IGxvY2sgaW50ZXJhY3RzIHdpdGggdGhvc2UgY2FsbCBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2xfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz0xMTg9c3RhdGljIGludCBzbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCB2b2lkIF9fdXNlciAqZGF0YSwgaW50IGNtZCk7XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTIyLSogIEJ1ZmZlciBhZG1pbmlzdHJhdGlvbiByb3V0aW5lczpcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEyMzoqXHRzbF9hbGxvY19idWZzKClcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNC0qXHRzbF9mcmVlX2J1ZnMoKVxuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyNi0qXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzoxMjc6KiBOT1RFOiBzbF9yZWFsbG9jX2J1ZnMgIT0gc2xfZnJlZV9idWZzICYjNDM7IHNsX2FsbG9jX2J1ZnMsIGJlY2F1c2VcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyOC0qXHRzbF9yZWFsbG9jX2J1ZnMgcHJvdmlkZXMgc3Ryb25nIGF0b21pY2l0eSBhbmQgcmVhbGxvY2F0aW9uXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTM1LVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6MTM2OnN0YXRpYyBpbnQgc2xfYWxsb2NfYnVmcyhzdHJ1Y3Qgc2xpcCAqc2wsIGludCBtdHUpXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMzcte1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTY0MD1zdGF0aWMgdm9pZCBzbF9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTY0NS1cdC8qIE9ubHkgZHJvcCBvdXIgb3duIGVudHJ5OiB0aGUgc2xvdCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gcmV1c2VkIGJ5XG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo2NDY6XHQgKiBzbF9hbGxvYygpIGZvciBhIGRpZmZlcmVudCBjaGFubmVsLlxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNjQ3LVx0ICovXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzM0PXN0YXRpYyB2b2lkIHNsX3N5bmModm9pZClcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03NTYtLyogRmluZCBhIGZyZWUgU0xJUCBjaGFubmVsLCBhbmQgbGluayBpbiB0aGlzIGB0dHkmIzM5OyBsaW5lLiAqL1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NzU3OnN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTc1OC17XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9ODEyPXN0YXRpYyBpbnQgc2xpcF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtODQwLVx0ZXJyID0gLUVORklMRTtcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjg0MTpcdHNsID0gc2xfYWxsb2MoKTtcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg0Mi1cdGlmIChzbCA9PSBOVUxMKVxuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg1MC1cdFx0LyogUGVyZm9ybSB0aGUgbG93LWxldmVsIFNMSVAgaW5pdGlhbGl6YXRpb24uICovXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4NTE6XHRcdGVyciA9IHNsX2FsbG9jX2J1ZnMoc2wsIFNMX01UVSk7XG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy04NTItXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIExpbmUgRGlzY2lwbGluZSYjMzk7cyBMaWZlY3ljbGUqKgoKT2theSwgc28gYHNsX2FsbG9jYCBpcyBkZWZpbml0ZWx5IGdldHRpbmcgY2FsbGVkIGZyb20gYHNsaXBfb3BlbmAuIFRoYXQmIzM5O3MgdGhlIGtleS4gQW5kIGBzbGlwX29wZW5gIGlzLCBvZiBjb3Vyc2UsIHRoZSBgb3BlbmAgbWV0aG9kIGZvciB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBwb2ludCBvZiBlbnRyeSB3aGVuIGEgZGV2aWNlIGlzIGJlaW5nIGJyb3VnaHQgdXAgd2l0aCBTTElQLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRob3NlIGVudHJ5IHBvaW50czogbGV0IG1lIGNoZWNrIGJvdGggYHNsaXBfb3BlbmAgKmFuZCogYHNsaXBfY2xvc2VgLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSBvZiBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gdG8gYmUgY2VydGFpbiB0aGF0IHRoZXJlIGlzbiYjMzk7dCBhIHJhY2UgY29uZGl0aW9uLCBvciBhIG1lbW9yeSBsZWFrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbGlwX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz03MDA9c3RhdGljIHZvaWQgc2xpcF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqY3AsIGNvbnN0IHU4ICpmcCxcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03MjktLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NzMwOiAqICBzbGlwX29wZW4gaGVscGVyIHJvdXRpbmVzLlxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNzMxLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzU3PXN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy04MTEtXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4MTI6c3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTgxMy17XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9MTI5Mj1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xfbGRpc2MgPSB7XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI5NS1cdC5uYW1lIFx0XHQ9IFwmIzM0O3NsaXBcJiMzNDssXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzoxMjk2Olx0Lm9wZW4gXHRcdD0gc2xpcF9vcGVuLFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI5Ny1cdC5jbG9zZVx0IFx0PSBzbGlwX2Nsb3NlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTE1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvbmN1cnJlbmN5IEZpeCBmb3IgdGhlIFNMSVAgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgU0xJUCBkcml2ZXIuIFRoZSBlbnRyeSBwb2ludCBoZXJlIGlzIGBzbGlwX29wZW5gLCBhbmQgdGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgYSByYWNlIGNvbmRpdGlvbi4gSXQgbG9va3MgbGlrZSBgc2xfZnJlZV9uZXRkZXZgLCB3aGljaCBhY3RzIGFzIHRoZSBkZXN0cnVjdG9yIGZvciB0aGUgbmV0d29yayBkZXZpY2UgKGBuZXRfZGV2aWNlYCksIGlzIGJlaW5nIGNhbGxlZCBhc3luY2hyb25vdXNseSBmcm9tIGBuZXRkZXZfcnVuX3RvZG8oKWAuIFRoaXMgY2F1c2VzIGEgcHJvYmxlbSBiZWNhdXNlIGl0IHJlbGVhc2VzIHRoZSBSVE5MIHNlbWFwaG9yZSwgYW5kIHRoaXMgb3BlbnMgdXAgYSB3aW5kb3cgZm9yIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBgc2xpcF9kZXZzW11gIGFycmF5LiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjb25jdXJyZW5jeSBidWcsIGEgZGVmaW5pdGUgcG90ZW50aWFsIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIGEgZmV3IGtleSBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuIExldCYjMzk7cyBsb29rIGF0IGBzbGlwX29wZW5gLCBgc2xpcF9jbG9zZWAsIGBzbF9mcmVlX25ldGRldmAsIGFuZCBgc2xfYWxsb2NgLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0LiBgc2xfZnJlZV9uZXRkZXZgIGlzIGRlZmluaXRlbHkgc3RhdGljLCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gYHNsaXBfb3BlbmAgYW5kIGBzbGlwX2Nsb3NlYCBhcmUgYWxzbyBzdGF0aWMsIGJ1dCB0aGV5JiMzOTtyZSBwYXJ0IG9mIHRoZSBsaW5lIGRpc2NpcGxpbmUgb3BlcmF0aW9ucy4gV2FpdCBhIG1pbnV0ZSwgYnV0IGBzbGlwX29wZW5gIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIENhbiBJIHVzZSBpdCBhcyBhIGZvY3VzIHN5bWJvbD8gWWVzLCBJIGNhbiB1c2Ugc3RhdGljIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzIGlmIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLiBBbmQgc2luY2UgYHNsaXBfb3BlbmAgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIGBzbF9hbGxvY2AgaXMgc3RhdGljIGFuZCBjYWxsZWQgZnJvbSBgc2xpcF9vcGVuYC4gSSYjMzk7bSBnb2luZyB0byBndWVzcyBpdCAqbWlnaHQqIGJlIGlubGluZWQsIGJ1dCB0aGUgZnVuY3Rpb24mIzM5O3Mgc2l6ZSBtaWdodCBtYWtlIHRoYXQgdW5saWtlbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBzbF9mcmVlX25ldGRldmAgYSBsaXR0bGUgY2xvc2VyLiBPa2F5LCBpdCYjMzk7cyBwYXNzZWQgYXMgYGRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yID0gc2xfZnJlZV9uZXRkZXY7YCBpbiBgc2xfc2V0dXBgLiBUaGF0IGNvbmZpcm1zIHRoYXQgaXQgaXNuJiMzOTt0IGlubGluZWQsIHNvIGl0JiMzOTtzIGEgZ29vZCBmb2N1cy4KCkkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBzbF9zZXR1cGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsX3NldHVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NjUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2xfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy02NjctXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo2Njg6c3RhdGljIHZvaWQgc2xfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTY2OS17XG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzU3PXN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03NzYtXHRzcHJpbnRmKG5hbWUsIFwmIzM0O3NsJWRcJiMzNDssIGkpO1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6Nzc3Olx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqc2wpLCBuYW1lLCBORVRfTkFNRV9VTktOT1dOLCBzbF9zZXR1cCk7XG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03NzgtXHRpZiAoIWRldikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTE1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqVmVyaWZ5aW5nIE5ldHdvcmsgRGV2aWNlIERlc3RydWN0b3IgQXNzaWdubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRvdWJsZS1jaGVja2luZyB0aGUgbmV0d29yayBkZXZpY2UgdGVhcmRvd24gc2VxdWVuY2UgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGVuc3VyZSB0aGF0IHJlc291cmNlcyBhcmUgcmVsZWFzZWQgcHJvcGVybHkgd2hlbiBhIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQgb3IgZ29lcyBvZmZsaW5lLiBMZXQmIzM5O3Mgc2VlLi4uIFllcCwgdGhhdCYjMzk7cyBpdC4gSW4gYHNsX3NldHVwYCwgdGhlIGBzbF9mcmVlX25ldGRldmAgZnVuY3Rpb24gaXMgY29ycmVjdGx5IGJlaW5nIGFzc2lnbmVkIHRvIGBkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvcmAuIFRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoZXJlIGl0IHNob3VsZCBiZS4gVGhlIGRlc3RydWN0b3IgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgYW55IGRyaXZlci1zcGVjaWZpYyBwcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXR3b3JrIGRldmljZSAoYGRldmApLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgc3RlcCBhbmQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbmZpcm0gaXMgaGFuZGxlZCBwcm9wZXJseSB3aGVuIHJldmlld2luZyBuZXR3b3JrIGRldmljZSBzZXR1cCBhbmQgdGVhcmRvd24uIFRoaXMgbG9va3MgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByaXZfZGVzdHJ1Y3RvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTk3PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqKnNsaXBfZGV2cztcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy05OS0vKiBTZXJpYWxpc2VzIGFjY2VzcyB0byBzbGlwX2RldnNbXSBhbmQgdG8gdGhlIHNsaXAgY2hhbm5lbHMgaXQgcG9pbnRzIGF0LlxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6MTAwOiAqIFJUTkwgaXMgbm90IGVub3VnaDogc2xfZnJlZV9uZXRkZXYoKSBpcyB0aGUgcHJpdl9kZXN0cnVjdG9yIGFuZCB0aGVyZWZvcmVcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEwMS0gKiBydW5zIGZyb20gbmV0ZGV2X3J1bl90b2RvKCksIHdoaWNoIGRlbGliZXJhdGVseSBkcm9wcyB0aGUgUlROTCBzZW1hcGhvcmUuXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NjY4PXN0YXRpYyB2b2lkIHNsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNjcxLVx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2XHQ9IHRydWU7XG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo2NzI6XHRkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yXHQ9IHNsX2ZyZWVfbmV0ZGV2O1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNjczLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTkwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgc2xfZnJlZV9uZXRkZXZgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzbF9mcmVlX25ldGRldmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBpdCYjMzk7cyAqbm90KiBpbmxpbmVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3MgdHJhY2UgaXRzIHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRocyBhbmQgc2VlIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHNsaXBfZXhpdGAuIFRoYXQmIzM5O3MgdGhlIG1vZHVsZSBleGl0IGZ1bmN0aW9uLCByaWdodD8gUmlnaHQsIGFuZCBJIGtub3cgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSBmb2N1cyBvbiBmdXp6aW5nIHRoZSBtb2R1bGUgdW5sb2FkaW5nIHBhdGguIEl04oCZcyBwcmV0dHkgcmFyZS4gU28sIGluIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGNvbnRleHQsIGBzbGlwX2V4aXRgIGlzIGxpa2VseSB1bnJlYWNoYWJsZSwgd2hpY2ggbWVhbnMgYW55dGhpbmcgY2FsbGVkIGZyb20gaXQgd29uJiMzOTt0IGJlIHRyaWdnZXJlZCwgbm9ybWFsbHkuIExldCYjMzk7cyBzZWUuLi4gQWhhISBgc2xfc3luY2AgaXMgY2FsbGVkIGZyb20gYHNsaXBfZXhpdGAuIFNvLCB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywgYHNsX3N5bmNgIHByb2JhYmx5IGlzbiYjMzk7dCBhIGxpa2VseSBmdXp6IHRhcmdldCBlaXRoZXIuIEkmIzM5O2xsIG1ha2UgYSBtZW50YWwgbm90ZSwgYmVjYXVzZSB0aGF0IG1lYW5zIHRoYXQgSSBzaG91bGQgY2hlY2sgdGhlIGVkZ2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsX3N5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz03MDA9c3RhdGljIHZvaWQgc2xpcF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqY3AsIGNvbnN0IHU4ICpmcCxcbi0tXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03MzMtLyogQ29sbGVjdCBoYW5nZWQgdXAgY2hhbm5lbHMgKi9cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjczNDpzdGF0aWMgdm9pZCBzbF9zeW5jKHZvaWQpXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03MzUte1xuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTgxMj1zdGF0aWMgaW50IHNsaXBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuLS1cbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTgyOS1cdC8qIENvbGxlY3QgaGFuZ2VkIHVwIGNoYW5uZWxzLiAqL1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6ODMwOlx0c2xfc3luYygpO1xuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtODMxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI2CgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU0xJUCBMaW5lIERpc2NpcGxpbmUgRHJpdmVyIEZpeCoqCgpPa2F5LCBzbyBgc2xfc3luY2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgc2xpcF9vcGVuYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYWNjZXNzaWJsZSBhbmQgcmVsZXZhbnQgdG8gbXkgYW5hbHlzaXMuIEkgbmVlZCB0byBrZWVwIHRob3NlIGNvbm5lY3Rpb25zIGluIG1pbmQuIE15IGZvY3VzIHJpZ2h0IG5vdyBuZWVkcyB0byBiZSBvbiB0aGVzZSBrZXkgc3ltYm9sczogYHNsaXBfb3BlbmAsIGBzbGlwX2Nsb3NlYCwgYHNsX2ZyZWVfbmV0ZGV2YCwgYHNsX3N5bmNgLCBhbmQgYHNsX2FsbG9jYC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSBvZiB0aGluZ3MuIEkgc2VlIGBTTElQYCBpcyBpbnZvbHZlZC4gSSBrbm93IHRoYXQgYFNMSVBgIGRlcGVuZHMgb24gYFRUWWAsIGFuZCBgVFRZYCBpcyBwcmV0dHkgc3RhbmRhcmQgYW5kIHVzdWFsbHkgZW5hYmxlZC4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCBgU0xJUGAgZG9lc24mIzM5O3QgaGF2ZSBhbnkgKm90aGVyKiBkZXBlbmRlbmNpZXMsIGJ1dCBiYXNlZCBvbiBteSBrbm93bGVkZ2UsIEkmIzM5O20gbm90IGV4cGVjdGluZyBhbnkgc3VycHJpc2VzIHRoZXJlLiBOb3BlLCBqdXN0IGBUVFlgLgoKTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBzbGlwX29wZW5gIGlzLCBhcyBJIHN1c3BlY3QsIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIHRoaXMgY29kZSwgYW5kIGl0IGlzIHRoZSBsZGlzYyBvcGVuLgoKQW5kIGBzbGlwX2Nsb3NlYCBzZWVtcyBzaW1pbGFybHkgcmVhY2hhYmxlLCB0cmlnZ2VyZWQgd2hlbiB0aGUgbGRpc2MgaXMgY2xvc2VkLgoKQWxyaWdodCwgYmFzZWQgb24gdGhpcywgSSYjMzk7bSBnb2luZyB0byBzZXQgc29tZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnV6emVyLiBJIG5lZWQgdG8gbWFyayB0aGlzIGFzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgYmVjYXVzZSBpdCBjbGVhcmx5IGludm9sdmVzIGNvbmN1cnJlbmN5LiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNvbmZpcm1lZDogYFsmIzM0O3NsaXBfb3BlbiYjMzQ7LCAmIzM0O3NsaXBfY2xvc2UmIzM0OywgJiMzNDtzbF9mcmVlX25ldGRldiYjMzQ7LCAmIzM0O3NsX3N5bmMmIzM0OywgJiMzNDtzbF9hbGxvYyYjMzQ7XWAuIEFuZCBJIG5lZWQgdG8gZW5hYmxlIHRoZSBgU0xJUGAgY29uZmlndXJhdGlvbi4KCk15IHJlYXNvbmluZz8gVGhpcyBwYXRjaCBpcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyLiBJdCYjMzk7cyB1c2luZyBhIG11dGV4IHRvIHByb3RlY3QgdGhlIGBzbGlwX2RldnNgIGFycmF5LCB3aGljaCBpbmRpY2F0ZXMgdGhlIHJhY2UgaXMgbGlrZWx5IGJldHdlZW4gYHNsX2ZyZWVfbmV0ZGV2YCAod2hpY2ggcnVucyBhc3luY2hyb25vdXNseSBmcm9tIGBuZXRkZXZfcnVuX3RvZG9gKSBhbmQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHNsX2FsbG9jYCBhbmQgYHNsX3N5bmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjb25jdXJyZW5jeSBmaXggYW5kIGludm9sdmVzIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBjb2RlIHRoYXQgaXMgd29ydGggZXhwbG9yaW5nIGZvciB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTElQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2xpcF9vcGVuJiMzNDssCiAgICAmIzM0O3NsaXBfY2xvc2UmIzM0OywKICAgICYjMzQ7c2xfZnJlZV9uZXRkZXYmIzM0OywKICAgICYjMzQ7c2xfc3luYyYjMzQ7LAogICAgJiMzNDtzbF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBTTElQIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIgYnkgaW50cm9kdWNpbmcgYSBtdXRleCB0byBwcm90ZWN0IHRoZSBgc2xpcF9kZXZzYCBhcnJheS4gVGhlIHJhY2Ugb2NjdXJzIGJldHdlZW4gYHNsX2ZyZWVfbmV0ZGV2YCAocnVubmluZyBhc3luY2hyb25vdXNseSBmcm9tIGBuZXRkZXZfcnVuX3RvZG9gKSBhbmQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHNsX2FsbG9jYCBhbmQgYHNsX3N5bmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjb25jdXJyZW5jeSBmaXggaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NMSVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbGlwX29wZW4mIzM0OywKICAgICYjMzQ7c2xpcF9jbG9zZSYjMzQ7LAogICAgJiMzNDtzbF9mcmVlX25ldGRldiYjMzQ7LAogICAgJiMzNDtzbF9zeW5jJiMzNDssCiAgICAmIzM0O3NsX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lIGRyaXZlciBieSBpbnRyb2R1Y2luZyBhIG11dGV4IHRvIHByb3RlY3QgdGhlIGBzbGlwX2RldnNgIGFycmF5LiBUaGUgcmFjZSBvY2N1cnMgYmV0d2VlbiBgc2xfZnJlZV9uZXRkZXZgIChydW5uaW5nIGFzeW5jaHJvbm91c2x5IGZyb20gYG5ldGRldl9ydW5fdG9kb2ApIGFuZCBvdGhlciBmdW5jdGlvbnMgbGlrZSBgc2xfYWxsb2NgIGFuZCBgc2xfc3luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNvbmN1cnJlbmN5IGZpeCBpbiByZWFjaGFibGUgY29yZSBkcml2ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDg6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbXV0ZXggKGBzbGlwX2RldnNfbG9ja2ApIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGBzbGlwX2RldnNgIGFycmF5IGluIHRoZSBzbGlwIGRyaXZlci4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCBhaW1lZCBhdCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJmODczOTNjOWFiMzkxZmJiOGRiMGJiZDBlYmY5MWIwYTM2MDhhN2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAwODowNjo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMKaW5kZXggZmFhZTcxMWNmNzkzZC4uNWNkYWU5ODMxZjA4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMKQEAgLTk2LDYgJiM0Mzs5NiwxMiBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKipzbGlwX2RldnM7CiAKJiM0MzsvKiBTZXJpYWxpc2VzIGFjY2VzcyB0byBzbGlwX2RldnNbXSBhbmQgdG8gdGhlIHNsaXAgY2hhbm5lbHMgaXQgcG9pbnRzIGF0LgomIzQzOyAqIFJUTkwgaXMgbm90IGVub3VnaDogc2xfZnJlZV9uZXRkZXYoKSBpcyB0aGUgcHJpdl9kZXN0cnVjdG9yIGFuZCB0aGVyZWZvcmUKJiM0MzsgKiBydW5zIGZyb20gbmV0ZGV2X3J1bl90b2RvKCksIHdoaWNoIGRlbGliZXJhdGVseSBkcm9wcyB0aGUgUlROTCBzZW1hcGhvcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIERFRklORV9NVVRFWChzbGlwX2RldnNfbG9jayk7CiYjNDM7CiBzdGF0aWMgaW50IHNsaXBfbWF4ZGV2ID0gU0xfTlJVTklUOwogbW9kdWxlX3BhcmFtKHNsaXBfbWF4ZGV2LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhzbGlwX21heGRldiwgJiMzNDtNYXhpbXVtIG51bWJlciBvZiBzbGlwIGRldmljZXMmIzM0Oyk7CkBAIC02MzUsNyAmIzQzOzY0MSwxMyBAQCBzdGF0aWMgdm9pZCBzbF9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBpID0gZGV2LSZndDtiYXNlX2FkZHI7CiAKLQlzbGlwX2RldnNbaV0gPSBOVUxMOwomIzQzOwltdXRleF9sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwomIzQzOwkvKiBPbmx5IGRyb3Agb3VyIG93biBlbnRyeTogdGhlIHNsb3QgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIHJldXNlZCBieQomIzQzOwkgKiBzbF9hbGxvYygpIGZvciBhIGRpZmZlcmVudCBjaGFubmVsLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNsaXBfZGV2c1tpXSA9PSBkZXYpCiYjNDM7CQlzbGlwX2RldnNbaV0gPSBOVUxMOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2xfbmV0ZGV2X29wcyA9IHsKQEAgLTcyNSw2ICYjNDM7NzM3LDcgQEAgc3RhdGljIHZvaWQgc2xfc3luYyh2b2lkKQogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNsaXAJICAqc2w7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3NsaXBfZGV2c19sb2NrKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7CiAJCWRldiA9IHNsaXBfZGV2c1tpXTsKIAkJaWYgKGRldiA9PSBOVUxMKQpAQCAtNzM2LDYgJiM0Mzs3NDksNyBAQCBzdGF0aWMgdm9pZCBzbF9zeW5jKHZvaWQpCiAJCWlmIChkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkKIAkJCWRldl9jbG9zZShkZXYpOwogCX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogfQogCiAKQEAgLTc0NywxOSAmIzQzOzc2MSwyNCBAQCBzdGF0aWMgc3RydWN0IHNsaXAgKnNsX2FsbG9jKHZvaWQpCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJc3RydWN0IHNsaXAgICAgICAgKnNsOwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IHNsaXBfbWF4ZGV2OyBpJiM0MzsmIzQzOykgewogCQlkZXYgPSBzbGlwX2RldnNbaV07CiAJCWlmIChkZXYgPT0gTlVMTCkKIAkJCWJyZWFrOwogCX0KIAkvKiBTb3JyeSwgdG9vIG1hbnksIGFsbCBzbG90cyBpbiB1c2UgKi8KLQlpZiAoaSAmZ3Q7PSBzbGlwX21heGRldikKJiM0MzsJaWYgKGkgJmd0Oz0gc2xpcF9tYXhkZXYpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3NsaXBfZGV2c19sb2NrKTsKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCXNwcmludGYobmFtZSwgJiMzNDtzbCVkJiMzNDssIGkpOwogCWRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnNsKSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgc2xfc2V0dXApOwotCWlmICghZGV2KQomIzQzOwlpZiAoIWRldikgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCQlyZXR1cm4gTlVMTDsKJiM0MzsJfQogCiAJZGV2LSZndDtiYXNlX2FkZHIgID0gaTsKIAlzbCA9IG5ldGRldl9wcml2KGRldik7CkBAIC03NzYsNiAmIzQzOzc5NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZCkKIAl0aW1lcl9zZXR1cCgmYW1wO3NsLSZndDtvdXRmaWxsX3RpbWVyLCBzbF9vdXRmaWxsLCAwKTsKICNlbmRpZgogCXNsaXBfZGV2c1tpXSA9IGRldjsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCXJldHVybiBzbDsKIH0KIApAQCAtMTMzMiw2ICYjNDM7MTM1Miw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBzbGlwX2V4aXQodm9pZCkKIAkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7CiAKIAkJYnVzeSA9IDA7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7CiAJCQlkZXYgPSBzbGlwX2RldnNbaV07CiAJCQlpZiAoIWRldikKQEAgLTEzNDQsMTYgJiM0MzsxMzY1LDE5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBzbGlwX2V4aXQodm9pZCkKIAkJCX0KIAkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2wtJmd0O2xvY2spOwogCQl9CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtzbGlwX2RldnNfbG9jayk7CiAJfSB3aGlsZSAoYnVzeSAmYW1wOyZhbXA7IHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTsKIAogCS8qIEZJWE1FOiBoYW5ndXAgaXMgYXN5bmMgc28gd2Ugc2hvdWxkIHdhaXQgd2hlbiBkb2luZyB0aGlzIHNlY29uZAogCSAgIHBoYXNlICovCiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2xpcF9tYXhkZXY7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCQlkZXYgPSBzbGlwX2RldnNbaV07CiYjNDM7CQlzbGlwX2RldnNbaV0gPSBOVUxMOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7c2xpcF9kZXZzX2xvY2spOwogCQlpZiAoIWRldikKIAkJCWNvbnRpbnVlOwotCQlzbGlwX2RldnNbaV0gPSBOVUxMOwogCiAJCXNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJaWYgKHNsLSZndDt0dHkpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA4OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzMKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbmN1cnJlbmN5IEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBtdXRleCwgYHNsaXBfZGV2c19sb2NrYCwgdG8gc2FmZWx5IG1hbmFnZSBhY2Nlc3MgdG8gdGhlIGBzbGlwX2RldnNgIGFycmF5IGFuZCB0aGUgU0xJUCBjaGFubmVscyB3aXRoaW4gaXQuIFRoaXMgaXMgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlIG1pdGlnYXRpb24sIGltbWVkaWF0ZWx5IHNpZ25hbGluZyBhIHJhY2UgY29uZGl0aW9uIGZpeC4gSXQmIzM5O3MgdGFyZ2V0aW5nIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGRvdWJsZSBmcmVlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgbmFzdHkgY29uY3VycmVuY3ktcmVsYXRlZCBidWdzLiBFeGNlbGxlbnQuCgpDcnVjaWFsbHksIGZyb20gYSBzZWN1cml0eSBzdGFuZHBvaW50LCBJIHNlZSBubyBpbmRpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIGhlcmUsIHNvIHRoYXQmIzM5O3MgZ29vZC4gV2UgYXJlbiYjMzk7dCB3b3JyaWVkIGFib3V0IEtNU0FOIGluIHRoaXMgY2FzZSAtIEtBU0FOIGFuZCBMT0NLREVQIGFyZSB0aGUgYXBwcm9wcmlhdGUgdG9vbHMgdG8gYmUgdXNpbmcgdG8gY2hlY2sgZm9yIHRoZSB0eXBlcyBvZiBpc3N1ZXMgaXQgaXMgbGlrZWx5IG1lYW50IHRvIGFkZHJlc3MuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlIGltcGxlbWVudGF0aW9uLiBPa2F5LCBzbyBgc2xfZnJlZV9uZXRkZXZgIG5vdyBjb3JyZWN0bHkgbG9ja3MgdGhlIGBzbGlwX2RldnNfbG9ja2AgKmJlZm9yZSogY2hlY2tpbmcgdGhlIGFycmF5IHNsb3QgYW5kLCBpbXBvcnRhbnRseSwgKmJlZm9yZSogc2V0dGluZyB0aGUgcG9pbnRlciB0byBOVUxMLiBgc2xfc3luY2Agbm93IHNlcmlhbGl6ZXMgaXRzIGxvb3Agd2l0aCB0aGUgbG9jayAtIGdvb2QgZm9yIHJhY2UgcHJvdGVjdGlvbiBvbiB0aGUgYXJyYXkgaXRzZWxmLiBgc2xfYWxsb2NgIHNpbWlsYXJseSBndWFyZHMgdGhlIHNsb3QgYWxsb2NhdGlvbiBwcm9jZXNzLiBGaW5hbGx5LCBgc2xpcF9leGl0YCBpcyBjb3JyZWN0bHkgbG9ja2luZyBhcm91bmQgY2hlY2tpbmcgYW5kIGNsZWFyaW5nIGBzbGlwX2RldnNgLgoKWWVwLCB0aGlzIG5haWxzIGl0LiBUaGlzIGlzIGEgdmVyeSBjbGVhciByYWNlIGNvbmRpdGlvbiBmaXgsIGxpa2VseSB0YXJnZXRpbmcgYSBVQUYgb3IgYSBzaW1pbGFyIGRlcmVmZXJlbmNlLXJlbGF0ZWQgcHJvYmxlbS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFyZSBhcHBhcmVudCwgYW5kIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQsIHdlbGwtdGFyZ2V0ZWQgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwODowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbXV0ZXggKGBzbGlwX2RldnNfbG9ja2ApIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGBzbGlwX2RldnNgIGFycmF5IGluIHRoZSBzbGlwIGRyaXZlci4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCBhaW1lZCBhdCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbXV0ZXggKGBzbGlwX2RldnNfbG9ja2ApIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGBzbGlwX2RldnNgIGFycmF5IGluIHRoZSBzbGlwIGRyaXZlci4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCBhaW1lZCBhdCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA2OjUwLjc5NTk4MjYyNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzE1MDY1MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMSVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbGlwX29wZW5cIixcbiAgICBcInNsaXBfY2xvc2VcIixcbiAgICBcInNsX2ZyZWVfbmV0ZGV2XCIsXG4gICAgXCJzbF9zeW5jXCIsXG4gICAgXCJzbF9hbGxvY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG11dGV4IChgc2xpcF9kZXZzX2xvY2tgKSB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBgc2xpcF9kZXZzYCBhcnJheSBpbiB0aGUgc2xpcCBkcml2ZXIuIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBmaXggYWltZWQgYXQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lIGRyaXZlciBieSBpbnRyb2R1Y2luZyBhIG11dGV4IHRvIHByb3RlY3QgdGhlIGBzbGlwX2RldnNgIGFycmF5LiBUaGUgcmFjZSBvY2N1cnMgYmV0d2VlbiBgc2xfZnJlZV9uZXRkZXZgIChydW5uaW5nIGFzeW5jaHJvbm91c2x5IGZyb20gYG5ldGRldl9ydW5fdG9kb2ApIGFuZCBvdGhlciBmdW5jdGlvbnMgbGlrZSBgc2xfYWxsb2NgIGFuZCBgc2xfc3luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNvbmN1cnJlbmN5IGZpeCBpbiByZWFjaGFibGUgY29yZSBkcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDY6NTAuNzk1OTg4NTc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzE2Mjk1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyZjg3MzkzYzlhYjM5MWZiYjhkYjBiYmQwZWJmOTFiMGEzNjA4YTdmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDA4OjA2OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcXG5pbmRleCBmYWFlNzExY2Y3OTNkLi41Y2RhZTk4MzFmMDg3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXFxuKysrIGIvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcXG5AQCAtOTYsNiArOTYsMTIgQEBcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqKnNsaXBfZGV2cztcXG4gXFxuKy8qIFNlcmlhbGlzZXMgYWNjZXNzIHRvIHNsaXBfZGV2c1tdIGFuZCB0byB0aGUgc2xpcCBjaGFubmVscyBpdCBwb2ludHMgYXQuXFxuKyAqIFJUTkwgaXMgbm90IGVub3VnaDogc2xfZnJlZV9uZXRkZXYoKSBpcyB0aGUgcHJpdl9kZXN0cnVjdG9yIGFuZCB0aGVyZWZvcmVcXG4rICogcnVucyBmcm9tIG5ldGRldl9ydW5fdG9kbygpLCB3aGljaCBkZWxpYmVyYXRlbHkgZHJvcHMgdGhlIFJUTkwgc2VtYXBob3JlLlxcbisgKi9cXG4rc3RhdGljIERFRklORV9NVVRFWChzbGlwX2RldnNfbG9jayk7XFxuK1xcbiBzdGF0aWMgaW50IHNsaXBfbWF4ZGV2ID0gU0xfTlJVTklUO1xcbiBtb2R1bGVfcGFyYW0oc2xpcF9tYXhkZXYsIGludCwgMCk7XFxuIE1PRFVMRV9QQVJNX0RFU0Moc2xpcF9tYXhkZXYsIFxcXCJNYXhpbXVtIG51bWJlciBvZiBzbGlwIGRldmljZXNcXFwiKTtcXG5AQCAtNjM1LDcgKzY0MSwxMyBAQCBzdGF0aWMgdm9pZCBzbF9mcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdGludCBpID0gZGV2LVxcdTAwM2ViYXNlX2FkZHI7XFxuIFxcbi1cXHRzbGlwX2RldnNbaV0gPSBOVUxMO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuK1xcdC8qIE9ubHkgZHJvcCBvdXIgb3duIGVudHJ5OiB0aGUgc2xvdCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gcmV1c2VkIGJ5XFxuK1xcdCAqIHNsX2FsbG9jKCkgZm9yIGEgZGlmZmVyZW50IGNoYW5uZWwuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2xpcF9kZXZzW2ldID09IGRldilcXG4rXFx0XFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2xfbmV0ZGV2X29wcyA9IHtcXG5AQCAtNzI1LDYgKzczNyw3IEBAIHN0YXRpYyB2b2lkIHNsX3N5bmModm9pZClcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IHNsaXBcXHQgICpzbDtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcXG4gXFx0XFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xcbiBcXHRcXHRpZiAoZGV2ID09IE5VTEwpXFxuQEAgLTczNiw2ICs3NDksNyBAQCBzdGF0aWMgdm9pZCBzbF9zeW5jKHZvaWQpXFxuIFxcdFxcdGlmIChkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKVxcbiBcXHRcXHRcXHRkZXZfY2xvc2UoZGV2KTtcXG4gXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcXG4gfVxcbiBcXG4gXFxuQEAgLTc0NywxOSArNzYxLDI0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7XFxuIFxcdHN0cnVjdCBzbGlwICAgICAgICpzbDtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcXG4gXFx0XFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xcbiBcXHRcXHRpZiAoZGV2ID09IE5VTEwpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcdC8qIFNvcnJ5LCB0b28gbWFueSwgYWxsIHNsb3RzIGluIHVzZSAqL1xcbi1cXHRpZiAoaSBcXHUwMDNlPSBzbGlwX21heGRldilcXG4rXFx0aWYgKGkgXFx1MDAzZT0gc2xpcF9tYXhkZXYpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRzcHJpbnRmKG5hbWUsIFxcXCJzbCVkXFxcIiwgaSk7XFxuIFxcdGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnNsKSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgc2xfc2V0dXApO1xcbi1cXHRpZiAoIWRldilcXG4rXFx0aWYgKCFkZXYpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRkZXYtXFx1MDAzZWJhc2VfYWRkciAgPSBpO1xcbiBcXHRzbCA9IG5ldGRldl9wcml2KGRldik7XFxuQEAgLTc3Niw2ICs3OTUsNyBAQCBzdGF0aWMgc3RydWN0IHNsaXAgKnNsX2FsbG9jKHZvaWQpXFxuIFxcdHRpbWVyX3NldHVwKFxcdTAwMjZzbC1cXHUwMDNlb3V0ZmlsbF90aW1lciwgc2xfb3V0ZmlsbCwgMCk7XFxuICNlbmRpZlxcbiBcXHRzbGlwX2RldnNbaV0gPSBkZXY7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xcbiBcXHRyZXR1cm4gc2w7XFxuIH1cXG4gXFxuQEAgLTEzMzIsNiArMTM1Miw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBzbGlwX2V4aXQodm9pZClcXG4gXFx0XFx0XFx0bXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTtcXG4gXFxuIFxcdFxcdGJ1c3kgPSAwO1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzbGlwX21heGRldjsgaSsrKSB7XFxuIFxcdFxcdFxcdGRldiA9IHNsaXBfZGV2c1tpXTtcXG4gXFx0XFx0XFx0aWYgKCFkZXYpXFxuQEAgLTEzNDQsMTYgKzEzNjUsMTkgQEAgc3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzbC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdH1cXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIFxcdH0gd2hpbGUgKGJ1c3kgXFx1MDAyNlxcdTAwMjYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpO1xcbiBcXG4gXFx0LyogRklYTUU6IGhhbmd1cCBpcyBhc3luYyBzbyB3ZSBzaG91bGQgd2FpdCB3aGVuIGRvaW5nIHRoaXMgc2Vjb25kXFxuIFxcdCAgIHBoYXNlICovXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2xpcF9tYXhkZXY7IGkrKykge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIFxcdFxcdGRldiA9IHNsaXBfZGV2c1tpXTtcXG4rXFx0XFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzbGlwX2RldnNfbG9jayk7XFxuIFxcdFxcdGlmICghZGV2KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcXG4gXFxuIFxcdFxcdHNsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0XFx0aWYgKHNsLVxcdTAwM2V0dHkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDY6NTEuMzI4NTc3MzcxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mzk5NDkxOTAzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xJUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNsaXBfb3BlblwiLFxuICAgIFwic2xpcF9jbG9zZVwiLFxuICAgIFwic2xfZnJlZV9uZXRkZXZcIixcbiAgICBcInNsX3N5bmNcIixcbiAgICBcInNsX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyIGJ5IGludHJvZHVjaW5nIGEgbXV0ZXggdG8gcHJvdGVjdCB0aGUgYHNsaXBfZGV2c2AgYXJyYXkuIFRoZSByYWNlIG9jY3VycyBiZXR3ZWVuIGBzbF9mcmVlX25ldGRldmAgKHJ1bm5pbmcgYXN5bmNocm9ub3VzbHkgZnJvbSBgbmV0ZGV2X3J1bl90b2RvYCkgYW5kIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBzbF9hbGxvY2AgYW5kIGBzbF9zeW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY29uY3VycmVuY3kgZml4IGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZjg3MzkzYzlhYjM5MWZiYjhkYjBiYmQwZWJmOTFiMGEzNjA4YTdmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDg6MDY6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG5pbmRleCBmYWFlNzExY2Y3OTNkLi41Y2RhZTk4MzFmMDg3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG5AQCAtOTYsNiArOTYsMTIgQEBcbiBcbiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKipzbGlwX2RldnM7XG4gXG4rLyogU2VyaWFsaXNlcyBhY2Nlc3MgdG8gc2xpcF9kZXZzW10gYW5kIHRvIHRoZSBzbGlwIGNoYW5uZWxzIGl0IHBvaW50cyBhdC5cbisgKiBSVE5MIGlzIG5vdCBlbm91Z2g6IHNsX2ZyZWVfbmV0ZGV2KCkgaXMgdGhlIHByaXZfZGVzdHJ1Y3RvciBhbmQgdGhlcmVmb3JlXG4rICogcnVucyBmcm9tIG5ldGRldl9ydW5fdG9kbygpLCB3aGljaCBkZWxpYmVyYXRlbHkgZHJvcHMgdGhlIFJUTkwgc2VtYXBob3JlLlxuKyAqL1xuK3N0YXRpYyBERUZJTkVfTVVURVgoc2xpcF9kZXZzX2xvY2spO1xuK1xuIHN0YXRpYyBpbnQgc2xpcF9tYXhkZXYgPSBTTF9OUlVOSVQ7XG4gbW9kdWxlX3BhcmFtKHNsaXBfbWF4ZGV2LCBpbnQsIDApO1xuIE1PRFVMRV9QQVJNX0RFU0Moc2xpcF9tYXhkZXYsIFwiTWF4aW11bSBudW1iZXIgb2Ygc2xpcCBkZXZpY2VzXCIpO1xuQEAgLTYzNSw3ICs2NDEsMTMgQEAgc3RhdGljIHZvaWQgc2xfZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRpbnQgaSA9IGRldi1cdTAwM2ViYXNlX2FkZHI7XG4gXG4tXHRzbGlwX2RldnNbaV0gPSBOVUxMO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4rXHQvKiBPbmx5IGRyb3Agb3VyIG93biBlbnRyeTogdGhlIHNsb3QgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIHJldXNlZCBieVxuK1x0ICogc2xfYWxsb2MoKSBmb3IgYSBkaWZmZXJlbnQgY2hhbm5lbC5cbitcdCAqL1xuK1x0aWYgKHNsaXBfZGV2c1tpXSA9PSBkZXYpXG4rXHRcdHNsaXBfZGV2c1tpXSA9IE5VTEw7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNsX25ldGRldl9vcHMgPSB7XG5AQCAtNzI1LDYgKzczNyw3IEBAIHN0YXRpYyB2b2lkIHNsX3N5bmModm9pZClcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3Qgc2xpcFx0ICAqc2w7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcbiBcdFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xuIFx0XHRpZiAoZGV2ID09IE5VTEwpXG5AQCAtNzM2LDYgKzc0OSw3IEBAIHN0YXRpYyB2b2lkIHNsX3N5bmModm9pZClcbiBcdFx0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKVxuIFx0XHRcdGRldl9jbG9zZShkZXYpO1xuIFx0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiB9XG4gXG4gXG5AQCAtNzQ3LDE5ICs3NjEsMjQgQEAgc3RhdGljIHN0cnVjdCBzbGlwICpzbF9hbGxvYyh2b2lkKVxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2xpcCAgICAgICAqc2w7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcbiBcdFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xuIFx0XHRpZiAoZGV2ID09IE5VTEwpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXHQvKiBTb3JyeSwgdG9vIG1hbnksIGFsbCBzbG90cyBpbiB1c2UgKi9cbi1cdGlmIChpIFx1MDAzZT0gc2xpcF9tYXhkZXYpXG4rXHRpZiAoaSBcdTAwM2U9IHNsaXBfbWF4ZGV2KSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuIFxuIFx0c3ByaW50ZihuYW1lLCBcInNsJWRcIiwgaSk7XG4gXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpzbCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sIHNsX3NldHVwKTtcbi1cdGlmICghZGV2KVxuK1x0aWYgKCFkZXYpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4gXG4gXHRkZXYtXHUwMDNlYmFzZV9hZGRyICA9IGk7XG4gXHRzbCA9IG5ldGRldl9wcml2KGRldik7XG5AQCAtNzc2LDYgKzc5NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcbiBcdHRpbWVyX3NldHVwKFx1MDAyNnNsLVx1MDAzZW91dGZpbGxfdGltZXIsIHNsX291dGZpbGwsIDApO1xuICNlbmRpZlxuIFx0c2xpcF9kZXZzW2ldID0gZGV2O1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdHJldHVybiBzbDtcbiB9XG4gXG5AQCAtMTMzMiw2ICsxMzUyLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKVxuIFx0XHRcdG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7XG4gXG4gXHRcdGJ1c3kgPSAwO1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2xpcF9tYXhkZXY7IGkrKykge1xuIFx0XHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbiBcdFx0XHRpZiAoIWRldilcbkBAIC0xMzQ0LDE2ICsxMzY1LDE5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBzbGlwX2V4aXQodm9pZClcbiBcdFx0XHR9XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2wtXHUwMDNlbG9jayk7XG4gXHRcdH1cbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdH0gd2hpbGUgKGJ1c3kgXHUwMDI2XHUwMDI2IHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbiBcbiBcdC8qIEZJWE1FOiBoYW5ndXAgaXMgYXN5bmMgc28gd2Ugc2hvdWxkIHdhaXQgd2hlbiBkb2luZyB0aGlzIHNlY29uZFxuIFx0ICAgcGhhc2UgKi9cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbitcdFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0aWYgKCFkZXYpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHNsaXBfZGV2c1tpXSA9IE5VTEw7XG4gXG4gXHRcdHNsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdFx0aWYgKHNsLVx1MDAzZXR0eSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDY6NTEuMzI4NTc5MzIxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4MTg0OTAxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIERldmljZSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNgLiBTZWVtcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBtdXRleCwgYHNsaXBfZGV2c19sb2NrYCwgdG8gaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBgc2xpcF9kZXZzW11gIGFycmF5LiBTbWFydCBtb3ZlLCB0aGF0J3MgZGVmaW5pdGVseSBhIHBvaW50IG9mIHBvdGVudGlhbCBjb250ZW50aW9uLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgc2xfZnJlZV9uZXRkZXZgLCBgc2xfc3luY2AsIGBzbF9hbGxvY2AsIGFuZCBgc2xpcF9leGl0YCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhpcyBjb21wb25lbnQgaXMgZXZlbiBhY3RpdmVseSB1c2VkLCBvciBpZiB0aGlzIGNoYW5nZSBpcyBnb2luZyB0byBiZSByZWxldmFudC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRldGVybWluZSBpdHMgZnV6emFiaWxpdHkgb3IgcmVhY2hhYmlsaXR5LiBTTElQLi4uIHJpZ2h0LCBTZXJpYWwgTGluZSBJbnRlcm5ldCBQcm90b2NvbC4gQ2xhc3NpYy4gSXQgY2FuIGJlIGF0dGFjaGVkIHRvIGEgcHR5IHVzaW5nIGBUSU9DU0VURGAgd2l0aCBgTl9TTElQYC4gSG1tLCBwdHkuLi4gdGhhdCBtZWFucyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYXJlIGRlZmluaXRlbHkgaW4gcGxheS4gVGhhdCdzIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS4gU28sIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhhdCBTTElQIGlzIHJlYWNoYWJsZS5cblxuTm93LCBsZXQgbWUgbG9vayBhdCB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUuIFdoZXJlIGlzIGl0IGVuYWJsZWQ/IEknbGwgcHJvYmFibHkgZmluZCBgZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnYCBvciBzaW1pbGFyLiBJJ2xsIHNlYXJjaCBmb3IgYHNsaXAuY2AgaW4gYGRyaXZlcnMvbmV0L3NsaXAvTWFrZWZpbGVgIGFuZCBzZWUgaG93IGl0IGlzIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgYnVpbGQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBtb2R1bGUgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA2OjU2LjUxMDQzMTUzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODMwNTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbGlwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvc2xpcC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvc2xpcC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19TTElQKSArPSBzbGlwLm9cXG5kcml2ZXJzL25ldC9zbGlwL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1NMSEMpICs9IHNsaGMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNjo1Ni42MDg3NDI4MjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzA0NDM1NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgU0xJUCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGBDT05GSUdfU0xJUGAuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gVGhhdCB3b3VsZCBiZSBgZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzLCBsaWtlIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBvciByZWxhdGVkIG5ldHdvcmtpbmcgZmVhdHVyZXMgdGhhdCB0aGlzIGBTTElQYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aWVkIHRvLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgYXNzZXNzIHRoZSBicm9hZGVyIGltcGFjdCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gb24gdGhlIG92ZXJhbGwgYnVpbGQgYW5kIHBvdGVudGlhbCBjb25mbGljdHMgb3IgYWR2YW50YWdlcyBpdCBtaWdodCBpbnRyb2R1Y2UuIFRpbWUgdG8gZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDY6NTkuMzEzMTgxMzY2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTcwNDQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0xJUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnOjY6Y29uZmlnIFNMSVBcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiU0xJUCAoc2VyaWFsIGxpbmUpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc9NDM9aWYgU0xJUFxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy00NC1cXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NDU6Y29uZmlnIFNMSVBfQ09NUFJFU1NFRFxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy00Ni1cXHRib29sIFxcXCJDU0xJUCBjb21wcmVzc2VkIGhlYWRlcnNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNjAtXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnOjYxOmNvbmZpZyBTTElQX1NNQVJUXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIktlZXBhbGl2ZSBhbmQgbGluZWZpbGxcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNjgtXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnOjY5OmNvbmZpZyBTTElQX01PREVfU0xJUDZcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiU2l4IGJpdCBTTElQIGVuY2Fwc3VsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA2OjU5LjQxODg5MDk3NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDg0NzYyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIFNMSVAncyBGb3VuZGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gU0xJUC4gQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb24uIFNwZWNpZmljYWxseSwgd2hhdCBhcmUgdGhlIGNvcmUgZGVwZW5kZW5jaWVzIHRoaXMgdGhpbmcgaXMgYnVpbHQgdXBvbj8gV2UgY2FuJ3QgbWVhbmluZ2Z1bGx5IGV2YWx1YXRlIG9yIHRyb3VibGVzaG9vdCB3aXRob3V0IGtub3dpbmcgd2hhdCBTTElQIHJlbGllcyBvbi4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgYWxzbyBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgZGVzaWduIGFuZCBwb3RlbnRpYWwgd2Vha25lc3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjAyLjI2NzM3MTY0NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzMxNTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL0tjb25maWc9Nj1jb25maWcgU0xJUFxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJTTElQIChzZXJpYWwgbGluZSkgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6ODpcXHRkZXBlbmRzIG9uIFRUWVxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZz00NT1jb25maWcgU0xJUF9DT01QUkVTU0VEXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIkNTTElQIGNvbXByZXNzZWQgaGVhZGVyc1xcXCJcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NDc6XFx0ZGVwZW5kcyBvbiBTTElQXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTQ4LVxcdHNlbGVjdCBTTEhDXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc9NjE9Y29uZmlnIFNMSVBfU01BUlRcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNjItXFx0Ym9vbCBcXFwiS2VlcGFsaXZlIGFuZCBsaW5lZmlsbFxcXCJcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWc6NjM6XFx0ZGVwZW5kcyBvbiBTTElQXFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTY0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZz02OT1jb25maWcgU0xJUF9NT0RFX1NMSVA2XFxuZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIlNpeCBiaXQgU0xJUCBlbmNhcHN1bGF0aW9uXFxcIlxcbmRyaXZlcnMvbmV0L3NsaXAvS2NvbmZpZzo3MTpcXHRkZXBlbmRzIG9uIFNMSVBcXG5kcml2ZXJzL25ldC9zbGlwL0tjb25maWctNzItXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNzowMi4zNjQ2OTU1NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ0MDEyMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xJUCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgQ09ORklHX1NMSVBgIG9wdGlvbiByZWxpZXMgb24gYFRUWWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBtdXRleCwgYHNsaXBfZGV2c19sb2NrYCwgdG8gc2FmZWd1YXJkIGFjY2VzcyB0byB0aGUgYHNsaXBfZGV2c2AgYXJyYXkuIFRoYXQncyBhIHN0YW5kYXJkIHBhdHRlcm4gZm9yIGNvbmN1cnJlbnQgYWNjZXNzLCBnb29kIHRvIHNlZS4gVGhlIGZ1bmN0aW9ucyB0aGV5J3ZlIHRvdWNoZWQgYXJlIGBzbF9mcmVlX25ldGRldmAsIGBzbF9zeW5jYCwgYHNsX2FsbG9jYCwgYW5kIGBzbGlwX2V4aXRgLlxuXG5Ob3csIGBzbF9hbGxvY2AgaXMgY2FsbGVkIHdoZW4gYSBTZXJpYWwgTGluZSBJbnRlcm5ldCBQcm90b2NvbCAoU0xJUCkgbGluZSBkaXNjaXBsaW5lIGlzIGF0dGFjaGVkLCBhbmQgdGhhdCdzIHRoZSBpbnRlcmVzdGluZyBvbmUgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgdmVyaWZ5IGV4YWN0bHkgd2hlcmUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aXRoaW4gdGhlIGRyaXZlcidzIGNvbnRleHQuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgbmV3IGxvY2sgaW50ZXJhY3RzIHdpdGggdGhvc2UgY2FsbCBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU4NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNzowNi42MDg3MTg2MjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDY1ODY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz0xMTg9c3RhdGljIGludCBzbF9zaW9jZGV2cHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCB2b2lkIF9fdXNlciAqZGF0YSwgaW50IGNtZCk7XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMjItKiAgQnVmZmVyIGFkbWluaXN0cmF0aW9uIHJvdXRpbmVzOlxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEyMzoqXFx0c2xfYWxsb2NfYnVmcygpXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI0LSpcXHRzbF9mcmVlX2J1ZnMoKVxcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI2LSpcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzoxMjc6KiBOT1RFOiBzbF9yZWFsbG9jX2J1ZnMgIT0gc2xfZnJlZV9idWZzICsgc2xfYWxsb2NfYnVmcywgYmVjYXVzZVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEyOC0qXFx0c2xfcmVhbGxvY19idWZzIHByb3ZpZGVzIHN0cm9uZyBhdG9taWNpdHkgYW5kIHJlYWxsb2NhdGlvblxcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTM1LVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEzNjpzdGF0aWMgaW50IHNsX2FsbG9jX2J1ZnMoc3RydWN0IHNsaXAgKnNsLCBpbnQgbXR1KVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTEzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYz02NDA9c3RhdGljIHZvaWQgc2xfZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTY0NS1cXHQvKiBPbmx5IGRyb3Agb3VyIG93biBlbnRyeTogdGhlIHNsb3QgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIHJldXNlZCBieVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjY0NjpcXHQgKiBzbF9hbGxvYygpIGZvciBhIGRpZmZlcmVudCBjaGFubmVsLlxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTY0Ny1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTczND1zdGF0aWMgdm9pZCBzbF9zeW5jKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03NTYtLyogRmluZCBhIGZyZWUgU0xJUCBjaGFubmVsLCBhbmQgbGluayBpbiB0aGlzIGB0dHknIGxpbmUuICovXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NzU3OnN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03NTgte1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9ODEyPXN0YXRpYyBpbnQgc2xpcF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy04NDAtXFx0ZXJyID0gLUVORklMRTtcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4NDE6XFx0c2wgPSBzbF9hbGxvYygpO1xcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg0Mi1cXHRpZiAoc2wgPT0gTlVMTClcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTg1MC1cXHRcXHQvKiBQZXJmb3JtIHRoZSBsb3ctbGV2ZWwgU0xJUCBpbml0aWFsaXphdGlvbi4gKi9cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4NTE6XFx0XFx0ZXJyID0gc2xfYWxsb2NfYnVmcyhzbCwgU0xfTVRVKTtcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy04NTItXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDc6MDYuNzEzMzg1NDIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjI4NDU2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBMaW5lIERpc2NpcGxpbmUncyBMaWZlY3ljbGUqKlxuXG5Pa2F5LCBzbyBgc2xfYWxsb2NgIGlzIGRlZmluaXRlbHkgZ2V0dGluZyBjYWxsZWQgZnJvbSBgc2xpcF9vcGVuYC4gVGhhdCdzIHRoZSBrZXkuIEFuZCBgc2xpcF9vcGVuYCBpcywgb2YgY291cnNlLCB0aGUgYG9wZW5gIG1ldGhvZCBmb3IgdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBwb2ludCBvZiBlbnRyeSB3aGVuIGEgZGV2aWNlIGlzIGJlaW5nIGJyb3VnaHQgdXAgd2l0aCBTTElQLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhvc2UgZW50cnkgcG9pbnRzOiBsZXQgbWUgY2hlY2sgYm90aCBgc2xpcF9vcGVuYCAqYW5kKiBgc2xpcF9jbG9zZWAuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIG9mIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB0byBiZSBjZXJ0YWluIHRoYXQgdGhlcmUgaXNuJ3QgYSByYWNlIGNvbmRpdGlvbiwgb3IgYSBtZW1vcnkgbGVhay5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjA5LjYzNjIzNDE3M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNDAyMDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNsaXBfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz03MDA9c3RhdGljIHZvaWQgc2xpcF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqY3AsIGNvbnN0IHU4ICpmcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTcyOS0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NzMwOiAqICBzbGlwX29wZW4gaGVscGVyIHJvdXRpbmVzLlxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTczMS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzU3PXN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTgxMS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4MTI6c3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy04MTMte1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9MTI5Mj1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xfbGRpc2MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy0xMjk1LVxcdC5uYW1lIFxcdFxcdD0gXFxcInNsaXBcXFwiLFxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEyOTY6XFx0Lm9wZW4gXFx0XFx0PSBzbGlwX29wZW4sXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTI5Ny1cXHQuY2xvc2VcXHQgXFx0PSBzbGlwX2Nsb3NlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNzowOS44MDg2NDE2NzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU4NTkxNDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25jdXJyZW5jeSBGaXggZm9yIHRoZSBTTElQIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBTTElQIGRyaXZlci4gVGhlIGVudHJ5IHBvaW50IGhlcmUgaXMgYHNsaXBfb3BlbmAsIGFuZCB0aGUgY29yZSBvZiB0aGUgZml4IHJldm9sdmVzIGFyb3VuZCBhIHJhY2UgY29uZGl0aW9uLiBJdCBsb29rcyBsaWtlIGBzbF9mcmVlX25ldGRldmAsIHdoaWNoIGFjdHMgYXMgdGhlIGRlc3RydWN0b3IgZm9yIHRoZSBuZXR3b3JrIGRldmljZSAoYG5ldF9kZXZpY2VgKSwgaXMgYmVpbmcgY2FsbGVkIGFzeW5jaHJvbm91c2x5IGZyb20gYG5ldGRldl9ydW5fdG9kbygpYC4gVGhpcyBjYXVzZXMgYSBwcm9ibGVtIGJlY2F1c2UgaXQgcmVsZWFzZXMgdGhlIFJUTkwgc2VtYXBob3JlLCBhbmQgdGhpcyBvcGVucyB1cCBhIHdpbmRvdyBmb3IgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGBzbGlwX2RldnNbXWAgYXJyYXkuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNvbmN1cnJlbmN5IGJ1ZywgYSBkZWZpbml0ZSBwb3RlbnRpYWwgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGhlcmUgd2lsbCBiZSBvbiBhIGZldyBrZXkgc3ltYm9scyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBMZXQncyBsb29rIGF0IGBzbGlwX29wZW5gLCBgc2xpcF9jbG9zZWAsIGBzbF9mcmVlX25ldGRldmAsIGFuZCBgc2xfYWxsb2NgLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQuIGBzbF9mcmVlX25ldGRldmAgaXMgZGVmaW5pdGVseSBzdGF0aWMsIHRoYXQncyBnb29kIHRvIGtub3cuIGBzbGlwX29wZW5gIGFuZCBgc2xpcF9jbG9zZWAgYXJlIGFsc28gc3RhdGljLCBidXQgdGhleSdyZSBwYXJ0IG9mIHRoZSBsaW5lIGRpc2NpcGxpbmUgb3BlcmF0aW9ucy4gV2FpdCBhIG1pbnV0ZSwgYnV0IGBzbGlwX29wZW5gIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIENhbiBJIHVzZSBpdCBhcyBhIGZvY3VzIHN5bWJvbD8gWWVzLCBJIGNhbiB1c2Ugc3RhdGljIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzIGlmIHRoZXkncmUgbm90IGlubGluZWQuIEFuZCBzaW5jZSBgc2xpcF9vcGVuYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCBpdCB3b24ndCBiZSBpbmxpbmVkLiBgc2xfYWxsb2NgIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGZyb20gYHNsaXBfb3BlbmAuIEknbSBnb2luZyB0byBndWVzcyBpdCAqbWlnaHQqIGJlIGlubGluZWQsIGJ1dCB0aGUgZnVuY3Rpb24ncyBzaXplIG1pZ2h0IG1ha2UgdGhhdCB1bmxpa2VseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBzbF9mcmVlX25ldGRldmAgYSBsaXR0bGUgY2xvc2VyLiBPa2F5LCBpdCdzIHBhc3NlZCBhcyBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvciA9IHNsX2ZyZWVfbmV0ZGV2O2AgaW4gYHNsX3NldHVwYC4gVGhhdCBjb25maXJtcyB0aGF0IGl0IGlzbid0IGlubGluZWQsIHNvIGl0J3MgYSBnb29kIGZvY3VzLlxuXG5JIG5lZWQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBzbF9zZXR1cGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDc6MTYuMzk0NTU5MDczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjkwODYyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2xfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NjUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2xfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTY2Ny1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo2Njg6c3RhdGljIHZvaWQgc2xfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy02Njkte1xcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzU3PXN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTc3Ni1cXHRzcHJpbnRmKG5hbWUsIFxcXCJzbCVkXFxcIiwgaSk7XFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6Nzc3OlxcdGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnNsKSwgbmFtZSwgTkVUX05BTUVfVU5LTk9XTiwgc2xfc2V0dXApO1xcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTc3OC1cXHRpZiAoIWRldikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwODowNzoxNi45NjM2NTExMjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2MjkwODU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqVmVyaWZ5aW5nIE5ldHdvcmsgRGV2aWNlIERlc3RydWN0b3IgQXNzaWdubWVudCoqXG5cbk9rYXksIHNvIEknbSBkb3VibGUtY2hlY2tpbmcgdGhlIG5ldHdvcmsgZGV2aWNlIHRlYXJkb3duIHNlcXVlbmNlIGZvciB0aGlzIHNwZWNpZmljIGRyaXZlci4gSXQncyBjcnVjaWFsIHRvIGVuc3VyZSB0aGF0IHJlc291cmNlcyBhcmUgcmVsZWFzZWQgcHJvcGVybHkgd2hlbiBhIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQgb3IgZ29lcyBvZmZsaW5lLiBMZXQncyBzZWUuLi4gWWVwLCB0aGF0J3MgaXQuIEluIGBzbF9zZXR1cGAsIHRoZSBgc2xfZnJlZV9uZXRkZXZgIGZ1bmN0aW9uIGlzIGNvcnJlY3RseSBiZWluZyBhc3NpZ25lZCB0byBgZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvcmAuIFRoYXQncyBwcmVjaXNlbHkgd2hlcmUgaXQgc2hvdWxkIGJlLiBUaGUgZGVzdHJ1Y3RvciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBhbnkgZHJpdmVyLXNwZWNpZmljIHByaXZhdGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldHdvcmsgZGV2aWNlIChgZGV2YCkuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBzdGVwIGFuZCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY29uZmlybSBpcyBoYW5kbGVkIHByb3Blcmx5IHdoZW4gcmV2aWV3aW5nIG5ldHdvcmsgZGV2aWNlIHNldHVwIGFuZCB0ZWFyZG93bi4gVGhpcyBsb29rcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzExNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjE5LjgyNjU2Mjk1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NzYxNjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByaXZfZGVzdHJ1Y3RvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9zbGlwL3NsaXAuYz05Nz1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKipzbGlwX2RldnM7XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy05OS0vKiBTZXJpYWxpc2VzIGFjY2VzcyB0byBzbGlwX2RldnNbXSBhbmQgdG8gdGhlIHNsaXAgY2hhbm5lbHMgaXQgcG9pbnRzIGF0LlxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jOjEwMDogKiBSVE5MIGlzIG5vdCBlbm91Z2g6IHNsX2ZyZWVfbmV0ZGV2KCkgaXMgdGhlIHByaXZfZGVzdHJ1Y3RvciBhbmQgdGhlcmVmb3JlXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtMTAxLSAqIHJ1bnMgZnJvbSBuZXRkZXZfcnVuX3RvZG8oKSwgd2hpY2ggZGVsaWJlcmF0ZWx5IGRyb3BzIHRoZSBSVE5MIHNlbWFwaG9yZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jPTY2OD1zdGF0aWMgdm9pZCBzbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmMtNjcxLVxcdGRldi1cXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXZcXHQ9IHRydWU7XFxuZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM6NjcyOlxcdGRldi1cXHUwMDNlcHJpdl9kZXN0cnVjdG9yXFx0PSBzbF9mcmVlX25ldGRldjtcXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy02NzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjE5Ljk3MjMyOTY4OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg1ODA1MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBzbF9mcmVlX25ldGRldmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzbF9mcmVlX25ldGRldmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBpdCdzICpub3QqIGlubGluZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3MgdHJhY2UgaXRzIHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRocyBhbmQgc2VlIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgc2xpcF9leGl0YC4gVGhhdCdzIHRoZSBtb2R1bGUgZXhpdCBmdW5jdGlvbiwgcmlnaHQ/IFJpZ2h0LCBhbmQgSSBrbm93IHN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSBmb2N1cyBvbiBmdXp6aW5nIHRoZSBtb2R1bGUgdW5sb2FkaW5nIHBhdGguIEl04oCZcyBwcmV0dHkgcmFyZS4gU28sIGluIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGNvbnRleHQsIGBzbGlwX2V4aXRgIGlzIGxpa2VseSB1bnJlYWNoYWJsZSwgd2hpY2ggbWVhbnMgYW55dGhpbmcgY2FsbGVkIGZyb20gaXQgd29uJ3QgYmUgdHJpZ2dlcmVkLCBub3JtYWxseS4gTGV0J3Mgc2VlLi4uIEFoYSEgYHNsX3N5bmNgIGlzIGNhbGxlZCBmcm9tIGBzbGlwX2V4aXRgLiBTbywgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsIGBzbF9zeW5jYCBwcm9iYWJseSBpc24ndCBhIGxpa2VseSBmdXp6IHRhcmdldCBlaXRoZXIuIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlLCBiZWNhdXNlIHRoYXQgbWVhbnMgdGhhdCBJIHNob3VsZCBjaGVjayB0aGUgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU5MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjIzLjY1ODEzOTc1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NTMxNzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNsX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvc2xpcC9zbGlwLmM9NzAwPXN0YXRpYyB2b2lkIHNsaXBfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdTggKmNwLCBjb25zdCB1OCAqZnAsXFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYy03MzMtLyogQ29sbGVjdCBoYW5nZWQgdXAgY2hhbm5lbHMgKi9cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo3MzQ6c3RhdGljIHZvaWQgc2xfc3luYyh2b2lkKVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTczNS17XFxuLS1cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYz04MTI9c3RhdGljIGludCBzbGlwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4tLVxcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTgyOS1cXHQvKiBDb2xsZWN0IGhhbmdlZCB1cCBjaGFubmVscy4gKi9cXG5kcml2ZXJzL25ldC9zbGlwL3NsaXAuYzo4MzA6XFx0c2xfc3luYygpO1xcbmRyaXZlcnMvbmV0L3NsaXAvc2xpcC5jLTgzMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDc6MjMuODQyNzE4NjgzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMjc0Mzc4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNMSVAgTGluZSBEaXNjaXBsaW5lIERyaXZlciBGaXgqKlxuXG5Pa2F5LCBzbyBgc2xfc3luY2AgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSBgc2xpcF9vcGVuYCwgd2hpY2ggbWVhbnMgaXQncyBhY2Nlc3NpYmxlIGFuZCByZWxldmFudCB0byBteSBhbmFseXNpcy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgY29ubmVjdGlvbnMgaW4gbWluZC4gTXkgZm9jdXMgcmlnaHQgbm93IG5lZWRzIHRvIGJlIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBgc2xpcF9vcGVuYCwgYHNsaXBfY2xvc2VgLCBgc2xfZnJlZV9uZXRkZXZgLCBgc2xfc3luY2AsIGFuZCBgc2xfYWxsb2NgLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSBvZiB0aGluZ3MuIEkgc2VlIGBTTElQYCBpcyBpbnZvbHZlZC4gSSBrbm93IHRoYXQgYFNMSVBgIGRlcGVuZHMgb24gYFRUWWAsIGFuZCBgVFRZYCBpcyBwcmV0dHkgc3RhbmRhcmQgYW5kIHVzdWFsbHkgZW5hYmxlZC4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBTTElQYCBkb2Vzbid0IGhhdmUgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzLCBidXQgYmFzZWQgb24gbXkga25vd2xlZGdlLCBJJ20gbm90IGV4cGVjdGluZyBhbnkgc3VycHJpc2VzIHRoZXJlLiBOb3BlLCBqdXN0IGBUVFlgLlxuXG5MZXQgbWUganVzdCBjb25maXJtIHRoYXQgYHNsaXBfb3BlbmAgaXMsIGFzIEkgc3VzcGVjdCwgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgdG8gdGhpcyBjb2RlLCBhbmQgaXQgaXMgdGhlIGxkaXNjIG9wZW4uXG5cbkFuZCBgc2xpcF9jbG9zZWAgc2VlbXMgc2ltaWxhcmx5IHJlYWNoYWJsZSwgdHJpZ2dlcmVkIHdoZW4gdGhlIGxkaXNjIGlzIGNsb3NlZC5cblxuQWxyaWdodCwgYmFzZWQgb24gdGhpcywgSSdtIGdvaW5nIHRvIHNldCBzb21lIHBhcmFtZXRlcnMgZm9yIHRoZSBmdXp6ZXIuIEkgbmVlZCB0byBtYXJrIHRoaXMgYXMgXCJXb3J0aEZ1enppbmdcIiBiZWNhdXNlIGl0IGNsZWFybHkgaW52b2x2ZXMgY29uY3VycmVuY3kuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29uZmlybWVkOiBgW1wic2xpcF9vcGVuXCIsIFwic2xpcF9jbG9zZVwiLCBcInNsX2ZyZWVfbmV0ZGV2XCIsIFwic2xfc3luY1wiLCBcInNsX2FsbG9jXCJdYC4gQW5kIEkgbmVlZCB0byBlbmFibGUgdGhlIGBTTElQYCBjb25maWd1cmF0aW9uLlxuXG5NeSByZWFzb25pbmc/IFRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lIGRyaXZlci4gSXQncyB1c2luZyBhIG11dGV4IHRvIHByb3RlY3QgdGhlIGBzbGlwX2RldnNgIGFycmF5LCB3aGljaCBpbmRpY2F0ZXMgdGhlIHJhY2UgaXMgbGlrZWx5IGJldHdlZW4gYHNsX2ZyZWVfbmV0ZGV2YCAod2hpY2ggcnVucyBhc3luY2hyb25vdXNseSBmcm9tIGBuZXRkZXZfcnVuX3RvZG9gKSBhbmQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYHNsX2FsbG9jYCBhbmQgYHNsX3N5bmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjb25jdXJyZW5jeSBmaXggYW5kIGludm9sdmVzIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBjb2RlIHRoYXQgaXMgd29ydGggZXhwbG9yaW5nIGZvciB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjYsIk91dHB1dFRva2VucyI6MTQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjMxLjA3MDE2MDEzNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzU5MzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0xJUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNsaXBfb3BlblwiLFxuICAgIFwic2xpcF9jbG9zZVwiLFxuICAgIFwic2xfZnJlZV9uZXRkZXZcIixcbiAgICBcInNsX3N5bmNcIixcbiAgICBcInNsX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgU0xJUCBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyIGJ5IGludHJvZHVjaW5nIGEgbXV0ZXggdG8gcHJvdGVjdCB0aGUgYHNsaXBfZGV2c2AgYXJyYXkuIFRoZSByYWNlIG9jY3VycyBiZXR3ZWVuIGBzbF9mcmVlX25ldGRldmAgKHJ1bm5pbmcgYXN5bmNocm9ub3VzbHkgZnJvbSBgbmV0ZGV2X3J1bl90b2RvYCkgYW5kIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBzbF9hbGxvY2AgYW5kIGBzbF9zeW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY29uY3VycmVuY3kgZml4IGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNMSVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbGlwX29wZW5cIixcbiAgICBcInNsaXBfY2xvc2VcIixcbiAgICBcInNsX2ZyZWVfbmV0ZGV2XCIsXG4gICAgXCJzbF9zeW5jXCIsXG4gICAgXCJzbF9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIFNMSVAgbGluZSBkaXNjaXBsaW5lIGRyaXZlciBieSBpbnRyb2R1Y2luZyBhIG11dGV4IHRvIHByb3RlY3QgdGhlIGBzbGlwX2RldnNgIGFycmF5LiBUaGUgcmFjZSBvY2N1cnMgYmV0d2VlbiBgc2xfZnJlZV9uZXRkZXZgIChydW5uaW5nIGFzeW5jaHJvbm91c2x5IGZyb20gYG5ldGRldl9ydW5fdG9kb2ApIGFuZCBvdGhlciBmdW5jdGlvbnMgbGlrZSBgc2xfYWxsb2NgIGFuZCBgc2xfc3luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNvbmN1cnJlbmN5IGZpeCBpbiByZWFjaGFibGUgY29yZSBkcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDc6MzEuMjc3NzczNTQ1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjMzMjYxNjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDc6MzEuMjc4NzAzNDk0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcyMzIzMjYzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtdXRleCAoYHNsaXBfZGV2c19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgYHNsaXBfZGV2c2AgYXJyYXkgaW4gdGhlIHNsaXAgZHJpdmVyLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgZml4IGFpbWVkIGF0IHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLCB3aGljaCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZjg3MzkzYzlhYjM5MWZiYjhkYjBiYmQwZWJmOTFiMGEzNjA4YTdmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDg6MDY6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwL3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG5pbmRleCBmYWFlNzExY2Y3OTNkLi41Y2RhZTk4MzFmMDg3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvc2xpcC9zbGlwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3NsaXAvc2xpcC5jXG5AQCAtOTYsNiArOTYsMTIgQEBcbiBcbiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKipzbGlwX2RldnM7XG4gXG4rLyogU2VyaWFsaXNlcyBhY2Nlc3MgdG8gc2xpcF9kZXZzW10gYW5kIHRvIHRoZSBzbGlwIGNoYW5uZWxzIGl0IHBvaW50cyBhdC5cbisgKiBSVE5MIGlzIG5vdCBlbm91Z2g6IHNsX2ZyZWVfbmV0ZGV2KCkgaXMgdGhlIHByaXZfZGVzdHJ1Y3RvciBhbmQgdGhlcmVmb3JlXG4rICogcnVucyBmcm9tIG5ldGRldl9ydW5fdG9kbygpLCB3aGljaCBkZWxpYmVyYXRlbHkgZHJvcHMgdGhlIFJUTkwgc2VtYXBob3JlLlxuKyAqL1xuK3N0YXRpYyBERUZJTkVfTVVURVgoc2xpcF9kZXZzX2xvY2spO1xuK1xuIHN0YXRpYyBpbnQgc2xpcF9tYXhkZXYgPSBTTF9OUlVOSVQ7XG4gbW9kdWxlX3BhcmFtKHNsaXBfbWF4ZGV2LCBpbnQsIDApO1xuIE1PRFVMRV9QQVJNX0RFU0Moc2xpcF9tYXhkZXYsIFwiTWF4aW11bSBudW1iZXIgb2Ygc2xpcCBkZXZpY2VzXCIpO1xuQEAgLTYzNSw3ICs2NDEsMTMgQEAgc3RhdGljIHZvaWQgc2xfZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRpbnQgaSA9IGRldi1cdTAwM2ViYXNlX2FkZHI7XG4gXG4tXHRzbGlwX2RldnNbaV0gPSBOVUxMO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4rXHQvKiBPbmx5IGRyb3Agb3VyIG93biBlbnRyeTogdGhlIHNsb3QgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIHJldXNlZCBieVxuK1x0ICogc2xfYWxsb2MoKSBmb3IgYSBkaWZmZXJlbnQgY2hhbm5lbC5cbitcdCAqL1xuK1x0aWYgKHNsaXBfZGV2c1tpXSA9PSBkZXYpXG4rXHRcdHNsaXBfZGV2c1tpXSA9IE5VTEw7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2c2xpcF9kZXZzX2xvY2spO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNsX25ldGRldl9vcHMgPSB7XG5AQCAtNzI1LDYgKzczNyw3IEBAIHN0YXRpYyB2b2lkIHNsX3N5bmModm9pZClcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3Qgc2xpcFx0ICAqc2w7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcbiBcdFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xuIFx0XHRpZiAoZGV2ID09IE5VTEwpXG5AQCAtNzM2LDYgKzc0OSw3IEBAIHN0YXRpYyB2b2lkIHNsX3N5bmModm9pZClcbiBcdFx0aWYgKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKVxuIFx0XHRcdGRldl9jbG9zZShkZXYpO1xuIFx0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiB9XG4gXG4gXG5AQCAtNzQ3LDE5ICs3NjEsMjQgQEAgc3RhdGljIHN0cnVjdCBzbGlwICpzbF9hbGxvYyh2b2lkKVxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2xpcCAgICAgICAqc2w7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcbiBcdFx0ZGV2ID0gc2xpcF9kZXZzW2ldO1xuIFx0XHRpZiAoZGV2ID09IE5VTEwpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXHQvKiBTb3JyeSwgdG9vIG1hbnksIGFsbCBzbG90cyBpbiB1c2UgKi9cbi1cdGlmIChpIFx1MDAzZT0gc2xpcF9tYXhkZXYpXG4rXHRpZiAoaSBcdTAwM2U9IHNsaXBfbWF4ZGV2KSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuIFxuIFx0c3ByaW50ZihuYW1lLCBcInNsJWRcIiwgaSk7XG4gXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpzbCksIG5hbWUsIE5FVF9OQU1FX1VOS05PV04sIHNsX3NldHVwKTtcbi1cdGlmICghZGV2KVxuK1x0aWYgKCFkZXYpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4gXG4gXHRkZXYtXHUwMDNlYmFzZV9hZGRyICA9IGk7XG4gXHRzbCA9IG5ldGRldl9wcml2KGRldik7XG5AQCAtNzc2LDYgKzc5NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xpcCAqc2xfYWxsb2Modm9pZClcbiBcdHRpbWVyX3NldHVwKFx1MDAyNnNsLVx1MDAzZW91dGZpbGxfdGltZXIsIHNsX291dGZpbGwsIDApO1xuICNlbmRpZlxuIFx0c2xpcF9kZXZzW2ldID0gZGV2O1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdHJldHVybiBzbDtcbiB9XG4gXG5AQCAtMTMzMiw2ICsxMzUyLDcgQEAgc3RhdGljIHZvaWQgX19leGl0IHNsaXBfZXhpdCh2b2lkKVxuIFx0XHRcdG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7XG4gXG4gXHRcdGJ1c3kgPSAwO1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2xpcF9tYXhkZXY7IGkrKykge1xuIFx0XHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbiBcdFx0XHRpZiAoIWRldilcbkBAIC0xMzQ0LDE2ICsxMzY1LDE5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBzbGlwX2V4aXQodm9pZClcbiBcdFx0XHR9XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2wtXHUwMDNlbG9jayk7XG4gXHRcdH1cbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdH0gd2hpbGUgKGJ1c3kgXHUwMDI2XHUwMDI2IHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbiBcbiBcdC8qIEZJWE1FOiBoYW5ndXAgaXMgYXN5bmMgc28gd2Ugc2hvdWxkIHdhaXQgd2hlbiBkb2luZyB0aGlzIHNlY29uZFxuIFx0ICAgcGhhc2UgKi9cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNsaXBfbWF4ZGV2OyBpKyspIHtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZzbGlwX2RldnNfbG9jayk7XG4gXHRcdGRldiA9IHNsaXBfZGV2c1tpXTtcbitcdFx0c2xpcF9kZXZzW2ldID0gTlVMTDtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNsaXBfZGV2c19sb2NrKTtcbiBcdFx0aWYgKCFkZXYpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHNsaXBfZGV2c1tpXSA9IE5VTEw7XG4gXG4gXHRcdHNsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdFx0aWYgKHNsLVx1MDAzZXR0eSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDg6MDc6MzEuMjc4NzA1MTU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMzIyOTIwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uY3VycmVuY3kgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbXV0ZXgsIGBzbGlwX2RldnNfbG9ja2AsIHRvIHNhZmVseSBtYW5hZ2UgYWNjZXNzIHRvIHRoZSBgc2xpcF9kZXZzYCBhcnJheSBhbmQgdGhlIFNMSVAgY2hhbm5lbHMgd2l0aGluIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBpc3N1ZSBtaXRpZ2F0aW9uLCBpbW1lZGlhdGVseSBzaWduYWxpbmcgYSByYWNlIGNvbmRpdGlvbiBmaXguIEl0J3MgdGFyZ2V0aW5nIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGRvdWJsZSBmcmVlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgbmFzdHkgY29uY3VycmVuY3ktcmVsYXRlZCBidWdzLiBFeGNlbGxlbnQuXG5cbkNydWNpYWxseSwgZnJvbSBhIHNlY3VyaXR5IHN0YW5kcG9pbnQsIEkgc2VlIG5vIGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgaGVyZSwgc28gdGhhdCdzIGdvb2QuIFdlIGFyZW4ndCB3b3JyaWVkIGFib3V0IEtNU0FOIGluIHRoaXMgY2FzZSAtIEtBU0FOIGFuZCBMT0NLREVQIGFyZSB0aGUgYXBwcm9wcmlhdGUgdG9vbHMgdG8gYmUgdXNpbmcgdG8gY2hlY2sgZm9yIHRoZSB0eXBlcyBvZiBpc3N1ZXMgaXQgaXMgbGlrZWx5IG1lYW50IHRvIGFkZHJlc3MuXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbi4gT2theSwgc28gYHNsX2ZyZWVfbmV0ZGV2YCBub3cgY29ycmVjdGx5IGxvY2tzIHRoZSBgc2xpcF9kZXZzX2xvY2tgICpiZWZvcmUqIGNoZWNraW5nIHRoZSBhcnJheSBzbG90IGFuZCwgaW1wb3J0YW50bHksICpiZWZvcmUqIHNldHRpbmcgdGhlIHBvaW50ZXIgdG8gTlVMTC4gYHNsX3N5bmNgIG5vdyBzZXJpYWxpemVzIGl0cyBsb29wIHdpdGggdGhlIGxvY2sgLSBnb29kIGZvciByYWNlIHByb3RlY3Rpb24gb24gdGhlIGFycmF5IGl0c2VsZi4gYHNsX2FsbG9jYCBzaW1pbGFybHkgZ3VhcmRzIHRoZSBzbG90IGFsbG9jYXRpb24gcHJvY2Vzcy4gRmluYWxseSwgYHNsaXBfZXhpdGAgaXMgY29ycmVjdGx5IGxvY2tpbmcgYXJvdW5kIGNoZWNraW5nIGFuZCBjbGVhcmluZyBgc2xpcF9kZXZzYC5cblxuWWVwLCB0aGlzIG5haWxzIGl0LiBUaGlzIGlzIGEgdmVyeSBjbGVhciByYWNlIGNvbmRpdGlvbiBmaXgsIGxpa2VseSB0YXJnZXRpbmcgYSBVQUYgb3IgYSBzaW1pbGFyIGRlcmVmZXJlbmNlLXJlbGF0ZWQgcHJvYmxlbS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFyZSBhcHBhcmVudCwgYW5kIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQsIHdlbGwtdGFyZ2V0ZWQgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDczLCJPdXRwdXRUb2tlbnMiOjEzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA4OjA3OjM4LjUxMTAwMTI5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG11dGV4IChgc2xpcF9kZXZzX2xvY2tgKSB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBgc2xpcF9kZXZzYCBhcnJheSBpbiB0aGUgc2xpcCBkcml2ZXIuIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBmaXggYWltZWQgYXQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtdXRleCAoYHNsaXBfZGV2c19sb2NrYCkgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgYHNsaXBfZGV2c2AgYXJyYXkgaW4gdGhlIHNsaXAgZHJpdmVyLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgZml4IGFpbWVkIGF0IHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLCB3aGljaCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzzbq[1] Phase: Succeeded StartedAt: 2026-08-17 08:07:50 +0000 UTC FinishedAt: 2026-08-17 08:07:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 08:07:50 +0000 UTC FinishedAt: 2026-08-17 08:07:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2] Phase: Succeeded StartedAt: 2026-08-17 08:07:50 +0000 UTC FinishedAt: 2026-08-17 09:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 08:07:50 +0000 UTC FinishedAt: 2026-08-17 09:47:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 08:07:50 +0000 UTC FinishedAt: 2026-08-17 08:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 08:07:50 +0000 UTC FinishedAt: 2026-08-17 08:08:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-convert-artifact-1710876579/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 08:08:10 +0000 UTC FinishedAt: 2026-08-17 08:26:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 08:08:10 +0000 UTC FinishedAt: 2026-08-17 08:26:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1e75f120-1dac-4161-abb9-7f550b918c4d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-convert-artifact-1710876579/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "fed1fd2c-96a7-4f2b-94c0-582dfa1a3e02", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-build-action-95706129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 08:08:10 +0000 UTC FinishedAt: 2026-08-17 08:26:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1e75f120-1dac-4161-abb9-7f550b918c4d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-convert-artifact-1710876579/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "fed1fd2c-96a7-4f2b-94c0-582dfa1a3e02", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-build-action-95706129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 08:26:54 +0000 UTC FinishedAt: 2026-08-17 08:26:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 08:26:54 +0000 UTC FinishedAt: 2026-08-17 08:26:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 08:26:54 +0000 UTC FinishedAt: 2026-08-17 08:27:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 08:26:54 +0000 UTC FinishedAt: 2026-08-17 08:26:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-convert-artifact-1111699674/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 08:27:05 +0000 UTC FinishedAt: 2026-08-17 08:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 08:27:05 +0000 UTC FinishedAt: 2026-08-17 08:29:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fed1fd2c-96a7-4f2b-94c0-582dfa1a3e02,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-build-action-95706129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 08:29:12 +0000 UTC FinishedAt: 2026-08-17 08:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 08:29:12 +0000 UTC FinishedAt: 2026-08-17 08:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 08:29:12 +0000 UTC FinishedAt: 2026-08-17 08:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 08:29:12 +0000 UTC FinishedAt: 2026-08-17 08:49:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1e75f120-1dac-4161-abb9-7f550b918c4d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-convert-artifact-1111699674/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "81f70a63-ec67-477d-8642-1c0801a2022e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-build-action-3080093118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 08:29:12 +0000 UTC FinishedAt: 2026-08-17 08:49:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1e75f120-1dac-4161-abb9-7f550b918c4d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-convert-artifact-1111699674/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "81f70a63-ec67-477d-8642-1c0801a2022e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-build-action-3080093118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 08:49:31 +0000 UTC FinishedAt: 2026-08-17 08:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 08:49:31 +0000 UTC FinishedAt: 2026-08-17 08:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 08:49:31 +0000 UTC FinishedAt: 2026-08-17 08:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 08:49:31 +0000 UTC FinishedAt: 2026-08-17 08:51:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*81f70a63-ec67-477d-8642-1c0801a2022e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-build-action-3080093118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 08:51:48 +0000 UTC FinishedAt: 2026-08-17 09:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 08:51:48 +0000 UTC FinishedAt: 2026-08-17 09:47:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*fed1fd2c-96a7-4f2b-94c0-582dfa1a3e02,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*81f70a63-ec67-477d-8642-1c0801a2022e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-build-action-95706129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-build-action-3080093118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 08:51:48 +0000 UTC FinishedAt: 2026-08-17 08:51:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 08:51:48 +0000 UTC FinishedAt: 2026-08-17 08:51:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-convert-artifact-3112822927/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 08:51:48 +0000 UTC FinishedAt: 2026-08-17 08:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 08:51:48 +0000 UTC FinishedAt: 2026-08-17 08:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 08:51:48 +0000 UTC FinishedAt: 2026-08-17 08:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 08:51:58 +0000 UTC FinishedAt: 2026-08-17 09:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzzbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["slip_open","slip_close","sl_free_netdev","sl_sync","sl_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SLIP"],"series_id":"1c8513c1-4f66-4a26-bbf3-2619ff7f15bd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 08:51:58 +0000 UTC FinishedAt: 2026-08-17 09:47:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fed1fd2c-96a7-4f2b-94c0-582dfa1a3e02,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*81f70a63-ec67-477d-8642-1c0801a2022e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-build-action-95706129/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-build-action-3080093118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzzbq/series-workflowhzzbq-convert-artifact-3112822927/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}