Name: series-workflowpxqt8 Phase: Succeeded StartedAt: 2026-08-12 01:36:42 +0000 UTC FinishedAt: 2026-08-12 06:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[0] Phase: Succeeded StartedAt: 2026-08-12 01:36:42 +0000 UTC FinishedAt: 2026-08-12 02:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 01:36:42 +0000 UTC FinishedAt: 2026-08-12 02:27:20 +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": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "BRIDGE", "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "BRIDGE", "OPENVSWITCH" ], "series_id": "a1986d20-d667-4c7f-8ac0-554c8ad17a83" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tun_set_headroom", "tun_get_user", "tun_chr_write_iter", "tun_sendmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fc2V0X2hlYWRyb29tJiMzNDssCiAgICAmIzM0O3R1bl9nZXRfdXNlciYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7dHVuX3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBtYXhpbXVtIGhlYWRyb29tIGluIGB0dW5fc2V0X2hlYWRyb29tYCB0byBwcmV2ZW50IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIGFsbG9jYXRpb25zLCBhbmQgaXQgYWRkcy9tb2RpZmllcyBgcHNrYl9tYXlfcHVsbGAgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIHRvIGVuc3VyZSB0aGF0IHBhY2tldCBoZWFkZXJzIGFyZSBzYWZlbHkgYWNjZXNzaWJsZSBpbiB0aGUgbGluZWFyIHBvcnRpb24gb2YgdGhlIHNvY2tldCBidWZmZXIgYmVmb3JlIHJlYWRpbmcgdGhlbS4gVGhlc2UgYXJlIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzKSB0aGF0IGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSkgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBoZWFkcm9vbSBjYWxjdWxhdGlvbiBpbiBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGFkZHMgcGFja2V0IGhlYWRlciBwdWxsIGNoZWNrcyBpbiBgdHVuX2dldF91c2VyYCBmb3IgVFVOL1RBUCBkZXZpY2VzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgYHdyaXRlKClgIG9yIGBzZW5kbXNnKClgIHRvIHRoZSBUVU4gZGV2aWNlLCBhbmQgdmlhIGJyaWRnZSBvciBPcGVuIHZTd2l0Y2ggYXR0YWNoaW5nIHRoZSBUVU4gZGV2aWNlICh3aGljaCB0cmlnZ2VycyBgbmRvX3NldF9yeF9oZWFkcm9vbWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMGRkY2ZhZWFjMzJlZTY1NGEyYTFhN2ZlZDEyYTExYzNhYjFiOTEyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDI6MjM6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uY1xuaW5kZXggZmVkOWRmZGZjYzNiYy4uNWJiZTMxMjM5NzllMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC90dW4uY1xuQEAgLTExMDcsMTEgJiM0MzsxMTA3LDE2IEBAIHN0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCB0dW5fbmV0X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0YXRpYyB2b2lkIHR1bl9zZXRfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19ocilcbiB7XG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRzaXplX3QgbWF4X2hlYWRyb29tO1xuIFxuLVx0aWYgKG5ld19ociBcdTAwM2MgTkVUX1NLQl9QQUQpXG4tXHRcdG5ld19ociA9IE5FVF9TS0JfUEFEO1xuJiM0MztcdG1heF9oZWFkcm9vbSA9IG1pbl90KHNpemVfdCwgU0tCX01BWF9IRUFEKDApLCBVMTZfTUFYIC0gMSk7XG4gXG4tXHR0dW4tXHUwMDNlYWxpZ24gPSBuZXdfaHI7XG4mIzQzO1x0aWYgKCh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFRVTl9UWVBFX01BU0spID09IElGRl9UQVApXG4mIzQzO1x0XHRtYXhfaGVhZHJvb20gLT0gRVRIX0hMRU4gJiM0MzsgTkVUX0lQX0FMSUdOO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG1heF9oZWFkcm9vbSAtPSAxO1xuJiM0MztcbiYjNDM7XHR0dW4tXHUwMDNlYWxpZ24gPSBjbGFtcF90KGludCwgbmV3X2hyLCBORVRfU0tCX1BBRCwgbWF4X2hlYWRyb29tKTtcbiB9XG4gXG4gc3RhdGljIHZvaWRcbkBAIC0xODIyLDcgJiM0MzsxODI3LDEzIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuIFx0c3dpdGNoICh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFRVTl9UWVBFX01BU0spIHtcbiBcdGNhc2UgSUZGX1RVTjpcbiBcdFx0aWYgKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX05PX1BJKSB7XG4tXHRcdFx0dTggaXBfdmVyc2lvbiA9IHNrYi1cdTAwM2VsZW4gPyAoc2tiLVx1MDAzZWRhdGFbMF0gXHUwMDNlXHUwMDNlIDQpIDogMDtcbiYjNDM7XHRcdFx0dTggaXBfdmVyc2lvbjtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDEpKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRnb3RvIGRyb3A7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aXBfdmVyc2lvbiA9IHNrYi1cdTAwM2VkYXRhWzBdIFx1MDAzZVx1MDAzZSA0O1xuIFxuIFx0XHRcdHN3aXRjaCAoaXBfdmVyc2lvbikge1xuIFx0XHRcdGNhc2UgNDpcbkBAIC0xODQyLDcgJiM0MzsxODUzLDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4gXHRcdHNrYi1cdTAwM2VkZXYgPSB0dW4tXHUwMDNlZGV2O1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUZGX1RBUDpcbi1cdFx0aWYgKGZyYWdzIFx1MDAyNlx1MDAyNiAhcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOKSkge1xuJiM0MztcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9IRFJfVFJVTkM7XG4gXHRcdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUVU4mIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX3NldF9oZWFkcm9vbSYjMzQ7LAogICAgJiMzNDt0dW5fZ2V0X3VzZXImIzM0OywKICAgICYjMzQ7dHVuX2Nocl93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O3R1bl9zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRyb29tIGNhbGN1bGF0aW9uIGluIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYWRkcyBwYWNrZXQgaGVhZGVyIHB1bGwgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIGZvciBUVU4vVEFQIGRldmljZXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBgd3JpdGUoKWAgb3IgYHNlbmRtc2coKWAgdG8gdGhlIFRVTiBkZXZpY2UsIGFuZCB2aWEgYnJpZGdlIG9yIE9wZW4gdlN3aXRjaCBhdHRhY2hpbmcgdGhlIFRVTiBkZXZpY2UgKHdoaWNoIHRyaWdnZXJzIGBuZG9fc2V0X3J4X2hlYWRyb29tYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcGFja2V0IHByb2Nlc3NpbmcgYW5kIGRldmljZSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwZGRjZmFlYWMzMmVlNjU0YTJhMWE3ZmVkMTJhMTFjM2FiMWI5MTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwMjoyMzoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggZmVkOWRmZGZjYzNiYy4uNWJiZTMxMjM5NzllMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTExMDcsMTEgJiM0MzsxMTA3LDE2IEBAIHN0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCB0dW5fbmV0X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogc3RhdGljIHZvaWQgdHVuX3NldF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X2hyKQogewogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzaXplX3QgbWF4X2hlYWRyb29tOwogCi0JaWYgKG5ld19ociAmbHQ7IE5FVF9TS0JfUEFEKQotCQluZXdfaHIgPSBORVRfU0tCX1BBRDsKJiM0MzsJbWF4X2hlYWRyb29tID0gbWluX3Qoc2l6ZV90LCBTS0JfTUFYX0hFQUQoMCksIFUxNl9NQVggLSAxKTsKIAotCXR1bi0mZ3Q7YWxpZ24gPSBuZXdfaHI7CiYjNDM7CWlmICgodHVuLSZndDtmbGFncyAmYW1wOyBUVU5fVFlQRV9NQVNLKSA9PSBJRkZfVEFQKQomIzQzOwkJbWF4X2hlYWRyb29tIC09IEVUSF9ITEVOICYjNDM7IE5FVF9JUF9BTElHTjsKJiM0MzsJZWxzZQomIzQzOwkJbWF4X2hlYWRyb29tIC09IDE7CiYjNDM7CiYjNDM7CXR1bi0mZ3Q7YWxpZ24gPSBjbGFtcF90KGludCwgbmV3X2hyLCBORVRfU0tCX1BBRCwgbWF4X2hlYWRyb29tKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE4MjIsNyAmIzQzOzE4MjcsMTMgQEAgc3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsCiAJc3dpdGNoICh0dW4tJmd0O2ZsYWdzICZhbXA7IFRVTl9UWVBFX01BU0spIHsKIAljYXNlIElGRl9UVU46CiAJCWlmICh0dW4tJmd0O2ZsYWdzICZhbXA7IElGRl9OT19QSSkgewotCQkJdTggaXBfdmVyc2lvbiA9IHNrYi0mZ3Q7bGVuID8gKHNrYi0mZ3Q7ZGF0YVswXSAmZ3Q7Jmd0OyA0KSA6IDA7CiYjNDM7CQkJdTggaXBfdmVyc2lvbjsKJiM0MzsKJiM0MzsJCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkgewomIzQzOwkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQlnb3RvIGRyb3A7CiYjNDM7CQkJfQomIzQzOwkJCWlwX3ZlcnNpb24gPSBza2ItJmd0O2RhdGFbMF0gJmd0OyZndDsgNDsKIAogCQkJc3dpdGNoIChpcF92ZXJzaW9uKSB7CiAJCQljYXNlIDQ6CkBAIC0xODQyLDcgJiM0MzsxODUzLDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsCiAJCXNrYi0mZ3Q7ZGV2ID0gdHVuLSZndDtkZXY7CiAJCWJyZWFrOwogCWNhc2UgSUZGX1RBUDoKLQkJaWYgKGZyYWdzICZhbXA7JmFtcDsgIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTikpIHsKJiM0MzsJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOKSkgewogCQkJZXJyID0gLUVOT01FTTsKIAkJCWRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0hEUl9UUlVOQzsKIAkJCWdvdG8gZHJvcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRVTi9UQVAgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBUVU4vVEFQIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZHJpdmVycy9uZXQvdHVuLmNgLiBUaGUgY29yZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2VkIG9uIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYHR1bl9nZXRfdXNlcmAuIFRoaXMgc3VnZ2VzdHMgdGhleSBhcmUgYWRkcmVzc2luZyBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gaGVhZHJvb20gbWFuYWdlbWVudCBhbmQgZGF0YSByZXRyaWV2YWwuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGB0dW5fc2V0X2hlYWRyb29tYC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIHJlcGxhY2luZyBhIHNpbXBsZSBtaW5pbXVtIGNoZWNrIHdpdGggYSBtb3JlIHJvYnVzdCBjbGFtcGluZyBtZWNoYW5pc20uIEluc3RlYWQgb2YganVzdCBlbnN1cmluZyBgbmV3X2hyYCBpcyBhdCBsZWFzdCBgTkVUX1NLQl9QQURgLCBpdCBub3cgY2FsY3VsYXRlcyBhIGBtYXhfaGVhZHJvb21gIGJhc2VkIG9uIGBTS0JfTUFYX0hFQURgLCBgVTE2X01BWGAsIGFuZCBhZGp1c3RzIGl0IGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0JiMzOTtzIGEgVEFQIGludGVyZmFjZSAoc3VidHJhY3RpbmcgYEVUSF9ITEVOICYjNDM7IE5FVF9JUF9BTElHTmApIG9yIFRVTiBpbnRlcmZhY2UuIEl0IHRoZW4gY2xhbXBzIGBuZXdfaHJgIGJldHdlZW4gYE5FVF9TS0JfUEFEYCBhbmQgdGhpcyBjYWxjdWxhdGVkIGBtYXhfaGVhZHJvb21gLiBUaGlzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGFpbWluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGV4Y2Vzc2l2ZSBoZWFkcm9vbSBhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjb25zdHJhaW50cyBvZiBkaWZmZXJlbnQgaW50ZXJmYWNlIHR5cGVzLiBUaGlzIGNsYW1waW5nIGlzIG11Y2ggbW9yZSBzZW5zaWJsZS4KCk1vdmluZyB0byBgdHVuX2dldF91c2VyYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHR1bl9jaHJfd3JpdGVfaXRlcmAsIEkgc2VlIGNoYW5nZXMgcmVsYXRlZCB0byBoYW5kbGluZyBib3RoIFRVTiBhbmQgVEFQIGludGVyZmFjZXMgaW4gdGhlIElGRl9OT19QSSBjYXNlLiBJbiB0aGUgVFVOIGNhc2UsIHRoZXJlJiMzOTtzIG5vdyBhIGNoZWNrIHVzaW5nIGBwc2tiX21heV9wdWxsYCB0byBlbnN1cmUgdGhhdCB0aGVyZSYjMzk7cyBhdCBsZWFzdCBvbmUgYnl0ZSBhdmFpbGFibGUgdG8gcmVhZCB0aGUgSVAgdmVyc2lvbi4gVGhpcyBsb29rcyBsaWtlIGEgbmVjZXNzYXJ5IHNhbml0eSBjaGVjaywgYW5kIHByZXZlbnRpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcuCgpJbiB0aGUgVEFQIGNhc2UsIHRoZSBgcHNrYl9tYXlfcHVsbGAgY2hlY2sgaXMgYXBwbGllZCB1bmNvbmRpdGlvbmFsbHkgYmVmb3JlIHJlYWRpbmcgdGhlIEV0aGVybmV0IGhlYWRlciwgd2hpY2ggc2VlbXMgbGlrZSBhIG11Y2ggc3Ryb25nZXIgY2hlY2suIElmIGl0IGZhaWxzLCB0aGUgcGFja2V0IGlzIGRyb3BwZWQgd2l0aCBgU0tCX0RST1BfUkVBU09OX0hEUl9UUlVOQ2AuIEFnYWluLCB0aGlzIHByZXZlbnRzIHBvc3NpYmxlIHJlYWRzIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBTS0IsIHdoaWNoIGlzIGNyaXRpY2FsLgoKU28sIGluIHN1bW1hcnksIHRoZXNlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIGFpbWVkIGF0IGZpeGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMgcmVsYXRlZCB0byBoZWFkcm9vbSBhbmQgZGF0YSBhY2Nlc3MgaW4gdGhlIFRVTi9UQVAgZHJpdmVyLiBUaGUgY29kZSBub3cgY2xhbXBzIHRoZSBoZWFkcm9vbSBhbmQgcGVyZm9ybXMgYmV0dGVyIGJvdW5kcyBjaGVja2luZy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGV4YWN0bHkgaG93IGB0dW5fc2V0X2hlYWRyb29tYCBpcyBiZWluZyBjYWxsZWQsIGJ1dCB0aGUgZGlyZWN0aW9uIGhlcmUgaXMgZ29vZCBhbmQgcG9pbnRzIHRvIGZpeGluZyBzb21lIHNpZ25pZmljYW50IHJlbGlhYmlsaXR5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fc2V0X2hlYWRyb29tJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MTA5OT1zdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgdHVuX25ldF9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMTA2LVxuZHJpdmVycy9uZXQvdHVuLmM6MTEwNzpzdGF0aWMgdm9pZCB0dW5fc2V0X2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfaHIpXG5kcml2ZXJzL25ldC90dW4uYy0xMTA4LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0xMTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHVuX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTE5NS1cdC5uZG9fc2VsZWN0X3F1ZXVlXHQ9IHR1bl9zZWxlY3RfcXVldWUsXG5kcml2ZXJzL25ldC90dW4uYzoxMTk2Olx0Lm5kb19zZXRfcnhfaGVhZHJvb21cdD0gdHVuX3NldF9oZWFkcm9vbSxcbmRyaXZlcnMvbmV0L3R1bi5jLTExOTctXHQubmRvX2dldF9zdGF0czY0XHQ9IHR1bl9uZXRfZ2V0X3N0YXRzNjQsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTI3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRhcF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEyODMtXHQubmRvX2ZlYXR1cmVzX2NoZWNrXHQ9IHBhc3N0aHJ1X2ZlYXR1cmVzX2NoZWNrLFxuZHJpdmVycy9uZXQvdHVuLmM6MTI4NDpcdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IHR1bl9zZXRfaGVhZHJvb20sXG5kcml2ZXJzL25ldC90dW4uYy0xMjg1LVx0Lm5kb19icGZcdFx0PSB0dW5feGRwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUVU4vVEFQIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYHR1bl9nZXRfdXNlcmAgd2l0aGluIGBkcml2ZXJzL25ldC90dW4uY2AuIEludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGB0dW5fc2V0X2hlYWRyb29tYCBpcyBnZXR0aW5nIGEgY2xhbXAsIHByZXN1bWFibHkgdG8gZW5zdXJlIHRoZSBoZWFkcm9vbSBkb2VzbiYjMzk7dCBleGNlZWQgc29tZSBzYW5lIG1heGltdW0uIE1ha2VzIHNlbnNlLCBjb3VsZCBwcmV2ZW50IG92ZXJmbG93IGlzc3Vlcy4gQW5kIHRoZW4gYHR1bl9nZXRfdXNlcmAgaXMgc2VlaW5nIHNvbWUgYHBza2JfbWF5X3B1bGxgIGNoZWNrcyBiZWluZyBhZGRlZC4gUmlnaHQsIHRoYXQmIzM5O3MgaW1wb3J0YW50IGZvciBlbnN1cmluZyB3ZSYjMzk7cmUgbm90IHRyeWluZyB0byBwdWxsIGRhdGEgZnJvbSBhIHBhY2tldCBidWZmZXIgdGhhdCBkb2VzbiYjMzk7dCBhY3R1YWxseSBleGlzdCwgb3IgdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2Vzcy4gVGhlc2UgYXJlIHByZXR0eSBzdGFuZGFyZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgdGVjaG5pcXVlcy4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBkcml2ZXIsIHRoYXQmIzM5O3MgZ29vZC4gV2hpY2ggbWVhbnMsIGl0JiMzOTtzIHNvbWV0aGluZyBJIGNhbiBhYnNvbHV0ZWx5IGZ1enouIFRoZSBUVU4vVEFQIGRyaXZlciBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBhbnl3YXkuIEJvdGggYHR1bl9zZXRfaGVhZHJvb21gIGFuZCBgdHVuX2dldF91c2VyYCBub3cgbmVlZCB0byBiZSBzdWJqZWN0ZWQgdG8gaW50ZW5zZSBzY3J1dGlueS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGxvb2tzIGxpa2UgZm9yIGBkcml2ZXJzL25ldC90dW4uY2AgdG8gY29uZmlybSBteSBmdXp6aW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUVU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUVU4gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgVFVOYCBjb25maWd1cmF0aW9uIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB0byBpbnRlcmFjdCB3aXRoIGl0LiBUaGUgZ3VpZGFuY2UgaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGB0dW5fZ2V0X3VzZXJgIGFzIGtleSBhcmVhcyB0byBleGFtaW5lLiBIbW0sIGhhbmcgb24gYSBzZWNvbmQuIEl0IGxvb2tzIGxpa2UgYHR1bl9zZXRfaGVhZHJvb21gIGlzIGFjdHVhbGx5IGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgcmVkIGZsYWcsIGJlY2F1c2UgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLgoKV2FpdCBhIG1pbnV0ZSwgYWx0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCAqaXMqIGFzc2lnbmVkIHRvIGAubmRvX3NldF9yeF9oZWFkcm9vbWAuIFNvLCB0aGVyZSYjMzk7cyBhIHJlYXNvbiBpdCYjMzk7cyB1c2VkLiBUaGUgcXVlc3Rpb24gbm93IGlzLCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgd3JhcHBlciBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LiBJJiMzOTtsbCBjaGVjayB3aGVyZSBgLm5kb19zZXRfcnhfaGVhZHJvb21gIGlzIGFjdHVhbGx5IHVzZWQgYW5kIHNlZSBpZiB0aGF0IHJldmVhbHMgYSBtb3JlIHN1aXRhYmxlIGVudHJ5IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25kb19zZXRfcnhfaGVhZHJvb20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0a2l0LmM9MzMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0a2l0X25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMzM2LVx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBuZXRraXRfc2V0X211bHRpY2FzdCxcbmRyaXZlcnMvbmV0L25ldGtpdC5jOjMzNzpcdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IG5ldGtpdF9zZXRfaGVhZHJvb20sXG5kcml2ZXJzL25ldC9uZXRraXQuYy0zMzgtXHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBuZXRraXRfc2V0X21hY2FkZHIsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTE4OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR1bl9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTExOTUtXHQubmRvX3NlbGVjdF9xdWV1ZVx0PSB0dW5fc2VsZWN0X3F1ZXVlLFxuZHJpdmVycy9uZXQvdHVuLmM6MTE5NjpcdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IHR1bl9zZXRfaGVhZHJvb20sXG5kcml2ZXJzL25ldC90dW4uYy0xMTk3LVx0Lm5kb19nZXRfc3RhdHM2NFx0PSB0dW5fbmV0X2dldF9zdGF0czY0LFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEyNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjgzLVx0Lm5kb19mZWF0dXJlc19jaGVja1x0PSBwYXNzdGhydV9mZWF0dXJlc19jaGVjayxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyODQ6XHQubmRvX3NldF9yeF9oZWFkcm9vbVx0PSB0dW5fc2V0X2hlYWRyb29tLFxuZHJpdmVycy9uZXQvdHVuLmMtMTI4NS1cdC5uZG9fYnBmXHRcdD0gdHVuX3hkcCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9MTcwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZldGhfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtMTcyMy1cdC5uZG9fZmVhdHVyZXNfY2hlY2tcdD0gcGFzc3RocnVfZmVhdHVyZXNfY2hlY2ssXG5kcml2ZXJzL25ldC92ZXRoLmM6MTcyNDpcdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IHZldGhfc2V0X3J4X2hlYWRyb29tLFxuZHJpdmVycy9uZXQvdmV0aC5jLTE3MjUtXHQubmRvX2JwZlx0XHQ9IHZldGhfeGRwLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTA2ND1zdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMzk2LSAqXHRzYW1wbGluZyBwYWNrZXQuXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjEzOTc6ICogdm9pZCAoKm5kb19zZXRfcnhfaGVhZHJvb20pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZWVkZWRfaGVhZHJvb20pO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMzk4LSAqXHRUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgaGVhZHJvb20gdGhhdCB0aGUgc2tiIG11c3Rcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE0NDg9c3RydWN0IG5ldF9kZXZpY2Vfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE2NzQtXHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNjc1Olx0dm9pZFx0XHRcdCgqbmRvX3NldF9yeF9oZWFkcm9vbSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTY3Ni1cdFx0XHRcdFx0XHQgICAgICAgaW50IG5lZWRlZF9oZWFkcm9vbSk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yNzU0PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfc2V0X3J4X2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfaHIpXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI3NTUte1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyNzU2Olx0aWYgKGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXRfcnhfaGVhZHJvb20pXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjI3NTc6XHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXRfcnhfaGVhZHJvb20oZGV2LCBuZXdfaHIpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNzU4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzcyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgYG5ldGRldl9zZXRfcnhfaGVhZHJvb21gKioKCk9rYXksIHNvIGBuZXRkZXZfc2V0X3J4X2hlYWRyb29tYCBpcyB0aGUgZnVuY3Rpb24gb2YgaW50ZXJlc3QuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7V2hlcmUgaXMgdGhpcyBjYWxsZWQgZnJvbT8mIzM0OyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXIgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb250ZXh0cyBpbiB0aGUgZHJpdmVyIG9yIG5ldHdvcmtpbmcgc3RhY2sgd2hlcmUgaXQmIzM5O3MgaW52b2tlZC4gSSBrbm93IGhvdyB0byB1c2UgZ3JlcCBhbmQgb3RoZXIgdG9vbHMgdG8gZmluZCB1c2FnZXMsIGJ1dCBJIG5lZWQgdG8gZG8gc28gcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X3NldF9yeF9oZWFkcm9vbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTI3NDk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBuZXRkZXZfZ2V0X2Z3ZF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjc1My1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6Mjc1NDpzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3NldF9yeF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X2hyKVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNzU1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTI3NjE9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9yZXNldF9yeF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNzYyLXtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6Mjc2MzpcdG5ldGRldl9zZXRfcnhfaGVhZHJvb20oZGV2LCAtMSk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI3NjQtfVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYz0zMTU9c3RhdGljIHZvaWQgdXBkYXRlX2hlYWRyb29tKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgaW50IG5ld19ocilcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzE5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcdTAwMjZici1cdTAwM2Vwb3J0X2xpc3QsIGxpc3QpXG5uZXQvYnJpZGdlL2JyX2lmLmM6MzIwOlx0XHRuZXRkZXZfc2V0X3J4X2hlYWRyb29tKHAtXHUwMDNlZGV2LCBuZXdfaHIpO1xubmV0L2JyaWRnZS9icl9pZi5jLTMyMS1cbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmM9NTYwPWludCBicl9hZGRfaWYoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy02NTItXHRlbHNlXG5uZXQvYnJpZGdlL2JyX2lmLmM6NjUzOlx0XHRuZXRkZXZfc2V0X3J4X2hlYWRyb29tKGRldiwgYnJfaHIpO1xubmV0L2JyaWRnZS9icl9pZi5jLTY1NC1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMzI2PXN0YXRpYyB2b2lkIG92c191cGRhdGVfaGVhZHJvb20oc3RydWN0IGRhdGFwYXRoICpkcCwgdW5zaWduZWQgaW50IG5ld19oZWFkcm9vbSlcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMzM0LVx0XHRcdFx0XHQgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjIzMzU6XHRcdFx0bmV0ZGV2X3NldF9yeF9oZWFkcm9vbSh2cG9ydC1cdTAwM2VkZXYsIG5ld19oZWFkcm9vbSk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMzM2LVx0fVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTIzMzk9c3RhdGljIGludCBvdnNfdnBvcnRfY21kX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0MTYtXHRlbHNlXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNDE3Olx0XHRuZXRkZXZfc2V0X3J4X2hlYWRyb29tKHZwb3J0LVx1MDAzZWRldiwgZHAtXHUwMDNlbWF4X2hlYWRyb29tKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0MTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRHJpdmVyIEhlYWRyb29tIGFuZCBUdW5uZWwgQmVoYXZpb3IqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIGBuZXRkZXZfc2V0X3J4X2hlYWRyb29tYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBib3RoIGJyaWRnZSBhbmQgT3BlbiB2U3dpdGNoLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGNvbnRleHQgbGF0ZXIuIE5vdywgd2hhdCBhYm91dCB0aGF0IG90aGVyIGZ1bmN0aW9uLCBgdHVuX2dldF91c2VyYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCYjMzk7cyBiZWluZyBpbnZva2VkLiBJdCYjMzk7cyBvZnRlbiB0aGUgY2FzZSB0aGF0IHNlZW1pbmdseSBpbm5vY3VvdXMgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gbXVsdGlwbGUgcGxhY2VzLCBjcmVhdGluZyB1bmZvcmVzZWVuIGludGVyYWN0aW9ucy4gU28sIGxldCBtZSBxdWlja2x5IHRyYWNlIGl0cyBjYWxsIHBhdGhzIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaXRzIG92ZXJhbGwgaW1wYWN0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG1vcmUgZXN0YWJsaXNoZWQgcGllY2VzIG9mIGNvZGUgdGhhdCBJIGtub3cgYmV0dGVyLiBUaGF04oCZcyBwcm9iYWJseSB0aGUgYmVzdCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX2dldF91c2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MTYwMz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnR1bl9idWlsZF9za2Ioc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xNjk5LS8qIEdldCBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGJ1ZmZlciAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTcwMDpzdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTE3MDEtXHRcdFx0ICAgIHZvaWQgKm1zZ19jb250cm9sLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTk5OD1zdGF0aWMgc3NpemVfdCB0dW5fY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjAxMS1cbmRyaXZlcnMvbmV0L3R1bi5jOjIwMTI6XHRyZXN1bHQgPSB0dW5fZ2V0X3VzZXIodHVuLCB0ZmlsZSwgTlVMTCwgZnJvbSwgbm9ibG9jaywgZmFsc2UpO1xuZHJpdmVycy9uZXQvdHVuLmMtMjAxMy1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yNTI2PXN0YXRpYyBpbnQgdHVuX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yNTcyLVxuZHJpdmVycy9uZXQvdHVuLmM6MjU3MzpcdHJldCA9IHR1bl9nZXRfdXNlcih0dW4sIHRmaWxlLCBjdGwgPyBjdGwtXHUwMDNlcHRyIDogTlVMTCwgXHUwMDI2bS1cdTAwM2Vtc2dfaXRlcixcbmRyaXZlcnMvbmV0L3R1bi5jLTI1NzQtXHRcdFx0ICAgbS1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29yZSBkYXRhIGZsb3cgd2l0aGluIHRoaXMgVFVOIGRyaXZlciwgYW5kIGl0IGxvb2tzIGxpa2UgYHR1bl9jaHJfd3JpdGVfaXRlcmAgYW5kIGB0dW5fc2VuZG1zZ2AgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLiBgdHVuX2Nocl93cml0ZV9pdGVyYCwgcmlnaHQsIHRoYXQmIzM5O3MgdGhlIGAud3JpdGVfaXRlcmAgbWV0aG9kIHdpdGhpbiBgdHVuX2ZvcHNgLCBhbmQgYHR1bl9zZW5kbXNnYCBjb3JyZXNwb25kcyB0byB0aGUgYC5zZW5kbXNnYCBtZXRob2QgaW4gYHR1bl9wcm90b19vcHNgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIG15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrLgoKTm93LCBhIHJlZCBmbGFnISBJIHNlZSBgdHVuX2dldF91c2VyYCBpbiB0aGlzIGNvbnRleHQsIGFuZCBpdCBsb29rcyBwcmV0dHkgc3Vic3RhbnRpYWwuIEl0JiMzOTtzIG1hcmtlZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1wbGllcyBpdCYjMzk7cyBub3QgYSBkaXJlY3QsIGV4dGVybmFsIEFQSSBlbnRyeSBwb2ludC4gVGhlIGluc3RydWN0aW9ucyAqZG8qIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG92ZXIgdGhlc2UgaW50ZXJuYWwgaGVscGVycy4gSG1tLi4uc2hvdWxkIEkgaW5jbHVkZSBgdHVuX2dldF91c2VyYCBpbiBteSBhbmFseXNpcywgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljPyBJIHNob3VsZCBjaGVjayBpZiBgdHVuX2Nocl93cml0ZV9pdGVyYCBhbmQgYHR1bl9zZW5kbXNnYCBhcmUgYWN0dWFsbHkgbm9uLXN0YXRpYyAtIHRoYXQgd291bGQgYmUgdGhlIGRlY2lkaW5nIGZhY3Rvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX2Nocl93cml0ZV9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MTcwMD1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xOTk3LVxuZHJpdmVycy9uZXQvdHVuLmM6MTk5ODpzdGF0aWMgc3NpemVfdCB0dW5fY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5kcml2ZXJzL25ldC90dW4uYy0xOTk5LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNDgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM0ODItXHQucmVhZF9pdGVyICA9IHR1bl9jaHJfcmVhZF9pdGVyLFxuZHJpdmVycy9uZXQvdHVuLmM6MzQ4MzpcdC53cml0ZV9pdGVyID0gdHVuX2Nocl93cml0ZV9pdGVyLFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ4NC1cdC5wb2xsXHQ9IHR1bl9jaHJfcG9sbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MjM5MD1zdGF0aWMgaW50IHR1bl94ZHBfb25lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjUyNS1cbmRyaXZlcnMvbmV0L3R1bi5jOjI1MjY6c3RhdGljIGludCB0dW5fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxuZHJpdmVycy9uZXQvdHVuLmMtMjUyNy17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjY1MD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB0dW5fc29ja2V0X29wcyA9IHtcbmRyaXZlcnMvbmV0L3R1bi5jLTI2NTEtXHQucGVla19sZW4gPSB0dW5fcGVla19sZW4sXG5kcml2ZXJzL25ldC90dW4uYzoyNjUyOlx0LnNlbmRtc2cgPSB0dW5fc2VuZG1zZyxcbmRyaXZlcnMvbmV0L3R1bi5jLTI2NTMtXHQucmVjdm1zZyA9IHR1bl9yZWN2bXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjMzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgUmVsZXZhbnQgS2VybmVsIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGF0IHRvIGZvY3VzIG9uLiBCb3RoIGBmaWxlX29wZXJhdGlvbnNgIGFuZCBgcHJvdG9fb3BzYCBhcmUgc3RhdGljLCBidXQgdGhleSYjMzk7cmUgYXNzaWduZWQsIHNvIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgZW50cnkgcG9pbnRzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGFkZCBgdHVuX2Nocl93cml0ZV9pdGVyYCBhbmQgYHR1bl9zZW5kbXNnYCB0byBteSBGb2N1c1N5bWJvbHMgbGlzdC4KCk5vdywgd2hhdCBhYm91dCBgdHVuX3NldF9oZWFkcm9vbWA/IEl0JiMzOTtzIGFzc2lnbmVkIHRvIGBuZG9fc2V0X3J4X2hlYWRyb29tYCwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gY29uc2lkZXIuIFRoZSB3cmFwcGVyIGlzIGBuZXRkZXZfc2V0X3J4X2hlYWRyb29tYCwgd2hpY2ggaXMgaW5saW5lLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnM6IGB1cGRhdGVfaGVhZHJvb21gIGFuZCBgYnJfYWRkX2lmYCB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfaWYuY2AsIHBsdXMgYG92c191cGRhdGVfaGVhZHJvb21gIGFuZCBgb3ZzX3Zwb3J0X2NtZF9uZXdgIGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFNpbmNlIGBuZXRkZXZfc2V0X3J4X2hlYWRyb29tYCBpcyBpbmxpbmVkLCBidXQgdGhlc2UgYXJlIGFsbCBjYWxsaW5nIGl0LCBJIHRoaW5rIEkgY2FuIHNhZmVseSBhZGQgYGJyX2FkZF9pZmAgYW5kIGBvdnNfdnBvcnRfY21kX25ld2AgdG8gdGhlIGxpc3QuCgpXYWl0IGEgc2Vjb25kLiBgdHVuX3NldF9oZWFkcm9vbWAgaXMgYWN0dWFsbHkgc3RhdGljIHdpdGhpbiBgZHJpdmVycy9uZXQvdHVuLmNgLiBUaGF0IGNvbXBsaWNhdGVzIHRoaW5ncy4gSWYgaXQmIzM5O3Mgc3RhdGljIGFuZCBpbmxpbmVkLCB0aGUgZnV6emVyIG1pZ2h0IG1pc3MgaXQuIEhvd2V2ZXIsIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgc28gaXQmIzM5O3MgKm5vdCogaW5saW5lZC4gSSB3YXMgcmlnaHQgdG8gZm9jdXMgb24gaXQuIEkmIzM5O2xsIGFkZCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYHR1bl9zZW5kbXNnYCwgYGJyX2FkZF9pZmAsIGFuZCBgb3ZzX3Zwb3J0X2NtZF9uZXdgIHRvIHRoZSBGb2N1c1N5bWJvbHMuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGB0dW5fZ2V0X3VzZXJgIHRvby4gSXQmIzM5O3MgYSBsYXJnZSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgbm90IGlubGluZWQuIE1pZ2h0IGJlIHdvcnRoIGNoZWNraW5nIHRvIGJlIHN1cmUsIGJ1dCBJIHRoaW5rIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGFuZCBgdHVuX3NlbmRtc2dgIGFyZSBzb2xpZCBlbnRyeSBwb2ludHMgcmVnYXJkbGVzcy4gSXQmIzM5O3MgdGltZSB0byBjaGVjayBLY29uZmlnLCBtYWtlIHN1cmUgSSBoYXZlIGJyaWRnZSBhbmQgb3BlbnZzd2l0Y2ggdHVybmVkIG9uIGluIHRoZSBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnLTUtXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNDktXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7Q0ZNIHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1BFTlZTV0lUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjkKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogODQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgZHJpdmVycy9uZXQvdHVuLmNgLCBzcGVjaWZpY2FsbHkgYHR1bl9zZXRfaGVhZHJvb21gIGFuZCBgdHVuX2dldF91c2VyYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4KCkZpcnN0LCBgdHVuX3NldF9oZWFkcm9vbWAgZ2V0cyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGBuZG9fc2V0X3J4X2hlYWRyb29tYCB3aGljaCBpcyBhc3NpZ25lZCB0byBpdCwgZm9yIGJvdGggYHR1bmAgYW5kIGB0YXBgIGRldmljZXMuIE5vdywgYG5kb19zZXRfcnhfaGVhZHJvb21gIGlzIHRyaWdnZXJlZCBieSBgbmV0ZGV2X3NldF9yeF9oZWFkcm9vbWAsIHdoaWNoIHdlIHNlZSB1c2VkIGluIGJvdGggYG5ldC9icmlkZ2UvYnJfaWYuY2AgKHZpYSBgdXBkYXRlX2hlYWRyb29tYCkgYW5kIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AgKHZpYSBgb3ZzX3VwZGF0ZV9oZWFkcm9vbWApLiAgU28sIHRvIHRlc3QgYHR1bl9zZXRfaGVhZHJvb21gIGVmZmVjdGl2ZWx5LCBJJiMzOTtsbCBuZWVkIGBUVU5gIGNvbmZpZ3VyZWQsIGFuZCBhdCBsZWFzdCBvbmUgb2YgZWl0aGVyIGBCUklER0VgIG9yIGBPUEVOVlNXSVRDSGAuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3Igb3VyIGZ1enppbmcgY29uZmlndXJhdGlvbi4KClRoZW4gdGhlcmUmIzM5O3MgYHR1bl9nZXRfdXNlcmAuIFRoaXMgb25lIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGB0dW5fY2hyX3dyaXRlX2l0ZXJgICh3aGljaCBpcyByZWFjaGVkIHZpYSB0aGUgYHdyaXRlKClgIHN5c3RlbSBjYWxsIG9uIGAvZGV2L25ldC90dW5gKSBhbmQgYHR1bl9zZW5kbXNnYCAodXNpbmcgYHNlbmRtc2coKWAgb24gYSB0dW4gc29ja2V0KS4gVGhlIHBhdGNoIGFkZHMgYSBgcHNrYl9tYXlfcHVsbCgpYCBjYWxsIGluIGB0dW5fZ2V0X3VzZXJgLiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWFsaW5nIHdpdGggcGFja2V0IHBhcnNpbmcsIHNvIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGFyZWFzIGZvciBmdXp6aW5nIHdpbGwgYmUgYHR1bl9zZXRfaGVhZHJvb21gLCBgdHVuX2dldF91c2VyYCwgYHR1bl9jaHJfd3JpdGVfaXRlcmAgYW5kIGB0dW5fc2VuZG1zZ2AsIGFzIHRoZXkgYXJlIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBjaGFuZ2VzLiAgSeKAmWxsIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCBgVFVOYCwgYEJSSURHRWAgYW5kIGBPUEVOVlNXSVRDSGAgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgdG8gY292ZXIgYWxsIHRoZSBjYWxsIHBhdGhzLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG5ldGRldl9zZXRfcnhfaGVhZHJvb21gIGhhcyBhbnkgb3RoZXIgY2FsbGVycy4gT2theSwgdGhlIGlubGluZSB3cmFwcGVyIGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYCBkb2VzbiYjMzk7dCBwcm92aWRlIGFueXRoaW5nIGFkZGl0aW9uYWwuIGBCUklER0VgIGFuZCBgT1BFTlZTV0lUQ0hgIGFyZSBzdWZmaWNpZW50LgoKTm93LCBsZXQmIzM5O3MgcmVmaW5lIHRoaXMgYSBiaXQgZnVydGhlci4gVGhlIGNoYW5nZXMgbW9kaWZ5IGhlYWRyb29tIGNhbGN1bGF0aW9uIGFuZCBhZGQgcGFja2V0IGhlYWRlciBjaGVja3MuIFRoZXNlIGFyZSBhY2Nlc3NpYmxlIHZpYSBgd3JpdGUoKWAgb3IgYHNlbmRtc2coKWAgdG8gdGhlIFRVTiBkZXZpY2UsIGFzIHdlbGwgYXMgd2hlbiBicmlkZ2luZyBvciB1c2luZyBPcGVuIHZTd2l0Y2ggdG8gYXR0YWNoIHRoZSBUVU4gZGV2aWNlLCB3aGljaCB1c2VzIHRoZSBgbmRvX3NldF9yeF9oZWFkcm9vbWAuIEdpdmVuIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gaG93IHBhY2tldHMgYXJlIHByb2Nlc3NlZCBhbmQgZGV2aWNlIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBmdXp6aW5nIGhlcmUgaXMgZ29pbmcgdG8gYmUgd29ydGh3aGlsZS4KClRoZXJlZm9yZSwgZm9yIHRoaXMgZnV6emluZyBjYW1wYWlnbiwgSSYjMzk7bGwgc2V0OgoKKiAgICoqRm9jdXMgU3ltYm9sczoqKiBgdHVuX3NldF9oZWFkcm9vbWAsIGB0dW5fZ2V0X3VzZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYHR1bl9zZW5kbXNnYAoqICAgKipFbmFibGVkIENvbmZpZ3M6KiogYFRVTmAsIGBCUklER0VgLCBgT1BFTlZTV0lUQ0hgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUVU4mIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX3NldF9oZWFkcm9vbSYjMzQ7LAogICAgJiMzNDt0dW5fZ2V0X3VzZXImIzM0OywKICAgICYjMzQ7dHVuX2Nocl93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O3R1bl9zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRyb29tIGNhbGN1bGF0aW9uIGluIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYWRkcyBwYWNrZXQgaGVhZGVyIHB1bGwgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIGZvciBUVU4vVEFQIGRldmljZXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBgd3JpdGUoKWAgb3IgYHNlbmRtc2coKWAgdG8gdGhlIFRVTiBkZXZpY2UsIGFuZCB2aWEgYnJpZGdlIG9yIE9wZW4gdlN3aXRjaCBhdHRhY2hpbmcgdGhlIFRVTiBkZXZpY2UgKHdoaWNoIHRyaWdnZXJzIGBuZG9fc2V0X3J4X2hlYWRyb29tYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcGFja2V0IHByb2Nlc3NpbmcgYW5kIGRldmljZSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9zZXRfaGVhZHJvb20mIzM0OywKICAgICYjMzQ7dHVuX2dldF91c2VyJiMzNDssCiAgICAmIzM0O3R1bl9jaHJfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDt0dW5fc2VuZG1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBoZWFkcm9vbSBjYWxjdWxhdGlvbiBpbiBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGFkZHMgcGFja2V0IGhlYWRlciBwdWxsIGNoZWNrcyBpbiBgdHVuX2dldF91c2VyYCBmb3IgVFVOL1RBUCBkZXZpY2VzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgYHdyaXRlKClgIG9yIGBzZW5kbXNnKClgIHRvIHRoZSBUVU4gZGV2aWNlLCBhbmQgdmlhIGJyaWRnZSBvciBPcGVuIHZTd2l0Y2ggYXR0YWNoaW5nIHRoZSBUVU4gZGV2aWNlICh3aGljaCB0cmlnZ2VycyBgbmRvX3NldF9yeF9oZWFkcm9vbWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludGVnZXIgb3ZlcmZsb3dzLiBTcGVjaWZpY2FsbHksIGl0IGNsYW1wcyB0aGUgbWF4aW11bSBoZWFkcm9vbSBpbiBgdHVuX3NldF9oZWFkcm9vbWAgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBhbGxvY2F0aW9ucywgYW5kIGl0IGFkZHMvbW9kaWZpZXMgYHBza2JfbWF5X3B1bGxgIGNoZWNrcyBpbiBgdHVuX2dldF91c2VyYCB0byBlbnN1cmUgdGhhdCBwYWNrZXQgaGVhZGVycyBhcmUgc2FmZWx5IGFjY2Vzc2libGUgaW4gdGhlIGxpbmVhciBwb3J0aW9uIG9mIHRoZSBzb2NrZXQgYnVmZmVyIGJlZm9yZSByZWFkaW5nIHRoZW0uIFRoZXNlIGFyZSBjbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWVzIChvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcykgdGhhdCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIFVCU0FOLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UpIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzBkZGNmYWVhYzMyZWU2NTRhMmExYTdmZWQxMmExMWMzYWIxYjkxMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDAyOjIzOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCBmZWQ5ZGZkZmNjM2JjLi41YmJlMzEyMzk3OWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtMTEwNywxMSAmIzQzOzExMDcsMTYgQEAgc3RhdGljIG5ldGRldl9mZWF0dXJlc190IHR1bl9uZXRfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiBzdGF0aWMgdm9pZCB0dW5fc2V0X2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfaHIpCiB7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXNpemVfdCBtYXhfaGVhZHJvb207CiAKLQlpZiAobmV3X2hyICZsdDsgTkVUX1NLQl9QQUQpCi0JCW5ld19ociA9IE5FVF9TS0JfUEFEOwomIzQzOwltYXhfaGVhZHJvb20gPSBtaW5fdChzaXplX3QsIFNLQl9NQVhfSEVBRCgwKSwgVTE2X01BWCAtIDEpOwogCi0JdHVuLSZndDthbGlnbiA9IG5ld19ocjsKJiM0MzsJaWYgKCh0dW4tJmd0O2ZsYWdzICZhbXA7IFRVTl9UWVBFX01BU0spID09IElGRl9UQVApCiYjNDM7CQltYXhfaGVhZHJvb20gLT0gRVRIX0hMRU4gJiM0MzsgTkVUX0lQX0FMSUdOOwomIzQzOwllbHNlCiYjNDM7CQltYXhfaGVhZHJvb20gLT0gMTsKJiM0MzsKJiM0MzsJdHVuLSZndDthbGlnbiA9IGNsYW1wX3QoaW50LCBuZXdfaHIsIE5FVF9TS0JfUEFELCBtYXhfaGVhZHJvb20pOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTgyMiw3ICYjNDM7MTgyNywxMyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwKIAlzd2l0Y2ggKHR1bi0mZ3Q7ZmxhZ3MgJmFtcDsgVFVOX1RZUEVfTUFTSykgewogCWNhc2UgSUZGX1RVTjoKIAkJaWYgKHR1bi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX05PX1BJKSB7Ci0JCQl1OCBpcF92ZXJzaW9uID0gc2tiLSZndDtsZW4gPyAoc2tiLSZndDtkYXRhWzBdICZndDsmZ3Q7IDQpIDogMDsKJiM0MzsJCQl1OCBpcF92ZXJzaW9uOwomIzQzOwomIzQzOwkJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIDEpKSB7CiYjNDM7CQkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQkJCWdvdG8gZHJvcDsKJiM0MzsJCQl9CiYjNDM7CQkJaXBfdmVyc2lvbiA9IHNrYi0mZ3Q7ZGF0YVswXSAmZ3Q7Jmd0OyA0OwogCiAJCQlzd2l0Y2ggKGlwX3ZlcnNpb24pIHsKIAkJCWNhc2UgNDoKQEAgLTE4NDIsNyAmIzQzOzE4NTMsNyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwKIAkJc2tiLSZndDtkZXYgPSB0dW4tJmd0O2RldjsKIAkJYnJlYWs7CiAJY2FzZSBJRkZfVEFQOgotCQlpZiAoZnJhZ3MgJmFtcDsmYW1wOyAhcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOKSkgewomIzQzOwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fSERSX1RSVU5DOwogCQkJZ290byBkcm9wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MQoJCQkJCQkJb3V0cHV0OiAxNzMKCQkJCQkJCXRob3VnaHRzOiA3NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdHVuLmNgIFBhdGNoOiBBIEtBU0FOL1VCU0FOIEZvY3VzKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoZXNlIGNoYW5nZXMgdG8gYGRyaXZlcnMvbmV0L3R1bi5jYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgZm9jdXNlZCBvbiBoYXJkZW5pbmcgYWdhaW5zdCBLQVNBTiBhbmQgVUJTQU4gcmVwb3J0cywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZCBnaXZlbiB0aGUgY29kZSBsb2NhdGlvbnMuCgpGaXJzdCwgaW4gYHR1bl9zZXRfaGVhZHJvb21gLCB0aGV5JiMzOTtyZSByZXN0cmljdGluZyB0aGUgbWF4aW11bSBoZWFkcm9vbSB1c2luZyBgY2xhbXBfdGAuIExvb2tpbmcgYXQgdGhlIGxvZ2ljLCB0aGUgaW50ZW50IGlzIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBvdXQtb2YtYm91bmRzIGlzc3VlIGR1cmluZyBTS0IgYWxsb2NhdGlvbiBieSBzZXR0aW5nIGEgaGFyZCBsaW1pdCBmb3IgaGVhZHJvb20uIFRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIHJldmlzZWQgY2FsY3VsYXRpb24gb2YgYG1heF9oZWFkcm9vbWAsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHR5cGUgb2YgaW50ZXJmYWNlIChgSUZGX1RBUGAgdnMgYElGRl9UVU5gKS4gVGhlIGNsYW1waW5nIGVuc3VyZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgcmVtYWlucyB3aXRoaW4gc2FmZSBib3VuZHMuCgpTZWNvbmQsIHRoZSBgdHVuX2dldF91c2VyYCBmdW5jdGlvbiBmb3IgYElGRl9UVU5gIG5vdyBpbmNsdWRlcyBhIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgIGNoZWNrIGJlZm9yZSByZWFkaW5nIGBza2ItJmd0O2RhdGFbMF1gLiBUaGlzIGlzIHRleHRib29rIEtBU0FOIG1pdGlnYXRpb24uIEl0IHByZXZlbnRzIGFjY2Vzc2luZyBkYXRhIHRoYXQgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBvciBpcyBvdXRzaWRlIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBJZiBJJiMzOTttIHJlYWRpbmcgdGhpcyBjb3JyZWN0bHksIGl0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkLgoKVGhpcmQsIGEgc2ltaWxhciBmaXggaXMgYXBwbGllZCB0byBgdHVuX2dldF91c2VyYCBmb3IgYElGRl9UQVBgLiBUaGUgY29uZGl0aW9uYWwgdGhhdCBoYWQgYGZyYWdzYCBhbmQgYCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pYCBoYXMgYmVlbiBzaW1wbGlmaWVkIHRvIGp1c3QgYCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pYC4gVGhpcyBlbnN1cmVzIHRoYXQgYEVUSF9ITEVOYCBieXRlcyBhcmUgYXZhaWxhYmxlIGZvciBwdWxsaW5nIGZyb20gdGhlIFNLQiBiZWZvcmUgdGhleSYjMzk7cmUgYWNjZXNzZWQuIEFnYWluLCB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLiBUaGUgYW5zd2VyIGlzICpubyouIExvb2tpbmcgY2xvc2VseSBhdCB0aGUgcGF0Y2ggYW5kIG15IGV4cGVyaWVuY2UsIHRoZSBgcHNrYl9tYXlfcHVsbGAgZnVuY3Rpb24gaXNuJiMzOTt0IGFib3V0IGluaXRpYWxpemluZyBtZW1vcnkuIEl0JiMzOTtzIHNvbGVseSBhYm91dCBlbnN1cmluZyBkYXRhIGlzIGFjY2Vzc2libGUgaW4gdGhlIGxpbmVhciBwYXJ0IG9mIHRoZSBTS0IgdG8gYXZvaWQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlIGB0dW5fc2V0X2hlYWRyb29tYCBjaGFuZ2Ugc2ltcGx5IGNhcHMgdGhlIGFsbG9jYXRpb24gc2l6ZSwgbm90IGl0cyBpbml0aWFsaXphdGlvbi4KClRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGZvY3VzZWQgb24gZWxpbWluYXRpbmcgcG90ZW50aWFsIEtBU0FOL1VCU0FOIGhpdHMgYnkgZW5mb3JjaW5nIGJvdW5kcyBjaGVja3MgYW5kIHJlc3RyaWN0aW5nIGhlYWRyb29tIHRvIHByZXZlbnQgb3ZlcmZsb3dzLCBub3QgYWRkcmVzc2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGV5IGFyZSBhbGwgYWJvdXQgcHJvdGVjdGluZyBhZ2FpbnN0IGtub3duIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBjb21mb3J0YWJsZSBzZXR0aW5nIE5lZWRzS01TQU4gdG8gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cy4gU3BlY2lmaWNhbGx5LCBpdCBjbGFtcHMgdGhlIG1heGltdW0gaGVhZHJvb20gaW4gYHR1bl9zZXRfaGVhZHJvb21gIHRvIHByZXZlbnQgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIG91dC1vZi1ib3VuZHMgYWxsb2NhdGlvbnMsIGFuZCBpdCBhZGRzL21vZGlmaWVzIGBwc2tiX21heV9wdWxsYCBjaGVja3MgaW4gYHR1bl9nZXRfdXNlcmAgdG8gZW5zdXJlIHRoYXQgcGFja2V0IGhlYWRlcnMgYXJlIHNhZmVseSBhY2Nlc3NpYmxlIGluIHRoZSBsaW5lYXIgcG9ydGlvbiBvZiB0aGUgc29ja2V0IGJ1ZmZlciBiZWZvcmUgcmVhZGluZyB0aGVtLiBUaGVzZSBhcmUgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMpIHRoYXQgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlKSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBtYXhpbXVtIGhlYWRyb29tIGluIGB0dW5fc2V0X2hlYWRyb29tYCB0byBwcmV2ZW50IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIGFsbG9jYXRpb25zLCBhbmQgaXQgYWRkcy9tb2RpZmllcyBgcHNrYl9tYXlfcHVsbGAgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIHRvIGVuc3VyZSB0aGF0IHBhY2tldCBoZWFkZXJzIGFyZSBzYWZlbHkgYWNjZXNzaWJsZSBpbiB0aGUgbGluZWFyIHBvcnRpb24gb2YgdGhlIHNvY2tldCBidWZmZXIgYmVmb3JlIHJlYWRpbmcgdGhlbS4gVGhlc2UgYXJlIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzKSB0aGF0IGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSkgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyMzoxNC4wODE4OTgxMDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUwODI2MzgxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX3NldF9oZWFkcm9vbVwiLFxuICAgIFwidHVuX2dldF91c2VyXCIsXG4gICAgXCJ0dW5fY2hyX3dyaXRlX2l0ZXJcIixcbiAgICBcInR1bl9zZW5kbXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBtYXhpbXVtIGhlYWRyb29tIGluIGB0dW5fc2V0X2hlYWRyb29tYCB0byBwcmV2ZW50IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIGFsbG9jYXRpb25zLCBhbmQgaXQgYWRkcy9tb2RpZmllcyBgcHNrYl9tYXlfcHVsbGAgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIHRvIGVuc3VyZSB0aGF0IHBhY2tldCBoZWFkZXJzIGFyZSBzYWZlbHkgYWNjZXNzaWJsZSBpbiB0aGUgbGluZWFyIHBvcnRpb24gb2YgdGhlIHNvY2tldCBidWZmZXIgYmVmb3JlIHJlYWRpbmcgdGhlbS4gVGhlc2UgYXJlIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzKSB0aGF0IGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSkgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRyb29tIGNhbGN1bGF0aW9uIGluIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYWRkcyBwYWNrZXQgaGVhZGVyIHB1bGwgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIGZvciBUVU4vVEFQIGRldmljZXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBgd3JpdGUoKWAgb3IgYHNlbmRtc2coKWAgdG8gdGhlIFRVTiBkZXZpY2UsIGFuZCB2aWEgYnJpZGdlIG9yIE9wZW4gdlN3aXRjaCBhdHRhY2hpbmcgdGhlIFRVTiBkZXZpY2UgKHdoaWNoIHRyaWdnZXJzIGBuZG9fc2V0X3J4X2hlYWRyb29tYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcGFja2V0IHByb2Nlc3NpbmcgYW5kIGRldmljZSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjM6MTQuMDgxOTA0MDQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk0NTQ1MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzBkZGNmYWVhYzMyZWU2NTRhMmExYTdmZWQxMmExMWMzYWIxYjkxMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwMjoyMzoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXFxuaW5kZXggZmVkOWRmZGZjYzNiYy4uNWJiZTMxMjM5NzllMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jXFxuQEAgLTExMDcsMTEgKzExMDcsMTYgQEAgc3RhdGljIG5ldGRldl9mZWF0dXJlc190IHR1bl9uZXRfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHN0YXRpYyB2b2lkIHR1bl9zZXRfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19ocilcXG4ge1xcbiBcXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0c2l6ZV90IG1heF9oZWFkcm9vbTtcXG4gXFxuLVxcdGlmIChuZXdfaHIgXFx1MDAzYyBORVRfU0tCX1BBRClcXG4tXFx0XFx0bmV3X2hyID0gTkVUX1NLQl9QQUQ7XFxuK1xcdG1heF9oZWFkcm9vbSA9IG1pbl90KHNpemVfdCwgU0tCX01BWF9IRUFEKDApLCBVMTZfTUFYIC0gMSk7XFxuIFxcbi1cXHR0dW4tXFx1MDAzZWFsaWduID0gbmV3X2hyO1xcbitcXHRpZiAoKHR1bi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUVU5fVFlQRV9NQVNLKSA9PSBJRkZfVEFQKVxcbitcXHRcXHRtYXhfaGVhZHJvb20gLT0gRVRIX0hMRU4gKyBORVRfSVBfQUxJR047XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWF4X2hlYWRyb29tIC09IDE7XFxuK1xcbitcXHR0dW4tXFx1MDAzZWFsaWduID0gY2xhbXBfdChpbnQsIG5ld19ociwgTkVUX1NLQl9QQUQsIG1heF9oZWFkcm9vbSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkXFxuQEAgLTE4MjIsNyArMTgyNywxMyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4gXFx0c3dpdGNoICh0dW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVFVOX1RZUEVfTUFTSykge1xcbiBcXHRjYXNlIElGRl9UVU46XFxuIFxcdFxcdGlmICh0dW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX05PX1BJKSB7XFxuLVxcdFxcdFxcdHU4IGlwX3ZlcnNpb24gPSBza2ItXFx1MDAzZWxlbiA/IChza2ItXFx1MDAzZWRhdGFbMF0gXFx1MDAzZVxcdTAwM2UgNCkgOiAwO1xcbitcXHRcXHRcXHR1OCBpcF92ZXJzaW9uO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlwX3ZlcnNpb24gPSBza2ItXFx1MDAzZWRhdGFbMF0gXFx1MDAzZVxcdTAwM2UgNDtcXG4gXFxuIFxcdFxcdFxcdHN3aXRjaCAoaXBfdmVyc2lvbikge1xcbiBcXHRcXHRcXHRjYXNlIDQ6XFxuQEAgLTE4NDIsNyArMTg1Myw3IEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbiBcXHRcXHRza2ItXFx1MDAzZWRldiA9IHR1bi1cXHUwMDNlZGV2O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJRkZfVEFQOlxcbi1cXHRcXHRpZiAoZnJhZ3MgXFx1MDAyNlxcdTAwMjYgIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTikpIHtcXG4rXFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0hEUl9UUlVOQztcXG4gXFx0XFx0XFx0Z290byBkcm9wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyMzoxNS40NzcyOTg4MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMjI2NzQ4NDU3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX3NldF9oZWFkcm9vbVwiLFxuICAgIFwidHVuX2dldF91c2VyXCIsXG4gICAgXCJ0dW5fY2hyX3dyaXRlX2l0ZXJcIixcbiAgICBcInR1bl9zZW5kbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaGVhZHJvb20gY2FsY3VsYXRpb24gaW4gYHR1bl9zZXRfaGVhZHJvb21gIGFuZCBhZGRzIHBhY2tldCBoZWFkZXIgcHVsbCBjaGVja3MgaW4gYHR1bl9nZXRfdXNlcmAgZm9yIFRVTi9UQVAgZGV2aWNlcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIGB3cml0ZSgpYCBvciBgc2VuZG1zZygpYCB0byB0aGUgVFVOIGRldmljZSwgYW5kIHZpYSBicmlkZ2Ugb3IgT3BlbiB2U3dpdGNoIGF0dGFjaGluZyB0aGUgVFVOIGRldmljZSAod2hpY2ggdHJpZ2dlcnMgYG5kb19zZXRfcnhfaGVhZHJvb21gKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgZGV2aWNlIGNvbmZpZ3VyYXRpb24gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMGRkY2ZhZWFjMzJlZTY1NGEyYTFhN2ZlZDEyYTExYzNhYjFiOTEyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDI6MjM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5pbmRleCBmZWQ5ZGZkZmNjM2JjLi41YmJlMzEyMzk3OWUwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdHVuLmNcbisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5AQCAtMTEwNywxMSArMTEwNywxNiBAQCBzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgdHVuX25ldF9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgdm9pZCB0dW5fc2V0X2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfaHIpXG4ge1xuIFx0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7XG4rXHRzaXplX3QgbWF4X2hlYWRyb29tO1xuIFxuLVx0aWYgKG5ld19ociBcdTAwM2MgTkVUX1NLQl9QQUQpXG4tXHRcdG5ld19ociA9IE5FVF9TS0JfUEFEO1xuK1x0bWF4X2hlYWRyb29tID0gbWluX3Qoc2l6ZV90LCBTS0JfTUFYX0hFQUQoMCksIFUxNl9NQVggLSAxKTtcbiBcbi1cdHR1bi1cdTAwM2VhbGlnbiA9IG5ld19ocjtcbitcdGlmICgodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBUVU5fVFlQRV9NQVNLKSA9PSBJRkZfVEFQKVxuK1x0XHRtYXhfaGVhZHJvb20gLT0gRVRIX0hMRU4gKyBORVRfSVBfQUxJR047XG4rXHRlbHNlXG4rXHRcdG1heF9oZWFkcm9vbSAtPSAxO1xuK1xuK1x0dHVuLVx1MDAzZWFsaWduID0gY2xhbXBfdChpbnQsIG5ld19ociwgTkVUX1NLQl9QQUQsIG1heF9oZWFkcm9vbSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkXG5AQCAtMTgyMiw3ICsxODI3LDEzIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuIFx0c3dpdGNoICh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFRVTl9UWVBFX01BU0spIHtcbiBcdGNhc2UgSUZGX1RVTjpcbiBcdFx0aWYgKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX05PX1BJKSB7XG4tXHRcdFx0dTggaXBfdmVyc2lvbiA9IHNrYi1cdTAwM2VsZW4gPyAoc2tiLVx1MDAzZWRhdGFbMF0gXHUwMDNlXHUwMDNlIDQpIDogMDtcbitcdFx0XHR1OCBpcF92ZXJzaW9uO1xuK1xuK1x0XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDEpKSB7XG4rXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byBkcm9wO1xuK1x0XHRcdH1cbitcdFx0XHRpcF92ZXJzaW9uID0gc2tiLVx1MDAzZWRhdGFbMF0gXHUwMDNlXHUwMDNlIDQ7XG4gXG4gXHRcdFx0c3dpdGNoIChpcF92ZXJzaW9uKSB7XG4gXHRcdFx0Y2FzZSA0OlxuQEAgLTE4NDIsNyArMTg1Myw3IEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuIFx0XHRza2ItXHUwMDNlZGV2ID0gdHVuLVx1MDAzZWRldjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElGRl9UQVA6XG4tXHRcdGlmIChmcmFncyBcdTAwMjZcdTAwMjYgIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTikpIHtcbitcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9IRFJfVFJVTkM7XG4gXHRcdFx0Z290byBkcm9wO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjM6MTUuNDc3Mjk5ODA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjExMDMxMTM4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUVU4vVEFQIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIG1ha2luZyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgVFVOL1RBUCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGRyaXZlcnMvbmV0L3R1bi5jYC4gVGhlIGNvcmUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGB0dW5fZ2V0X3VzZXJgLiBUaGlzIHN1Z2dlc3RzIHRoZXkgYXJlIGFkZHJlc3NpbmcgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGhlYWRyb29tIG1hbmFnZW1lbnQgYW5kIGRhdGEgcmV0cmlldmFsLlxuXG5MZXQncyBkaXZlIGludG8gYHR1bl9zZXRfaGVhZHJvb21gLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGEgc2ltcGxlIG1pbmltdW0gY2hlY2sgd2l0aCBhIG1vcmUgcm9idXN0IGNsYW1waW5nIG1lY2hhbmlzbS4gSW5zdGVhZCBvZiBqdXN0IGVuc3VyaW5nIGBuZXdfaHJgIGlzIGF0IGxlYXN0IGBORVRfU0tCX1BBRGAsIGl0IG5vdyBjYWxjdWxhdGVzIGEgYG1heF9oZWFkcm9vbWAgYmFzZWQgb24gYFNLQl9NQVhfSEVBRGAsIGBVMTZfTUFYYCwgYW5kIGFkanVzdHMgaXQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQncyBhIFRBUCBpbnRlcmZhY2UgKHN1YnRyYWN0aW5nIGBFVEhfSExFTiArIE5FVF9JUF9BTElHTmApIG9yIFRVTiBpbnRlcmZhY2UuIEl0IHRoZW4gY2xhbXBzIGBuZXdfaHJgIGJldHdlZW4gYE5FVF9TS0JfUEFEYCBhbmQgdGhpcyBjYWxjdWxhdGVkIGBtYXhfaGVhZHJvb21gLiBUaGlzIHN1Z2dlc3RzIHRoZXkncmUgYWltaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgZXhjZXNzaXZlIGhlYWRyb29tIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNvbnN0cmFpbnRzIG9mIGRpZmZlcmVudCBpbnRlcmZhY2UgdHlwZXMuIFRoaXMgY2xhbXBpbmcgaXMgbXVjaCBtb3JlIHNlbnNpYmxlLlxuXG5Nb3ZpbmcgdG8gYHR1bl9nZXRfdXNlcmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB0dW5fY2hyX3dyaXRlX2l0ZXJgLCBJIHNlZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgYm90aCBUVU4gYW5kIFRBUCBpbnRlcmZhY2VzIGluIHRoZSBJRkZfTk9fUEkgY2FzZS4gSW4gdGhlIFRVTiBjYXNlLCB0aGVyZSdzIG5vdyBhIGNoZWNrIHVzaW5nIGBwc2tiX21heV9wdWxsYCB0byBlbnN1cmUgdGhhdCB0aGVyZSdzIGF0IGxlYXN0IG9uZSBieXRlIGF2YWlsYWJsZSB0byByZWFkIHRoZSBJUCB2ZXJzaW9uLiBUaGlzIGxvb2tzIGxpa2UgYSBuZWNlc3Nhcnkgc2FuaXR5IGNoZWNrLCBhbmQgcHJldmVudGluZyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaXMgYWx3YXlzIGEgZ29vZCB0aGluZy5cblxuSW4gdGhlIFRBUCBjYXNlLCB0aGUgYHBza2JfbWF5X3B1bGxgIGNoZWNrIGlzIGFwcGxpZWQgdW5jb25kaXRpb25hbGx5IGJlZm9yZSByZWFkaW5nIHRoZSBFdGhlcm5ldCBoZWFkZXIsIHdoaWNoIHNlZW1zIGxpa2UgYSBtdWNoIHN0cm9uZ2VyIGNoZWNrLiBJZiBpdCBmYWlscywgdGhlIHBhY2tldCBpcyBkcm9wcGVkIHdpdGggYFNLQl9EUk9QX1JFQVNPTl9IRFJfVFJVTkNgLiBBZ2FpbiwgdGhpcyBwcmV2ZW50cyBwb3NzaWJsZSByZWFkcyBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGUgU0tCLCB3aGljaCBpcyBjcml0aWNhbC5cblxuU28sIGluIHN1bW1hcnksIHRoZXNlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIGFpbWVkIGF0IGZpeGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMgcmVsYXRlZCB0byBoZWFkcm9vbSBhbmQgZGF0YSBhY2Nlc3MgaW4gdGhlIFRVTi9UQVAgZHJpdmVyLiBUaGUgY29kZSBub3cgY2xhbXBzIHRoZSBoZWFkcm9vbSBhbmQgcGVyZm9ybXMgYmV0dGVyIGJvdW5kcyBjaGVja2luZy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gZXhhY3RseSBob3cgYHR1bl9zZXRfaGVhZHJvb21gIGlzIGJlaW5nIGNhbGxlZCwgYnV0IHRoZSBkaXJlY3Rpb24gaGVyZSBpcyBnb29kIGFuZCBwb2ludHMgdG8gZml4aW5nIHNvbWUgc2lnbmlmaWNhbnQgcmVsaWFiaWxpdHkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjM6MzYuNTgwNDE3OTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjEyNzgwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fc2V0X2hlYWRyb29tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTEwOTk9c3RhdGljIG5ldGRldl9mZWF0dXJlc190IHR1bl9uZXRfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMTA2LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjExMDc6c3RhdGljIHZvaWQgdHVuX3NldF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X2hyKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTExMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTE4OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR1bl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTE5NS1cXHQubmRvX3NlbGVjdF9xdWV1ZVxcdD0gdHVuX3NlbGVjdF9xdWV1ZSxcXG5kcml2ZXJzL25ldC90dW4uYzoxMTk2OlxcdC5uZG9fc2V0X3J4X2hlYWRyb29tXFx0PSB0dW5fc2V0X2hlYWRyb29tLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTExOTctXFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gdHVuX25ldF9nZXRfc3RhdHM2NCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEyNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyODMtXFx0Lm5kb19mZWF0dXJlc19jaGVja1xcdD0gcGFzc3RocnVfZmVhdHVyZXNfY2hlY2ssXFxuZHJpdmVycy9uZXQvdHVuLmM6MTI4NDpcXHQubmRvX3NldF9yeF9oZWFkcm9vbVxcdD0gdHVuX3NldF9oZWFkcm9vbSxcXG5kcml2ZXJzL25ldC90dW4uYy0xMjg1LVxcdC5uZG9fYnBmXFx0XFx0PSB0dW5feGRwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyMzozNy4xNDY1NTEzMzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDk2NTc5MDMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRVTi9UQVAgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGB0dW5fZ2V0X3VzZXJgIHdpdGhpbiBgZHJpdmVycy9uZXQvdHVuLmNgLiBJbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCBgdHVuX3NldF9oZWFkcm9vbWAgaXMgZ2V0dGluZyBhIGNsYW1wLCBwcmVzdW1hYmx5IHRvIGVuc3VyZSB0aGUgaGVhZHJvb20gZG9lc24ndCBleGNlZWQgc29tZSBzYW5lIG1heGltdW0uIE1ha2VzIHNlbnNlLCBjb3VsZCBwcmV2ZW50IG92ZXJmbG93IGlzc3Vlcy4gQW5kIHRoZW4gYHR1bl9nZXRfdXNlcmAgaXMgc2VlaW5nIHNvbWUgYHBza2JfbWF5X3B1bGxgIGNoZWNrcyBiZWluZyBhZGRlZC4gUmlnaHQsIHRoYXQncyBpbXBvcnRhbnQgZm9yIGVuc3VyaW5nIHdlJ3JlIG5vdCB0cnlpbmcgdG8gcHVsbCBkYXRhIGZyb20gYSBwYWNrZXQgYnVmZmVyIHRoYXQgZG9lc24ndCBhY3R1YWxseSBleGlzdCwgb3IgdGhhdCB3ZSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzLiBUaGVzZSBhcmUgcHJldHR5IHN0YW5kYXJkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0ZWNobmlxdWVzLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgZHJpdmVyLCB0aGF0J3MgZ29vZC4gV2hpY2ggbWVhbnMsIGl0J3Mgc29tZXRoaW5nIEkgY2FuIGFic29sdXRlbHkgZnV6ei4gVGhlIFRVTi9UQVAgZHJpdmVyIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIGFueXdheS4gQm90aCBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGB0dW5fZ2V0X3VzZXJgIG5vdyBuZWVkIHRvIGJlIHN1YmplY3RlZCB0byBpbnRlbnNlIHNjcnV0aW55LiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBsb29rcyBsaWtlIGZvciBgZHJpdmVycy9uZXQvdHVuLmNgIHRvIGNvbmZpcm0gbXkgZnV6emluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyMzo1OC4xMTIzNDM5NTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc2NTcxNTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUVU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzkxOmNvbmZpZyBUVU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5Mi1cXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz00MTU9Y29uZmlnIFRBUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MjE6Y29uZmlnIFRVTl9WTkVUX0NST1NTX0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjItXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY3Jvc3MtZW5kaWFuIHZuZXQgaGVhZGVycyBvbiBsaXR0bGUtZW5kaWFuIGtlcm5lbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjIzOjU4Ljg4ODkyMTkxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNDUwNTQ2NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFVOIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBUVU5gIGNvbmZpZ3VyYXRpb24gYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIGludGVyYWN0IHdpdGggaXQuIFRoZSBndWlkYW5jZSBpcyBwb2ludGluZyBtZSB0b3dhcmRzIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYHR1bl9nZXRfdXNlcmAgYXMga2V5IGFyZWFzIHRvIGV4YW1pbmUuIEhtbSwgaGFuZyBvbiBhIHNlY29uZC4gSXQgbG9va3MgbGlrZSBgdHVuX3NldF9oZWFkcm9vbWAgaXMgYWN0dWFsbHkgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBhIGJpdCBvZiBhIHJlZCBmbGFnLCBiZWNhdXNlIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy5cblxuV2FpdCBhIG1pbnV0ZSwgYWx0aG91Z2ggaXQncyBzdGF0aWMsIGl0ICppcyogYXNzaWduZWQgdG8gYC5uZG9fc2V0X3J4X2hlYWRyb29tYC4gU28sIHRoZXJlJ3MgYSByZWFzb24gaXQncyB1c2VkLiBUaGUgcXVlc3Rpb24gbm93IGlzLCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgd3JhcHBlciBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LiBJJ2xsIGNoZWNrIHdoZXJlIGAubmRvX3NldF9yeF9oZWFkcm9vbWAgaXMgYWN0dWFsbHkgdXNlZCBhbmQgc2VlIGlmIHRoYXQgcmV2ZWFscyBhIG1vcmUgc3VpdGFibGUgZW50cnkgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjQ6MjAuMzM5NDcyMDE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODQxNTcwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRvX3NldF9yeF9oZWFkcm9vbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0a2l0LmM9MzMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0a2l0X25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYy0zMzYtXFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gbmV0a2l0X3NldF9tdWx0aWNhc3QsXFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MzM3OlxcdC5uZG9fc2V0X3J4X2hlYWRyb29tXFx0PSBuZXRraXRfc2V0X2hlYWRyb29tLFxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzOC1cXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gbmV0a2l0X3NldF9tYWNhZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTE4OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR1bl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTE5NS1cXHQubmRvX3NlbGVjdF9xdWV1ZVxcdD0gdHVuX3NlbGVjdF9xdWV1ZSxcXG5kcml2ZXJzL25ldC90dW4uYzoxMTk2OlxcdC5uZG9fc2V0X3J4X2hlYWRyb29tXFx0PSB0dW5fc2V0X2hlYWRyb29tLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTExOTctXFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gdHVuX25ldF9nZXRfc3RhdHM2NCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEyNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyODMtXFx0Lm5kb19mZWF0dXJlc19jaGVja1xcdD0gcGFzc3RocnVfZmVhdHVyZXNfY2hlY2ssXFxuZHJpdmVycy9uZXQvdHVuLmM6MTI4NDpcXHQubmRvX3NldF9yeF9oZWFkcm9vbVxcdD0gdHVuX3NldF9oZWFkcm9vbSxcXG5kcml2ZXJzL25ldC90dW4uYy0xMjg1LVxcdC5uZG9fYnBmXFx0XFx0PSB0dW5feGRwLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTE3MDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2ZXRoX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtMTcyMy1cXHQubmRvX2ZlYXR1cmVzX2NoZWNrXFx0PSBwYXNzdGhydV9mZWF0dXJlc19jaGVjayxcXG5kcml2ZXJzL25ldC92ZXRoLmM6MTcyNDpcXHQubmRvX3NldF9yeF9oZWFkcm9vbVxcdD0gdmV0aF9zZXRfcnhfaGVhZHJvb20sXFxuZHJpdmVycy9uZXQvdmV0aC5jLTE3MjUtXFx0Lm5kb19icGZcXHRcXHQ9IHZldGhfeGRwLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDY0PXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTM5Ni0gKlxcdHNhbXBsaW5nIHBhY2tldC5cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjEzOTc6ICogdm9pZCAoKm5kb19zZXRfcnhfaGVhZHJvb20pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZWVkZWRfaGVhZHJvb20pO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTM5OC0gKlxcdFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBoZWFkcm9vbSB0aGF0IHRoZSBza2IgbXVzdFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xNDQ4PXN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE2NzQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTY3NTpcXHR2b2lkXFx0XFx0XFx0KCpuZG9fc2V0X3J4X2hlYWRyb29tKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTY3Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IG5lZWRlZF9oZWFkcm9vbSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTI3NTQ9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9zZXRfcnhfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19ocilcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI3NTUte1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6Mjc1NjpcXHRpZiAoZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0X3J4X2hlYWRyb29tKVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6Mjc1NzpcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXRfcnhfaGVhZHJvb20oZGV2LCBuZXdfaHIpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjc1OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI0OjIyLjEyMzYzNDM0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNzE3MjkxNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgT3JpZ2lucyBvZiBgbmV0ZGV2X3NldF9yeF9oZWFkcm9vbWAqKlxuXG5Pa2F5LCBzbyBgbmV0ZGV2X3NldF9yeF9oZWFkcm9vbWAgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIldoZXJlIGlzIHRoaXMgY2FsbGVkIGZyb20/XCIgVGhhdCdzIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIGNvZGUuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlciBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgKndoeSogb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGNvbnRleHRzIGluIHRoZSBkcml2ZXIgb3IgbmV0d29ya2luZyBzdGFjayB3aGVyZSBpdCdzIGludm9rZWQuIEkga25vdyBob3cgdG8gdXNlIGdyZXAgYW5kIG90aGVyIHRvb2xzIHRvIGZpbmQgdXNhZ2VzLCBidXQgSSBuZWVkIHRvIGRvIHNvIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NzIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyNDo0My44NDA5Mjg2MzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTk4OTM3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X3NldF9yeF9oZWFkcm9vbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yNzQ5PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmV0ZGV2X2dldF9md2RfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjc1My1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjI3NTQ6c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9zZXRfcnhfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19ocilcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI3NTUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yNzYxPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfcmVzZXRfcnhfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI3NjIte1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6Mjc2MzpcXHRuZXRkZXZfc2V0X3J4X2hlYWRyb29tKGRldiwgLTEpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjc2NC19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM9MzE1PXN0YXRpYyB2b2lkIHVwZGF0ZV9oZWFkcm9vbShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGludCBuZXdfaHIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzE5LVxcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXFx1MDAyNmJyLVxcdTAwM2Vwb3J0X2xpc3QsIGxpc3QpXFxubmV0L2JyaWRnZS9icl9pZi5jOjMyMDpcXHRcXHRuZXRkZXZfc2V0X3J4X2hlYWRyb29tKHAtXFx1MDAzZWRldiwgbmV3X2hyKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzIxLVxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jPTU2MD1pbnQgYnJfYWRkX2lmKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy02NTItXFx0ZWxzZVxcbm5ldC9icmlkZ2UvYnJfaWYuYzo2NTM6XFx0XFx0bmV0ZGV2X3NldF9yeF9oZWFkcm9vbShkZXYsIGJyX2hyKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtNjU0LVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMyNj1zdGF0aWMgdm9pZCBvdnNfdXBkYXRlX2hlYWRyb29tKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHVuc2lnbmVkIGludCBuZXdfaGVhZHJvb20pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMzM0LVxcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX292c2xfaXNfaGVsZCgpKVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjIzMzU6XFx0XFx0XFx0bmV0ZGV2X3NldF9yeF9oZWFkcm9vbSh2cG9ydC1cXHUwMDNlZGV2LCBuZXdfaGVhZHJvb20pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIzMzYtXFx0fVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMzOT1zdGF0aWMgaW50IG92c192cG9ydF9jbWRfbmV3KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDE2LVxcdGVsc2VcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNDE3OlxcdFxcdG5ldGRldl9zZXRfcnhfaGVhZHJvb20odnBvcnQtXFx1MDAzZWRldiwgZHAtXFx1MDAzZW1heF9oZWFkcm9vbSk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjQ6NDYuMTAwODU4MzYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMDkyNjU5MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRHJpdmVyIEhlYWRyb29tIGFuZCBUdW5uZWwgQmVoYXZpb3IqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCBgbmV0ZGV2X3NldF9yeF9oZWFkcm9vbWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBicmlkZ2UgYW5kIE9wZW4gdlN3aXRjaCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGNvbnRleHQgbGF0ZXIuIE5vdywgd2hhdCBhYm91dCB0aGF0IG90aGVyIGZ1bmN0aW9uLCBgdHVuX2dldF91c2VyYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCdzIGJlaW5nIGludm9rZWQuIEl0J3Mgb2Z0ZW4gdGhlIGNhc2UgdGhhdCBzZWVtaW5nbHkgaW5ub2N1b3VzIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGluIG11bHRpcGxlIHBsYWNlcywgY3JlYXRpbmcgdW5mb3Jlc2VlbiBpbnRlcmFjdGlvbnMuIFNvLCBsZXQgbWUgcXVpY2tseSB0cmFjZSBpdHMgY2FsbCBwYXRocyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBvdmVyYWxsIGltcGFjdC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG1vcmUgZXN0YWJsaXNoZWQgcGllY2VzIG9mIGNvZGUgdGhhdCBJIGtub3cgYmV0dGVyLiBUaGF04oCZcyBwcm9iYWJseSB0aGUgYmVzdCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY2NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI1OjA4LjE5MzUyMDM2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5Nzc4NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9nZXRfdXNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0xNjAzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdHVuX2J1aWxkX3NrYihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTY5OS0vKiBHZXQgcGFja2V0IGZyb20gdXNlciBzcGFjZSBidWZmZXIgKi9cXG5kcml2ZXJzL25ldC90dW4uYzoxNzAwOnN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTE3MDEtXFx0XFx0XFx0ICAgIHZvaWQgKm1zZ19jb250cm9sLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xOTk4PXN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIwMTEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjAxMjpcXHRyZXN1bHQgPSB0dW5fZ2V0X3VzZXIodHVuLCB0ZmlsZSwgTlVMTCwgZnJvbSwgbm9ibG9jaywgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIwMTMtXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0yNTI2PXN0YXRpYyBpbnQgdHVuX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI1NzItXFxuZHJpdmVycy9uZXQvdHVuLmM6MjU3MzpcXHRyZXQgPSB0dW5fZ2V0X3VzZXIodHVuLCB0ZmlsZSwgY3RsID8gY3RsLVxcdTAwM2VwdHIgOiBOVUxMLCBcXHUwMDI2bS1cXHUwMDNlbXNnX2l0ZXIsXFxuZHJpdmVycy9uZXQvdHVuLmMtMjU3NC1cXHRcXHRcXHQgICBtLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI1OjA4Ljk3MzMxMTI5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTQ1MjU3OTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgZGF0YSBmbG93IHdpdGhpbiB0aGlzIFRVTiBkcml2ZXIsIGFuZCBpdCBsb29rcyBsaWtlIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGFuZCBgdHVuX3NlbmRtc2dgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cy4gYHR1bl9jaHJfd3JpdGVfaXRlcmAsIHJpZ2h0LCB0aGF0J3MgdGhlIGAud3JpdGVfaXRlcmAgbWV0aG9kIHdpdGhpbiBgdHVuX2ZvcHNgLCBhbmQgYHR1bl9zZW5kbXNnYCBjb3JyZXNwb25kcyB0byB0aGUgYC5zZW5kbXNnYCBtZXRob2QgaW4gYHR1bl9wcm90b19vcHNgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIG15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrLlxuXG5Ob3csIGEgcmVkIGZsYWchIEkgc2VlIGB0dW5fZ2V0X3VzZXJgIGluIHRoaXMgY29udGV4dCwgYW5kIGl0IGxvb2tzIHByZXR0eSBzdWJzdGFudGlhbC4gSXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGltcGxpZXMgaXQncyBub3QgYSBkaXJlY3QsIGV4dGVybmFsIEFQSSBlbnRyeSBwb2ludC4gVGhlIGluc3RydWN0aW9ucyAqZG8qIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG92ZXIgdGhlc2UgaW50ZXJuYWwgaGVscGVycy4gSG1tLi4uc2hvdWxkIEkgaW5jbHVkZSBgdHVuX2dldF91c2VyYCBpbiBteSBhbmFseXNpcywgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWM/IEkgc2hvdWxkIGNoZWNrIGlmIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGFuZCBgdHVuX3NlbmRtc2dgIGFyZSBhY3R1YWxseSBub24tc3RhdGljIC0gdGhhdCB3b3VsZCBiZSB0aGUgZGVjaWRpbmcgZmFjdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI1OjMwLjQyNTg5MzI3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNDMzNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9jaHJfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0xNzAwPXN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTk5Ny1cXG5kcml2ZXJzL25ldC90dW4uYzoxOTk4OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5kcml2ZXJzL25ldC90dW4uYy0xOTk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM0ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNDgyLVxcdC5yZWFkX2l0ZXIgID0gdHVuX2Nocl9yZWFkX2l0ZXIsXFxuZHJpdmVycy9uZXQvdHVuLmM6MzQ4MzpcXHQud3JpdGVfaXRlciA9IHR1bl9jaHJfd3JpdGVfaXRlcixcXG5kcml2ZXJzL25ldC90dW4uYy0zNDg0LVxcdC5wb2xsXFx0PSB0dW5fY2hyX3BvbGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI1OjMwLjU3NjMzMzY0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODU3MTc2MzcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjY5MzksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI1OjQ5LjE0ODA5OTc2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyNjY3NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTIzOTA9c3RhdGljIGludCB0dW5feGRwX29uZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjUyNS1cXG5kcml2ZXJzL25ldC90dW4uYzoyNTI2OnN0YXRpYyBpbnQgdHVuX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG5kcml2ZXJzL25ldC90dW4uYy0yNTI3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI2NTA9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdHVuX3NvY2tldF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjY1MS1cXHQucGVla19sZW4gPSB0dW5fcGVla19sZW4sXFxuZHJpdmVycy9uZXQvdHVuLmM6MjY1MjpcXHQuc2VuZG1zZyA9IHR1bl9zZW5kbXNnLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTI2NTMtXFx0LnJlY3Ztc2cgPSB0dW5fcmVjdm1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjU6NDkuNzAwNzczMTM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMjMwODM5OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgUmVsZXZhbnQgS2VybmVsIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCB0byBmb2N1cyBvbi4gQm90aCBgZmlsZV9vcGVyYXRpb25zYCBhbmQgYHByb3RvX29wc2AgYXJlIHN0YXRpYywgYnV0IHRoZXkncmUgYXNzaWduZWQsIHNvIHRoZXkncmUgZGVmaW5pdGVseSBlbnRyeSBwb2ludHMuIFRoYXQncyBnb29kIHRvIGtub3cuIEknbGwgbWFrZSBzdXJlIHRvIGFkZCBgdHVuX2Nocl93cml0ZV9pdGVyYCBhbmQgYHR1bl9zZW5kbXNnYCB0byBteSBGb2N1c1N5bWJvbHMgbGlzdC5cblxuTm93LCB3aGF0IGFib3V0IGB0dW5fc2V0X2hlYWRyb29tYD8gSXQncyBhc3NpZ25lZCB0byBgbmRvX3NldF9yeF9oZWFkcm9vbWAsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gY29uc2lkZXIuIFRoZSB3cmFwcGVyIGlzIGBuZXRkZXZfc2V0X3J4X2hlYWRyb29tYCwgd2hpY2ggaXMgaW5saW5lLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnM6IGB1cGRhdGVfaGVhZHJvb21gIGFuZCBgYnJfYWRkX2lmYCB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfaWYuY2AsIHBsdXMgYG92c191cGRhdGVfaGVhZHJvb21gIGFuZCBgb3ZzX3Zwb3J0X2NtZF9uZXdgIGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFNpbmNlIGBuZXRkZXZfc2V0X3J4X2hlYWRyb29tYCBpcyBpbmxpbmVkLCBidXQgdGhlc2UgYXJlIGFsbCBjYWxsaW5nIGl0LCBJIHRoaW5rIEkgY2FuIHNhZmVseSBhZGQgYGJyX2FkZF9pZmAgYW5kIGBvdnNfdnBvcnRfY21kX25ld2AgdG8gdGhlIGxpc3QuXG5cbldhaXQgYSBzZWNvbmQuIGB0dW5fc2V0X2hlYWRyb29tYCBpcyBhY3R1YWxseSBzdGF0aWMgd2l0aGluIGBkcml2ZXJzL25ldC90dW4uY2AuIFRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzLiBJZiBpdCdzIHN0YXRpYyBhbmQgaW5saW5lZCwgdGhlIGZ1enplciBtaWdodCBtaXNzIGl0LiBIb3dldmVyLCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgc28gaXQncyAqbm90KiBpbmxpbmVkLiBJIHdhcyByaWdodCB0byBmb2N1cyBvbiBpdC4gSSdsbCBhZGQgYHR1bl9jaHJfd3JpdGVfaXRlcmAsIGB0dW5fc2VuZG1zZ2AsIGBicl9hZGRfaWZgLCBhbmQgYG92c192cG9ydF9jbWRfbmV3YCB0byB0aGUgRm9jdXNTeW1ib2xzLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgYHR1bl9nZXRfdXNlcmAgdG9vLiBJdCdzIGEgbGFyZ2UgZnVuY3Rpb24sIHNvIGl0J3MgcHJvYmFibHkgbm90IGlubGluZWQuIE1pZ2h0IGJlIHdvcnRoIGNoZWNraW5nIHRvIGJlIHN1cmUsIGJ1dCBJIHRoaW5rIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGFuZCBgdHVuX3NlbmRtc2dgIGFyZSBzb2xpZCBlbnRyeSBwb2ludHMgcmVnYXJkbGVzcy4gSXQncyB0aW1lIHRvIGNoZWNrIEtjb25maWcsIG1ha2Ugc3VyZSBJIGhhdmUgYnJpZGdlIGFuZCBvcGVudnN3aXRjaCB0dXJuZWQgb24gaW4gdGhlIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyNjowOS45MzE2MTUxNDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDgxMzA1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL0tjb25maWctNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXFxubmV0L2JyaWRnZS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIjgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo1MDpjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTYzLVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxcbm5ldC9icmlkZ2UvS2NvbmZpZy02NS1cXHRib29sIFxcXCJNUlAgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXFxubmV0L2JyaWRnZS9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIkNGTSBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjY6MTAuNzAyNDM0Njk0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MDY1MTg0NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6Nzk0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjY6MjguNzY3NjI0Mjk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAzMTA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI2OjI4LjgxNTY2MDk3NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTI2MDI4ODMwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBkcml2ZXJzL25ldC90dW4uY2AsIHNwZWNpZmljYWxseSBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGB0dW5fZ2V0X3VzZXJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5GaXJzdCwgYHR1bl9zZXRfaGVhZHJvb21gIGdldHMgY2FsbGVkIGluZGlyZWN0bHkgdGhyb3VnaCBgbmRvX3NldF9yeF9oZWFkcm9vbWAgd2hpY2ggaXMgYXNzaWduZWQgdG8gaXQsIGZvciBib3RoIGB0dW5gIGFuZCBgdGFwYCBkZXZpY2VzLiBOb3csIGBuZG9fc2V0X3J4X2hlYWRyb29tYCBpcyB0cmlnZ2VyZWQgYnkgYG5ldGRldl9zZXRfcnhfaGVhZHJvb21gLCB3aGljaCB3ZSBzZWUgdXNlZCBpbiBib3RoIGBuZXQvYnJpZGdlL2JyX2lmLmNgICh2aWEgYHVwZGF0ZV9oZWFkcm9vbWApIGFuZCBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgICh2aWEgYG92c191cGRhdGVfaGVhZHJvb21gKS4gIFNvLCB0byB0ZXN0IGB0dW5fc2V0X2hlYWRyb29tYCBlZmZlY3RpdmVseSwgSSdsbCBuZWVkIGBUVU5gIGNvbmZpZ3VyZWQsIGFuZCBhdCBsZWFzdCBvbmUgb2YgZWl0aGVyIGBCUklER0VgIG9yIGBPUEVOVlNXSVRDSGAuIFRoYXQncyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBvdXIgZnV6emluZyBjb25maWd1cmF0aW9uLlxuXG5UaGVuIHRoZXJlJ3MgYHR1bl9nZXRfdXNlcmAuIFRoaXMgb25lIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQncyBjYWxsZWQgYnkgYHR1bl9jaHJfd3JpdGVfaXRlcmAgKHdoaWNoIGlzIHJlYWNoZWQgdmlhIHRoZSBgd3JpdGUoKWAgc3lzdGVtIGNhbGwgb24gYC9kZXYvbmV0L3R1bmApIGFuZCBgdHVuX3NlbmRtc2dgICh1c2luZyBgc2VuZG1zZygpYCBvbiBhIHR1biBzb2NrZXQpLiBUaGUgcGF0Y2ggYWRkcyBhIGBwc2tiX21heV9wdWxsKClgIGNhbGwgaW4gYHR1bl9nZXRfdXNlcmAuIFRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlYWxpbmcgd2l0aCBwYWNrZXQgcGFyc2luZywgc28gaXQncyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGFyZWFzIGZvciBmdXp6aW5nIHdpbGwgYmUgYHR1bl9zZXRfaGVhZHJvb21gLCBgdHVuX2dldF91c2VyYCwgYHR1bl9jaHJfd3JpdGVfaXRlcmAgYW5kIGB0dW5fc2VuZG1zZ2AsIGFzIHRoZXkgYXJlIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBjaGFuZ2VzLiAgSeKAmWxsIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCBgVFVOYCwgYEJSSURHRWAgYW5kIGBPUEVOVlNXSVRDSGAgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgdG8gY292ZXIgYWxsIHRoZSBjYWxsIHBhdGhzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgbmV0ZGV2X3NldF9yeF9oZWFkcm9vbWAgaGFzIGFueSBvdGhlciBjYWxsZXJzLiBPa2F5LCB0aGUgaW5saW5lIHdyYXBwZXIgaW4gYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgIGRvZXNuJ3QgcHJvdmlkZSBhbnl0aGluZyBhZGRpdGlvbmFsLiBgQlJJREdFYCBhbmQgYE9QRU5WU1dJVENIYCBhcmUgc3VmZmljaWVudC5cblxuTm93LCBsZXQncyByZWZpbmUgdGhpcyBhIGJpdCBmdXJ0aGVyLiBUaGUgY2hhbmdlcyBtb2RpZnkgaGVhZHJvb20gY2FsY3VsYXRpb24gYW5kIGFkZCBwYWNrZXQgaGVhZGVyIGNoZWNrcy4gVGhlc2UgYXJlIGFjY2Vzc2libGUgdmlhIGB3cml0ZSgpYCBvciBgc2VuZG1zZygpYCB0byB0aGUgVFVOIGRldmljZSwgYXMgd2VsbCBhcyB3aGVuIGJyaWRnaW5nIG9yIHVzaW5nIE9wZW4gdlN3aXRjaCB0byBhdHRhY2ggdGhlIFRVTiBkZXZpY2UsIHdoaWNoIHVzZXMgdGhlIGBuZG9fc2V0X3J4X2hlYWRyb29tYC4gR2l2ZW4gdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBob3cgcGFja2V0cyBhcmUgcHJvY2Vzc2VkIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiBpcyBoYW5kbGVkLCBJJ20gY29uZmlkZW50IHRoYXQgZnV6emluZyBoZXJlIGlzIGdvaW5nIHRvIGJlIHdvcnRod2hpbGUuXG5cblRoZXJlZm9yZSwgZm9yIHRoaXMgZnV6emluZyBjYW1wYWlnbiwgSSdsbCBzZXQ6XG5cbiogICAqKkZvY3VzIFN5bWJvbHM6KiogYHR1bl9zZXRfaGVhZHJvb21gLCBgdHVuX2dldF91c2VyYCwgYHR1bl9jaHJfd3JpdGVfaXRlcmAsIGB0dW5fc2VuZG1zZ2BcbiogICAqKkVuYWJsZWQgQ29uZmlnczoqKiBgVFVOYCwgYEJSSURHRWAsIGBPUEVOVlNXSVRDSGBcblxuXG4iLCJJbnB1dFRva2VucyI6ODIyOSwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjY6NTguMDc1OTUyMjcyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxODkyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiQlJJREdFXCIsXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9zZXRfaGVhZHJvb21cIixcbiAgICBcInR1bl9nZXRfdXNlclwiLFxuICAgIFwidHVuX2Nocl93cml0ZV9pdGVyXCIsXG4gICAgXCJ0dW5fc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRyb29tIGNhbGN1bGF0aW9uIGluIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYWRkcyBwYWNrZXQgaGVhZGVyIHB1bGwgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIGZvciBUVU4vVEFQIGRldmljZXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBgd3JpdGUoKWAgb3IgYHNlbmRtc2coKWAgdG8gdGhlIFRVTiBkZXZpY2UsIGFuZCB2aWEgYnJpZGdlIG9yIE9wZW4gdlN3aXRjaCBhdHRhY2hpbmcgdGhlIFRVTiBkZXZpY2UgKHdoaWNoIHRyaWdnZXJzIGBuZG9fc2V0X3J4X2hlYWRyb29tYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcGFja2V0IHByb2Nlc3NpbmcgYW5kIGRldmljZSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fc2V0X2hlYWRyb29tXCIsXG4gICAgXCJ0dW5fZ2V0X3VzZXJcIixcbiAgICBcInR1bl9jaHJfd3JpdGVfaXRlclwiLFxuICAgIFwidHVuX3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBoZWFkcm9vbSBjYWxjdWxhdGlvbiBpbiBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGFkZHMgcGFja2V0IGhlYWRlciBwdWxsIGNoZWNrcyBpbiBgdHVuX2dldF91c2VyYCBmb3IgVFVOL1RBUCBkZXZpY2VzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgYHdyaXRlKClgIG9yIGBzZW5kbXNnKClgIHRvIHRoZSBUVU4gZGV2aWNlLCBhbmQgdmlhIGJyaWRnZSBvciBPcGVuIHZTd2l0Y2ggYXR0YWNoaW5nIHRoZSBUVU4gZGV2aWNlICh3aGljaCB0cmlnZ2VycyBgbmRvX3NldF9yeF9oZWFkcm9vbWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI2OjU4LjE1MjE0ODM3MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTIzNzY1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyNjo1OC4xNTI3ODM5NTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEwMTE3Mzc0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cy4gU3BlY2lmaWNhbGx5LCBpdCBjbGFtcHMgdGhlIG1heGltdW0gaGVhZHJvb20gaW4gYHR1bl9zZXRfaGVhZHJvb21gIHRvIHByZXZlbnQgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIG91dC1vZi1ib3VuZHMgYWxsb2NhdGlvbnMsIGFuZCBpdCBhZGRzL21vZGlmaWVzIGBwc2tiX21heV9wdWxsYCBjaGVja3MgaW4gYHR1bl9nZXRfdXNlcmAgdG8gZW5zdXJlIHRoYXQgcGFja2V0IGhlYWRlcnMgYXJlIHNhZmVseSBhY2Nlc3NpYmxlIGluIHRoZSBsaW5lYXIgcG9ydGlvbiBvZiB0aGUgc29ja2V0IGJ1ZmZlciBiZWZvcmUgcmVhZGluZyB0aGVtLiBUaGVzZSBhcmUgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMpIHRoYXQgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlKSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzBkZGNmYWVhYzMyZWU2NTRhMmExYTdmZWQxMmExMWMzYWIxYjkxMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDAyOjIzOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uY1xuaW5kZXggZmVkOWRmZGZjYzNiYy4uNWJiZTMxMjM5NzllMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXG4rKysgYi9kcml2ZXJzL25ldC90dW4uY1xuQEAgLTExMDcsMTEgKzExMDcsMTYgQEAgc3RhdGljIG5ldGRldl9mZWF0dXJlc190IHR1bl9uZXRfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIHZvaWQgdHVuX3NldF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X2hyKVxuIHtcbiBcdHN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c2l6ZV90IG1heF9oZWFkcm9vbTtcbiBcbi1cdGlmIChuZXdfaHIgXHUwMDNjIE5FVF9TS0JfUEFEKVxuLVx0XHRuZXdfaHIgPSBORVRfU0tCX1BBRDtcbitcdG1heF9oZWFkcm9vbSA9IG1pbl90KHNpemVfdCwgU0tCX01BWF9IRUFEKDApLCBVMTZfTUFYIC0gMSk7XG4gXG4tXHR0dW4tXHUwMDNlYWxpZ24gPSBuZXdfaHI7XG4rXHRpZiAoKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgVFVOX1RZUEVfTUFTSykgPT0gSUZGX1RBUClcbitcdFx0bWF4X2hlYWRyb29tIC09IEVUSF9ITEVOICsgTkVUX0lQX0FMSUdOO1xuK1x0ZWxzZVxuK1x0XHRtYXhfaGVhZHJvb20gLT0gMTtcbitcbitcdHR1bi1cdTAwM2VhbGlnbiA9IGNsYW1wX3QoaW50LCBuZXdfaHIsIE5FVF9TS0JfUEFELCBtYXhfaGVhZHJvb20pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZFxuQEAgLTE4MjIsNyArMTgyNywxMyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiBcdHN3aXRjaCAodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBUVU5fVFlQRV9NQVNLKSB7XG4gXHRjYXNlIElGRl9UVU46XG4gXHRcdGlmICh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9OT19QSSkge1xuLVx0XHRcdHU4IGlwX3ZlcnNpb24gPSBza2ItXHUwMDNlbGVuID8gKHNrYi1cdTAwM2VkYXRhWzBdIFx1MDAzZVx1MDAzZSA0KSA6IDA7XG4rXHRcdFx0dTggaXBfdmVyc2lvbjtcbitcbitcdFx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkge1xuK1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRcdGdvdG8gZHJvcDtcbitcdFx0XHR9XG4rXHRcdFx0aXBfdmVyc2lvbiA9IHNrYi1cdTAwM2VkYXRhWzBdIFx1MDAzZVx1MDAzZSA0O1xuIFxuIFx0XHRcdHN3aXRjaCAoaXBfdmVyc2lvbikge1xuIFx0XHRcdGNhc2UgNDpcbkBAIC0xODQyLDcgKzE4NTMsNyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiBcdFx0c2tiLVx1MDAzZWRldiA9IHR1bi1cdTAwM2VkZXY7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJRkZfVEFQOlxuLVx0XHRpZiAoZnJhZ3MgXHUwMDI2XHUwMDI2ICFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7XG4rXHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOKSkge1xuIFx0XHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fSERSX1RSVU5DO1xuIFx0XHRcdGdvdG8gZHJvcDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI2OjU4LjE1Mjc4NDgxMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAxMTcxNTg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB0dW4uY2AgUGF0Y2g6IEEgS0FTQU4vVUJTQU4gRm9jdXMqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoZXNlIGNoYW5nZXMgdG8gYGRyaXZlcnMvbmV0L3R1bi5jYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBmb2N1c2VkIG9uIGhhcmRlbmluZyBhZ2FpbnN0IEtBU0FOIGFuZCBVQlNBTiByZXBvcnRzLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkIGdpdmVuIHRoZSBjb2RlIGxvY2F0aW9ucy5cblxuRmlyc3QsIGluIGB0dW5fc2V0X2hlYWRyb29tYCwgdGhleSdyZSByZXN0cmljdGluZyB0aGUgbWF4aW11bSBoZWFkcm9vbSB1c2luZyBgY2xhbXBfdGAuIExvb2tpbmcgYXQgdGhlIGxvZ2ljLCB0aGUgaW50ZW50IGlzIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBvdXQtb2YtYm91bmRzIGlzc3VlIGR1cmluZyBTS0IgYWxsb2NhdGlvbiBieSBzZXR0aW5nIGEgaGFyZCBsaW1pdCBmb3IgaGVhZHJvb20uIFRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIHJldmlzZWQgY2FsY3VsYXRpb24gb2YgYG1heF9oZWFkcm9vbWAsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHR5cGUgb2YgaW50ZXJmYWNlIChgSUZGX1RBUGAgdnMgYElGRl9UVU5gKS4gVGhlIGNsYW1waW5nIGVuc3VyZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgcmVtYWlucyB3aXRoaW4gc2FmZSBib3VuZHMuXG5cblNlY29uZCwgdGhlIGB0dW5fZ2V0X3VzZXJgIGZ1bmN0aW9uIGZvciBgSUZGX1RVTmAgbm93IGluY2x1ZGVzIGEgYHBza2JfbWF5X3B1bGwoc2tiLCAxKWAgY2hlY2sgYmVmb3JlIHJlYWRpbmcgYHNrYi1cdTAwM2VkYXRhWzBdYC4gVGhpcyBpcyB0ZXh0Ym9vayBLQVNBTiBtaXRpZ2F0aW9uLiBJdCBwcmV2ZW50cyBhY2Nlc3NpbmcgZGF0YSB0aGF0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgb3IgaXMgb3V0c2lkZSB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gSWYgSSdtIHJlYWRpbmcgdGhpcyBjb3JyZWN0bHksIGl0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5UaGlyZCwgYSBzaW1pbGFyIGZpeCBpcyBhcHBsaWVkIHRvIGB0dW5fZ2V0X3VzZXJgIGZvciBgSUZGX1RBUGAuIFRoZSBjb25kaXRpb25hbCB0aGF0IGhhZCBgZnJhZ3NgIGFuZCBgIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTilgIGhhcyBiZWVuIHNpbXBsaWZpZWQgdG8ganVzdCBgIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTilgLiBUaGlzIGVuc3VyZXMgdGhhdCBgRVRIX0hMRU5gIGJ5dGVzIGFyZSBhdmFpbGFibGUgZm9yIHB1bGxpbmcgZnJvbSB0aGUgU0tCIGJlZm9yZSB0aGV5J3JlIGFjY2Vzc2VkLiBBZ2FpbiwgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLiBUaGUgYW5zd2VyIGlzICpubyouIExvb2tpbmcgY2xvc2VseSBhdCB0aGUgcGF0Y2ggYW5kIG15IGV4cGVyaWVuY2UsIHRoZSBgcHNrYl9tYXlfcHVsbGAgZnVuY3Rpb24gaXNuJ3QgYWJvdXQgaW5pdGlhbGl6aW5nIG1lbW9yeS4gSXQncyBzb2xlbHkgYWJvdXQgZW5zdXJpbmcgZGF0YSBpcyBhY2Nlc3NpYmxlIGluIHRoZSBsaW5lYXIgcGFydCBvZiB0aGUgU0tCIHRvIGF2b2lkIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZSBgdHVuX3NldF9oZWFkcm9vbWAgY2hhbmdlIHNpbXBseSBjYXBzIHRoZSBhbGxvY2F0aW9uIHNpemUsIG5vdCBpdHMgaW5pdGlhbGl6YXRpb24uXG5cblRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGZvY3VzZWQgb24gZWxpbWluYXRpbmcgcG90ZW50aWFsIEtBU0FOL1VCU0FOIGhpdHMgYnkgZW5mb3JjaW5nIGJvdW5kcyBjaGVja3MgYW5kIHJlc3RyaWN0aW5nIGhlYWRyb29tIHRvIHByZXZlbnQgb3ZlcmZsb3dzLCBub3QgYWRkcmVzc2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGV5IGFyZSBhbGwgYWJvdXQgcHJvdGVjdGluZyBhZ2FpbnN0IGtub3duIHZ1bG5lcmFiaWxpdGllcy4gSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgTmVlZHNLTVNBTiB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MSwiT3V0cHV0VG9rZW5zIjoxNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyNzowOS4xNjQ1MDI5ODdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cy4gU3BlY2lmaWNhbGx5LCBpdCBjbGFtcHMgdGhlIG1heGltdW0gaGVhZHJvb20gaW4gYHR1bl9zZXRfaGVhZHJvb21gIHRvIHByZXZlbnQgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIG91dC1vZi1ib3VuZHMgYWxsb2NhdGlvbnMsIGFuZCBpdCBhZGRzL21vZGlmaWVzIGBwc2tiX21heV9wdWxsYCBjaGVja3MgaW4gYHR1bl9nZXRfdXNlcmAgdG8gZW5zdXJlIHRoYXQgcGFja2V0IGhlYWRlcnMgYXJlIHNhZmVseSBhY2Nlc3NpYmxlIGluIHRoZSBsaW5lYXIgcG9ydGlvbiBvZiB0aGUgc29ja2V0IGJ1ZmZlciBiZWZvcmUgcmVhZGluZyB0aGVtLiBUaGVzZSBhcmUgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMpIHRoYXQgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlKSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludGVnZXIgb3ZlcmZsb3dzLiBTcGVjaWZpY2FsbHksIGl0IGNsYW1wcyB0aGUgbWF4aW11bSBoZWFkcm9vbSBpbiBgdHVuX3NldF9oZWFkcm9vbWAgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBhbGxvY2F0aW9ucywgYW5kIGl0IGFkZHMvbW9kaWZpZXMgYHBza2JfbWF5X3B1bGxgIGNoZWNrcyBpbiBgdHVuX2dldF91c2VyYCB0byBlbnN1cmUgdGhhdCBwYWNrZXQgaGVhZGVycyBhcmUgc2FmZWx5IGFjY2Vzc2libGUgaW4gdGhlIGxpbmVhciBwb3J0aW9uIG9mIHRoZSBzb2NrZXQgYnVmZmVyIGJlZm9yZSByZWFkaW5nIHRoZW0uIFRoZXNlIGFyZSBjbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWVzIChvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcykgdGhhdCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIFVCU0FOLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UpIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpxqt8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 01:36:42 +0000 UTC FinishedAt: 2026-08-12 02:27:10 +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": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "BRIDGE", "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "BRIDGE", "OPENVSWITCH" ], "series_id": "a1986d20-d667-4c7f-8ac0-554c8ad17a83" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tun_set_headroom", "tun_get_user", "tun_chr_write_iter", "tun_sendmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fc2V0X2hlYWRyb29tJiMzNDssCiAgICAmIzM0O3R1bl9nZXRfdXNlciYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7dHVuX3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBtYXhpbXVtIGhlYWRyb29tIGluIGB0dW5fc2V0X2hlYWRyb29tYCB0byBwcmV2ZW50IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIGFsbG9jYXRpb25zLCBhbmQgaXQgYWRkcy9tb2RpZmllcyBgcHNrYl9tYXlfcHVsbGAgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIHRvIGVuc3VyZSB0aGF0IHBhY2tldCBoZWFkZXJzIGFyZSBzYWZlbHkgYWNjZXNzaWJsZSBpbiB0aGUgbGluZWFyIHBvcnRpb24gb2YgdGhlIHNvY2tldCBidWZmZXIgYmVmb3JlIHJlYWRpbmcgdGhlbS4gVGhlc2UgYXJlIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzKSB0aGF0IGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSkgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBoZWFkcm9vbSBjYWxjdWxhdGlvbiBpbiBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGFkZHMgcGFja2V0IGhlYWRlciBwdWxsIGNoZWNrcyBpbiBgdHVuX2dldF91c2VyYCBmb3IgVFVOL1RBUCBkZXZpY2VzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgYHdyaXRlKClgIG9yIGBzZW5kbXNnKClgIHRvIHRoZSBUVU4gZGV2aWNlLCBhbmQgdmlhIGJyaWRnZSBvciBPcGVuIHZTd2l0Y2ggYXR0YWNoaW5nIHRoZSBUVU4gZGV2aWNlICh3aGljaCB0cmlnZ2VycyBgbmRvX3NldF9yeF9oZWFkcm9vbWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMGRkY2ZhZWFjMzJlZTY1NGEyYTFhN2ZlZDEyYTExYzNhYjFiOTEyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDI6MjM6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uY1xuaW5kZXggZmVkOWRmZGZjYzNiYy4uNWJiZTMxMjM5NzllMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC90dW4uY1xuQEAgLTExMDcsMTEgJiM0MzsxMTA3LDE2IEBAIHN0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCB0dW5fbmV0X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0YXRpYyB2b2lkIHR1bl9zZXRfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19ocilcbiB7XG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRzaXplX3QgbWF4X2hlYWRyb29tO1xuIFxuLVx0aWYgKG5ld19ociBcdTAwM2MgTkVUX1NLQl9QQUQpXG4tXHRcdG5ld19ociA9IE5FVF9TS0JfUEFEO1xuJiM0MztcdG1heF9oZWFkcm9vbSA9IG1pbl90KHNpemVfdCwgU0tCX01BWF9IRUFEKDApLCBVMTZfTUFYIC0gMSk7XG4gXG4tXHR0dW4tXHUwMDNlYWxpZ24gPSBuZXdfaHI7XG4mIzQzO1x0aWYgKCh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFRVTl9UWVBFX01BU0spID09IElGRl9UQVApXG4mIzQzO1x0XHRtYXhfaGVhZHJvb20gLT0gRVRIX0hMRU4gJiM0MzsgTkVUX0lQX0FMSUdOO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG1heF9oZWFkcm9vbSAtPSAxO1xuJiM0MztcbiYjNDM7XHR0dW4tXHUwMDNlYWxpZ24gPSBjbGFtcF90KGludCwgbmV3X2hyLCBORVRfU0tCX1BBRCwgbWF4X2hlYWRyb29tKTtcbiB9XG4gXG4gc3RhdGljIHZvaWRcbkBAIC0xODIyLDcgJiM0MzsxODI3LDEzIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuIFx0c3dpdGNoICh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFRVTl9UWVBFX01BU0spIHtcbiBcdGNhc2UgSUZGX1RVTjpcbiBcdFx0aWYgKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX05PX1BJKSB7XG4tXHRcdFx0dTggaXBfdmVyc2lvbiA9IHNrYi1cdTAwM2VsZW4gPyAoc2tiLVx1MDAzZWRhdGFbMF0gXHUwMDNlXHUwMDNlIDQpIDogMDtcbiYjNDM7XHRcdFx0dTggaXBfdmVyc2lvbjtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDEpKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRnb3RvIGRyb3A7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aXBfdmVyc2lvbiA9IHNrYi1cdTAwM2VkYXRhWzBdIFx1MDAzZVx1MDAzZSA0O1xuIFxuIFx0XHRcdHN3aXRjaCAoaXBfdmVyc2lvbikge1xuIFx0XHRcdGNhc2UgNDpcbkBAIC0xODQyLDcgJiM0MzsxODUzLDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4gXHRcdHNrYi1cdTAwM2VkZXYgPSB0dW4tXHUwMDNlZGV2O1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUZGX1RBUDpcbi1cdFx0aWYgKGZyYWdzIFx1MDAyNlx1MDAyNiAhcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOKSkge1xuJiM0MztcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9IRFJfVFJVTkM7XG4gXHRcdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUVU4mIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX3NldF9oZWFkcm9vbSYjMzQ7LAogICAgJiMzNDt0dW5fZ2V0X3VzZXImIzM0OywKICAgICYjMzQ7dHVuX2Nocl93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O3R1bl9zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRyb29tIGNhbGN1bGF0aW9uIGluIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYWRkcyBwYWNrZXQgaGVhZGVyIHB1bGwgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIGZvciBUVU4vVEFQIGRldmljZXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBgd3JpdGUoKWAgb3IgYHNlbmRtc2coKWAgdG8gdGhlIFRVTiBkZXZpY2UsIGFuZCB2aWEgYnJpZGdlIG9yIE9wZW4gdlN3aXRjaCBhdHRhY2hpbmcgdGhlIFRVTiBkZXZpY2UgKHdoaWNoIHRyaWdnZXJzIGBuZG9fc2V0X3J4X2hlYWRyb29tYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcGFja2V0IHByb2Nlc3NpbmcgYW5kIGRldmljZSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwZGRjZmFlYWMzMmVlNjU0YTJhMWE3ZmVkMTJhMTFjM2FiMWI5MTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwMjoyMzoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggZmVkOWRmZGZjYzNiYy4uNWJiZTMxMjM5NzllMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTExMDcsMTEgJiM0MzsxMTA3LDE2IEBAIHN0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCB0dW5fbmV0X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogc3RhdGljIHZvaWQgdHVuX3NldF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X2hyKQogewogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzaXplX3QgbWF4X2hlYWRyb29tOwogCi0JaWYgKG5ld19ociAmbHQ7IE5FVF9TS0JfUEFEKQotCQluZXdfaHIgPSBORVRfU0tCX1BBRDsKJiM0MzsJbWF4X2hlYWRyb29tID0gbWluX3Qoc2l6ZV90LCBTS0JfTUFYX0hFQUQoMCksIFUxNl9NQVggLSAxKTsKIAotCXR1bi0mZ3Q7YWxpZ24gPSBuZXdfaHI7CiYjNDM7CWlmICgodHVuLSZndDtmbGFncyAmYW1wOyBUVU5fVFlQRV9NQVNLKSA9PSBJRkZfVEFQKQomIzQzOwkJbWF4X2hlYWRyb29tIC09IEVUSF9ITEVOICYjNDM7IE5FVF9JUF9BTElHTjsKJiM0MzsJZWxzZQomIzQzOwkJbWF4X2hlYWRyb29tIC09IDE7CiYjNDM7CiYjNDM7CXR1bi0mZ3Q7YWxpZ24gPSBjbGFtcF90KGludCwgbmV3X2hyLCBORVRfU0tCX1BBRCwgbWF4X2hlYWRyb29tKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE4MjIsNyAmIzQzOzE4MjcsMTMgQEAgc3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsCiAJc3dpdGNoICh0dW4tJmd0O2ZsYWdzICZhbXA7IFRVTl9UWVBFX01BU0spIHsKIAljYXNlIElGRl9UVU46CiAJCWlmICh0dW4tJmd0O2ZsYWdzICZhbXA7IElGRl9OT19QSSkgewotCQkJdTggaXBfdmVyc2lvbiA9IHNrYi0mZ3Q7bGVuID8gKHNrYi0mZ3Q7ZGF0YVswXSAmZ3Q7Jmd0OyA0KSA6IDA7CiYjNDM7CQkJdTggaXBfdmVyc2lvbjsKJiM0MzsKJiM0MzsJCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkgewomIzQzOwkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQlnb3RvIGRyb3A7CiYjNDM7CQkJfQomIzQzOwkJCWlwX3ZlcnNpb24gPSBza2ItJmd0O2RhdGFbMF0gJmd0OyZndDsgNDsKIAogCQkJc3dpdGNoIChpcF92ZXJzaW9uKSB7CiAJCQljYXNlIDQ6CkBAIC0xODQyLDcgJiM0MzsxODUzLDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsCiAJCXNrYi0mZ3Q7ZGV2ID0gdHVuLSZndDtkZXY7CiAJCWJyZWFrOwogCWNhc2UgSUZGX1RBUDoKLQkJaWYgKGZyYWdzICZhbXA7JmFtcDsgIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTikpIHsKJiM0MzsJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOKSkgewogCQkJZXJyID0gLUVOT01FTTsKIAkJCWRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0hEUl9UUlVOQzsKIAkJCWdvdG8gZHJvcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRVTi9UQVAgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBUVU4vVEFQIGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZHJpdmVycy9uZXQvdHVuLmNgLiBUaGUgY29yZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2VkIG9uIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYHR1bl9nZXRfdXNlcmAuIFRoaXMgc3VnZ2VzdHMgdGhleSBhcmUgYWRkcmVzc2luZyBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gaGVhZHJvb20gbWFuYWdlbWVudCBhbmQgZGF0YSByZXRyaWV2YWwuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGB0dW5fc2V0X2hlYWRyb29tYC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIHJlcGxhY2luZyBhIHNpbXBsZSBtaW5pbXVtIGNoZWNrIHdpdGggYSBtb3JlIHJvYnVzdCBjbGFtcGluZyBtZWNoYW5pc20uIEluc3RlYWQgb2YganVzdCBlbnN1cmluZyBgbmV3X2hyYCBpcyBhdCBsZWFzdCBgTkVUX1NLQl9QQURgLCBpdCBub3cgY2FsY3VsYXRlcyBhIGBtYXhfaGVhZHJvb21gIGJhc2VkIG9uIGBTS0JfTUFYX0hFQURgLCBgVTE2X01BWGAsIGFuZCBhZGp1c3RzIGl0IGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0JiMzOTtzIGEgVEFQIGludGVyZmFjZSAoc3VidHJhY3RpbmcgYEVUSF9ITEVOICYjNDM7IE5FVF9JUF9BTElHTmApIG9yIFRVTiBpbnRlcmZhY2UuIEl0IHRoZW4gY2xhbXBzIGBuZXdfaHJgIGJldHdlZW4gYE5FVF9TS0JfUEFEYCBhbmQgdGhpcyBjYWxjdWxhdGVkIGBtYXhfaGVhZHJvb21gLiBUaGlzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGFpbWluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGV4Y2Vzc2l2ZSBoZWFkcm9vbSBhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjb25zdHJhaW50cyBvZiBkaWZmZXJlbnQgaW50ZXJmYWNlIHR5cGVzLiBUaGlzIGNsYW1waW5nIGlzIG11Y2ggbW9yZSBzZW5zaWJsZS4KCk1vdmluZyB0byBgdHVuX2dldF91c2VyYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHR1bl9jaHJfd3JpdGVfaXRlcmAsIEkgc2VlIGNoYW5nZXMgcmVsYXRlZCB0byBoYW5kbGluZyBib3RoIFRVTiBhbmQgVEFQIGludGVyZmFjZXMgaW4gdGhlIElGRl9OT19QSSBjYXNlLiBJbiB0aGUgVFVOIGNhc2UsIHRoZXJlJiMzOTtzIG5vdyBhIGNoZWNrIHVzaW5nIGBwc2tiX21heV9wdWxsYCB0byBlbnN1cmUgdGhhdCB0aGVyZSYjMzk7cyBhdCBsZWFzdCBvbmUgYnl0ZSBhdmFpbGFibGUgdG8gcmVhZCB0aGUgSVAgdmVyc2lvbi4gVGhpcyBsb29rcyBsaWtlIGEgbmVjZXNzYXJ5IHNhbml0eSBjaGVjaywgYW5kIHByZXZlbnRpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcuCgpJbiB0aGUgVEFQIGNhc2UsIHRoZSBgcHNrYl9tYXlfcHVsbGAgY2hlY2sgaXMgYXBwbGllZCB1bmNvbmRpdGlvbmFsbHkgYmVmb3JlIHJlYWRpbmcgdGhlIEV0aGVybmV0IGhlYWRlciwgd2hpY2ggc2VlbXMgbGlrZSBhIG11Y2ggc3Ryb25nZXIgY2hlY2suIElmIGl0IGZhaWxzLCB0aGUgcGFja2V0IGlzIGRyb3BwZWQgd2l0aCBgU0tCX0RST1BfUkVBU09OX0hEUl9UUlVOQ2AuIEFnYWluLCB0aGlzIHByZXZlbnRzIHBvc3NpYmxlIHJlYWRzIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBTS0IsIHdoaWNoIGlzIGNyaXRpY2FsLgoKU28sIGluIHN1bW1hcnksIHRoZXNlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIGFpbWVkIGF0IGZpeGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMgcmVsYXRlZCB0byBoZWFkcm9vbSBhbmQgZGF0YSBhY2Nlc3MgaW4gdGhlIFRVTi9UQVAgZHJpdmVyLiBUaGUgY29kZSBub3cgY2xhbXBzIHRoZSBoZWFkcm9vbSBhbmQgcGVyZm9ybXMgYmV0dGVyIGJvdW5kcyBjaGVja2luZy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGV4YWN0bHkgaG93IGB0dW5fc2V0X2hlYWRyb29tYCBpcyBiZWluZyBjYWxsZWQsIGJ1dCB0aGUgZGlyZWN0aW9uIGhlcmUgaXMgZ29vZCBhbmQgcG9pbnRzIHRvIGZpeGluZyBzb21lIHNpZ25pZmljYW50IHJlbGlhYmlsaXR5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fc2V0X2hlYWRyb29tJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MTA5OT1zdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgdHVuX25ldF9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMTA2LVxuZHJpdmVycy9uZXQvdHVuLmM6MTEwNzpzdGF0aWMgdm9pZCB0dW5fc2V0X2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfaHIpXG5kcml2ZXJzL25ldC90dW4uYy0xMTA4LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0xMTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHVuX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTE5NS1cdC5uZG9fc2VsZWN0X3F1ZXVlXHQ9IHR1bl9zZWxlY3RfcXVldWUsXG5kcml2ZXJzL25ldC90dW4uYzoxMTk2Olx0Lm5kb19zZXRfcnhfaGVhZHJvb21cdD0gdHVuX3NldF9oZWFkcm9vbSxcbmRyaXZlcnMvbmV0L3R1bi5jLTExOTctXHQubmRvX2dldF9zdGF0czY0XHQ9IHR1bl9uZXRfZ2V0X3N0YXRzNjQsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTI3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRhcF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEyODMtXHQubmRvX2ZlYXR1cmVzX2NoZWNrXHQ9IHBhc3N0aHJ1X2ZlYXR1cmVzX2NoZWNrLFxuZHJpdmVycy9uZXQvdHVuLmM6MTI4NDpcdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IHR1bl9zZXRfaGVhZHJvb20sXG5kcml2ZXJzL25ldC90dW4uYy0xMjg1LVx0Lm5kb19icGZcdFx0PSB0dW5feGRwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUVU4vVEFQIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYHR1bl9nZXRfdXNlcmAgd2l0aGluIGBkcml2ZXJzL25ldC90dW4uY2AuIEludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGB0dW5fc2V0X2hlYWRyb29tYCBpcyBnZXR0aW5nIGEgY2xhbXAsIHByZXN1bWFibHkgdG8gZW5zdXJlIHRoZSBoZWFkcm9vbSBkb2VzbiYjMzk7dCBleGNlZWQgc29tZSBzYW5lIG1heGltdW0uIE1ha2VzIHNlbnNlLCBjb3VsZCBwcmV2ZW50IG92ZXJmbG93IGlzc3Vlcy4gQW5kIHRoZW4gYHR1bl9nZXRfdXNlcmAgaXMgc2VlaW5nIHNvbWUgYHBza2JfbWF5X3B1bGxgIGNoZWNrcyBiZWluZyBhZGRlZC4gUmlnaHQsIHRoYXQmIzM5O3MgaW1wb3J0YW50IGZvciBlbnN1cmluZyB3ZSYjMzk7cmUgbm90IHRyeWluZyB0byBwdWxsIGRhdGEgZnJvbSBhIHBhY2tldCBidWZmZXIgdGhhdCBkb2VzbiYjMzk7dCBhY3R1YWxseSBleGlzdCwgb3IgdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2Vzcy4gVGhlc2UgYXJlIHByZXR0eSBzdGFuZGFyZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgdGVjaG5pcXVlcy4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBkcml2ZXIsIHRoYXQmIzM5O3MgZ29vZC4gV2hpY2ggbWVhbnMsIGl0JiMzOTtzIHNvbWV0aGluZyBJIGNhbiBhYnNvbHV0ZWx5IGZ1enouIFRoZSBUVU4vVEFQIGRyaXZlciBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBhbnl3YXkuIEJvdGggYHR1bl9zZXRfaGVhZHJvb21gIGFuZCBgdHVuX2dldF91c2VyYCBub3cgbmVlZCB0byBiZSBzdWJqZWN0ZWQgdG8gaW50ZW5zZSBzY3J1dGlueS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGxvb2tzIGxpa2UgZm9yIGBkcml2ZXJzL25ldC90dW4uY2AgdG8gY29uZmlybSBteSBmdXp6aW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUVU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUVU4gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgVFVOYCBjb25maWd1cmF0aW9uIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB0byBpbnRlcmFjdCB3aXRoIGl0LiBUaGUgZ3VpZGFuY2UgaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGB0dW5fZ2V0X3VzZXJgIGFzIGtleSBhcmVhcyB0byBleGFtaW5lLiBIbW0sIGhhbmcgb24gYSBzZWNvbmQuIEl0IGxvb2tzIGxpa2UgYHR1bl9zZXRfaGVhZHJvb21gIGlzIGFjdHVhbGx5IGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgcmVkIGZsYWcsIGJlY2F1c2UgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLgoKV2FpdCBhIG1pbnV0ZSwgYWx0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCAqaXMqIGFzc2lnbmVkIHRvIGAubmRvX3NldF9yeF9oZWFkcm9vbWAuIFNvLCB0aGVyZSYjMzk7cyBhIHJlYXNvbiBpdCYjMzk7cyB1c2VkLiBUaGUgcXVlc3Rpb24gbm93IGlzLCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgd3JhcHBlciBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LiBJJiMzOTtsbCBjaGVjayB3aGVyZSBgLm5kb19zZXRfcnhfaGVhZHJvb21gIGlzIGFjdHVhbGx5IHVzZWQgYW5kIHNlZSBpZiB0aGF0IHJldmVhbHMgYSBtb3JlIHN1aXRhYmxlIGVudHJ5IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25kb19zZXRfcnhfaGVhZHJvb20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0a2l0LmM9MzMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0a2l0X25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMzM2LVx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBuZXRraXRfc2V0X211bHRpY2FzdCxcbmRyaXZlcnMvbmV0L25ldGtpdC5jOjMzNzpcdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IG5ldGtpdF9zZXRfaGVhZHJvb20sXG5kcml2ZXJzL25ldC9uZXRraXQuYy0zMzgtXHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBuZXRraXRfc2V0X21hY2FkZHIsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTE4OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR1bl9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTExOTUtXHQubmRvX3NlbGVjdF9xdWV1ZVx0PSB0dW5fc2VsZWN0X3F1ZXVlLFxuZHJpdmVycy9uZXQvdHVuLmM6MTE5NjpcdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IHR1bl9zZXRfaGVhZHJvb20sXG5kcml2ZXJzL25ldC90dW4uYy0xMTk3LVx0Lm5kb19nZXRfc3RhdHM2NFx0PSB0dW5fbmV0X2dldF9zdGF0czY0LFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEyNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjgzLVx0Lm5kb19mZWF0dXJlc19jaGVja1x0PSBwYXNzdGhydV9mZWF0dXJlc19jaGVjayxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyODQ6XHQubmRvX3NldF9yeF9oZWFkcm9vbVx0PSB0dW5fc2V0X2hlYWRyb29tLFxuZHJpdmVycy9uZXQvdHVuLmMtMTI4NS1cdC5uZG9fYnBmXHRcdD0gdHVuX3hkcCxcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmM9MTcwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZldGhfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC92ZXRoLmMtMTcyMy1cdC5uZG9fZmVhdHVyZXNfY2hlY2tcdD0gcGFzc3RocnVfZmVhdHVyZXNfY2hlY2ssXG5kcml2ZXJzL25ldC92ZXRoLmM6MTcyNDpcdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IHZldGhfc2V0X3J4X2hlYWRyb29tLFxuZHJpdmVycy9uZXQvdmV0aC5jLTE3MjUtXHQubmRvX2JwZlx0XHQ9IHZldGhfeGRwLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTA2ND1zdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMzk2LSAqXHRzYW1wbGluZyBwYWNrZXQuXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjEzOTc6ICogdm9pZCAoKm5kb19zZXRfcnhfaGVhZHJvb20pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZWVkZWRfaGVhZHJvb20pO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMzk4LSAqXHRUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgaGVhZHJvb20gdGhhdCB0aGUgc2tiIG11c3Rcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE0NDg9c3RydWN0IG5ldF9kZXZpY2Vfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE2NzQtXHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNjc1Olx0dm9pZFx0XHRcdCgqbmRvX3NldF9yeF9oZWFkcm9vbSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTY3Ni1cdFx0XHRcdFx0XHQgICAgICAgaW50IG5lZWRlZF9oZWFkcm9vbSk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yNzU0PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfc2V0X3J4X2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfaHIpXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI3NTUte1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyNzU2Olx0aWYgKGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXRfcnhfaGVhZHJvb20pXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjI3NTc6XHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXRfcnhfaGVhZHJvb20oZGV2LCBuZXdfaHIpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNzU4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzcyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgYG5ldGRldl9zZXRfcnhfaGVhZHJvb21gKioKCk9rYXksIHNvIGBuZXRkZXZfc2V0X3J4X2hlYWRyb29tYCBpcyB0aGUgZnVuY3Rpb24gb2YgaW50ZXJlc3QuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7V2hlcmUgaXMgdGhpcyBjYWxsZWQgZnJvbT8mIzM0OyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXIgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb250ZXh0cyBpbiB0aGUgZHJpdmVyIG9yIG5ldHdvcmtpbmcgc3RhY2sgd2hlcmUgaXQmIzM5O3MgaW52b2tlZC4gSSBrbm93IGhvdyB0byB1c2UgZ3JlcCBhbmQgb3RoZXIgdG9vbHMgdG8gZmluZCB1c2FnZXMsIGJ1dCBJIG5lZWQgdG8gZG8gc28gcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X3NldF9yeF9oZWFkcm9vbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTI3NDk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBuZXRkZXZfZ2V0X2Z3ZF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjc1My1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6Mjc1NDpzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3NldF9yeF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X2hyKVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNzU1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTI3NjE9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9yZXNldF9yeF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNzYyLXtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6Mjc2MzpcdG5ldGRldl9zZXRfcnhfaGVhZHJvb20oZGV2LCAtMSk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI3NjQtfVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYz0zMTU9c3RhdGljIHZvaWQgdXBkYXRlX2hlYWRyb29tKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgaW50IG5ld19ocilcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzE5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcdTAwMjZici1cdTAwM2Vwb3J0X2xpc3QsIGxpc3QpXG5uZXQvYnJpZGdlL2JyX2lmLmM6MzIwOlx0XHRuZXRkZXZfc2V0X3J4X2hlYWRyb29tKHAtXHUwMDNlZGV2LCBuZXdfaHIpO1xubmV0L2JyaWRnZS9icl9pZi5jLTMyMS1cbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmM9NTYwPWludCBicl9hZGRfaWYoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy02NTItXHRlbHNlXG5uZXQvYnJpZGdlL2JyX2lmLmM6NjUzOlx0XHRuZXRkZXZfc2V0X3J4X2hlYWRyb29tKGRldiwgYnJfaHIpO1xubmV0L2JyaWRnZS9icl9pZi5jLTY1NC1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMzI2PXN0YXRpYyB2b2lkIG92c191cGRhdGVfaGVhZHJvb20oc3RydWN0IGRhdGFwYXRoICpkcCwgdW5zaWduZWQgaW50IG5ld19oZWFkcm9vbSlcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMzM0LVx0XHRcdFx0XHQgbG9ja2RlcF9vdnNsX2lzX2hlbGQoKSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjIzMzU6XHRcdFx0bmV0ZGV2X3NldF9yeF9oZWFkcm9vbSh2cG9ydC1cdTAwM2VkZXYsIG5ld19oZWFkcm9vbSk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMzM2LVx0fVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTIzMzk9c3RhdGljIGludCBvdnNfdnBvcnRfY21kX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0MTYtXHRlbHNlXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNDE3Olx0XHRuZXRkZXZfc2V0X3J4X2hlYWRyb29tKHZwb3J0LVx1MDAzZWRldiwgZHAtXHUwMDNlbWF4X2hlYWRyb29tKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0MTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRHJpdmVyIEhlYWRyb29tIGFuZCBUdW5uZWwgQmVoYXZpb3IqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIGBuZXRkZXZfc2V0X3J4X2hlYWRyb29tYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBib3RoIGJyaWRnZSBhbmQgT3BlbiB2U3dpdGNoLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGNvbnRleHQgbGF0ZXIuIE5vdywgd2hhdCBhYm91dCB0aGF0IG90aGVyIGZ1bmN0aW9uLCBgdHVuX2dldF91c2VyYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCYjMzk7cyBiZWluZyBpbnZva2VkLiBJdCYjMzk7cyBvZnRlbiB0aGUgY2FzZSB0aGF0IHNlZW1pbmdseSBpbm5vY3VvdXMgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gbXVsdGlwbGUgcGxhY2VzLCBjcmVhdGluZyB1bmZvcmVzZWVuIGludGVyYWN0aW9ucy4gU28sIGxldCBtZSBxdWlja2x5IHRyYWNlIGl0cyBjYWxsIHBhdGhzIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaXRzIG92ZXJhbGwgaW1wYWN0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG1vcmUgZXN0YWJsaXNoZWQgcGllY2VzIG9mIGNvZGUgdGhhdCBJIGtub3cgYmV0dGVyLiBUaGF04oCZcyBwcm9iYWJseSB0aGUgYmVzdCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX2dldF91c2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MTYwMz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnR1bl9idWlsZF9za2Ioc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xNjk5LS8qIEdldCBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGJ1ZmZlciAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTcwMDpzdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbmRyaXZlcnMvbmV0L3R1bi5jLTE3MDEtXHRcdFx0ICAgIHZvaWQgKm1zZ19jb250cm9sLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTk5OD1zdGF0aWMgc3NpemVfdCB0dW5fY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjAxMS1cbmRyaXZlcnMvbmV0L3R1bi5jOjIwMTI6XHRyZXN1bHQgPSB0dW5fZ2V0X3VzZXIodHVuLCB0ZmlsZSwgTlVMTCwgZnJvbSwgbm9ibG9jaywgZmFsc2UpO1xuZHJpdmVycy9uZXQvdHVuLmMtMjAxMy1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yNTI2PXN0YXRpYyBpbnQgdHVuX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yNTcyLVxuZHJpdmVycy9uZXQvdHVuLmM6MjU3MzpcdHJldCA9IHR1bl9nZXRfdXNlcih0dW4sIHRmaWxlLCBjdGwgPyBjdGwtXHUwMDNlcHRyIDogTlVMTCwgXHUwMDI2bS1cdTAwM2Vtc2dfaXRlcixcbmRyaXZlcnMvbmV0L3R1bi5jLTI1NzQtXHRcdFx0ICAgbS1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29yZSBkYXRhIGZsb3cgd2l0aGluIHRoaXMgVFVOIGRyaXZlciwgYW5kIGl0IGxvb2tzIGxpa2UgYHR1bl9jaHJfd3JpdGVfaXRlcmAgYW5kIGB0dW5fc2VuZG1zZ2AgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzLiBgdHVuX2Nocl93cml0ZV9pdGVyYCwgcmlnaHQsIHRoYXQmIzM5O3MgdGhlIGAud3JpdGVfaXRlcmAgbWV0aG9kIHdpdGhpbiBgdHVuX2ZvcHNgLCBhbmQgYHR1bl9zZW5kbXNnYCBjb3JyZXNwb25kcyB0byB0aGUgYC5zZW5kbXNnYCBtZXRob2QgaW4gYHR1bl9wcm90b19vcHNgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIG15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrLgoKTm93LCBhIHJlZCBmbGFnISBJIHNlZSBgdHVuX2dldF91c2VyYCBpbiB0aGlzIGNvbnRleHQsIGFuZCBpdCBsb29rcyBwcmV0dHkgc3Vic3RhbnRpYWwuIEl0JiMzOTtzIG1hcmtlZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1wbGllcyBpdCYjMzk7cyBub3QgYSBkaXJlY3QsIGV4dGVybmFsIEFQSSBlbnRyeSBwb2ludC4gVGhlIGluc3RydWN0aW9ucyAqZG8qIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG92ZXIgdGhlc2UgaW50ZXJuYWwgaGVscGVycy4gSG1tLi4uc2hvdWxkIEkgaW5jbHVkZSBgdHVuX2dldF91c2VyYCBpbiBteSBhbmFseXNpcywgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljPyBJIHNob3VsZCBjaGVjayBpZiBgdHVuX2Nocl93cml0ZV9pdGVyYCBhbmQgYHR1bl9zZW5kbXNnYCBhcmUgYWN0dWFsbHkgbm9uLXN0YXRpYyAtIHRoYXQgd291bGQgYmUgdGhlIGRlY2lkaW5nIGZhY3Rvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX2Nocl93cml0ZV9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MTcwMD1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xOTk3LVxuZHJpdmVycy9uZXQvdHVuLmM6MTk5ODpzdGF0aWMgc3NpemVfdCB0dW5fY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5kcml2ZXJzL25ldC90dW4uYy0xOTk5LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNDgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM0ODItXHQucmVhZF9pdGVyICA9IHR1bl9jaHJfcmVhZF9pdGVyLFxuZHJpdmVycy9uZXQvdHVuLmM6MzQ4MzpcdC53cml0ZV9pdGVyID0gdHVuX2Nocl93cml0ZV9pdGVyLFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ4NC1cdC5wb2xsXHQ9IHR1bl9jaHJfcG9sbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MjM5MD1zdGF0aWMgaW50IHR1bl94ZHBfb25lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjUyNS1cbmRyaXZlcnMvbmV0L3R1bi5jOjI1MjY6c3RhdGljIGludCB0dW5fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxuZHJpdmVycy9uZXQvdHVuLmMtMjUyNy17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjY1MD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB0dW5fc29ja2V0X29wcyA9IHtcbmRyaXZlcnMvbmV0L3R1bi5jLTI2NTEtXHQucGVla19sZW4gPSB0dW5fcGVla19sZW4sXG5kcml2ZXJzL25ldC90dW4uYzoyNjUyOlx0LnNlbmRtc2cgPSB0dW5fc2VuZG1zZyxcbmRyaXZlcnMvbmV0L3R1bi5jLTI2NTMtXHQucmVjdm1zZyA9IHR1bl9yZWN2bXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjMzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgUmVsZXZhbnQgS2VybmVsIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGF0IHRvIGZvY3VzIG9uLiBCb3RoIGBmaWxlX29wZXJhdGlvbnNgIGFuZCBgcHJvdG9fb3BzYCBhcmUgc3RhdGljLCBidXQgdGhleSYjMzk7cmUgYXNzaWduZWQsIHNvIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgZW50cnkgcG9pbnRzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGFkZCBgdHVuX2Nocl93cml0ZV9pdGVyYCBhbmQgYHR1bl9zZW5kbXNnYCB0byBteSBGb2N1c1N5bWJvbHMgbGlzdC4KCk5vdywgd2hhdCBhYm91dCBgdHVuX3NldF9oZWFkcm9vbWA/IEl0JiMzOTtzIGFzc2lnbmVkIHRvIGBuZG9fc2V0X3J4X2hlYWRyb29tYCwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gY29uc2lkZXIuIFRoZSB3cmFwcGVyIGlzIGBuZXRkZXZfc2V0X3J4X2hlYWRyb29tYCwgd2hpY2ggaXMgaW5saW5lLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnM6IGB1cGRhdGVfaGVhZHJvb21gIGFuZCBgYnJfYWRkX2lmYCB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfaWYuY2AsIHBsdXMgYG92c191cGRhdGVfaGVhZHJvb21gIGFuZCBgb3ZzX3Zwb3J0X2NtZF9uZXdgIGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFNpbmNlIGBuZXRkZXZfc2V0X3J4X2hlYWRyb29tYCBpcyBpbmxpbmVkLCBidXQgdGhlc2UgYXJlIGFsbCBjYWxsaW5nIGl0LCBJIHRoaW5rIEkgY2FuIHNhZmVseSBhZGQgYGJyX2FkZF9pZmAgYW5kIGBvdnNfdnBvcnRfY21kX25ld2AgdG8gdGhlIGxpc3QuCgpXYWl0IGEgc2Vjb25kLiBgdHVuX3NldF9oZWFkcm9vbWAgaXMgYWN0dWFsbHkgc3RhdGljIHdpdGhpbiBgZHJpdmVycy9uZXQvdHVuLmNgLiBUaGF0IGNvbXBsaWNhdGVzIHRoaW5ncy4gSWYgaXQmIzM5O3Mgc3RhdGljIGFuZCBpbmxpbmVkLCB0aGUgZnV6emVyIG1pZ2h0IG1pc3MgaXQuIEhvd2V2ZXIsIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgc28gaXQmIzM5O3MgKm5vdCogaW5saW5lZC4gSSB3YXMgcmlnaHQgdG8gZm9jdXMgb24gaXQuIEkmIzM5O2xsIGFkZCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYHR1bl9zZW5kbXNnYCwgYGJyX2FkZF9pZmAsIGFuZCBgb3ZzX3Zwb3J0X2NtZF9uZXdgIHRvIHRoZSBGb2N1c1N5bWJvbHMuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGB0dW5fZ2V0X3VzZXJgIHRvby4gSXQmIzM5O3MgYSBsYXJnZSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgbm90IGlubGluZWQuIE1pZ2h0IGJlIHdvcnRoIGNoZWNraW5nIHRvIGJlIHN1cmUsIGJ1dCBJIHRoaW5rIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGFuZCBgdHVuX3NlbmRtc2dgIGFyZSBzb2xpZCBlbnRyeSBwb2ludHMgcmVnYXJkbGVzcy4gSXQmIzM5O3MgdGltZSB0byBjaGVjayBLY29uZmlnLCBtYWtlIHN1cmUgSSBoYXZlIGJyaWRnZSBhbmQgb3BlbnZzd2l0Y2ggdHVybmVkIG9uIGluIHRoZSBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnLTUtXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNDktXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7Q0ZNIHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1BFTlZTV0lUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NTc6Y29uZmlnIE9QRU5WU1dJVENIX1ZYTEFOXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBWWExBTiB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTY4LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjkKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogODQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgZHJpdmVycy9uZXQvdHVuLmNgLCBzcGVjaWZpY2FsbHkgYHR1bl9zZXRfaGVhZHJvb21gIGFuZCBgdHVuX2dldF91c2VyYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4KCkZpcnN0LCBgdHVuX3NldF9oZWFkcm9vbWAgZ2V0cyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGBuZG9fc2V0X3J4X2hlYWRyb29tYCB3aGljaCBpcyBhc3NpZ25lZCB0byBpdCwgZm9yIGJvdGggYHR1bmAgYW5kIGB0YXBgIGRldmljZXMuIE5vdywgYG5kb19zZXRfcnhfaGVhZHJvb21gIGlzIHRyaWdnZXJlZCBieSBgbmV0ZGV2X3NldF9yeF9oZWFkcm9vbWAsIHdoaWNoIHdlIHNlZSB1c2VkIGluIGJvdGggYG5ldC9icmlkZ2UvYnJfaWYuY2AgKHZpYSBgdXBkYXRlX2hlYWRyb29tYCkgYW5kIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AgKHZpYSBgb3ZzX3VwZGF0ZV9oZWFkcm9vbWApLiAgU28sIHRvIHRlc3QgYHR1bl9zZXRfaGVhZHJvb21gIGVmZmVjdGl2ZWx5LCBJJiMzOTtsbCBuZWVkIGBUVU5gIGNvbmZpZ3VyZWQsIGFuZCBhdCBsZWFzdCBvbmUgb2YgZWl0aGVyIGBCUklER0VgIG9yIGBPUEVOVlNXSVRDSGAuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3Igb3VyIGZ1enppbmcgY29uZmlndXJhdGlvbi4KClRoZW4gdGhlcmUmIzM5O3MgYHR1bl9nZXRfdXNlcmAuIFRoaXMgb25lIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGB0dW5fY2hyX3dyaXRlX2l0ZXJgICh3aGljaCBpcyByZWFjaGVkIHZpYSB0aGUgYHdyaXRlKClgIHN5c3RlbSBjYWxsIG9uIGAvZGV2L25ldC90dW5gKSBhbmQgYHR1bl9zZW5kbXNnYCAodXNpbmcgYHNlbmRtc2coKWAgb24gYSB0dW4gc29ja2V0KS4gVGhlIHBhdGNoIGFkZHMgYSBgcHNrYl9tYXlfcHVsbCgpYCBjYWxsIGluIGB0dW5fZ2V0X3VzZXJgLiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWFsaW5nIHdpdGggcGFja2V0IHBhcnNpbmcsIHNvIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGFyZWFzIGZvciBmdXp6aW5nIHdpbGwgYmUgYHR1bl9zZXRfaGVhZHJvb21gLCBgdHVuX2dldF91c2VyYCwgYHR1bl9jaHJfd3JpdGVfaXRlcmAgYW5kIGB0dW5fc2VuZG1zZ2AsIGFzIHRoZXkgYXJlIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBjaGFuZ2VzLiAgSeKAmWxsIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCBgVFVOYCwgYEJSSURHRWAgYW5kIGBPUEVOVlNXSVRDSGAgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgdG8gY292ZXIgYWxsIHRoZSBjYWxsIHBhdGhzLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG5ldGRldl9zZXRfcnhfaGVhZHJvb21gIGhhcyBhbnkgb3RoZXIgY2FsbGVycy4gT2theSwgdGhlIGlubGluZSB3cmFwcGVyIGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYCBkb2VzbiYjMzk7dCBwcm92aWRlIGFueXRoaW5nIGFkZGl0aW9uYWwuIGBCUklER0VgIGFuZCBgT1BFTlZTV0lUQ0hgIGFyZSBzdWZmaWNpZW50LgoKTm93LCBsZXQmIzM5O3MgcmVmaW5lIHRoaXMgYSBiaXQgZnVydGhlci4gVGhlIGNoYW5nZXMgbW9kaWZ5IGhlYWRyb29tIGNhbGN1bGF0aW9uIGFuZCBhZGQgcGFja2V0IGhlYWRlciBjaGVja3MuIFRoZXNlIGFyZSBhY2Nlc3NpYmxlIHZpYSBgd3JpdGUoKWAgb3IgYHNlbmRtc2coKWAgdG8gdGhlIFRVTiBkZXZpY2UsIGFzIHdlbGwgYXMgd2hlbiBicmlkZ2luZyBvciB1c2luZyBPcGVuIHZTd2l0Y2ggdG8gYXR0YWNoIHRoZSBUVU4gZGV2aWNlLCB3aGljaCB1c2VzIHRoZSBgbmRvX3NldF9yeF9oZWFkcm9vbWAuIEdpdmVuIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gaG93IHBhY2tldHMgYXJlIHByb2Nlc3NlZCBhbmQgZGV2aWNlIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBmdXp6aW5nIGhlcmUgaXMgZ29pbmcgdG8gYmUgd29ydGh3aGlsZS4KClRoZXJlZm9yZSwgZm9yIHRoaXMgZnV6emluZyBjYW1wYWlnbiwgSSYjMzk7bGwgc2V0OgoKKiAgICoqRm9jdXMgU3ltYm9sczoqKiBgdHVuX3NldF9oZWFkcm9vbWAsIGB0dW5fZ2V0X3VzZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYHR1bl9zZW5kbXNnYAoqICAgKipFbmFibGVkIENvbmZpZ3M6KiogYFRVTmAsIGBCUklER0VgLCBgT1BFTlZTV0lUQ0hgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUVU4mIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX3NldF9oZWFkcm9vbSYjMzQ7LAogICAgJiMzNDt0dW5fZ2V0X3VzZXImIzM0OywKICAgICYjMzQ7dHVuX2Nocl93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O3R1bl9zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRyb29tIGNhbGN1bGF0aW9uIGluIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYWRkcyBwYWNrZXQgaGVhZGVyIHB1bGwgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIGZvciBUVU4vVEFQIGRldmljZXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBgd3JpdGUoKWAgb3IgYHNlbmRtc2coKWAgdG8gdGhlIFRVTiBkZXZpY2UsIGFuZCB2aWEgYnJpZGdlIG9yIE9wZW4gdlN3aXRjaCBhdHRhY2hpbmcgdGhlIFRVTiBkZXZpY2UgKHdoaWNoIHRyaWdnZXJzIGBuZG9fc2V0X3J4X2hlYWRyb29tYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcGFja2V0IHByb2Nlc3NpbmcgYW5kIGRldmljZSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9zZXRfaGVhZHJvb20mIzM0OywKICAgICYjMzQ7dHVuX2dldF91c2VyJiMzNDssCiAgICAmIzM0O3R1bl9jaHJfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDt0dW5fc2VuZG1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBoZWFkcm9vbSBjYWxjdWxhdGlvbiBpbiBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGFkZHMgcGFja2V0IGhlYWRlciBwdWxsIGNoZWNrcyBpbiBgdHVuX2dldF91c2VyYCBmb3IgVFVOL1RBUCBkZXZpY2VzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgYHdyaXRlKClgIG9yIGBzZW5kbXNnKClgIHRvIHRoZSBUVU4gZGV2aWNlLCBhbmQgdmlhIGJyaWRnZSBvciBPcGVuIHZTd2l0Y2ggYXR0YWNoaW5nIHRoZSBUVU4gZGV2aWNlICh3aGljaCB0cmlnZ2VycyBgbmRvX3NldF9yeF9oZWFkcm9vbWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludGVnZXIgb3ZlcmZsb3dzLiBTcGVjaWZpY2FsbHksIGl0IGNsYW1wcyB0aGUgbWF4aW11bSBoZWFkcm9vbSBpbiBgdHVuX3NldF9oZWFkcm9vbWAgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBhbGxvY2F0aW9ucywgYW5kIGl0IGFkZHMvbW9kaWZpZXMgYHBza2JfbWF5X3B1bGxgIGNoZWNrcyBpbiBgdHVuX2dldF91c2VyYCB0byBlbnN1cmUgdGhhdCBwYWNrZXQgaGVhZGVycyBhcmUgc2FmZWx5IGFjY2Vzc2libGUgaW4gdGhlIGxpbmVhciBwb3J0aW9uIG9mIHRoZSBzb2NrZXQgYnVmZmVyIGJlZm9yZSByZWFkaW5nIHRoZW0uIFRoZXNlIGFyZSBjbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWVzIChvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcykgdGhhdCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIFVCU0FOLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UpIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzBkZGNmYWVhYzMyZWU2NTRhMmExYTdmZWQxMmExMWMzYWIxYjkxMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDAyOjIzOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCBmZWQ5ZGZkZmNjM2JjLi41YmJlMzEyMzk3OWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtMTEwNywxMSAmIzQzOzExMDcsMTYgQEAgc3RhdGljIG5ldGRldl9mZWF0dXJlc190IHR1bl9uZXRfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiBzdGF0aWMgdm9pZCB0dW5fc2V0X2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfaHIpCiB7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXNpemVfdCBtYXhfaGVhZHJvb207CiAKLQlpZiAobmV3X2hyICZsdDsgTkVUX1NLQl9QQUQpCi0JCW5ld19ociA9IE5FVF9TS0JfUEFEOwomIzQzOwltYXhfaGVhZHJvb20gPSBtaW5fdChzaXplX3QsIFNLQl9NQVhfSEVBRCgwKSwgVTE2X01BWCAtIDEpOwogCi0JdHVuLSZndDthbGlnbiA9IG5ld19ocjsKJiM0MzsJaWYgKCh0dW4tJmd0O2ZsYWdzICZhbXA7IFRVTl9UWVBFX01BU0spID09IElGRl9UQVApCiYjNDM7CQltYXhfaGVhZHJvb20gLT0gRVRIX0hMRU4gJiM0MzsgTkVUX0lQX0FMSUdOOwomIzQzOwllbHNlCiYjNDM7CQltYXhfaGVhZHJvb20gLT0gMTsKJiM0MzsKJiM0MzsJdHVuLSZndDthbGlnbiA9IGNsYW1wX3QoaW50LCBuZXdfaHIsIE5FVF9TS0JfUEFELCBtYXhfaGVhZHJvb20pOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTgyMiw3ICYjNDM7MTgyNywxMyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwKIAlzd2l0Y2ggKHR1bi0mZ3Q7ZmxhZ3MgJmFtcDsgVFVOX1RZUEVfTUFTSykgewogCWNhc2UgSUZGX1RVTjoKIAkJaWYgKHR1bi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX05PX1BJKSB7Ci0JCQl1OCBpcF92ZXJzaW9uID0gc2tiLSZndDtsZW4gPyAoc2tiLSZndDtkYXRhWzBdICZndDsmZ3Q7IDQpIDogMDsKJiM0MzsJCQl1OCBpcF92ZXJzaW9uOwomIzQzOwomIzQzOwkJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIDEpKSB7CiYjNDM7CQkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQkJCWdvdG8gZHJvcDsKJiM0MzsJCQl9CiYjNDM7CQkJaXBfdmVyc2lvbiA9IHNrYi0mZ3Q7ZGF0YVswXSAmZ3Q7Jmd0OyA0OwogCiAJCQlzd2l0Y2ggKGlwX3ZlcnNpb24pIHsKIAkJCWNhc2UgNDoKQEAgLTE4NDIsNyAmIzQzOzE4NTMsNyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwKIAkJc2tiLSZndDtkZXYgPSB0dW4tJmd0O2RldjsKIAkJYnJlYWs7CiAJY2FzZSBJRkZfVEFQOgotCQlpZiAoZnJhZ3MgJmFtcDsmYW1wOyAhcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOKSkgewomIzQzOwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fSERSX1RSVU5DOwogCQkJZ290byBkcm9wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDI6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MQoJCQkJCQkJb3V0cHV0OiAxNzMKCQkJCQkJCXRob3VnaHRzOiA3NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdHVuLmNgIFBhdGNoOiBBIEtBU0FOL1VCU0FOIEZvY3VzKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoZXNlIGNoYW5nZXMgdG8gYGRyaXZlcnMvbmV0L3R1bi5jYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgZm9jdXNlZCBvbiBoYXJkZW5pbmcgYWdhaW5zdCBLQVNBTiBhbmQgVUJTQU4gcmVwb3J0cywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZCBnaXZlbiB0aGUgY29kZSBsb2NhdGlvbnMuCgpGaXJzdCwgaW4gYHR1bl9zZXRfaGVhZHJvb21gLCB0aGV5JiMzOTtyZSByZXN0cmljdGluZyB0aGUgbWF4aW11bSBoZWFkcm9vbSB1c2luZyBgY2xhbXBfdGAuIExvb2tpbmcgYXQgdGhlIGxvZ2ljLCB0aGUgaW50ZW50IGlzIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBvdXQtb2YtYm91bmRzIGlzc3VlIGR1cmluZyBTS0IgYWxsb2NhdGlvbiBieSBzZXR0aW5nIGEgaGFyZCBsaW1pdCBmb3IgaGVhZHJvb20uIFRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIHJldmlzZWQgY2FsY3VsYXRpb24gb2YgYG1heF9oZWFkcm9vbWAsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHR5cGUgb2YgaW50ZXJmYWNlIChgSUZGX1RBUGAgdnMgYElGRl9UVU5gKS4gVGhlIGNsYW1waW5nIGVuc3VyZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgcmVtYWlucyB3aXRoaW4gc2FmZSBib3VuZHMuCgpTZWNvbmQsIHRoZSBgdHVuX2dldF91c2VyYCBmdW5jdGlvbiBmb3IgYElGRl9UVU5gIG5vdyBpbmNsdWRlcyBhIGBwc2tiX21heV9wdWxsKHNrYiwgMSlgIGNoZWNrIGJlZm9yZSByZWFkaW5nIGBza2ItJmd0O2RhdGFbMF1gLiBUaGlzIGlzIHRleHRib29rIEtBU0FOIG1pdGlnYXRpb24uIEl0IHByZXZlbnRzIGFjY2Vzc2luZyBkYXRhIHRoYXQgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBvciBpcyBvdXRzaWRlIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBJZiBJJiMzOTttIHJlYWRpbmcgdGhpcyBjb3JyZWN0bHksIGl0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkLgoKVGhpcmQsIGEgc2ltaWxhciBmaXggaXMgYXBwbGllZCB0byBgdHVuX2dldF91c2VyYCBmb3IgYElGRl9UQVBgLiBUaGUgY29uZGl0aW9uYWwgdGhhdCBoYWQgYGZyYWdzYCBhbmQgYCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pYCBoYXMgYmVlbiBzaW1wbGlmaWVkIHRvIGp1c3QgYCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pYC4gVGhpcyBlbnN1cmVzIHRoYXQgYEVUSF9ITEVOYCBieXRlcyBhcmUgYXZhaWxhYmxlIGZvciBwdWxsaW5nIGZyb20gdGhlIFNLQiBiZWZvcmUgdGhleSYjMzk7cmUgYWNjZXNzZWQuIEFnYWluLCB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLiBUaGUgYW5zd2VyIGlzICpubyouIExvb2tpbmcgY2xvc2VseSBhdCB0aGUgcGF0Y2ggYW5kIG15IGV4cGVyaWVuY2UsIHRoZSBgcHNrYl9tYXlfcHVsbGAgZnVuY3Rpb24gaXNuJiMzOTt0IGFib3V0IGluaXRpYWxpemluZyBtZW1vcnkuIEl0JiMzOTtzIHNvbGVseSBhYm91dCBlbnN1cmluZyBkYXRhIGlzIGFjY2Vzc2libGUgaW4gdGhlIGxpbmVhciBwYXJ0IG9mIHRoZSBTS0IgdG8gYXZvaWQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlIGB0dW5fc2V0X2hlYWRyb29tYCBjaGFuZ2Ugc2ltcGx5IGNhcHMgdGhlIGFsbG9jYXRpb24gc2l6ZSwgbm90IGl0cyBpbml0aWFsaXphdGlvbi4KClRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGZvY3VzZWQgb24gZWxpbWluYXRpbmcgcG90ZW50aWFsIEtBU0FOL1VCU0FOIGhpdHMgYnkgZW5mb3JjaW5nIGJvdW5kcyBjaGVja3MgYW5kIHJlc3RyaWN0aW5nIGhlYWRyb29tIHRvIHByZXZlbnQgb3ZlcmZsb3dzLCBub3QgYWRkcmVzc2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGV5IGFyZSBhbGwgYWJvdXQgcHJvdGVjdGluZyBhZ2FpbnN0IGtub3duIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBjb21mb3J0YWJsZSBzZXR0aW5nIE5lZWRzS01TQU4gdG8gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cy4gU3BlY2lmaWNhbGx5LCBpdCBjbGFtcHMgdGhlIG1heGltdW0gaGVhZHJvb20gaW4gYHR1bl9zZXRfaGVhZHJvb21gIHRvIHByZXZlbnQgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIG91dC1vZi1ib3VuZHMgYWxsb2NhdGlvbnMsIGFuZCBpdCBhZGRzL21vZGlmaWVzIGBwc2tiX21heV9wdWxsYCBjaGVja3MgaW4gYHR1bl9nZXRfdXNlcmAgdG8gZW5zdXJlIHRoYXQgcGFja2V0IGhlYWRlcnMgYXJlIHNhZmVseSBhY2Nlc3NpYmxlIGluIHRoZSBsaW5lYXIgcG9ydGlvbiBvZiB0aGUgc29ja2V0IGJ1ZmZlciBiZWZvcmUgcmVhZGluZyB0aGVtLiBUaGVzZSBhcmUgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMpIHRoYXQgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlKSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBtYXhpbXVtIGhlYWRyb29tIGluIGB0dW5fc2V0X2hlYWRyb29tYCB0byBwcmV2ZW50IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIGFsbG9jYXRpb25zLCBhbmQgaXQgYWRkcy9tb2RpZmllcyBgcHNrYl9tYXlfcHVsbGAgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIHRvIGVuc3VyZSB0aGF0IHBhY2tldCBoZWFkZXJzIGFyZSBzYWZlbHkgYWNjZXNzaWJsZSBpbiB0aGUgbGluZWFyIHBvcnRpb24gb2YgdGhlIHNvY2tldCBidWZmZXIgYmVmb3JlIHJlYWRpbmcgdGhlbS4gVGhlc2UgYXJlIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzKSB0aGF0IGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSkgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyMzoxNC4wODE4OTgxMDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUwODI2MzgxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX3NldF9oZWFkcm9vbVwiLFxuICAgIFwidHVuX2dldF91c2VyXCIsXG4gICAgXCJ0dW5fY2hyX3dyaXRlX2l0ZXJcIixcbiAgICBcInR1bl9zZW5kbXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MuIFNwZWNpZmljYWxseSwgaXQgY2xhbXBzIHRoZSBtYXhpbXVtIGhlYWRyb29tIGluIGB0dW5fc2V0X2hlYWRyb29tYCB0byBwcmV2ZW50IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIGFsbG9jYXRpb25zLCBhbmQgaXQgYWRkcy9tb2RpZmllcyBgcHNrYl9tYXlfcHVsbGAgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIHRvIGVuc3VyZSB0aGF0IHBhY2tldCBoZWFkZXJzIGFyZSBzYWZlbHkgYWNjZXNzaWJsZSBpbiB0aGUgbGluZWFyIHBvcnRpb24gb2YgdGhlIHNvY2tldCBidWZmZXIgYmVmb3JlIHJlYWRpbmcgdGhlbS4gVGhlc2UgYXJlIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzKSB0aGF0IGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSkgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRyb29tIGNhbGN1bGF0aW9uIGluIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYWRkcyBwYWNrZXQgaGVhZGVyIHB1bGwgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIGZvciBUVU4vVEFQIGRldmljZXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBgd3JpdGUoKWAgb3IgYHNlbmRtc2coKWAgdG8gdGhlIFRVTiBkZXZpY2UsIGFuZCB2aWEgYnJpZGdlIG9yIE9wZW4gdlN3aXRjaCBhdHRhY2hpbmcgdGhlIFRVTiBkZXZpY2UgKHdoaWNoIHRyaWdnZXJzIGBuZG9fc2V0X3J4X2hlYWRyb29tYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcGFja2V0IHByb2Nlc3NpbmcgYW5kIGRldmljZSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjM6MTQuMDgxOTA0MDQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk0NTQ1MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzBkZGNmYWVhYzMyZWU2NTRhMmExYTdmZWQxMmExMWMzYWIxYjkxMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwMjoyMzoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXFxuaW5kZXggZmVkOWRmZGZjYzNiYy4uNWJiZTMxMjM5NzllMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jXFxuQEAgLTExMDcsMTEgKzExMDcsMTYgQEAgc3RhdGljIG5ldGRldl9mZWF0dXJlc190IHR1bl9uZXRfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHN0YXRpYyB2b2lkIHR1bl9zZXRfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19ocilcXG4ge1xcbiBcXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0c2l6ZV90IG1heF9oZWFkcm9vbTtcXG4gXFxuLVxcdGlmIChuZXdfaHIgXFx1MDAzYyBORVRfU0tCX1BBRClcXG4tXFx0XFx0bmV3X2hyID0gTkVUX1NLQl9QQUQ7XFxuK1xcdG1heF9oZWFkcm9vbSA9IG1pbl90KHNpemVfdCwgU0tCX01BWF9IRUFEKDApLCBVMTZfTUFYIC0gMSk7XFxuIFxcbi1cXHR0dW4tXFx1MDAzZWFsaWduID0gbmV3X2hyO1xcbitcXHRpZiAoKHR1bi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUVU5fVFlQRV9NQVNLKSA9PSBJRkZfVEFQKVxcbitcXHRcXHRtYXhfaGVhZHJvb20gLT0gRVRIX0hMRU4gKyBORVRfSVBfQUxJR047XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWF4X2hlYWRyb29tIC09IDE7XFxuK1xcbitcXHR0dW4tXFx1MDAzZWFsaWduID0gY2xhbXBfdChpbnQsIG5ld19ociwgTkVUX1NLQl9QQUQsIG1heF9oZWFkcm9vbSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkXFxuQEAgLTE4MjIsNyArMTgyNywxMyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4gXFx0c3dpdGNoICh0dW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVFVOX1RZUEVfTUFTSykge1xcbiBcXHRjYXNlIElGRl9UVU46XFxuIFxcdFxcdGlmICh0dW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX05PX1BJKSB7XFxuLVxcdFxcdFxcdHU4IGlwX3ZlcnNpb24gPSBza2ItXFx1MDAzZWxlbiA/IChza2ItXFx1MDAzZWRhdGFbMF0gXFx1MDAzZVxcdTAwM2UgNCkgOiAwO1xcbitcXHRcXHRcXHR1OCBpcF92ZXJzaW9uO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMSkpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlwX3ZlcnNpb24gPSBza2ItXFx1MDAzZWRhdGFbMF0gXFx1MDAzZVxcdTAwM2UgNDtcXG4gXFxuIFxcdFxcdFxcdHN3aXRjaCAoaXBfdmVyc2lvbikge1xcbiBcXHRcXHRcXHRjYXNlIDQ6XFxuQEAgLTE4NDIsNyArMTg1Myw3IEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbiBcXHRcXHRza2ItXFx1MDAzZWRldiA9IHR1bi1cXHUwMDNlZGV2O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJRkZfVEFQOlxcbi1cXHRcXHRpZiAoZnJhZ3MgXFx1MDAyNlxcdTAwMjYgIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTikpIHtcXG4rXFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0hEUl9UUlVOQztcXG4gXFx0XFx0XFx0Z290byBkcm9wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyMzoxNS40NzcyOTg4MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMjI2NzQ4NDU3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX3NldF9oZWFkcm9vbVwiLFxuICAgIFwidHVuX2dldF91c2VyXCIsXG4gICAgXCJ0dW5fY2hyX3dyaXRlX2l0ZXJcIixcbiAgICBcInR1bl9zZW5kbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaGVhZHJvb20gY2FsY3VsYXRpb24gaW4gYHR1bl9zZXRfaGVhZHJvb21gIGFuZCBhZGRzIHBhY2tldCBoZWFkZXIgcHVsbCBjaGVja3MgaW4gYHR1bl9nZXRfdXNlcmAgZm9yIFRVTi9UQVAgZGV2aWNlcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIGB3cml0ZSgpYCBvciBgc2VuZG1zZygpYCB0byB0aGUgVFVOIGRldmljZSwgYW5kIHZpYSBicmlkZ2Ugb3IgT3BlbiB2U3dpdGNoIGF0dGFjaGluZyB0aGUgVFVOIGRldmljZSAod2hpY2ggdHJpZ2dlcnMgYG5kb19zZXRfcnhfaGVhZHJvb21gKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgZGV2aWNlIGNvbmZpZ3VyYXRpb24gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMGRkY2ZhZWFjMzJlZTY1NGEyYTFhN2ZlZDEyYTExYzNhYjFiOTEyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDI6MjM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5pbmRleCBmZWQ5ZGZkZmNjM2JjLi41YmJlMzEyMzk3OWUwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdHVuLmNcbisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5AQCAtMTEwNywxMSArMTEwNywxNiBAQCBzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgdHVuX25ldF9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgdm9pZCB0dW5fc2V0X2hlYWRyb29tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfaHIpXG4ge1xuIFx0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7XG4rXHRzaXplX3QgbWF4X2hlYWRyb29tO1xuIFxuLVx0aWYgKG5ld19ociBcdTAwM2MgTkVUX1NLQl9QQUQpXG4tXHRcdG5ld19ociA9IE5FVF9TS0JfUEFEO1xuK1x0bWF4X2hlYWRyb29tID0gbWluX3Qoc2l6ZV90LCBTS0JfTUFYX0hFQUQoMCksIFUxNl9NQVggLSAxKTtcbiBcbi1cdHR1bi1cdTAwM2VhbGlnbiA9IG5ld19ocjtcbitcdGlmICgodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBUVU5fVFlQRV9NQVNLKSA9PSBJRkZfVEFQKVxuK1x0XHRtYXhfaGVhZHJvb20gLT0gRVRIX0hMRU4gKyBORVRfSVBfQUxJR047XG4rXHRlbHNlXG4rXHRcdG1heF9oZWFkcm9vbSAtPSAxO1xuK1xuK1x0dHVuLVx1MDAzZWFsaWduID0gY2xhbXBfdChpbnQsIG5ld19ociwgTkVUX1NLQl9QQUQsIG1heF9oZWFkcm9vbSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkXG5AQCAtMTgyMiw3ICsxODI3LDEzIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuIFx0c3dpdGNoICh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFRVTl9UWVBFX01BU0spIHtcbiBcdGNhc2UgSUZGX1RVTjpcbiBcdFx0aWYgKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX05PX1BJKSB7XG4tXHRcdFx0dTggaXBfdmVyc2lvbiA9IHNrYi1cdTAwM2VsZW4gPyAoc2tiLVx1MDAzZWRhdGFbMF0gXHUwMDNlXHUwMDNlIDQpIDogMDtcbitcdFx0XHR1OCBpcF92ZXJzaW9uO1xuK1xuK1x0XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDEpKSB7XG4rXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byBkcm9wO1xuK1x0XHRcdH1cbitcdFx0XHRpcF92ZXJzaW9uID0gc2tiLVx1MDAzZWRhdGFbMF0gXHUwMDNlXHUwMDNlIDQ7XG4gXG4gXHRcdFx0c3dpdGNoIChpcF92ZXJzaW9uKSB7XG4gXHRcdFx0Y2FzZSA0OlxuQEAgLTE4NDIsNyArMTg1Myw3IEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuIFx0XHRza2ItXHUwMDNlZGV2ID0gdHVuLVx1MDAzZWRldjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElGRl9UQVA6XG4tXHRcdGlmIChmcmFncyBcdTAwMjZcdTAwMjYgIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTikpIHtcbitcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7XG4gXHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9IRFJfVFJVTkM7XG4gXHRcdFx0Z290byBkcm9wO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjM6MTUuNDc3Mjk5ODA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjExMDMxMTM4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUVU4vVEFQIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIG1ha2luZyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgVFVOL1RBUCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGRyaXZlcnMvbmV0L3R1bi5jYC4gVGhlIGNvcmUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGB0dW5fZ2V0X3VzZXJgLiBUaGlzIHN1Z2dlc3RzIHRoZXkgYXJlIGFkZHJlc3NpbmcgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGhlYWRyb29tIG1hbmFnZW1lbnQgYW5kIGRhdGEgcmV0cmlldmFsLlxuXG5MZXQncyBkaXZlIGludG8gYHR1bl9zZXRfaGVhZHJvb21gLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGEgc2ltcGxlIG1pbmltdW0gY2hlY2sgd2l0aCBhIG1vcmUgcm9idXN0IGNsYW1waW5nIG1lY2hhbmlzbS4gSW5zdGVhZCBvZiBqdXN0IGVuc3VyaW5nIGBuZXdfaHJgIGlzIGF0IGxlYXN0IGBORVRfU0tCX1BBRGAsIGl0IG5vdyBjYWxjdWxhdGVzIGEgYG1heF9oZWFkcm9vbWAgYmFzZWQgb24gYFNLQl9NQVhfSEVBRGAsIGBVMTZfTUFYYCwgYW5kIGFkanVzdHMgaXQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQncyBhIFRBUCBpbnRlcmZhY2UgKHN1YnRyYWN0aW5nIGBFVEhfSExFTiArIE5FVF9JUF9BTElHTmApIG9yIFRVTiBpbnRlcmZhY2UuIEl0IHRoZW4gY2xhbXBzIGBuZXdfaHJgIGJldHdlZW4gYE5FVF9TS0JfUEFEYCBhbmQgdGhpcyBjYWxjdWxhdGVkIGBtYXhfaGVhZHJvb21gLiBUaGlzIHN1Z2dlc3RzIHRoZXkncmUgYWltaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgZXhjZXNzaXZlIGhlYWRyb29tIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNvbnN0cmFpbnRzIG9mIGRpZmZlcmVudCBpbnRlcmZhY2UgdHlwZXMuIFRoaXMgY2xhbXBpbmcgaXMgbXVjaCBtb3JlIHNlbnNpYmxlLlxuXG5Nb3ZpbmcgdG8gYHR1bl9nZXRfdXNlcmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB0dW5fY2hyX3dyaXRlX2l0ZXJgLCBJIHNlZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgYm90aCBUVU4gYW5kIFRBUCBpbnRlcmZhY2VzIGluIHRoZSBJRkZfTk9fUEkgY2FzZS4gSW4gdGhlIFRVTiBjYXNlLCB0aGVyZSdzIG5vdyBhIGNoZWNrIHVzaW5nIGBwc2tiX21heV9wdWxsYCB0byBlbnN1cmUgdGhhdCB0aGVyZSdzIGF0IGxlYXN0IG9uZSBieXRlIGF2YWlsYWJsZSB0byByZWFkIHRoZSBJUCB2ZXJzaW9uLiBUaGlzIGxvb2tzIGxpa2UgYSBuZWNlc3Nhcnkgc2FuaXR5IGNoZWNrLCBhbmQgcHJldmVudGluZyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaXMgYWx3YXlzIGEgZ29vZCB0aGluZy5cblxuSW4gdGhlIFRBUCBjYXNlLCB0aGUgYHBza2JfbWF5X3B1bGxgIGNoZWNrIGlzIGFwcGxpZWQgdW5jb25kaXRpb25hbGx5IGJlZm9yZSByZWFkaW5nIHRoZSBFdGhlcm5ldCBoZWFkZXIsIHdoaWNoIHNlZW1zIGxpa2UgYSBtdWNoIHN0cm9uZ2VyIGNoZWNrLiBJZiBpdCBmYWlscywgdGhlIHBhY2tldCBpcyBkcm9wcGVkIHdpdGggYFNLQl9EUk9QX1JFQVNPTl9IRFJfVFJVTkNgLiBBZ2FpbiwgdGhpcyBwcmV2ZW50cyBwb3NzaWJsZSByZWFkcyBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGUgU0tCLCB3aGljaCBpcyBjcml0aWNhbC5cblxuU28sIGluIHN1bW1hcnksIHRoZXNlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIGFpbWVkIGF0IGZpeGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMgcmVsYXRlZCB0byBoZWFkcm9vbSBhbmQgZGF0YSBhY2Nlc3MgaW4gdGhlIFRVTi9UQVAgZHJpdmVyLiBUaGUgY29kZSBub3cgY2xhbXBzIHRoZSBoZWFkcm9vbSBhbmQgcGVyZm9ybXMgYmV0dGVyIGJvdW5kcyBjaGVja2luZy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gZXhhY3RseSBob3cgYHR1bl9zZXRfaGVhZHJvb21gIGlzIGJlaW5nIGNhbGxlZCwgYnV0IHRoZSBkaXJlY3Rpb24gaGVyZSBpcyBnb29kIGFuZCBwb2ludHMgdG8gZml4aW5nIHNvbWUgc2lnbmlmaWNhbnQgcmVsaWFiaWxpdHkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjM6MzYuNTgwNDE3OTY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjEyNzgwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fc2V0X2hlYWRyb29tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTEwOTk9c3RhdGljIG5ldGRldl9mZWF0dXJlc190IHR1bl9uZXRfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMTA2LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjExMDc6c3RhdGljIHZvaWQgdHVuX3NldF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X2hyKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTExMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTE4OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR1bl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTE5NS1cXHQubmRvX3NlbGVjdF9xdWV1ZVxcdD0gdHVuX3NlbGVjdF9xdWV1ZSxcXG5kcml2ZXJzL25ldC90dW4uYzoxMTk2OlxcdC5uZG9fc2V0X3J4X2hlYWRyb29tXFx0PSB0dW5fc2V0X2hlYWRyb29tLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTExOTctXFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gdHVuX25ldF9nZXRfc3RhdHM2NCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEyNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyODMtXFx0Lm5kb19mZWF0dXJlc19jaGVja1xcdD0gcGFzc3RocnVfZmVhdHVyZXNfY2hlY2ssXFxuZHJpdmVycy9uZXQvdHVuLmM6MTI4NDpcXHQubmRvX3NldF9yeF9oZWFkcm9vbVxcdD0gdHVuX3NldF9oZWFkcm9vbSxcXG5kcml2ZXJzL25ldC90dW4uYy0xMjg1LVxcdC5uZG9fYnBmXFx0XFx0PSB0dW5feGRwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyMzozNy4xNDY1NTEzMzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDk2NTc5MDMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRVTi9UQVAgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGB0dW5fZ2V0X3VzZXJgIHdpdGhpbiBgZHJpdmVycy9uZXQvdHVuLmNgLiBJbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCBgdHVuX3NldF9oZWFkcm9vbWAgaXMgZ2V0dGluZyBhIGNsYW1wLCBwcmVzdW1hYmx5IHRvIGVuc3VyZSB0aGUgaGVhZHJvb20gZG9lc24ndCBleGNlZWQgc29tZSBzYW5lIG1heGltdW0uIE1ha2VzIHNlbnNlLCBjb3VsZCBwcmV2ZW50IG92ZXJmbG93IGlzc3Vlcy4gQW5kIHRoZW4gYHR1bl9nZXRfdXNlcmAgaXMgc2VlaW5nIHNvbWUgYHBza2JfbWF5X3B1bGxgIGNoZWNrcyBiZWluZyBhZGRlZC4gUmlnaHQsIHRoYXQncyBpbXBvcnRhbnQgZm9yIGVuc3VyaW5nIHdlJ3JlIG5vdCB0cnlpbmcgdG8gcHVsbCBkYXRhIGZyb20gYSBwYWNrZXQgYnVmZmVyIHRoYXQgZG9lc24ndCBhY3R1YWxseSBleGlzdCwgb3IgdGhhdCB3ZSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzLiBUaGVzZSBhcmUgcHJldHR5IHN0YW5kYXJkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0ZWNobmlxdWVzLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgZHJpdmVyLCB0aGF0J3MgZ29vZC4gV2hpY2ggbWVhbnMsIGl0J3Mgc29tZXRoaW5nIEkgY2FuIGFic29sdXRlbHkgZnV6ei4gVGhlIFRVTi9UQVAgZHJpdmVyIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIGFueXdheS4gQm90aCBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGB0dW5fZ2V0X3VzZXJgIG5vdyBuZWVkIHRvIGJlIHN1YmplY3RlZCB0byBpbnRlbnNlIHNjcnV0aW55LiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBsb29rcyBsaWtlIGZvciBgZHJpdmVycy9uZXQvdHVuLmNgIHRvIGNvbmZpcm0gbXkgZnV6emluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyMzo1OC4xMTIzNDM5NTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc2NTcxNTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUVU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzkxOmNvbmZpZyBUVU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5Mi1cXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz00MTU9Y29uZmlnIFRBUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MjE6Y29uZmlnIFRVTl9WTkVUX0NST1NTX0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjItXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY3Jvc3MtZW5kaWFuIHZuZXQgaGVhZGVycyBvbiBsaXR0bGUtZW5kaWFuIGtlcm5lbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjIzOjU4Ljg4ODkyMTkxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNDUwNTQ2NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFVOIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBUVU5gIGNvbmZpZ3VyYXRpb24gYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIGludGVyYWN0IHdpdGggaXQuIFRoZSBndWlkYW5jZSBpcyBwb2ludGluZyBtZSB0b3dhcmRzIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYHR1bl9nZXRfdXNlcmAgYXMga2V5IGFyZWFzIHRvIGV4YW1pbmUuIEhtbSwgaGFuZyBvbiBhIHNlY29uZC4gSXQgbG9va3MgbGlrZSBgdHVuX3NldF9oZWFkcm9vbWAgaXMgYWN0dWFsbHkgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBhIGJpdCBvZiBhIHJlZCBmbGFnLCBiZWNhdXNlIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy5cblxuV2FpdCBhIG1pbnV0ZSwgYWx0aG91Z2ggaXQncyBzdGF0aWMsIGl0ICppcyogYXNzaWduZWQgdG8gYC5uZG9fc2V0X3J4X2hlYWRyb29tYC4gU28sIHRoZXJlJ3MgYSByZWFzb24gaXQncyB1c2VkLiBUaGUgcXVlc3Rpb24gbm93IGlzLCBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgd3JhcHBlciBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LiBJJ2xsIGNoZWNrIHdoZXJlIGAubmRvX3NldF9yeF9oZWFkcm9vbWAgaXMgYWN0dWFsbHkgdXNlZCBhbmQgc2VlIGlmIHRoYXQgcmV2ZWFscyBhIG1vcmUgc3VpdGFibGUgZW50cnkgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjQ6MjAuMzM5NDcyMDE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODQxNTcwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRvX3NldF9yeF9oZWFkcm9vbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0a2l0LmM9MzMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0a2l0X25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYy0zMzYtXFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gbmV0a2l0X3NldF9tdWx0aWNhc3QsXFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MzM3OlxcdC5uZG9fc2V0X3J4X2hlYWRyb29tXFx0PSBuZXRraXRfc2V0X2hlYWRyb29tLFxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzOC1cXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gbmV0a2l0X3NldF9tYWNhZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTE4OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR1bl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTE5NS1cXHQubmRvX3NlbGVjdF9xdWV1ZVxcdD0gdHVuX3NlbGVjdF9xdWV1ZSxcXG5kcml2ZXJzL25ldC90dW4uYzoxMTk2OlxcdC5uZG9fc2V0X3J4X2hlYWRyb29tXFx0PSB0dW5fc2V0X2hlYWRyb29tLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTExOTctXFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gdHVuX25ldF9nZXRfc3RhdHM2NCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEyNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyODMtXFx0Lm5kb19mZWF0dXJlc19jaGVja1xcdD0gcGFzc3RocnVfZmVhdHVyZXNfY2hlY2ssXFxuZHJpdmVycy9uZXQvdHVuLmM6MTI4NDpcXHQubmRvX3NldF9yeF9oZWFkcm9vbVxcdD0gdHVuX3NldF9oZWFkcm9vbSxcXG5kcml2ZXJzL25ldC90dW4uYy0xMjg1LVxcdC5uZG9fYnBmXFx0XFx0PSB0dW5feGRwLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jPTE3MDk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2ZXRoX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC92ZXRoLmMtMTcyMy1cXHQubmRvX2ZlYXR1cmVzX2NoZWNrXFx0PSBwYXNzdGhydV9mZWF0dXJlc19jaGVjayxcXG5kcml2ZXJzL25ldC92ZXRoLmM6MTcyNDpcXHQubmRvX3NldF9yeF9oZWFkcm9vbVxcdD0gdmV0aF9zZXRfcnhfaGVhZHJvb20sXFxuZHJpdmVycy9uZXQvdmV0aC5jLTE3MjUtXFx0Lm5kb19icGZcXHRcXHQ9IHZldGhfeGRwLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDY0PXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTM5Ni0gKlxcdHNhbXBsaW5nIHBhY2tldC5cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjEzOTc6ICogdm9pZCAoKm5kb19zZXRfcnhfaGVhZHJvb20pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZWVkZWRfaGVhZHJvb20pO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTM5OC0gKlxcdFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBoZWFkcm9vbSB0aGF0IHRoZSBza2IgbXVzdFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xNDQ4PXN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE2NzQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTY3NTpcXHR2b2lkXFx0XFx0XFx0KCpuZG9fc2V0X3J4X2hlYWRyb29tKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTY3Ni1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IG5lZWRlZF9oZWFkcm9vbSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTI3NTQ9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9zZXRfcnhfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19ocilcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI3NTUte1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6Mjc1NjpcXHRpZiAoZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0X3J4X2hlYWRyb29tKVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6Mjc1NzpcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXRfcnhfaGVhZHJvb20oZGV2LCBuZXdfaHIpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjc1OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI0OjIyLjEyMzYzNDM0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNzE3MjkxNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgT3JpZ2lucyBvZiBgbmV0ZGV2X3NldF9yeF9oZWFkcm9vbWAqKlxuXG5Pa2F5LCBzbyBgbmV0ZGV2X3NldF9yeF9oZWFkcm9vbWAgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIldoZXJlIGlzIHRoaXMgY2FsbGVkIGZyb20/XCIgVGhhdCdzIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIGNvZGUuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlciBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgKndoeSogb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGNvbnRleHRzIGluIHRoZSBkcml2ZXIgb3IgbmV0d29ya2luZyBzdGFjayB3aGVyZSBpdCdzIGludm9rZWQuIEkga25vdyBob3cgdG8gdXNlIGdyZXAgYW5kIG90aGVyIHRvb2xzIHRvIGZpbmQgdXNhZ2VzLCBidXQgSSBuZWVkIHRvIGRvIHNvIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NzIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyNDo0My44NDA5Mjg2MzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTk4OTM3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X3NldF9yeF9oZWFkcm9vbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yNzQ5PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmV0ZGV2X2dldF9md2RfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjc1My1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjI3NTQ6c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9zZXRfcnhfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19ocilcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI3NTUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yNzYxPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfcmVzZXRfcnhfaGVhZHJvb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI3NjIte1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6Mjc2MzpcXHRuZXRkZXZfc2V0X3J4X2hlYWRyb29tKGRldiwgLTEpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjc2NC19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM9MzE1PXN0YXRpYyB2b2lkIHVwZGF0ZV9oZWFkcm9vbShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGludCBuZXdfaHIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzE5LVxcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXFx1MDAyNmJyLVxcdTAwM2Vwb3J0X2xpc3QsIGxpc3QpXFxubmV0L2JyaWRnZS9icl9pZi5jOjMyMDpcXHRcXHRuZXRkZXZfc2V0X3J4X2hlYWRyb29tKHAtXFx1MDAzZWRldiwgbmV3X2hyKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzIxLVxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jPTU2MD1pbnQgYnJfYWRkX2lmKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy02NTItXFx0ZWxzZVxcbm5ldC9icmlkZ2UvYnJfaWYuYzo2NTM6XFx0XFx0bmV0ZGV2X3NldF9yeF9oZWFkcm9vbShkZXYsIGJyX2hyKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtNjU0LVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMyNj1zdGF0aWMgdm9pZCBvdnNfdXBkYXRlX2hlYWRyb29tKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHVuc2lnbmVkIGludCBuZXdfaGVhZHJvb20pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yMzM0LVxcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX292c2xfaXNfaGVsZCgpKVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjIzMzU6XFx0XFx0XFx0bmV0ZGV2X3NldF9yeF9oZWFkcm9vbSh2cG9ydC1cXHUwMDNlZGV2LCBuZXdfaGVhZHJvb20pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTIzMzYtXFx0fVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMzOT1zdGF0aWMgaW50IG92c192cG9ydF9jbWRfbmV3KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDE2LVxcdGVsc2VcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNDE3OlxcdFxcdG5ldGRldl9zZXRfcnhfaGVhZHJvb20odnBvcnQtXFx1MDAzZWRldiwgZHAtXFx1MDAzZW1heF9oZWFkcm9vbSk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjQ6NDYuMTAwODU4MzYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMDkyNjU5MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRHJpdmVyIEhlYWRyb29tIGFuZCBUdW5uZWwgQmVoYXZpb3IqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCBgbmV0ZGV2X3NldF9yeF9oZWFkcm9vbWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBicmlkZ2UgYW5kIE9wZW4gdlN3aXRjaCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGNvbnRleHQgbGF0ZXIuIE5vdywgd2hhdCBhYm91dCB0aGF0IG90aGVyIGZ1bmN0aW9uLCBgdHVuX2dldF91c2VyYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCdzIGJlaW5nIGludm9rZWQuIEl0J3Mgb2Z0ZW4gdGhlIGNhc2UgdGhhdCBzZWVtaW5nbHkgaW5ub2N1b3VzIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGluIG11bHRpcGxlIHBsYWNlcywgY3JlYXRpbmcgdW5mb3Jlc2VlbiBpbnRlcmFjdGlvbnMuIFNvLCBsZXQgbWUgcXVpY2tseSB0cmFjZSBpdHMgY2FsbCBwYXRocyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBvdmVyYWxsIGltcGFjdC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG1vcmUgZXN0YWJsaXNoZWQgcGllY2VzIG9mIGNvZGUgdGhhdCBJIGtub3cgYmV0dGVyLiBUaGF04oCZcyBwcm9iYWJseSB0aGUgYmVzdCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY2NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI1OjA4LjE5MzUyMDM2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5Nzc4NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9nZXRfdXNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0xNjAzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdHVuX2J1aWxkX3NrYihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTY5OS0vKiBHZXQgcGFja2V0IGZyb20gdXNlciBzcGFjZSBidWZmZXIgKi9cXG5kcml2ZXJzL25ldC90dW4uYzoxNzAwOnN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTE3MDEtXFx0XFx0XFx0ICAgIHZvaWQgKm1zZ19jb250cm9sLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xOTk4PXN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIwMTEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjAxMjpcXHRyZXN1bHQgPSB0dW5fZ2V0X3VzZXIodHVuLCB0ZmlsZSwgTlVMTCwgZnJvbSwgbm9ibG9jaywgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIwMTMtXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0yNTI2PXN0YXRpYyBpbnQgdHVuX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI1NzItXFxuZHJpdmVycy9uZXQvdHVuLmM6MjU3MzpcXHRyZXQgPSB0dW5fZ2V0X3VzZXIodHVuLCB0ZmlsZSwgY3RsID8gY3RsLVxcdTAwM2VwdHIgOiBOVUxMLCBcXHUwMDI2bS1cXHUwMDNlbXNnX2l0ZXIsXFxuZHJpdmVycy9uZXQvdHVuLmMtMjU3NC1cXHRcXHRcXHQgICBtLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI1OjA4Ljk3MzMxMTI5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTQ1MjU3OTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgZGF0YSBmbG93IHdpdGhpbiB0aGlzIFRVTiBkcml2ZXIsIGFuZCBpdCBsb29rcyBsaWtlIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGFuZCBgdHVuX3NlbmRtc2dgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cy4gYHR1bl9jaHJfd3JpdGVfaXRlcmAsIHJpZ2h0LCB0aGF0J3MgdGhlIGAud3JpdGVfaXRlcmAgbWV0aG9kIHdpdGhpbiBgdHVuX2ZvcHNgLCBhbmQgYHR1bl9zZW5kbXNnYCBjb3JyZXNwb25kcyB0byB0aGUgYC5zZW5kbXNnYCBtZXRob2QgaW4gYHR1bl9wcm90b19vcHNgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIG15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrLlxuXG5Ob3csIGEgcmVkIGZsYWchIEkgc2VlIGB0dW5fZ2V0X3VzZXJgIGluIHRoaXMgY29udGV4dCwgYW5kIGl0IGxvb2tzIHByZXR0eSBzdWJzdGFudGlhbC4gSXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGltcGxpZXMgaXQncyBub3QgYSBkaXJlY3QsIGV4dGVybmFsIEFQSSBlbnRyeSBwb2ludC4gVGhlIGluc3RydWN0aW9ucyAqZG8qIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG92ZXIgdGhlc2UgaW50ZXJuYWwgaGVscGVycy4gSG1tLi4uc2hvdWxkIEkgaW5jbHVkZSBgdHVuX2dldF91c2VyYCBpbiBteSBhbmFseXNpcywgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWM/IEkgc2hvdWxkIGNoZWNrIGlmIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGFuZCBgdHVuX3NlbmRtc2dgIGFyZSBhY3R1YWxseSBub24tc3RhdGljIC0gdGhhdCB3b3VsZCBiZSB0aGUgZGVjaWRpbmcgZmFjdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI1OjMwLjQyNTg5MzI3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNDMzNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9jaHJfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0xNzAwPXN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTk5Ny1cXG5kcml2ZXJzL25ldC90dW4uYzoxOTk4OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5kcml2ZXJzL25ldC90dW4uYy0xOTk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM0ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNDgyLVxcdC5yZWFkX2l0ZXIgID0gdHVuX2Nocl9yZWFkX2l0ZXIsXFxuZHJpdmVycy9uZXQvdHVuLmM6MzQ4MzpcXHQud3JpdGVfaXRlciA9IHR1bl9jaHJfd3JpdGVfaXRlcixcXG5kcml2ZXJzL25ldC90dW4uYy0zNDg0LVxcdC5wb2xsXFx0PSB0dW5fY2hyX3BvbGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI1OjMwLjU3NjMzMzY0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODU3MTc2MzcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjY5MzksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI1OjQ5LjE0ODA5OTc2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyNjY3NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTIzOTA9c3RhdGljIGludCB0dW5feGRwX29uZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjUyNS1cXG5kcml2ZXJzL25ldC90dW4uYzoyNTI2OnN0YXRpYyBpbnQgdHVuX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG5kcml2ZXJzL25ldC90dW4uYy0yNTI3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI2NTA9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdHVuX3NvY2tldF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjY1MS1cXHQucGVla19sZW4gPSB0dW5fcGVla19sZW4sXFxuZHJpdmVycy9uZXQvdHVuLmM6MjY1MjpcXHQuc2VuZG1zZyA9IHR1bl9zZW5kbXNnLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTI2NTMtXFx0LnJlY3Ztc2cgPSB0dW5fcmVjdm1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjU6NDkuNzAwNzczMTM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMjMwODM5OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgUmVsZXZhbnQgS2VybmVsIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCB0byBmb2N1cyBvbi4gQm90aCBgZmlsZV9vcGVyYXRpb25zYCBhbmQgYHByb3RvX29wc2AgYXJlIHN0YXRpYywgYnV0IHRoZXkncmUgYXNzaWduZWQsIHNvIHRoZXkncmUgZGVmaW5pdGVseSBlbnRyeSBwb2ludHMuIFRoYXQncyBnb29kIHRvIGtub3cuIEknbGwgbWFrZSBzdXJlIHRvIGFkZCBgdHVuX2Nocl93cml0ZV9pdGVyYCBhbmQgYHR1bl9zZW5kbXNnYCB0byBteSBGb2N1c1N5bWJvbHMgbGlzdC5cblxuTm93LCB3aGF0IGFib3V0IGB0dW5fc2V0X2hlYWRyb29tYD8gSXQncyBhc3NpZ25lZCB0byBgbmRvX3NldF9yeF9oZWFkcm9vbWAsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gY29uc2lkZXIuIFRoZSB3cmFwcGVyIGlzIGBuZXRkZXZfc2V0X3J4X2hlYWRyb29tYCwgd2hpY2ggaXMgaW5saW5lLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnM6IGB1cGRhdGVfaGVhZHJvb21gIGFuZCBgYnJfYWRkX2lmYCB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfaWYuY2AsIHBsdXMgYG92c191cGRhdGVfaGVhZHJvb21gIGFuZCBgb3ZzX3Zwb3J0X2NtZF9uZXdgIGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIFNpbmNlIGBuZXRkZXZfc2V0X3J4X2hlYWRyb29tYCBpcyBpbmxpbmVkLCBidXQgdGhlc2UgYXJlIGFsbCBjYWxsaW5nIGl0LCBJIHRoaW5rIEkgY2FuIHNhZmVseSBhZGQgYGJyX2FkZF9pZmAgYW5kIGBvdnNfdnBvcnRfY21kX25ld2AgdG8gdGhlIGxpc3QuXG5cbldhaXQgYSBzZWNvbmQuIGB0dW5fc2V0X2hlYWRyb29tYCBpcyBhY3R1YWxseSBzdGF0aWMgd2l0aGluIGBkcml2ZXJzL25ldC90dW4uY2AuIFRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzLiBJZiBpdCdzIHN0YXRpYyBhbmQgaW5saW5lZCwgdGhlIGZ1enplciBtaWdodCBtaXNzIGl0LiBIb3dldmVyLCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgc28gaXQncyAqbm90KiBpbmxpbmVkLiBJIHdhcyByaWdodCB0byBmb2N1cyBvbiBpdC4gSSdsbCBhZGQgYHR1bl9jaHJfd3JpdGVfaXRlcmAsIGB0dW5fc2VuZG1zZ2AsIGBicl9hZGRfaWZgLCBhbmQgYG92c192cG9ydF9jbWRfbmV3YCB0byB0aGUgRm9jdXNTeW1ib2xzLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgYHR1bl9nZXRfdXNlcmAgdG9vLiBJdCdzIGEgbGFyZ2UgZnVuY3Rpb24sIHNvIGl0J3MgcHJvYmFibHkgbm90IGlubGluZWQuIE1pZ2h0IGJlIHdvcnRoIGNoZWNraW5nIHRvIGJlIHN1cmUsIGJ1dCBJIHRoaW5rIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGFuZCBgdHVuX3NlbmRtc2dgIGFyZSBzb2xpZCBlbnRyeSBwb2ludHMgcmVnYXJkbGVzcy4gSXQncyB0aW1lIHRvIGNoZWNrIEtjb25maWcsIG1ha2Ugc3VyZSBJIGhhdmUgYnJpZGdlIGFuZCBvcGVudnN3aXRjaCB0dXJuZWQgb24gaW4gdGhlIGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyNjowOS45MzE2MTUxNDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDgxMzA1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL0tjb25maWctNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXFxubmV0L2JyaWRnZS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIjgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo1MDpjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTYzLVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxcbm5ldC9icmlkZ2UvS2NvbmZpZy02NS1cXHRib29sIFxcXCJNUlAgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXFxubmV0L2JyaWRnZS9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIkNGTSBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjY6MTAuNzAyNDM0Njk0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MDY1MTg0NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6Nzk0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjY6MjguNzY3NjI0Mjk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAzMTA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI2OjI4LjgxNTY2MDk3NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTI2MDI4ODMwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBkcml2ZXJzL25ldC90dW4uY2AsIHNwZWNpZmljYWxseSBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGB0dW5fZ2V0X3VzZXJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5GaXJzdCwgYHR1bl9zZXRfaGVhZHJvb21gIGdldHMgY2FsbGVkIGluZGlyZWN0bHkgdGhyb3VnaCBgbmRvX3NldF9yeF9oZWFkcm9vbWAgd2hpY2ggaXMgYXNzaWduZWQgdG8gaXQsIGZvciBib3RoIGB0dW5gIGFuZCBgdGFwYCBkZXZpY2VzLiBOb3csIGBuZG9fc2V0X3J4X2hlYWRyb29tYCBpcyB0cmlnZ2VyZWQgYnkgYG5ldGRldl9zZXRfcnhfaGVhZHJvb21gLCB3aGljaCB3ZSBzZWUgdXNlZCBpbiBib3RoIGBuZXQvYnJpZGdlL2JyX2lmLmNgICh2aWEgYHVwZGF0ZV9oZWFkcm9vbWApIGFuZCBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgICh2aWEgYG92c191cGRhdGVfaGVhZHJvb21gKS4gIFNvLCB0byB0ZXN0IGB0dW5fc2V0X2hlYWRyb29tYCBlZmZlY3RpdmVseSwgSSdsbCBuZWVkIGBUVU5gIGNvbmZpZ3VyZWQsIGFuZCBhdCBsZWFzdCBvbmUgb2YgZWl0aGVyIGBCUklER0VgIG9yIGBPUEVOVlNXSVRDSGAuIFRoYXQncyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBvdXIgZnV6emluZyBjb25maWd1cmF0aW9uLlxuXG5UaGVuIHRoZXJlJ3MgYHR1bl9nZXRfdXNlcmAuIFRoaXMgb25lIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQncyBjYWxsZWQgYnkgYHR1bl9jaHJfd3JpdGVfaXRlcmAgKHdoaWNoIGlzIHJlYWNoZWQgdmlhIHRoZSBgd3JpdGUoKWAgc3lzdGVtIGNhbGwgb24gYC9kZXYvbmV0L3R1bmApIGFuZCBgdHVuX3NlbmRtc2dgICh1c2luZyBgc2VuZG1zZygpYCBvbiBhIHR1biBzb2NrZXQpLiBUaGUgcGF0Y2ggYWRkcyBhIGBwc2tiX21heV9wdWxsKClgIGNhbGwgaW4gYHR1bl9nZXRfdXNlcmAuIFRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlYWxpbmcgd2l0aCBwYWNrZXQgcGFyc2luZywgc28gaXQncyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGFyZWFzIGZvciBmdXp6aW5nIHdpbGwgYmUgYHR1bl9zZXRfaGVhZHJvb21gLCBgdHVuX2dldF91c2VyYCwgYHR1bl9jaHJfd3JpdGVfaXRlcmAgYW5kIGB0dW5fc2VuZG1zZ2AsIGFzIHRoZXkgYXJlIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzIGZvciB0aGVzZSBjaGFuZ2VzLiAgSeKAmWxsIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCBgVFVOYCwgYEJSSURHRWAgYW5kIGBPUEVOVlNXSVRDSGAgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgdG8gY292ZXIgYWxsIHRoZSBjYWxsIHBhdGhzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgbmV0ZGV2X3NldF9yeF9oZWFkcm9vbWAgaGFzIGFueSBvdGhlciBjYWxsZXJzLiBPa2F5LCB0aGUgaW5saW5lIHdyYXBwZXIgaW4gYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgIGRvZXNuJ3QgcHJvdmlkZSBhbnl0aGluZyBhZGRpdGlvbmFsLiBgQlJJREdFYCBhbmQgYE9QRU5WU1dJVENIYCBhcmUgc3VmZmljaWVudC5cblxuTm93LCBsZXQncyByZWZpbmUgdGhpcyBhIGJpdCBmdXJ0aGVyLiBUaGUgY2hhbmdlcyBtb2RpZnkgaGVhZHJvb20gY2FsY3VsYXRpb24gYW5kIGFkZCBwYWNrZXQgaGVhZGVyIGNoZWNrcy4gVGhlc2UgYXJlIGFjY2Vzc2libGUgdmlhIGB3cml0ZSgpYCBvciBgc2VuZG1zZygpYCB0byB0aGUgVFVOIGRldmljZSwgYXMgd2VsbCBhcyB3aGVuIGJyaWRnaW5nIG9yIHVzaW5nIE9wZW4gdlN3aXRjaCB0byBhdHRhY2ggdGhlIFRVTiBkZXZpY2UsIHdoaWNoIHVzZXMgdGhlIGBuZG9fc2V0X3J4X2hlYWRyb29tYC4gR2l2ZW4gdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBob3cgcGFja2V0cyBhcmUgcHJvY2Vzc2VkIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiBpcyBoYW5kbGVkLCBJJ20gY29uZmlkZW50IHRoYXQgZnV6emluZyBoZXJlIGlzIGdvaW5nIHRvIGJlIHdvcnRod2hpbGUuXG5cblRoZXJlZm9yZSwgZm9yIHRoaXMgZnV6emluZyBjYW1wYWlnbiwgSSdsbCBzZXQ6XG5cbiogICAqKkZvY3VzIFN5bWJvbHM6KiogYHR1bl9zZXRfaGVhZHJvb21gLCBgdHVuX2dldF91c2VyYCwgYHR1bl9jaHJfd3JpdGVfaXRlcmAsIGB0dW5fc2VuZG1zZ2BcbiogICAqKkVuYWJsZWQgQ29uZmlnczoqKiBgVFVOYCwgYEJSSURHRWAsIGBPUEVOVlNXSVRDSGBcblxuXG4iLCJJbnB1dFRva2VucyI6ODIyOSwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDI6MjY6NTguMDc1OTUyMjcyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxODkyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiQlJJREdFXCIsXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9zZXRfaGVhZHJvb21cIixcbiAgICBcInR1bl9nZXRfdXNlclwiLFxuICAgIFwidHVuX2Nocl93cml0ZV9pdGVyXCIsXG4gICAgXCJ0dW5fc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhlYWRyb29tIGNhbGN1bGF0aW9uIGluIGB0dW5fc2V0X2hlYWRyb29tYCBhbmQgYWRkcyBwYWNrZXQgaGVhZGVyIHB1bGwgY2hlY2tzIGluIGB0dW5fZ2V0X3VzZXJgIGZvciBUVU4vVEFQIGRldmljZXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBgd3JpdGUoKWAgb3IgYHNlbmRtc2coKWAgdG8gdGhlIFRVTiBkZXZpY2UsIGFuZCB2aWEgYnJpZGdlIG9yIE9wZW4gdlN3aXRjaCBhdHRhY2hpbmcgdGhlIFRVTiBkZXZpY2UgKHdoaWNoIHRyaWdnZXJzIGBuZG9fc2V0X3J4X2hlYWRyb29tYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcGFja2V0IHByb2Nlc3NpbmcgYW5kIGRldmljZSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fc2V0X2hlYWRyb29tXCIsXG4gICAgXCJ0dW5fZ2V0X3VzZXJcIixcbiAgICBcInR1bl9jaHJfd3JpdGVfaXRlclwiLFxuICAgIFwidHVuX3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBoZWFkcm9vbSBjYWxjdWxhdGlvbiBpbiBgdHVuX3NldF9oZWFkcm9vbWAgYW5kIGFkZHMgcGFja2V0IGhlYWRlciBwdWxsIGNoZWNrcyBpbiBgdHVuX2dldF91c2VyYCBmb3IgVFVOL1RBUCBkZXZpY2VzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgYHdyaXRlKClgIG9yIGBzZW5kbXNnKClgIHRvIHRoZSBUVU4gZGV2aWNlLCBhbmQgdmlhIGJyaWRnZSBvciBPcGVuIHZTd2l0Y2ggYXR0YWNoaW5nIHRoZSBUVU4gZGV2aWNlICh3aGljaCB0cmlnZ2VycyBgbmRvX3NldF9yeF9oZWFkcm9vbWApLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI2OjU4LjE1MjE0ODM3MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTIzNzY1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyNjo1OC4xNTI3ODM5NTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEwMTE3Mzc0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cy4gU3BlY2lmaWNhbGx5LCBpdCBjbGFtcHMgdGhlIG1heGltdW0gaGVhZHJvb20gaW4gYHR1bl9zZXRfaGVhZHJvb21gIHRvIHByZXZlbnQgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIG91dC1vZi1ib3VuZHMgYWxsb2NhdGlvbnMsIGFuZCBpdCBhZGRzL21vZGlmaWVzIGBwc2tiX21heV9wdWxsYCBjaGVja3MgaW4gYHR1bl9nZXRfdXNlcmAgdG8gZW5zdXJlIHRoYXQgcGFja2V0IGhlYWRlcnMgYXJlIHNhZmVseSBhY2Nlc3NpYmxlIGluIHRoZSBsaW5lYXIgcG9ydGlvbiBvZiB0aGUgc29ja2V0IGJ1ZmZlciBiZWZvcmUgcmVhZGluZyB0aGVtLiBUaGVzZSBhcmUgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMpIHRoYXQgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlKSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzBkZGNmYWVhYzMyZWU2NTRhMmExYTdmZWQxMmExMWMzYWIxYjkxMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDAyOjIzOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uY1xuaW5kZXggZmVkOWRmZGZjYzNiYy4uNWJiZTMxMjM5NzllMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXG4rKysgYi9kcml2ZXJzL25ldC90dW4uY1xuQEAgLTExMDcsMTEgKzExMDcsMTYgQEAgc3RhdGljIG5ldGRldl9mZWF0dXJlc190IHR1bl9uZXRfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIHZvaWQgdHVuX3NldF9oZWFkcm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X2hyKVxuIHtcbiBcdHN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c2l6ZV90IG1heF9oZWFkcm9vbTtcbiBcbi1cdGlmIChuZXdfaHIgXHUwMDNjIE5FVF9TS0JfUEFEKVxuLVx0XHRuZXdfaHIgPSBORVRfU0tCX1BBRDtcbitcdG1heF9oZWFkcm9vbSA9IG1pbl90KHNpemVfdCwgU0tCX01BWF9IRUFEKDApLCBVMTZfTUFYIC0gMSk7XG4gXG4tXHR0dW4tXHUwMDNlYWxpZ24gPSBuZXdfaHI7XG4rXHRpZiAoKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgVFVOX1RZUEVfTUFTSykgPT0gSUZGX1RBUClcbitcdFx0bWF4X2hlYWRyb29tIC09IEVUSF9ITEVOICsgTkVUX0lQX0FMSUdOO1xuK1x0ZWxzZVxuK1x0XHRtYXhfaGVhZHJvb20gLT0gMTtcbitcbitcdHR1bi1cdTAwM2VhbGlnbiA9IGNsYW1wX3QoaW50LCBuZXdfaHIsIE5FVF9TS0JfUEFELCBtYXhfaGVhZHJvb20pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZFxuQEAgLTE4MjIsNyArMTgyNywxMyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiBcdHN3aXRjaCAodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBUVU5fVFlQRV9NQVNLKSB7XG4gXHRjYXNlIElGRl9UVU46XG4gXHRcdGlmICh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9OT19QSSkge1xuLVx0XHRcdHU4IGlwX3ZlcnNpb24gPSBza2ItXHUwMDNlbGVuID8gKHNrYi1cdTAwM2VkYXRhWzBdIFx1MDAzZVx1MDAzZSA0KSA6IDA7XG4rXHRcdFx0dTggaXBfdmVyc2lvbjtcbitcbitcdFx0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxKSkge1xuK1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRcdGdvdG8gZHJvcDtcbitcdFx0XHR9XG4rXHRcdFx0aXBfdmVyc2lvbiA9IHNrYi1cdTAwM2VkYXRhWzBdIFx1MDAzZVx1MDAzZSA0O1xuIFxuIFx0XHRcdHN3aXRjaCAoaXBfdmVyc2lvbikge1xuIFx0XHRcdGNhc2UgNDpcbkBAIC0xODQyLDcgKzE4NTMsNyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiBcdFx0c2tiLVx1MDAzZWRldiA9IHR1bi1cdTAwM2VkZXY7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJRkZfVEFQOlxuLVx0XHRpZiAoZnJhZ3MgXHUwMDI2XHUwMDI2ICFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7XG4rXHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOKSkge1xuIFx0XHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fSERSX1RSVU5DO1xuIFx0XHRcdGdvdG8gZHJvcDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAyOjI2OjU4LjE1Mjc4NDgxMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAxMTcxNTg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB0dW4uY2AgUGF0Y2g6IEEgS0FTQU4vVUJTQU4gRm9jdXMqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoZXNlIGNoYW5nZXMgdG8gYGRyaXZlcnMvbmV0L3R1bi5jYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBmb2N1c2VkIG9uIGhhcmRlbmluZyBhZ2FpbnN0IEtBU0FOIGFuZCBVQlNBTiByZXBvcnRzLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkIGdpdmVuIHRoZSBjb2RlIGxvY2F0aW9ucy5cblxuRmlyc3QsIGluIGB0dW5fc2V0X2hlYWRyb29tYCwgdGhleSdyZSByZXN0cmljdGluZyB0aGUgbWF4aW11bSBoZWFkcm9vbSB1c2luZyBgY2xhbXBfdGAuIExvb2tpbmcgYXQgdGhlIGxvZ2ljLCB0aGUgaW50ZW50IGlzIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBvdXQtb2YtYm91bmRzIGlzc3VlIGR1cmluZyBTS0IgYWxsb2NhdGlvbiBieSBzZXR0aW5nIGEgaGFyZCBsaW1pdCBmb3IgaGVhZHJvb20uIFRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIHJldmlzZWQgY2FsY3VsYXRpb24gb2YgYG1heF9oZWFkcm9vbWAsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHR5cGUgb2YgaW50ZXJmYWNlIChgSUZGX1RBUGAgdnMgYElGRl9UVU5gKS4gVGhlIGNsYW1waW5nIGVuc3VyZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgcmVtYWlucyB3aXRoaW4gc2FmZSBib3VuZHMuXG5cblNlY29uZCwgdGhlIGB0dW5fZ2V0X3VzZXJgIGZ1bmN0aW9uIGZvciBgSUZGX1RVTmAgbm93IGluY2x1ZGVzIGEgYHBza2JfbWF5X3B1bGwoc2tiLCAxKWAgY2hlY2sgYmVmb3JlIHJlYWRpbmcgYHNrYi1cdTAwM2VkYXRhWzBdYC4gVGhpcyBpcyB0ZXh0Ym9vayBLQVNBTiBtaXRpZ2F0aW9uLiBJdCBwcmV2ZW50cyBhY2Nlc3NpbmcgZGF0YSB0aGF0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgb3IgaXMgb3V0c2lkZSB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gSWYgSSdtIHJlYWRpbmcgdGhpcyBjb3JyZWN0bHksIGl0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkLlxuXG5UaGlyZCwgYSBzaW1pbGFyIGZpeCBpcyBhcHBsaWVkIHRvIGB0dW5fZ2V0X3VzZXJgIGZvciBgSUZGX1RBUGAuIFRoZSBjb25kaXRpb25hbCB0aGF0IGhhZCBgZnJhZ3NgIGFuZCBgIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTilgIGhhcyBiZWVuIHNpbXBsaWZpZWQgdG8ganVzdCBgIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTilgLiBUaGlzIGVuc3VyZXMgdGhhdCBgRVRIX0hMRU5gIGJ5dGVzIGFyZSBhdmFpbGFibGUgZm9yIHB1bGxpbmcgZnJvbSB0aGUgU0tCIGJlZm9yZSB0aGV5J3JlIGFjY2Vzc2VkLiBBZ2FpbiwgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLiBUaGUgYW5zd2VyIGlzICpubyouIExvb2tpbmcgY2xvc2VseSBhdCB0aGUgcGF0Y2ggYW5kIG15IGV4cGVyaWVuY2UsIHRoZSBgcHNrYl9tYXlfcHVsbGAgZnVuY3Rpb24gaXNuJ3QgYWJvdXQgaW5pdGlhbGl6aW5nIG1lbW9yeS4gSXQncyBzb2xlbHkgYWJvdXQgZW5zdXJpbmcgZGF0YSBpcyBhY2Nlc3NpYmxlIGluIHRoZSBsaW5lYXIgcGFydCBvZiB0aGUgU0tCIHRvIGF2b2lkIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZSBgdHVuX3NldF9oZWFkcm9vbWAgY2hhbmdlIHNpbXBseSBjYXBzIHRoZSBhbGxvY2F0aW9uIHNpemUsIG5vdCBpdHMgaW5pdGlhbGl6YXRpb24uXG5cblRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGZvY3VzZWQgb24gZWxpbWluYXRpbmcgcG90ZW50aWFsIEtBU0FOL1VCU0FOIGhpdHMgYnkgZW5mb3JjaW5nIGJvdW5kcyBjaGVja3MgYW5kIHJlc3RyaWN0aW5nIGhlYWRyb29tIHRvIHByZXZlbnQgb3ZlcmZsb3dzLCBub3QgYWRkcmVzc2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGV5IGFyZSBhbGwgYWJvdXQgcHJvdGVjdGluZyBhZ2FpbnN0IGtub3duIHZ1bG5lcmFiaWxpdGllcy4gSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgTmVlZHNLTVNBTiB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MSwiT3V0cHV0VG9rZW5zIjoxNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMjoyNzowOS4xNjQ1MDI5ODdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cy4gU3BlY2lmaWNhbGx5LCBpdCBjbGFtcHMgdGhlIG1heGltdW0gaGVhZHJvb20gaW4gYHR1bl9zZXRfaGVhZHJvb21gIHRvIHByZXZlbnQgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIG91dC1vZi1ib3VuZHMgYWxsb2NhdGlvbnMsIGFuZCBpdCBhZGRzL21vZGlmaWVzIGBwc2tiX21heV9wdWxsYCBjaGVja3MgaW4gYHR1bl9nZXRfdXNlcmAgdG8gZW5zdXJlIHRoYXQgcGFja2V0IGhlYWRlcnMgYXJlIHNhZmVseSBhY2Nlc3NpYmxlIGluIHRoZSBsaW5lYXIgcG9ydGlvbiBvZiB0aGUgc29ja2V0IGJ1ZmZlciBiZWZvcmUgcmVhZGluZyB0aGVtLiBUaGVzZSBhcmUgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMpIHRoYXQgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gaW50cm9kdWN0aW9uIG9yIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlKSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIGludGVnZXIgb3ZlcmZsb3dzLiBTcGVjaWZpY2FsbHksIGl0IGNsYW1wcyB0aGUgbWF4aW11bSBoZWFkcm9vbSBpbiBgdHVuX3NldF9oZWFkcm9vbWAgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kcyBhbGxvY2F0aW9ucywgYW5kIGl0IGFkZHMvbW9kaWZpZXMgYHBza2JfbWF5X3B1bGxgIGNoZWNrcyBpbiBgdHVuX2dldF91c2VyYCB0byBlbnN1cmUgdGhhdCBwYWNrZXQgaGVhZGVycyBhcmUgc2FmZWx5IGFjY2Vzc2libGUgaW4gdGhlIGxpbmVhciBwb3J0aW9uIG9mIHRoZSBzb2NrZXQgYnVmZmVyIGJlZm9yZSByZWFkaW5nIHRoZW0uIFRoZXNlIGFyZSBjbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWVzIChvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcykgdGhhdCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIFVCU0FOLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb3IgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UpIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpxqt8[1] Phase: Succeeded StartedAt: 2026-08-12 02:27:20 +0000 UTC FinishedAt: 2026-08-12 02:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 02:27:20 +0000 UTC FinishedAt: 2026-08-12 02:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2] Phase: Succeeded StartedAt: 2026-08-12 02:27:20 +0000 UTC FinishedAt: 2026-08-12 06:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:27:20 +0000 UTC FinishedAt: 2026-08-12 06:08:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:27:20 +0000 UTC FinishedAt: 2026-08-12 02:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:27:20 +0000 UTC FinishedAt: 2026-08-12 02:27:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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-workflowpxqt8/series-workflowpxqt8-convert-artifact-1040320363/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:27:30 +0000 UTC FinishedAt: 2026-08-12 02:44:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:27:30 +0000 UTC FinishedAt: 2026-08-12 02:44:28 +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:*129f173c-0e71-4cad-9510-e86609ec9596,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-workflowpxqt8/series-workflowpxqt8-convert-artifact-1040320363/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": "19392b31-2cbf-486f-acb5-29eaa78407a8", "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-workflowpxqt8/series-workflowpxqt8-build-action-86276969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:27:30 +0000 UTC FinishedAt: 2026-08-12 02:44:18 +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:*129f173c-0e71-4cad-9510-e86609ec9596,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-workflowpxqt8/series-workflowpxqt8-convert-artifact-1040320363/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": "19392b31-2cbf-486f-acb5-29eaa78407a8", "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-workflowpxqt8/series-workflowpxqt8-build-action-86276969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:44:28 +0000 UTC FinishedAt: 2026-08-12 02:44:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:44:28 +0000 UTC FinishedAt: 2026-08-12 02:44:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:44:28 +0000 UTC FinishedAt: 2026-08-12 02:44:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:44:28 +0000 UTC FinishedAt: 2026-08-12 02:44:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-workflowpxqt8/series-workflowpxqt8-convert-artifact-2375683394/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:44:38 +0000 UTC FinishedAt: 2026-08-12 02:46:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:44:38 +0000 UTC FinishedAt: 2026-08-12 02:46:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*19392b31-2cbf-486f-acb5-29eaa78407a8,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-workflowpxqt8/series-workflowpxqt8-build-action-86276969/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-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:46:33 +0000 UTC FinishedAt: 2026-08-12 02:46:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:46:33 +0000 UTC FinishedAt: 2026-08-12 02:46:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:46:33 +0000 UTC FinishedAt: 2026-08-12 03:03:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:46:33 +0000 UTC FinishedAt: 2026-08-12 03:03:35 +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:*129f173c-0e71-4cad-9510-e86609ec9596,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-workflowpxqt8/series-workflowpxqt8-convert-artifact-2375683394/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": "66415fd5-4097-4213-8706-84e71ff53fd9", "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-workflowpxqt8/series-workflowpxqt8-build-action-3231235990/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 02:46:33 +0000 UTC FinishedAt: 2026-08-12 03:03:25 +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:*129f173c-0e71-4cad-9510-e86609ec9596,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-workflowpxqt8/series-workflowpxqt8-convert-artifact-2375683394/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": "66415fd5-4097-4213-8706-84e71ff53fd9", "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-workflowpxqt8/series-workflowpxqt8-build-action-3231235990/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:03:35 +0000 UTC FinishedAt: 2026-08-12 03:03:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:03:35 +0000 UTC FinishedAt: 2026-08-12 03:03:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:03:35 +0000 UTC FinishedAt: 2026-08-12 03:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:03:35 +0000 UTC FinishedAt: 2026-08-12 03:05:13 +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:*66415fd5-4097-4213-8706-84e71ff53fd9,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-workflowpxqt8/series-workflowpxqt8-build-action-3231235990/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-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:05:23 +0000 UTC FinishedAt: 2026-08-12 06:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:05:23 +0000 UTC FinishedAt: 2026-08-12 06:08:31 +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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"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:*19392b31-2cbf-486f-acb5-29eaa78407a8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*66415fd5-4097-4213-8706-84e71ff53fd9,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-workflowpxqt8/series-workflowpxqt8-build-action-86276969/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-workflowpxqt8/series-workflowpxqt8-build-action-3231235990/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:05:23 +0000 UTC FinishedAt: 2026-08-12 03:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:05:23 +0000 UTC FinishedAt: 2026-08-12 03:05:28 +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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"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-workflowpxqt8/series-workflowpxqt8-convert-artifact-2047847799/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:05:23 +0000 UTC FinishedAt: 2026-08-12 03:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:05:23 +0000 UTC FinishedAt: 2026-08-12 03:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:05:23 +0000 UTC FinishedAt: 2026-08-12 03:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:05:33 +0000 UTC FinishedAt: 2026-08-12 06:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxqt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"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":["tun_set_headroom","tun_get_user","tun_chr_write_iter","tun_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","BRIDGE","OPENVSWITCH"],"series_id":"a1986d20-d667-4c7f-8ac0-554c8ad17a83","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-12 03:05:33 +0000 UTC FinishedAt: 2026-08-12 06:08:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*19392b31-2cbf-486f-acb5-29eaa78407a8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*66415fd5-4097-4213-8706-84e71ff53fd9,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-workflowpxqt8/series-workflowpxqt8-build-action-86276969/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-workflowpxqt8/series-workflowpxqt8-build-action-3231235990/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-workflowpxqt8/series-workflowpxqt8-convert-artifact-2047847799/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,}