Name: series-workflowlsxhc Phase: Succeeded StartedAt: 2026-06-22 09:17:02 +0000 UTC FinishedAt: 2026-06-22 10:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[0] Phase: Succeeded StartedAt: 2026-06-22 09:17:02 +0000 UTC FinishedAt: 2026-06-22 09:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[0].run-triage Phase: Succeeded StartedAt: 2026-06-22 09:17:02 +0000 UTC FinishedAt: 2026-06-22 09:39:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_FREESCALE", "FSL_FMAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_FREESCALE", "FSL_FMAN" ], "series_id": "5bada3b9-d1f0-43d9-a4fc-830a90f438ab" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "read_dts_node", "fman_config", "fman_probe" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfRlJFRVNDQUxFJiMzNDssCiAgICAmIzM0O0ZTTF9GTUFOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVhZF9kdHNfbm9kZSYjMzQ7LAogICAgJiMzNDtmbWFuX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtmbWFuX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbmQgY2xvY2sgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGhzIG9mIHRoZSBGcmVlc2NhbGUgRk1hbiBkcml2ZXIuIFRoZXNlIHBhdGhzIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyIHZpYSBwbGF0Zm9ybSBkZXZpY2UgYW5kIGRldmljZSB0cmVlIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg4OGUwNGExNWJiNTVlMjNkNTUxMTg5MmQ3MzYwYjQ0NTAwODQ3NGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwOTozNzoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcbmluZGV4IDAxMzI3M2EyZGUzMmYyLi4yM2I5MzhhZmUxN2E5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXG5AQCAtMTc5Myw4ICYjNDM7MTc5Myw2IEBAIHN0YXRpYyBpbnQgZm1hbl9jb25maWcoc3RydWN0IGZtYW4gKmZtYW4pXG4gXHRrZnJlZShmbWFuLVx1MDAzZWNmZyk7XG4gZXJyX2ZtX2RydjpcbiBcdGtmcmVlKGZtYW4tXHUwMDNlc3RhdGUpO1xuLWVycl9mbV9zdGF0ZTpcbi1cdGtmcmVlKGZtYW4pO1xuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuQEAgLTI2OTcsNyAmIzQzOzI2OTUsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0c3RydWN0IGNsayAqY2xrO1xuIFx0dTMyIGNsa19yYXRlO1xuIFxuLVx0Zm1hbiA9IGt6YWxsb2Nfb2JqKCpmbWFuKTtcbiYjNDM7XHRmbWFuID0gZGV2bV9remFsbG9jKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIHNpemVvZigqZm1hbiksIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFmbWFuKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbkBAIC0yNzM2LDExICYjNDM7MjczNCwxMyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEZNJWQgY2xvY2sgcmF0ZVxcblwmIzM0OyxcbiBcdFx0XHRfX2Z1bmNfXywgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlkKTtcbi1cdFx0Z290byBmbWFuX25vZGVfcHV0O1xuJiM0MztcdFx0Z290byBjbGtfcHV0O1xuIFx0fVxuIFx0LyogUm91bmRpbmcgdG8gTUh6ICovXG4gXHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuY2xrX2ZyZXEgPSBESVZfUk9VTkRfVVAoY2xrX3JhdGUsIDEwMDAwMDApO1xuIFxuJiM0MztcdGNsa19wdXQoY2xrKTtcbiYjNDM7XG4gXHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShmbV9ub2RlLCBcJiMzNDtmc2wscW1hbi1jaGFubmVsLXJhbmdlXCYjMzQ7LFxuIFx0XHRcdFx0XHQgXHUwMDI2cmFuZ2VbMF0sIDIpO1xuIFx0aWYgKGVycikge1xuQEAgLTI3NTcsNyAmIzQzOzI3NTcsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBjb3VsZCBub3QgZmluZCBNVVJBTSBub2RlXFxuXCYjMzQ7LFxuIFx0XHRcdF9fZnVuY19fKTtcbi1cdFx0Z290byBmbWFuX2ZyZWU7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuIFxuIFx0ZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShtdXJhbV9ub2RlLCAwLFxuQEAgLTI3NjYsNyAmIzQzOzI3NjYsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0XHRvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTtcbiBcdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcJiMzNDslczogb2ZfYWRkcmVzc190b19yZXNvdXJjZSgpID0gJWRcXG5cJiMzNDssXG4gXHRcdFx0X19mdW5jX18sIGVycik7XG4tXHRcdGdvdG8gZm1hbl9mcmVlO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdH1cbiBcbiBcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xuQEAgLTI3NzYsNyAmIzQzOzI3NzYsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCYjMzQ7LFxuIFx0XHRcdF9fZnVuY19fLCBpcnEsIGVycik7XG4tXHRcdGdvdG8gZm1hbl9mcmVlO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdH1cbiBcbiBcdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7XG5AQCAtMjc4Niw3ICYjNDM7Mjc4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCYjMzQ7LFxuIFx0XHRcdFx0X19mdW5jX18sIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLCBlcnIpO1xuLVx0XHRcdGdvdG8gZm1hbl9mcmVlO1xuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMjc5NCw3ICYjNDM7Mjc5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihiYXNlX2FkZHIpO1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBkZXZtX2lvcmVtYXAoKSBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbi1cdFx0Z290byBmbWFuX2ZyZWU7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuIFxuIFx0Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLmJhc2VfYWRkciA9IGJhc2VfYWRkcjtcbkBAIC0yODA2LDcgJiM0MzsyODA2LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcJiMzNDslczogb2ZfcGxhdGZvcm1fcG9wdWxhdGUoKSBmYWlsZWRcXG5cJiMzNDssXG4gXHRcdFx0X19mdW5jX18pO1xuLVx0XHRnb3RvIGZtYW5fZnJlZTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXHR9XG4gXG4gI2lmZGVmIENPTkZJR19EUEFBX0VSUkFUVU1fQTA1MDM4NVxuQEAgLTI4MTgsOCAmIzQzOzI4MTgsOCBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFxuIGZtYW5fbm9kZV9wdXQ6XG4gXHRvZl9ub2RlX3B1dChmbV9ub2RlKTtcbi1mbWFuX2ZyZWU6XG4tXHRrZnJlZShmbWFuKTtcbiYjNDM7Y2xrX3B1dDpcbiYjNDM7XHRjbGtfcHV0KGNsayk7XG4gXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0ZSRUVTQ0FMRSYjMzQ7LAogICAgJiMzNDtGU0xfRk1BTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlYWRfZHRzX25vZGUmIzM0OywKICAgICYjMzQ7Zm1hbl9jb25maWcmIzM0OywKICAgICYjMzQ7Zm1hbl9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtZW1vcnkgYW5kIGNsb2NrIGxlYWtzIGluIHRoZSBwcm9iZSBlcnJvciBwYXRocyBvZiB0aGUgRnJlZXNjYWxlIEZNYW4gZHJpdmVyLiBUaGVzZSBwYXRocyBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGJ5IHN5emthbGxlciB2aWEgcGxhdGZvcm0gZGV2aWNlIGFuZCBkZXZpY2UgdHJlZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4OGUwNGExNWJiNTVlMjNkNTUxMTg5MmQ3MzYwYjQ0NTAwODQ3NGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyMiAwOTozNzoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYwppbmRleCAwMTMyNzNhMmRlMzJmMi4uMjNiOTM4YWZlMTdhOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMKQEAgLTE3OTMsOCAmIzQzOzE3OTMsNiBAQCBzdGF0aWMgaW50IGZtYW5fY29uZmlnKHN0cnVjdCBmbWFuICpmbWFuKQogCWtmcmVlKGZtYW4tJmd0O2NmZyk7CiBlcnJfZm1fZHJ2OgogCWtmcmVlKGZtYW4tJmd0O3N0YXRlKTsKLWVycl9mbV9zdGF0ZToKLQlrZnJlZShmbWFuKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtMjY5Nyw3ICYjNDM7MjY5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpCiAJc3RydWN0IGNsayAqY2xrOwogCXUzMiBjbGtfcmF0ZTsKIAotCWZtYW4gPSBremFsbG9jX29iaigqZm1hbik7CiYjNDM7CWZtYW4gPSBkZXZtX2t6YWxsb2MoJmFtcDtvZl9kZXYtJmd0O2Rldiwgc2l6ZW9mKCpmbWFuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmbWFuKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIApAQCAtMjczNiwxMSAmIzQzOzI3MzQsMTMgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAkJZXJyID0gLUVJTlZBTDsKIAkJZGV2X2VycigmYW1wO29mX2Rldi0mZ3Q7ZGV2LCAmIzM0OyVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEZNJWQgY2xvY2sgcmF0ZVxuJiMzNDssCiAJCQlfX2Z1bmNfXywgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5pZCk7Ci0JCWdvdG8gZm1hbl9ub2RlX3B1dDsKJiM0MzsJCWdvdG8gY2xrX3B1dDsKIAl9CiAJLyogUm91bmRpbmcgdG8gTUh6ICovCiAJZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5jbGtfZnJlcSA9IERJVl9ST1VORF9VUChjbGtfcmF0ZSwgMTAwMDAwMCk7CiAKJiM0MzsJY2xrX3B1dChjbGspOwomIzQzOwogCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KGZtX25vZGUsICYjMzQ7ZnNsLHFtYW4tY2hhbm5lbC1yYW5nZSYjMzQ7LAogCQkJCQkgJmFtcDtyYW5nZVswXSwgMik7CiAJaWYgKGVycikgewpAQCAtMjc1Nyw3ICYjNDM7Mjc1Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpCiAJCWVyciA9IC1FSU5WQUw7CiAJCWRldl9lcnIoJmFtcDtvZl9kZXYtJmd0O2RldiwgJiMzNDslczogY291bGQgbm90IGZpbmQgTVVSQU0gbm9kZVxuJiMzNDssCiAJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZm1hbl9mcmVlOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAl9CiAKIAllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG11cmFtX25vZGUsIDAsCkBAIC0yNzY2LDcgJiM0MzsyNzY2LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAkJb2Zfbm9kZV9wdXQobXVyYW1fbm9kZSk7CiAJCWRldl9lcnIoJmFtcDtvZl9kZXYtJmd0O2RldiwgJiMzNDslczogb2ZfYWRkcmVzc190b19yZXNvdXJjZSgpID0gJWRcbiYjMzQ7LAogCQkJX19mdW5jX18sIGVycik7Ci0JCWdvdG8gZm1hbl9mcmVlOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAl9CiAKIAlvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTsKQEAgLTI3NzYsNyAmIzQzOzI3NzYsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KQogCWlmIChlcnIgJmx0OyAwKSB7CiAJCWRldl9lcnIoJmFtcDtvZl9kZXYtJmd0O2RldiwgJiMzNDslczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxuJiMzNDssCiAJCQlfX2Z1bmNfXywgaXJxLCBlcnIpOwotCQlnb3RvIGZtYW5fZnJlZTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKGVycik7CiAJfQogCiAJaWYgKGZtYW4tJmd0O2R0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7CkBAIC0yNzg2LDcgJiM0MzsyNzg2LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAkJaWYgKGVyciAmbHQ7IDApIHsKIAkJCWRldl9lcnIoJmFtcDtvZl9kZXYtJmd0O2RldiwgJiMzNDslczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxuJiMzNDssCiAJCQkJX19mdW5jX18sIGZtYW4tJmd0O2R0c19wYXJhbXMuZXJyX2lycSwgZXJyKTsKLQkJCWdvdG8gZm1hbl9mcmVlOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KIAl9CiAKQEAgLTI3OTQsNyAmIzQzOzI3OTQsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KQogCWlmIChJU19FUlIoYmFzZV9hZGRyKSkgewogCQllcnIgPSBQVFJfRVJSKGJhc2VfYWRkcik7CiAJCWRldl9lcnIoJmFtcDtvZl9kZXYtJmd0O2RldiwgJiMzNDslczogZGV2bV9pb3JlbWFwKCkgZmFpbGVkXG4mIzM0OywgX19mdW5jX18pOwotCQlnb3RvIGZtYW5fZnJlZTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKGVycik7CiAJfQogCiAJZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5iYXNlX2FkZHIgPSBiYXNlX2FkZHI7CkBAIC0yODA2LDcgJiM0MzsyODA2LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJmFtcDtvZl9kZXYtJmd0O2RldiwgJiMzNDslczogb2ZfcGxhdGZvcm1fcG9wdWxhdGUoKSBmYWlsZWRcbiYjMzQ7LAogCQkJX19mdW5jX18pOwotCQlnb3RvIGZtYW5fZnJlZTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKGVycik7CiAJfQogCiAjaWZkZWYgQ09ORklHX0RQQUFfRVJSQVRVTV9BMDUwMzg1CkBAIC0yODE4LDggJiM0MzsyODE4LDggQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAogZm1hbl9ub2RlX3B1dDoKIAlvZl9ub2RlX3B1dChmbV9ub2RlKTsKLWZtYW5fZnJlZToKLQlrZnJlZShmbWFuKTsKJiM0MztjbGtfcHV0OgomIzQzOwljbGtfcHV0KGNsayk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZyZWVzY2FsZSBGTUFOIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY2AuIEl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgbWFraW5nIHNvbWUga2V5IGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIHN3aXRjaGluZyBmcm9tIGBremFsbG9jX29iamAgdG8gYGRldm1fa3phbGxvY2AgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgYGZtYW5gIGRyaXZlciwgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIHByb3BlciBkZXZpY2UgbWFuYWdlZCBtZW1vcnkuIFRoZXkmIzM5O3JlIGFsc28gZWxpbWluYXRpbmcgZXhwbGljaXQgYGtmcmVlKGZtYW4pYCBjYWxscywgc3Vic3RpdHV0aW5nIHRoZW0gd2l0aCBgcmV0dXJuIEVSUl9QVFIoZXJyKWAsIGFuZCBhZGRpbmcgYGNsa19wdXQoY2xrKWAgY2FsbHMuIE9uIHRvcCBvZiB0aGlzIHRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgZXJyb3IgaGFuZGxpbmcgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYHJlYWRfZHRzX25vZGVgLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYWJvdXQgcmVhY2hhYmlsaXR5IOKAkyBjYW4gd2UgYWN0dWFsbHkgdHJpZ2dlciB0aGlzIGNvZGU/IEl0JiMzOTtzIGEgRnJlZXNjYWxlIGRyaXZlciwgc28gaXQmIzM5O3MgcHJvYmFibHkgdGllZCB0byBzcGVjaWZpYyBoYXJkd2FyZSwgdGhlIEZyZWVzY2FsZSBGcmFtZSBNYW5hZ2VyLiBJbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoaXMgaXMgbGlrZWx5IGFuIGlzc3VlLiBVbmxlc3MgdGhlcmUmIzM5O3MgYW4gZW11bGF0b3Igc3BlY2lmaWNhbGx5IGZvciB0aGF0IGhhcmR3YXJlLCBvciBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciwgaXQmIzM5O3MgcHJvYmFibHkgbm90IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzLiBEZXZpY2UgVHJlZSBvdmVybGF5cyAqbWlnaHQqIHByb3ZpZGUgYSBwYXRoLCBidXQgdGhhdCYjMzk7cyBub3QgYWx3YXlzIGVhc3kuCgpBaCwgYnV0IHdhaXQsIFN5emthbGxlci4gSXQgKmNhbiogZnV6eiBwbGF0Zm9ybSBkcml2ZXJzIGluIGNlcnRhaW4gc2l0dWF0aW9ucywgbGlrZSBpZiBpdCBjYW4gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIG9yIGlmIGl0JiMzOTtzIGEgUENJIGRyaXZlci4gVGhpcyBvbmUgKmlzKiBhIHBsYXRmb3JtIGRyaXZlci4gU3l6a2FsbGVyJiMzOTtzIGRldmljZSBpbml0aWFsaXphdGlvbiAoYHN5el9kZXZfaW5pdGAgZXRjLikgbWlnaHQgYmUgYWJsZSB0byBoZWxwLCBidXQgdGhhdCBzdXBwb3J0IGNhbiBiZSBhIGJpdCBsaW1pdGVkLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGZvciB0aGlzIGRyaXZlci4gVGhlIEZyZWVzY2FsZSBGTWFuIGlzIHVzdWFsbHkgcGFydCBvZiBEUEFBIChEYXRhIFBhdGggQWNjZWxlcmF0aW9uIEFyY2hpdGVjdHVyZSksIHdoaWNoIHBvaW50cyB0byBQb3dlclBDIGFuZCBBUk0gU29DcyBsaWtlIFFvcklRLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkcml2ZXIgaXMgZGVwbG95ZWQuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBib3VuZCB0byBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBpZiBpdCBpcyBnZW5lcmljYWxseSB1c2FibGUuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGdldCBzb21lIGluZm9ybWF0aW9uIG91dCBvZiB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU0xfRk1BTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzoyOmNvbmZpZyBGU0xfRk1BTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Rk1hbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk3MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZGVsdmUgaW50byB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnJlYWtpbmcgdGhpcyBkb3duLgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgb2YgdGhpcyBtYXR0ZXIuIEJlZm9yZSBqdW1waW5nIHRvIGNvbmNsdXNpb25zIG9yIHNvbHV0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGRlcGVuZGVuY2llcyBhdCBwbGF5IGhlcmUuIFdoYXQgYXJlIHRoZSBrZXkgZmFjdG9ycywgdmFyaWFibGVzLCBvciBjb25kaXRpb25zIHRoYXQgdGhpcyB3aG9sZSBzaXR1YXRpb24gaGluZ2VzIHVwb24/IFdoYXQmIzM5O3MgdGhlIGJlZHJvY2ssIGFuZCB3aGF0IGFyZSB0aGUgc2NhZmZvbGRpbmcgcGllY2VzPyBJIG5lZWQgdG8gbWFwIHRoZSBjYXVzYWwgcmVsYXRpb25zaGlwcy4gSXQmIzM5O3MgdGltZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGxhbmRzY2FwZSBhbmQgZXhwb3NlIGl0cyB1bmRlcmx5aW5nIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnPTI9Y29uZmlnIEZTTF9GTUFOXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGTWFuIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc6NDpcdGRlcGVuZHMgb24gRlNMX1NPQyB8fCBBUkNIX0xBWUVSU0NBUEUgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTUtXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1Jcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnPTE0PWNvbmZpZyBEUEFBX0VSUkFUVU1fQTA1MDM4NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xNS1cdGJvb2xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc6MTY6XHRkZXBlbmRzIG9uIEFSTTY0IFx1MDAyNlx1MDAyNiBGU0xfRFBBQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xNy1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIGFuZCBQcm9iZSBQb3NzaWJpbGl0aWVzKioKCk9rYXksIHNvIHRoZSBjb21waWxhdGlvbiBwYXRoIGhpbmdlcyBvbiBhIGZldyBrZXkgZGVmaW5lczogYEZTTF9TT0NgLCBgQVJDSF9MQVlFUlNDQVBFYCwgb3IgYENPTVBJTEVfVEVTVGAuIENsZWFybHksIGlmIGBDT01QSUxFX1RFU1RgIGlzIHNldCwgaXQgKmNhbiogYmUgY29tcGlsZWQuIFRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB3ZSBjYW4gcHJvYmUgaXQuIFNpbmNlIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIsIEkgbmVlZCB0byBjaGVjayB0aGUgZHJpdmVyIHJlZ2lzdHJhdGlvbiBkZXRhaWxzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYGZtYW4uY2AgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGlzIHJlZ2lzdGVyZWQgYW5kIGluaXRpYWxpemVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgY29tcG9uZW50IGNhbiBiZSBzdWNjZXNzZnVsbHkgcHJvYmVkIHVuZGVyIHRoZSByaWdodCBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9Mjg5Mj1zdGF0aWMgaW50IF9faW5pdCBmbWFuX2xvYWQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjg5Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyODk4Olx0ZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmZtYW5fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yODk5LVx0aWYgKGVyciBcdTAwM2MgMClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyOTAwOlx0XHRwcl9lcnIoXCYjMzQ7RXJyb3IsIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigpID0gJWRcXG5cJiMzNDssIGVycik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjkwMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODI0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogZm1hbl9kcml2ZXIgRXhhbWluYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBpbW1lZGlhdGUgcHJvbXB0IOKAkyAmIzM0O0xldCYjMzk7cyBjaGVjayBgZm1hbl9kcml2ZXJgJiMzNDsg4oCTIHN1Z2dlc3RzIGEgZGlyZWN0IGFwcHJvYWNoLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvcy4gSSBhc3N1bWUgd2XigJlyZSBsaWtlbHkgaW52ZXN0aWdhdGluZyBhIHByb2Nlc3MsIG1vZHVsZSwgb3IgY29tcG9uZW50IG5hbWVkIGBmbWFuX2RyaXZlcmAuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMuIElzIHRoaXMgcmVsYXRlZCB0byBmaWxlIG1hbmFnZW1lbnQsIGEgc3BlY2lmaWMgaGFyZHdhcmUgaW50ZXJmYWNlLCBvciBwZXJoYXBzIGEgY29yZSBzeXN0ZW0gcHJvY2Vzcz8gVGhlIGNvbnRleHQgaXMgdGhlIGtleSwgb2YgY291cnNlLCBidXQgdGhlIGNvbW1hbmQgaXRzZWxmIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGFzc2Vzc2VkIGhlcmUuIEnigJltIHByZXBhcmluZyBteXNlbGYgdG8gZGVsdmUgaW50byBsb2dzLCBjb2RlLCBvciBwZXJoYXBzIGV2ZW4gbGl2ZSBkZWJ1Z2dpbmcgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBtYXR0ZXIuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBhc3BlY3Qgb2YgYGZtYW5fZHJpdmVyYCB0aGF0IG5lZWRzIGF0dGVudGlvbiwgc28gdGhhdCBJIGNhbiBhcHBseSB0aGUgYXBwcm9wcmlhdGUgdG9vbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZtYW5fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yODgyPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZtYW5fbWF0Y2gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI4ODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6Mjg4NDpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbWFuX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yODg1LVx0LmRyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9Mjg5Mj1zdGF0aWMgaW50IF9faW5pdCBmbWFuX2xvYWQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjg5Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyODk4Olx0ZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmZtYW5fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yODk5LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9MjkwNj1zdGF0aWMgdm9pZCBfX2V4aXQgZm1hbl91bmxvYWQodm9pZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTA3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyOTA4Olx0cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Zm1hbl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI5MDktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDgwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGhpcyBQbGF0Zm9ybSBEcml2ZXIqKgoKT2theSwgc28gdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aGF0JiMzOTtzIHJlbHlpbmcgb24gRGV2aWNlIFRyZWUgKERUKSBmb3IgaXRzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtDYW4gU3l6a2FsbGVyIGZ1enogdGhpcyBlZmZlY3RpdmVseT8mIzM0OyBXZSBrbm93IFN5emthbGxlciAqY2FuKiBpbmplY3QgRFQgbm9kZXMgdXNpbmcgZnVuY3Rpb25zIGxpa2UgYHN5el9kZXZfaW5pdGAuIEhvd2V2ZXIsIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBoYXJkd2FyZSBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgdGhvc2UgYWNjZXNzaW5nIHNwZWNpZmljIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBtZW1vcnktbWFwcGVkIEkvTyAobGlrZSB0aGF0IGBmbWFuLSZndDtkdHNfcGFyYW1zLmJhc2VfYWRkciA9IGJhc2VfYWRkcjtgIHN0dWZmLCBkZXJpdmVkIGZyb20gYG9mX2FkZHJlc3NfdG9fcmVzb3VyY2VgIGFuZCBgZGV2bV9pb3JlbWFwYCksIGFyZSBnb2luZyB0byBiZSBwcm9ibGVtYXRpYy4gVGhleSYjMzk7bGwgbGlrZWx5IGZhaWwgdG8gcHJvYmUsIG9yIHdvcnNlLCBjcmFzaCwgaWYgdGhlIHJlcXVpcmVkIG1lbW9yeSBpc24mIzM5O3QgYWN0dWFsbHkgcHJlc2VudCBvciBpZiBpdCBpc24mIzM5O3QgYWNjdXJhdGVseSBlbXVsYXRlZC4KCkJ1dCB3YWl0LCBTeXprYWxsZXIgZG9lcyBoYXZlICpzb21lKiBzdXBwb3J0IGZvciBwbGF0Zm9ybSBkcml2ZXIgZnV6emluZyB2aWEgRFQgbm9kZSBpbmplY3Rpb24sIHRob3VnaCBpdCYjMzk7cyB1c3VhbGx5IHF1aXRlIGxpbWl0ZWQuIEkmIzM5O3ZlIG9mdGVuIHNlZW4gdGhlc2UgYXR0ZW1wdHMgZmFsbCBhcGFydCBhdCB0aGUgYGRldm1faW9yZW1hcGAgc3RhZ2Ugb3Igb3RoZXIgaGFyZHdhcmUgYWNjZXNzIHBvaW50cy4gV2UmIzM5O3JlIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSBkZWVwIGRpdmUgdG8gd29yayBvdXQgaWYgdGhpcyBpcyBmdXphYmxlIQoKQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcG90ZW50aWFsIHBpdGZhbGxzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgcmVhZF9kdHNfbm9kZWAgZnVuY3Rpb24gaW4gYGZtYW4uY2AgdG8gc2VlIGhvdyB0aGUgRGV2aWNlIFRyZWUgaW5mb3JtYXRpb24gaXMgcGFyc2VkIGFuZCB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX2R0c19ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yNjg1PU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZtYW5fbXVyYW1fbWF0Y2gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI2ODYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjY4NzpzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI2ODgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yODI2PXN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI4MzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjgzNDpcdGZtYW4gPSByZWFkX2R0c19ub2RlKG9mX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjgzNS1cdGlmIChJU19FUlIoZm1hbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTYKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA2NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYCwgd2hpY2ggaW1tZWRpYXRlbHkgdHJpZ2dlcnMgc29tZSBxdWVzdGlvbnMgYWJvdXQgcmVhY2hhYmlsaXR5LiBUaGUgY29yZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGFjY2Vzc2libGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaWYgc3l6a2FsbGVyIGNhbiBpbmplY3QgYSBkZXZpY2UgdHJlZSAoRFQpIG5vZGUgZm9yIHRoaXMgZHJpdmVyLCB0aGVuIGBmbWFuX3Byb2JlYCB3aWxsIGJlIGNhbGxlZCwgYW5kIGNvbnNlcXVlbnRseSBgcmVhZF9kdHNfbm9kZWAgYXMgd2VsbC4KCmByZWFkX2R0c19ub2RlYCBkb2VzIGEgYnVuY2ggb2Ygc3RhbmRhcmQgRFQgcGFyc2luZzogYGRldm1fa3phbGxvY2AsIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMmAsIGBvZl9jbGtfZ2V0YCwgYGNsa19nZXRfcmF0ZWAsIGBvZl9hZGRyZXNzX3RvX3Jlc291cmNlYCwgYW5kIGBkZXZtX2lvcmVtYXBgLiBBIGZhaWx1cmUgaW4gYG9mX2FkZHJlc3NfdG9fcmVzb3VyY2VgIHdvdWxkIHJlc3VsdCBpbiBhbiBlcnJvciwgd2hpY2ggY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gZnV6ei4gSWYgaXQgKnN1Y2NlZWRzKiwgaXQmIzM5O2xsIG1hcCBzb21lIG1lbW9yeSB2aWEgYGRldm1faW9yZW1hcGAuIEZvbGxvd2luZyB0aGF0LCBgZm1hbl9wcm9iZWAgY2FsbHMgYGZtYW5fY29uZmlnYC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBmdXp6YWJsZT8gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGZpeGluZyBhIG1lbW9yeSBsZWFrIG9yIGNoYW5naW5nIGFsbG9jYXRpb25zLCBhbmQgZml4aW5nIGVycm9yIHBhdGhzLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBidXQgaXQmIzM5O3MgaW4gYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIuIE5vcm1hbGx5LCBJJiMzOTtkIGRpc2NvdW50IGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBhcmVuJiMzOTt0IGVtdWxhdGVkIGJ5IFFFTVUvR0NFIGFzIHVucmVhY2hhYmxlLiBIb3dldmVyLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgdGhpcyBwc2V1ZG8tZGV2aWNlIGluamVjdGlvbiBtZWNoYW5pc20gZm9yIHBsYXRmb3JtIGRldmljZXMuCgpIZXJlJiMzOTtzIHRoZSBydWI6IHRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBjb25jZXJucyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIElzIEZyZWVzY2FsZSBGTWFuIGVtdWxhdGVkIGluIFFFTVU/IEkga25vdyBRRU1VIHN1cHBvcnRzICpzb21lKiBGcmVlc2NhbGUvTlhQIGJvYXJkcyAobGlrZSBgbXBjODU0NGRzYCwgYGU1MDBgLCBgc2FtNDYwZXhgLCBldGMuKSwgYnV0IGRvZXMgaXQgZW11bGF0ZSB0aGUgRk1hbiAoRnJhbWUgTWFuYWdlcik/CgpJIG5lZWQgdG8gY2hlY2sgUUVNVSYjMzk7cyBjb2RlLCBwcm9iYWJseSBpbiBgaHcvcHBjL2U1MDAuY2Agb3IgYGh3L3BwYy9lNTAwcGxhdC5jYCwgdG8gc2VlIGlmIEZNYW4gaXMgZW11bGF0ZWQuIFRoZSBEUEFBL0ZNYW4gaXMgdHlwaWNhbGx5IHF1aXRlIGNvbXBsZXgsIHNvIGZ1bGwgZW11bGF0aW9uIGlzIHVubGlrZWx5LCBidXQgd29ydGggYSBkb3VibGUtY2hlY2suCgpFdmVuIGlmIGl0IGlzbiYjMzk7dCBmdWxseSBlbXVsYXRlZCwgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gKnJlYWNoKiB0aGUgcHJvYmUgZnVuY3Rpb24gdmlhIERUIGluamVjdGlvbi4gU28sIGlzIGl0ICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCYjMzQ7PyBTeXprYWxsZXIgKmNhbiogaW5qZWN0IERUIG5vZGVzLiBJZiBpdCBpbmplY3RzIGEgRFQgbm9kZSwgYGZtYW5fcHJvYmVgICppcyogY2FsbGVkLiBUaGF0IG1lYW5zIGByZWFkX2R0c19ub2RlYCBnZXRzIGNhbGxlZCBhcyB3ZWxsLgoKVGhlIGRlY2lzaXZlIGZhY3RvciBpcyB0aGUgaW5zdHJ1Y3Rpb24gc2F5aW5nICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFNpbmNlIEkga25vdyBzeXprYWxsZXIgY2FuIGluamVjdCBEVCBub2RlcyBhbmQgdGh1cyByZWFjaCBgcmVhZF9kdHNfbm9kZWAsIGxldCBtZSBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGRldGFpbHMgb2Ygd2hhdCBgcmVhZF9kdHNfbm9kZWAgYWN0dWFsbHkgZG9lcyBhbmQgaWYgdGhhdCBpcyBzdXBwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY4NzpcdHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4yNjg4Olx0e1xuMjY4OTpcdFx0c3RydWN0IGZtYW4gKmZtYW47XG4yNjkwOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmZtX25vZGUsICptdXJhbV9ub2RlO1xuMjY5MTpcdFx0dm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7XG4yNjkyOlx0XHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbjI2OTM6XHRcdHUzMiB2YWwsIHJhbmdlWzJdO1xuMjY5NDpcdFx0aW50IGVyciwgaXJxO1xuMjY5NTpcdFx0c3RydWN0IGNsayAqY2xrO1xuMjY5NjpcdFx0dTMyIGNsa19yYXRlO1xuMjY5NzpcdFxuMjY5ODpcdFx0Zm1hbiA9IGRldm1fa3phbGxvYyhcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBzaXplb2YoKmZtYW4pLCBHRlBfS0VSTkVMKTtcbjI2OTk6XHRcdGlmICghZm1hbilcbjI3MDA6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4yNzAxOlx0XG4yNzAyOlx0XHRmbV9ub2RlID0gb2Zfbm9kZV9nZXQob2ZfZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbjI3MDM6XHRcbjI3MDQ6XHRcdGVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGZtX25vZGUsIFwmIzM0O2NlbGwtaW5kZXhcJiMzNDssIFx1MDAyNnZhbCk7XG4yNzA1Olx0XHRpZiAoZXJyKSB7XG4yNzA2Olx0XHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IGZhaWxlZCB0byByZWFkIGNlbGwtaW5kZXggZm9yICVwT0ZcXG5cJiMzNDssXG4yNzA3Olx0XHRcdFx0X19mdW5jX18sIGZtX25vZGUpO1xuMjcwODpcdFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4yNzA5Olx0XHR9XG4yNzEwOlx0XHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuaWQgPSAodTgpdmFsO1xuMjcxMTpcdFxuMjcxMjpcdFx0LyogR2V0IHRoZSBGTSBpbnRlcnJ1cHQgKi9cbjI3MTM6XHRcdGVyciA9IHBsYXRmb3JtX2dldF9pcnEob2ZfZGV2LCAwKTtcbjI3MTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yNzE1Olx0XHRcdGdvdG8gZm1hbl9ub2RlX3B1dDtcbjI3MTY6XHRcdGlycSA9IGVycjtcbjI3MTc6XHRcbjI3MTg6XHRcdC8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovXG4yNzE5Olx0XHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMSk7XG4yNzIwOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMjcyMTpcdFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4yNzIyOlx0XHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9IGVycjtcbjI3MjM6XHRcbjI3MjQ6XHRcdGNsayA9IG9mX2Nsa19nZXQoZm1fbm9kZSwgMCk7XG4yNzI1Olx0XHRpZiAoSVNfRVJSKGNsaykpIHtcbjI3MjY6XHRcdFx0ZXJyID0gUFRSX0VSUihjbGspO1xuMjcyNzpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IEZNJWQgY2xvY2sgc3RydWN0dXJlXFxuXCYjMzQ7LFxuMjcyODpcdFx0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuaWQpO1xuMjcyOTpcdFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4yNzMwOlx0XHR9XG4yNzMxOlx0XG4yNzMyOlx0XHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspO1xuMjczMzpcdFx0aWYgKCFjbGtfcmF0ZSkge1xuMjczNDpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMjczNTpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEZNJWQgY2xvY2sgcmF0ZVxcblwmIzM0OyxcbjI3MzY6XHRcdFx0XHRfX2Z1bmNfXywgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlkKTtcbjI3Mzc6XHRcdFx0Z290byBjbGtfcHV0O1xuMjczODpcdFx0fVxuMjczOTpcdFx0LyogUm91bmRpbmcgdG8gTUh6ICovXG4yNzQwOlx0XHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuY2xrX2ZyZXEgPSBESVZfUk9VTkRfVVAoY2xrX3JhdGUsIDEwMDAwMDApO1xuMjc0MTpcdFxuMjc0MjpcdFx0Y2xrX3B1dChjbGspO1xuMjc0MzpcdFxuMjc0NDpcdFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZm1fbm9kZSwgXCYjMzQ7ZnNsLHFtYW4tY2hhbm5lbC1yYW5nZVwmIzM0OyxcbjI3NDU6XHRcdFx0XHRcdFx0IFx1MDAyNnJhbmdlWzBdLCAyKTtcbjI3NDY6XHRcdGlmIChlcnIpIHtcbjI3NDc6XHRcdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcJiMzNDslczogZmFpbGVkIHRvIHJlYWQgZnNsLHFtYW4tY2hhbm5lbC1yYW5nZSBmb3IgJXBPRlxcblwmIzM0OyxcbjI3NDg6XHRcdFx0XHRfX2Z1bmNfXywgZm1fbm9kZSk7XG4yNzQ5Olx0XHRcdGdvdG8gZm1hbl9ub2RlX3B1dDtcbjI3NTA6XHRcdH1cbjI3NTE6XHRcdGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5xbWFuX2NoYW5uZWxfYmFzZSA9IHJhbmdlWzBdO1xuMjc1MjpcdFx0Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLm51bV9vZl9xbWFuX2NoYW5uZWxzID0gcmFuZ2VbMV07XG4yNzUzOlx0XG4yNzU0Olx0XHQvKiBHZXQgdGhlIE1VUkFNIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSAqL1xuMjc1NTpcdFx0bXVyYW1fbm9kZSA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShmbV9ub2RlLCBmbWFuX211cmFtX21hdGNoKTtcbjI3NTY6XHRcdGlmICghbXVyYW1fbm9kZSkge1xuMjc1NzpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMjc1ODpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBjb3VsZCBub3QgZmluZCBNVVJBTSBub2RlXFxuXCYjMzQ7LFxuMjc1OTpcdFx0XHRcdF9fZnVuY19fKTtcbjI3NjA6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI3NjE6XHRcdH1cbjI3NjI6XHRcbjI3NjM6XHRcdGVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobXVyYW1fbm9kZSwgMCxcbjI3NjQ6XHRcdFx0XHRcdCAgICAgXHUwMDI2Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLm11cmFtX3Jlcyk7XG4yNzY1Olx0XHRpZiAoZXJyKSB7XG4yNzY2Olx0XHRcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xuMjc2NzpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKCkgPSAlZFxcblwmIzM0OyxcbjI3Njg6XHRcdFx0XHRfX2Z1bmNfXywgZXJyKTtcbjI3Njk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI3NzA6XHRcdH1cbjI3NzE6XHRcbjI3NzI6XHRcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xuMjc3MzpcdFxuMjc3NDpcdFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBpcnEsIGZtYW5faXJxLCBJUlFGX1NIQVJFRCxcbjI3NzU6XHRcdFx0XHQgICAgICAgXCYjMzQ7Zm1hblwmIzM0OywgZm1hbik7XG4yNzc2Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4yNzc3Olx0XHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcXG5cJiMzNDssXG4yNzc4Olx0XHRcdFx0X19mdW5jX18sIGlycSwgZXJyKTtcbjI3Nzk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI3ODA6XHRcdH1cbjI3ODE6XHRcbjI3ODI6XHRcdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7XG4yNzgzOlx0XHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXG4yNzg0Olx0XHRcdFx0XHQgICAgICAgZm1hbl9lcnJfaXJxLCBJUlFGX1NIQVJFRCxcbjI3ODU6XHRcdFx0XHRcdCAgICAgICBcJiMzNDtmbWFuLWVyclwmIzM0OywgZm1hbik7XG4yNzg2Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERUIFByb3BlcnRpZXMgUmVxdWlyZWQgZm9yIFN1Y2Nlc3NmdWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgd2hhdCYjMzk7cyBuZWVkZWQgdG8gZ2V0IHRoaXMgdGhpbmcgcnVubmluZywgYW5kIGl0JiMzOTtzIHF1aXRlIGEgbGlzdCBvZiBEZXZpY2UgVHJlZSBwcm9wZXJ0aWVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSByZXF1aXJlbWVudHMgZm9yIGBjZWxsLWluZGV4YCwgdHdvIGludGVycnVwdHMgKHdoaWNoIGlzIGludGVyZXN0aW5nLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRob3NlIGFyZSB1c2VkKSwgYSBjbG9jayBzb3VyY2UsIGFuZCB0aGVuIGEgc3BlY2lmaWMgY2hhbm5lbCByYW5nZSBkZWZpbmVkIGJ5IGBmc2wscW1hbi1jaGFubmVsLXJhbmdlYC4gQmV5b25kIHRoYXQsIHRoZXJlJiMzOTtzIGEgbmVlZCBmb3IgYSBjaGlsZCBub2RlIHRoYXQmIzM5O3MgZ29pbmcgdG8gbWF0Y2ggYWdhaW5zdCBzb21ldGhpbmcgY2FsbGVkIGBmbWFuX211cmFtX21hdGNoYC4gV2UmIzM5O2xsIGFsc28gbmVlZCB0byB1c2UgYG9mX2FkZHJlc3NfdG9fcmVzb3VyY2VgIG9uIHRoYXQgY2hpbGQgbm9kZSBhbmQgdGhlbiBjYWxsIGBkZXZtX3JlcXVlc3RfaXJxYCBhbmQgYGRldm1faW9yZW1hcGAuIFF1aXRlIGEgY29uZmlndXJhdGlvbiwgcmlnaHQ/CgpUaGUgZ29vZCBuZXdzIGlzLCB0aGF0IHN5emthbGxlciYjMzk7cyBgc3l6X2Rldl9pbml0YCBmdW5jdGlvbiBsb29rcyBsaWtlIGl0IGNhbiBpbmplY3QgYXJiaXRyYXJ5IERldmljZSBUcmVlIG5vZGVzLiBUaGF0IG1lYW5zIGl0IGNhbiBwcm92aWRlIGFsbCB0aGVzZSBwcm9wZXJ0aWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBzaG91bGQgZm9jdXMgb24gdGhlIGBkZXZtX3JlcXVlc3RfaXJxYCBjYWxsIGJlY2F1c2UgaXQgY291bGQgZmFpbCBpZiB0aGUgaW50ZXJydXB0IHJlcXVlc3QgaXMgaW52YWxpZC4gTHVja2lseSwgU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSB2YWxpZCBkdW1teSBJUlFzIHNvIHRoYXQgc2hvdWxkIGJlIGxlc3Mgb2YgYSBoZWFkYWNoZS4gVGhlIGBkZXZtX2lvcmVtYXBgIHdpbGwgdGFrZSBjYXJlIG9mIG1hcHBpbmcgdGhlIG1lbW9yeS4KCkFscmlnaHQsIHNvIG9uY2UgYWxsIHRob3NlIERUIHByb3BlcnRpZXMgYXJlIHNldCBhbmQgbWFwcGVkLCB3ZSYjMzk7cmUgYXNzdW1pbmcgYGZtYW5fY29uZmlnYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgbmV4dC4gSSByZWFsbHkgc2hvdWxkIGRpdmUgaW4gYW5kIHNlZSBob3cgdGhhdCBpcyBpbXBsZW1lbnRlZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpbnRvIGBmbWFuX2NvbmZpZ2AuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGxvb2tzIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzYwOlx0XHRcdFx0XHQgICAgZm1hbi1cdTAwM2VzdGF0ZS1cdTAwM2VibWlfbWF4X251bV9vZl90YXNrcyk7XG4xNzYxOlx0XG4xNzYyOlx0XHRpZiAoZm1hbi1cdTAwM2VzdGF0ZS1cdTAwM2VyZXZfaW5mby5tYWpvciBcdTAwM2MgNikge1xuMTc2MzpcdFx0XHRmbWFuLVx1MDAzZWNmZy1cdTAwM2VkbWFfY29tbV9xdHNoX2Nscl9lbWVyID1cbjE3NjQ6XHRcdFx0KHU4KURGTFRfRE1BX0NPTU1fUV9MT1coZm1hbi1cdTAwM2VzdGF0ZS1cdTAwM2VyZXZfaW5mby5tYWpvcixcbjE3NjU6XHRcdFx0XHRcdFx0Zm1hbi1cdTAwM2VzdGF0ZS1cdTAwM2VkbWFfdGhyZXNoX21heF9jb21tcSk7XG4xNzY2Olx0XG4xNzY3Olx0XHRcdGZtYW4tXHUwMDNlY2ZnLVx1MDAzZWRtYV9jb21tX3F0c2hfYXNydF9lbWVyID1cbjE3Njg6XHRcdFx0KHU4KURGTFRfRE1BX0NPTU1fUV9ISUdIKGZtYW4tXHUwMDNlc3RhdGUtXHUwMDNlcmV2X2luZm8ubWFqb3IsXG4xNzY5Olx0XHRcdFx0XHRcdCBmbWFuLVx1MDAzZXN0YXRlLVx1MDAzZWRtYV90aHJlc2hfbWF4X2NvbW1xKTtcbjE3NzA6XHRcbjE3NzE6XHRcdFx0Zm1hbi1cdTAwM2VjZmctXHUwMDNlZG1hX2NhbV9udW1fb2ZfZW50cmllcyA9XG4xNzcyOlx0XHRcdERGTFRfRE1BX0NBTV9OVU1fT0ZfRU5UUklFUyhmbWFuLVx1MDAzZXN0YXRlLVx1MDAzZXJldl9pbmZvLm1ham9yKTtcbjE3NzM6XHRcbjE3NzQ6XHRcdFx0Zm1hbi1cdTAwM2VjZmctXHUwMDNlZG1hX3JlYWRfYnVmX3RzaF9jbHJfZW1lciA9XG4xNzc1Olx0XHRcdERGTFRfRE1BX1JFQURfSU5UX0JVRl9MT1coZm1hbi1cdTAwM2VzdGF0ZS1cdTAwM2VkbWFfdGhyZXNoX21heF9idWYpO1xuMTc3NjpcdFxuMTc3NzpcdFx0XHRmbWFuLVx1MDAzZWNmZy1cdTAwM2VkbWFfcmVhZF9idWZfdHNoX2FzcnRfZW1lciA9XG4xNzc4Olx0XHRcdERGTFRfRE1BX1JFQURfSU5UX0JVRl9ISUdIKGZtYW4tXHUwMDNlc3RhdGUtXHUwMDNlZG1hX3RocmVzaF9tYXhfYnVmKTtcbjE3Nzk6XHRcbjE3ODA6XHRcdFx0Zm1hbi1cdTAwM2VjZmctXHUwMDNlZG1hX3dyaXRlX2J1Zl90c2hfY2xyX2VtZXIgPVxuMTc4MTpcdFx0XHRERkxUX0RNQV9XUklURV9JTlRfQlVGX0xPVyhmbWFuLVx1MDAzZXN0YXRlLVx1MDAzZWRtYV90aHJlc2hfbWF4X2J1Zik7XG4xNzgyOlx0XG4xNzgzOlx0XHRcdGZtYW4tXHUwMDNlY2ZnLVx1MDAzZWRtYV93cml0ZV9idWZfdHNoX2FzcnRfZW1lciA9XG4xNzg0Olx0XHRcdERGTFRfRE1BX1dSSVRFX0lOVF9CVUZfSElHSChmbWFuLVx1MDAzZXN0YXRlLVx1MDAzZWRtYV90aHJlc2hfbWF4X2J1Zik7XG4xNzg1Olx0XG4xNzg2Olx0XHRcdGZtYW4tXHUwMDNlY2ZnLVx1MDAzZWRtYV9heGlfZGJnX251bV9vZl9iZWF0cyA9XG4xNzg3Olx0XHRcdERGTFRfQVhJX0RCR19OVU1fT0ZfQkVBVFM7XG4xNzg4Olx0XHR9XG4xNzg5Olx0XG4xNzkwOlx0XHRyZXR1cm4gMDtcbjE3OTE6XHRcbjE3OTI6XHRlcnJfZm1fc29jX3NwZWNpZmljOlxuMTc5MzpcdFx0a2ZyZWUoZm1hbi1cdTAwM2VjZmcpO1xuMTc5NDpcdGVycl9mbV9kcnY6XG4xNzk1Olx0XHRrZnJlZShmbWFuLVx1MDAzZXN0YXRlKTtcbjE3OTY6XHRcdHJldHVybiAtRUlOVkFMO1xuMTc5NzpcdH1cbjE3OTg6XHRcbjE3OTk6XHRzdGF0aWMgaW50IGZtYW5fcmVzZXQoc3RydWN0IGZtYW4gKmZtYW4pXG4xODAwOlx0e1xuMTgwMTpcdFx0dTMyIGNvdW50O1xuMTgwMjpcdFx0aW50IGVyciA9IDA7XG4xODAzOlx0XG4xODA0Olx0XHRpZiAoZm1hbi1cdTAwM2VzdGF0ZS1cdTAwM2VyZXZfaW5mby5tYWpvciBcdTAwM2MgNikge1xuMTgwNTpcdFx0XHRpb3dyaXRlMzJiZShGUE1fUlNUQ19GTV9SRVNFVCwgXHUwMDI2Zm1hbi1cdTAwM2VmcG1fcmVncy1cdTAwM2VmbV9yc3RjKTtcbjE4MDY6XHRcdFx0LyogV2FpdCBmb3IgcmVzZXQgY29tcGxldGlvbiAqL1xuMTgwNzpcdFx0XHRjb3VudCA9IDEwMDtcbjE4MDg6XHRcdFx0ZG8ge1xuMTgwOTpcdFx0XHRcdHVkZWxheSgxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NjQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGViYXNlIGFuZCBJIHNlZSBgZm1hbl9jb25maWdgIGdldHRpbmcgaW52b2tlZCBmcm9tIGBmbWFuX3Byb2JlYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgc2VlbXMgbGlrZSB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yLCBvciBhdCBsZWFzdCBpbnZvbHZlZCBpbiwgcHVsbGluZyBpbiBjb25maWd1cmF0aW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSB0aGUgc291cmNlIG9mIHdoYXRldmVyIGlzc3VlIEkmIzM5O20gY2hhc2luZywgc28gbGV0JiMzOTtzIGp1bXAgcmlnaHQgaW50byBgZm1hbl9wcm9iZWAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMuIElzIGl0IGxvYWRpbmcgdGhlIGNvbmZpZz8gTWVyZ2luZyBpdD8gVmFsaWRhdGluZyBpdD8gQW5kLCBpbXBvcnRhbnRseSwgKmhvdyogaXMgdGhpcyBjb25maWd1cmF0aW9uIGludGVyYWN0aW5nIHdpdGggdGhlIHByb2JlPyBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODI2Olx0c3RhdGljIGludCBmbWFuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbjI4Mjc6XHR7XG4yODI4Olx0XHRzdHJ1Y3QgZm1hbiAqZm1hbjtcbjI4Mjk6XHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbjI4MzA6XHRcdGludCBlcnI7XG4yODMxOlx0XG4yODMyOlx0XHRkZXYgPSBcdTAwMjZvZl9kZXYtXHUwMDNlZGV2O1xuMjgzMzpcdFxuMjgzNDpcdFx0Zm1hbiA9IHJlYWRfZHRzX25vZGUob2ZfZGV2KTtcbjI4MzU6XHRcdGlmIChJU19FUlIoZm1hbikpXG4yODM2Olx0XHRcdHJldHVybiBQVFJfRVJSKGZtYW4pO1xuMjgzNzpcdFxuMjgzODpcdFx0ZXJyID0gZm1hbl9jb25maWcoZm1hbik7XG4yODM5Olx0XHRpZiAoZXJyKSB7XG4yODQwOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDslczogRk1hbiBjb25maWcgZmFpbGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4yODQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg0MjpcdFx0fVxuMjg0MzpcdFxuMjg0NDpcdFx0aWYgKGZtYW5faW5pdChmbWFuKSAhPSAwKSB7XG4yODQ1Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDslczogRk1hbiBpbml0IGZhaWxlZFxcblwmIzM0OywgX19mdW5jX18pO1xuMjg0NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI4NDc6XHRcdH1cbjI4NDg6XHRcbjI4NDk6XHRcdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9PSAwKSB7XG4yODUwOlx0XHRcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0RNQV9CVVNfRVJST1IsIGZhbHNlKTtcbjI4NTE6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfRE1BX1JFQURfRUNDLCBmYWxzZSk7XG4yODUyOlx0XHRcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0RNQV9TWVNURU1fV1JJVEVfRUNDLCBmYWxzZSk7XG4yODUzOlx0XHRcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0RNQV9GTV9XUklURV9FQ0MsIGZhbHNlKTtcbjI4NTQ6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfRE1BX1NJTkdMRV9QT1JUX0VDQywgZmFsc2UpO1xuMjg1NTpcdFx0XHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9GUE1fU1RBTExfT05fVEFTS1MsIGZhbHNlKTtcbjI4NTY6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfRlBNX1NJTkdMRV9FQ0MsIGZhbHNlKTtcbjI4NTc6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfRlBNX0RPVUJMRV9FQ0MsIGZhbHNlKTtcbjI4NTg6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfUU1JX1NJTkdMRV9FQ0MsIGZhbHNlKTtcbjI4NTk6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfUU1JX0RPVUJMRV9FQ0MsIGZhbHNlKTtcbjI4NjA6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sXG4yODYxOlx0XHRcdFx0XHQgICBGTUFOX0VYX1FNSV9ERVFfRlJPTV9VTktOT1dOX1BPUlRJRCwgZmFsc2UpO1xuMjg2MjpcdFx0XHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9CTUlfTElTVF9SQU1fRUNDLCBmYWxzZSk7XG4yODYzOlx0XHRcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0JNSV9TVE9SQUdFX1BST0ZJTEVfRUNDLFxuMjg2NDpcdFx0XHRcdFx0ICAgZmFsc2UpO1xuMjg2NTpcdFx0XHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9CTUlfU1RBVElTVElDU19SQU1fRUNDLCBmYWxzZSk7XG4yODY2Olx0XHRcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0JNSV9ESVNQQVRDSF9SQU1fRUNDLCBmYWxzZSk7XG4yODY3Olx0XHR9XG4yODY4Olx0XG4yODY5Olx0XHRkZXZfc2V0X2RydmRhdGEoZGV2LCBmbWFuKTtcbjI4NzA6XHRcbjI4NzE6XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtGTWFuJWQgcHJvYmVkXFxuXCYjMzQ7LCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuaWQpO1xuMjg3MjpcdFxuMjg3MzpcdFx0cmV0dXJuIDA7XG4yODc0Olx0fVxuMjg3NTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA1OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDg5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYCDigJMgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhbHRlcmluZyBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNsZWFyIGluZGljYXRvciBvZiBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBleHBsb3JlLiBUaGUgY29yZSBxdWVzdGlvbiBpcywgY2FuIHN5emthbGxlciBldmVuICpyZWFjaCogdGhpcyBjb2RlPwoKWWVzLCBhYnNvbHV0ZWx5LiBTeXprYWxsZXIgY2FuIGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGRldmljZSB0cmVlIG5vZGVzLiBTcGVjaWZpY2FsbHksIGlmIHN5emthbGxlciBpbmplY3RzIGEgZGV2aWNlIHRyZWUgbm9kZSBtYXRjaGluZyAmIzM0O2ZzbCxmbWFuJiMzNDssIHRoYXQmIzM5O2xsIHRyaWdnZXIgYGZtYW5fcHJvYmVgLiBBbmQgYGZtYW5fcHJvYmVgIGxlYWRzIGRpcmVjdGx5IHRvIHRoZSBleGVjdXRpb24gb2YgYHJlYWRfZHRzX25vZGVgLiBUaGF0JiMzOTtzIHRoZSBnYXRld2F5ISBJdCYjMzk7bGwgYXR0ZW1wdCB0byByZWFkIHByb3BlcnRpZXMsIGFuZCAqaWYqIGl0IGZhaWxzLCB3ZSBoaXQgdGhlIGVycm9yIHBhdGhzIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcy4KCk5vdywgYHJlYWRfZHRzX25vZGVgIGl0c2VsZiBjYWxscyBvdGhlciBmdW5jdGlvbnMsIHN1Y2ggYXMgYG9mX2Nsa19nZXRgLCBgY2xrX2dldF9yYXRlYCwgYG9mX2FkZHJlc3NfdG9fcmVzb3VyY2VgLCBhbmQgYGRldm1faW9yZW1hcGAuIFNvIGlmIHN5emthbGxlciBpbmplY3RzIGEgRFQgbm9kZSwgd2UgY2FuIHByb3ZpZGUgZHVtbXkgY2xvY2sgYW5kIG1lbW9yeSByZXNvdXJjZXMuIEhvd2V2ZXIsIGBmbWFuX2NvbmZpZ2AgYW5kIGBmbWFuX2luaXRgIHdpbGwgZXZlbnR1YWxseSB0cnkgdG8gYWNjZXNzIHRoZSBtZW1vcnkgYGRldm1faW9yZW1hcGAgaXMgaGFuZGxpbmcuIElmIGl0JiMzOTtzIGp1c3QgZHVtbXkgUkFNLCB3ZSB3b24mIzM5O3QgY3Jhc2gsIGJ1dCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIG9mIGl0IHJlYWRpbmcgZ2FyYmFnZSB3aGljaCBjb3VsZCBsZWFkIHRvIGludGVyZXN0aW5nIGJlaGF2aW91ci4gQW5kIHdoYXQgaGFwcGVucyB3aGVuIGBkZXZtX2lvcmVtYXBgIGlzIHVzZWQgd2l0aCBkdW1teSBtZW1vcnk/IFN5emthbGxlciBjYW4gbWFwIGFyYml0cmFyeSBwaHlzaWNhbCBhZGRyZXNzZXMhIElmIGl0IG1hcHMgUkFNLCBpdCB3aWxsIHJlYWQvd3JpdGUgUkFNLiBJZiBpdCBtYXBzIHVubWFwcGVkIHBoeXNpY2FsIGFkZHJlc3NlcywgdGhlcmUgY291bGQgYmUgYSBidXMgZXJyb3Igb3IgTUNFLiBTeXprYWxsZXIgcnVucyBvbiB4ODZfNjQsIGFybTY0LCBhbmQgcmlzY3Y2NC4KClRoaXMgZHJpdmVyJiMzOTtzIGRlcGVuZGVuY2llcywgYEZTTF9TT0MgfHwgQVJDSF9MQVlFUlNDQVBFIHx8IENPTVBJTEVfVEVTVGAsIG1ha2VzIGl0IGNvbXBpbGFibGUgb24geDg2XzY0IHdpdGggYENPTVBJTEVfVEVTVGAuIFRoaXMgbWVhbnMgdGhhdCBpZiBjb21waWxlZCB3aXRoIGBDT01QSUxFX1RFU1RgLCBpdCBjYW4gYmUgcmVhY2hlZCB2aWEgc3l6a2FsbGVyLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBgQ09ORklHX0ZTTF9GTUFOYC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgYmVjb21lczogaXMgdGhpcyBkcml2ZXIgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoJiMzNDsgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRhbmNlPyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHVucmVhY2hhYmxlIGluIEdDRSBvciBRRU1VLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuCgpCdXQgd2FpdCwgdGhpcyBkcml2ZXIgKmlzKiByZWFjaGFibGUgdmlhIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24gdXNpbmcgYHN5el9kZXZfaW5pdGAuIE5vdywgdGhpcyBkcml2ZXIgaXMgaGFyZHdhcmUtc3BlY2lmaWMuIFdlIHVzdWFsbHkgZG9uJiMzOTt0IGZ1enogcmFuZG9tIGhhcmR3YXJlIGRyaXZlcnMgdW5sZXNzIHRoZXkgYXJlIGVtdWxhdGVkIG9yIGFyZSBzcGVjaWZpY2FsbHkgdGFyZ2V0ZWQuCgpMZXQmIzM5O3MgbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhlIHBhdGNoLiBJdCBjaGFuZ2VzIGBremFsbG9jX29iamAgdG8gYGRldm1fa3phbGxvY2AuIEl0IGFkZHMgYGNsa19wdXQoY2xrKWAuIEl0IHJlbW92ZXMgYGtmcmVlKGZtYW4pYCBpbiBlcnJvciBwYXRocy4gT2theSwgdGhhdCBzY3JlYW1zIHByb2JlIGVycm9yIHBhdGggY2xlYW51cCB0byBtZS4gSXQmIzM5O3MgYWJvdXQgcHJldmVudGluZyBtZW1vcnkgbGVha3MuIEl0IGNvdWxkIGJlIGZpeGluZyBhIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHksIG9yIGp1c3QgaW1wcm92aW5nIHRoZSBjb2RlIHdpdGggYGRldm1fa3phbGxvY2AuCgpDb25zaWRlcmluZyBhbGwgdGhpcywgaXMgaXQgd29ydGggZnV6emluZz8gWWVzLCBJIHRoaW5rIHNvLiBJZiB3ZSBzYXkgJiMzNDt5ZXMsJiMzNDsgd2UgbmVlZCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBGb3IgYEZvY3VzU3ltYm9sc2AsIHdlJiMzOTtsbCBpbmNsdWRlIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYC4gRm9yIGBFbmFibGVDb25maWdzYCwgd2UmIzM5O2xsIHNldCBgRlNMX0ZNQU5gLiBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgYEZTTF9GTUFOYCBpcyBlbm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU0xfRk1BTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzoyOmNvbmZpZyBGU0xfRk1BTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Rk1hbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgRlNMX0ZNQU4qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgYEZTTF9GTUFOYCBoYXMgc29tZSBpbnRlcmVzdGluZyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIG5vdCBqdXN0IGEgc3RyYWlnaHRmb3J3YXJkIGVuYWJsZS9kaXNhYmxlLiBJdCBzZWVtcyBpdCByZWxpZXMgb24gYEZTTF9TT0NgLCBgQVJDSF9MQVlFUlNDQVBFYCwgKipvcioqIHRoZSBgQ09NUElMRV9URVNUYCBvcHRpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGlzIG1lYW5zIEkgY2FuIHBvdGVudGlhbGx5IGVuYWJsZSBgRlNMX0ZNQU5gIGV2ZW4gaWYgdGhlIHByaW1hcnkgYXJjaGl0ZWN0dXJhbCByZXF1aXJlbWVudHMgYXJlbiYjMzk7dCBtZXQsIHNwZWNpZmljYWxseSBpZiBgQ09NUElMRV9URVNUYCBpcyBhY3RpdmUsIHdoaWNoIGlzIG9mdGVuIHVzZWQgZm9yIHRlc3RpbmcgY29uZmlndXJhdGlvbnMuIAoKTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGlzOiB0aGlzIGlzbiYjMzk7dCBuZWNlc3NhcmlseSB0aGUgb25seSBjb25kaXRpb24gYWZmZWN0aW5nIGl0cyBiZWhhdmlvci4gSnVzdCBiZWNhdXNlIGl0ICpjYW4qIGJlIGVuYWJsZWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIGRvZXNuJiMzOTt0IG1lYW4gdGhvc2UgYXJlICphbGwqIHRoZSBjb25kaXRpb25zLiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzLCBwZXJoYXBzIGluZGlyZWN0IG9uZXMsIG9yIGNvbnN0cmFpbnRzIG9uIG90aGVyIHZhcmlhYmxlcyB0aGF0IGFmZmVjdCBpdHMgZnVsbCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgYWJvdXQgaG93IGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc9Mj1jb25maWcgRlNMX0ZNQU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0ZNYW4gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBGU0xfU09DIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctNS1cdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc9MTQ9Y29uZmlnIERQQUFfRVJSQVRVTV9BMDUwMzg1XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTE1LVx0Ym9vbFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gQVJNNjQgXHUwMDI2XHUwMDI2IEZTTF9EUEFBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTE3LVx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDQzCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogOTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIEZTTF9GTUFOIERyaXZlcioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBGU0xfRk1BTmAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGNvbnNpZGVyIGhlcmUuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBwYXRjaCBhY3R1YWxseSB3b3J0aCBmdXp6aW5nPyBJdCBzZWVtcyBsaWtlIGl0IHByaW1hcmlseSBhZGRyZXNzZXMgcHJvYmUgZXJyb3IgcGF0aHMuIEhvd2V2ZXIsIFN5emthbGxlciBvZnRlbiB0YXJnZXRzIHRoZXNlIGFyZWFzIGVmZmVjdGl2ZWx5IHRocm91Z2ggZmF1bHQgaW5qZWN0aW9uIG9yIGJ5IGZlZWRpbmcgaW52YWxpZCBEZXZpY2UgVHJlZSAoRFQpIHByb3BlcnRpZXMuIElmIFN5emthbGxlciBjYW4gbWFuaXB1bGF0ZSB0aGUgRFQgbm9kZSwgdGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiB0aGVzZSBlcnJvciBwYXRocyB3aWxsIGJlIGhpdC4KCkxldCBtZSBjb25maXJtIHRoYXQgYGZtYW5fcHJvYmVgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCBhbmQgeWVzLCBpdCYjMzk7cyBhIHN0YW5kYXJkIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmdW5jdGlvbi4gQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBsZWFuIHRvd2FyZHMgc2V0dGluZyBgV29ydGhGdXp6aW5nPXRydWVgLgoKTXkgZm9jdXMgc3ltYm9scyB3aWxsIGJlOiBgcmVhZF9kdHNfbm9kZWAsIGBmbWFuX2NvbmZpZ2AsIGFuZCB0aGUgb2J2aW91cyBgZm1hbl9wcm9iZWAuIEZvciBjb25maWd1cmF0aW9uLCBgRlNMX0ZNQU5gIGlzIHRoZSBrZXkuCgpIb2xkIG9uLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYHJlYWRfZHRzX25vZGVgIGlzIHN0YXRpYy4gWWVzLCBpdCBpczogYHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpYC4gQW5kIGBmbWFuX2NvbmZpZ2AgaXMgYWxzbyBzdGF0aWMsIHNvIEkmIzM5O20gY29uZmlkZW50IGFib3V0IGluY2x1ZGluZyBgcmVhZF9kdHNfbm9kZWAgYW5kIGBmbWFuX2NvbmZpZ2AgYXMgZm9jdXMgc3ltYm9scy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIEl0IHNlZW1zIHRoZSBtYWluIGNoYW5nZXMgaW52b2x2ZSBtZW1vcnkgYW5kIGNsb2NrIG1hbmFnZW1lbnQgaW4gZXJyb3IgcGF0aHMuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgY2hhbmdpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGZtYW5gIGZyb20gYGt6YWxsb2NgIHRvIGBkZXZtX2t6YWxsb2NgIGFuZCBmaXhpbmcgc29tZSBjbG9jayBsZWFrcyBieSBhZGRpbmcgYGNsa19wdXQoY2xrKWAuIFRoZSBjb2RlIGlzIG1ha2luZyB0aGUgYXBwcm9wcmlhdGUgdXBkYXRlcyB0byB0aGUgZnJlZSBjYWxscyB0byBjb21wbGVtZW50IHRoaXMgY2hhbmdlLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGltcHJvdmVtZW50LCBhIGdvb2QgY2xlYW51cCBvZiB0aGUgZXJyb3IgcGF0aHMsIGFuZCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpZiB0aGUgZHJpdmVyIHByb2Jlcy4gSSYjMzk7bSBnb2luZyB3aXRoIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpTbywgdG8gcmVpdGVyYXRlLCBjb25maWd1cmF0aW9uczogYEZTTF9GTUFOYDsgZm9jdXMgc3ltYm9sczogYHJlYWRfZHRzX25vZGVgLCBgZm1hbl9jb25maWdgLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoZSBkcml2ZXIgaXMgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vYC4gSXMgdGhlcmUgYSBwYXJlbnQgb3IgYnJvYWRlciBjb25maWd1cmF0aW9uIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkmIzM5O2xsIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWdgIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9NjI9c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjYzOnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy02NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqS2NvbmZpZyBEZXBlbmRlbmN5IENoZWNrKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSBmb3IgRnJlZXNjYWxlIEV0aGVybmV0IGRyaXZlcnMsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWdgLiBCZWZvcmUgSSBkaXZlIGludG8gYW55IGNvZGUsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgb3ZlcmFsbCBzeXN0ZW0gYnVpbGQuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBLY29uZmlnIHN5bWJvbHMsIGFuZCBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIGFzIHdlbGwuIEkgbmVlZCB0byBrbm93IGlmIGVuYWJsaW5nIHRoaXMgcGFydGljdWxhciBkcml2ZXIgaGFzIGFueSBjYXNjYWRpbmcgZWZmZWN0cy4gRnJvbSB0aGVyZSwgSSB3aWxsIGRldGVybWluZSB0aGUgc2NvcGUgb2YgYW55IHBvdGVudGlhbCBjaGFuZ2VzIEkgbWF5IHdpc2ggdG8gbWFrZSwgd2hldGhlciB0aGV5IGJlIG1vZGlmaWNhdGlvbnMsIGFkZGl0aW9ucyBvciByZW1vdmFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9WRU5ET1JfRlJFRVNDQUxFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjY6Y29uZmlnIE5FVF9WRU5ET1JfRlJFRVNDQUxFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtGcmVlc2NhbGUgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM0NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFzc2Vzc2luZyBGcmVlc2NhbGUgVmVuZG9yIFN1cHBvcnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB3aGV0aGVyIHdlIGFjdHVhbGx5IG5lZWQgdG8gaW5jbHVkZSBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldHdvcmstcmVsYXRlZCBjb2RlIGhlcmUsIGxpa2VseSBkZXZpY2UgZHJpdmVycyBvciBzb21lIG5ldHdvcmsgYWJzdHJhY3Rpb24gbGF5ZXIsIGFuZCB0aGF0IHByZXByb2Nlc3NvciBzeW1ib2wgaXMgc2NyZWFtaW5nICYjMzQ7RnJlZXNjYWxlJiMzNDsgYXQgbWUuIE15IGludGVybmFsIGNoZWNrbGlzdCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyBkb3duIHRoZSBwb3RlbnRpYWwgc2NlbmFyaW9zLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBGcmVlc2NhbGUgKG9yIE5YUCkgU29DPyBBcmUgd2UgdGFyZ2V0aW5nIGEgYm9hcmQgdGhhdCByZWxpZXMgaGVhdmlseSBvbiBGcmVlc2NhbGUmIzM5O3MgbmV0d29ya2luZyBJUD8gT3IgaXMgdGhpcyBqdXN0IGxlZ2FjeSBjb2RlIHRoYXQmIzM5O3MgaGFuZ2luZyBhcm91bmQ/CgpJJiMzOTttIHRoaW5raW5nLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0IGNvdWxkIGJlIHVzZWZ1bCwgb3IgcG9zc2libHkgbmVjZXNzYXJ5LgoKVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgY29udGV4dCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyB2aXRhbCBvciBpZiBpdCYjMzk7cyBkZWFkIGNvZGUganVzdCB3YWl0aW5nIHRvIGJlIHBydW5lZC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB1c2luZyB0b29scywgaWRlbnRpZnkgb3RoZXIgZmlsZXMgdGhhdCBjb3VsZCBiZSBhZmZlY3RlZCBieSBpdCwgYW5kIGRldGVybWluZSB0aGUgZXhhY3QgZnVuY3Rpb25hbGl0eSBjb250cm9sbGVkIGJ5IHRoaXMgZmxhZy4gSXMgaXQganVzdCBhIGRyaXZlciwgYSBQSFkgY29uZmlndXJhdGlvbiwgb3Igc29tZXRoaW5nIG1vcmUgZnVuZGFtZW50YWw/IFRpbWUgdG8gc3RhcnQgdHJhY2luZyBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz02PWNvbmZpZyBORVRfVkVORE9SX0ZSRUVTQ0FMRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTgtXHRkZWZhdWx0IHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjk6XHRkZXBlbmRzIG9uIEZTTF9TT0MgfHwgUVVJQ0NfRU5HSU5FIHx8IENQTTEgfHwgQ1BNMiB8fCBQUENfTVBDNTEyeCB8fCBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMTAtXHRcdCAgIE01MjN4IHx8IE01Mjd4IHx8IE01MjcyIHx8IE01Mjh4IHx8IE01MjB4IHx8IE01MzJ4IHx8IFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtGRUMgZXRoZXJuZXQgY29udHJvbGxlciAob2YgQ29sZEZpcmUgYW5kIHNvbWUgaS5NWCBDUFVzKVwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6MjU6XHRkZXBlbmRzIG9uIChNNTIzeCB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTIweCB8fCBNNTMyeCB8fCBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMjYtXHRcdCAgIEFSQ0hfTVhDIHx8IEFSQ0hfUzMyIHx8IFNPQ19JTVgyOCB8fCBDT01QSUxFX1RFU1QpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yNy1cdGRlZmF1bHQgQVJDSF9NWEMgfHwgU09DX0lNWDI4IGlmIEFSTVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6Mjg6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yOS1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnPTM5PWNvbmZpZyBGRUNfTVBDNTJ4eFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNDAtXHR0cmlzdGF0ZSBcJiMzNDtGRUMgTVBDNTJ4eCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjQxOlx0ZGVwZW5kcyBvbiBQUENfTVBDNTJ4eCBcdTAwMjZcdTAwMjYgUFBDX0JFU1RDT01NXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy00Mi1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnPTUwPWNvbmZpZyBGRUNfTVBDNTJ4eF9NRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7RkVDIE1QQzUyeHggTURJTyBidXMgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo1MjpcdGRlcGVuZHMgb24gRkVDX01QQzUyeHhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTUzLVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9NzE9Y29uZmlnIEZTTF9YR01BQ19NRElPXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNzMtXHRzZWxlY3QgUEhZTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo3NDpcdGRlcGVuZHMgb24gT0ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTc1LVx0c2VsZWN0IE9GX01ESU9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz04MD1jb25maWcgVUNDX0dFVEhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTgxLVx0dHJpc3RhdGUgXCYjMzQ7RnJlZXNjYWxlIFFFIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjgyOlx0ZGVwZW5kcyBvbiBRVUlDQ19FTkdJTkUgXHUwMDI2XHUwMDI2IFBQQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy04My1cdHNlbGVjdCBGU0xfUFFfTURJT1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnPTg5PWNvbmZpZyBVR0VUSF9UWF9PTl9ERU1BTkRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtUcmFuc21pdCBvbiBEZW1hbmQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6OTE6XHRkZXBlbmRzIG9uIFVDQ19HRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy05Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnPTkzPWNvbmZpZyBHSUFORkFSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy05NC1cdHRyaXN0YXRlIFwmIzM0O0dpYW5mYXIgRXRoZXJuZXRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjk1Olx0ZGVwZW5kcyBvbiBIQVNfRE1BXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy05Ni1cdHNlbGVjdCBGU0xfUFFfTURJT1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY3NAoJCQkJCQkJb3V0cHV0OiAxMDkKCQkJCQkJCXRob3VnaHRzOiAzNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRnJlZXNjYWxlIE5ldHdvcmtpbmcgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgaGluZ2VzIG9uIGBDT01QSUxFX1RFU1RgIGJlaW5nIGVuYWJsZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBCdXQsIGV2ZW4gaWYgYENPTVBJTEVfVEVTVGAgaXNuJiMzOTt0IGVuYWJsZWQsIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgYWxzbyBoYXMgdGhlc2UgZGVwZW5kZW5jaWVzOiBgRlNMX1NPQyB8fCBRVUlDQ19FTkdJTkUgfHwgQ1BNMSB8fCBDUE0yIHx8IFBQQ19NUEM1MTJ4IHx8IE01MjN4IHx8IE01Mjd4IHx8IE01MjcyIHx8IE01Mjh4IHx8IE01MjB4IHx8IE01MzJ4IHx8IEFSQ0hfTVhDIHx8IEFSQ0hfUzMyIHx8IFNPQ19JTVgyOCB8fCBDT01QSUxFX1RFU1RgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGRpdmVyc2Ugc2V0IG9mIGFyY2hpdGVjdHVyZXMhIFNvLCBpZiBgQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLCB0aGVuIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgKmNhbiogYmUgZW5hYmxlZC4gSSB3aWxsIGVuYWJsZSBib3RoIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgYW5kIGBGU0xfRk1BTmAuCgpOb3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBmb3IgdGhlIGRyaXZlciBpdHNlbGYsIHNvIEkgbmVlZCB0byBjaGVjayBgRlNMX0ZNQU5gLiBZZXMsIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZHJpdmVyIGlzIGluZGVlZCBgRlNMX0ZNQU5gLiBUaGF0JiMzOTtzIGdvb2QuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBKU09OIGNvbmZpZ3VyYXRpb24uIFRoZSBnb2FsIGhlcmUgaXMgY2xlYXJseSBmdXp6aW5nIHRoZSBGcmVlc2NhbGUgRk1hbiBkcml2ZXIuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHRydWUsIHdoaWNoIHZhbGlkYXRlcyB0aGUgZWZmb3J0LiBUaGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBpbmNsdWRlcyBgcmVhZF9kdHNfbm9kZWAgYW5kIGBmbWFuX2NvbmZpZ2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGV5JiMzOTtyZSBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIGRldmljZSB0cmVlIHBhcnNpbmcgYW5kIGNvbmZpZ3VyYXRpb24uIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGFscmVhZHkgc2V0LCB3aGljaCBhbGlnbnMgd2l0aCBteSBmaW5kaW5nczogYE5FVF9WRU5ET1JfRlJFRVNDQUxFYCBhbmQgYEZTTF9GTUFOYC4gVGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBpcywgdGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbmQgY2xvY2sgbGVha3MgaW4gdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlciwgYW5kIHRoZXNlIHBhdGhzIGNhbiBiZSB0ZXN0ZWQgdGhyb3VnaCBzeXprYWxsZXIgdmlhIHBsYXRmb3JtIGRldmljZSBhbmQgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLgoKVGhpbmtpbmcgYWJvdXQgdGhlIGNvZGUsIGBmbWFuX3Byb2JlYCBzZWVtcyBsaWtlIGEgZ29vZCBmb2N1cyBzeW1ib2wsIHRvby4gQmVjYXVzZSBpdCBhbHNvIGNhbGxzIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYC4gU28sIEkgd2lsbCBhZGQgYGZtYW5fcHJvYmVgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfRlJFRVNDQUxFJiMzNDssCiAgICAmIzM0O0ZTTF9GTUFOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVhZF9kdHNfbm9kZSYjMzQ7LAogICAgJiMzNDtmbWFuX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtmbWFuX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbmQgY2xvY2sgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGhzIG9mIHRoZSBGcmVlc2NhbGUgRk1hbiBkcml2ZXIuIFRoZXNlIHBhdGhzIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyIHZpYSBwbGF0Zm9ybSBkZXZpY2UgYW5kIGRldmljZSB0cmVlIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9GUkVFU0NBTEUmIzM0OywKICAgICYjMzQ7RlNMX0ZNQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWFkX2R0c19ub2RlJiMzNDssCiAgICAmIzM0O2ZtYW5fY29uZmlnJiMzNDssCiAgICAmIzM0O2ZtYW5fcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFuZCBjbG9jayBsZWFrcyBpbiB0aGUgcHJvYmUgZXJyb3IgcGF0aHMgb2YgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlci4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBieSBzeXprYWxsZXIgdmlhIHBsYXRmb3JtIGRldmljZSBhbmQgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzc6MjkuNzMwMTY2NzM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMjUxODY0MjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfRlJFRVNDQUxFXCIsXG4gICAgXCJGU0xfRk1BTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlYWRfZHRzX25vZGVcIixcbiAgICBcImZtYW5fY29uZmlnXCIsXG4gICAgXCJmbWFuX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFuZCBjbG9jayBsZWFrcyBpbiB0aGUgcHJvYmUgZXJyb3IgcGF0aHMgb2YgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlci4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBieSBzeXprYWxsZXIgdmlhIHBsYXRmb3JtIGRldmljZSBhbmQgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNzoyOS43MzAxNzIyNTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDA0NjEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4OGUwNGExNWJiNTVlMjNkNTUxMTg5MmQ3MzYwYjQ0NTAwODQ3NGJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMDk6Mzc6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXFxuaW5kZXggMDEzMjczYTJkZTMyZjIuLjIzYjkzOGFmZTE3YTllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xcbkBAIC0xNzkzLDggKzE3OTMsNiBAQCBzdGF0aWMgaW50IGZtYW5fY29uZmlnKHN0cnVjdCBmbWFuICpmbWFuKVxcbiBcXHRrZnJlZShmbWFuLVxcdTAwM2VjZmcpO1xcbiBlcnJfZm1fZHJ2OlxcbiBcXHRrZnJlZShmbWFuLVxcdTAwM2VzdGF0ZSk7XFxuLWVycl9mbV9zdGF0ZTpcXG4tXFx0a2ZyZWUoZm1hbik7XFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuIFxcbkBAIC0yNjk3LDcgKzI2OTUsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbiBcXHRzdHJ1Y3QgY2xrICpjbGs7XFxuIFxcdHUzMiBjbGtfcmF0ZTtcXG4gXFxuLVxcdGZtYW4gPSBremFsbG9jX29iaigqZm1hbik7XFxuK1xcdGZtYW4gPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBzaXplb2YoKmZtYW4pLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFmbWFuKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuQEAgLTI3MzYsMTEgKzI3MzQsMTMgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4gXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogRmFpbGVkIHRvIGRldGVybWluZSBGTSVkIGNsb2NrIHJhdGVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdF9fZnVuY19fLCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmlkKTtcXG4tXFx0XFx0Z290byBmbWFuX25vZGVfcHV0O1xcbitcXHRcXHRnb3RvIGNsa19wdXQ7XFxuIFxcdH1cXG4gXFx0LyogUm91bmRpbmcgdG8gTUh6ICovXFxuIFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuY2xrX2ZyZXEgPSBESVZfUk9VTkRfVVAoY2xrX3JhdGUsIDEwMDAwMDApO1xcbiBcXG4rXFx0Y2xrX3B1dChjbGspO1xcbitcXG4gXFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZm1fbm9kZSwgXFxcImZzbCxxbWFuLWNoYW5uZWwtcmFuZ2VcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJhbmdlWzBdLCAyKTtcXG4gXFx0aWYgKGVycikge1xcbkBAIC0yNzU3LDcgKzI3NTcsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbiBcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBjb3VsZCBub3QgZmluZCBNVVJBTSBub2RlXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRfX2Z1bmNfXyk7XFxuLVxcdFxcdGdvdG8gZm1hbl9mcmVlO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG11cmFtX25vZGUsIDAsXFxuQEAgLTI3NjYsNyArMjc2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXFxuIFxcdFxcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKCkgPSAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0X19mdW5jX18sIGVycik7XFxuLVxcdFxcdGdvdG8gZm1hbl9mcmVlO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiBcXHR9XFxuIFxcbiBcXHRvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTtcXG5AQCAtMjc3Niw3ICsyNzc2LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0X19mdW5jX18sIGlycSwgZXJyKTtcXG4tXFx0XFx0Z290byBmbWFuX2ZyZWU7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEgIT0gMCkge1xcbkBAIC0yNzg2LDcgKzI3ODYsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRfX2Z1bmNfXywgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLCBlcnIpO1xcbi1cXHRcXHRcXHRnb3RvIGZtYW5fZnJlZTtcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0yNzk0LDcgKzI3OTQsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbiBcXHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihiYXNlX2FkZHIpO1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBkZXZtX2lvcmVtYXAoKSBmYWlsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tXFx0XFx0Z290byBmbWFuX2ZyZWU7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcdH1cXG4gXFxuIFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuYmFzZV9hZGRyID0gYmFzZV9hZGRyO1xcbkBAIC0yODA2LDcgKzI4MDYsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IG9mX3BsYXRmb3JtX3BvcHVsYXRlKCkgZmFpbGVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRfX2Z1bmNfXyk7XFxuLVxcdFxcdGdvdG8gZm1hbl9mcmVlO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiBcXHR9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0RQQUFfRVJSQVRVTV9BMDUwMzg1XFxuQEAgLTI4MTgsOCArMjgxOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXFxuIFxcbiBmbWFuX25vZGVfcHV0OlxcbiBcXHRvZl9ub2RlX3B1dChmbV9ub2RlKTtcXG4tZm1hbl9mcmVlOlxcbi1cXHRrZnJlZShmbWFuKTtcXG4rY2xrX3B1dDpcXG4rXFx0Y2xrX3B1dChjbGspO1xcbiBcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNzozMC4yMjQ4OTc4NDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTc1NzEyMzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0ZSRUVTQ0FMRVwiLFxuICAgIFwiRlNMX0ZNQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWFkX2R0c19ub2RlXCIsXG4gICAgXCJmbWFuX2NvbmZpZ1wiLFxuICAgIFwiZm1hbl9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbmQgY2xvY2sgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGhzIG9mIHRoZSBGcmVlc2NhbGUgRk1hbiBkcml2ZXIuIFRoZXNlIHBhdGhzIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyIHZpYSBwbGF0Zm9ybSBkZXZpY2UgYW5kIGRldmljZSB0cmVlIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ODhlMDRhMTViYjU1ZTIzZDU1MTE4OTJkNzM2MGI0NDUwMDg0NzRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjIgMDk6Mzc6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcbmluZGV4IDAxMzI3M2EyZGUzMmYyLi4yM2I5MzhhZmUxN2E5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXG5AQCAtMTc5Myw4ICsxNzkzLDYgQEAgc3RhdGljIGludCBmbWFuX2NvbmZpZyhzdHJ1Y3QgZm1hbiAqZm1hbilcbiBcdGtmcmVlKGZtYW4tXHUwMDNlY2ZnKTtcbiBlcnJfZm1fZHJ2OlxuIFx0a2ZyZWUoZm1hbi1cdTAwM2VzdGF0ZSk7XG4tZXJyX2ZtX3N0YXRlOlxuLVx0a2ZyZWUoZm1hbik7XG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG5AQCAtMjY5Nyw3ICsyNjk1LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiBcdHN0cnVjdCBjbGsgKmNsaztcbiBcdHUzMiBjbGtfcmF0ZTtcbiBcbi1cdGZtYW4gPSBremFsbG9jX29iaigqZm1hbik7XG4rXHRmbWFuID0gZGV2bV9remFsbG9jKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIHNpemVvZigqZm1hbiksIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFmbWFuKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbkBAIC0yNzM2LDExICsyNzM0LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCIlczogRmFpbGVkIHRvIGRldGVybWluZSBGTSVkIGNsb2NrIHJhdGVcXG5cIixcbiBcdFx0XHRfX2Z1bmNfXywgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlkKTtcbi1cdFx0Z290byBmbWFuX25vZGVfcHV0O1xuK1x0XHRnb3RvIGNsa19wdXQ7XG4gXHR9XG4gXHQvKiBSb3VuZGluZyB0byBNSHogKi9cbiBcdGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5jbGtfZnJlcSA9IERJVl9ST1VORF9VUChjbGtfcmF0ZSwgMTAwMDAwMCk7XG4gXG4rXHRjbGtfcHV0KGNsayk7XG4rXG4gXHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShmbV9ub2RlLCBcImZzbCxxbWFuLWNoYW5uZWwtcmFuZ2VcIixcbiBcdFx0XHRcdFx0IFx1MDAyNnJhbmdlWzBdLCAyKTtcbiBcdGlmIChlcnIpIHtcbkBAIC0yNzU3LDcgKzI3NTcsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwiJXM6IGNvdWxkIG5vdCBmaW5kIE1VUkFNIG5vZGVcXG5cIixcbiBcdFx0XHRfX2Z1bmNfXyk7XG4tXHRcdGdvdG8gZm1hbl9mcmVlO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuIFxuIFx0ZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShtdXJhbV9ub2RlLCAwLFxuQEAgLTI3NjYsNyArMjc2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwiJXM6IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoKSA9ICVkXFxuXCIsXG4gXHRcdFx0X19mdW5jX18sIGVycik7XG4tXHRcdGdvdG8gZm1hbl9mcmVlO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuIFxuIFx0b2Zfbm9kZV9wdXQobXVyYW1fbm9kZSk7XG5AQCAtMjc3Niw3ICsyNzc2LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcIiVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCIsXG4gXHRcdFx0X19mdW5jX18sIGlycSwgZXJyKTtcbi1cdFx0Z290byBmbWFuX2ZyZWU7XG4rXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXHR9XG4gXG4gXHRpZiAoZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEgIT0gMCkge1xuQEAgLTI3ODYsNyArMjc4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwiJXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcXG5cIixcbiBcdFx0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSwgZXJyKTtcbi1cdFx0XHRnb3RvIGZtYW5fZnJlZTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMjc5NCw3ICsyNzk0LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiBcdGlmIChJU19FUlIoYmFzZV9hZGRyKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGJhc2VfYWRkcik7XG4gXHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCIlczogZGV2bV9pb3JlbWFwKCkgZmFpbGVkXFxuXCIsIF9fZnVuY19fKTtcbi1cdFx0Z290byBmbWFuX2ZyZWU7XG4rXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXHR9XG4gXG4gXHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuYmFzZV9hZGRyID0gYmFzZV9hZGRyO1xuQEAgLTI4MDYsNyArMjgwNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCIlczogb2ZfcGxhdGZvcm1fcG9wdWxhdGUoKSBmYWlsZWRcXG5cIixcbiBcdFx0XHRfX2Z1bmNfXyk7XG4tXHRcdGdvdG8gZm1hbl9mcmVlO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuIFxuICNpZmRlZiBDT05GSUdfRFBBQV9FUlJBVFVNX0EwNTAzODVcbkBAIC0yODE4LDggKzI4MTgsOCBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFxuIGZtYW5fbm9kZV9wdXQ6XG4gXHRvZl9ub2RlX3B1dChmbV9ub2RlKTtcbi1mbWFuX2ZyZWU6XG4tXHRrZnJlZShmbWFuKTtcbitjbGtfcHV0OlxuK1x0Y2xrX3B1dChjbGspO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNzozMC4yMjQ4OTk3MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTM4NTQxMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZyZWVzY2FsZSBGTUFOIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNgLiBJdCBzZWVtcyBsaWtlIHRoZXkncmUgbWFraW5nIHNvbWUga2V5IGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIHN3aXRjaGluZyBmcm9tIGBremFsbG9jX29iamAgdG8gYGRldm1fa3phbGxvY2AgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgYGZtYW5gIGRyaXZlciwgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIHByb3BlciBkZXZpY2UgbWFuYWdlZCBtZW1vcnkuIFRoZXkncmUgYWxzbyBlbGltaW5hdGluZyBleHBsaWNpdCBga2ZyZWUoZm1hbilgIGNhbGxzLCBzdWJzdGl0dXRpbmcgdGhlbSB3aXRoIGByZXR1cm4gRVJSX1BUUihlcnIpYCwgYW5kIGFkZGluZyBgY2xrX3B1dChjbGspYCBjYWxscy4gT24gdG9wIG9mIHRoaXMgdGhlcmUgc2VlbXMgdG8gYmUgc29tZSBlcnJvciBoYW5kbGluZyBtb2RpZmljYXRpb25zIHdpdGhpbiBgcmVhZF9kdHNfbm9kZWAuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIGFib3V0IHJlYWNoYWJpbGl0eSDigJMgY2FuIHdlIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBjb2RlPyBJdCdzIGEgRnJlZXNjYWxlIGRyaXZlciwgc28gaXQncyBwcm9iYWJseSB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlLCB0aGUgRnJlZXNjYWxlIEZyYW1lIE1hbmFnZXIuIEluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyBpcyBsaWtlbHkgYW4gaXNzdWUuIFVubGVzcyB0aGVyZSdzIGFuIGVtdWxhdG9yIHNwZWNpZmljYWxseSBmb3IgdGhhdCBoYXJkd2FyZSwgb3IgaXQncyBhIHBsYXRmb3JtIGRyaXZlciwgaXQncyBwcm9iYWJseSBub3QgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmdXp6aW5nIHRlY2huaXF1ZXMuIERldmljZSBUcmVlIG92ZXJsYXlzICptaWdodCogcHJvdmlkZSBhIHBhdGgsIGJ1dCB0aGF0J3Mgbm90IGFsd2F5cyBlYXN5LlxuXG5BaCwgYnV0IHdhaXQsIFN5emthbGxlci4gSXQgKmNhbiogZnV6eiBwbGF0Zm9ybSBkcml2ZXJzIGluIGNlcnRhaW4gc2l0dWF0aW9ucywgbGlrZSBpZiBpdCBjYW4gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIG9yIGlmIGl0J3MgYSBQQ0kgZHJpdmVyLiBUaGlzIG9uZSAqaXMqIGEgcGxhdGZvcm0gZHJpdmVyLiBTeXprYWxsZXIncyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gKGBzeXpfZGV2X2luaXRgIGV0Yy4pIG1pZ2h0IGJlIGFibGUgdG8gaGVscCwgYnV0IHRoYXQgc3VwcG9ydCBjYW4gYmUgYSBiaXQgbGltaXRlZC5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgZm9yIHRoaXMgZHJpdmVyLiBUaGUgRnJlZXNjYWxlIEZNYW4gaXMgdXN1YWxseSBwYXJ0IG9mIERQQUEgKERhdGEgUGF0aCBBY2NlbGVyYXRpb24gQXJjaGl0ZWN0dXJlKSwgd2hpY2ggcG9pbnRzIHRvIFBvd2VyUEMgYW5kIEFSTSBTb0NzIGxpa2UgUW9ySVEuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGRyaXZlciBpcyBkZXBsb3llZC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSBpZiB0aGUgZHJpdmVyIGlzIGJvdW5kIHRvIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGlmIGl0IGlzIGdlbmVyaWNhbGx5IHVzYWJsZS4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBnZXQgc29tZSBpbmZvcm1hdGlvbiBvdXQgb2YgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM3OjM3Ljc2MzQ0MjU2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1MjI5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTTF9GTUFOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc6Mjpjb25maWcgRlNMX0ZNQU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkZNYW4gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzc6MzcuODc3OTcwODkxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MzM2NDEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRlbHZlIGludG8gdGhpcy4gTGV0J3Mgc3RhcnQgYnJlYWtpbmcgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG9mIHRoaXMgbWF0dGVyLiBCZWZvcmUganVtcGluZyB0byBjb25jbHVzaW9ucyBvciBzb2x1dGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBkZXBlbmRlbmNpZXMgYXQgcGxheSBoZXJlLiBXaGF0IGFyZSB0aGUga2V5IGZhY3RvcnMsIHZhcmlhYmxlcywgb3IgY29uZGl0aW9ucyB0aGF0IHRoaXMgd2hvbGUgc2l0dWF0aW9uIGhpbmdlcyB1cG9uPyBXaGF0J3MgdGhlIGJlZHJvY2ssIGFuZCB3aGF0IGFyZSB0aGUgc2NhZmZvbGRpbmcgcGllY2VzPyBJIG5lZWQgdG8gbWFwIHRoZSBjYXVzYWwgcmVsYXRpb25zaGlwcy4gSXQncyB0aW1lIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgbGFuZHNjYXBlIGFuZCBleHBvc2UgaXRzIHVuZGVybHlpbmcgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNzo0MC43NzEzMzc0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODAwODExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZz0yPWNvbmZpZyBGU0xfRk1BTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiRk1hbiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIEZTTF9TT0MgfHwgQVJDSF9MQVlFUlNDQVBFIHx8IENPTVBJTEVfVEVTVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctNS1cXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc9MTQ9Y29uZmlnIERQQUFfRVJSQVRVTV9BMDUwMzg1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xNS1cXHRib29sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzoxNjpcXHRkZXBlbmRzIG9uIEFSTTY0IFxcdTAwMjZcXHUwMDI2IEZTTF9EUEFBXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xNy1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzc6NDAuODM5MzUwOTA4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyMzIzNDU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIGFuZCBQcm9iZSBQb3NzaWJpbGl0aWVzKipcblxuT2theSwgc28gdGhlIGNvbXBpbGF0aW9uIHBhdGggaGluZ2VzIG9uIGEgZmV3IGtleSBkZWZpbmVzOiBgRlNMX1NPQ2AsIGBBUkNIX0xBWUVSU0NBUEVgLCBvciBgQ09NUElMRV9URVNUYC4gQ2xlYXJseSwgaWYgYENPTVBJTEVfVEVTVGAgaXMgc2V0LCBpdCAqY2FuKiBiZSBjb21waWxlZC4gVGhlIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIHdlIGNhbiBwcm9iZSBpdC4gU2luY2UgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uIGRldGFpbHMuIEknbGwgbmVlZCB0byBsb29rIGF0IGBmbWFuLmNgIHRvIHNlZSBob3cgdGhlIGRyaXZlciBpcyByZWdpc3RlcmVkIGFuZCBpbml0aWFsaXplZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGNvbXBvbmVudCBjYW4gYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCB1bmRlciB0aGUgcmlnaHQgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3NiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM3OjQ0Ljk2MjU4NzgyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDg0MjI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yODkyPXN0YXRpYyBpbnQgX19pbml0IGZtYW5fbG9hZCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI4OTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI4OTg6XFx0ZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZmbWFuX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI4OTktXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI5MDA6XFx0XFx0cHJfZXJyKFxcXCJFcnJvciwgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCkgPSAlZFxcXFxuXFxcIiwgZXJyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjkwMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzc6NDUuMDQ3NDM3MjAzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzODAyNjA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogZm1hbl9kcml2ZXIgRXhhbWluYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGltbWVkaWF0ZSBwcm9tcHQg4oCTIFwiTGV0J3MgY2hlY2sgYGZtYW5fZHJpdmVyYFwiIOKAkyBzdWdnZXN0cyBhIGRpcmVjdCBhcHByb2FjaC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3MuIEkgYXNzdW1lIHdl4oCZcmUgbGlrZWx5IGludmVzdGlnYXRpbmcgYSBwcm9jZXNzLCBtb2R1bGUsIG9yIGNvbXBvbmVudCBuYW1lZCBgZm1hbl9kcml2ZXJgLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMuIElzIHRoaXMgcmVsYXRlZCB0byBmaWxlIG1hbmFnZW1lbnQsIGEgc3BlY2lmaWMgaGFyZHdhcmUgaW50ZXJmYWNlLCBvciBwZXJoYXBzIGEgY29yZSBzeXN0ZW0gcHJvY2Vzcz8gVGhlIGNvbnRleHQgaXMgdGhlIGtleSwgb2YgY291cnNlLCBidXQgdGhlIGNvbW1hbmQgaXRzZWxmIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGFzc2Vzc2VkIGhlcmUuIEnigJltIHByZXBhcmluZyBteXNlbGYgdG8gZGVsdmUgaW50byBsb2dzLCBjb2RlLCBvciBwZXJoYXBzIGV2ZW4gbGl2ZSBkZWJ1Z2dpbmcgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBtYXR0ZXIuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBhc3BlY3Qgb2YgYGZtYW5fZHJpdmVyYCB0aGF0IG5lZWRzIGF0dGVudGlvbiwgc28gdGhhdCBJIGNhbiBhcHBseSB0aGUgYXBwcm9wcmlhdGUgdG9vbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MjQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNzo0OC44ODU0NjUzMzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjE5NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZtYW5fZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9Mjg4Mj1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmbWFuX21hdGNoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjg4My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6Mjg4NDpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbWFuX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjg4NS1cXHQuZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jPTI4OTI9c3RhdGljIGludCBfX2luaXQgZm1hbl9sb2FkKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjg5Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6Mjg5ODpcXHRlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmZtYW5fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjg5OS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yOTA2PXN0YXRpYyB2b2lkIF9fZXhpdCBmbWFuX3VubG9hZCh2b2lkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTA3LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjkwODpcXHRwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2Zm1hbl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTA5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzc6NDguOTc2NjkwMjE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyODAyNjE2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUaGlzIFBsYXRmb3JtIERyaXZlcioqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCdzIHJlbHlpbmcgb24gRGV2aWNlIFRyZWUgKERUKSBmb3IgaXRzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJDYW4gU3l6a2FsbGVyIGZ1enogdGhpcyBlZmZlY3RpdmVseT9cIiBXZSBrbm93IFN5emthbGxlciAqY2FuKiBpbmplY3QgRFQgbm9kZXMgdXNpbmcgZnVuY3Rpb25zIGxpa2UgYHN5el9kZXZfaW5pdGAuIEhvd2V2ZXIsIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBoYXJkd2FyZSBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgdGhvc2UgYWNjZXNzaW5nIHNwZWNpZmljIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBtZW1vcnktbWFwcGVkIEkvTyAobGlrZSB0aGF0IGBmbWFuLVx1MDAzZWR0c19wYXJhbXMuYmFzZV9hZGRyID0gYmFzZV9hZGRyO2Agc3R1ZmYsIGRlcml2ZWQgZnJvbSBgb2ZfYWRkcmVzc190b19yZXNvdXJjZWAgYW5kIGBkZXZtX2lvcmVtYXBgKSwgYXJlIGdvaW5nIHRvIGJlIHByb2JsZW1hdGljLiBUaGV5J2xsIGxpa2VseSBmYWlsIHRvIHByb2JlLCBvciB3b3JzZSwgY3Jhc2gsIGlmIHRoZSByZXF1aXJlZCBtZW1vcnkgaXNuJ3QgYWN0dWFsbHkgcHJlc2VudCBvciBpZiBpdCBpc24ndCBhY2N1cmF0ZWx5IGVtdWxhdGVkLlxuXG5CdXQgd2FpdCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSAqc29tZSogc3VwcG9ydCBmb3IgcGxhdGZvcm0gZHJpdmVyIGZ1enppbmcgdmlhIERUIG5vZGUgaW5qZWN0aW9uLCB0aG91Z2ggaXQncyB1c3VhbGx5IHF1aXRlIGxpbWl0ZWQuIEkndmUgb2Z0ZW4gc2VlbiB0aGVzZSBhdHRlbXB0cyBmYWxsIGFwYXJ0IGF0IHRoZSBgZGV2bV9pb3JlbWFwYCBzdGFnZSBvciBvdGhlciBoYXJkd2FyZSBhY2Nlc3MgcG9pbnRzLiBXZSdyZSBnb2luZyB0byBoYXZlIHRvIGRvIGEgZGVlcCBkaXZlIHRvIHdvcmsgb3V0IGlmIHRoaXMgaXMgZnV6YWJsZSFcblxuQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcG90ZW50aWFsIHBpdGZhbGxzLiBMZXQncyBzdGFydCBieSBleGFtaW5pbmcgdGhlIGByZWFkX2R0c19ub2RlYCBmdW5jdGlvbiBpbiBgZm1hbi5jYCB0byBzZWUgaG93IHRoZSBEZXZpY2UgVHJlZSBpbmZvcm1hdGlvbiBpcyBwYXJzZWQgYW5kIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzc6NTYuMjU2OTUzNzU0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQ4MzE4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWFkX2R0c19ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9MjY4NT1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmbWFuX211cmFtX21hdGNoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjY4Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjY4NzpzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yNjg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yODI2PXN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjgzMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjgzNDpcXHRmbWFuID0gcmVhZF9kdHNfbm9kZShvZl9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yODM1LVxcdGlmIChJU19FUlIoZm1hbikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM3OjU2LjMzNDQ0MTg0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU5OTkzNjcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgcmVhZF9kdHNfbm9kZWAgYW5kIGBmbWFuX2NvbmZpZ2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRyaWdnZXJzIHNvbWUgcXVlc3Rpb25zIGFib3V0IHJlYWNoYWJpbGl0eS4gVGhlIGNvcmUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBhY2Nlc3NpYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIHN5emthbGxlciBjYW4gaW5qZWN0IGEgZGV2aWNlIHRyZWUgKERUKSBub2RlIGZvciB0aGlzIGRyaXZlciwgdGhlbiBgZm1hbl9wcm9iZWAgd2lsbCBiZSBjYWxsZWQsIGFuZCBjb25zZXF1ZW50bHkgYHJlYWRfZHRzX25vZGVgIGFzIHdlbGwuXG5cbmByZWFkX2R0c19ub2RlYCBkb2VzIGEgYnVuY2ggb2Ygc3RhbmRhcmQgRFQgcGFyc2luZzogYGRldm1fa3phbGxvY2AsIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMmAsIGBvZl9jbGtfZ2V0YCwgYGNsa19nZXRfcmF0ZWAsIGBvZl9hZGRyZXNzX3RvX3Jlc291cmNlYCwgYW5kIGBkZXZtX2lvcmVtYXBgLiBBIGZhaWx1cmUgaW4gYG9mX2FkZHJlc3NfdG9fcmVzb3VyY2VgIHdvdWxkIHJlc3VsdCBpbiBhbiBlcnJvciwgd2hpY2ggY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gZnV6ei4gSWYgaXQgKnN1Y2NlZWRzKiwgaXQnbGwgbWFwIHNvbWUgbWVtb3J5IHZpYSBgZGV2bV9pb3JlbWFwYC4gRm9sbG93aW5nIHRoYXQsIGBmbWFuX3Byb2JlYCBjYWxscyBgZm1hbl9jb25maWdgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgZnV6emFibGU/IFRoZSBwYXRjaCBzZWVtcyB0byBiZSBmaXhpbmcgYSBtZW1vcnkgbGVhayBvciBjaGFuZ2luZyBhbGxvY2F0aW9ucywgYW5kIGZpeGluZyBlcnJvciBwYXRocy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBidXQgaXQncyBpbiBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlci4gTm9ybWFsbHksIEknZCBkaXNjb3VudCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIHRoYXQgYXJlbid0IGVtdWxhdGVkIGJ5IFFFTVUvR0NFIGFzIHVucmVhY2hhYmxlLiBIb3dldmVyLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgdGhpcyBwc2V1ZG8tZGV2aWNlIGluamVjdGlvbiBtZWNoYW5pc20gZm9yIHBsYXRmb3JtIGRldmljZXMuXG5cbkhlcmUncyB0aGUgcnViOiB0aGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggY29uY2VybnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJcyBGcmVlc2NhbGUgRk1hbiBlbXVsYXRlZCBpbiBRRU1VPyBJIGtub3cgUUVNVSBzdXBwb3J0cyAqc29tZSogRnJlZXNjYWxlL05YUCBib2FyZHMgKGxpa2UgYG1wYzg1NDRkc2AsIGBlNTAwYCwgYHNhbTQ2MGV4YCwgZXRjLiksIGJ1dCBkb2VzIGl0IGVtdWxhdGUgdGhlIEZNYW4gKEZyYW1lIE1hbmFnZXIpP1xuXG5JIG5lZWQgdG8gY2hlY2sgUUVNVSdzIGNvZGUsIHByb2JhYmx5IGluIGBody9wcGMvZTUwMC5jYCBvciBgaHcvcHBjL2U1MDBwbGF0LmNgLCB0byBzZWUgaWYgRk1hbiBpcyBlbXVsYXRlZC4gVGhlIERQQUEvRk1hbiBpcyB0eXBpY2FsbHkgcXVpdGUgY29tcGxleCwgc28gZnVsbCBlbXVsYXRpb24gaXMgdW5saWtlbHksIGJ1dCB3b3J0aCBhIGRvdWJsZS1jaGVjay5cblxuRXZlbiBpZiBpdCBpc24ndCBmdWxseSBlbXVsYXRlZCwgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gKnJlYWNoKiB0aGUgcHJvYmUgZnVuY3Rpb24gdmlhIERUIGluamVjdGlvbi4gU28sIGlzIGl0IFwiaW1wb3NzaWJsZSB0byByZWFjaFwiPyBTeXprYWxsZXIgKmNhbiogaW5qZWN0IERUIG5vZGVzLiBJZiBpdCBpbmplY3RzIGEgRFQgbm9kZSwgYGZtYW5fcHJvYmVgICppcyogY2FsbGVkLiBUaGF0IG1lYW5zIGByZWFkX2R0c19ub2RlYCBnZXRzIGNhbGxlZCBhcyB3ZWxsLlxuXG5UaGUgZGVjaXNpdmUgZmFjdG9yIGlzIHRoZSBpbnN0cnVjdGlvbiBzYXlpbmcgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gU2luY2UgSSBrbm93IHN5emthbGxlciBjYW4gaW5qZWN0IERUIG5vZGVzIGFuZCB0aHVzIHJlYWNoIGByZWFkX2R0c19ub2RlYCwgbGV0IG1lIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgZGV0YWlscyBvZiB3aGF0IGByZWFkX2R0c19ub2RlYCBhY3R1YWxseSBkb2VzIGFuZCBpZiB0aGF0IGlzIHN1cHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5NiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozODowNi45MzQzODA4MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjg3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY4NzpcXHRzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbjI2ODg6XFx0e1xcbjI2ODk6XFx0XFx0c3RydWN0IGZtYW4gKmZtYW47XFxuMjY5MDpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmZtX25vZGUsICptdXJhbV9ub2RlO1xcbjI2OTE6XFx0XFx0dm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7XFxuMjY5MjpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcXG4yNjkzOlxcdFxcdHUzMiB2YWwsIHJhbmdlWzJdO1xcbjI2OTQ6XFx0XFx0aW50IGVyciwgaXJxO1xcbjI2OTU6XFx0XFx0c3RydWN0IGNsayAqY2xrO1xcbjI2OTY6XFx0XFx0dTMyIGNsa19yYXRlO1xcbjI2OTc6XFx0XFxuMjY5ODpcXHRcXHRmbWFuID0gZGV2bV9remFsbG9jKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpmbWFuKSwgR0ZQX0tFUk5FTCk7XFxuMjY5OTpcXHRcXHRpZiAoIWZtYW4pXFxuMjcwMDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4yNzAxOlxcdFxcbjI3MDI6XFx0XFx0Zm1fbm9kZSA9IG9mX25vZGVfZ2V0KG9mX2Rldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbjI3MDM6XFx0XFxuMjcwNDpcXHRcXHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihmbV9ub2RlLCBcXFwiY2VsbC1pbmRleFxcXCIsIFxcdTAwMjZ2YWwpO1xcbjI3MDU6XFx0XFx0aWYgKGVycikge1xcbjI3MDY6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogZmFpbGVkIHRvIHJlYWQgY2VsbC1pbmRleCBmb3IgJXBPRlxcXFxuXFxcIixcXG4yNzA3OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBmbV9ub2RlKTtcXG4yNzA4OlxcdFxcdFxcdGdvdG8gZm1hbl9ub2RlX3B1dDtcXG4yNzA5OlxcdFxcdH1cXG4yNzEwOlxcdFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuaWQgPSAodTgpdmFsO1xcbjI3MTE6XFx0XFxuMjcxMjpcXHRcXHQvKiBHZXQgdGhlIEZNIGludGVycnVwdCAqL1xcbjI3MTM6XFx0XFx0ZXJyID0gcGxhdGZvcm1fZ2V0X2lycShvZl9kZXYsIDApO1xcbjI3MTQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMjcxNTpcXHRcXHRcXHRnb3RvIGZtYW5fbm9kZV9wdXQ7XFxuMjcxNjpcXHRcXHRpcnEgPSBlcnI7XFxuMjcxNzpcXHRcXG4yNzE4OlxcdFxcdC8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovXFxuMjcxOTpcXHRcXHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMSk7XFxuMjcyMDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4yNzIxOlxcdFxcdFxcdGdvdG8gZm1hbl9ub2RlX3B1dDtcXG4yNzIyOlxcdFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9IGVycjtcXG4yNzIzOlxcdFxcbjI3MjQ6XFx0XFx0Y2xrID0gb2ZfY2xrX2dldChmbV9ub2RlLCAwKTtcXG4yNzI1OlxcdFxcdGlmIChJU19FUlIoY2xrKSkge1xcbjI3MjY6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihjbGspO1xcbjI3Mjc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogRmFpbGVkIHRvIGdldCBGTSVkIGNsb2NrIHN0cnVjdHVyZVxcXFxuXFxcIixcXG4yNzI4OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmlkKTtcXG4yNzI5OlxcdFxcdFxcdGdvdG8gZm1hbl9ub2RlX3B1dDtcXG4yNzMwOlxcdFxcdH1cXG4yNzMxOlxcdFxcbjI3MzI6XFx0XFx0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcXG4yNzMzOlxcdFxcdGlmICghY2xrX3JhdGUpIHtcXG4yNzM0OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMjczNTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEZNJWQgY2xvY2sgcmF0ZVxcXFxuXFxcIixcXG4yNzM2OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmlkKTtcXG4yNzM3OlxcdFxcdFxcdGdvdG8gY2xrX3B1dDtcXG4yNzM4OlxcdFxcdH1cXG4yNzM5OlxcdFxcdC8qIFJvdW5kaW5nIHRvIE1IeiAqL1xcbjI3NDA6XFx0XFx0Zm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5jbGtfZnJlcSA9IERJVl9ST1VORF9VUChjbGtfcmF0ZSwgMTAwMDAwMCk7XFxuMjc0MTpcXHRcXG4yNzQyOlxcdFxcdGNsa19wdXQoY2xrKTtcXG4yNzQzOlxcdFxcbjI3NDQ6XFx0XFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZm1fbm9kZSwgXFxcImZzbCxxbWFuLWNoYW5uZWwtcmFuZ2VcXFwiLFxcbjI3NDU6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZyYW5nZVswXSwgMik7XFxuMjc0NjpcXHRcXHRpZiAoZXJyKSB7XFxuMjc0NzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBmYWlsZWQgdG8gcmVhZCBmc2wscW1hbi1jaGFubmVsLXJhbmdlIGZvciAlcE9GXFxcXG5cXFwiLFxcbjI3NDg6XFx0XFx0XFx0XFx0X19mdW5jX18sIGZtX25vZGUpO1xcbjI3NDk6XFx0XFx0XFx0Z290byBmbWFuX25vZGVfcHV0O1xcbjI3NTA6XFx0XFx0fVxcbjI3NTE6XFx0XFx0Zm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5xbWFuX2NoYW5uZWxfYmFzZSA9IHJhbmdlWzBdO1xcbjI3NTI6XFx0XFx0Zm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5udW1fb2ZfcW1hbl9jaGFubmVscyA9IHJhbmdlWzFdO1xcbjI3NTM6XFx0XFxuMjc1NDpcXHRcXHQvKiBHZXQgdGhlIE1VUkFNIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSAqL1xcbjI3NTU6XFx0XFx0bXVyYW1fbm9kZSA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShmbV9ub2RlLCBmbWFuX211cmFtX21hdGNoKTtcXG4yNzU2OlxcdFxcdGlmICghbXVyYW1fbm9kZSkge1xcbjI3NTc6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4yNzU4OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IGNvdWxkIG5vdCBmaW5kIE1VUkFNIG5vZGVcXFxcblxcXCIsXFxuMjc1OTpcXHRcXHRcXHRcXHRfX2Z1bmNfXyk7XFxuMjc2MDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjI3NjE6XFx0XFx0fVxcbjI3NjI6XFx0XFxuMjc2MzpcXHRcXHRlcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG11cmFtX25vZGUsIDAsXFxuMjc2NDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLm11cmFtX3Jlcyk7XFxuMjc2NTpcXHRcXHRpZiAoZXJyKSB7XFxuMjc2NjpcXHRcXHRcXHRvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTtcXG4yNzY3OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoKSA9ICVkXFxcXG5cXFwiLFxcbjI3Njg6XFx0XFx0XFx0XFx0X19mdW5jX18sIGVycik7XFxuMjc2OTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjI3NzA6XFx0XFx0fVxcbjI3NzE6XFx0XFxuMjc3MjpcXHRcXHRvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTtcXG4yNzczOlxcdFxcbjI3NzQ6XFx0XFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIGlycSwgZm1hbl9pcnEsIElSUUZfU0hBUkVELFxcbjI3NzU6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJmbWFuXFxcIiwgZm1hbik7XFxuMjc3NjpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjI3Nzc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxcXFxuXFxcIixcXG4yNzc4OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBpcnEsIGVycik7XFxuMjc3OTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjI3ODA6XFx0XFx0fVxcbjI3ODE6XFx0XFxuMjc4MjpcXHRcXHRpZiAoZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxICE9IDApIHtcXG4yNzgzOlxcdFxcdFxcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXFxuMjc4NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgZm1hbl9lcnJfaXJxLCBJUlFGX1NIQVJFRCxcXG4yNzg1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiZm1hbi1lcnJcXFwiLCBmbWFuKTtcXG4yNzg2OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjA2LjkzNDU0MDQyOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDg5MDMwNzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRFQgUHJvcGVydGllcyBSZXF1aXJlZCBmb3IgU3VjY2Vzc2Z1bCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgd2hhdCdzIG5lZWRlZCB0byBnZXQgdGhpcyB0aGluZyBydW5uaW5nLCBhbmQgaXQncyBxdWl0ZSBhIGxpc3Qgb2YgRGV2aWNlIFRyZWUgcHJvcGVydGllcyB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSByZXF1aXJlbWVudHMgZm9yIGBjZWxsLWluZGV4YCwgdHdvIGludGVycnVwdHMgKHdoaWNoIGlzIGludGVyZXN0aW5nLCBJJ2xsIG5lZWQgdG8gbG9vayBhdCBob3cgdGhvc2UgYXJlIHVzZWQpLCBhIGNsb2NrIHNvdXJjZSwgYW5kIHRoZW4gYSBzcGVjaWZpYyBjaGFubmVsIHJhbmdlIGRlZmluZWQgYnkgYGZzbCxxbWFuLWNoYW5uZWwtcmFuZ2VgLiBCZXlvbmQgdGhhdCwgdGhlcmUncyBhIG5lZWQgZm9yIGEgY2hpbGQgbm9kZSB0aGF0J3MgZ29pbmcgdG8gbWF0Y2ggYWdhaW5zdCBzb21ldGhpbmcgY2FsbGVkIGBmbWFuX211cmFtX21hdGNoYC4gV2UnbGwgYWxzbyBuZWVkIHRvIHVzZSBgb2ZfYWRkcmVzc190b19yZXNvdXJjZWAgb24gdGhhdCBjaGlsZCBub2RlIGFuZCB0aGVuIGNhbGwgYGRldm1fcmVxdWVzdF9pcnFgIGFuZCBgZGV2bV9pb3JlbWFwYC4gUXVpdGUgYSBjb25maWd1cmF0aW9uLCByaWdodD9cblxuVGhlIGdvb2QgbmV3cyBpcywgdGhhdCBzeXprYWxsZXIncyBgc3l6X2Rldl9pbml0YCBmdW5jdGlvbiBsb29rcyBsaWtlIGl0IGNhbiBpbmplY3QgYXJiaXRyYXJ5IERldmljZSBUcmVlIG5vZGVzLiBUaGF0IG1lYW5zIGl0IGNhbiBwcm92aWRlIGFsbCB0aGVzZSBwcm9wZXJ0aWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBzaG91bGQgZm9jdXMgb24gdGhlIGBkZXZtX3JlcXVlc3RfaXJxYCBjYWxsIGJlY2F1c2UgaXQgY291bGQgZmFpbCBpZiB0aGUgaW50ZXJydXB0IHJlcXVlc3QgaXMgaW52YWxpZC4gTHVja2lseSwgU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSB2YWxpZCBkdW1teSBJUlFzIHNvIHRoYXQgc2hvdWxkIGJlIGxlc3Mgb2YgYSBoZWFkYWNoZS4gVGhlIGBkZXZtX2lvcmVtYXBgIHdpbGwgdGFrZSBjYXJlIG9mIG1hcHBpbmcgdGhlIG1lbW9yeS5cblxuQWxyaWdodCwgc28gb25jZSBhbGwgdGhvc2UgRFQgcHJvcGVydGllcyBhcmUgc2V0IGFuZCBtYXBwZWQsIHdlJ3JlIGFzc3VtaW5nIGBmbWFuX2NvbmZpZ2AgaXMgdGhlIGtleSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG5leHQuIEkgcmVhbGx5IHNob3VsZCBkaXZlIGluIGFuZCBzZWUgaG93IHRoYXQgaXMgaW1wbGVtZW50ZWQuIEknbGwgbmVlZCB0byB0cmFjZSBpbnRvIGBmbWFuX2NvbmZpZ2AuIExldCdzIHNlZSB3aGF0IHRoYXQgbG9va3MgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM3NywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjEyLjQyMzU3MzIyMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NjA6XFx0XFx0XFx0XFx0XFx0ICAgIGZtYW4tXFx1MDAzZXN0YXRlLVxcdTAwM2VibWlfbWF4X251bV9vZl90YXNrcyk7XFxuMTc2MTpcXHRcXG4xNzYyOlxcdFxcdGlmIChmbWFuLVxcdTAwM2VzdGF0ZS1cXHUwMDNlcmV2X2luZm8ubWFqb3IgXFx1MDAzYyA2KSB7XFxuMTc2MzpcXHRcXHRcXHRmbWFuLVxcdTAwM2VjZmctXFx1MDAzZWRtYV9jb21tX3F0c2hfY2xyX2VtZXIgPVxcbjE3NjQ6XFx0XFx0XFx0KHU4KURGTFRfRE1BX0NPTU1fUV9MT1coZm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZXJldl9pbmZvLm1ham9yLFxcbjE3NjU6XFx0XFx0XFx0XFx0XFx0XFx0Zm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZWRtYV90aHJlc2hfbWF4X2NvbW1xKTtcXG4xNzY2OlxcdFxcbjE3Njc6XFx0XFx0XFx0Zm1hbi1cXHUwMDNlY2ZnLVxcdTAwM2VkbWFfY29tbV9xdHNoX2FzcnRfZW1lciA9XFxuMTc2ODpcXHRcXHRcXHQodTgpREZMVF9ETUFfQ09NTV9RX0hJR0goZm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZXJldl9pbmZvLm1ham9yLFxcbjE3Njk6XFx0XFx0XFx0XFx0XFx0XFx0IGZtYW4tXFx1MDAzZXN0YXRlLVxcdTAwM2VkbWFfdGhyZXNoX21heF9jb21tcSk7XFxuMTc3MDpcXHRcXG4xNzcxOlxcdFxcdFxcdGZtYW4tXFx1MDAzZWNmZy1cXHUwMDNlZG1hX2NhbV9udW1fb2ZfZW50cmllcyA9XFxuMTc3MjpcXHRcXHRcXHRERkxUX0RNQV9DQU1fTlVNX09GX0VOVFJJRVMoZm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZXJldl9pbmZvLm1ham9yKTtcXG4xNzczOlxcdFxcbjE3NzQ6XFx0XFx0XFx0Zm1hbi1cXHUwMDNlY2ZnLVxcdTAwM2VkbWFfcmVhZF9idWZfdHNoX2Nscl9lbWVyID1cXG4xNzc1OlxcdFxcdFxcdERGTFRfRE1BX1JFQURfSU5UX0JVRl9MT1coZm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZWRtYV90aHJlc2hfbWF4X2J1Zik7XFxuMTc3NjpcXHRcXG4xNzc3OlxcdFxcdFxcdGZtYW4tXFx1MDAzZWNmZy1cXHUwMDNlZG1hX3JlYWRfYnVmX3RzaF9hc3J0X2VtZXIgPVxcbjE3Nzg6XFx0XFx0XFx0REZMVF9ETUFfUkVBRF9JTlRfQlVGX0hJR0goZm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZWRtYV90aHJlc2hfbWF4X2J1Zik7XFxuMTc3OTpcXHRcXG4xNzgwOlxcdFxcdFxcdGZtYW4tXFx1MDAzZWNmZy1cXHUwMDNlZG1hX3dyaXRlX2J1Zl90c2hfY2xyX2VtZXIgPVxcbjE3ODE6XFx0XFx0XFx0REZMVF9ETUFfV1JJVEVfSU5UX0JVRl9MT1coZm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZWRtYV90aHJlc2hfbWF4X2J1Zik7XFxuMTc4MjpcXHRcXG4xNzgzOlxcdFxcdFxcdGZtYW4tXFx1MDAzZWNmZy1cXHUwMDNlZG1hX3dyaXRlX2J1Zl90c2hfYXNydF9lbWVyID1cXG4xNzg0OlxcdFxcdFxcdERGTFRfRE1BX1dSSVRFX0lOVF9CVUZfSElHSChmbWFuLVxcdTAwM2VzdGF0ZS1cXHUwMDNlZG1hX3RocmVzaF9tYXhfYnVmKTtcXG4xNzg1OlxcdFxcbjE3ODY6XFx0XFx0XFx0Zm1hbi1cXHUwMDNlY2ZnLVxcdTAwM2VkbWFfYXhpX2RiZ19udW1fb2ZfYmVhdHMgPVxcbjE3ODc6XFx0XFx0XFx0REZMVF9BWElfREJHX05VTV9PRl9CRUFUUztcXG4xNzg4OlxcdFxcdH1cXG4xNzg5OlxcdFxcbjE3OTA6XFx0XFx0cmV0dXJuIDA7XFxuMTc5MTpcXHRcXG4xNzkyOlxcdGVycl9mbV9zb2Nfc3BlY2lmaWM6XFxuMTc5MzpcXHRcXHRrZnJlZShmbWFuLVxcdTAwM2VjZmcpO1xcbjE3OTQ6XFx0ZXJyX2ZtX2RydjpcXG4xNzk1OlxcdFxcdGtmcmVlKGZtYW4tXFx1MDAzZXN0YXRlKTtcXG4xNzk2OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3OTc6XFx0fVxcbjE3OTg6XFx0XFxuMTc5OTpcXHRzdGF0aWMgaW50IGZtYW5fcmVzZXQoc3RydWN0IGZtYW4gKmZtYW4pXFxuMTgwMDpcXHR7XFxuMTgwMTpcXHRcXHR1MzIgY291bnQ7XFxuMTgwMjpcXHRcXHRpbnQgZXJyID0gMDtcXG4xODAzOlxcdFxcbjE4MDQ6XFx0XFx0aWYgKGZtYW4tXFx1MDAzZXN0YXRlLVxcdTAwM2VyZXZfaW5mby5tYWpvciBcXHUwMDNjIDYpIHtcXG4xODA1OlxcdFxcdFxcdGlvd3JpdGUzMmJlKEZQTV9SU1RDX0ZNX1JFU0VULCBcXHUwMDI2Zm1hbi1cXHUwMDNlZnBtX3JlZ3MtXFx1MDAzZWZtX3JzdGMpO1xcbjE4MDY6XFx0XFx0XFx0LyogV2FpdCBmb3IgcmVzZXQgY29tcGxldGlvbiAqL1xcbjE4MDc6XFx0XFx0XFx0Y291bnQgPSAxMDA7XFxuMTgwODpcXHRcXHRcXHRkbyB7XFxuMTgwOTpcXHRcXHRcXHRcXHR1ZGVsYXkoMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjEyLjQyMzc1MDQ1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ4MzU2MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlYmFzZSBhbmQgSSBzZWUgYGZtYW5fY29uZmlnYCBnZXR0aW5nIGludm9rZWQgZnJvbSBgZm1hbl9wcm9iZWAuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgc2VlbXMgbGlrZSB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yLCBvciBhdCBsZWFzdCBpbnZvbHZlZCBpbiwgcHVsbGluZyBpbiBjb25maWd1cmF0aW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSB0aGUgc291cmNlIG9mIHdoYXRldmVyIGlzc3VlIEknbSBjaGFzaW5nLCBzbyBsZXQncyBqdW1wIHJpZ2h0IGludG8gYGZtYW5fcHJvYmVgIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMuIElzIGl0IGxvYWRpbmcgdGhlIGNvbmZpZz8gTWVyZ2luZyBpdD8gVmFsaWRhdGluZyBpdD8gQW5kLCBpbXBvcnRhbnRseSwgKmhvdyogaXMgdGhpcyBjb25maWd1cmF0aW9uIGludGVyYWN0aW5nIHdpdGggdGhlIHByb2JlPyBMZXQncyB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NjQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjE1LjY3MjEwODY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgyNixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgyNjpcXHRzdGF0aWMgaW50IGZtYW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbjI4Mjc6XFx0e1xcbjI4Mjg6XFx0XFx0c3RydWN0IGZtYW4gKmZtYW47XFxuMjgyOTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuMjgzMDpcXHRcXHRpbnQgZXJyO1xcbjI4MzE6XFx0XFxuMjgzMjpcXHRcXHRkZXYgPSBcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXY7XFxuMjgzMzpcXHRcXG4yODM0OlxcdFxcdGZtYW4gPSByZWFkX2R0c19ub2RlKG9mX2Rldik7XFxuMjgzNTpcXHRcXHRpZiAoSVNfRVJSKGZtYW4pKVxcbjI4MzY6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZm1hbik7XFxuMjgzNzpcXHRcXG4yODM4OlxcdFxcdGVyciA9IGZtYW5fY29uZmlnKGZtYW4pO1xcbjI4Mzk6XFx0XFx0aWYgKGVycikge1xcbjI4NDA6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCIlczogRk1hbiBjb25maWcgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMjg0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODQyOlxcdFxcdH1cXG4yODQzOlxcdFxcbjI4NDQ6XFx0XFx0aWYgKGZtYW5faW5pdChmbWFuKSAhPSAwKSB7XFxuMjg0NTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIiVzOiBGTWFuIGluaXQgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMjg0NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODQ3OlxcdFxcdH1cXG4yODQ4OlxcdFxcbjI4NDk6XFx0XFx0aWYgKGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9PSAwKSB7XFxuMjg1MDpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9ETUFfQlVTX0VSUk9SLCBmYWxzZSk7XFxuMjg1MTpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9ETUFfUkVBRF9FQ0MsIGZhbHNlKTtcXG4yODUyOlxcdFxcdFxcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0RNQV9TWVNURU1fV1JJVEVfRUNDLCBmYWxzZSk7XFxuMjg1MzpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9ETUFfRk1fV1JJVEVfRUNDLCBmYWxzZSk7XFxuMjg1NDpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9ETUFfU0lOR0xFX1BPUlRfRUNDLCBmYWxzZSk7XFxuMjg1NTpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9GUE1fU1RBTExfT05fVEFTS1MsIGZhbHNlKTtcXG4yODU2OlxcdFxcdFxcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0ZQTV9TSU5HTEVfRUNDLCBmYWxzZSk7XFxuMjg1NzpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9GUE1fRE9VQkxFX0VDQywgZmFsc2UpO1xcbjI4NTg6XFx0XFx0XFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfUU1JX1NJTkdMRV9FQ0MsIGZhbHNlKTtcXG4yODU5OlxcdFxcdFxcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX1FNSV9ET1VCTEVfRUNDLCBmYWxzZSk7XFxuMjg2MDpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbixcXG4yODYxOlxcdFxcdFxcdFxcdFxcdCAgIEZNQU5fRVhfUU1JX0RFUV9GUk9NX1VOS05PV05fUE9SVElELCBmYWxzZSk7XFxuMjg2MjpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9CTUlfTElTVF9SQU1fRUNDLCBmYWxzZSk7XFxuMjg2MzpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9CTUlfU1RPUkFHRV9QUk9GSUxFX0VDQyxcXG4yODY0OlxcdFxcdFxcdFxcdFxcdCAgIGZhbHNlKTtcXG4yODY1OlxcdFxcdFxcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0JNSV9TVEFUSVNUSUNTX1JBTV9FQ0MsIGZhbHNlKTtcXG4yODY2OlxcdFxcdFxcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0JNSV9ESVNQQVRDSF9SQU1fRUNDLCBmYWxzZSk7XFxuMjg2NzpcXHRcXHR9XFxuMjg2ODpcXHRcXG4yODY5OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIGZtYW4pO1xcbjI4NzA6XFx0XFxuMjg3MTpcXHRcXHRkZXZfZGJnKGRldiwgXFxcIkZNYW4lZCBwcm9iZWRcXFxcblxcXCIsIGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuaWQpO1xcbjI4NzI6XFx0XFxuMjg3MzpcXHRcXHRyZXR1cm4gMDtcXG4yODc0OlxcdH1cXG4yODc1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozODoxNS42NzIyODQxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk4NDczMzIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYHJlYWRfZHRzX25vZGVgIGFuZCBgZm1hbl9jb25maWdgIOKAkyBteSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFsdGVyaW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgY2xlYXIgaW5kaWNhdG9yIG9mIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGludGVyZXN0aW5nIHRvIGV4cGxvcmUuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGU/XG5cblllcywgYWJzb2x1dGVseS4gU3l6a2FsbGVyIGNhbiBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBub2Rlcy4gU3BlY2lmaWNhbGx5LCBpZiBzeXprYWxsZXIgaW5qZWN0cyBhIGRldmljZSB0cmVlIG5vZGUgbWF0Y2hpbmcgXCJmc2wsZm1hblwiLCB0aGF0J2xsIHRyaWdnZXIgYGZtYW5fcHJvYmVgLiBBbmQgYGZtYW5fcHJvYmVgIGxlYWRzIGRpcmVjdGx5IHRvIHRoZSBleGVjdXRpb24gb2YgYHJlYWRfZHRzX25vZGVgLiBUaGF0J3MgdGhlIGdhdGV3YXkhIEl0J2xsIGF0dGVtcHQgdG8gcmVhZCBwcm9wZXJ0aWVzLCBhbmQgKmlmKiBpdCBmYWlscywgd2UgaGl0IHRoZSBlcnJvciBwYXRocyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMuXG5cbk5vdywgYHJlYWRfZHRzX25vZGVgIGl0c2VsZiBjYWxscyBvdGhlciBmdW5jdGlvbnMsIHN1Y2ggYXMgYG9mX2Nsa19nZXRgLCBgY2xrX2dldF9yYXRlYCwgYG9mX2FkZHJlc3NfdG9fcmVzb3VyY2VgLCBhbmQgYGRldm1faW9yZW1hcGAuIFNvIGlmIHN5emthbGxlciBpbmplY3RzIGEgRFQgbm9kZSwgd2UgY2FuIHByb3ZpZGUgZHVtbXkgY2xvY2sgYW5kIG1lbW9yeSByZXNvdXJjZXMuIEhvd2V2ZXIsIGBmbWFuX2NvbmZpZ2AgYW5kIGBmbWFuX2luaXRgIHdpbGwgZXZlbnR1YWxseSB0cnkgdG8gYWNjZXNzIHRoZSBtZW1vcnkgYGRldm1faW9yZW1hcGAgaXMgaGFuZGxpbmcuIElmIGl0J3MganVzdCBkdW1teSBSQU0sIHdlIHdvbid0IGNyYXNoLCBidXQgdGhlcmUncyBhIGdvb2QgY2hhbmNlIG9mIGl0IHJlYWRpbmcgZ2FyYmFnZSB3aGljaCBjb3VsZCBsZWFkIHRvIGludGVyZXN0aW5nIGJlaGF2aW91ci4gQW5kIHdoYXQgaGFwcGVucyB3aGVuIGBkZXZtX2lvcmVtYXBgIGlzIHVzZWQgd2l0aCBkdW1teSBtZW1vcnk/IFN5emthbGxlciBjYW4gbWFwIGFyYml0cmFyeSBwaHlzaWNhbCBhZGRyZXNzZXMhIElmIGl0IG1hcHMgUkFNLCBpdCB3aWxsIHJlYWQvd3JpdGUgUkFNLiBJZiBpdCBtYXBzIHVubWFwcGVkIHBoeXNpY2FsIGFkZHJlc3NlcywgdGhlcmUgY291bGQgYmUgYSBidXMgZXJyb3Igb3IgTUNFLiBTeXprYWxsZXIgcnVucyBvbiB4ODZfNjQsIGFybTY0LCBhbmQgcmlzY3Y2NC5cblxuVGhpcyBkcml2ZXIncyBkZXBlbmRlbmNpZXMsIGBGU0xfU09DIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fCBDT01QSUxFX1RFU1RgLCBtYWtlcyBpdCBjb21waWxhYmxlIG9uIHg4Nl82NCB3aXRoIGBDT01QSUxFX1RFU1RgLiBUaGlzIG1lYW5zIHRoYXQgaWYgY29tcGlsZWQgd2l0aCBgQ09NUElMRV9URVNUYCwgaXQgY2FuIGJlIHJlYWNoZWQgdmlhIHN5emthbGxlci4gVGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUgaXMgYENPTkZJR19GU0xfRk1BTmAuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgYmVjb21lczogaXMgdGhpcyBkcml2ZXIgXCJpbXBvc3NpYmxlIHRvIHJlYWNoXCIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRhbmNlPyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHVucmVhY2hhYmxlIGluIEdDRSBvciBRRU1VLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuXG5cbkJ1dCB3YWl0LCB0aGlzIGRyaXZlciAqaXMqIHJlYWNoYWJsZSB2aWEgcGxhdGZvcm0gZGV2aWNlIGluamVjdGlvbiB1c2luZyBgc3l6X2Rldl9pbml0YC4gTm93LCB0aGlzIGRyaXZlciBpcyBoYXJkd2FyZS1zcGVjaWZpYy4gV2UgdXN1YWxseSBkb24ndCBmdXp6IHJhbmRvbSBoYXJkd2FyZSBkcml2ZXJzIHVubGVzcyB0aGV5IGFyZSBlbXVsYXRlZCBvciBhcmUgc3BlY2lmaWNhbGx5IHRhcmdldGVkLlxuXG5MZXQncyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgcGF0Y2guIEl0IGNoYW5nZXMgYGt6YWxsb2Nfb2JqYCB0byBgZGV2bV9remFsbG9jYC4gSXQgYWRkcyBgY2xrX3B1dChjbGspYC4gSXQgcmVtb3ZlcyBga2ZyZWUoZm1hbilgIGluIGVycm9yIHBhdGhzLiBPa2F5LCB0aGF0IHNjcmVhbXMgcHJvYmUgZXJyb3IgcGF0aCBjbGVhbnVwIHRvIG1lLiBJdCdzIGFib3V0IHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzLiBJdCBjb3VsZCBiZSBmaXhpbmcgYSBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCBvciBqdXN0IGltcHJvdmluZyB0aGUgY29kZSB3aXRoIGBkZXZtX2t6YWxsb2NgLlxuXG5Db25zaWRlcmluZyBhbGwgdGhpcywgaXMgaXQgd29ydGggZnV6emluZz8gWWVzLCBJIHRoaW5rIHNvLiBJZiB3ZSBzYXkgXCJ5ZXMsXCIgd2UgbmVlZCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBGb3IgYEZvY3VzU3ltYm9sc2AsIHdlJ2xsIGluY2x1ZGUgYHJlYWRfZHRzX25vZGVgIGFuZCBgZm1hbl9jb25maWdgLiBGb3IgYEVuYWJsZUNvbmZpZ3NgLCB3ZSdsbCBzZXQgYEZTTF9GTUFOYC4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IGBGU0xfRk1BTmAgaXMgZW5vdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA1OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjI5LjY1NzAyMDAxMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3OTE3MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGU0xfRk1BTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnOjI6Y29uZmlnIEZTTF9GTUFOXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGTWFuIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjI5LjkzNDk0MTYyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mjg5OTIwNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIEZTTF9GTUFOKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGBGU0xfRk1BTmAgaGFzIHNvbWUgaW50ZXJlc3RpbmcgZGVwZW5kZW5jaWVzLiBJdCdzIG5vdCBqdXN0IGEgc3RyYWlnaHRmb3J3YXJkIGVuYWJsZS9kaXNhYmxlLiBJdCBzZWVtcyBpdCByZWxpZXMgb24gYEZTTF9TT0NgLCBgQVJDSF9MQVlFUlNDQVBFYCwgKipvcioqIHRoZSBgQ09NUElMRV9URVNUYCBvcHRpb24uIFRoYXQncyBnb29kIHRvIGtub3cuIFRoaXMgbWVhbnMgSSBjYW4gcG90ZW50aWFsbHkgZW5hYmxlIGBGU0xfRk1BTmAgZXZlbiBpZiB0aGUgcHJpbWFyeSBhcmNoaXRlY3R1cmFsIHJlcXVpcmVtZW50cyBhcmVuJ3QgbWV0LCBzcGVjaWZpY2FsbHkgaWYgYENPTVBJTEVfVEVTVGAgaXMgYWN0aXZlLCB3aGljaCBpcyBvZnRlbiB1c2VkIGZvciB0ZXN0aW5nIGNvbmZpZ3VyYXRpb25zLiBcblxuTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGlzOiB0aGlzIGlzbid0IG5lY2Vzc2FyaWx5IHRoZSBvbmx5IGNvbmRpdGlvbiBhZmZlY3RpbmcgaXRzIGJlaGF2aW9yLiBKdXN0IGJlY2F1c2UgaXQgKmNhbiogYmUgZW5hYmxlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgZG9lc24ndCBtZWFuIHRob3NlIGFyZSAqYWxsKiB0aGUgY29uZGl0aW9ucy4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGRlcGVuZGVuY2llcywgcGVyaGFwcyBpbmRpcmVjdCBvbmVzLCBvciBjb25zdHJhaW50cyBvbiBvdGhlciB2YXJpYWJsZXMgdGhhdCBhZmZlY3QgaXRzIGZ1bGwgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgYmVmb3JlIEkgbWFrZSBhbnkgZGVjaXNpb25zIGFib3V0IGhvdyBpdCdzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzg6MzcuMjI0ODY0ODgzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzMxMzg1MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc9Mj1jb25maWcgRlNMX0ZNQU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkZNYW4gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBGU0xfU09DIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTUtXFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnPTE0PWNvbmZpZyBEUEFBX0VSUkFUVU1fQTA1MDM4NVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMTUtXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc6MTY6XFx0ZGVwZW5kcyBvbiBBUk02NCBcXHUwMDI2XFx1MDAyNiBGU0xfRFBBQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMTctXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjM3LjU1ODAwODc4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTI2MDM1NTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBGU0xfRk1BTiBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBGU0xfRk1BTmAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGNvbnNpZGVyIGhlcmUuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBwYXRjaCBhY3R1YWxseSB3b3J0aCBmdXp6aW5nPyBJdCBzZWVtcyBsaWtlIGl0IHByaW1hcmlseSBhZGRyZXNzZXMgcHJvYmUgZXJyb3IgcGF0aHMuIEhvd2V2ZXIsIFN5emthbGxlciBvZnRlbiB0YXJnZXRzIHRoZXNlIGFyZWFzIGVmZmVjdGl2ZWx5IHRocm91Z2ggZmF1bHQgaW5qZWN0aW9uIG9yIGJ5IGZlZWRpbmcgaW52YWxpZCBEZXZpY2UgVHJlZSAoRFQpIHByb3BlcnRpZXMuIElmIFN5emthbGxlciBjYW4gbWFuaXB1bGF0ZSB0aGUgRFQgbm9kZSwgdGhhdCdzIGEgZ29vZCBzaWduIHRoZXNlIGVycm9yIHBhdGhzIHdpbGwgYmUgaGl0LlxuXG5MZXQgbWUgY29uZmlybSB0aGF0IGBmbWFuX3Byb2JlYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgYW5kIHllcywgaXQncyBhIHN0YW5kYXJkIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmdW5jdGlvbi4gQWxyaWdodCwgSSdtIGdvaW5nIHRvIGxlYW4gdG93YXJkcyBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk15IGZvY3VzIHN5bWJvbHMgd2lsbCBiZTogYHJlYWRfZHRzX25vZGVgLCBgZm1hbl9jb25maWdgLCBhbmQgdGhlIG9idmlvdXMgYGZtYW5fcHJvYmVgLiBGb3IgY29uZmlndXJhdGlvbiwgYEZTTF9GTUFOYCBpcyB0aGUga2V5LlxuXG5Ib2xkIG9uLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYHJlYWRfZHRzX25vZGVgIGlzIHN0YXRpYy4gWWVzLCBpdCBpczogYHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpYC4gQW5kIGBmbWFuX2NvbmZpZ2AgaXMgYWxzbyBzdGF0aWMsIHNvIEknbSBjb25maWRlbnQgYWJvdXQgaW5jbHVkaW5nIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYCBhcyBmb2N1cyBzeW1ib2xzLlxuXG5Ob3csIGxldCdzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIEl0IHNlZW1zIHRoZSBtYWluIGNoYW5nZXMgaW52b2x2ZSBtZW1vcnkgYW5kIGNsb2NrIG1hbmFnZW1lbnQgaW4gZXJyb3IgcGF0aHMuIFNwZWNpZmljYWxseSwgdGhleSdyZSBjaGFuZ2luZyB0aGUgYWxsb2NhdGlvbiBvZiBgZm1hbmAgZnJvbSBga3phbGxvY2AgdG8gYGRldm1fa3phbGxvY2AgYW5kIGZpeGluZyBzb21lIGNsb2NrIGxlYWtzIGJ5IGFkZGluZyBgY2xrX3B1dChjbGspYC4gVGhlIGNvZGUgaXMgbWFraW5nIHRoZSBhcHByb3ByaWF0ZSB1cGRhdGVzIHRvIHRoZSBmcmVlIGNhbGxzIHRvIGNvbXBsZW1lbnQgdGhpcyBjaGFuZ2UuIFRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQsIGEgZ29vZCBjbGVhbnVwIG9mIHRoZSBlcnJvciBwYXRocywgYW5kIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGlmIHRoZSBkcml2ZXIgcHJvYmVzLiBJJ20gZ29pbmcgd2l0aCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5TbywgdG8gcmVpdGVyYXRlLCBjb25maWd1cmF0aW9uczogYEZTTF9GTUFOYDsgZm9jdXMgc3ltYm9sczogYHJlYWRfZHRzX25vZGVgLCBgZm1hbl9jb25maWdgLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhlIGRyaXZlciBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9gLiBJcyB0aGVyZSBhIHBhcmVudCBvciBicm9hZGVyIGNvbmZpZ3VyYXRpb24gdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSdsbCBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnYCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ0MywiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozODo0OC44MTgzNjYzNDVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzk4Mzg4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXFxcIlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz02Mj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6NjM6c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozODo1MC40OTgyMTU0NzNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU4MzMxMjg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktjb25maWcgRGVwZW5kZW5jeSBDaGVjayoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgZm9yIEZyZWVzY2FsZSBFdGhlcm5ldCBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnYC4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBjb2RlLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29yayBzdGFjayBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGJ1aWxkLiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgS2NvbmZpZyBzeW1ib2xzLCBhbmQgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcyBhcyB3ZWxsLiBJIG5lZWQgdG8ga25vdyBpZiBlbmFibGluZyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGhhcyBhbnkgY2FzY2FkaW5nIGVmZmVjdHMuIEZyb20gdGhlcmUsIEkgd2lsbCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGFueSBwb3RlbnRpYWwgY2hhbmdlcyBJIG1heSB3aXNoIHRvIG1ha2UsIHdoZXRoZXIgdGhleSBiZSBtb2RpZmljYXRpb25zLCBhZGRpdGlvbnMgb3IgcmVtb3ZhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDI4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzg6NTYuMDgxNTMxNDk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjE0MDIxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfRlJFRVNDQUxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkZyZWVzY2FsZSBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozODo1Ni40NDI5NDE5NTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0NjcxOTA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQXNzZXNzaW5nIEZyZWVzY2FsZSBWZW5kb3IgU3VwcG9ydCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGNvZGUgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHdoZXRoZXIgd2UgYWN0dWFsbHkgbmVlZCB0byBpbmNsdWRlIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAuIFdlJ3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrLXJlbGF0ZWQgY29kZSBoZXJlLCBsaWtlbHkgZGV2aWNlIGRyaXZlcnMgb3Igc29tZSBuZXR3b3JrIGFic3RyYWN0aW9uIGxheWVyLCBhbmQgdGhhdCBwcmVwcm9jZXNzb3Igc3ltYm9sIGlzIHNjcmVhbWluZyBcIkZyZWVzY2FsZVwiIGF0IG1lLiBNeSBpbnRlcm5hbCBjaGVja2xpc3QgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgZG93biB0aGUgcG90ZW50aWFsIHNjZW5hcmlvcy4gSXMgdGhpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgRnJlZXNjYWxlIChvciBOWFApIFNvQz8gQXJlIHdlIHRhcmdldGluZyBhIGJvYXJkIHRoYXQgcmVsaWVzIGhlYXZpbHkgb24gRnJlZXNjYWxlJ3MgbmV0d29ya2luZyBJUD8gT3IgaXMgdGhpcyBqdXN0IGxlZ2FjeSBjb2RlIHRoYXQncyBoYW5naW5nIGFyb3VuZD9cblxuSSdtIHRoaW5raW5nLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0IGNvdWxkIGJlIHVzZWZ1bCwgb3IgcG9zc2libHkgbmVjZXNzYXJ5LlxuXG5VbHRpbWF0ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0IHRvIGRldGVybWluZSBpZiB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIHZpdGFsIG9yIGlmIGl0J3MgZGVhZCBjb2RlIGp1c3Qgd2FpdGluZyB0byBiZSBwcnVuZWQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdXNpbmcgdG9vbHMsIGlkZW50aWZ5IG90aGVyIGZpbGVzIHRoYXQgY291bGQgYmUgYWZmZWN0ZWQgYnkgaXQsIGFuZCBkZXRlcm1pbmUgdGhlIGV4YWN0IGZ1bmN0aW9uYWxpdHkgY29udHJvbGxlZCBieSB0aGlzIGZsYWcuIElzIGl0IGp1c3QgYSBkcml2ZXIsIGEgUEhZIGNvbmZpZ3VyYXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsPyBUaW1lIHRvIHN0YXJ0IHRyYWNpbmcgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzQ1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzk6MDAuNjg5NjY0MjM5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzNzQwODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9Nj1jb25maWcgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTgtXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6OTpcXHRkZXBlbmRzIG9uIEZTTF9TT0MgfHwgUVVJQ0NfRU5HSU5FIHx8IENQTTEgfHwgQ1BNMiB8fCBQUENfTVBDNTEyeCB8fCBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMTAtXFx0XFx0ICAgTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMnggfHwgXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJGRUMgZXRoZXJuZXQgY29udHJvbGxlciAob2YgQ29sZEZpcmUgYW5kIHNvbWUgaS5NWCBDUFVzKVxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIChNNTIzeCB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTIweCB8fCBNNTMyeCB8fCBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMjYtXFx0XFx0ICAgQVJDSF9NWEMgfHwgQVJDSF9TMzIgfHwgU09DX0lNWDI4IHx8IENPTVBJTEVfVEVTVClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yNy1cXHRkZWZhdWx0IEFSQ0hfTVhDIHx8IFNPQ19JTVgyOCBpZiBBUk1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzoyODpcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMjktXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0zOT1jb25maWcgRkVDX01QQzUyeHhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy00MC1cXHR0cmlzdGF0ZSBcXFwiRkVDIE1QQzUyeHggZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjQxOlxcdGRlcGVuZHMgb24gUFBDX01QQzUyeHggXFx1MDAyNlxcdTAwMjYgUFBDX0JFU1RDT01NXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNDItXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz01MD1jb25maWcgRkVDX01QQzUyeHhfTURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIkZFQyBNUEM1Mnh4IE1ESU8gYnVzIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo1MjpcXHRkZXBlbmRzIG9uIEZFQ19NUEM1Mnh4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNTMtXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz03MT1jb25maWcgRlNMX1hHTUFDX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTczLVxcdHNlbGVjdCBQSFlMSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo3NDpcXHRkZXBlbmRzIG9uIE9GXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNzUtXFx0c2VsZWN0IE9GX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnPTgwPWNvbmZpZyBVQ0NfR0VUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTgxLVxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUUUgR2lnYWJpdCBFdGhlcm5ldFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo4MjpcXHRkZXBlbmRzIG9uIFFVSUNDX0VOR0lORSBcXHUwMDI2XFx1MDAyNiBQUEMzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTgzLVxcdHNlbGVjdCBGU0xfUFFfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9ODk9Y29uZmlnIFVHRVRIX1RYX09OX0RFTUFORFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIlRyYW5zbWl0IG9uIERlbWFuZCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjkxOlxcdGRlcGVuZHMgb24gVUNDX0dFVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy05Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz05Mz1jb25maWcgR0lBTkZBUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlIFxcXCJHaWFuZmFyIEV0aGVybmV0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjk1OlxcdGRlcGVuZHMgb24gSEFTX0RNQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTk2LVxcdHNlbGVjdCBGU0xfUFFfTURJT1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozOTowMi4zNDM0MDk5MThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU1NzEzNzA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGcmVlc2NhbGUgTmV0d29ya2luZyBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgaGluZ2VzIG9uIGBDT01QSUxFX1RFU1RgIGJlaW5nIGVuYWJsZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBCdXQsIGV2ZW4gaWYgYENPTVBJTEVfVEVTVGAgaXNuJ3QgZW5hYmxlZCwgYE5FVF9WRU5ET1JfRlJFRVNDQUxFYCBhbHNvIGhhcyB0aGVzZSBkZXBlbmRlbmNpZXM6IGBGU0xfU09DIHx8IFFVSUNDX0VOR0lORSB8fCBDUE0xIHx8IENQTTIgfHwgUFBDX01QQzUxMnggfHwgTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMnggfHwgQVJDSF9NWEMgfHwgQVJDSF9TMzIgfHwgU09DX0lNWDI4IHx8IENPTVBJTEVfVEVTVGAuIFRoYXQncyBhIHByZXR0eSBkaXZlcnNlIHNldCBvZiBhcmNoaXRlY3R1cmVzISBTbywgaWYgYENPTVBJTEVfVEVTVGAgaXMgZW5hYmxlZCwgdGhlbiBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgICpjYW4qIGJlIGVuYWJsZWQuIEkgd2lsbCBlbmFibGUgYm90aCBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgIGFuZCBgRlNMX0ZNQU5gLlxuXG5Ob3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZvciB0aGUgZHJpdmVyIGl0c2VsZiwgc28gSSBuZWVkIHRvIGNoZWNrIGBGU0xfRk1BTmAuIFllcywgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkcml2ZXIgaXMgaW5kZWVkIGBGU0xfRk1BTmAuIFRoYXQncyBnb29kLlxuXG5BbHJpZ2h0LCBsZXQncyByZXZpZXcgdGhlIEpTT04gY29uZmlndXJhdGlvbi4gVGhlIGdvYWwgaGVyZSBpcyBjbGVhcmx5IGZ1enppbmcgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlci4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgdHJ1ZSwgd2hpY2ggdmFsaWRhdGVzIHRoZSBlZmZvcnQuIFRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGluY2x1ZGVzIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZXkncmUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciBkZXZpY2UgdHJlZSBwYXJzaW5nIGFuZCBjb25maWd1cmF0aW9uLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBhbHJlYWR5IHNldCwgd2hpY2ggYWxpZ25zIHdpdGggbXkgZmluZGluZ3M6IGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgYW5kIGBGU0xfRk1BTmAuIFRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMsIHRoZSBwYXRjaCBmaXhlcyBtZW1vcnkgYW5kIGNsb2NrIGxlYWtzIGluIHRoZSBGcmVlc2NhbGUgRk1hbiBkcml2ZXIsIGFuZCB0aGVzZSBwYXRocyBjYW4gYmUgdGVzdGVkIHRocm91Z2ggc3l6a2FsbGVyIHZpYSBwbGF0Zm9ybSBkZXZpY2UgYW5kIGRldmljZSB0cmVlIGluamVjdGlvbi5cblxuVGhpbmtpbmcgYWJvdXQgdGhlIGNvZGUsIGBmbWFuX3Byb2JlYCBzZWVtcyBsaWtlIGEgZ29vZCBmb2N1cyBzeW1ib2wsIHRvby4gQmVjYXVzZSBpdCBhbHNvIGNhbGxzIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYC4gU28sIEkgd2lsbCBhZGQgYGZtYW5fcHJvYmVgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NzQsIk91dHB1dFRva2VucyI6MTA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM5OjExLjkwMDU0ODk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE0Njc0NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfRlJFRVNDQUxFXCIsXG4gICAgXCJGU0xfRk1BTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlYWRfZHRzX25vZGVcIixcbiAgICBcImZtYW5fY29uZmlnXCIsXG4gICAgXCJmbWFuX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFuZCBjbG9jayBsZWFrcyBpbiB0aGUgcHJvYmUgZXJyb3IgcGF0aHMgb2YgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlci4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBieSBzeXprYWxsZXIgdmlhIHBsYXRmb3JtIGRldmljZSBhbmQgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfRlJFRVNDQUxFXCIsXG4gICAgXCJGU0xfRk1BTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlYWRfZHRzX25vZGVcIixcbiAgICBcImZtYW5fY29uZmlnXCIsXG4gICAgXCJmbWFuX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFuZCBjbG9jayBsZWFrcyBpbiB0aGUgcHJvYmUgZXJyb3IgcGF0aHMgb2YgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlci4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBieSBzeXprYWxsZXIgdmlhIHBsYXRmb3JtIGRldmljZSBhbmQgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowlsxhc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-22 09:17:02 +0000 UTC FinishedAt: 2026-06-22 09:39:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_FREESCALE", "FSL_FMAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_FREESCALE", "FSL_FMAN" ], "series_id": "5bada3b9-d1f0-43d9-a4fc-830a90f438ab" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "read_dts_node", "fman_config", "fman_probe" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfRlJFRVNDQUxFJiMzNDssCiAgICAmIzM0O0ZTTF9GTUFOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVhZF9kdHNfbm9kZSYjMzQ7LAogICAgJiMzNDtmbWFuX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtmbWFuX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbmQgY2xvY2sgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGhzIG9mIHRoZSBGcmVlc2NhbGUgRk1hbiBkcml2ZXIuIFRoZXNlIHBhdGhzIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyIHZpYSBwbGF0Zm9ybSBkZXZpY2UgYW5kIGRldmljZSB0cmVlIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg4OGUwNGExNWJiNTVlMjNkNTUxMTg5MmQ3MzYwYjQ0NTAwODQ3NGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwOTozNzoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcbmluZGV4IDAxMzI3M2EyZGUzMmYyLi4yM2I5MzhhZmUxN2E5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXG5AQCAtMTc5Myw4ICYjNDM7MTc5Myw2IEBAIHN0YXRpYyBpbnQgZm1hbl9jb25maWcoc3RydWN0IGZtYW4gKmZtYW4pXG4gXHRrZnJlZShmbWFuLVx1MDAzZWNmZyk7XG4gZXJyX2ZtX2RydjpcbiBcdGtmcmVlKGZtYW4tXHUwMDNlc3RhdGUpO1xuLWVycl9mbV9zdGF0ZTpcbi1cdGtmcmVlKGZtYW4pO1xuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuQEAgLTI2OTcsNyAmIzQzOzI2OTUsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0c3RydWN0IGNsayAqY2xrO1xuIFx0dTMyIGNsa19yYXRlO1xuIFxuLVx0Zm1hbiA9IGt6YWxsb2Nfb2JqKCpmbWFuKTtcbiYjNDM7XHRmbWFuID0gZGV2bV9remFsbG9jKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIHNpemVvZigqZm1hbiksIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFmbWFuKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbkBAIC0yNzM2LDExICYjNDM7MjczNCwxMyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEZNJWQgY2xvY2sgcmF0ZVxcblwmIzM0OyxcbiBcdFx0XHRfX2Z1bmNfXywgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlkKTtcbi1cdFx0Z290byBmbWFuX25vZGVfcHV0O1xuJiM0MztcdFx0Z290byBjbGtfcHV0O1xuIFx0fVxuIFx0LyogUm91bmRpbmcgdG8gTUh6ICovXG4gXHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuY2xrX2ZyZXEgPSBESVZfUk9VTkRfVVAoY2xrX3JhdGUsIDEwMDAwMDApO1xuIFxuJiM0MztcdGNsa19wdXQoY2xrKTtcbiYjNDM7XG4gXHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShmbV9ub2RlLCBcJiMzNDtmc2wscW1hbi1jaGFubmVsLXJhbmdlXCYjMzQ7LFxuIFx0XHRcdFx0XHQgXHUwMDI2cmFuZ2VbMF0sIDIpO1xuIFx0aWYgKGVycikge1xuQEAgLTI3NTcsNyAmIzQzOzI3NTcsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBjb3VsZCBub3QgZmluZCBNVVJBTSBub2RlXFxuXCYjMzQ7LFxuIFx0XHRcdF9fZnVuY19fKTtcbi1cdFx0Z290byBmbWFuX2ZyZWU7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuIFxuIFx0ZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShtdXJhbV9ub2RlLCAwLFxuQEAgLTI3NjYsNyAmIzQzOzI3NjYsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0XHRvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTtcbiBcdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcJiMzNDslczogb2ZfYWRkcmVzc190b19yZXNvdXJjZSgpID0gJWRcXG5cJiMzNDssXG4gXHRcdFx0X19mdW5jX18sIGVycik7XG4tXHRcdGdvdG8gZm1hbl9mcmVlO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdH1cbiBcbiBcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xuQEAgLTI3NzYsNyAmIzQzOzI3NzYsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCYjMzQ7LFxuIFx0XHRcdF9fZnVuY19fLCBpcnEsIGVycik7XG4tXHRcdGdvdG8gZm1hbl9mcmVlO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdH1cbiBcbiBcdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7XG5AQCAtMjc4Niw3ICYjNDM7Mjc4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCYjMzQ7LFxuIFx0XHRcdFx0X19mdW5jX18sIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLCBlcnIpO1xuLVx0XHRcdGdvdG8gZm1hbl9mcmVlO1xuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMjc5NCw3ICYjNDM7Mjc5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihiYXNlX2FkZHIpO1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBkZXZtX2lvcmVtYXAoKSBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbi1cdFx0Z290byBmbWFuX2ZyZWU7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuIFxuIFx0Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLmJhc2VfYWRkciA9IGJhc2VfYWRkcjtcbkBAIC0yODA2LDcgJiM0MzsyODA2LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcJiMzNDslczogb2ZfcGxhdGZvcm1fcG9wdWxhdGUoKSBmYWlsZWRcXG5cJiMzNDssXG4gXHRcdFx0X19mdW5jX18pO1xuLVx0XHRnb3RvIGZtYW5fZnJlZTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXHR9XG4gXG4gI2lmZGVmIENPTkZJR19EUEFBX0VSUkFUVU1fQTA1MDM4NVxuQEAgLTI4MTgsOCAmIzQzOzI4MTgsOCBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFxuIGZtYW5fbm9kZV9wdXQ6XG4gXHRvZl9ub2RlX3B1dChmbV9ub2RlKTtcbi1mbWFuX2ZyZWU6XG4tXHRrZnJlZShmbWFuKTtcbiYjNDM7Y2xrX3B1dDpcbiYjNDM7XHRjbGtfcHV0KGNsayk7XG4gXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX0ZSRUVTQ0FMRSYjMzQ7LAogICAgJiMzNDtGU0xfRk1BTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlYWRfZHRzX25vZGUmIzM0OywKICAgICYjMzQ7Zm1hbl9jb25maWcmIzM0OywKICAgICYjMzQ7Zm1hbl9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtZW1vcnkgYW5kIGNsb2NrIGxlYWtzIGluIHRoZSBwcm9iZSBlcnJvciBwYXRocyBvZiB0aGUgRnJlZXNjYWxlIEZNYW4gZHJpdmVyLiBUaGVzZSBwYXRocyBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGJ5IHN5emthbGxlciB2aWEgcGxhdGZvcm0gZGV2aWNlIGFuZCBkZXZpY2UgdHJlZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4OGUwNGExNWJiNTVlMjNkNTUxMTg5MmQ3MzYwYjQ0NTAwODQ3NGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyMiAwOTozNzoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYwppbmRleCAwMTMyNzNhMmRlMzJmMi4uMjNiOTM4YWZlMTdhOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMKQEAgLTE3OTMsOCAmIzQzOzE3OTMsNiBAQCBzdGF0aWMgaW50IGZtYW5fY29uZmlnKHN0cnVjdCBmbWFuICpmbWFuKQogCWtmcmVlKGZtYW4tJmd0O2NmZyk7CiBlcnJfZm1fZHJ2OgogCWtmcmVlKGZtYW4tJmd0O3N0YXRlKTsKLWVycl9mbV9zdGF0ZToKLQlrZnJlZShmbWFuKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtMjY5Nyw3ICYjNDM7MjY5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpCiAJc3RydWN0IGNsayAqY2xrOwogCXUzMiBjbGtfcmF0ZTsKIAotCWZtYW4gPSBremFsbG9jX29iaigqZm1hbik7CiYjNDM7CWZtYW4gPSBkZXZtX2t6YWxsb2MoJmFtcDtvZl9kZXYtJmd0O2Rldiwgc2l6ZW9mKCpmbWFuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmbWFuKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIApAQCAtMjczNiwxMSAmIzQzOzI3MzQsMTMgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAkJZXJyID0gLUVJTlZBTDsKIAkJZGV2X2VycigmYW1wO29mX2Rldi0mZ3Q7ZGV2LCAmIzM0OyVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEZNJWQgY2xvY2sgcmF0ZVxuJiMzNDssCiAJCQlfX2Z1bmNfXywgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5pZCk7Ci0JCWdvdG8gZm1hbl9ub2RlX3B1dDsKJiM0MzsJCWdvdG8gY2xrX3B1dDsKIAl9CiAJLyogUm91bmRpbmcgdG8gTUh6ICovCiAJZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5jbGtfZnJlcSA9IERJVl9ST1VORF9VUChjbGtfcmF0ZSwgMTAwMDAwMCk7CiAKJiM0MzsJY2xrX3B1dChjbGspOwomIzQzOwogCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KGZtX25vZGUsICYjMzQ7ZnNsLHFtYW4tY2hhbm5lbC1yYW5nZSYjMzQ7LAogCQkJCQkgJmFtcDtyYW5nZVswXSwgMik7CiAJaWYgKGVycikgewpAQCAtMjc1Nyw3ICYjNDM7Mjc1Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpCiAJCWVyciA9IC1FSU5WQUw7CiAJCWRldl9lcnIoJmFtcDtvZl9kZXYtJmd0O2RldiwgJiMzNDslczogY291bGQgbm90IGZpbmQgTVVSQU0gbm9kZVxuJiMzNDssCiAJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZm1hbl9mcmVlOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAl9CiAKIAllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG11cmFtX25vZGUsIDAsCkBAIC0yNzY2LDcgJiM0MzsyNzY2LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAkJb2Zfbm9kZV9wdXQobXVyYW1fbm9kZSk7CiAJCWRldl9lcnIoJmFtcDtvZl9kZXYtJmd0O2RldiwgJiMzNDslczogb2ZfYWRkcmVzc190b19yZXNvdXJjZSgpID0gJWRcbiYjMzQ7LAogCQkJX19mdW5jX18sIGVycik7Ci0JCWdvdG8gZm1hbl9mcmVlOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAl9CiAKIAlvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTsKQEAgLTI3NzYsNyAmIzQzOzI3NzYsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KQogCWlmIChlcnIgJmx0OyAwKSB7CiAJCWRldl9lcnIoJmFtcDtvZl9kZXYtJmd0O2RldiwgJiMzNDslczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxuJiMzNDssCiAJCQlfX2Z1bmNfXywgaXJxLCBlcnIpOwotCQlnb3RvIGZtYW5fZnJlZTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKGVycik7CiAJfQogCiAJaWYgKGZtYW4tJmd0O2R0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7CkBAIC0yNzg2LDcgJiM0MzsyNzg2LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAkJaWYgKGVyciAmbHQ7IDApIHsKIAkJCWRldl9lcnIoJmFtcDtvZl9kZXYtJmd0O2RldiwgJiMzNDslczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxuJiMzNDssCiAJCQkJX19mdW5jX18sIGZtYW4tJmd0O2R0c19wYXJhbXMuZXJyX2lycSwgZXJyKTsKLQkJCWdvdG8gZm1hbl9mcmVlOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KIAl9CiAKQEAgLTI3OTQsNyAmIzQzOzI3OTQsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KQogCWlmIChJU19FUlIoYmFzZV9hZGRyKSkgewogCQllcnIgPSBQVFJfRVJSKGJhc2VfYWRkcik7CiAJCWRldl9lcnIoJmFtcDtvZl9kZXYtJmd0O2RldiwgJiMzNDslczogZGV2bV9pb3JlbWFwKCkgZmFpbGVkXG4mIzM0OywgX19mdW5jX18pOwotCQlnb3RvIGZtYW5fZnJlZTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKGVycik7CiAJfQogCiAJZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5iYXNlX2FkZHIgPSBiYXNlX2FkZHI7CkBAIC0yODA2LDcgJiM0MzsyODA2LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJmFtcDtvZl9kZXYtJmd0O2RldiwgJiMzNDslczogb2ZfcGxhdGZvcm1fcG9wdWxhdGUoKSBmYWlsZWRcbiYjMzQ7LAogCQkJX19mdW5jX18pOwotCQlnb3RvIGZtYW5fZnJlZTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKGVycik7CiAJfQogCiAjaWZkZWYgQ09ORklHX0RQQUFfRVJSQVRVTV9BMDUwMzg1CkBAIC0yODE4LDggJiM0MzsyODE4LDggQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAogZm1hbl9ub2RlX3B1dDoKIAlvZl9ub2RlX3B1dChmbV9ub2RlKTsKLWZtYW5fZnJlZToKLQlrZnJlZShmbWFuKTsKJiM0MztjbGtfcHV0OgomIzQzOwljbGtfcHV0KGNsayk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZyZWVzY2FsZSBGTUFOIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY2AuIEl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgbWFraW5nIHNvbWUga2V5IGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIHN3aXRjaGluZyBmcm9tIGBremFsbG9jX29iamAgdG8gYGRldm1fa3phbGxvY2AgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgYGZtYW5gIGRyaXZlciwgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIHByb3BlciBkZXZpY2UgbWFuYWdlZCBtZW1vcnkuIFRoZXkmIzM5O3JlIGFsc28gZWxpbWluYXRpbmcgZXhwbGljaXQgYGtmcmVlKGZtYW4pYCBjYWxscywgc3Vic3RpdHV0aW5nIHRoZW0gd2l0aCBgcmV0dXJuIEVSUl9QVFIoZXJyKWAsIGFuZCBhZGRpbmcgYGNsa19wdXQoY2xrKWAgY2FsbHMuIE9uIHRvcCBvZiB0aGlzIHRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgZXJyb3IgaGFuZGxpbmcgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYHJlYWRfZHRzX25vZGVgLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYWJvdXQgcmVhY2hhYmlsaXR5IOKAkyBjYW4gd2UgYWN0dWFsbHkgdHJpZ2dlciB0aGlzIGNvZGU/IEl0JiMzOTtzIGEgRnJlZXNjYWxlIGRyaXZlciwgc28gaXQmIzM5O3MgcHJvYmFibHkgdGllZCB0byBzcGVjaWZpYyBoYXJkd2FyZSwgdGhlIEZyZWVzY2FsZSBGcmFtZSBNYW5hZ2VyLiBJbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoaXMgaXMgbGlrZWx5IGFuIGlzc3VlLiBVbmxlc3MgdGhlcmUmIzM5O3MgYW4gZW11bGF0b3Igc3BlY2lmaWNhbGx5IGZvciB0aGF0IGhhcmR3YXJlLCBvciBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciwgaXQmIzM5O3MgcHJvYmFibHkgbm90IHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzLiBEZXZpY2UgVHJlZSBvdmVybGF5cyAqbWlnaHQqIHByb3ZpZGUgYSBwYXRoLCBidXQgdGhhdCYjMzk7cyBub3QgYWx3YXlzIGVhc3kuCgpBaCwgYnV0IHdhaXQsIFN5emthbGxlci4gSXQgKmNhbiogZnV6eiBwbGF0Zm9ybSBkcml2ZXJzIGluIGNlcnRhaW4gc2l0dWF0aW9ucywgbGlrZSBpZiBpdCBjYW4gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIG9yIGlmIGl0JiMzOTtzIGEgUENJIGRyaXZlci4gVGhpcyBvbmUgKmlzKiBhIHBsYXRmb3JtIGRyaXZlci4gU3l6a2FsbGVyJiMzOTtzIGRldmljZSBpbml0aWFsaXphdGlvbiAoYHN5el9kZXZfaW5pdGAgZXRjLikgbWlnaHQgYmUgYWJsZSB0byBoZWxwLCBidXQgdGhhdCBzdXBwb3J0IGNhbiBiZSBhIGJpdCBsaW1pdGVkLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGZvciB0aGlzIGRyaXZlci4gVGhlIEZyZWVzY2FsZSBGTWFuIGlzIHVzdWFsbHkgcGFydCBvZiBEUEFBIChEYXRhIFBhdGggQWNjZWxlcmF0aW9uIEFyY2hpdGVjdHVyZSksIHdoaWNoIHBvaW50cyB0byBQb3dlclBDIGFuZCBBUk0gU29DcyBsaWtlIFFvcklRLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkcml2ZXIgaXMgZGVwbG95ZWQuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBib3VuZCB0byBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBpZiBpdCBpcyBnZW5lcmljYWxseSB1c2FibGUuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGdldCBzb21lIGluZm9ybWF0aW9uIG91dCBvZiB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU0xfRk1BTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzoyOmNvbmZpZyBGU0xfRk1BTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Rk1hbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk3MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZGVsdmUgaW50byB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnJlYWtpbmcgdGhpcyBkb3duLgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgb2YgdGhpcyBtYXR0ZXIuIEJlZm9yZSBqdW1waW5nIHRvIGNvbmNsdXNpb25zIG9yIHNvbHV0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGRlcGVuZGVuY2llcyBhdCBwbGF5IGhlcmUuIFdoYXQgYXJlIHRoZSBrZXkgZmFjdG9ycywgdmFyaWFibGVzLCBvciBjb25kaXRpb25zIHRoYXQgdGhpcyB3aG9sZSBzaXR1YXRpb24gaGluZ2VzIHVwb24/IFdoYXQmIzM5O3MgdGhlIGJlZHJvY2ssIGFuZCB3aGF0IGFyZSB0aGUgc2NhZmZvbGRpbmcgcGllY2VzPyBJIG5lZWQgdG8gbWFwIHRoZSBjYXVzYWwgcmVsYXRpb25zaGlwcy4gSXQmIzM5O3MgdGltZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGxhbmRzY2FwZSBhbmQgZXhwb3NlIGl0cyB1bmRlcmx5aW5nIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnPTI9Y29uZmlnIEZTTF9GTUFOXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGTWFuIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc6NDpcdGRlcGVuZHMgb24gRlNMX1NPQyB8fCBBUkNIX0xBWUVSU0NBUEUgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTUtXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1Jcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnPTE0PWNvbmZpZyBEUEFBX0VSUkFUVU1fQTA1MDM4NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xNS1cdGJvb2xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc6MTY6XHRkZXBlbmRzIG9uIEFSTTY0IFx1MDAyNlx1MDAyNiBGU0xfRFBBQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xNy1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIGFuZCBQcm9iZSBQb3NzaWJpbGl0aWVzKioKCk9rYXksIHNvIHRoZSBjb21waWxhdGlvbiBwYXRoIGhpbmdlcyBvbiBhIGZldyBrZXkgZGVmaW5lczogYEZTTF9TT0NgLCBgQVJDSF9MQVlFUlNDQVBFYCwgb3IgYENPTVBJTEVfVEVTVGAuIENsZWFybHksIGlmIGBDT01QSUxFX1RFU1RgIGlzIHNldCwgaXQgKmNhbiogYmUgY29tcGlsZWQuIFRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB3ZSBjYW4gcHJvYmUgaXQuIFNpbmNlIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIsIEkgbmVlZCB0byBjaGVjayB0aGUgZHJpdmVyIHJlZ2lzdHJhdGlvbiBkZXRhaWxzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYGZtYW4uY2AgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGlzIHJlZ2lzdGVyZWQgYW5kIGluaXRpYWxpemVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgY29tcG9uZW50IGNhbiBiZSBzdWNjZXNzZnVsbHkgcHJvYmVkIHVuZGVyIHRoZSByaWdodCBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9Mjg5Mj1zdGF0aWMgaW50IF9faW5pdCBmbWFuX2xvYWQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjg5Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyODk4Olx0ZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmZtYW5fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yODk5LVx0aWYgKGVyciBcdTAwM2MgMClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyOTAwOlx0XHRwcl9lcnIoXCYjMzQ7RXJyb3IsIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigpID0gJWRcXG5cJiMzNDssIGVycik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjkwMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODI0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogZm1hbl9kcml2ZXIgRXhhbWluYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBpbW1lZGlhdGUgcHJvbXB0IOKAkyAmIzM0O0xldCYjMzk7cyBjaGVjayBgZm1hbl9kcml2ZXJgJiMzNDsg4oCTIHN1Z2dlc3RzIGEgZGlyZWN0IGFwcHJvYWNoLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvcy4gSSBhc3N1bWUgd2XigJlyZSBsaWtlbHkgaW52ZXN0aWdhdGluZyBhIHByb2Nlc3MsIG1vZHVsZSwgb3IgY29tcG9uZW50IG5hbWVkIGBmbWFuX2RyaXZlcmAuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMuIElzIHRoaXMgcmVsYXRlZCB0byBmaWxlIG1hbmFnZW1lbnQsIGEgc3BlY2lmaWMgaGFyZHdhcmUgaW50ZXJmYWNlLCBvciBwZXJoYXBzIGEgY29yZSBzeXN0ZW0gcHJvY2Vzcz8gVGhlIGNvbnRleHQgaXMgdGhlIGtleSwgb2YgY291cnNlLCBidXQgdGhlIGNvbW1hbmQgaXRzZWxmIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGFzc2Vzc2VkIGhlcmUuIEnigJltIHByZXBhcmluZyBteXNlbGYgdG8gZGVsdmUgaW50byBsb2dzLCBjb2RlLCBvciBwZXJoYXBzIGV2ZW4gbGl2ZSBkZWJ1Z2dpbmcgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBtYXR0ZXIuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBhc3BlY3Qgb2YgYGZtYW5fZHJpdmVyYCB0aGF0IG5lZWRzIGF0dGVudGlvbiwgc28gdGhhdCBJIGNhbiBhcHBseSB0aGUgYXBwcm9wcmlhdGUgdG9vbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZtYW5fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yODgyPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZtYW5fbWF0Y2gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI4ODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6Mjg4NDpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbWFuX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yODg1LVx0LmRyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9Mjg5Mj1zdGF0aWMgaW50IF9faW5pdCBmbWFuX2xvYWQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjg5Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyODk4Olx0ZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmZtYW5fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yODk5LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9MjkwNj1zdGF0aWMgdm9pZCBfX2V4aXQgZm1hbl91bmxvYWQodm9pZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTA3LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyOTA4Olx0cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Zm1hbl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI5MDktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDgwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGhpcyBQbGF0Zm9ybSBEcml2ZXIqKgoKT2theSwgc28gdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aGF0JiMzOTtzIHJlbHlpbmcgb24gRGV2aWNlIFRyZWUgKERUKSBmb3IgaXRzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtDYW4gU3l6a2FsbGVyIGZ1enogdGhpcyBlZmZlY3RpdmVseT8mIzM0OyBXZSBrbm93IFN5emthbGxlciAqY2FuKiBpbmplY3QgRFQgbm9kZXMgdXNpbmcgZnVuY3Rpb25zIGxpa2UgYHN5el9kZXZfaW5pdGAuIEhvd2V2ZXIsIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBoYXJkd2FyZSBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgdGhvc2UgYWNjZXNzaW5nIHNwZWNpZmljIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBtZW1vcnktbWFwcGVkIEkvTyAobGlrZSB0aGF0IGBmbWFuLSZndDtkdHNfcGFyYW1zLmJhc2VfYWRkciA9IGJhc2VfYWRkcjtgIHN0dWZmLCBkZXJpdmVkIGZyb20gYG9mX2FkZHJlc3NfdG9fcmVzb3VyY2VgIGFuZCBgZGV2bV9pb3JlbWFwYCksIGFyZSBnb2luZyB0byBiZSBwcm9ibGVtYXRpYy4gVGhleSYjMzk7bGwgbGlrZWx5IGZhaWwgdG8gcHJvYmUsIG9yIHdvcnNlLCBjcmFzaCwgaWYgdGhlIHJlcXVpcmVkIG1lbW9yeSBpc24mIzM5O3QgYWN0dWFsbHkgcHJlc2VudCBvciBpZiBpdCBpc24mIzM5O3QgYWNjdXJhdGVseSBlbXVsYXRlZC4KCkJ1dCB3YWl0LCBTeXprYWxsZXIgZG9lcyBoYXZlICpzb21lKiBzdXBwb3J0IGZvciBwbGF0Zm9ybSBkcml2ZXIgZnV6emluZyB2aWEgRFQgbm9kZSBpbmplY3Rpb24sIHRob3VnaCBpdCYjMzk7cyB1c3VhbGx5IHF1aXRlIGxpbWl0ZWQuIEkmIzM5O3ZlIG9mdGVuIHNlZW4gdGhlc2UgYXR0ZW1wdHMgZmFsbCBhcGFydCBhdCB0aGUgYGRldm1faW9yZW1hcGAgc3RhZ2Ugb3Igb3RoZXIgaGFyZHdhcmUgYWNjZXNzIHBvaW50cy4gV2UmIzM5O3JlIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSBkZWVwIGRpdmUgdG8gd29yayBvdXQgaWYgdGhpcyBpcyBmdXphYmxlIQoKQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcG90ZW50aWFsIHBpdGZhbGxzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgcmVhZF9kdHNfbm9kZWAgZnVuY3Rpb24gaW4gYGZtYW4uY2AgdG8gc2VlIGhvdyB0aGUgRGV2aWNlIFRyZWUgaW5mb3JtYXRpb24gaXMgcGFyc2VkIGFuZCB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX2R0c19ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yNjg1PU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZtYW5fbXVyYW1fbWF0Y2gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI2ODYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjY4NzpzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI2ODgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yODI2PXN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI4MzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjgzNDpcdGZtYW4gPSByZWFkX2R0c19ub2RlKG9mX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjgzNS1cdGlmIChJU19FUlIoZm1hbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTYKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA2NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYCwgd2hpY2ggaW1tZWRpYXRlbHkgdHJpZ2dlcnMgc29tZSBxdWVzdGlvbnMgYWJvdXQgcmVhY2hhYmlsaXR5LiBUaGUgY29yZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGFjY2Vzc2libGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaWYgc3l6a2FsbGVyIGNhbiBpbmplY3QgYSBkZXZpY2UgdHJlZSAoRFQpIG5vZGUgZm9yIHRoaXMgZHJpdmVyLCB0aGVuIGBmbWFuX3Byb2JlYCB3aWxsIGJlIGNhbGxlZCwgYW5kIGNvbnNlcXVlbnRseSBgcmVhZF9kdHNfbm9kZWAgYXMgd2VsbC4KCmByZWFkX2R0c19ub2RlYCBkb2VzIGEgYnVuY2ggb2Ygc3RhbmRhcmQgRFQgcGFyc2luZzogYGRldm1fa3phbGxvY2AsIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMmAsIGBvZl9jbGtfZ2V0YCwgYGNsa19nZXRfcmF0ZWAsIGBvZl9hZGRyZXNzX3RvX3Jlc291cmNlYCwgYW5kIGBkZXZtX2lvcmVtYXBgLiBBIGZhaWx1cmUgaW4gYG9mX2FkZHJlc3NfdG9fcmVzb3VyY2VgIHdvdWxkIHJlc3VsdCBpbiBhbiBlcnJvciwgd2hpY2ggY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gZnV6ei4gSWYgaXQgKnN1Y2NlZWRzKiwgaXQmIzM5O2xsIG1hcCBzb21lIG1lbW9yeSB2aWEgYGRldm1faW9yZW1hcGAuIEZvbGxvd2luZyB0aGF0LCBgZm1hbl9wcm9iZWAgY2FsbHMgYGZtYW5fY29uZmlnYC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBmdXp6YWJsZT8gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGZpeGluZyBhIG1lbW9yeSBsZWFrIG9yIGNoYW5naW5nIGFsbG9jYXRpb25zLCBhbmQgZml4aW5nIGVycm9yIHBhdGhzLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBidXQgaXQmIzM5O3MgaW4gYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIuIE5vcm1hbGx5LCBJJiMzOTtkIGRpc2NvdW50IGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBhcmVuJiMzOTt0IGVtdWxhdGVkIGJ5IFFFTVUvR0NFIGFzIHVucmVhY2hhYmxlLiBIb3dldmVyLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgdGhpcyBwc2V1ZG8tZGV2aWNlIGluamVjdGlvbiBtZWNoYW5pc20gZm9yIHBsYXRmb3JtIGRldmljZXMuCgpIZXJlJiMzOTtzIHRoZSBydWI6IHRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBjb25jZXJucyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIElzIEZyZWVzY2FsZSBGTWFuIGVtdWxhdGVkIGluIFFFTVU/IEkga25vdyBRRU1VIHN1cHBvcnRzICpzb21lKiBGcmVlc2NhbGUvTlhQIGJvYXJkcyAobGlrZSBgbXBjODU0NGRzYCwgYGU1MDBgLCBgc2FtNDYwZXhgLCBldGMuKSwgYnV0IGRvZXMgaXQgZW11bGF0ZSB0aGUgRk1hbiAoRnJhbWUgTWFuYWdlcik/CgpJIG5lZWQgdG8gY2hlY2sgUUVNVSYjMzk7cyBjb2RlLCBwcm9iYWJseSBpbiBgaHcvcHBjL2U1MDAuY2Agb3IgYGh3L3BwYy9lNTAwcGxhdC5jYCwgdG8gc2VlIGlmIEZNYW4gaXMgZW11bGF0ZWQuIFRoZSBEUEFBL0ZNYW4gaXMgdHlwaWNhbGx5IHF1aXRlIGNvbXBsZXgsIHNvIGZ1bGwgZW11bGF0aW9uIGlzIHVubGlrZWx5LCBidXQgd29ydGggYSBkb3VibGUtY2hlY2suCgpFdmVuIGlmIGl0IGlzbiYjMzk7dCBmdWxseSBlbXVsYXRlZCwgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gKnJlYWNoKiB0aGUgcHJvYmUgZnVuY3Rpb24gdmlhIERUIGluamVjdGlvbi4gU28sIGlzIGl0ICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCYjMzQ7PyBTeXprYWxsZXIgKmNhbiogaW5qZWN0IERUIG5vZGVzLiBJZiBpdCBpbmplY3RzIGEgRFQgbm9kZSwgYGZtYW5fcHJvYmVgICppcyogY2FsbGVkLiBUaGF0IG1lYW5zIGByZWFkX2R0c19ub2RlYCBnZXRzIGNhbGxlZCBhcyB3ZWxsLgoKVGhlIGRlY2lzaXZlIGZhY3RvciBpcyB0aGUgaW5zdHJ1Y3Rpb24gc2F5aW5nICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFNpbmNlIEkga25vdyBzeXprYWxsZXIgY2FuIGluamVjdCBEVCBub2RlcyBhbmQgdGh1cyByZWFjaCBgcmVhZF9kdHNfbm9kZWAsIGxldCBtZSBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGRldGFpbHMgb2Ygd2hhdCBgcmVhZF9kdHNfbm9kZWAgYWN0dWFsbHkgZG9lcyBhbmQgaWYgdGhhdCBpcyBzdXBwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY4NzpcdHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4yNjg4Olx0e1xuMjY4OTpcdFx0c3RydWN0IGZtYW4gKmZtYW47XG4yNjkwOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmZtX25vZGUsICptdXJhbV9ub2RlO1xuMjY5MTpcdFx0dm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7XG4yNjkyOlx0XHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbjI2OTM6XHRcdHUzMiB2YWwsIHJhbmdlWzJdO1xuMjY5NDpcdFx0aW50IGVyciwgaXJxO1xuMjY5NTpcdFx0c3RydWN0IGNsayAqY2xrO1xuMjY5NjpcdFx0dTMyIGNsa19yYXRlO1xuMjY5NzpcdFxuMjY5ODpcdFx0Zm1hbiA9IGRldm1fa3phbGxvYyhcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBzaXplb2YoKmZtYW4pLCBHRlBfS0VSTkVMKTtcbjI2OTk6XHRcdGlmICghZm1hbilcbjI3MDA6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4yNzAxOlx0XG4yNzAyOlx0XHRmbV9ub2RlID0gb2Zfbm9kZV9nZXQob2ZfZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbjI3MDM6XHRcbjI3MDQ6XHRcdGVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGZtX25vZGUsIFwmIzM0O2NlbGwtaW5kZXhcJiMzNDssIFx1MDAyNnZhbCk7XG4yNzA1Olx0XHRpZiAoZXJyKSB7XG4yNzA2Olx0XHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IGZhaWxlZCB0byByZWFkIGNlbGwtaW5kZXggZm9yICVwT0ZcXG5cJiMzNDssXG4yNzA3Olx0XHRcdFx0X19mdW5jX18sIGZtX25vZGUpO1xuMjcwODpcdFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4yNzA5Olx0XHR9XG4yNzEwOlx0XHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuaWQgPSAodTgpdmFsO1xuMjcxMTpcdFxuMjcxMjpcdFx0LyogR2V0IHRoZSBGTSBpbnRlcnJ1cHQgKi9cbjI3MTM6XHRcdGVyciA9IHBsYXRmb3JtX2dldF9pcnEob2ZfZGV2LCAwKTtcbjI3MTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yNzE1Olx0XHRcdGdvdG8gZm1hbl9ub2RlX3B1dDtcbjI3MTY6XHRcdGlycSA9IGVycjtcbjI3MTc6XHRcbjI3MTg6XHRcdC8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovXG4yNzE5Olx0XHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMSk7XG4yNzIwOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMjcyMTpcdFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4yNzIyOlx0XHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9IGVycjtcbjI3MjM6XHRcbjI3MjQ6XHRcdGNsayA9IG9mX2Nsa19nZXQoZm1fbm9kZSwgMCk7XG4yNzI1Olx0XHRpZiAoSVNfRVJSKGNsaykpIHtcbjI3MjY6XHRcdFx0ZXJyID0gUFRSX0VSUihjbGspO1xuMjcyNzpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IEZNJWQgY2xvY2sgc3RydWN0dXJlXFxuXCYjMzQ7LFxuMjcyODpcdFx0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuaWQpO1xuMjcyOTpcdFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4yNzMwOlx0XHR9XG4yNzMxOlx0XG4yNzMyOlx0XHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspO1xuMjczMzpcdFx0aWYgKCFjbGtfcmF0ZSkge1xuMjczNDpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMjczNTpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEZNJWQgY2xvY2sgcmF0ZVxcblwmIzM0OyxcbjI3MzY6XHRcdFx0XHRfX2Z1bmNfXywgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlkKTtcbjI3Mzc6XHRcdFx0Z290byBjbGtfcHV0O1xuMjczODpcdFx0fVxuMjczOTpcdFx0LyogUm91bmRpbmcgdG8gTUh6ICovXG4yNzQwOlx0XHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuY2xrX2ZyZXEgPSBESVZfUk9VTkRfVVAoY2xrX3JhdGUsIDEwMDAwMDApO1xuMjc0MTpcdFxuMjc0MjpcdFx0Y2xrX3B1dChjbGspO1xuMjc0MzpcdFxuMjc0NDpcdFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZm1fbm9kZSwgXCYjMzQ7ZnNsLHFtYW4tY2hhbm5lbC1yYW5nZVwmIzM0OyxcbjI3NDU6XHRcdFx0XHRcdFx0IFx1MDAyNnJhbmdlWzBdLCAyKTtcbjI3NDY6XHRcdGlmIChlcnIpIHtcbjI3NDc6XHRcdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcJiMzNDslczogZmFpbGVkIHRvIHJlYWQgZnNsLHFtYW4tY2hhbm5lbC1yYW5nZSBmb3IgJXBPRlxcblwmIzM0OyxcbjI3NDg6XHRcdFx0XHRfX2Z1bmNfXywgZm1fbm9kZSk7XG4yNzQ5Olx0XHRcdGdvdG8gZm1hbl9ub2RlX3B1dDtcbjI3NTA6XHRcdH1cbjI3NTE6XHRcdGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5xbWFuX2NoYW5uZWxfYmFzZSA9IHJhbmdlWzBdO1xuMjc1MjpcdFx0Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLm51bV9vZl9xbWFuX2NoYW5uZWxzID0gcmFuZ2VbMV07XG4yNzUzOlx0XG4yNzU0Olx0XHQvKiBHZXQgdGhlIE1VUkFNIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSAqL1xuMjc1NTpcdFx0bXVyYW1fbm9kZSA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShmbV9ub2RlLCBmbWFuX211cmFtX21hdGNoKTtcbjI3NTY6XHRcdGlmICghbXVyYW1fbm9kZSkge1xuMjc1NzpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMjc1ODpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBjb3VsZCBub3QgZmluZCBNVVJBTSBub2RlXFxuXCYjMzQ7LFxuMjc1OTpcdFx0XHRcdF9fZnVuY19fKTtcbjI3NjA6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI3NjE6XHRcdH1cbjI3NjI6XHRcbjI3NjM6XHRcdGVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobXVyYW1fbm9kZSwgMCxcbjI3NjQ6XHRcdFx0XHRcdCAgICAgXHUwMDI2Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLm11cmFtX3Jlcyk7XG4yNzY1Olx0XHRpZiAoZXJyKSB7XG4yNzY2Olx0XHRcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xuMjc2NzpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKCkgPSAlZFxcblwmIzM0OyxcbjI3Njg6XHRcdFx0XHRfX2Z1bmNfXywgZXJyKTtcbjI3Njk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI3NzA6XHRcdH1cbjI3NzE6XHRcbjI3NzI6XHRcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xuMjc3MzpcdFxuMjc3NDpcdFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBpcnEsIGZtYW5faXJxLCBJUlFGX1NIQVJFRCxcbjI3NzU6XHRcdFx0XHQgICAgICAgXCYjMzQ7Zm1hblwmIzM0OywgZm1hbik7XG4yNzc2Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4yNzc3Olx0XHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcXG5cJiMzNDssXG4yNzc4Olx0XHRcdFx0X19mdW5jX18sIGlycSwgZXJyKTtcbjI3Nzk6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI3ODA6XHRcdH1cbjI3ODE6XHRcbjI3ODI6XHRcdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7XG4yNzgzOlx0XHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXG4yNzg0Olx0XHRcdFx0XHQgICAgICAgZm1hbl9lcnJfaXJxLCBJUlFGX1NIQVJFRCxcbjI3ODU6XHRcdFx0XHRcdCAgICAgICBcJiMzNDtmbWFuLWVyclwmIzM0OywgZm1hbik7XG4yNzg2Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERUIFByb3BlcnRpZXMgUmVxdWlyZWQgZm9yIFN1Y2Nlc3NmdWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgd2hhdCYjMzk7cyBuZWVkZWQgdG8gZ2V0IHRoaXMgdGhpbmcgcnVubmluZywgYW5kIGl0JiMzOTtzIHF1aXRlIGEgbGlzdCBvZiBEZXZpY2UgVHJlZSBwcm9wZXJ0aWVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSByZXF1aXJlbWVudHMgZm9yIGBjZWxsLWluZGV4YCwgdHdvIGludGVycnVwdHMgKHdoaWNoIGlzIGludGVyZXN0aW5nLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRob3NlIGFyZSB1c2VkKSwgYSBjbG9jayBzb3VyY2UsIGFuZCB0aGVuIGEgc3BlY2lmaWMgY2hhbm5lbCByYW5nZSBkZWZpbmVkIGJ5IGBmc2wscW1hbi1jaGFubmVsLXJhbmdlYC4gQmV5b25kIHRoYXQsIHRoZXJlJiMzOTtzIGEgbmVlZCBmb3IgYSBjaGlsZCBub2RlIHRoYXQmIzM5O3MgZ29pbmcgdG8gbWF0Y2ggYWdhaW5zdCBzb21ldGhpbmcgY2FsbGVkIGBmbWFuX211cmFtX21hdGNoYC4gV2UmIzM5O2xsIGFsc28gbmVlZCB0byB1c2UgYG9mX2FkZHJlc3NfdG9fcmVzb3VyY2VgIG9uIHRoYXQgY2hpbGQgbm9kZSBhbmQgdGhlbiBjYWxsIGBkZXZtX3JlcXVlc3RfaXJxYCBhbmQgYGRldm1faW9yZW1hcGAuIFF1aXRlIGEgY29uZmlndXJhdGlvbiwgcmlnaHQ/CgpUaGUgZ29vZCBuZXdzIGlzLCB0aGF0IHN5emthbGxlciYjMzk7cyBgc3l6X2Rldl9pbml0YCBmdW5jdGlvbiBsb29rcyBsaWtlIGl0IGNhbiBpbmplY3QgYXJiaXRyYXJ5IERldmljZSBUcmVlIG5vZGVzLiBUaGF0IG1lYW5zIGl0IGNhbiBwcm92aWRlIGFsbCB0aGVzZSBwcm9wZXJ0aWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBzaG91bGQgZm9jdXMgb24gdGhlIGBkZXZtX3JlcXVlc3RfaXJxYCBjYWxsIGJlY2F1c2UgaXQgY291bGQgZmFpbCBpZiB0aGUgaW50ZXJydXB0IHJlcXVlc3QgaXMgaW52YWxpZC4gTHVja2lseSwgU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSB2YWxpZCBkdW1teSBJUlFzIHNvIHRoYXQgc2hvdWxkIGJlIGxlc3Mgb2YgYSBoZWFkYWNoZS4gVGhlIGBkZXZtX2lvcmVtYXBgIHdpbGwgdGFrZSBjYXJlIG9mIG1hcHBpbmcgdGhlIG1lbW9yeS4KCkFscmlnaHQsIHNvIG9uY2UgYWxsIHRob3NlIERUIHByb3BlcnRpZXMgYXJlIHNldCBhbmQgbWFwcGVkLCB3ZSYjMzk7cmUgYXNzdW1pbmcgYGZtYW5fY29uZmlnYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgbmV4dC4gSSByZWFsbHkgc2hvdWxkIGRpdmUgaW4gYW5kIHNlZSBob3cgdGhhdCBpcyBpbXBsZW1lbnRlZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpbnRvIGBmbWFuX2NvbmZpZ2AuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGxvb2tzIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzYwOlx0XHRcdFx0XHQgICAgZm1hbi1cdTAwM2VzdGF0ZS1cdTAwM2VibWlfbWF4X251bV9vZl90YXNrcyk7XG4xNzYxOlx0XG4xNzYyOlx0XHRpZiAoZm1hbi1cdTAwM2VzdGF0ZS1cdTAwM2VyZXZfaW5mby5tYWpvciBcdTAwM2MgNikge1xuMTc2MzpcdFx0XHRmbWFuLVx1MDAzZWNmZy1cdTAwM2VkbWFfY29tbV9xdHNoX2Nscl9lbWVyID1cbjE3NjQ6XHRcdFx0KHU4KURGTFRfRE1BX0NPTU1fUV9MT1coZm1hbi1cdTAwM2VzdGF0ZS1cdTAwM2VyZXZfaW5mby5tYWpvcixcbjE3NjU6XHRcdFx0XHRcdFx0Zm1hbi1cdTAwM2VzdGF0ZS1cdTAwM2VkbWFfdGhyZXNoX21heF9jb21tcSk7XG4xNzY2Olx0XG4xNzY3Olx0XHRcdGZtYW4tXHUwMDNlY2ZnLVx1MDAzZWRtYV9jb21tX3F0c2hfYXNydF9lbWVyID1cbjE3Njg6XHRcdFx0KHU4KURGTFRfRE1BX0NPTU1fUV9ISUdIKGZtYW4tXHUwMDNlc3RhdGUtXHUwMDNlcmV2X2luZm8ubWFqb3IsXG4xNzY5Olx0XHRcdFx0XHRcdCBmbWFuLVx1MDAzZXN0YXRlLVx1MDAzZWRtYV90aHJlc2hfbWF4X2NvbW1xKTtcbjE3NzA6XHRcbjE3NzE6XHRcdFx0Zm1hbi1cdTAwM2VjZmctXHUwMDNlZG1hX2NhbV9udW1fb2ZfZW50cmllcyA9XG4xNzcyOlx0XHRcdERGTFRfRE1BX0NBTV9OVU1fT0ZfRU5UUklFUyhmbWFuLVx1MDAzZXN0YXRlLVx1MDAzZXJldl9pbmZvLm1ham9yKTtcbjE3NzM6XHRcbjE3NzQ6XHRcdFx0Zm1hbi1cdTAwM2VjZmctXHUwMDNlZG1hX3JlYWRfYnVmX3RzaF9jbHJfZW1lciA9XG4xNzc1Olx0XHRcdERGTFRfRE1BX1JFQURfSU5UX0JVRl9MT1coZm1hbi1cdTAwM2VzdGF0ZS1cdTAwM2VkbWFfdGhyZXNoX21heF9idWYpO1xuMTc3NjpcdFxuMTc3NzpcdFx0XHRmbWFuLVx1MDAzZWNmZy1cdTAwM2VkbWFfcmVhZF9idWZfdHNoX2FzcnRfZW1lciA9XG4xNzc4Olx0XHRcdERGTFRfRE1BX1JFQURfSU5UX0JVRl9ISUdIKGZtYW4tXHUwMDNlc3RhdGUtXHUwMDNlZG1hX3RocmVzaF9tYXhfYnVmKTtcbjE3Nzk6XHRcbjE3ODA6XHRcdFx0Zm1hbi1cdTAwM2VjZmctXHUwMDNlZG1hX3dyaXRlX2J1Zl90c2hfY2xyX2VtZXIgPVxuMTc4MTpcdFx0XHRERkxUX0RNQV9XUklURV9JTlRfQlVGX0xPVyhmbWFuLVx1MDAzZXN0YXRlLVx1MDAzZWRtYV90aHJlc2hfbWF4X2J1Zik7XG4xNzgyOlx0XG4xNzgzOlx0XHRcdGZtYW4tXHUwMDNlY2ZnLVx1MDAzZWRtYV93cml0ZV9idWZfdHNoX2FzcnRfZW1lciA9XG4xNzg0Olx0XHRcdERGTFRfRE1BX1dSSVRFX0lOVF9CVUZfSElHSChmbWFuLVx1MDAzZXN0YXRlLVx1MDAzZWRtYV90aHJlc2hfbWF4X2J1Zik7XG4xNzg1Olx0XG4xNzg2Olx0XHRcdGZtYW4tXHUwMDNlY2ZnLVx1MDAzZWRtYV9heGlfZGJnX251bV9vZl9iZWF0cyA9XG4xNzg3Olx0XHRcdERGTFRfQVhJX0RCR19OVU1fT0ZfQkVBVFM7XG4xNzg4Olx0XHR9XG4xNzg5Olx0XG4xNzkwOlx0XHRyZXR1cm4gMDtcbjE3OTE6XHRcbjE3OTI6XHRlcnJfZm1fc29jX3NwZWNpZmljOlxuMTc5MzpcdFx0a2ZyZWUoZm1hbi1cdTAwM2VjZmcpO1xuMTc5NDpcdGVycl9mbV9kcnY6XG4xNzk1Olx0XHRrZnJlZShmbWFuLVx1MDAzZXN0YXRlKTtcbjE3OTY6XHRcdHJldHVybiAtRUlOVkFMO1xuMTc5NzpcdH1cbjE3OTg6XHRcbjE3OTk6XHRzdGF0aWMgaW50IGZtYW5fcmVzZXQoc3RydWN0IGZtYW4gKmZtYW4pXG4xODAwOlx0e1xuMTgwMTpcdFx0dTMyIGNvdW50O1xuMTgwMjpcdFx0aW50IGVyciA9IDA7XG4xODAzOlx0XG4xODA0Olx0XHRpZiAoZm1hbi1cdTAwM2VzdGF0ZS1cdTAwM2VyZXZfaW5mby5tYWpvciBcdTAwM2MgNikge1xuMTgwNTpcdFx0XHRpb3dyaXRlMzJiZShGUE1fUlNUQ19GTV9SRVNFVCwgXHUwMDI2Zm1hbi1cdTAwM2VmcG1fcmVncy1cdTAwM2VmbV9yc3RjKTtcbjE4MDY6XHRcdFx0LyogV2FpdCBmb3IgcmVzZXQgY29tcGxldGlvbiAqL1xuMTgwNzpcdFx0XHRjb3VudCA9IDEwMDtcbjE4MDg6XHRcdFx0ZG8ge1xuMTgwOTpcdFx0XHRcdHVkZWxheSgxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NjQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGViYXNlIGFuZCBJIHNlZSBgZm1hbl9jb25maWdgIGdldHRpbmcgaW52b2tlZCBmcm9tIGBmbWFuX3Byb2JlYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgc2VlbXMgbGlrZSB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yLCBvciBhdCBsZWFzdCBpbnZvbHZlZCBpbiwgcHVsbGluZyBpbiBjb25maWd1cmF0aW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSB0aGUgc291cmNlIG9mIHdoYXRldmVyIGlzc3VlIEkmIzM5O20gY2hhc2luZywgc28gbGV0JiMzOTtzIGp1bXAgcmlnaHQgaW50byBgZm1hbl9wcm9iZWAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMuIElzIGl0IGxvYWRpbmcgdGhlIGNvbmZpZz8gTWVyZ2luZyBpdD8gVmFsaWRhdGluZyBpdD8gQW5kLCBpbXBvcnRhbnRseSwgKmhvdyogaXMgdGhpcyBjb25maWd1cmF0aW9uIGludGVyYWN0aW5nIHdpdGggdGhlIHByb2JlPyBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODI2Olx0c3RhdGljIGludCBmbWFuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbjI4Mjc6XHR7XG4yODI4Olx0XHRzdHJ1Y3QgZm1hbiAqZm1hbjtcbjI4Mjk6XHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbjI4MzA6XHRcdGludCBlcnI7XG4yODMxOlx0XG4yODMyOlx0XHRkZXYgPSBcdTAwMjZvZl9kZXYtXHUwMDNlZGV2O1xuMjgzMzpcdFxuMjgzNDpcdFx0Zm1hbiA9IHJlYWRfZHRzX25vZGUob2ZfZGV2KTtcbjI4MzU6XHRcdGlmIChJU19FUlIoZm1hbikpXG4yODM2Olx0XHRcdHJldHVybiBQVFJfRVJSKGZtYW4pO1xuMjgzNzpcdFxuMjgzODpcdFx0ZXJyID0gZm1hbl9jb25maWcoZm1hbik7XG4yODM5Olx0XHRpZiAoZXJyKSB7XG4yODQwOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDslczogRk1hbiBjb25maWcgZmFpbGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4yODQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjg0MjpcdFx0fVxuMjg0MzpcdFxuMjg0NDpcdFx0aWYgKGZtYW5faW5pdChmbWFuKSAhPSAwKSB7XG4yODQ1Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDslczogRk1hbiBpbml0IGZhaWxlZFxcblwmIzM0OywgX19mdW5jX18pO1xuMjg0NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI4NDc6XHRcdH1cbjI4NDg6XHRcbjI4NDk6XHRcdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9PSAwKSB7XG4yODUwOlx0XHRcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0RNQV9CVVNfRVJST1IsIGZhbHNlKTtcbjI4NTE6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfRE1BX1JFQURfRUNDLCBmYWxzZSk7XG4yODUyOlx0XHRcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0RNQV9TWVNURU1fV1JJVEVfRUNDLCBmYWxzZSk7XG4yODUzOlx0XHRcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0RNQV9GTV9XUklURV9FQ0MsIGZhbHNlKTtcbjI4NTQ6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfRE1BX1NJTkdMRV9QT1JUX0VDQywgZmFsc2UpO1xuMjg1NTpcdFx0XHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9GUE1fU1RBTExfT05fVEFTS1MsIGZhbHNlKTtcbjI4NTY6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfRlBNX1NJTkdMRV9FQ0MsIGZhbHNlKTtcbjI4NTc6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfRlBNX0RPVUJMRV9FQ0MsIGZhbHNlKTtcbjI4NTg6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfUU1JX1NJTkdMRV9FQ0MsIGZhbHNlKTtcbjI4NTk6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfUU1JX0RPVUJMRV9FQ0MsIGZhbHNlKTtcbjI4NjA6XHRcdFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sXG4yODYxOlx0XHRcdFx0XHQgICBGTUFOX0VYX1FNSV9ERVFfRlJPTV9VTktOT1dOX1BPUlRJRCwgZmFsc2UpO1xuMjg2MjpcdFx0XHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9CTUlfTElTVF9SQU1fRUNDLCBmYWxzZSk7XG4yODYzOlx0XHRcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0JNSV9TVE9SQUdFX1BST0ZJTEVfRUNDLFxuMjg2NDpcdFx0XHRcdFx0ICAgZmFsc2UpO1xuMjg2NTpcdFx0XHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9CTUlfU1RBVElTVElDU19SQU1fRUNDLCBmYWxzZSk7XG4yODY2Olx0XHRcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0JNSV9ESVNQQVRDSF9SQU1fRUNDLCBmYWxzZSk7XG4yODY3Olx0XHR9XG4yODY4Olx0XG4yODY5Olx0XHRkZXZfc2V0X2RydmRhdGEoZGV2LCBmbWFuKTtcbjI4NzA6XHRcbjI4NzE6XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtGTWFuJWQgcHJvYmVkXFxuXCYjMzQ7LCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuaWQpO1xuMjg3MjpcdFxuMjg3MzpcdFx0cmV0dXJuIDA7XG4yODc0Olx0fVxuMjg3NTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA1OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDg5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYCDigJMgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhbHRlcmluZyBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNsZWFyIGluZGljYXRvciBvZiBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZyB0byBleHBsb3JlLiBUaGUgY29yZSBxdWVzdGlvbiBpcywgY2FuIHN5emthbGxlciBldmVuICpyZWFjaCogdGhpcyBjb2RlPwoKWWVzLCBhYnNvbHV0ZWx5LiBTeXprYWxsZXIgY2FuIGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGRldmljZSB0cmVlIG5vZGVzLiBTcGVjaWZpY2FsbHksIGlmIHN5emthbGxlciBpbmplY3RzIGEgZGV2aWNlIHRyZWUgbm9kZSBtYXRjaGluZyAmIzM0O2ZzbCxmbWFuJiMzNDssIHRoYXQmIzM5O2xsIHRyaWdnZXIgYGZtYW5fcHJvYmVgLiBBbmQgYGZtYW5fcHJvYmVgIGxlYWRzIGRpcmVjdGx5IHRvIHRoZSBleGVjdXRpb24gb2YgYHJlYWRfZHRzX25vZGVgLiBUaGF0JiMzOTtzIHRoZSBnYXRld2F5ISBJdCYjMzk7bGwgYXR0ZW1wdCB0byByZWFkIHByb3BlcnRpZXMsIGFuZCAqaWYqIGl0IGZhaWxzLCB3ZSBoaXQgdGhlIGVycm9yIHBhdGhzIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcy4KCk5vdywgYHJlYWRfZHRzX25vZGVgIGl0c2VsZiBjYWxscyBvdGhlciBmdW5jdGlvbnMsIHN1Y2ggYXMgYG9mX2Nsa19nZXRgLCBgY2xrX2dldF9yYXRlYCwgYG9mX2FkZHJlc3NfdG9fcmVzb3VyY2VgLCBhbmQgYGRldm1faW9yZW1hcGAuIFNvIGlmIHN5emthbGxlciBpbmplY3RzIGEgRFQgbm9kZSwgd2UgY2FuIHByb3ZpZGUgZHVtbXkgY2xvY2sgYW5kIG1lbW9yeSByZXNvdXJjZXMuIEhvd2V2ZXIsIGBmbWFuX2NvbmZpZ2AgYW5kIGBmbWFuX2luaXRgIHdpbGwgZXZlbnR1YWxseSB0cnkgdG8gYWNjZXNzIHRoZSBtZW1vcnkgYGRldm1faW9yZW1hcGAgaXMgaGFuZGxpbmcuIElmIGl0JiMzOTtzIGp1c3QgZHVtbXkgUkFNLCB3ZSB3b24mIzM5O3QgY3Jhc2gsIGJ1dCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIG9mIGl0IHJlYWRpbmcgZ2FyYmFnZSB3aGljaCBjb3VsZCBsZWFkIHRvIGludGVyZXN0aW5nIGJlaGF2aW91ci4gQW5kIHdoYXQgaGFwcGVucyB3aGVuIGBkZXZtX2lvcmVtYXBgIGlzIHVzZWQgd2l0aCBkdW1teSBtZW1vcnk/IFN5emthbGxlciBjYW4gbWFwIGFyYml0cmFyeSBwaHlzaWNhbCBhZGRyZXNzZXMhIElmIGl0IG1hcHMgUkFNLCBpdCB3aWxsIHJlYWQvd3JpdGUgUkFNLiBJZiBpdCBtYXBzIHVubWFwcGVkIHBoeXNpY2FsIGFkZHJlc3NlcywgdGhlcmUgY291bGQgYmUgYSBidXMgZXJyb3Igb3IgTUNFLiBTeXprYWxsZXIgcnVucyBvbiB4ODZfNjQsIGFybTY0LCBhbmQgcmlzY3Y2NC4KClRoaXMgZHJpdmVyJiMzOTtzIGRlcGVuZGVuY2llcywgYEZTTF9TT0MgfHwgQVJDSF9MQVlFUlNDQVBFIHx8IENPTVBJTEVfVEVTVGAsIG1ha2VzIGl0IGNvbXBpbGFibGUgb24geDg2XzY0IHdpdGggYENPTVBJTEVfVEVTVGAuIFRoaXMgbWVhbnMgdGhhdCBpZiBjb21waWxlZCB3aXRoIGBDT01QSUxFX1RFU1RgLCBpdCBjYW4gYmUgcmVhY2hlZCB2aWEgc3l6a2FsbGVyLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBgQ09ORklHX0ZTTF9GTUFOYC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgYmVjb21lczogaXMgdGhpcyBkcml2ZXIgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoJiMzNDsgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRhbmNlPyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHVucmVhY2hhYmxlIGluIEdDRSBvciBRRU1VLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuCgpCdXQgd2FpdCwgdGhpcyBkcml2ZXIgKmlzKiByZWFjaGFibGUgdmlhIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24gdXNpbmcgYHN5el9kZXZfaW5pdGAuIE5vdywgdGhpcyBkcml2ZXIgaXMgaGFyZHdhcmUtc3BlY2lmaWMuIFdlIHVzdWFsbHkgZG9uJiMzOTt0IGZ1enogcmFuZG9tIGhhcmR3YXJlIGRyaXZlcnMgdW5sZXNzIHRoZXkgYXJlIGVtdWxhdGVkIG9yIGFyZSBzcGVjaWZpY2FsbHkgdGFyZ2V0ZWQuCgpMZXQmIzM5O3MgbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhlIHBhdGNoLiBJdCBjaGFuZ2VzIGBremFsbG9jX29iamAgdG8gYGRldm1fa3phbGxvY2AuIEl0IGFkZHMgYGNsa19wdXQoY2xrKWAuIEl0IHJlbW92ZXMgYGtmcmVlKGZtYW4pYCBpbiBlcnJvciBwYXRocy4gT2theSwgdGhhdCBzY3JlYW1zIHByb2JlIGVycm9yIHBhdGggY2xlYW51cCB0byBtZS4gSXQmIzM5O3MgYWJvdXQgcHJldmVudGluZyBtZW1vcnkgbGVha3MuIEl0IGNvdWxkIGJlIGZpeGluZyBhIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHksIG9yIGp1c3QgaW1wcm92aW5nIHRoZSBjb2RlIHdpdGggYGRldm1fa3phbGxvY2AuCgpDb25zaWRlcmluZyBhbGwgdGhpcywgaXMgaXQgd29ydGggZnV6emluZz8gWWVzLCBJIHRoaW5rIHNvLiBJZiB3ZSBzYXkgJiMzNDt5ZXMsJiMzNDsgd2UgbmVlZCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBGb3IgYEZvY3VzU3ltYm9sc2AsIHdlJiMzOTtsbCBpbmNsdWRlIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYC4gRm9yIGBFbmFibGVDb25maWdzYCwgd2UmIzM5O2xsIHNldCBgRlNMX0ZNQU5gLiBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgYEZTTF9GTUFOYCBpcyBlbm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU0xfRk1BTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzoyOmNvbmZpZyBGU0xfRk1BTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Rk1hbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgRlNMX0ZNQU4qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgYEZTTF9GTUFOYCBoYXMgc29tZSBpbnRlcmVzdGluZyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIG5vdCBqdXN0IGEgc3RyYWlnaHRmb3J3YXJkIGVuYWJsZS9kaXNhYmxlLiBJdCBzZWVtcyBpdCByZWxpZXMgb24gYEZTTF9TT0NgLCBgQVJDSF9MQVlFUlNDQVBFYCwgKipvcioqIHRoZSBgQ09NUElMRV9URVNUYCBvcHRpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGlzIG1lYW5zIEkgY2FuIHBvdGVudGlhbGx5IGVuYWJsZSBgRlNMX0ZNQU5gIGV2ZW4gaWYgdGhlIHByaW1hcnkgYXJjaGl0ZWN0dXJhbCByZXF1aXJlbWVudHMgYXJlbiYjMzk7dCBtZXQsIHNwZWNpZmljYWxseSBpZiBgQ09NUElMRV9URVNUYCBpcyBhY3RpdmUsIHdoaWNoIGlzIG9mdGVuIHVzZWQgZm9yIHRlc3RpbmcgY29uZmlndXJhdGlvbnMuIAoKTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGlzOiB0aGlzIGlzbiYjMzk7dCBuZWNlc3NhcmlseSB0aGUgb25seSBjb25kaXRpb24gYWZmZWN0aW5nIGl0cyBiZWhhdmlvci4gSnVzdCBiZWNhdXNlIGl0ICpjYW4qIGJlIGVuYWJsZWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIGRvZXNuJiMzOTt0IG1lYW4gdGhvc2UgYXJlICphbGwqIHRoZSBjb25kaXRpb25zLiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzLCBwZXJoYXBzIGluZGlyZWN0IG9uZXMsIG9yIGNvbnN0cmFpbnRzIG9uIG90aGVyIHZhcmlhYmxlcyB0aGF0IGFmZmVjdCBpdHMgZnVsbCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgYWJvdXQgaG93IGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc9Mj1jb25maWcgRlNMX0ZNQU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0ZNYW4gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBGU0xfU09DIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctNS1cdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc9MTQ9Y29uZmlnIERQQUFfRVJSQVRVTV9BMDUwMzg1XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTE1LVx0Ym9vbFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gQVJNNjQgXHUwMDI2XHUwMDI2IEZTTF9EUEFBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTE3LVx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDQzCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogOTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIEZTTF9GTUFOIERyaXZlcioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBGU0xfRk1BTmAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGNvbnNpZGVyIGhlcmUuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBwYXRjaCBhY3R1YWxseSB3b3J0aCBmdXp6aW5nPyBJdCBzZWVtcyBsaWtlIGl0IHByaW1hcmlseSBhZGRyZXNzZXMgcHJvYmUgZXJyb3IgcGF0aHMuIEhvd2V2ZXIsIFN5emthbGxlciBvZnRlbiB0YXJnZXRzIHRoZXNlIGFyZWFzIGVmZmVjdGl2ZWx5IHRocm91Z2ggZmF1bHQgaW5qZWN0aW9uIG9yIGJ5IGZlZWRpbmcgaW52YWxpZCBEZXZpY2UgVHJlZSAoRFQpIHByb3BlcnRpZXMuIElmIFN5emthbGxlciBjYW4gbWFuaXB1bGF0ZSB0aGUgRFQgbm9kZSwgdGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiB0aGVzZSBlcnJvciBwYXRocyB3aWxsIGJlIGhpdC4KCkxldCBtZSBjb25maXJtIHRoYXQgYGZtYW5fcHJvYmVgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCBhbmQgeWVzLCBpdCYjMzk7cyBhIHN0YW5kYXJkIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmdW5jdGlvbi4gQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBsZWFuIHRvd2FyZHMgc2V0dGluZyBgV29ydGhGdXp6aW5nPXRydWVgLgoKTXkgZm9jdXMgc3ltYm9scyB3aWxsIGJlOiBgcmVhZF9kdHNfbm9kZWAsIGBmbWFuX2NvbmZpZ2AsIGFuZCB0aGUgb2J2aW91cyBgZm1hbl9wcm9iZWAuIEZvciBjb25maWd1cmF0aW9uLCBgRlNMX0ZNQU5gIGlzIHRoZSBrZXkuCgpIb2xkIG9uLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYHJlYWRfZHRzX25vZGVgIGlzIHN0YXRpYy4gWWVzLCBpdCBpczogYHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpYC4gQW5kIGBmbWFuX2NvbmZpZ2AgaXMgYWxzbyBzdGF0aWMsIHNvIEkmIzM5O20gY29uZmlkZW50IGFib3V0IGluY2x1ZGluZyBgcmVhZF9kdHNfbm9kZWAgYW5kIGBmbWFuX2NvbmZpZ2AgYXMgZm9jdXMgc3ltYm9scy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIEl0IHNlZW1zIHRoZSBtYWluIGNoYW5nZXMgaW52b2x2ZSBtZW1vcnkgYW5kIGNsb2NrIG1hbmFnZW1lbnQgaW4gZXJyb3IgcGF0aHMuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgY2hhbmdpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGZtYW5gIGZyb20gYGt6YWxsb2NgIHRvIGBkZXZtX2t6YWxsb2NgIGFuZCBmaXhpbmcgc29tZSBjbG9jayBsZWFrcyBieSBhZGRpbmcgYGNsa19wdXQoY2xrKWAuIFRoZSBjb2RlIGlzIG1ha2luZyB0aGUgYXBwcm9wcmlhdGUgdXBkYXRlcyB0byB0aGUgZnJlZSBjYWxscyB0byBjb21wbGVtZW50IHRoaXMgY2hhbmdlLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGltcHJvdmVtZW50LCBhIGdvb2QgY2xlYW51cCBvZiB0aGUgZXJyb3IgcGF0aHMsIGFuZCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpZiB0aGUgZHJpdmVyIHByb2Jlcy4gSSYjMzk7bSBnb2luZyB3aXRoIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpTbywgdG8gcmVpdGVyYXRlLCBjb25maWd1cmF0aW9uczogYEZTTF9GTUFOYDsgZm9jdXMgc3ltYm9sczogYHJlYWRfZHRzX25vZGVgLCBgZm1hbl9jb25maWdgLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoZSBkcml2ZXIgaXMgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vYC4gSXMgdGhlcmUgYSBwYXJlbnQgb3IgYnJvYWRlciBjb25maWd1cmF0aW9uIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkmIzM5O2xsIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWdgIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9NjI9c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjYzOnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy02NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqS2NvbmZpZyBEZXBlbmRlbmN5IENoZWNrKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSBmb3IgRnJlZXNjYWxlIEV0aGVybmV0IGRyaXZlcnMsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWdgLiBCZWZvcmUgSSBkaXZlIGludG8gYW55IGNvZGUsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrIGFuZCB0aGUgb3ZlcmFsbCBzeXN0ZW0gYnVpbGQuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBLY29uZmlnIHN5bWJvbHMsIGFuZCBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIGFzIHdlbGwuIEkgbmVlZCB0byBrbm93IGlmIGVuYWJsaW5nIHRoaXMgcGFydGljdWxhciBkcml2ZXIgaGFzIGFueSBjYXNjYWRpbmcgZWZmZWN0cy4gRnJvbSB0aGVyZSwgSSB3aWxsIGRldGVybWluZSB0aGUgc2NvcGUgb2YgYW55IHBvdGVudGlhbCBjaGFuZ2VzIEkgbWF5IHdpc2ggdG8gbWFrZSwgd2hldGhlciB0aGV5IGJlIG1vZGlmaWNhdGlvbnMsIGFkZGl0aW9ucyBvciByZW1vdmFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9WRU5ET1JfRlJFRVNDQUxFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjY6Y29uZmlnIE5FVF9WRU5ET1JfRlJFRVNDQUxFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtGcmVlc2NhbGUgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM0NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFzc2Vzc2luZyBGcmVlc2NhbGUgVmVuZG9yIFN1cHBvcnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB3aGV0aGVyIHdlIGFjdHVhbGx5IG5lZWQgdG8gaW5jbHVkZSBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldHdvcmstcmVsYXRlZCBjb2RlIGhlcmUsIGxpa2VseSBkZXZpY2UgZHJpdmVycyBvciBzb21lIG5ldHdvcmsgYWJzdHJhY3Rpb24gbGF5ZXIsIGFuZCB0aGF0IHByZXByb2Nlc3NvciBzeW1ib2wgaXMgc2NyZWFtaW5nICYjMzQ7RnJlZXNjYWxlJiMzNDsgYXQgbWUuIE15IGludGVybmFsIGNoZWNrbGlzdCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyBkb3duIHRoZSBwb3RlbnRpYWwgc2NlbmFyaW9zLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBGcmVlc2NhbGUgKG9yIE5YUCkgU29DPyBBcmUgd2UgdGFyZ2V0aW5nIGEgYm9hcmQgdGhhdCByZWxpZXMgaGVhdmlseSBvbiBGcmVlc2NhbGUmIzM5O3MgbmV0d29ya2luZyBJUD8gT3IgaXMgdGhpcyBqdXN0IGxlZ2FjeSBjb2RlIHRoYXQmIzM5O3MgaGFuZ2luZyBhcm91bmQ/CgpJJiMzOTttIHRoaW5raW5nLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0IGNvdWxkIGJlIHVzZWZ1bCwgb3IgcG9zc2libHkgbmVjZXNzYXJ5LgoKVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgY29udGV4dCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyB2aXRhbCBvciBpZiBpdCYjMzk7cyBkZWFkIGNvZGUganVzdCB3YWl0aW5nIHRvIGJlIHBydW5lZC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB1c2luZyB0b29scywgaWRlbnRpZnkgb3RoZXIgZmlsZXMgdGhhdCBjb3VsZCBiZSBhZmZlY3RlZCBieSBpdCwgYW5kIGRldGVybWluZSB0aGUgZXhhY3QgZnVuY3Rpb25hbGl0eSBjb250cm9sbGVkIGJ5IHRoaXMgZmxhZy4gSXMgaXQganVzdCBhIGRyaXZlciwgYSBQSFkgY29uZmlndXJhdGlvbiwgb3Igc29tZXRoaW5nIG1vcmUgZnVuZGFtZW50YWw/IFRpbWUgdG8gc3RhcnQgdHJhY2luZyBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz02PWNvbmZpZyBORVRfVkVORE9SX0ZSRUVTQ0FMRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTgtXHRkZWZhdWx0IHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjk6XHRkZXBlbmRzIG9uIEZTTF9TT0MgfHwgUVVJQ0NfRU5HSU5FIHx8IENQTTEgfHwgQ1BNMiB8fCBQUENfTVBDNTEyeCB8fCBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMTAtXHRcdCAgIE01MjN4IHx8IE01Mjd4IHx8IE01MjcyIHx8IE01Mjh4IHx8IE01MjB4IHx8IE01MzJ4IHx8IFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtGRUMgZXRoZXJuZXQgY29udHJvbGxlciAob2YgQ29sZEZpcmUgYW5kIHNvbWUgaS5NWCBDUFVzKVwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6MjU6XHRkZXBlbmRzIG9uIChNNTIzeCB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTIweCB8fCBNNTMyeCB8fCBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMjYtXHRcdCAgIEFSQ0hfTVhDIHx8IEFSQ0hfUzMyIHx8IFNPQ19JTVgyOCB8fCBDT01QSUxFX1RFU1QpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yNy1cdGRlZmF1bHQgQVJDSF9NWEMgfHwgU09DX0lNWDI4IGlmIEFSTVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6Mjg6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yOS1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnPTM5PWNvbmZpZyBGRUNfTVBDNTJ4eFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNDAtXHR0cmlzdGF0ZSBcJiMzNDtGRUMgTVBDNTJ4eCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjQxOlx0ZGVwZW5kcyBvbiBQUENfTVBDNTJ4eCBcdTAwMjZcdTAwMjYgUFBDX0JFU1RDT01NXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy00Mi1cdHNlbGVjdCBDUkMzMlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnPTUwPWNvbmZpZyBGRUNfTVBDNTJ4eF9NRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7RkVDIE1QQzUyeHggTURJTyBidXMgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo1MjpcdGRlcGVuZHMgb24gRkVDX01QQzUyeHhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTUzLVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9NzE9Y29uZmlnIEZTTF9YR01BQ19NRElPXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNzMtXHRzZWxlY3QgUEhZTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo3NDpcdGRlcGVuZHMgb24gT0ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTc1LVx0c2VsZWN0IE9GX01ESU9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz04MD1jb25maWcgVUNDX0dFVEhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTgxLVx0dHJpc3RhdGUgXCYjMzQ7RnJlZXNjYWxlIFFFIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjgyOlx0ZGVwZW5kcyBvbiBRVUlDQ19FTkdJTkUgXHUwMDI2XHUwMDI2IFBQQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy04My1cdHNlbGVjdCBGU0xfUFFfTURJT1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnPTg5PWNvbmZpZyBVR0VUSF9UWF9PTl9ERU1BTkRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtUcmFuc21pdCBvbiBEZW1hbmQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6OTE6XHRkZXBlbmRzIG9uIFVDQ19HRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy05Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnPTkzPWNvbmZpZyBHSUFORkFSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy05NC1cdHRyaXN0YXRlIFwmIzM0O0dpYW5mYXIgRXRoZXJuZXRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjk1Olx0ZGVwZW5kcyBvbiBIQVNfRE1BXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy05Ni1cdHNlbGVjdCBGU0xfUFFfTURJT1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY3NAoJCQkJCQkJb3V0cHV0OiAxMDkKCQkJCQkJCXRob3VnaHRzOiAzNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRnJlZXNjYWxlIE5ldHdvcmtpbmcgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgaGluZ2VzIG9uIGBDT01QSUxFX1RFU1RgIGJlaW5nIGVuYWJsZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBCdXQsIGV2ZW4gaWYgYENPTVBJTEVfVEVTVGAgaXNuJiMzOTt0IGVuYWJsZWQsIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgYWxzbyBoYXMgdGhlc2UgZGVwZW5kZW5jaWVzOiBgRlNMX1NPQyB8fCBRVUlDQ19FTkdJTkUgfHwgQ1BNMSB8fCBDUE0yIHx8IFBQQ19NUEM1MTJ4IHx8IE01MjN4IHx8IE01Mjd4IHx8IE01MjcyIHx8IE01Mjh4IHx8IE01MjB4IHx8IE01MzJ4IHx8IEFSQ0hfTVhDIHx8IEFSQ0hfUzMyIHx8IFNPQ19JTVgyOCB8fCBDT01QSUxFX1RFU1RgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGRpdmVyc2Ugc2V0IG9mIGFyY2hpdGVjdHVyZXMhIFNvLCBpZiBgQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLCB0aGVuIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgKmNhbiogYmUgZW5hYmxlZC4gSSB3aWxsIGVuYWJsZSBib3RoIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgYW5kIGBGU0xfRk1BTmAuCgpOb3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBmb3IgdGhlIGRyaXZlciBpdHNlbGYsIHNvIEkgbmVlZCB0byBjaGVjayBgRlNMX0ZNQU5gLiBZZXMsIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZHJpdmVyIGlzIGluZGVlZCBgRlNMX0ZNQU5gLiBUaGF0JiMzOTtzIGdvb2QuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBKU09OIGNvbmZpZ3VyYXRpb24uIFRoZSBnb2FsIGhlcmUgaXMgY2xlYXJseSBmdXp6aW5nIHRoZSBGcmVlc2NhbGUgRk1hbiBkcml2ZXIuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHRydWUsIHdoaWNoIHZhbGlkYXRlcyB0aGUgZWZmb3J0LiBUaGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBpbmNsdWRlcyBgcmVhZF9kdHNfbm9kZWAgYW5kIGBmbWFuX2NvbmZpZ2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGV5JiMzOTtyZSBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIGRldmljZSB0cmVlIHBhcnNpbmcgYW5kIGNvbmZpZ3VyYXRpb24uIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGFscmVhZHkgc2V0LCB3aGljaCBhbGlnbnMgd2l0aCBteSBmaW5kaW5nczogYE5FVF9WRU5ET1JfRlJFRVNDQUxFYCBhbmQgYEZTTF9GTUFOYC4gVGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBpcywgdGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbmQgY2xvY2sgbGVha3MgaW4gdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlciwgYW5kIHRoZXNlIHBhdGhzIGNhbiBiZSB0ZXN0ZWQgdGhyb3VnaCBzeXprYWxsZXIgdmlhIHBsYXRmb3JtIGRldmljZSBhbmQgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLgoKVGhpbmtpbmcgYWJvdXQgdGhlIGNvZGUsIGBmbWFuX3Byb2JlYCBzZWVtcyBsaWtlIGEgZ29vZCBmb2N1cyBzeW1ib2wsIHRvby4gQmVjYXVzZSBpdCBhbHNvIGNhbGxzIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYC4gU28sIEkgd2lsbCBhZGQgYGZtYW5fcHJvYmVgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfRlJFRVNDQUxFJiMzNDssCiAgICAmIzM0O0ZTTF9GTUFOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVhZF9kdHNfbm9kZSYjMzQ7LAogICAgJiMzNDtmbWFuX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtmbWFuX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbmQgY2xvY2sgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGhzIG9mIHRoZSBGcmVlc2NhbGUgRk1hbiBkcml2ZXIuIFRoZXNlIHBhdGhzIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyIHZpYSBwbGF0Zm9ybSBkZXZpY2UgYW5kIGRldmljZSB0cmVlIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9GUkVFU0NBTEUmIzM0OywKICAgICYjMzQ7RlNMX0ZNQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWFkX2R0c19ub2RlJiMzNDssCiAgICAmIzM0O2ZtYW5fY29uZmlnJiMzNDssCiAgICAmIzM0O2ZtYW5fcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFuZCBjbG9jayBsZWFrcyBpbiB0aGUgcHJvYmUgZXJyb3IgcGF0aHMgb2YgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlci4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBieSBzeXprYWxsZXIgdmlhIHBsYXRmb3JtIGRldmljZSBhbmQgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzc6MjkuNzMwMTY2NzM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMjUxODY0MjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfRlJFRVNDQUxFXCIsXG4gICAgXCJGU0xfRk1BTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlYWRfZHRzX25vZGVcIixcbiAgICBcImZtYW5fY29uZmlnXCIsXG4gICAgXCJmbWFuX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFuZCBjbG9jayBsZWFrcyBpbiB0aGUgcHJvYmUgZXJyb3IgcGF0aHMgb2YgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlci4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBieSBzeXprYWxsZXIgdmlhIHBsYXRmb3JtIGRldmljZSBhbmQgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNzoyOS43MzAxNzIyNTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDA0NjEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4OGUwNGExNWJiNTVlMjNkNTUxMTg5MmQ3MzYwYjQ0NTAwODQ3NGJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMDk6Mzc6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXFxuaW5kZXggMDEzMjczYTJkZTMyZjIuLjIzYjkzOGFmZTE3YTllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xcbkBAIC0xNzkzLDggKzE3OTMsNiBAQCBzdGF0aWMgaW50IGZtYW5fY29uZmlnKHN0cnVjdCBmbWFuICpmbWFuKVxcbiBcXHRrZnJlZShmbWFuLVxcdTAwM2VjZmcpO1xcbiBlcnJfZm1fZHJ2OlxcbiBcXHRrZnJlZShmbWFuLVxcdTAwM2VzdGF0ZSk7XFxuLWVycl9mbV9zdGF0ZTpcXG4tXFx0a2ZyZWUoZm1hbik7XFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuIFxcbkBAIC0yNjk3LDcgKzI2OTUsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbiBcXHRzdHJ1Y3QgY2xrICpjbGs7XFxuIFxcdHUzMiBjbGtfcmF0ZTtcXG4gXFxuLVxcdGZtYW4gPSBremFsbG9jX29iaigqZm1hbik7XFxuK1xcdGZtYW4gPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBzaXplb2YoKmZtYW4pLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFmbWFuKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuQEAgLTI3MzYsMTEgKzI3MzQsMTMgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4gXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogRmFpbGVkIHRvIGRldGVybWluZSBGTSVkIGNsb2NrIHJhdGVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdF9fZnVuY19fLCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmlkKTtcXG4tXFx0XFx0Z290byBmbWFuX25vZGVfcHV0O1xcbitcXHRcXHRnb3RvIGNsa19wdXQ7XFxuIFxcdH1cXG4gXFx0LyogUm91bmRpbmcgdG8gTUh6ICovXFxuIFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuY2xrX2ZyZXEgPSBESVZfUk9VTkRfVVAoY2xrX3JhdGUsIDEwMDAwMDApO1xcbiBcXG4rXFx0Y2xrX3B1dChjbGspO1xcbitcXG4gXFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZm1fbm9kZSwgXFxcImZzbCxxbWFuLWNoYW5uZWwtcmFuZ2VcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJhbmdlWzBdLCAyKTtcXG4gXFx0aWYgKGVycikge1xcbkBAIC0yNzU3LDcgKzI3NTcsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbiBcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBjb3VsZCBub3QgZmluZCBNVVJBTSBub2RlXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRfX2Z1bmNfXyk7XFxuLVxcdFxcdGdvdG8gZm1hbl9mcmVlO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG11cmFtX25vZGUsIDAsXFxuQEAgLTI3NjYsNyArMjc2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXFxuIFxcdFxcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKCkgPSAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0X19mdW5jX18sIGVycik7XFxuLVxcdFxcdGdvdG8gZm1hbl9mcmVlO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiBcXHR9XFxuIFxcbiBcXHRvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTtcXG5AQCAtMjc3Niw3ICsyNzc2LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0X19mdW5jX18sIGlycSwgZXJyKTtcXG4tXFx0XFx0Z290byBmbWFuX2ZyZWU7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEgIT0gMCkge1xcbkBAIC0yNzg2LDcgKzI3ODYsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRfX2Z1bmNfXywgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLCBlcnIpO1xcbi1cXHRcXHRcXHRnb3RvIGZtYW5fZnJlZTtcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0yNzk0LDcgKzI3OTQsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbiBcXHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihiYXNlX2FkZHIpO1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBkZXZtX2lvcmVtYXAoKSBmYWlsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tXFx0XFx0Z290byBmbWFuX2ZyZWU7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcdH1cXG4gXFxuIFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuYmFzZV9hZGRyID0gYmFzZV9hZGRyO1xcbkBAIC0yODA2LDcgKzI4MDYsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IG9mX3BsYXRmb3JtX3BvcHVsYXRlKCkgZmFpbGVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRfX2Z1bmNfXyk7XFxuLVxcdFxcdGdvdG8gZm1hbl9mcmVlO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiBcXHR9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0RQQUFfRVJSQVRVTV9BMDUwMzg1XFxuQEAgLTI4MTgsOCArMjgxOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXFxuIFxcbiBmbWFuX25vZGVfcHV0OlxcbiBcXHRvZl9ub2RlX3B1dChmbV9ub2RlKTtcXG4tZm1hbl9mcmVlOlxcbi1cXHRrZnJlZShmbWFuKTtcXG4rY2xrX3B1dDpcXG4rXFx0Y2xrX3B1dChjbGspO1xcbiBcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNzozMC4yMjQ4OTc4NDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTc1NzEyMzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX0ZSRUVTQ0FMRVwiLFxuICAgIFwiRlNMX0ZNQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWFkX2R0c19ub2RlXCIsXG4gICAgXCJmbWFuX2NvbmZpZ1wiLFxuICAgIFwiZm1hbl9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG1lbW9yeSBhbmQgY2xvY2sgbGVha3MgaW4gdGhlIHByb2JlIGVycm9yIHBhdGhzIG9mIHRoZSBGcmVlc2NhbGUgRk1hbiBkcml2ZXIuIFRoZXNlIHBhdGhzIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyIHZpYSBwbGF0Zm9ybSBkZXZpY2UgYW5kIGRldmljZSB0cmVlIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ODhlMDRhMTViYjU1ZTIzZDU1MTE4OTJkNzM2MGI0NDUwMDg0NzRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjIgMDk6Mzc6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcbmluZGV4IDAxMzI3M2EyZGUzMmYyLi4yM2I5MzhhZmUxN2E5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXG5AQCAtMTc5Myw4ICsxNzkzLDYgQEAgc3RhdGljIGludCBmbWFuX2NvbmZpZyhzdHJ1Y3QgZm1hbiAqZm1hbilcbiBcdGtmcmVlKGZtYW4tXHUwMDNlY2ZnKTtcbiBlcnJfZm1fZHJ2OlxuIFx0a2ZyZWUoZm1hbi1cdTAwM2VzdGF0ZSk7XG4tZXJyX2ZtX3N0YXRlOlxuLVx0a2ZyZWUoZm1hbik7XG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG5AQCAtMjY5Nyw3ICsyNjk1LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiBcdHN0cnVjdCBjbGsgKmNsaztcbiBcdHUzMiBjbGtfcmF0ZTtcbiBcbi1cdGZtYW4gPSBremFsbG9jX29iaigqZm1hbik7XG4rXHRmbWFuID0gZGV2bV9remFsbG9jKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIHNpemVvZigqZm1hbiksIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFmbWFuKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbkBAIC0yNzM2LDExICsyNzM0LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCIlczogRmFpbGVkIHRvIGRldGVybWluZSBGTSVkIGNsb2NrIHJhdGVcXG5cIixcbiBcdFx0XHRfX2Z1bmNfXywgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlkKTtcbi1cdFx0Z290byBmbWFuX25vZGVfcHV0O1xuK1x0XHRnb3RvIGNsa19wdXQ7XG4gXHR9XG4gXHQvKiBSb3VuZGluZyB0byBNSHogKi9cbiBcdGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5jbGtfZnJlcSA9IERJVl9ST1VORF9VUChjbGtfcmF0ZSwgMTAwMDAwMCk7XG4gXG4rXHRjbGtfcHV0KGNsayk7XG4rXG4gXHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShmbV9ub2RlLCBcImZzbCxxbWFuLWNoYW5uZWwtcmFuZ2VcIixcbiBcdFx0XHRcdFx0IFx1MDAyNnJhbmdlWzBdLCAyKTtcbiBcdGlmIChlcnIpIHtcbkBAIC0yNzU3LDcgKzI3NTcsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwiJXM6IGNvdWxkIG5vdCBmaW5kIE1VUkFNIG5vZGVcXG5cIixcbiBcdFx0XHRfX2Z1bmNfXyk7XG4tXHRcdGdvdG8gZm1hbl9mcmVlO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuIFxuIFx0ZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShtdXJhbV9ub2RlLCAwLFxuQEAgLTI3NjYsNyArMjc2Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwiJXM6IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoKSA9ICVkXFxuXCIsXG4gXHRcdFx0X19mdW5jX18sIGVycik7XG4tXHRcdGdvdG8gZm1hbl9mcmVlO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuIFxuIFx0b2Zfbm9kZV9wdXQobXVyYW1fbm9kZSk7XG5AQCAtMjc3Niw3ICsyNzc2LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcIiVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCIsXG4gXHRcdFx0X19mdW5jX18sIGlycSwgZXJyKTtcbi1cdFx0Z290byBmbWFuX2ZyZWU7XG4rXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXHR9XG4gXG4gXHRpZiAoZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEgIT0gMCkge1xuQEAgLTI3ODYsNyArMjc4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwiJXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcXG5cIixcbiBcdFx0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSwgZXJyKTtcbi1cdFx0XHRnb3RvIGZtYW5fZnJlZTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMjc5NCw3ICsyNzk0LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiBcdGlmIChJU19FUlIoYmFzZV9hZGRyKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGJhc2VfYWRkcik7XG4gXHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCIlczogZGV2bV9pb3JlbWFwKCkgZmFpbGVkXFxuXCIsIF9fZnVuY19fKTtcbi1cdFx0Z290byBmbWFuX2ZyZWU7XG4rXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXHR9XG4gXG4gXHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuYmFzZV9hZGRyID0gYmFzZV9hZGRyO1xuQEAgLTI4MDYsNyArMjgwNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCIlczogb2ZfcGxhdGZvcm1fcG9wdWxhdGUoKSBmYWlsZWRcXG5cIixcbiBcdFx0XHRfX2Z1bmNfXyk7XG4tXHRcdGdvdG8gZm1hbl9mcmVlO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0fVxuIFxuICNpZmRlZiBDT05GSUdfRFBBQV9FUlJBVFVNX0EwNTAzODVcbkBAIC0yODE4LDggKzI4MTgsOCBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFxuIGZtYW5fbm9kZV9wdXQ6XG4gXHRvZl9ub2RlX3B1dChmbV9ub2RlKTtcbi1mbWFuX2ZyZWU6XG4tXHRrZnJlZShmbWFuKTtcbitjbGtfcHV0OlxuK1x0Y2xrX3B1dChjbGspO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNzozMC4yMjQ4OTk3MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTM4NTQxMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZyZWVzY2FsZSBGTUFOIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNgLiBJdCBzZWVtcyBsaWtlIHRoZXkncmUgbWFraW5nIHNvbWUga2V5IGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIHN3aXRjaGluZyBmcm9tIGBremFsbG9jX29iamAgdG8gYGRldm1fa3phbGxvY2AgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgYGZtYW5gIGRyaXZlciwgd2hpY2ggaXMgYSBnb29kIG1vdmUgZm9yIHByb3BlciBkZXZpY2UgbWFuYWdlZCBtZW1vcnkuIFRoZXkncmUgYWxzbyBlbGltaW5hdGluZyBleHBsaWNpdCBga2ZyZWUoZm1hbilgIGNhbGxzLCBzdWJzdGl0dXRpbmcgdGhlbSB3aXRoIGByZXR1cm4gRVJSX1BUUihlcnIpYCwgYW5kIGFkZGluZyBgY2xrX3B1dChjbGspYCBjYWxscy4gT24gdG9wIG9mIHRoaXMgdGhlcmUgc2VlbXMgdG8gYmUgc29tZSBlcnJvciBoYW5kbGluZyBtb2RpZmljYXRpb25zIHdpdGhpbiBgcmVhZF9kdHNfbm9kZWAuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIGFib3V0IHJlYWNoYWJpbGl0eSDigJMgY2FuIHdlIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBjb2RlPyBJdCdzIGEgRnJlZXNjYWxlIGRyaXZlciwgc28gaXQncyBwcm9iYWJseSB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlLCB0aGUgRnJlZXNjYWxlIEZyYW1lIE1hbmFnZXIuIEluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyBpcyBsaWtlbHkgYW4gaXNzdWUuIFVubGVzcyB0aGVyZSdzIGFuIGVtdWxhdG9yIHNwZWNpZmljYWxseSBmb3IgdGhhdCBoYXJkd2FyZSwgb3IgaXQncyBhIHBsYXRmb3JtIGRyaXZlciwgaXQncyBwcm9iYWJseSBub3QgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmdXp6aW5nIHRlY2huaXF1ZXMuIERldmljZSBUcmVlIG92ZXJsYXlzICptaWdodCogcHJvdmlkZSBhIHBhdGgsIGJ1dCB0aGF0J3Mgbm90IGFsd2F5cyBlYXN5LlxuXG5BaCwgYnV0IHdhaXQsIFN5emthbGxlci4gSXQgKmNhbiogZnV6eiBwbGF0Zm9ybSBkcml2ZXJzIGluIGNlcnRhaW4gc2l0dWF0aW9ucywgbGlrZSBpZiBpdCBjYW4gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIG9yIGlmIGl0J3MgYSBQQ0kgZHJpdmVyLiBUaGlzIG9uZSAqaXMqIGEgcGxhdGZvcm0gZHJpdmVyLiBTeXprYWxsZXIncyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gKGBzeXpfZGV2X2luaXRgIGV0Yy4pIG1pZ2h0IGJlIGFibGUgdG8gaGVscCwgYnV0IHRoYXQgc3VwcG9ydCBjYW4gYmUgYSBiaXQgbGltaXRlZC5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgZm9yIHRoaXMgZHJpdmVyLiBUaGUgRnJlZXNjYWxlIEZNYW4gaXMgdXN1YWxseSBwYXJ0IG9mIERQQUEgKERhdGEgUGF0aCBBY2NlbGVyYXRpb24gQXJjaGl0ZWN0dXJlKSwgd2hpY2ggcG9pbnRzIHRvIFBvd2VyUEMgYW5kIEFSTSBTb0NzIGxpa2UgUW9ySVEuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGRyaXZlciBpcyBkZXBsb3llZC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSBpZiB0aGUgZHJpdmVyIGlzIGJvdW5kIHRvIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGlmIGl0IGlzIGdlbmVyaWNhbGx5IHVzYWJsZS4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBnZXQgc29tZSBpbmZvcm1hdGlvbiBvdXQgb2YgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM3OjM3Ljc2MzQ0MjU2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1MjI5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTTF9GTUFOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc6Mjpjb25maWcgRlNMX0ZNQU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkZNYW4gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzc6MzcuODc3OTcwODkxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MzM2NDEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRlbHZlIGludG8gdGhpcy4gTGV0J3Mgc3RhcnQgYnJlYWtpbmcgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG9mIHRoaXMgbWF0dGVyLiBCZWZvcmUganVtcGluZyB0byBjb25jbHVzaW9ucyBvciBzb2x1dGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBkZXBlbmRlbmNpZXMgYXQgcGxheSBoZXJlLiBXaGF0IGFyZSB0aGUga2V5IGZhY3RvcnMsIHZhcmlhYmxlcywgb3IgY29uZGl0aW9ucyB0aGF0IHRoaXMgd2hvbGUgc2l0dWF0aW9uIGhpbmdlcyB1cG9uPyBXaGF0J3MgdGhlIGJlZHJvY2ssIGFuZCB3aGF0IGFyZSB0aGUgc2NhZmZvbGRpbmcgcGllY2VzPyBJIG5lZWQgdG8gbWFwIHRoZSBjYXVzYWwgcmVsYXRpb25zaGlwcy4gSXQncyB0aW1lIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgbGFuZHNjYXBlIGFuZCBleHBvc2UgaXRzIHVuZGVybHlpbmcgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNzo0MC43NzEzMzc0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODAwODExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZz0yPWNvbmZpZyBGU0xfRk1BTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiRk1hbiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIEZTTF9TT0MgfHwgQVJDSF9MQVlFUlNDQVBFIHx8IENPTVBJTEVfVEVTVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctNS1cXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc9MTQ9Y29uZmlnIERQQUFfRVJSQVRVTV9BMDUwMzg1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xNS1cXHRib29sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzoxNjpcXHRkZXBlbmRzIG9uIEFSTTY0IFxcdTAwMjZcXHUwMDI2IEZTTF9EUEFBXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xNy1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzc6NDAuODM5MzUwOTA4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyMzIzNDU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIGFuZCBQcm9iZSBQb3NzaWJpbGl0aWVzKipcblxuT2theSwgc28gdGhlIGNvbXBpbGF0aW9uIHBhdGggaGluZ2VzIG9uIGEgZmV3IGtleSBkZWZpbmVzOiBgRlNMX1NPQ2AsIGBBUkNIX0xBWUVSU0NBUEVgLCBvciBgQ09NUElMRV9URVNUYC4gQ2xlYXJseSwgaWYgYENPTVBJTEVfVEVTVGAgaXMgc2V0LCBpdCAqY2FuKiBiZSBjb21waWxlZC4gVGhlIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIHdlIGNhbiBwcm9iZSBpdC4gU2luY2UgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uIGRldGFpbHMuIEknbGwgbmVlZCB0byBsb29rIGF0IGBmbWFuLmNgIHRvIHNlZSBob3cgdGhlIGRyaXZlciBpcyByZWdpc3RlcmVkIGFuZCBpbml0aWFsaXplZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGNvbXBvbmVudCBjYW4gYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCB1bmRlciB0aGUgcmlnaHQgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3NiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM3OjQ0Ljk2MjU4NzgyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDg0MjI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yODkyPXN0YXRpYyBpbnQgX19pbml0IGZtYW5fbG9hZCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI4OTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI4OTg6XFx0ZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZmbWFuX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI4OTktXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI5MDA6XFx0XFx0cHJfZXJyKFxcXCJFcnJvciwgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCkgPSAlZFxcXFxuXFxcIiwgZXJyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjkwMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzc6NDUuMDQ3NDM3MjAzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzODAyNjA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogZm1hbl9kcml2ZXIgRXhhbWluYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGltbWVkaWF0ZSBwcm9tcHQg4oCTIFwiTGV0J3MgY2hlY2sgYGZtYW5fZHJpdmVyYFwiIOKAkyBzdWdnZXN0cyBhIGRpcmVjdCBhcHByb2FjaC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBzY2VuYXJpb3MuIEkgYXNzdW1lIHdl4oCZcmUgbGlrZWx5IGludmVzdGlnYXRpbmcgYSBwcm9jZXNzLCBtb2R1bGUsIG9yIGNvbXBvbmVudCBuYW1lZCBgZm1hbl9kcml2ZXJgLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMuIElzIHRoaXMgcmVsYXRlZCB0byBmaWxlIG1hbmFnZW1lbnQsIGEgc3BlY2lmaWMgaGFyZHdhcmUgaW50ZXJmYWNlLCBvciBwZXJoYXBzIGEgY29yZSBzeXN0ZW0gcHJvY2Vzcz8gVGhlIGNvbnRleHQgaXMgdGhlIGtleSwgb2YgY291cnNlLCBidXQgdGhlIGNvbW1hbmQgaXRzZWxmIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGFzc2Vzc2VkIGhlcmUuIEnigJltIHByZXBhcmluZyBteXNlbGYgdG8gZGVsdmUgaW50byBsb2dzLCBjb2RlLCBvciBwZXJoYXBzIGV2ZW4gbGl2ZSBkZWJ1Z2dpbmcgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBtYXR0ZXIuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBhc3BlY3Qgb2YgYGZtYW5fZHJpdmVyYCB0aGF0IG5lZWRzIGF0dGVudGlvbiwgc28gdGhhdCBJIGNhbiBhcHBseSB0aGUgYXBwcm9wcmlhdGUgdG9vbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MjQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNzo0OC44ODU0NjUzMzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjE5NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZtYW5fZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9Mjg4Mj1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmbWFuX21hdGNoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjg4My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6Mjg4NDpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbWFuX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjg4NS1cXHQuZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jPTI4OTI9c3RhdGljIGludCBfX2luaXQgZm1hbl9sb2FkKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjg5Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6Mjg5ODpcXHRlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmZtYW5fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjg5OS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yOTA2PXN0YXRpYyB2b2lkIF9fZXhpdCBmbWFuX3VubG9hZCh2b2lkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTA3LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjkwODpcXHRwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2Zm1hbl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTA5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzc6NDguOTc2NjkwMjE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyODAyNjE2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUaGlzIFBsYXRmb3JtIERyaXZlcioqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCdzIHJlbHlpbmcgb24gRGV2aWNlIFRyZWUgKERUKSBmb3IgaXRzIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJDYW4gU3l6a2FsbGVyIGZ1enogdGhpcyBlZmZlY3RpdmVseT9cIiBXZSBrbm93IFN5emthbGxlciAqY2FuKiBpbmplY3QgRFQgbm9kZXMgdXNpbmcgZnVuY3Rpb25zIGxpa2UgYHN5el9kZXZfaW5pdGAuIEhvd2V2ZXIsIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBoYXJkd2FyZSBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgdGhvc2UgYWNjZXNzaW5nIHNwZWNpZmljIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBtZW1vcnktbWFwcGVkIEkvTyAobGlrZSB0aGF0IGBmbWFuLVx1MDAzZWR0c19wYXJhbXMuYmFzZV9hZGRyID0gYmFzZV9hZGRyO2Agc3R1ZmYsIGRlcml2ZWQgZnJvbSBgb2ZfYWRkcmVzc190b19yZXNvdXJjZWAgYW5kIGBkZXZtX2lvcmVtYXBgKSwgYXJlIGdvaW5nIHRvIGJlIHByb2JsZW1hdGljLiBUaGV5J2xsIGxpa2VseSBmYWlsIHRvIHByb2JlLCBvciB3b3JzZSwgY3Jhc2gsIGlmIHRoZSByZXF1aXJlZCBtZW1vcnkgaXNuJ3QgYWN0dWFsbHkgcHJlc2VudCBvciBpZiBpdCBpc24ndCBhY2N1cmF0ZWx5IGVtdWxhdGVkLlxuXG5CdXQgd2FpdCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSAqc29tZSogc3VwcG9ydCBmb3IgcGxhdGZvcm0gZHJpdmVyIGZ1enppbmcgdmlhIERUIG5vZGUgaW5qZWN0aW9uLCB0aG91Z2ggaXQncyB1c3VhbGx5IHF1aXRlIGxpbWl0ZWQuIEkndmUgb2Z0ZW4gc2VlbiB0aGVzZSBhdHRlbXB0cyBmYWxsIGFwYXJ0IGF0IHRoZSBgZGV2bV9pb3JlbWFwYCBzdGFnZSBvciBvdGhlciBoYXJkd2FyZSBhY2Nlc3MgcG9pbnRzLiBXZSdyZSBnb2luZyB0byBoYXZlIHRvIGRvIGEgZGVlcCBkaXZlIHRvIHdvcmsgb3V0IGlmIHRoaXMgaXMgZnV6YWJsZSFcblxuQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcG90ZW50aWFsIHBpdGZhbGxzLiBMZXQncyBzdGFydCBieSBleGFtaW5pbmcgdGhlIGByZWFkX2R0c19ub2RlYCBmdW5jdGlvbiBpbiBgZm1hbi5jYCB0byBzZWUgaG93IHRoZSBEZXZpY2UgVHJlZSBpbmZvcm1hdGlvbiBpcyBwYXJzZWQgYW5kIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzc6NTYuMjU2OTUzNzU0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQ4MzE4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWFkX2R0c19ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9MjY4NT1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmbWFuX211cmFtX21hdGNoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjY4Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjY4NzpzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yNjg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yODI2PXN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjgzMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjgzNDpcXHRmbWFuID0gcmVhZF9kdHNfbm9kZShvZl9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yODM1LVxcdGlmIChJU19FUlIoZm1hbikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM3OjU2LjMzNDQ0MTg0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU5OTkzNjcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgcmVhZF9kdHNfbm9kZWAgYW5kIGBmbWFuX2NvbmZpZ2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRyaWdnZXJzIHNvbWUgcXVlc3Rpb25zIGFib3V0IHJlYWNoYWJpbGl0eS4gVGhlIGNvcmUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBhY2Nlc3NpYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIHN5emthbGxlciBjYW4gaW5qZWN0IGEgZGV2aWNlIHRyZWUgKERUKSBub2RlIGZvciB0aGlzIGRyaXZlciwgdGhlbiBgZm1hbl9wcm9iZWAgd2lsbCBiZSBjYWxsZWQsIGFuZCBjb25zZXF1ZW50bHkgYHJlYWRfZHRzX25vZGVgIGFzIHdlbGwuXG5cbmByZWFkX2R0c19ub2RlYCBkb2VzIGEgYnVuY2ggb2Ygc3RhbmRhcmQgRFQgcGFyc2luZzogYGRldm1fa3phbGxvY2AsIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMmAsIGBvZl9jbGtfZ2V0YCwgYGNsa19nZXRfcmF0ZWAsIGBvZl9hZGRyZXNzX3RvX3Jlc291cmNlYCwgYW5kIGBkZXZtX2lvcmVtYXBgLiBBIGZhaWx1cmUgaW4gYG9mX2FkZHJlc3NfdG9fcmVzb3VyY2VgIHdvdWxkIHJlc3VsdCBpbiBhbiBlcnJvciwgd2hpY2ggY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gZnV6ei4gSWYgaXQgKnN1Y2NlZWRzKiwgaXQnbGwgbWFwIHNvbWUgbWVtb3J5IHZpYSBgZGV2bV9pb3JlbWFwYC4gRm9sbG93aW5nIHRoYXQsIGBmbWFuX3Byb2JlYCBjYWxscyBgZm1hbl9jb25maWdgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgZnV6emFibGU/IFRoZSBwYXRjaCBzZWVtcyB0byBiZSBmaXhpbmcgYSBtZW1vcnkgbGVhayBvciBjaGFuZ2luZyBhbGxvY2F0aW9ucywgYW5kIGZpeGluZyBlcnJvciBwYXRocy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBidXQgaXQncyBpbiBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlci4gTm9ybWFsbHksIEknZCBkaXNjb3VudCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIHRoYXQgYXJlbid0IGVtdWxhdGVkIGJ5IFFFTVUvR0NFIGFzIHVucmVhY2hhYmxlLiBIb3dldmVyLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgdGhpcyBwc2V1ZG8tZGV2aWNlIGluamVjdGlvbiBtZWNoYW5pc20gZm9yIHBsYXRmb3JtIGRldmljZXMuXG5cbkhlcmUncyB0aGUgcnViOiB0aGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggY29uY2VybnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJcyBGcmVlc2NhbGUgRk1hbiBlbXVsYXRlZCBpbiBRRU1VPyBJIGtub3cgUUVNVSBzdXBwb3J0cyAqc29tZSogRnJlZXNjYWxlL05YUCBib2FyZHMgKGxpa2UgYG1wYzg1NDRkc2AsIGBlNTAwYCwgYHNhbTQ2MGV4YCwgZXRjLiksIGJ1dCBkb2VzIGl0IGVtdWxhdGUgdGhlIEZNYW4gKEZyYW1lIE1hbmFnZXIpP1xuXG5JIG5lZWQgdG8gY2hlY2sgUUVNVSdzIGNvZGUsIHByb2JhYmx5IGluIGBody9wcGMvZTUwMC5jYCBvciBgaHcvcHBjL2U1MDBwbGF0LmNgLCB0byBzZWUgaWYgRk1hbiBpcyBlbXVsYXRlZC4gVGhlIERQQUEvRk1hbiBpcyB0eXBpY2FsbHkgcXVpdGUgY29tcGxleCwgc28gZnVsbCBlbXVsYXRpb24gaXMgdW5saWtlbHksIGJ1dCB3b3J0aCBhIGRvdWJsZS1jaGVjay5cblxuRXZlbiBpZiBpdCBpc24ndCBmdWxseSBlbXVsYXRlZCwgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gKnJlYWNoKiB0aGUgcHJvYmUgZnVuY3Rpb24gdmlhIERUIGluamVjdGlvbi4gU28sIGlzIGl0IFwiaW1wb3NzaWJsZSB0byByZWFjaFwiPyBTeXprYWxsZXIgKmNhbiogaW5qZWN0IERUIG5vZGVzLiBJZiBpdCBpbmplY3RzIGEgRFQgbm9kZSwgYGZtYW5fcHJvYmVgICppcyogY2FsbGVkLiBUaGF0IG1lYW5zIGByZWFkX2R0c19ub2RlYCBnZXRzIGNhbGxlZCBhcyB3ZWxsLlxuXG5UaGUgZGVjaXNpdmUgZmFjdG9yIGlzIHRoZSBpbnN0cnVjdGlvbiBzYXlpbmcgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gU2luY2UgSSBrbm93IHN5emthbGxlciBjYW4gaW5qZWN0IERUIG5vZGVzIGFuZCB0aHVzIHJlYWNoIGByZWFkX2R0c19ub2RlYCwgbGV0IG1lIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgZGV0YWlscyBvZiB3aGF0IGByZWFkX2R0c19ub2RlYCBhY3R1YWxseSBkb2VzIGFuZCBpZiB0aGF0IGlzIHN1cHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5NiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozODowNi45MzQzODA4MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjg3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY4NzpcXHRzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbjI2ODg6XFx0e1xcbjI2ODk6XFx0XFx0c3RydWN0IGZtYW4gKmZtYW47XFxuMjY5MDpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmZtX25vZGUsICptdXJhbV9ub2RlO1xcbjI2OTE6XFx0XFx0dm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7XFxuMjY5MjpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcXG4yNjkzOlxcdFxcdHUzMiB2YWwsIHJhbmdlWzJdO1xcbjI2OTQ6XFx0XFx0aW50IGVyciwgaXJxO1xcbjI2OTU6XFx0XFx0c3RydWN0IGNsayAqY2xrO1xcbjI2OTY6XFx0XFx0dTMyIGNsa19yYXRlO1xcbjI2OTc6XFx0XFxuMjY5ODpcXHRcXHRmbWFuID0gZGV2bV9remFsbG9jKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpmbWFuKSwgR0ZQX0tFUk5FTCk7XFxuMjY5OTpcXHRcXHRpZiAoIWZtYW4pXFxuMjcwMDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4yNzAxOlxcdFxcbjI3MDI6XFx0XFx0Zm1fbm9kZSA9IG9mX25vZGVfZ2V0KG9mX2Rldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbjI3MDM6XFx0XFxuMjcwNDpcXHRcXHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihmbV9ub2RlLCBcXFwiY2VsbC1pbmRleFxcXCIsIFxcdTAwMjZ2YWwpO1xcbjI3MDU6XFx0XFx0aWYgKGVycikge1xcbjI3MDY6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogZmFpbGVkIHRvIHJlYWQgY2VsbC1pbmRleCBmb3IgJXBPRlxcXFxuXFxcIixcXG4yNzA3OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBmbV9ub2RlKTtcXG4yNzA4OlxcdFxcdFxcdGdvdG8gZm1hbl9ub2RlX3B1dDtcXG4yNzA5OlxcdFxcdH1cXG4yNzEwOlxcdFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuaWQgPSAodTgpdmFsO1xcbjI3MTE6XFx0XFxuMjcxMjpcXHRcXHQvKiBHZXQgdGhlIEZNIGludGVycnVwdCAqL1xcbjI3MTM6XFx0XFx0ZXJyID0gcGxhdGZvcm1fZ2V0X2lycShvZl9kZXYsIDApO1xcbjI3MTQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMjcxNTpcXHRcXHRcXHRnb3RvIGZtYW5fbm9kZV9wdXQ7XFxuMjcxNjpcXHRcXHRpcnEgPSBlcnI7XFxuMjcxNzpcXHRcXG4yNzE4OlxcdFxcdC8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovXFxuMjcxOTpcXHRcXHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMSk7XFxuMjcyMDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4yNzIxOlxcdFxcdFxcdGdvdG8gZm1hbl9ub2RlX3B1dDtcXG4yNzIyOlxcdFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9IGVycjtcXG4yNzIzOlxcdFxcbjI3MjQ6XFx0XFx0Y2xrID0gb2ZfY2xrX2dldChmbV9ub2RlLCAwKTtcXG4yNzI1OlxcdFxcdGlmIChJU19FUlIoY2xrKSkge1xcbjI3MjY6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihjbGspO1xcbjI3Mjc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogRmFpbGVkIHRvIGdldCBGTSVkIGNsb2NrIHN0cnVjdHVyZVxcXFxuXFxcIixcXG4yNzI4OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmlkKTtcXG4yNzI5OlxcdFxcdFxcdGdvdG8gZm1hbl9ub2RlX3B1dDtcXG4yNzMwOlxcdFxcdH1cXG4yNzMxOlxcdFxcbjI3MzI6XFx0XFx0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcXG4yNzMzOlxcdFxcdGlmICghY2xrX3JhdGUpIHtcXG4yNzM0OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMjczNTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEZNJWQgY2xvY2sgcmF0ZVxcXFxuXFxcIixcXG4yNzM2OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmlkKTtcXG4yNzM3OlxcdFxcdFxcdGdvdG8gY2xrX3B1dDtcXG4yNzM4OlxcdFxcdH1cXG4yNzM5OlxcdFxcdC8qIFJvdW5kaW5nIHRvIE1IeiAqL1xcbjI3NDA6XFx0XFx0Zm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5jbGtfZnJlcSA9IERJVl9ST1VORF9VUChjbGtfcmF0ZSwgMTAwMDAwMCk7XFxuMjc0MTpcXHRcXG4yNzQyOlxcdFxcdGNsa19wdXQoY2xrKTtcXG4yNzQzOlxcdFxcbjI3NDQ6XFx0XFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZm1fbm9kZSwgXFxcImZzbCxxbWFuLWNoYW5uZWwtcmFuZ2VcXFwiLFxcbjI3NDU6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZyYW5nZVswXSwgMik7XFxuMjc0NjpcXHRcXHRpZiAoZXJyKSB7XFxuMjc0NzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBmYWlsZWQgdG8gcmVhZCBmc2wscW1hbi1jaGFubmVsLXJhbmdlIGZvciAlcE9GXFxcXG5cXFwiLFxcbjI3NDg6XFx0XFx0XFx0XFx0X19mdW5jX18sIGZtX25vZGUpO1xcbjI3NDk6XFx0XFx0XFx0Z290byBmbWFuX25vZGVfcHV0O1xcbjI3NTA6XFx0XFx0fVxcbjI3NTE6XFx0XFx0Zm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5xbWFuX2NoYW5uZWxfYmFzZSA9IHJhbmdlWzBdO1xcbjI3NTI6XFx0XFx0Zm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5udW1fb2ZfcW1hbl9jaGFubmVscyA9IHJhbmdlWzFdO1xcbjI3NTM6XFx0XFxuMjc1NDpcXHRcXHQvKiBHZXQgdGhlIE1VUkFNIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSAqL1xcbjI3NTU6XFx0XFx0bXVyYW1fbm9kZSA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShmbV9ub2RlLCBmbWFuX211cmFtX21hdGNoKTtcXG4yNzU2OlxcdFxcdGlmICghbXVyYW1fbm9kZSkge1xcbjI3NTc6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4yNzU4OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IGNvdWxkIG5vdCBmaW5kIE1VUkFNIG5vZGVcXFxcblxcXCIsXFxuMjc1OTpcXHRcXHRcXHRcXHRfX2Z1bmNfXyk7XFxuMjc2MDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjI3NjE6XFx0XFx0fVxcbjI3NjI6XFx0XFxuMjc2MzpcXHRcXHRlcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG11cmFtX25vZGUsIDAsXFxuMjc2NDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLm11cmFtX3Jlcyk7XFxuMjc2NTpcXHRcXHRpZiAoZXJyKSB7XFxuMjc2NjpcXHRcXHRcXHRvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTtcXG4yNzY3OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoKSA9ICVkXFxcXG5cXFwiLFxcbjI3Njg6XFx0XFx0XFx0XFx0X19mdW5jX18sIGVycik7XFxuMjc2OTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjI3NzA6XFx0XFx0fVxcbjI3NzE6XFx0XFxuMjc3MjpcXHRcXHRvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTtcXG4yNzczOlxcdFxcbjI3NzQ6XFx0XFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIGlycSwgZm1hbl9pcnEsIElSUUZfU0hBUkVELFxcbjI3NzU6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJmbWFuXFxcIiwgZm1hbik7XFxuMjc3NjpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjI3Nzc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxcXFxuXFxcIixcXG4yNzc4OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBpcnEsIGVycik7XFxuMjc3OTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjI3ODA6XFx0XFx0fVxcbjI3ODE6XFx0XFxuMjc4MjpcXHRcXHRpZiAoZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxICE9IDApIHtcXG4yNzgzOlxcdFxcdFxcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXFxuMjc4NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgZm1hbl9lcnJfaXJxLCBJUlFGX1NIQVJFRCxcXG4yNzg1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiZm1hbi1lcnJcXFwiLCBmbWFuKTtcXG4yNzg2OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjA2LjkzNDU0MDQyOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDg5MDMwNzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRFQgUHJvcGVydGllcyBSZXF1aXJlZCBmb3IgU3VjY2Vzc2Z1bCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgd2hhdCdzIG5lZWRlZCB0byBnZXQgdGhpcyB0aGluZyBydW5uaW5nLCBhbmQgaXQncyBxdWl0ZSBhIGxpc3Qgb2YgRGV2aWNlIFRyZWUgcHJvcGVydGllcyB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSByZXF1aXJlbWVudHMgZm9yIGBjZWxsLWluZGV4YCwgdHdvIGludGVycnVwdHMgKHdoaWNoIGlzIGludGVyZXN0aW5nLCBJJ2xsIG5lZWQgdG8gbG9vayBhdCBob3cgdGhvc2UgYXJlIHVzZWQpLCBhIGNsb2NrIHNvdXJjZSwgYW5kIHRoZW4gYSBzcGVjaWZpYyBjaGFubmVsIHJhbmdlIGRlZmluZWQgYnkgYGZzbCxxbWFuLWNoYW5uZWwtcmFuZ2VgLiBCZXlvbmQgdGhhdCwgdGhlcmUncyBhIG5lZWQgZm9yIGEgY2hpbGQgbm9kZSB0aGF0J3MgZ29pbmcgdG8gbWF0Y2ggYWdhaW5zdCBzb21ldGhpbmcgY2FsbGVkIGBmbWFuX211cmFtX21hdGNoYC4gV2UnbGwgYWxzbyBuZWVkIHRvIHVzZSBgb2ZfYWRkcmVzc190b19yZXNvdXJjZWAgb24gdGhhdCBjaGlsZCBub2RlIGFuZCB0aGVuIGNhbGwgYGRldm1fcmVxdWVzdF9pcnFgIGFuZCBgZGV2bV9pb3JlbWFwYC4gUXVpdGUgYSBjb25maWd1cmF0aW9uLCByaWdodD9cblxuVGhlIGdvb2QgbmV3cyBpcywgdGhhdCBzeXprYWxsZXIncyBgc3l6X2Rldl9pbml0YCBmdW5jdGlvbiBsb29rcyBsaWtlIGl0IGNhbiBpbmplY3QgYXJiaXRyYXJ5IERldmljZSBUcmVlIG5vZGVzLiBUaGF0IG1lYW5zIGl0IGNhbiBwcm92aWRlIGFsbCB0aGVzZSBwcm9wZXJ0aWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBzaG91bGQgZm9jdXMgb24gdGhlIGBkZXZtX3JlcXVlc3RfaXJxYCBjYWxsIGJlY2F1c2UgaXQgY291bGQgZmFpbCBpZiB0aGUgaW50ZXJydXB0IHJlcXVlc3QgaXMgaW52YWxpZC4gTHVja2lseSwgU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSB2YWxpZCBkdW1teSBJUlFzIHNvIHRoYXQgc2hvdWxkIGJlIGxlc3Mgb2YgYSBoZWFkYWNoZS4gVGhlIGBkZXZtX2lvcmVtYXBgIHdpbGwgdGFrZSBjYXJlIG9mIG1hcHBpbmcgdGhlIG1lbW9yeS5cblxuQWxyaWdodCwgc28gb25jZSBhbGwgdGhvc2UgRFQgcHJvcGVydGllcyBhcmUgc2V0IGFuZCBtYXBwZWQsIHdlJ3JlIGFzc3VtaW5nIGBmbWFuX2NvbmZpZ2AgaXMgdGhlIGtleSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG5leHQuIEkgcmVhbGx5IHNob3VsZCBkaXZlIGluIGFuZCBzZWUgaG93IHRoYXQgaXMgaW1wbGVtZW50ZWQuIEknbGwgbmVlZCB0byB0cmFjZSBpbnRvIGBmbWFuX2NvbmZpZ2AuIExldCdzIHNlZSB3aGF0IHRoYXQgbG9va3MgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM3NywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjEyLjQyMzU3MzIyMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NjA6XFx0XFx0XFx0XFx0XFx0ICAgIGZtYW4tXFx1MDAzZXN0YXRlLVxcdTAwM2VibWlfbWF4X251bV9vZl90YXNrcyk7XFxuMTc2MTpcXHRcXG4xNzYyOlxcdFxcdGlmIChmbWFuLVxcdTAwM2VzdGF0ZS1cXHUwMDNlcmV2X2luZm8ubWFqb3IgXFx1MDAzYyA2KSB7XFxuMTc2MzpcXHRcXHRcXHRmbWFuLVxcdTAwM2VjZmctXFx1MDAzZWRtYV9jb21tX3F0c2hfY2xyX2VtZXIgPVxcbjE3NjQ6XFx0XFx0XFx0KHU4KURGTFRfRE1BX0NPTU1fUV9MT1coZm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZXJldl9pbmZvLm1ham9yLFxcbjE3NjU6XFx0XFx0XFx0XFx0XFx0XFx0Zm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZWRtYV90aHJlc2hfbWF4X2NvbW1xKTtcXG4xNzY2OlxcdFxcbjE3Njc6XFx0XFx0XFx0Zm1hbi1cXHUwMDNlY2ZnLVxcdTAwM2VkbWFfY29tbV9xdHNoX2FzcnRfZW1lciA9XFxuMTc2ODpcXHRcXHRcXHQodTgpREZMVF9ETUFfQ09NTV9RX0hJR0goZm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZXJldl9pbmZvLm1ham9yLFxcbjE3Njk6XFx0XFx0XFx0XFx0XFx0XFx0IGZtYW4tXFx1MDAzZXN0YXRlLVxcdTAwM2VkbWFfdGhyZXNoX21heF9jb21tcSk7XFxuMTc3MDpcXHRcXG4xNzcxOlxcdFxcdFxcdGZtYW4tXFx1MDAzZWNmZy1cXHUwMDNlZG1hX2NhbV9udW1fb2ZfZW50cmllcyA9XFxuMTc3MjpcXHRcXHRcXHRERkxUX0RNQV9DQU1fTlVNX09GX0VOVFJJRVMoZm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZXJldl9pbmZvLm1ham9yKTtcXG4xNzczOlxcdFxcbjE3NzQ6XFx0XFx0XFx0Zm1hbi1cXHUwMDNlY2ZnLVxcdTAwM2VkbWFfcmVhZF9idWZfdHNoX2Nscl9lbWVyID1cXG4xNzc1OlxcdFxcdFxcdERGTFRfRE1BX1JFQURfSU5UX0JVRl9MT1coZm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZWRtYV90aHJlc2hfbWF4X2J1Zik7XFxuMTc3NjpcXHRcXG4xNzc3OlxcdFxcdFxcdGZtYW4tXFx1MDAzZWNmZy1cXHUwMDNlZG1hX3JlYWRfYnVmX3RzaF9hc3J0X2VtZXIgPVxcbjE3Nzg6XFx0XFx0XFx0REZMVF9ETUFfUkVBRF9JTlRfQlVGX0hJR0goZm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZWRtYV90aHJlc2hfbWF4X2J1Zik7XFxuMTc3OTpcXHRcXG4xNzgwOlxcdFxcdFxcdGZtYW4tXFx1MDAzZWNmZy1cXHUwMDNlZG1hX3dyaXRlX2J1Zl90c2hfY2xyX2VtZXIgPVxcbjE3ODE6XFx0XFx0XFx0REZMVF9ETUFfV1JJVEVfSU5UX0JVRl9MT1coZm1hbi1cXHUwMDNlc3RhdGUtXFx1MDAzZWRtYV90aHJlc2hfbWF4X2J1Zik7XFxuMTc4MjpcXHRcXG4xNzgzOlxcdFxcdFxcdGZtYW4tXFx1MDAzZWNmZy1cXHUwMDNlZG1hX3dyaXRlX2J1Zl90c2hfYXNydF9lbWVyID1cXG4xNzg0OlxcdFxcdFxcdERGTFRfRE1BX1dSSVRFX0lOVF9CVUZfSElHSChmbWFuLVxcdTAwM2VzdGF0ZS1cXHUwMDNlZG1hX3RocmVzaF9tYXhfYnVmKTtcXG4xNzg1OlxcdFxcbjE3ODY6XFx0XFx0XFx0Zm1hbi1cXHUwMDNlY2ZnLVxcdTAwM2VkbWFfYXhpX2RiZ19udW1fb2ZfYmVhdHMgPVxcbjE3ODc6XFx0XFx0XFx0REZMVF9BWElfREJHX05VTV9PRl9CRUFUUztcXG4xNzg4OlxcdFxcdH1cXG4xNzg5OlxcdFxcbjE3OTA6XFx0XFx0cmV0dXJuIDA7XFxuMTc5MTpcXHRcXG4xNzkyOlxcdGVycl9mbV9zb2Nfc3BlY2lmaWM6XFxuMTc5MzpcXHRcXHRrZnJlZShmbWFuLVxcdTAwM2VjZmcpO1xcbjE3OTQ6XFx0ZXJyX2ZtX2RydjpcXG4xNzk1OlxcdFxcdGtmcmVlKGZtYW4tXFx1MDAzZXN0YXRlKTtcXG4xNzk2OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3OTc6XFx0fVxcbjE3OTg6XFx0XFxuMTc5OTpcXHRzdGF0aWMgaW50IGZtYW5fcmVzZXQoc3RydWN0IGZtYW4gKmZtYW4pXFxuMTgwMDpcXHR7XFxuMTgwMTpcXHRcXHR1MzIgY291bnQ7XFxuMTgwMjpcXHRcXHRpbnQgZXJyID0gMDtcXG4xODAzOlxcdFxcbjE4MDQ6XFx0XFx0aWYgKGZtYW4tXFx1MDAzZXN0YXRlLVxcdTAwM2VyZXZfaW5mby5tYWpvciBcXHUwMDNjIDYpIHtcXG4xODA1OlxcdFxcdFxcdGlvd3JpdGUzMmJlKEZQTV9SU1RDX0ZNX1JFU0VULCBcXHUwMDI2Zm1hbi1cXHUwMDNlZnBtX3JlZ3MtXFx1MDAzZWZtX3JzdGMpO1xcbjE4MDY6XFx0XFx0XFx0LyogV2FpdCBmb3IgcmVzZXQgY29tcGxldGlvbiAqL1xcbjE4MDc6XFx0XFx0XFx0Y291bnQgPSAxMDA7XFxuMTgwODpcXHRcXHRcXHRkbyB7XFxuMTgwOTpcXHRcXHRcXHRcXHR1ZGVsYXkoMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjEyLjQyMzc1MDQ1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ4MzU2MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlYmFzZSBhbmQgSSBzZWUgYGZtYW5fY29uZmlnYCBnZXR0aW5nIGludm9rZWQgZnJvbSBgZm1hbl9wcm9iZWAuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgc2VlbXMgbGlrZSB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yLCBvciBhdCBsZWFzdCBpbnZvbHZlZCBpbiwgcHVsbGluZyBpbiBjb25maWd1cmF0aW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSB0aGUgc291cmNlIG9mIHdoYXRldmVyIGlzc3VlIEknbSBjaGFzaW5nLCBzbyBsZXQncyBqdW1wIHJpZ2h0IGludG8gYGZtYW5fcHJvYmVgIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMuIElzIGl0IGxvYWRpbmcgdGhlIGNvbmZpZz8gTWVyZ2luZyBpdD8gVmFsaWRhdGluZyBpdD8gQW5kLCBpbXBvcnRhbnRseSwgKmhvdyogaXMgdGhpcyBjb25maWd1cmF0aW9uIGludGVyYWN0aW5nIHdpdGggdGhlIHByb2JlPyBMZXQncyB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NjQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjE1LjY3MjEwODY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgyNixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgyNjpcXHRzdGF0aWMgaW50IGZtYW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbjI4Mjc6XFx0e1xcbjI4Mjg6XFx0XFx0c3RydWN0IGZtYW4gKmZtYW47XFxuMjgyOTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuMjgzMDpcXHRcXHRpbnQgZXJyO1xcbjI4MzE6XFx0XFxuMjgzMjpcXHRcXHRkZXYgPSBcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXY7XFxuMjgzMzpcXHRcXG4yODM0OlxcdFxcdGZtYW4gPSByZWFkX2R0c19ub2RlKG9mX2Rldik7XFxuMjgzNTpcXHRcXHRpZiAoSVNfRVJSKGZtYW4pKVxcbjI4MzY6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZm1hbik7XFxuMjgzNzpcXHRcXG4yODM4OlxcdFxcdGVyciA9IGZtYW5fY29uZmlnKGZtYW4pO1xcbjI4Mzk6XFx0XFx0aWYgKGVycikge1xcbjI4NDA6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCIlczogRk1hbiBjb25maWcgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMjg0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODQyOlxcdFxcdH1cXG4yODQzOlxcdFxcbjI4NDQ6XFx0XFx0aWYgKGZtYW5faW5pdChmbWFuKSAhPSAwKSB7XFxuMjg0NTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIiVzOiBGTWFuIGluaXQgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMjg0NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yODQ3OlxcdFxcdH1cXG4yODQ4OlxcdFxcbjI4NDk6XFx0XFx0aWYgKGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9PSAwKSB7XFxuMjg1MDpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9ETUFfQlVTX0VSUk9SLCBmYWxzZSk7XFxuMjg1MTpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9ETUFfUkVBRF9FQ0MsIGZhbHNlKTtcXG4yODUyOlxcdFxcdFxcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0RNQV9TWVNURU1fV1JJVEVfRUNDLCBmYWxzZSk7XFxuMjg1MzpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9ETUFfRk1fV1JJVEVfRUNDLCBmYWxzZSk7XFxuMjg1NDpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9ETUFfU0lOR0xFX1BPUlRfRUNDLCBmYWxzZSk7XFxuMjg1NTpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9GUE1fU1RBTExfT05fVEFTS1MsIGZhbHNlKTtcXG4yODU2OlxcdFxcdFxcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0ZQTV9TSU5HTEVfRUNDLCBmYWxzZSk7XFxuMjg1NzpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9GUE1fRE9VQkxFX0VDQywgZmFsc2UpO1xcbjI4NTg6XFx0XFx0XFx0Zm1hbl9zZXRfZXhjZXB0aW9uKGZtYW4sIEZNQU5fRVhfUU1JX1NJTkdMRV9FQ0MsIGZhbHNlKTtcXG4yODU5OlxcdFxcdFxcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX1FNSV9ET1VCTEVfRUNDLCBmYWxzZSk7XFxuMjg2MDpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbixcXG4yODYxOlxcdFxcdFxcdFxcdFxcdCAgIEZNQU5fRVhfUU1JX0RFUV9GUk9NX1VOS05PV05fUE9SVElELCBmYWxzZSk7XFxuMjg2MjpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9CTUlfTElTVF9SQU1fRUNDLCBmYWxzZSk7XFxuMjg2MzpcXHRcXHRcXHRmbWFuX3NldF9leGNlcHRpb24oZm1hbiwgRk1BTl9FWF9CTUlfU1RPUkFHRV9QUk9GSUxFX0VDQyxcXG4yODY0OlxcdFxcdFxcdFxcdFxcdCAgIGZhbHNlKTtcXG4yODY1OlxcdFxcdFxcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0JNSV9TVEFUSVNUSUNTX1JBTV9FQ0MsIGZhbHNlKTtcXG4yODY2OlxcdFxcdFxcdGZtYW5fc2V0X2V4Y2VwdGlvbihmbWFuLCBGTUFOX0VYX0JNSV9ESVNQQVRDSF9SQU1fRUNDLCBmYWxzZSk7XFxuMjg2NzpcXHRcXHR9XFxuMjg2ODpcXHRcXG4yODY5OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIGZtYW4pO1xcbjI4NzA6XFx0XFxuMjg3MTpcXHRcXHRkZXZfZGJnKGRldiwgXFxcIkZNYW4lZCBwcm9iZWRcXFxcblxcXCIsIGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuaWQpO1xcbjI4NzI6XFx0XFxuMjg3MzpcXHRcXHRyZXR1cm4gMDtcXG4yODc0OlxcdH1cXG4yODc1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozODoxNS42NzIyODQxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk4NDczMzIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYHJlYWRfZHRzX25vZGVgIGFuZCBgZm1hbl9jb25maWdgIOKAkyBteSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFsdGVyaW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgY2xlYXIgaW5kaWNhdG9yIG9mIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGludGVyZXN0aW5nIHRvIGV4cGxvcmUuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGU/XG5cblllcywgYWJzb2x1dGVseS4gU3l6a2FsbGVyIGNhbiBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBub2Rlcy4gU3BlY2lmaWNhbGx5LCBpZiBzeXprYWxsZXIgaW5qZWN0cyBhIGRldmljZSB0cmVlIG5vZGUgbWF0Y2hpbmcgXCJmc2wsZm1hblwiLCB0aGF0J2xsIHRyaWdnZXIgYGZtYW5fcHJvYmVgLiBBbmQgYGZtYW5fcHJvYmVgIGxlYWRzIGRpcmVjdGx5IHRvIHRoZSBleGVjdXRpb24gb2YgYHJlYWRfZHRzX25vZGVgLiBUaGF0J3MgdGhlIGdhdGV3YXkhIEl0J2xsIGF0dGVtcHQgdG8gcmVhZCBwcm9wZXJ0aWVzLCBhbmQgKmlmKiBpdCBmYWlscywgd2UgaGl0IHRoZSBlcnJvciBwYXRocyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMuXG5cbk5vdywgYHJlYWRfZHRzX25vZGVgIGl0c2VsZiBjYWxscyBvdGhlciBmdW5jdGlvbnMsIHN1Y2ggYXMgYG9mX2Nsa19nZXRgLCBgY2xrX2dldF9yYXRlYCwgYG9mX2FkZHJlc3NfdG9fcmVzb3VyY2VgLCBhbmQgYGRldm1faW9yZW1hcGAuIFNvIGlmIHN5emthbGxlciBpbmplY3RzIGEgRFQgbm9kZSwgd2UgY2FuIHByb3ZpZGUgZHVtbXkgY2xvY2sgYW5kIG1lbW9yeSByZXNvdXJjZXMuIEhvd2V2ZXIsIGBmbWFuX2NvbmZpZ2AgYW5kIGBmbWFuX2luaXRgIHdpbGwgZXZlbnR1YWxseSB0cnkgdG8gYWNjZXNzIHRoZSBtZW1vcnkgYGRldm1faW9yZW1hcGAgaXMgaGFuZGxpbmcuIElmIGl0J3MganVzdCBkdW1teSBSQU0sIHdlIHdvbid0IGNyYXNoLCBidXQgdGhlcmUncyBhIGdvb2QgY2hhbmNlIG9mIGl0IHJlYWRpbmcgZ2FyYmFnZSB3aGljaCBjb3VsZCBsZWFkIHRvIGludGVyZXN0aW5nIGJlaGF2aW91ci4gQW5kIHdoYXQgaGFwcGVucyB3aGVuIGBkZXZtX2lvcmVtYXBgIGlzIHVzZWQgd2l0aCBkdW1teSBtZW1vcnk/IFN5emthbGxlciBjYW4gbWFwIGFyYml0cmFyeSBwaHlzaWNhbCBhZGRyZXNzZXMhIElmIGl0IG1hcHMgUkFNLCBpdCB3aWxsIHJlYWQvd3JpdGUgUkFNLiBJZiBpdCBtYXBzIHVubWFwcGVkIHBoeXNpY2FsIGFkZHJlc3NlcywgdGhlcmUgY291bGQgYmUgYSBidXMgZXJyb3Igb3IgTUNFLiBTeXprYWxsZXIgcnVucyBvbiB4ODZfNjQsIGFybTY0LCBhbmQgcmlzY3Y2NC5cblxuVGhpcyBkcml2ZXIncyBkZXBlbmRlbmNpZXMsIGBGU0xfU09DIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fCBDT01QSUxFX1RFU1RgLCBtYWtlcyBpdCBjb21waWxhYmxlIG9uIHg4Nl82NCB3aXRoIGBDT01QSUxFX1RFU1RgLiBUaGlzIG1lYW5zIHRoYXQgaWYgY29tcGlsZWQgd2l0aCBgQ09NUElMRV9URVNUYCwgaXQgY2FuIGJlIHJlYWNoZWQgdmlhIHN5emthbGxlci4gVGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUgaXMgYENPTkZJR19GU0xfRk1BTmAuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgYmVjb21lczogaXMgdGhpcyBkcml2ZXIgXCJpbXBvc3NpYmxlIHRvIHJlYWNoXCIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRhbmNlPyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHVucmVhY2hhYmxlIGluIEdDRSBvciBRRU1VLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuXG5cbkJ1dCB3YWl0LCB0aGlzIGRyaXZlciAqaXMqIHJlYWNoYWJsZSB2aWEgcGxhdGZvcm0gZGV2aWNlIGluamVjdGlvbiB1c2luZyBgc3l6X2Rldl9pbml0YC4gTm93LCB0aGlzIGRyaXZlciBpcyBoYXJkd2FyZS1zcGVjaWZpYy4gV2UgdXN1YWxseSBkb24ndCBmdXp6IHJhbmRvbSBoYXJkd2FyZSBkcml2ZXJzIHVubGVzcyB0aGV5IGFyZSBlbXVsYXRlZCBvciBhcmUgc3BlY2lmaWNhbGx5IHRhcmdldGVkLlxuXG5MZXQncyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgcGF0Y2guIEl0IGNoYW5nZXMgYGt6YWxsb2Nfb2JqYCB0byBgZGV2bV9remFsbG9jYC4gSXQgYWRkcyBgY2xrX3B1dChjbGspYC4gSXQgcmVtb3ZlcyBga2ZyZWUoZm1hbilgIGluIGVycm9yIHBhdGhzLiBPa2F5LCB0aGF0IHNjcmVhbXMgcHJvYmUgZXJyb3IgcGF0aCBjbGVhbnVwIHRvIG1lLiBJdCdzIGFib3V0IHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzLiBJdCBjb3VsZCBiZSBmaXhpbmcgYSBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCBvciBqdXN0IGltcHJvdmluZyB0aGUgY29kZSB3aXRoIGBkZXZtX2t6YWxsb2NgLlxuXG5Db25zaWRlcmluZyBhbGwgdGhpcywgaXMgaXQgd29ydGggZnV6emluZz8gWWVzLCBJIHRoaW5rIHNvLiBJZiB3ZSBzYXkgXCJ5ZXMsXCIgd2UgbmVlZCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBGb3IgYEZvY3VzU3ltYm9sc2AsIHdlJ2xsIGluY2x1ZGUgYHJlYWRfZHRzX25vZGVgIGFuZCBgZm1hbl9jb25maWdgLiBGb3IgYEVuYWJsZUNvbmZpZ3NgLCB3ZSdsbCBzZXQgYEZTTF9GTUFOYC4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IGBGU0xfRk1BTmAgaXMgZW5vdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA1OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjI5LjY1NzAyMDAxMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3OTE3MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGU0xfRk1BTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnOjI6Y29uZmlnIEZTTF9GTUFOXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGTWFuIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjI5LjkzNDk0MTYyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mjg5OTIwNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIEZTTF9GTUFOKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGBGU0xfRk1BTmAgaGFzIHNvbWUgaW50ZXJlc3RpbmcgZGVwZW5kZW5jaWVzLiBJdCdzIG5vdCBqdXN0IGEgc3RyYWlnaHRmb3J3YXJkIGVuYWJsZS9kaXNhYmxlLiBJdCBzZWVtcyBpdCByZWxpZXMgb24gYEZTTF9TT0NgLCBgQVJDSF9MQVlFUlNDQVBFYCwgKipvcioqIHRoZSBgQ09NUElMRV9URVNUYCBvcHRpb24uIFRoYXQncyBnb29kIHRvIGtub3cuIFRoaXMgbWVhbnMgSSBjYW4gcG90ZW50aWFsbHkgZW5hYmxlIGBGU0xfRk1BTmAgZXZlbiBpZiB0aGUgcHJpbWFyeSBhcmNoaXRlY3R1cmFsIHJlcXVpcmVtZW50cyBhcmVuJ3QgbWV0LCBzcGVjaWZpY2FsbHkgaWYgYENPTVBJTEVfVEVTVGAgaXMgYWN0aXZlLCB3aGljaCBpcyBvZnRlbiB1c2VkIGZvciB0ZXN0aW5nIGNvbmZpZ3VyYXRpb25zLiBcblxuTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGlzOiB0aGlzIGlzbid0IG5lY2Vzc2FyaWx5IHRoZSBvbmx5IGNvbmRpdGlvbiBhZmZlY3RpbmcgaXRzIGJlaGF2aW9yLiBKdXN0IGJlY2F1c2UgaXQgKmNhbiogYmUgZW5hYmxlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgZG9lc24ndCBtZWFuIHRob3NlIGFyZSAqYWxsKiB0aGUgY29uZGl0aW9ucy4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSB0byBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGRlcGVuZGVuY2llcywgcGVyaGFwcyBpbmRpcmVjdCBvbmVzLCBvciBjb25zdHJhaW50cyBvbiBvdGhlciB2YXJpYWJsZXMgdGhhdCBhZmZlY3QgaXRzIGZ1bGwgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgYmVmb3JlIEkgbWFrZSBhbnkgZGVjaXNpb25zIGFib3V0IGhvdyBpdCdzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzg6MzcuMjI0ODY0ODgzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzMxMzg1MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc9Mj1jb25maWcgRlNMX0ZNQU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkZNYW4gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBGU0xfU09DIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTUtXFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnPTE0PWNvbmZpZyBEUEFBX0VSUkFUVU1fQTA1MDM4NVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMTUtXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc6MTY6XFx0ZGVwZW5kcyBvbiBBUk02NCBcXHUwMDI2XFx1MDAyNiBGU0xfRFBBQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMTctXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM4OjM3LjU1ODAwODc4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTI2MDM1NTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBGU0xfRk1BTiBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBGU0xfRk1BTmAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGNvbnNpZGVyIGhlcmUuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBwYXRjaCBhY3R1YWxseSB3b3J0aCBmdXp6aW5nPyBJdCBzZWVtcyBsaWtlIGl0IHByaW1hcmlseSBhZGRyZXNzZXMgcHJvYmUgZXJyb3IgcGF0aHMuIEhvd2V2ZXIsIFN5emthbGxlciBvZnRlbiB0YXJnZXRzIHRoZXNlIGFyZWFzIGVmZmVjdGl2ZWx5IHRocm91Z2ggZmF1bHQgaW5qZWN0aW9uIG9yIGJ5IGZlZWRpbmcgaW52YWxpZCBEZXZpY2UgVHJlZSAoRFQpIHByb3BlcnRpZXMuIElmIFN5emthbGxlciBjYW4gbWFuaXB1bGF0ZSB0aGUgRFQgbm9kZSwgdGhhdCdzIGEgZ29vZCBzaWduIHRoZXNlIGVycm9yIHBhdGhzIHdpbGwgYmUgaGl0LlxuXG5MZXQgbWUgY29uZmlybSB0aGF0IGBmbWFuX3Byb2JlYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgYW5kIHllcywgaXQncyBhIHN0YW5kYXJkIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmdW5jdGlvbi4gQWxyaWdodCwgSSdtIGdvaW5nIHRvIGxlYW4gdG93YXJkcyBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk15IGZvY3VzIHN5bWJvbHMgd2lsbCBiZTogYHJlYWRfZHRzX25vZGVgLCBgZm1hbl9jb25maWdgLCBhbmQgdGhlIG9idmlvdXMgYGZtYW5fcHJvYmVgLiBGb3IgY29uZmlndXJhdGlvbiwgYEZTTF9GTUFOYCBpcyB0aGUga2V5LlxuXG5Ib2xkIG9uLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYHJlYWRfZHRzX25vZGVgIGlzIHN0YXRpYy4gWWVzLCBpdCBpczogYHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpYC4gQW5kIGBmbWFuX2NvbmZpZ2AgaXMgYWxzbyBzdGF0aWMsIHNvIEknbSBjb25maWRlbnQgYWJvdXQgaW5jbHVkaW5nIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYCBhcyBmb2N1cyBzeW1ib2xzLlxuXG5Ob3csIGxldCdzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIEl0IHNlZW1zIHRoZSBtYWluIGNoYW5nZXMgaW52b2x2ZSBtZW1vcnkgYW5kIGNsb2NrIG1hbmFnZW1lbnQgaW4gZXJyb3IgcGF0aHMuIFNwZWNpZmljYWxseSwgdGhleSdyZSBjaGFuZ2luZyB0aGUgYWxsb2NhdGlvbiBvZiBgZm1hbmAgZnJvbSBga3phbGxvY2AgdG8gYGRldm1fa3phbGxvY2AgYW5kIGZpeGluZyBzb21lIGNsb2NrIGxlYWtzIGJ5IGFkZGluZyBgY2xrX3B1dChjbGspYC4gVGhlIGNvZGUgaXMgbWFraW5nIHRoZSBhcHByb3ByaWF0ZSB1cGRhdGVzIHRvIHRoZSBmcmVlIGNhbGxzIHRvIGNvbXBsZW1lbnQgdGhpcyBjaGFuZ2UuIFRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQsIGEgZ29vZCBjbGVhbnVwIG9mIHRoZSBlcnJvciBwYXRocywgYW5kIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGlmIHRoZSBkcml2ZXIgcHJvYmVzLiBJJ20gZ29pbmcgd2l0aCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5TbywgdG8gcmVpdGVyYXRlLCBjb25maWd1cmF0aW9uczogYEZTTF9GTUFOYDsgZm9jdXMgc3ltYm9sczogYHJlYWRfZHRzX25vZGVgLCBgZm1hbl9jb25maWdgLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhlIGRyaXZlciBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9gLiBJcyB0aGVyZSBhIHBhcmVudCBvciBicm9hZGVyIGNvbmZpZ3VyYXRpb24gdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSdsbCBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnYCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ0MywiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozODo0OC44MTgzNjYzNDVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzk4Mzg4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXFxcIlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz02Mj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6NjM6c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozODo1MC40OTgyMTU0NzNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU4MzMxMjg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktjb25maWcgRGVwZW5kZW5jeSBDaGVjayoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgZm9yIEZyZWVzY2FsZSBFdGhlcm5ldCBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnYC4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBjb2RlLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29yayBzdGFjayBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGJ1aWxkLiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgS2NvbmZpZyBzeW1ib2xzLCBhbmQgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcyBhcyB3ZWxsLiBJIG5lZWQgdG8ga25vdyBpZiBlbmFibGluZyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGhhcyBhbnkgY2FzY2FkaW5nIGVmZmVjdHMuIEZyb20gdGhlcmUsIEkgd2lsbCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGFueSBwb3RlbnRpYWwgY2hhbmdlcyBJIG1heSB3aXNoIHRvIG1ha2UsIHdoZXRoZXIgdGhleSBiZSBtb2RpZmljYXRpb25zLCBhZGRpdGlvbnMgb3IgcmVtb3ZhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDI4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzg6NTYuMDgxNTMxNDk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjE0MDIxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfRlJFRVNDQUxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkZyZWVzY2FsZSBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozODo1Ni40NDI5NDE5NTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0NjcxOTA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQXNzZXNzaW5nIEZyZWVzY2FsZSBWZW5kb3IgU3VwcG9ydCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGNvZGUgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHdoZXRoZXIgd2UgYWN0dWFsbHkgbmVlZCB0byBpbmNsdWRlIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAuIFdlJ3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrLXJlbGF0ZWQgY29kZSBoZXJlLCBsaWtlbHkgZGV2aWNlIGRyaXZlcnMgb3Igc29tZSBuZXR3b3JrIGFic3RyYWN0aW9uIGxheWVyLCBhbmQgdGhhdCBwcmVwcm9jZXNzb3Igc3ltYm9sIGlzIHNjcmVhbWluZyBcIkZyZWVzY2FsZVwiIGF0IG1lLiBNeSBpbnRlcm5hbCBjaGVja2xpc3QgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgZG93biB0aGUgcG90ZW50aWFsIHNjZW5hcmlvcy4gSXMgdGhpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgRnJlZXNjYWxlIChvciBOWFApIFNvQz8gQXJlIHdlIHRhcmdldGluZyBhIGJvYXJkIHRoYXQgcmVsaWVzIGhlYXZpbHkgb24gRnJlZXNjYWxlJ3MgbmV0d29ya2luZyBJUD8gT3IgaXMgdGhpcyBqdXN0IGxlZ2FjeSBjb2RlIHRoYXQncyBoYW5naW5nIGFyb3VuZD9cblxuSSdtIHRoaW5raW5nLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0IGNvdWxkIGJlIHVzZWZ1bCwgb3IgcG9zc2libHkgbmVjZXNzYXJ5LlxuXG5VbHRpbWF0ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0IHRvIGRldGVybWluZSBpZiB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIHZpdGFsIG9yIGlmIGl0J3MgZGVhZCBjb2RlIGp1c3Qgd2FpdGluZyB0byBiZSBwcnVuZWQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdXNpbmcgdG9vbHMsIGlkZW50aWZ5IG90aGVyIGZpbGVzIHRoYXQgY291bGQgYmUgYWZmZWN0ZWQgYnkgaXQsIGFuZCBkZXRlcm1pbmUgdGhlIGV4YWN0IGZ1bmN0aW9uYWxpdHkgY29udHJvbGxlZCBieSB0aGlzIGZsYWcuIElzIGl0IGp1c3QgYSBkcml2ZXIsIGEgUEhZIGNvbmZpZ3VyYXRpb24sIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsPyBUaW1lIHRvIHN0YXJ0IHRyYWNpbmcgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzQ1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mzk6MDAuNjg5NjY0MjM5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzNzQwODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9Nj1jb25maWcgTkVUX1ZFTkRPUl9GUkVFU0NBTEVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTgtXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6OTpcXHRkZXBlbmRzIG9uIEZTTF9TT0MgfHwgUVVJQ0NfRU5HSU5FIHx8IENQTTEgfHwgQ1BNMiB8fCBQUENfTVBDNTEyeCB8fCBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMTAtXFx0XFx0ICAgTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMnggfHwgXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJGRUMgZXRoZXJuZXQgY29udHJvbGxlciAob2YgQ29sZEZpcmUgYW5kIHNvbWUgaS5NWCBDUFVzKVxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIChNNTIzeCB8fCBNNTI3eCB8fCBNNTI3MiB8fCBNNTI4eCB8fCBNNTIweCB8fCBNNTMyeCB8fCBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMjYtXFx0XFx0ICAgQVJDSF9NWEMgfHwgQVJDSF9TMzIgfHwgU09DX0lNWDI4IHx8IENPTVBJTEVfVEVTVClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0yNy1cXHRkZWZhdWx0IEFSQ0hfTVhDIHx8IFNPQ19JTVgyOCBpZiBBUk1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzoyODpcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMjktXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz0zOT1jb25maWcgRkVDX01QQzUyeHhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy00MC1cXHR0cmlzdGF0ZSBcXFwiRkVDIE1QQzUyeHggZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjQxOlxcdGRlcGVuZHMgb24gUFBDX01QQzUyeHggXFx1MDAyNlxcdTAwMjYgUFBDX0JFU1RDT01NXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNDItXFx0c2VsZWN0IENSQzMyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz01MD1jb25maWcgRkVDX01QQzUyeHhfTURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIkZFQyBNUEM1Mnh4IE1ESU8gYnVzIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo1MjpcXHRkZXBlbmRzIG9uIEZFQ19NUEM1Mnh4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNTMtXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz03MT1jb25maWcgRlNMX1hHTUFDX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTczLVxcdHNlbGVjdCBQSFlMSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo3NDpcXHRkZXBlbmRzIG9uIE9GXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctNzUtXFx0c2VsZWN0IE9GX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnPTgwPWNvbmZpZyBVQ0NfR0VUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTgxLVxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUUUgR2lnYWJpdCBFdGhlcm5ldFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZzo4MjpcXHRkZXBlbmRzIG9uIFFVSUNDX0VOR0lORSBcXHUwMDI2XFx1MDAyNiBQUEMzMlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTgzLVxcdHNlbGVjdCBGU0xfUFFfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9ODk9Y29uZmlnIFVHRVRIX1RYX09OX0RFTUFORFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIlRyYW5zbWl0IG9uIERlbWFuZCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjkxOlxcdGRlcGVuZHMgb24gVUNDX0dFVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy05Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZz05Mz1jb25maWcgR0lBTkZBUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlIFxcXCJHaWFuZmFyIEV0aGVybmV0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjk1OlxcdGRlcGVuZHMgb24gSEFTX0RNQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTk2LVxcdHNlbGVjdCBGU0xfUFFfTURJT1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozOTowMi4zNDM0MDk5MThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU1NzEzNzA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGcmVlc2NhbGUgTmV0d29ya2luZyBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgaGluZ2VzIG9uIGBDT01QSUxFX1RFU1RgIGJlaW5nIGVuYWJsZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBCdXQsIGV2ZW4gaWYgYENPTVBJTEVfVEVTVGAgaXNuJ3QgZW5hYmxlZCwgYE5FVF9WRU5ET1JfRlJFRVNDQUxFYCBhbHNvIGhhcyB0aGVzZSBkZXBlbmRlbmNpZXM6IGBGU0xfU09DIHx8IFFVSUNDX0VOR0lORSB8fCBDUE0xIHx8IENQTTIgfHwgUFBDX01QQzUxMnggfHwgTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMnggfHwgQVJDSF9NWEMgfHwgQVJDSF9TMzIgfHwgU09DX0lNWDI4IHx8IENPTVBJTEVfVEVTVGAuIFRoYXQncyBhIHByZXR0eSBkaXZlcnNlIHNldCBvZiBhcmNoaXRlY3R1cmVzISBTbywgaWYgYENPTVBJTEVfVEVTVGAgaXMgZW5hYmxlZCwgdGhlbiBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgICpjYW4qIGJlIGVuYWJsZWQuIEkgd2lsbCBlbmFibGUgYm90aCBgTkVUX1ZFTkRPUl9GUkVFU0NBTEVgIGFuZCBgRlNMX0ZNQU5gLlxuXG5Ob3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZvciB0aGUgZHJpdmVyIGl0c2VsZiwgc28gSSBuZWVkIHRvIGNoZWNrIGBGU0xfRk1BTmAuIFllcywgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkcml2ZXIgaXMgaW5kZWVkIGBGU0xfRk1BTmAuIFRoYXQncyBnb29kLlxuXG5BbHJpZ2h0LCBsZXQncyByZXZpZXcgdGhlIEpTT04gY29uZmlndXJhdGlvbi4gVGhlIGdvYWwgaGVyZSBpcyBjbGVhcmx5IGZ1enppbmcgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlci4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgdHJ1ZSwgd2hpY2ggdmFsaWRhdGVzIHRoZSBlZmZvcnQuIFRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGluY2x1ZGVzIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZXkncmUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciBkZXZpY2UgdHJlZSBwYXJzaW5nIGFuZCBjb25maWd1cmF0aW9uLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBhbHJlYWR5IHNldCwgd2hpY2ggYWxpZ25zIHdpdGggbXkgZmluZGluZ3M6IGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAgYW5kIGBGU0xfRk1BTmAuIFRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMsIHRoZSBwYXRjaCBmaXhlcyBtZW1vcnkgYW5kIGNsb2NrIGxlYWtzIGluIHRoZSBGcmVlc2NhbGUgRk1hbiBkcml2ZXIsIGFuZCB0aGVzZSBwYXRocyBjYW4gYmUgdGVzdGVkIHRocm91Z2ggc3l6a2FsbGVyIHZpYSBwbGF0Zm9ybSBkZXZpY2UgYW5kIGRldmljZSB0cmVlIGluamVjdGlvbi5cblxuVGhpbmtpbmcgYWJvdXQgdGhlIGNvZGUsIGBmbWFuX3Byb2JlYCBzZWVtcyBsaWtlIGEgZ29vZCBmb2N1cyBzeW1ib2wsIHRvby4gQmVjYXVzZSBpdCBhbHNvIGNhbGxzIGByZWFkX2R0c19ub2RlYCBhbmQgYGZtYW5fY29uZmlnYC4gU28sIEkgd2lsbCBhZGQgYGZtYW5fcHJvYmVgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NzQsIk91dHB1dFRva2VucyI6MTA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM5OjExLjkwMDU0ODk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE0Njc0NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfRlJFRVNDQUxFXCIsXG4gICAgXCJGU0xfRk1BTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlYWRfZHRzX25vZGVcIixcbiAgICBcImZtYW5fY29uZmlnXCIsXG4gICAgXCJmbWFuX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFuZCBjbG9jayBsZWFrcyBpbiB0aGUgcHJvYmUgZXJyb3IgcGF0aHMgb2YgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlci4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBieSBzeXprYWxsZXIgdmlhIHBsYXRmb3JtIGRldmljZSBhbmQgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfRlJFRVNDQUxFXCIsXG4gICAgXCJGU0xfRk1BTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlYWRfZHRzX25vZGVcIixcbiAgICBcImZtYW5fY29uZmlnXCIsXG4gICAgXCJmbWFuX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWVtb3J5IGFuZCBjbG9jayBsZWFrcyBpbiB0aGUgcHJvYmUgZXJyb3IgcGF0aHMgb2YgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlci4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBieSBzeXprYWxsZXIgdmlhIHBsYXRmb3JtIGRldmljZSBhbmQgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowlsxhc[1] Phase: Succeeded StartedAt: 2026-06-22 09:39:49 +0000 UTC FinishedAt: 2026-06-22 09:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-22 09:39:49 +0000 UTC FinishedAt: 2026-06-22 09:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2] Phase: Succeeded StartedAt: 2026-06-22 09:39:49 +0000 UTC FinishedAt: 2026-06-22 10:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-22 09:39:49 +0000 UTC FinishedAt: 2026-06-22 10:50:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-22 09:39:49 +0000 UTC FinishedAt: 2026-06-22 09:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-22 09:39:49 +0000 UTC FinishedAt: 2026-06-22 09:39:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowlsxhc/series-workflowlsxhc-convert-artifact-920384743/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-22 09:40:33 +0000 UTC FinishedAt: 2026-06-22 10:12:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-22 09:40:33 +0000 UTC FinishedAt: 2026-06-22 10:12:53 +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:*f7524d93-9419-46d6-9c57-976e4764e9ba,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-workflowlsxhc/series-workflowlsxhc-convert-artifact-920384743/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": "3da7cda5-d90d-47d8-8632-bf0faac39863", "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-workflowlsxhc/series-workflowlsxhc-build-action-899083133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-22 09:40:33 +0000 UTC FinishedAt: 2026-06-22 10:11:42 +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:*f7524d93-9419-46d6-9c57-976e4764e9ba,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-workflowlsxhc/series-workflowlsxhc-convert-artifact-920384743/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": "3da7cda5-d90d-47d8-8632-bf0faac39863", "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-workflowlsxhc/series-workflowlsxhc-build-action-899083133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-22 10:12:53 +0000 UTC FinishedAt: 2026-06-22 10:12:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-22 10:12:53 +0000 UTC FinishedAt: 2026-06-22 10:12:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-22 10:12:53 +0000 UTC FinishedAt: 2026-06-22 10:13:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-22 10:12:53 +0000 UTC FinishedAt: 2026-06-22 10:12:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowlsxhc/series-workflowlsxhc-convert-artifact-2860289942/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-22 10:13:03 +0000 UTC FinishedAt: 2026-06-22 10:15:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-22 10:13:03 +0000 UTC FinishedAt: 2026-06-22 10:14:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3da7cda5-d90d-47d8-8632-bf0faac39863,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-workflowlsxhc/series-workflowlsxhc-build-action-899083133/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-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-22 10:15:03 +0000 UTC FinishedAt: 2026-06-22 10:15:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-22 10:15:03 +0000 UTC FinishedAt: 2026-06-22 10:15:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-22 10:15:03 +0000 UTC FinishedAt: 2026-06-22 10:46:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-22 10:15:03 +0000 UTC FinishedAt: 2026-06-22 10:46:06 +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:*f7524d93-9419-46d6-9c57-976e4764e9ba,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-workflowlsxhc/series-workflowlsxhc-convert-artifact-2860289942/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": "b4534a9a-884c-4a2f-bd44-18cfce54ef33", "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-workflowlsxhc/series-workflowlsxhc-build-action-344674458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-22 10:15:03 +0000 UTC FinishedAt: 2026-06-22 10:45:56 +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:*f7524d93-9419-46d6-9c57-976e4764e9ba,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-workflowlsxhc/series-workflowlsxhc-convert-artifact-2860289942/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": "b4534a9a-884c-4a2f-bd44-18cfce54ef33", "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-workflowlsxhc/series-workflowlsxhc-build-action-344674458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-22 10:46:06 +0000 UTC FinishedAt: 2026-06-22 10:46:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-22 10:46:06 +0000 UTC FinishedAt: 2026-06-22 10:46:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-22 10:46:06 +0000 UTC FinishedAt: 2026-06-22 10:47:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-22 10:46:06 +0000 UTC FinishedAt: 2026-06-22 10:47:45 +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:*b4534a9a-884c-4a2f-bd44-18cfce54ef33,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-workflowlsxhc/series-workflowlsxhc-build-action-344674458/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-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-22 10:47:55 +0000 UTC FinishedAt: 2026-06-22 10:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-22 10:47:55 +0000 UTC FinishedAt: 2026-06-22 10:50:41 +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":["read_dts_node","fman_config","fman_probe"],"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:*3da7cda5-d90d-47d8-8632-bf0faac39863,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b4534a9a-884c-4a2f-bd44-18cfce54ef33,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-workflowlsxhc/series-workflowlsxhc-build-action-899083133/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-workflowlsxhc/series-workflowlsxhc-build-action-344674458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-22 10:47:55 +0000 UTC FinishedAt: 2026-06-22 10:48:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-22 10:47:55 +0000 UTC FinishedAt: 2026-06-22 10:47:59 +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":["read_dts_node","fman_config","fman_probe"],"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-workflowlsxhc/series-workflowlsxhc-convert-artifact-3339835195/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-22 10:47:55 +0000 UTC FinishedAt: 2026-06-22 10:47:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-22 10:47:55 +0000 UTC FinishedAt: 2026-06-22 10:47:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-22 10:47:55 +0000 UTC FinishedAt: 2026-06-22 10:47:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-22 10:48:05 +0000 UTC FinishedAt: 2026-06-22 10:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlsxhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["read_dts_node","fman_config","fman_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_FREESCALE","FSL_FMAN"],"series_id":"5bada3b9-d1f0-43d9-a4fc-830a90f438ab","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-22 10:48:05 +0000 UTC FinishedAt: 2026-06-22 10:50:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3da7cda5-d90d-47d8-8632-bf0faac39863,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b4534a9a-884c-4a2f-bd44-18cfce54ef33,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-workflowlsxhc/series-workflowlsxhc-build-action-899083133/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-workflowlsxhc/series-workflowlsxhc-build-action-344674458/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-workflowlsxhc/series-workflowlsxhc-convert-artifact-3339835195/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,}