Name: series-workflowqm5zp Phase: Succeeded StartedAt: 2026-07-29 16:34:35 +0000 UTC FinishedAt: 2026-07-29 21:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[0] Phase: Succeeded StartedAt: 2026-07-29 16:34:35 +0000 UTC FinishedAt: 2026-07-29 17:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 16:34:35 +0000 UTC FinishedAt: 2026-07-29 17:02:07 +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": "2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "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": "2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "a93e0d9c-fe26-47a5-a945-3d16cd7d1569" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nci_ntf_packet" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9udGZfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cgaW4gTkNJIG5vdGlmaWNhdGlvbiBwYWNrZXQgcGFyc2luZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlICgvZGV2L3ZpcnR1YWxfbmNpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg3MDkyYjk3ZDdhMjkxMTA5YzExMTQyMWYxZjA2ZTUyZmYzOTBmYWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxNzowMDoyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9udGYuYyBiL25ldC9uZmMvbmNpL250Zi5jXG5pbmRleCBjOTY1MTJiYjg2NTMxLi5lMDU1NWM5MGQ2NTc0IDEwMDY0NFxuLS0tIGEvbmV0L25mYy9uY2kvbnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmNpL250Zi5jXG5AQCAtNjMxLDYgJiM0Mzs2MzEsOSBAQCBzdGF0aWMgaW50IG5jaV9zdG9yZV9nZW5lcmFsX2J5dGVzX25mY19kZXAoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRzd2l0Y2ggKG50Zi1cdTAwM2VhY3RpdmF0aW9uX3JmX3RlY2hfYW5kX21vZGUpIHtcbiBcdGNhc2UgTkNJX05GQ19BX1BBU1NJVkVfUE9MTF9NT0RFOlxuIFx0Y2FzZSBOQ0lfTkZDX0ZfUEFTU0lWRV9QT0xMX01PREU6XG4mIzQzO1x0XHRpZiAobnRmLVx1MDAzZWFjdGl2YXRpb25fcGFyYW1zLnBvbGxfbmZjX2RlcC5hdHJfcmVzX2xlbiBcdTAwM2NcbiYjNDM7XHRcdCAgICBORkNfQVRSX1JFU19HVF9PRkZTRVQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRuZGV2LVx1MDAzZXJlbW90ZV9nYl9sZW4gPSBtaW5fdChfX3U4LFxuIFx0XHRcdChudGYtXHUwMDNlYWN0aXZhdGlvbl9wYXJhbXMucG9sbF9uZmNfZGVwLmF0cl9yZXNfbGVuXG4gXHRcdFx0XHRcdFx0LSBORkNfQVRSX1JFU19HVF9PRkZTRVQpLFxuQEAgLTY0Myw2ICYjNDM7NjQ2LDkgQEAgc3RhdGljIGludCBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFxuIFx0Y2FzZSBOQ0lfTkZDX0FfUEFTU0lWRV9MSVNURU5fTU9ERTpcbiBcdGNhc2UgTkNJX05GQ19GX1BBU1NJVkVfTElTVEVOX01PREU6XG4mIzQzO1x0XHRpZiAobnRmLVx1MDAzZWFjdGl2YXRpb25fcGFyYW1zLmxpc3Rlbl9uZmNfZGVwLmF0cl9yZXFfbGVuIFx1MDAzY1xuJiM0MztcdFx0ICAgIE5GQ19BVFJfUkVRX0dUX09GRlNFVClcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdG5kZXYtXHUwMDNlcmVtb3RlX2diX2xlbiA9IG1pbl90KF9fdTgsXG4gXHRcdFx0KG50Zi1cdTAwM2VhY3RpdmF0aW9uX3BhcmFtcy5saXN0ZW5fbmZjX2RlcC5hdHJfcmVxX2xlblxuIFx0XHRcdFx0XHRcdC0gTkZDX0FUUl9SRVFfR1RfT0ZGU0VUKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX250Zl9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBpbnRlZ2VyIHVuZGVyZmxvdyBpbiBOQ0kgbm90aWZpY2F0aW9uIHBhY2tldCBwYXJzaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB2aXJ0dWFsIE5DSSBkZXZpY2UgKC9kZXYvdmlydHVhbF9uY2kpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODcwOTJiOTdkN2EyOTExMDljMTExNDIxZjFmMDZlNTJmZjM5MGZhZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDI5IDE3OjAwOjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvbnRmLmMgYi9uZXQvbmZjL25jaS9udGYuYwppbmRleCBjOTY1MTJiYjg2NTMxLi5lMDU1NWM5MGQ2NTc0IDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9udGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL25jaS9udGYuYwpAQCAtNjMxLDYgJiM0Mzs2MzEsOSBAQCBzdGF0aWMgaW50IG5jaV9zdG9yZV9nZW5lcmFsX2J5dGVzX25mY19kZXAoc3RydWN0IG5jaV9kZXYgKm5kZXYsCiAJc3dpdGNoIChudGYtJmd0O2FjdGl2YXRpb25fcmZfdGVjaF9hbmRfbW9kZSkgewogCWNhc2UgTkNJX05GQ19BX1BBU1NJVkVfUE9MTF9NT0RFOgogCWNhc2UgTkNJX05GQ19GX1BBU1NJVkVfUE9MTF9NT0RFOgomIzQzOwkJaWYgKG50Zi0mZ3Q7YWN0aXZhdGlvbl9wYXJhbXMucG9sbF9uZmNfZGVwLmF0cl9yZXNfbGVuICZsdDsKJiM0MzsJCSAgICBORkNfQVRSX1JFU19HVF9PRkZTRVQpCiYjNDM7CQkJYnJlYWs7CiAJCW5kZXYtJmd0O3JlbW90ZV9nYl9sZW4gPSBtaW5fdChfX3U4LAogCQkJKG50Zi0mZ3Q7YWN0aXZhdGlvbl9wYXJhbXMucG9sbF9uZmNfZGVwLmF0cl9yZXNfbGVuCiAJCQkJCQktIE5GQ19BVFJfUkVTX0dUX09GRlNFVCksCkBAIC02NDMsNiAmIzQzOzY0Niw5IEBAIHN0YXRpYyBpbnQgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAogCWNhc2UgTkNJX05GQ19BX1BBU1NJVkVfTElTVEVOX01PREU6CiAJY2FzZSBOQ0lfTkZDX0ZfUEFTU0lWRV9MSVNURU5fTU9ERToKJiM0MzsJCWlmIChudGYtJmd0O2FjdGl2YXRpb25fcGFyYW1zLmxpc3Rlbl9uZmNfZGVwLmF0cl9yZXFfbGVuICZsdDsKJiM0MzsJCSAgICBORkNfQVRSX1JFUV9HVF9PRkZTRVQpCiYjNDM7CQkJYnJlYWs7CiAJCW5kZXYtJmd0O3JlbW90ZV9nYl9sZW4gPSBtaW5fdChfX3U4LAogCQkJKG50Zi0mZ3Q7YWN0aXZhdGlvbl9wYXJhbXMubGlzdGVuX25mY19kZXAuYXRyX3JlcV9sZW4KIAkJCQkJCS0gTkZDX0FUUl9SRVFfR1RfT0ZGU0VUKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBORkMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgbmV0L25mYy9uY2kvbnRmLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhleSYjMzk7cmUgYWRkaW5nIGJvdW5kcyBjaGVja2luZyBmb3IgYGF0cl9yZXNfbGVuYCBhbmQgYGF0cl9yZXFfbGVuYCwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aG9zZSBvZmZzZXQgc3VidHJhY3Rpb25zLiBQcmV2ZW50aW5nIHVuZGVyZmxvdyBpcyBhbHdheXMgYSB3aW4sIG1ha2VzIHNlbnNlIHRvIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWxseSBtYWxpY2lvdXMgTkZDIG1lc3NhZ2VzLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMsIGhvdyByZWxldmFudCBpcyB0aGlzIGNoYW5nZT8gSXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIGNvbmZpZ3VyYXRpb24/CgpNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZy4gSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIGBudGYuY2AgYW5kIHRodXMgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBhcmUgYnVpbHQgaW50byB0aGUga2VybmVsIGltYWdlLiBJdCYjMzk7cyBhIHF1aWNrIGxvb2t1cCwgYnV0IHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIG5lY2Vzc2FyeSBjb25maWcgb3B0aW9ucyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3QgYW5kIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgY29kZSBiZWluZyBhY3RpdmVseSB1c2VkIGluIGRlcGxveWVkIHN5c3RlbXMuIFRoYXQgZGV0ZXJtaW5lcyBob3cgbXVjaCB3ZWlnaHQgSSBzaG91bGQgcHV0IG9uIGEgZml4IGxpa2UgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvbnRmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvbnRmLmM9NjAwPXN0YXRpYyB2b2lkIG5jaV90YXJnZXRfYXV0b19hY3RpdmF0ZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4tLVxubmV0L25mYy9uY2kvbnRmLmMtNjIyLVxubmV0L25mYy9uY2kvbnRmLmM6NjIzOnN0YXRpYyBpbnQgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbm5ldC9uZmMvbmNpL250Zi5jLTYyNC1cdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGYgKm50Zilcbi0tXG5uZXQvbmZjL25jaS9udGYuYz02OTM9c3RhdGljIGludCBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9udGYuYy04NDktXHRcdGlmIChudGYucmZfaW50ZXJmYWNlID09IE5DSV9SRl9JTlRFUkZBQ0VfTkZDX0RFUCkge1xubmV0L25mYy9uY2kvbnRmLmM6ODUwOlx0XHRcdGVyciA9IG5jaV9zdG9yZV9nZW5lcmFsX2J5dGVzX25mY19kZXAobmRldiwgXHUwMDI2bnRmKTtcbm5ldC9uZmMvbmNpL250Zi5jLTg1MS1cdFx0XHRpZiAoZXJyICE9IE5DSV9TVEFUVVNfT0spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1NQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGF0YSBGbG93IG9mIGBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IG9ubHkgdXNlZCB3aXRoaW4gdGhpcyBjb21waWxhdGlvbiB1bml0LCB3aGljaCBsaW1pdHMgdGhlIHNjb3BlIG9mIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBpdHMgdXNhZ2UuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGRhdGEgZmxvdy4gSSBrbm93IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldGAsIHdoaWNoIGdpdmVzIG1lIGEgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldGAgYW5kIHNlZSAqaXRzKiBjYWxsZXJzLiBUaGF0IHdpbGwgc2hvdyBtZSB0aGUgaGlnaGVyLWxldmVsIGNvbnRleHQgaW4gd2hpY2ggdGhlIGJ5dGUgc3RvcmFnZSBvY2N1cnMgZHVyaW5nIE5GQy1ERVAgaW50ZXJmYWNlIGFjdGl2YXRpb24uIEtub3dpbmcgdGhlIGNhbGwgY2hhaW4gd2lsbCBoZWxwIG1lIHBpbnBvaW50IHRoZSBwdXJwb3NlIG9mIHRoaXMgYnl0ZSBzdG9yYWdlIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgKnRoYXQqIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvbnRmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvbnRmLmM9NjcxPXN0YXRpYyBpbnQgbmNpX3N0b3JlX2F0c19uZmNfaXNvX2RlcChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9udGYuYy02OTItXG5uZXQvbmZjL25jaS9udGYuYzo2OTM6c3RhdGljIGludCBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbm5ldC9uZmMvbmNpL250Zi5jLTY5NC1cdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9uY2kvbnRmLmM9OTcyPXZvaWQgbmNpX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9uY2kvbnRmLmMtMTAyMC1cdGNhc2UgTkNJX09QX1JGX0lOVEZfQUNUSVZBVEVEX05URjpcbm5ldC9uZmMvbmNpL250Zi5jOjEwMjE6XHRcdGlmIChuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldChuZGV2LCBza2IpKVxubmV0L25mYy9uY2kvbnRmLmMtMTAyMi1cdFx0XHRnb3RvIGVuZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjkzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5GQyBOb3RpZmljYXRpb24gRW50cnkgUG9pbnQqKgoKT2theSwgc28gYG5jaV9udGZfcGFja2V0YCBpcyBjbGVhcmx5IHdoZXJlIHRoZSBORkMgbm90aWZpY2F0aW9uIGFjdGlvbiBiZWdpbnMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbnRyeSBwb2ludC4gVGhhdCBsaWtlbHkgbWVhbnMgY2hlY2tpbmcgdGhlIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBnaXZlbiB0aGF0IHRoaXMgaXMgTkZDLXJlbGF0ZWQgY29kZSwgSSYjMzk7bGwgaGVhZCBzdHJhaWdodCBmb3IgdGhlIGBuZXQvbmZjL25jaS9NYWtlZmlsZWAgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBub3RpZmljYXRpb24gbWVjaGFuaXNtIGlzIGNvbmZpZ3VyZWQgYW5kIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgYnVpbGQtdGltZSBzcGVjaWZpY3Mgb2YgYW55IGtlcm5lbCBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9NYWtlZmlsZT02PW9iai0kKENPTkZJR19ORkNfTkNJKSAmIzQzOz0gbmNpLm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlLTctXG5uZXQvbmZjL25jaS9NYWtlZmlsZTo4Om5jaS1vYmpzIDo9IGNvcmUubyBkYXRhLm8gbGliLm8gbnRmLm8gcnNwLm8gaGNpLm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlLTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAxNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5GQyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgc3lzdGVtIG5lZWRzIGBDT05GSUdfTkZDX05DSWAuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGlzIHNldHRpbmcuIE15IGZvY3VzIHdpbGwgYmUgb24gYG5ldC9uZmMvS2NvbmZpZ2AgYW5kLCBjcnVjaWFsbHksIGBuZXQvbmZjL25jaS9LY29uZmlnYC4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGRyaXZlcnMgYXJlIGNvbnRpbmdlbnQgdXBvbiBgQ09ORklHX05GQ19OQ0lgIGJlaW5nIGVuYWJsZWQuIEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBvdGhlciBORkMgZnVuY3Rpb25hbGl0aWVzPyBBcmUgdGhlcmUgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCBjb25maWd1cmF0aW9ucyB0aWVkIHRvIHRoaXM/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIHNldHRpbmcgZml0cyBpbnRvIHRoZSBicm9hZGVyIE5GQyBlY29zeXN0ZW0gYW5kIHdoYXQgaW1wYWN0IGl0IGhhcyBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBsaWtlbHkgcmVxdWlyZW1lbnRzIGZvciB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZDX05DSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L25mYy9uY2kvS2NvbmZpZzoyOmNvbmZpZyBORkNfTkNJXG5uZXQvbmZjL25jaS9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIE5GQ1xuLS1cbm5ldC9uZmMvbmNpL0tjb25maWctMTItXG5uZXQvbmZjL25jaS9LY29uZmlnOjEzOmNvbmZpZyBORkNfTkNJX1NQSVxubmV0L25mYy9uY2kvS2NvbmZpZy0xNC1cdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgU1BJXG4tLVxubmV0L25mYy9uY2kvS2NvbmZpZy0yMy1cbm5ldC9uZmMvbmNpL0tjb25maWc6MjQ6Y29uZmlnIE5GQ19OQ0lfVUFSVFxubmV0L25mYy9uY2kvS2NvbmZpZy0yNS1cdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgVFRZXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUaGlua2luZyBUaHJvdWdoIE5GQyBTdGFjayBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgTkZDX05DSWAgY29tcG9uZW50LCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIGl0cyBkZXBlbmRlbmN5IG9uIHRoZSBiYXNlIGBORkNgIG1vZHVsZS4gTm8gc3VycHJpc2UgdGhlcmU7IHRoYXQmIzM5O3MgZ2VuZXJhbGx5IGhvdyB0aGVzZSB0aGluZ3MgYXJlIHN0cnVjdHVyZWQuIE5vdywgd2hlcmUgZG8gSSBzdGFydCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXA/IFRoZSBpbW1lZGlhdGUgcG9ydCBvZiBjYWxsIGZvciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBpcyBhbHdheXMgYG5ldC9uZmMvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZm9ybWFsIGRlY2xhcmF0aW9uIG9mIHRoaXMgcmVsYXRpb25zaGlwIGFuZCBjYW4gdmVyaWZ5IGFueSBwb3RlbnRpYWwgbnVhbmNlcyBvciBjb25kaXRpb25hbCBhc3BlY3RzLiBJdCBpcyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IGBORkNfTkNJYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgTkZDIGZyYW1ld29yay4gTGV0JiMzOTtzIGdldCB0byB0aGUgS2NvbmZpZyBmaWxlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvS2NvbmZpZy01LVxubmV0L25mYy9LY29uZmlnOjY6bWVudWNvbmZpZyBORkNcbm5ldC9uZmMvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuLS1cbm5ldC9uZmMvS2NvbmZpZy0xNi1cbm5ldC9uZmMvS2NvbmZpZzoxNzpjb25maWcgTkZDX0RJR0lUQUxcbm5ldC9uZmMvS2NvbmZpZy0xOC1cdGRlcGVuZHMgb24gTkZDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBhbmFseXNpcywgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiBpdCB3ZXJlIG15IG93biBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBORkMgRnV6emluZyBQb3NzaWJpbGl0aWVzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBORkMsIGFuZCBzcGVjaWZpY2FsbHkgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBORkNgIGFuZCBgTkZDX05DSWAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgYXJlIHRoZXJlIGFueSB2aXJ0dWFsIGRyaXZlcnMgSSBjYW4gbGV2ZXJhZ2UgdG8gZnV6eiB0aGUgYE5GQyBOQ0lgIHNpZGUgb2YgdGhpbmdzPyBUaGF0JiMzOTtzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIGlmIEkgY2FuIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiB3aXRob3V0IG5lZWRpbmcgYWN0dWFsIHBoeXNpY2FsIGRldmljZXMuCgpOb3csIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5LCBkb2VzIHN5emthbGxlciBhcHByb2FjaCBORkMgZnV6emluZyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIG5ldGxpbmsgc29ja2V0cyBvciBwZXJoYXBzIGV2ZW4gdXNpbmcgdmlydHVhbCBkZXZpY2VzPyBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHNldHVwLgoKQWgsIHdhaXQgYSBzZWNvbmQsIGxldCYjMzk7cyBsb29rIGF0IGBuY2lfbnRmX3BhY2tldGAgZnVuY3Rpb24uIFRoaXMgc2VlbXMgaW1wb3J0YW50LCBhcyBpdCYjMzk7cyBkaXJlY3RseSByZWxhdGVkIHRvIHJlY2VpdmluZyBwYWNrZXRzIGZyb20gdGhlIGRldmljZS4gVGhhdCYjMzk7cyBhIGtleSBpbnRlcmFjdGlvbiBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyIC0gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc3RhY2ssIHRvIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBgbmNpX250Zl9wYWNrZXRgIGZ1bmN0aW9uLiBUaGF0IHdpbGwgdGVsbCBtZSB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBtYXkgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25jaV9udGZfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL2NvcmUuYz0xNTU5PXN0YXRpYyB2b2lkIG5jaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTU4Mi1cdFx0Y2FzZSBOQ0lfTVRfTlRGX1BLVDpcbm5ldC9uZmMvbmNpL2NvcmUuYzoxNTgzOlx0XHRcdG5jaV9udGZfcGFja2V0KG5kZXYsIHNrYik7XG5uZXQvbmZjL25jaS9jb3JlLmMtMTU4NC1cdFx0XHRicmVhaztcbi0tXG5uZXQvbmZjL25jaS9udGYuYz05NDg9c3RhdGljIGludCBuY2lfbmZjZWVfZGlzY292ZXJfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9udGYuYy05NzEtXG5uZXQvbmZjL25jaS9udGYuYzo5NzI6dm9pZCBuY2lfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9uZmMvbmNpL250Zi5jLTk3My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NDEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5DSSBQYWNrZXQgSW5qZWN0aW9uKioKCk9rYXksIHNvIGBuY2lfcnhfd29ya2AgaXMgY2xlYXJseSB0aGUgZnVuY3Rpb24gcHJvY2Vzc2luZyByZWNlaXZlZCBwYWNrZXRzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICpob3cqIGFyZSB0aGVzZSBwYWNrZXRzIGV2ZW4gZ2V0dGluZyBpbmplY3RlZCBpbnRvIHRoZSBzeXN0ZW0gaW4gdGhlIGZpcnN0IHBsYWNlPyBJcyBTeXprYWxsZXIgbGV2ZXJhZ2luZyBhIHN0YW5kYXJkIE5DSSBkZXZpY2UsIGFsYmVpdCBwZXJoYXBzIGEgdmlydHVhbCBvbmU/IE9yIGFyZSB0aGV5IGVtcGxveWluZyBzb21lIG1vcmUgZXNvdGVyaWMgaW5qZWN0aW9uIG1lY2hhbmlzbT8KClRvIGZpZ3VyZSB0aGlzIG91dCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyB2aXJ0dWFsIE5DSSBkZXZpY2UgY29kZS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayB0aGUgYGRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmNgIGZpbGUg4oCTIG9yIHNvbWV0aGluZyBzaW1pbGFybHkgbmFtZWQsIGlmIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSB1bmRlcmx5aW5nIGluamVjdGlvbiBtZXRob2QuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IGFuZCByZXZlYWwgdGhlIGxpa2VseSBpbmplY3Rpb24gbWV0aG9kLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhlIGRldmVsb3BlcnMgaGF2ZSBpbXBsZW1lbnRlZCBhIHZpcnR1YWwgZGV2aWNlIHRvIGRvIHRoZSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0dWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWc9MzE9Y29uZmlnIE5GQ19TSU1cbi0tXG5kcml2ZXJzL25mYy9LY29uZmlnLTM0LVx0aGVscFxuZHJpdmVycy9uZmMvS2NvbmZpZzozNTpcdCAgVGhpcyBkcml2ZXIgZGVjbGFyZXMgdHdvIHZpcnR1YWwgTkZDIGRldmljZXMgc3VwcG9ydGluZyBORkMtREVQXG5kcml2ZXJzL25mYy9LY29uZmlnLTM2LVx0ICBwcm90b2NvbC4gQW4gTExDUCBjb25uZWN0aW9uIGNhbiBiZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZW0gYW5kXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZz01Mj1jb25maWcgTkZDX1ZJUlRVQUxfTkNJXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZy01NS1cdGhlbHBcbmRyaXZlcnMvbmZjL0tjb25maWc6NTY6XHQgIE5DSSB2aXJ0dWFsIGRldmljZSBzaW11bGF0ZXMgYSBOQ0kgZGV2aWNlIHRvIHRoZSB1c2VyLlxuZHJpdmVycy9uZmMvS2NvbmZpZy01Ny1cdCAgSXQgY2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIE5DSSBtb2R1bGUgYW5kIGFwcGxpY2F0aW9ucy5cbmRyaXZlcnMvbmZjL0tjb25maWc6NTg6XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIGFuZFxuZHJpdmVycy9uZmMvS2NvbmZpZy01OS1cdCAgbW9kdWxlLlxuLS1cbmRyaXZlcnMvbmZjL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19ORkNfU1Q5NUhGKVx0JiM0Mzs9IHN0OTVoZi9cbmRyaXZlcnMvbmZjL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpXHQmIzQzOz0gdmlydHVhbF9uY2lkZXYub1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjMtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjI0OnN0cnVjdCB2aXJ0dWFsX25jaV9kZXYge1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yNS1cdHN0cnVjdCBuY2lfZGV2ICpuZGV2O1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzEtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjMyOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzMte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzozNDpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTM1LVxuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzktXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjQwOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfY2xvc2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTQxLXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NDI6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy00My1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTUyLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo1MzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpX3NlbmQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTU0LXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NTU6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01Ni1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTc1LVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgdmlydHVhbF9uY2lfb3BzID0ge1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3NzpcdC5vcGVuID0gdmlydHVhbF9uY2lfb3BlbixcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzg6XHQuY2xvc2UgPSB2aXJ0dWFsX25jaV9jbG9zZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzk6XHQuc2VuZCA9IHZpcnR1YWxfbmNpX3NlbmRcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODAtfTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODEtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjgyOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgzLVx0XHRcdFx0ICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTg0LXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6ODU6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTg2LVx0c2l6ZV90IGFjdHVhbF9sZW47XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTItXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjExMzpzdGF0aWMgc3NpemVfdCB2aXJ0dWFsX25jaWRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE0LVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTYte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMTc6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExOC1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzItXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEzMzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNC17XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNS1cdGludCByZXQgPSAwO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMzY6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2O1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzctXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNDAtXHRcdHJldHVybiAtRU5PTUVNO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNDE6XHR2ZGV2LVx1MDAzZW5kZXYgPSBuY2lfYWxsb2NhdGVfZGV2aWNlKFx1MDAyNnZpcnR1YWxfbmNpX29wcyxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTQyLVx0XHRWSVJUVUFMX05GQ19QUk9UT0NPTFMsIDAsIDApO1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTYzLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjQ6c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTY1LXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTY2Olx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjctXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzUtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3NjpzdGF0aWMgbG9uZyB2aXJ0dWFsX25jaWRldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTc3LVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzgte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNzk6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE4MC1cdGNvbnN0IHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2ID0gdmRldi1cdTAwM2VuZGV2LVx1MDAzZW5mY19kZXY7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTEtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5MjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aXJ0dWFsX25jaWRldl9mb3BzID0ge1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTMtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk0Olx0LnJlYWQgPSB2aXJ0dWFsX25jaWRldl9yZWFkLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTU6XHQud3JpdGUgPSB2aXJ0dWFsX25jaWRldl93cml0ZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk2Olx0Lm9wZW4gPSB2aXJ0dWFsX25jaWRldl9vcGVuLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTc6XHQucmVsZWFzZSA9IHZpcnR1YWxfbmNpZGV2X2Nsb3NlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTg6XHQudW5sb2NrZWRfaW9jdGwgPSB2aXJ0dWFsX25jaWRldl9pb2N0bFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTktfTtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jPTIwMT1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbWlzY2RldiA9IHtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjAyLVx0Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyMDM6XHQubmFtZSA9IFwmIzM0O3ZpcnR1YWxfbmNpXCYjMzQ7LFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyMDQ6XHQuZm9wcyA9IFx1MDAyNnZpcnR1YWxfbmNpZGV2X2ZvcHMsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIwNS1cdC5tb2RlID0gMDYwMCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgxOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBWaXJ0dWFsIE5DSSBEZXZpY2UqKgoKT2theSwgdGhpcyBpcyBwcm9taXNpbmchIFRoZSBgZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuY2AgZmlsZSBjcmVhdGVzIGEgYC9kZXYvdmlydHVhbF9uY2lgIGRldmljZS4gIFRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkgd2FzIGhvcGluZyBmb3Ig4oCTIGEgZGlyZWN0LCB1c2Vyc3BhY2UtYWNjZXNzaWJsZSBlbnRyeSBwb2ludCBpbnRvIHRoZSBOQ0kgc3Vic3lzdGVtLCBtYWtpbmcgaXQgcGVyZmVjdCBmb3IgZnV6emluZy4gIEkgY2FuIGluamVjdCBwYWNrZXRzIGRpcmVjdGx5ISAgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gZW5hYmxlIGFyZSBgTkZDYCwgYE5GQ19OQ0lgLCBhbmQgYE5GQ19WSVJUVUFMX05DSWAuICBHb29kLCBnb29kLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gYG5jaV9zdG9yZV9nZW5lcmFsX2J5dGVzX25mY19kZXBgLiBJIHJlbWVtYmVyIHRoYXQgZnVuY3Rpb24gYmVpbmcgYSBwb3RlbnRpYWwgdGFyZ2V0LiAgSXQmIzM5O3MgY2FsbGVkIGZyb20gYG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0YCwgd2hpY2ggaXRzZWxmIGlzIGxpa2VseSB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIHRyaWdnZXIuIEJ1dCB3YWl04oCmIGlzbiYjMzk7dCBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgIHN0YXRpYz8gIFllcywgaXQgaXMuIFRoYXQmIzM5O3MgYSBiaXQgYW5ub3lpbmc7IHRoZSBmdW5jdGlvbiBpcyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgaXRzIHNvdXJjZSBmaWxlLiBTbywgSSB3aWxsIG5lZWQgdG8gZm9jdXMgb24gYG5jaV9udGZfcGFja2V0YC4gSXQgaXMgdGhlIGNhbGwgcG9pbnQgZm9yIHRoZSBmb3JtZXIgYW5kIG5vdCBzdGF0aWMuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTkZDX1ZJUlRVQUxfTkNJYCBhZ2FpbiBqdXN0IHRvIGJlIGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORkNfVklSVFVBTF9OQ0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmZjL0tjb25maWc6NTI6Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O05DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTAxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzoKCioqSW52ZXN0aWdhdGluZyBORkMgVmlydHVhbGl6YXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBORkNfVklSVFVBTF9OQ0lgIGNvbmZpZ3VyYXRpb24uIEl0JiMzOTtzIGdvdCBtZSB3b25kZXJpbmcg4oCTIGlzIHRoaXMgdGhpbmcgdHJ1bHkgaW5kZXBlbmRlbnQsIG9yIGlzIGl0IGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGJhc2UgYE5GQ19OQ0lgIGNvbmZpZ3VyYXRpb24/IFRoZSBhcmNoaXRlY3R1cmUgZGlhZ3JhbXMgSSYjMzk7dmUgYmVlbiBwb3VyaW5nIG92ZXIgc2VlbSB0byBpbXBseSBzb21lIGxldmVsIG9mIGFic3RyYWN0aW9uLCBidXQgYWJzdHJhY3Rpb24gZG9lc24mIzM5O3QgYWx3YXlzIGVxdWFsIGNvbXBsZXRlIHNlcGFyYXRpb24uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGRlcGVuZGVuY3kgdHJlZSBoZXJlLgoKTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGEgY3J1Y2lhbCBwb2ludCBmb3Igc2V2ZXJhbCByZWFzb25zLiBJZiBgTkZDX1ZJUlRVQUxfTkNJYCByZWxpZXMgKmRpcmVjdGx5KiBvbiBgTkZDX05DSWAsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50IGZvciBkZXNpZ24gY29uc2lkZXJhdGlvbnMuIEl0IGNvdWxkIGxpbWl0IG91ciBtb2R1bGFyaXR5IGFuZCBwb3RlbnRpYWxseSBjcmVhdGUgYSB0aWdodCBjb3VwbGluZyB0aGF0IHdpbGwgbWFrZSBmdXR1cmUgdXBkYXRlcyBvciBwb3J0aW5nIHRvIGRpZmZlcmVudCBoYXJkd2FyZSBwcm9maWxlcyBmYXIgbW9yZSBkaWZmaWN1bHQuIEl0IHdvdWxkIGJlIGEgbmlnaHRtYXJlIHRvIGRlYnVnIGFuZCBtYWludGFpbiBsb25nIHRlcm0uIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBgTkZDX1ZJUlRVQUxfTkNJYCBpcyBhIGdlbnVpbmUgbGF5ZXIgb2YgdmlydHVhbGl6YXRpb24sIHRoZW4gd2UgbWlnaHQgaGF2ZSBzb21lIHJlYWwgZmxleGliaWxpdHkgaW4gaG93IHdlIGltcGxlbWVudCBhbmQgaW50ZWdyYXRlIGl0IHdpdGggZGlmZmVyZW50IE5GQyBjb250cm9sbGVycy4KClNvLCB0aGUgZnVuZGFtZW50YWwgcXVlc3Rpb24gSSBoYXZlIHRvIGFzayBteXNlbGYgaXM6IGNhbiBJIHRyZWF0IGBORkNfVklSVFVBTF9OQ0lgIGFzIGEgdHJ1bHkgdmlydHVhbCwgc2VsZi1jb250YWluZWQgY29tcG9uZW50LCBvciBkbyBJIG5lZWQgdG8gYmFrZSBpbiBhc3N1bXB0aW9ucyBhYm91dCBgTkZDX05DSWAgZHVyaW5nIG15IGRlc2lnbiBwcm9jZXNzPyBUaGlzIGlzIGdvaW5nIHRvIGluZmx1ZW5jZSBteSBhc3Nlc3NtZW50IG9mIHRoZSBhcmNoaXRlY3R1cmFsIGltcGFjdHMgdGhhdCB0aGlzIGhhcyBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFRpbWUgdG8gZGlnIGRlZXBlciBhbmQgbG9vayBhdCB0aGUgc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgZXJyb3IgaGFuZGxpbmcgdG8gY29tZSB0byBhIGZpcm0gY29uY2x1c2lvbi4gVGhpcyBpcyB0aGUgYmVkcm9jayB0byBzb2xpZGlmeWluZyBvdXIgYXBwcm9hY2ggdG8gZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnPTY9bWVudSBcJiMzNDtOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZmMvS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBORkNcbmRyaXZlcnMvbmZjL0tjb25maWctOC1cbmRyaXZlcnMvbmZjL0tjb25maWc9OT1jb25maWcgTkZDX1RSRjc5NzBBXG5kcml2ZXJzL25mYy9LY29uZmlnLTEwLVx0dHJpc3RhdGUgXCYjMzQ7VGV4YXMgSW5zdHJ1bWVudHMgVFJGNzk3MGEgTkZDIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZmMvS2NvbmZpZzoxMTpcdGRlcGVuZHMgb24gU1BJIFx1MDAyNlx1MDAyNiBORkNfRElHSVRBTCBcdTAwMjZcdTAwMjYgR1BJT0xJQlxuZHJpdmVycy9uZmMvS2NvbmZpZy0xMi1cdGhlbHBcbi0tXG5kcml2ZXJzL25mYy9LY29uZmlnPTIxPWNvbmZpZyBORkNfTUVJX1BIWVxuZHJpdmVycy9uZmMvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O01FSSBidXMgTkZDIGRldmljZSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25mYy9LY29uZmlnOjIzOlx0ZGVwZW5kcyBvbiBJTlRFTF9NRUkgXHUwMDI2XHUwMDI2IE5GQ19IQ0lcbmRyaXZlcnMvbmZjL0tjb25maWctMjQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZz0zMT1jb25maWcgTkZDX1NJTVxuZHJpdmVycy9uZmMvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O05GQyBoYXJkd2FyZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25mYy9LY29uZmlnOjMzOlx0ZGVwZW5kcyBvbiBORkNfRElHSVRBTFxuZHJpdmVycy9uZmMvS2NvbmZpZy0zNC1cdGhlbHBcbi0tXG5kcml2ZXJzL25mYy9LY29uZmlnPTQyPWNvbmZpZyBORkNfUE9SVDEwMFxuZHJpdmVycy9uZmMvS2NvbmZpZy00My1cdHRyaXN0YXRlIFwmIzM0O1NvbnkgTkZDIFBvcnQtMTAwIFNlcmllcyBVU0IgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmZjL0tjb25maWc6NDQ6XHRkZXBlbmRzIG9uIFVTQlxuZHJpdmVycy9uZmMvS2NvbmZpZzo0NTpcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcbmRyaXZlcnMvbmZjL0tjb25maWctNDYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZz01Mj1jb25maWcgTkZDX1ZJUlRVQUxfTkNJXG5kcml2ZXJzL25mYy9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7TkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25mYy9LY29uZmlnOjU0Olx0ZGVwZW5kcyBvbiBORkNfTkNJXG5kcml2ZXJzL25mYy9LY29uZmlnLTU1LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDMwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBORkMgVmlydHVhbCBOQ0kgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBORkMgVmlydHVhbCBOQ0kgdGhpbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBORkNfVklSVFVBTF9OQ0lgIG9idmlvdXNseSBkZXBlbmRzIG9uIGBORkNfTkNJYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlcmVmb3JlLCB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbmFibGUgd291bGQgYmUgYE5GQ2AsIGBORkNfTkNJYCwgYW5kIHRoZW4sIG9mIGNvdXJzZSwgYE5GQ19WSVJUVUFMX05DSWAgaXRzZWxmLiBUaGF0IHNlZW1zIGxvZ2ljYWwuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZSBpdHNlbGYuIEkgd2FudCB0byBjaGVjayBvdXQgaG93IHRoZXNlIGluY29taW5nIHBhY2tldHMgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBhdCBgbmNpX250Zl9wYWNrZXRgIGFuZCBgbmNpX3J4X3dvcmtgLiBGcm9tIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZywgYG5jaV9udGZfcGFja2V0YCBhcHBlYXJzIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBOb3RpZmljYXRpb24gKE5URikgcGFja2V0cy4gQW5kLCBgbmNpX3J4X3dvcmtgIGlzIHRoZSB3b3JrcXVldWUgZnVuY3Rpb24gd2hlcmUgdGhlIHJlYWwgcHJvY2Vzc2luZyBvZiB0aGVzZSBwYWNrZXRzIHRha2VzIHBsYWNlLiBHaXZlbiB0aGF0LCBgbmNpX250Zl9wYWNrZXRgIHdpbGwgYmUgdGhlIGZ1bmN0aW9uIHRvIGZvY3VzIG9uIGZvciBub3cuCgpMZXQmIzM5O3MgcXVpY2tseSBzY2FuIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyB0byBtYWtlIHN1cmUgdGhlcmUgaXMgbm90aGluZyBlbHNlIGNydWNpYWwuIGBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldGAgaXMgc3RhdGljLiBTaW5jZSB0aGF0JiMzOTtzIG5vdCBleHBvcnRlZCwgaXQmIzM5O3Mgbm90IGEgZnVuY3Rpb24gSSBuZWVkIHRvIGZvY3VzIG9uLiBTaW5jZSBgbmNpX250Zl9wYWNrZXRgIGlzIG5vdCBzdGF0aWMsIGl0IG11c3QgYmUgZXhwb3J0ZWQuIFRoaXMgaXMgdGhlIG1haW4gb25lIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfbnRmX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL250Zi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL250Zi5jPTk0OD1zdGF0aWMgaW50IG5jaV9uZmNlZV9kaXNjb3Zlcl9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLS1cbm5ldC9uZmMvbmNpL250Zi5jLTk3MS1cbm5ldC9uZmMvbmNpL250Zi5jOjk3Mjp2b2lkIG5jaV9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L25mYy9uY2kvbnRmLmMtOTczLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSBjb25zaWRlcmF0aW9uczoKCioqQW5hbHl6aW5nIEZ1bmN0aW9uIEF0dHJpYnV0ZXMgaW4gdGhlIE5DSSBTdWJzeXN0ZW0qKgoKQWxyaWdodCwgc28gYG5jaV9udGZfcGFja2V0YCBpcyBjb25maXJtZWQgYXMgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBjb25maXJtaW5nIGl0cyBwb3RlbnRpYWwgdmlzaWJpbGl0eSBhbmQgcmV1c2FiaWxpdHkgYmV5b25kIGEgc3RyaWN0bHkgZGVmaW5lZCBzY29wZSB3aXRoaW4gdGhlIGltbWVkaWF0ZSBjb21waWxhdGlvbiB1bml0LiBOb3csIGdpdmVuIHRoYXQsIG15IG5leHQgbGluZSBvZiBpbnF1aXJ5IGhhcyB0byBiZSBhYm91dCBgbmNpX3J4X3dvcmtgLiBJIG5lZWQgdG8gdmVyaWZ5IGl0cyB2aXNpYmlsaXR5IGFzIHdlbGwuIElzIGl0IGRlY2xhcmVkIGFzIHN0YXRpYz8gS25vd2luZyBpdHMgYXR0cmlidXRlIHdpbGwgZGV0ZXJtaW5lIGEgbG90IGFib3V0IGhvdyBpdOKAmXMgYmVpbmcgdXNlZCwgYW5kIGlmIGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggb3RoZXIgbW9kdWxlcy4gVGhpcyBpbmZvcm1hdGlvbiBkaWN0YXRlcyBob3cgSSBzaG91bGQgcHJvY2VlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3Qgd2l0aGluIHRoZSBOQ0kgZGF0YSBmbG93IGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgbmVlZCBmb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25jaV9yeF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL2NvcmUuYz0zOT1zdGF0aWMgdm9pZCBuY2lfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbm5ldC9uZmMvbmNpL2NvcmUuYzo0MDpzdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubmV0L25mYy9uY2kvY29yZS5jLTQxLXN0YXRpYyB2b2lkIG5jaV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTEyNTE9aW50IG5jaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTEyNjYtXG5uZXQvbmZjL25jaS9jb3JlLmM6MTI2NzpcdElOSVRfV09SSyhcdTAwMjZuZGV2LVx1MDAzZXJ4X3dvcmssIG5jaV9yeF93b3JrKTtcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMjY4LVx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcJiMzNDslc19uY2lfcnhfd3FcJiMzNDssIGRldl9uYW1lKGRldikpO1xuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xNTIwPXN0YXRpYyB2b2lkIG5jaV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTU1OC1cbm5ldC9uZmMvbmNpL2NvcmUuYzoxNTU5OnN0YXRpYyB2b2lkIG5jaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTYwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDkKCQkJCQkJCW91dHB1dDogMTAyCgkJCQkJCQl0aG91Z2h0czogMzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5DSSBOb3RpZmljYXRpb24gUGFja2V0IEZpeCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIHRoZSBmb2N1cyBoZXJlIGhhcyB0byBiZSBvbiBgbmNpX250Zl9wYWNrZXRgLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBuY2lfcnhfd29ya2AgaXMgc3RhdGljLCB3aGljaCBzdGVlcnMgbWUgdG93YXJkIHRoZSBwYWNrZXQgaXRzZWxmIGFzIHRoZSBrZXkuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBub3RpZmljYXRpb24gcGFja2V0LCBzbyBhbnkgaXNzdWVzIGhlcmUgY291bGQgYmUgaW1wYWN0ZnVsLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLiBXZSBuZWVkIGBORkNgLCBgTkZDX05DSWAsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYC4gTm8gb3RoZXIgZ2xhcmluZyBkZXBlbmRlbmNpZXMgc2VlbSB0byBhcHBseSBoZXJlLiBgTkZDYCBuZWVkcyBlaXRoZXIgYFJGS0lMTGAgb3IgdGhlIGludmVyc2UsIGAhUkZLSUxMYC4gYE5GQ19OQ0lgIGRlcGVuZHMgb24gYE5GQ2AsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYCBkZXBlbmRzIG9uIGBORkNfTkNJYCwgYXMgZXhwZWN0ZWQuIFNvLCB3ZSYjMzk7cmUgdGFyZ2V0aW5nIHRob3NlIHRocmVlIGNvbmZpZ3M6IGBORkNgLCBgTkZDX05DSWAsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYC4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcGAsIHdoZXJlIHRoZXkmIzM5O3ZlIGFkZGVkIGJvdW5kcyBjaGVja2luZyB0byBmaXggYW4gdW5kZXJmbG93IGlzc3VlLiBGcm9tIGEgZnVuY3Rpb25hbCBzdGFuZHBvaW50LCB0aGlzIGNsZWFybHkgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcywgZWl0aGVyIGEgcmVhZCBvciB3cml0ZSwgb3IgcG90ZW50aWFsbHkgYW4gaW50ZWdlciB1bmRlcmZsb3cuIEdpdmVuIHRoaXMgaXMgTkNJLCBhbmQgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGAvZGV2L3ZpcnR1YWxfbmNpYCwgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSB2aXJ0dWFsIE5DSSBkZXZpY2UgaXMgYSBjb21tb24gYXR0YWNrIHN1cmZhY2UuCgpUaGVyZWZvcmUsIG15IHN1bW1hcnkgaXM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogYHRydWVgCiogICAqKkZvY3VzU3ltYm9sczoqKiBgWyYjMzQ7bmNpX250Zl9wYWNrZXQmIzM0O11gCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFsmIzM0O05GQyYjMzQ7LCAmIzM0O05GQ19OQ0kmIzM0OywgJiMzNDtORkNfVklSVFVBTF9OQ0kmIzM0O11gCiogICAqKlJlYXNvbmluZzoqKiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93IGluIE5DSSBub3RpZmljYXRpb24gcGFja2V0IHBhcnNpbmcuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSAoL2Rldi92aXJ0dWFsX25jaSkuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9udGZfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cgaW4gTkNJIG5vdGlmaWNhdGlvbiBwYWNrZXQgcGFyc2luZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlICgvZGV2L3ZpcnR1YWxfbmNpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX250Zl9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBpbnRlZ2VyIHVuZGVyZmxvdyBpbiBOQ0kgbm90aWZpY2F0aW9uIHBhY2tldCBwYXJzaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB2aXJ0dWFsIE5DSSBkZXZpY2UgKC9kZXYvdmlydHVhbF9uY2kpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6MjUuNTYyODkxMDM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAyMDkzMzQ3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfbnRmX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cgaW4gTkNJIG5vdGlmaWNhdGlvbiBwYWNrZXQgcGFyc2luZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlICgvZGV2L3ZpcnR1YWxfbmNpKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6MjUuNTYyODk4NTc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA4NzczNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NzA5MmI5N2Q3YTI5MTEwOWMxMTE0MjFmMWYwNmU1MmZmMzkwZmFkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDE3OjAwOjI0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL250Zi5jIGIvbmV0L25mYy9uY2kvbnRmLmNcXG5pbmRleCBjOTY1MTJiYjg2NTMxLi5lMDU1NWM5MGQ2NTc0IDEwMDY0NFxcbi0tLSBhL25ldC9uZmMvbmNpL250Zi5jXFxuKysrIGIvbmV0L25mYy9uY2kvbnRmLmNcXG5AQCAtNjMxLDYgKzYzMSw5IEBAIHN0YXRpYyBpbnQgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFx0c3dpdGNoIChudGYtXFx1MDAzZWFjdGl2YXRpb25fcmZfdGVjaF9hbmRfbW9kZSkge1xcbiBcXHRjYXNlIE5DSV9ORkNfQV9QQVNTSVZFX1BPTExfTU9ERTpcXG4gXFx0Y2FzZSBOQ0lfTkZDX0ZfUEFTU0lWRV9QT0xMX01PREU6XFxuK1xcdFxcdGlmIChudGYtXFx1MDAzZWFjdGl2YXRpb25fcGFyYW1zLnBvbGxfbmZjX2RlcC5hdHJfcmVzX2xlbiBcXHUwMDNjXFxuK1xcdFxcdCAgICBORkNfQVRSX1JFU19HVF9PRkZTRVQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRuZGV2LVxcdTAwM2VyZW1vdGVfZ2JfbGVuID0gbWluX3QoX191OCxcXG4gXFx0XFx0XFx0KG50Zi1cXHUwMDNlYWN0aXZhdGlvbl9wYXJhbXMucG9sbF9uZmNfZGVwLmF0cl9yZXNfbGVuXFxuIFxcdFxcdFxcdFxcdFxcdFxcdC0gTkZDX0FUUl9SRVNfR1RfT0ZGU0VUKSxcXG5AQCAtNjQzLDYgKzY0Niw5IEBAIHN0YXRpYyBpbnQgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFxuIFxcdGNhc2UgTkNJX05GQ19BX1BBU1NJVkVfTElTVEVOX01PREU6XFxuIFxcdGNhc2UgTkNJX05GQ19GX1BBU1NJVkVfTElTVEVOX01PREU6XFxuK1xcdFxcdGlmIChudGYtXFx1MDAzZWFjdGl2YXRpb25fcGFyYW1zLmxpc3Rlbl9uZmNfZGVwLmF0cl9yZXFfbGVuIFxcdTAwM2NcXG4rXFx0XFx0ICAgIE5GQ19BVFJfUkVRX0dUX09GRlNFVClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdG5kZXYtXFx1MDAzZXJlbW90ZV9nYl9sZW4gPSBtaW5fdChfX3U4LFxcbiBcXHRcXHRcXHQobnRmLVxcdTAwM2VhY3RpdmF0aW9uX3BhcmFtcy5saXN0ZW5fbmZjX2RlcC5hdHJfcmVxX2xlblxcbiBcXHRcXHRcXHRcXHRcXHRcXHQtIE5GQ19BVFJfUkVRX0dUX09GRlNFVCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE3OjAwOjI2LjA0NDYwNDEyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg5NzI3NjEwMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX05DSVwiLFxuICAgIFwiTkZDX1ZJUlRVQUxfTkNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmNpX250Zl9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93IGluIE5DSSBub3RpZmljYXRpb24gcGFja2V0IHBhcnNpbmcuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSAoL2Rldi92aXJ0dWFsX25jaSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3MDkyYjk3ZDdhMjkxMTA5YzExMTQyMWYxZjA2ZTUyZmYzOTBmYWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxNzowMDoyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL250Zi5jIGIvbmV0L25mYy9uY2kvbnRmLmNcbmluZGV4IGM5NjUxMmJiODY1MzEuLmUwNTU1YzkwZDY1NzQgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9udGYuY1xuKysrIGIvbmV0L25mYy9uY2kvbnRmLmNcbkBAIC02MzEsNiArNjMxLDkgQEAgc3RhdGljIGludCBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFx0c3dpdGNoIChudGYtXHUwMDNlYWN0aXZhdGlvbl9yZl90ZWNoX2FuZF9tb2RlKSB7XG4gXHRjYXNlIE5DSV9ORkNfQV9QQVNTSVZFX1BPTExfTU9ERTpcbiBcdGNhc2UgTkNJX05GQ19GX1BBU1NJVkVfUE9MTF9NT0RFOlxuK1x0XHRpZiAobnRmLVx1MDAzZWFjdGl2YXRpb25fcGFyYW1zLnBvbGxfbmZjX2RlcC5hdHJfcmVzX2xlbiBcdTAwM2NcbitcdFx0ICAgIE5GQ19BVFJfUkVTX0dUX09GRlNFVClcbitcdFx0XHRicmVhaztcbiBcdFx0bmRldi1cdTAwM2VyZW1vdGVfZ2JfbGVuID0gbWluX3QoX191OCxcbiBcdFx0XHQobnRmLVx1MDAzZWFjdGl2YXRpb25fcGFyYW1zLnBvbGxfbmZjX2RlcC5hdHJfcmVzX2xlblxuIFx0XHRcdFx0XHRcdC0gTkZDX0FUUl9SRVNfR1RfT0ZGU0VUKSxcbkBAIC02NDMsNiArNjQ2LDkgQEAgc3RhdGljIGludCBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFxuIFx0Y2FzZSBOQ0lfTkZDX0FfUEFTU0lWRV9MSVNURU5fTU9ERTpcbiBcdGNhc2UgTkNJX05GQ19GX1BBU1NJVkVfTElTVEVOX01PREU6XG4rXHRcdGlmIChudGYtXHUwMDNlYWN0aXZhdGlvbl9wYXJhbXMubGlzdGVuX25mY19kZXAuYXRyX3JlcV9sZW4gXHUwMDNjXG4rXHRcdCAgICBORkNfQVRSX1JFUV9HVF9PRkZTRVQpXG4rXHRcdFx0YnJlYWs7XG4gXHRcdG5kZXYtXHUwMDNlcmVtb3RlX2diX2xlbiA9IG1pbl90KF9fdTgsXG4gXHRcdFx0KG50Zi1cdTAwM2VhY3RpdmF0aW9uX3BhcmFtcy5saXN0ZW5fbmZjX2RlcC5hdHJfcmVxX2xlblxuIFx0XHRcdFx0XHRcdC0gTkZDX0FUUl9SRVFfR1RfT0ZGU0VUKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE3OjAwOjI2LjA0NDYwNTI0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTU3NzM1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTkZDIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYG5ldC9uZmMvbmNpL250Zi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXkncmUgYWRkaW5nIGJvdW5kcyBjaGVja2luZyBmb3IgYGF0cl9yZXNfbGVuYCBhbmQgYGF0cl9yZXFfbGVuYCwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aG9zZSBvZmZzZXQgc3VidHJhY3Rpb25zLiBQcmV2ZW50aW5nIHVuZGVyZmxvdyBpcyBhbHdheXMgYSB3aW4sIG1ha2VzIHNlbnNlIHRvIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWxseSBtYWxpY2lvdXMgTkZDIG1lc3NhZ2VzLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMsIGhvdyByZWxldmFudCBpcyB0aGlzIGNoYW5nZT8gSXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIGNvbmZpZ3VyYXRpb24/XG5cbk15IG5leHQgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnLiBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgYG50Zi5jYCBhbmQgdGh1cyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGFyZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEl0J3MgYSBxdWljayBsb29rdXAsIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBwb3RlbnRpYWwgaW1wYWN0IGFuZCB0aGUgbGlrZWxpaG9vZCBvZiB0aGlzIGNvZGUgYmVpbmcgYWN0aXZlbHkgdXNlZCBpbiBkZXBsb3llZCBzeXN0ZW1zLiBUaGF0IGRldGVybWluZXMgaG93IG11Y2ggd2VpZ2h0IEkgc2hvdWxkIHB1dCBvbiBhIGZpeCBsaWtlIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNzowMDozMC42NjAzODA1MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNjczOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL25jaS9udGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL25jaS9udGYuYz02MDA9c3RhdGljIHZvaWQgbmNpX3RhcmdldF9hdXRvX2FjdGl2YXRlZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL250Zi5jLTYyMi1cXG5uZXQvbmZjL25jaS9udGYuYzo2MjM6c3RhdGljIGludCBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbm5ldC9uZmMvbmNpL250Zi5jLTYyNC1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250ZiAqbnRmKVxcbi0tXFxubmV0L25mYy9uY2kvbnRmLmM9NjkzPXN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuLS1cXG5uZXQvbmZjL25jaS9udGYuYy04NDktXFx0XFx0aWYgKG50Zi5yZl9pbnRlcmZhY2UgPT0gTkNJX1JGX0lOVEVSRkFDRV9ORkNfREVQKSB7XFxubmV0L25mYy9uY2kvbnRmLmM6ODUwOlxcdFxcdFxcdGVyciA9IG5jaV9zdG9yZV9nZW5lcmFsX2J5dGVzX25mY19kZXAobmRldiwgXFx1MDAyNm50Zik7XFxubmV0L25mYy9uY2kvbnRmLmMtODUxLVxcdFxcdFxcdGlmIChlcnIgIT0gTkNJX1NUQVRVU19PSylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6MzAuNzA3NzU1MDU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyOTQ0Mjk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBvZiBgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcGAqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBsaWtlbHkgb25seSB1c2VkIHdpdGhpbiB0aGlzIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIGxpbWl0cyB0aGUgc2NvcGUgb2Ygd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGl0cyB1c2FnZS4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBOQ0kgKE5GQyBDb250cm9sbGVyIEludGVyZmFjZSkgZGF0YSBmbG93LiBJIGtub3cgaXQncyBjYWxsZWQgZnJvbSBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgLCB3aGljaCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgIGFuZCBzZWUgKml0cyogY2FsbGVycy4gVGhhdCB3aWxsIHNob3cgbWUgdGhlIGhpZ2hlci1sZXZlbCBjb250ZXh0IGluIHdoaWNoIHRoZSBieXRlIHN0b3JhZ2Ugb2NjdXJzIGR1cmluZyBORkMtREVQIGludGVyZmFjZSBhY3RpdmF0aW9uLiBLbm93aW5nIHRoZSBjYWxsIGNoYWluIHdpbGwgaGVscCBtZSBwaW5wb2ludCB0aGUgcHVycG9zZSBvZiB0aGlzIGJ5dGUgc3RvcmFnZSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyAqdGhhdCogZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNzowMDozNC4xMzcxOTk5NDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMjI2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9uY2kvbnRmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvbnRmLmM9NjcxPXN0YXRpYyBpbnQgbmNpX3N0b3JlX2F0c19uZmNfaXNvX2RlcChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL250Zi5jLTY5Mi1cXG5uZXQvbmZjL25jaS9udGYuYzo2OTM6c3RhdGljIGludCBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG5uZXQvbmZjL25jaS9udGYuYy02OTQtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL25jaS9udGYuYz05NzI9dm9pZCBuY2lfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbmNpL250Zi5jLTEwMjAtXFx0Y2FzZSBOQ0lfT1BfUkZfSU5URl9BQ1RJVkFURURfTlRGOlxcbm5ldC9uZmMvbmNpL250Zi5jOjEwMjE6XFx0XFx0aWYgKG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0KG5kZXYsIHNrYikpXFxubmV0L25mYy9uY2kvbnRmLmMtMTAyMi1cXHRcXHRcXHRnb3RvIGVuZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6MzQuMTg1MjI4MzM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMjM0ODAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5GQyBOb3RpZmljYXRpb24gRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBgbmNpX250Zl9wYWNrZXRgIGlzIGNsZWFybHkgd2hlcmUgdGhlIE5GQyBub3RpZmljYXRpb24gYWN0aW9uIGJlZ2lucy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVudHJ5IHBvaW50LiBUaGF0IGxpa2VseSBtZWFucyBjaGVja2luZyB0aGUgYnVpbGQgc3lzdGVtLiBTcGVjaWZpY2FsbHksIGdpdmVuIHRoYXQgdGhpcyBpcyBORkMtcmVsYXRlZCBjb2RlLCBJJ2xsIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L25mYy9uY2kvTWFrZWZpbGVgIGZpbGUuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBub3RpZmljYXRpb24gbWVjaGFuaXNtIGlzIGNvbmZpZ3VyZWQgYW5kIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gSXQncyB0aGUgc3RhbmRhcmQgcHJvY2VkdXJlIGZvciBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZSBidWlsZC10aW1lIHNwZWNpZmljcyBvZiBhbnkga2VybmVsIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE3OjAwOjM3LjEwNzU3OTAxOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg2NjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGYub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL25jaS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL25jaS9NYWtlZmlsZT02PW9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTctXFxubmV0L25mYy9uY2kvTWFrZWZpbGU6ODpuY2ktb2JqcyA6PSBjb3JlLm8gZGF0YS5vIGxpYi5vIG50Zi5vIHJzcC5vIGhjaS5vXFxubmV0L25mYy9uY2kvTWFrZWZpbGUtOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6MzcuMTU2NDUwOTc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0ODI3ODk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBORkMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc3lzdGVtIG5lZWRzIGBDT05GSUdfTkZDX05DSWAuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGlzIHNldHRpbmcuIE15IGZvY3VzIHdpbGwgYmUgb24gYG5ldC9uZmMvS2NvbmZpZ2AgYW5kLCBjcnVjaWFsbHksIGBuZXQvbmZjL25jaS9LY29uZmlnYC4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGRyaXZlcnMgYXJlIGNvbnRpbmdlbnQgdXBvbiBgQ09ORklHX05GQ19OQ0lgIGJlaW5nIGVuYWJsZWQuIEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBvdGhlciBORkMgZnVuY3Rpb25hbGl0aWVzPyBBcmUgdGhlcmUgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCBjb25maWd1cmF0aW9ucyB0aWVkIHRvIHRoaXM/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIHNldHRpbmcgZml0cyBpbnRvIHRoZSBicm9hZGVyIE5GQyBlY29zeXN0ZW0gYW5kIHdoYXQgaW1wYWN0IGl0IGhhcyBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBsaWtlbHkgcmVxdWlyZW1lbnRzIGZvciB0aGUgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDE1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6NDAuMTA0NzMzMTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjE5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORkNfTkNJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvbmNpL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9uZmMvbmNpL0tjb25maWc6Mjpjb25maWcgTkZDX05DSVxcbm5ldC9uZmMvbmNpL0tjb25maWctMy1cXHRkZXBlbmRzIG9uIE5GQ1xcbi0tXFxubmV0L25mYy9uY2kvS2NvbmZpZy0xMi1cXG5uZXQvbmZjL25jaS9LY29uZmlnOjEzOmNvbmZpZyBORkNfTkNJX1NQSVxcbm5ldC9uZmMvbmNpL0tjb25maWctMTQtXFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNQSVxcbi0tXFxubmV0L25mYy9uY2kvS2NvbmZpZy0yMy1cXG5uZXQvbmZjL25jaS9LY29uZmlnOjI0OmNvbmZpZyBORkNfTkNJX1VBUlRcXG5uZXQvbmZjL25jaS9LY29uZmlnLTI1LVxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBUVFlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6NDAuMTU0MzU4OTI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDUyODI0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggTkZDIFN0YWNrIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgTkZDX05DSWAgY29tcG9uZW50LCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIGl0cyBkZXBlbmRlbmN5IG9uIHRoZSBiYXNlIGBORkNgIG1vZHVsZS4gTm8gc3VycHJpc2UgdGhlcmU7IHRoYXQncyBnZW5lcmFsbHkgaG93IHRoZXNlIHRoaW5ncyBhcmUgc3RydWN0dXJlZC4gTm93LCB3aGVyZSBkbyBJIHN0YXJ0IHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGF0aW9uc2hpcD8gVGhlIGltbWVkaWF0ZSBwb3J0IG9mIGNhbGwgZm9yIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGlzIGFsd2F5cyBgbmV0L25mYy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZm9ybWFsIGRlY2xhcmF0aW9uIG9mIHRoaXMgcmVsYXRpb25zaGlwIGFuZCBjYW4gdmVyaWZ5IGFueSBwb3RlbnRpYWwgbnVhbmNlcyBvciBjb25kaXRpb25hbCBhc3BlY3RzLiBJdCBpcyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IGBORkNfTkNJYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgTkZDIGZyYW1ld29yay4gTGV0J3MgZ2V0IHRvIHRoZSBLY29uZmlnIGZpbGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNzowMDo0My4zNTk2NDQxOTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDEwMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORkNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvS2NvbmZpZy01LVxcbm5ldC9uZmMvS2NvbmZpZzo2Om1lbnVjb25maWcgTkZDXFxubmV0L25mYy9LY29uZmlnLTctXFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbi0tXFxubmV0L25mYy9LY29uZmlnLTE2LVxcbm5ldC9uZmMvS2NvbmZpZzoxNzpjb25maWcgTkZDX0RJR0lUQUxcXG5uZXQvbmZjL0tjb25maWctMTgtXFx0ZGVwZW5kcyBvbiBORkNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6NDMuNDA3NjYwMzk1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTk5OTYzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcyBhbmFseXNpcywgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiBpdCB3ZXJlIG15IG93biBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE5GQyBGdXp6aW5nIFBvc3NpYmlsaXRpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBORkMsIGFuZCBzcGVjaWZpY2FsbHkgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBORkNgIGFuZCBgTkZDX05DSWAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgYXJlIHRoZXJlIGFueSB2aXJ0dWFsIGRyaXZlcnMgSSBjYW4gbGV2ZXJhZ2UgdG8gZnV6eiB0aGUgYE5GQyBOQ0lgIHNpZGUgb2YgdGhpbmdzPyBUaGF0J3MgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBzZWUgaWYgSSBjYW4gc2ltdWxhdGUgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uIHdpdGhvdXQgbmVlZGluZyBhY3R1YWwgcGh5c2ljYWwgZGV2aWNlcy5cblxuTm93LCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSwgZG9lcyBzeXprYWxsZXIgYXBwcm9hY2ggTkZDIGZ1enppbmcgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBuZXRsaW5rIHNvY2tldHMgb3IgcGVyaGFwcyBldmVuIHVzaW5nIHZpcnR1YWwgZGV2aWNlcz8gSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzZXR1cC5cblxuQWgsIHdhaXQgYSBzZWNvbmQsIGxldCdzIGxvb2sgYXQgYG5jaV9udGZfcGFja2V0YCBmdW5jdGlvbi4gVGhpcyBzZWVtcyBpbXBvcnRhbnQsIGFzIGl0J3MgZGlyZWN0bHkgcmVsYXRlZCB0byByZWNlaXZpbmcgcGFja2V0cyBmcm9tIHRoZSBkZXZpY2UuIFRoYXQncyBhIGtleSBpbnRlcmFjdGlvbiBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyIC0gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc3RhY2ssIHRvIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBgbmNpX250Zl9wYWNrZXRgIGZ1bmN0aW9uLiBUaGF0IHdpbGwgdGVsbCBtZSB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBtYXkgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNzowMDo0Ny43Mjc2NTk1MzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDAwNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5jaV9udGZfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvbmNpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL25jaS9jb3JlLmM9MTU1OT1zdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTU4Mi1cXHRcXHRjYXNlIE5DSV9NVF9OVEZfUEtUOlxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxNTgzOlxcdFxcdFxcdG5jaV9udGZfcGFja2V0KG5kZXYsIHNrYik7XFxubmV0L25mYy9uY2kvY29yZS5jLTE1ODQtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL25jaS9udGYuYz05NDg9c3RhdGljIGludCBuY2lfbmZjZWVfZGlzY292ZXJfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL250Zi5jLTk3MS1cXG5uZXQvbmZjL25jaS9udGYuYzo5NzI6dm9pZCBuY2lfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbmZjL25jaS9udGYuYy05NzMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNzowMDo0Ny43Nzc2NjY0M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM0MjA1ODk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5DSSBQYWNrZXQgSW5qZWN0aW9uKipcblxuT2theSwgc28gYG5jaV9yeF93b3JrYCBpcyBjbGVhcmx5IHRoZSBmdW5jdGlvbiBwcm9jZXNzaW5nIHJlY2VpdmVkIHBhY2tldHMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgKmhvdyogYXJlIHRoZXNlIHBhY2tldHMgZXZlbiBnZXR0aW5nIGluamVjdGVkIGludG8gdGhlIHN5c3RlbSBpbiB0aGUgZmlyc3QgcGxhY2U/IElzIFN5emthbGxlciBsZXZlcmFnaW5nIGEgc3RhbmRhcmQgTkNJIGRldmljZSwgYWxiZWl0IHBlcmhhcHMgYSB2aXJ0dWFsIG9uZT8gT3IgYXJlIHRoZXkgZW1wbG95aW5nIHNvbWUgbW9yZSBlc290ZXJpYyBpbmplY3Rpb24gbWVjaGFuaXNtP1xuXG5UbyBmaWd1cmUgdGhpcyBvdXQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyB2aXJ0dWFsIE5DSSBkZXZpY2UgY29kZS4gSSdtIGdvaW5nIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuY2AgZmlsZSDigJMgb3Igc29tZXRoaW5nIHNpbWlsYXJseSBuYW1lZCwgaWYgdGhhdCdzIG5vdCBxdWl0ZSByaWdodC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSB1bmRlcmx5aW5nIGluamVjdGlvbiBtZXRob2QuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IGFuZCByZXZlYWwgdGhlIGxpa2VseSBpbmplY3Rpb24gbWV0aG9kLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUgZGV2ZWxvcGVycyBoYXZlIGltcGxlbWVudGVkIGEgdmlydHVhbCBkZXZpY2UgdG8gZG8gdGhlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNzowMToyOS4xMTk3Mjk5MjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjI0MTk3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydHVhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvS2NvbmZpZz0zMT1jb25maWcgTkZDX1NJTVxcbi0tXFxuZHJpdmVycy9uZmMvS2NvbmZpZy0zNC1cXHRoZWxwXFxuZHJpdmVycy9uZmMvS2NvbmZpZzozNTpcXHQgIFRoaXMgZHJpdmVyIGRlY2xhcmVzIHR3byB2aXJ0dWFsIE5GQyBkZXZpY2VzIHN1cHBvcnRpbmcgTkZDLURFUFxcbmRyaXZlcnMvbmZjL0tjb25maWctMzYtXFx0ICBwcm90b2NvbC4gQW4gTExDUCBjb25uZWN0aW9uIGNhbiBiZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZW0gYW5kXFxuLS1cXG5kcml2ZXJzL25mYy9LY29uZmlnPTUyPWNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWctNTUtXFx0aGVscFxcbmRyaXZlcnMvbmZjL0tjb25maWc6NTY6XFx0ICBOQ0kgdmlydHVhbCBkZXZpY2Ugc2ltdWxhdGVzIGEgTkNJIGRldmljZSB0byB0aGUgdXNlci5cXG5kcml2ZXJzL25mYy9LY29uZmlnLTU3LVxcdCAgSXQgY2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIE5DSSBtb2R1bGUgYW5kIGFwcGxpY2F0aW9ucy5cXG5kcml2ZXJzL25mYy9LY29uZmlnOjU4OlxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB2aXJ0dWFsIE5DSSBkZXZpY2UgYW5kXFxuZHJpdmVycy9uZmMvS2NvbmZpZy01OS1cXHQgIG1vZHVsZS5cXG4tLVxcbmRyaXZlcnMvbmZjL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19ORkNfU1Q5NUhGKVxcdCs9IHN0OTVoZi9cXG5kcml2ZXJzL25mYy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJKVxcdCs9IHZpcnR1YWxfbmNpZGV2Lm9cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjMtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyNDpzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2IHtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTI1LVxcdHN0cnVjdCBuY2lfZGV2ICpuZGV2O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zMS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjMyOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTMzLXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjM0OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zNS1cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzktXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo0MDpzdGF0aWMgaW50IHZpcnR1YWxfbmNpX2Nsb3NlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNDEte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NDI6XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTQzLVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01Mi1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjUzOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfc2VuZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTU0LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjU1OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01Ni1cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNzUtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgdmlydHVhbF9uY2lfb3BzID0ge1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzc6XFx0Lm9wZW4gPSB2aXJ0dWFsX25jaV9vcGVuLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzg6XFx0LmNsb3NlID0gdmlydHVhbF9uY2lfY2xvc2UsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3OTpcXHQuc2VuZCA9IHZpcnR1YWxfbmNpX3NlbmRcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgwLX07XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjgyOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04My1cXHRcXHRcXHRcXHQgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTg0LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjg1OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04Ni1cXHRzaXplX3QgYWN0dWFsX2xlbjtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTEyLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTEzOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTYte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTE3OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTgtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTMyLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTMzOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNC17XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzUtXFx0aW50IHJldCA9IDA7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMzY6XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldjtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNy1cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTQwLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTQxOlxcdHZkZXYtXFx1MDAzZW5kZXYgPSBuY2lfYWxsb2NhdGVfZGV2aWNlKFxcdTAwMjZ2aXJ0dWFsX25jaV9vcHMsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNDItXFx0XFx0VklSVFVBTF9ORkNfUFJPVE9DT0xTLCAwLCAwKTtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTYzLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTY0OnN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjUte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTY2OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjctXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3NS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3NjpzdGF0aWMgbG9uZyB2aXJ0dWFsX25jaWRldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3Ny1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzgte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTc5OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xODAtXFx0Y29uc3Qgc3RydWN0IG5mY19kZXYgKm5mY19kZXYgPSB2ZGV2LVxcdTAwM2VuZGV2LVxcdTAwM2VuZmNfZGV2O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTEtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlydHVhbF9uY2lkZXZfZm9wcyA9IHtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5My1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NDpcXHQucmVhZCA9IHZpcnR1YWxfbmNpZGV2X3JlYWQsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTU6XFx0LndyaXRlID0gdmlydHVhbF9uY2lkZXZfd3JpdGUsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTY6XFx0Lm9wZW4gPSB2aXJ0dWFsX25jaWRldl9vcGVuLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk3OlxcdC5yZWxlYXNlID0gdmlydHVhbF9uY2lkZXZfY2xvc2UsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTg6XFx0LnVubG9ja2VkX2lvY3RsID0gdmlydHVhbF9uY2lkZXZfaW9jdGxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5OS19O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz0yMDE9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXYgPSB7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMDItXFx0Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjAzOlxcdC5uYW1lID0gXFxcInZpcnR1YWxfbmNpXFxcIixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwNDpcXHQuZm9wcyA9IFxcdTAwMjZ2aXJ0dWFsX25jaWRldl9mb3BzLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjA1LVxcdC5tb2RlID0gMDYwMCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6MzAuOTQyMTU0NTc2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyOTk5MTI0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgVmlydHVhbCBOQ0kgRGV2aWNlKipcblxuT2theSwgdGhpcyBpcyBwcm9taXNpbmchIFRoZSBgZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuY2AgZmlsZSBjcmVhdGVzIGEgYC9kZXYvdmlydHVhbF9uY2lgIGRldmljZS4gIFRoYXQncyBleGFjdGx5IHdoYXQgSSB3YXMgaG9waW5nIGZvciDigJMgYSBkaXJlY3QsIHVzZXJzcGFjZS1hY2Nlc3NpYmxlIGVudHJ5IHBvaW50IGludG8gdGhlIE5DSSBzdWJzeXN0ZW0sIG1ha2luZyBpdCBwZXJmZWN0IGZvciBmdXp6aW5nLiAgSSBjYW4gaW5qZWN0IHBhY2tldHMgZGlyZWN0bHkhICBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlIGBORkNgLCBgTkZDX05DSWAsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYC4gIEdvb2QsIGdvb2QuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYG5jaV9zdG9yZV9nZW5lcmFsX2J5dGVzX25mY19kZXBgLiBJIHJlbWVtYmVyIHRoYXQgZnVuY3Rpb24gYmVpbmcgYSBwb3RlbnRpYWwgdGFyZ2V0LiAgSXQncyBjYWxsZWQgZnJvbSBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgLCB3aGljaCBpdHNlbGYgaXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gdHJpZ2dlci4gQnV0IHdhaXTigKYgaXNuJ3QgYG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0YCBzdGF0aWM/ICBZZXMsIGl0IGlzLiBUaGF0J3MgYSBiaXQgYW5ub3lpbmc7IHRoZSBmdW5jdGlvbiBpcyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgaXRzIHNvdXJjZSBmaWxlLiBTbywgSSB3aWxsIG5lZWQgdG8gZm9jdXMgb24gYG5jaV9udGZfcGFja2V0YC4gSXQgaXMgdGhlIGNhbGwgcG9pbnQgZm9yIHRoZSBmb3JtZXIgYW5kIG5vdCBzdGF0aWMuXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5GQ19WSVJUVUFMX05DSWAgYWdhaW4ganVzdCB0byBiZSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6MzYuMjQyMDY5ODgyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMyMDcyNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GQ19WSVJUVUFMX05DSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXFxuLS1cXG5kcml2ZXJzL25mYy9LY29uZmlnLTUxLVxcbmRyaXZlcnMvbmZjL0tjb25maWc6NTI6Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxcbmRyaXZlcnMvbmZjL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6MzYuNzM1Mjg3NzYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTU0NjU4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOlxuXG4qKkludmVzdGlnYXRpbmcgTkZDIFZpcnR1YWxpemF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgTkZDX1ZJUlRVQUxfTkNJYCBjb25maWd1cmF0aW9uLiBJdCdzIGdvdCBtZSB3b25kZXJpbmcg4oCTIGlzIHRoaXMgdGhpbmcgdHJ1bHkgaW5kZXBlbmRlbnQsIG9yIGlzIGl0IGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGJhc2UgYE5GQ19OQ0lgIGNvbmZpZ3VyYXRpb24/IFRoZSBhcmNoaXRlY3R1cmUgZGlhZ3JhbXMgSSd2ZSBiZWVuIHBvdXJpbmcgb3ZlciBzZWVtIHRvIGltcGx5IHNvbWUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24sIGJ1dCBhYnN0cmFjdGlvbiBkb2Vzbid0IGFsd2F5cyBlcXVhbCBjb21wbGV0ZSBzZXBhcmF0aW9uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBkZXBlbmRlbmN5IHRyZWUgaGVyZS5cblxuTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGEgY3J1Y2lhbCBwb2ludCBmb3Igc2V2ZXJhbCByZWFzb25zLiBJZiBgTkZDX1ZJUlRVQUxfTkNJYCByZWxpZXMgKmRpcmVjdGx5KiBvbiBgTkZDX05DSWAsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50IGZvciBkZXNpZ24gY29uc2lkZXJhdGlvbnMuIEl0IGNvdWxkIGxpbWl0IG91ciBtb2R1bGFyaXR5IGFuZCBwb3RlbnRpYWxseSBjcmVhdGUgYSB0aWdodCBjb3VwbGluZyB0aGF0IHdpbGwgbWFrZSBmdXR1cmUgdXBkYXRlcyBvciBwb3J0aW5nIHRvIGRpZmZlcmVudCBoYXJkd2FyZSBwcm9maWxlcyBmYXIgbW9yZSBkaWZmaWN1bHQuIEl0IHdvdWxkIGJlIGEgbmlnaHRtYXJlIHRvIGRlYnVnIGFuZCBtYWludGFpbiBsb25nIHRlcm0uIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBgTkZDX1ZJUlRVQUxfTkNJYCBpcyBhIGdlbnVpbmUgbGF5ZXIgb2YgdmlydHVhbGl6YXRpb24sIHRoZW4gd2UgbWlnaHQgaGF2ZSBzb21lIHJlYWwgZmxleGliaWxpdHkgaW4gaG93IHdlIGltcGxlbWVudCBhbmQgaW50ZWdyYXRlIGl0IHdpdGggZGlmZmVyZW50IE5GQyBjb250cm9sbGVycy5cblxuU28sIHRoZSBmdW5kYW1lbnRhbCBxdWVzdGlvbiBJIGhhdmUgdG8gYXNrIG15c2VsZiBpczogY2FuIEkgdHJlYXQgYE5GQ19WSVJUVUFMX05DSWAgYXMgYSB0cnVseSB2aXJ0dWFsLCBzZWxmLWNvbnRhaW5lZCBjb21wb25lbnQsIG9yIGRvIEkgbmVlZCB0byBiYWtlIGluIGFzc3VtcHRpb25zIGFib3V0IGBORkNfTkNJYCBkdXJpbmcgbXkgZGVzaWduIHByb2Nlc3M/IFRoaXMgaXMgZ29pbmcgdG8gaW5mbHVlbmNlIG15IGFzc2Vzc21lbnQgb2YgdGhlIGFyY2hpdGVjdHVyYWwgaW1wYWN0cyB0aGF0IHRoaXMgaGFzIG9uIHRoZSBvdmVyYWxsIHN5c3RlbS4gVGltZSB0byBkaWcgZGVlcGVyIGFuZCBsb29rIGF0IHRoZSBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4gSSdsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBjYWxscywgYW5kIGVycm9yIGhhbmRsaW5nIHRvIGNvbWUgdG8gYSBmaXJtIGNvbmNsdXNpb24uIFRoaXMgaXMgdGhlIGJlZHJvY2sgdG8gc29saWRpZnlpbmcgb3VyIGFwcHJvYWNoIHRvIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE3OjAxOjQwLjg1MDc1NjM0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA2MDA1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmZjL0tjb25maWc9Nj1tZW51IFxcXCJOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlc1xcXCJcXG5kcml2ZXJzL25mYy9LY29uZmlnOjc6XFx0ZGVwZW5kcyBvbiBORkNcXG5kcml2ZXJzL25mYy9LY29uZmlnLTgtXFxuZHJpdmVycy9uZmMvS2NvbmZpZz05PWNvbmZpZyBORkNfVFJGNzk3MEFcXG5kcml2ZXJzL25mYy9LY29uZmlnLTEwLVxcdHRyaXN0YXRlIFxcXCJUZXhhcyBJbnN0cnVtZW50cyBUUkY3OTcwYSBORkMgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmZjL0tjb25maWc6MTE6XFx0ZGVwZW5kcyBvbiBTUEkgXFx1MDAyNlxcdTAwMjYgTkZDX0RJR0lUQUwgXFx1MDAyNlxcdTAwMjYgR1BJT0xJQlxcbmRyaXZlcnMvbmZjL0tjb25maWctMTItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZmMvS2NvbmZpZz0yMT1jb25maWcgTkZDX01FSV9QSFlcXG5kcml2ZXJzL25mYy9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJNRUkgYnVzIE5GQyBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25mYy9LY29uZmlnOjIzOlxcdGRlcGVuZHMgb24gSU5URUxfTUVJIFxcdTAwMjZcXHUwMDI2IE5GQ19IQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTI0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWc9MzE9Y29uZmlnIE5GQ19TSU1cXG5kcml2ZXJzL25mYy9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJORkMgaGFyZHdhcmUgc2ltdWxhdG9yIGRyaXZlclxcXCJcXG5kcml2ZXJzL25mYy9LY29uZmlnOjMzOlxcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcXG5kcml2ZXJzL25mYy9LY29uZmlnLTM0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXFxuZHJpdmVycy9uZmMvS2NvbmZpZy00My1cXHR0cmlzdGF0ZSBcXFwiU29ueSBORkMgUG9ydC0xMDAgU2VyaWVzIFVTQiBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25mYy9LY29uZmlnOjQ0OlxcdGRlcGVuZHMgb24gVVNCXFxuZHJpdmVycy9uZmMvS2NvbmZpZzo0NTpcXHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXFxuZHJpdmVycy9uZmMvS2NvbmZpZy00Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25mYy9LY29uZmlnPTUyPWNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZmMvS2NvbmZpZzo1NDpcXHRkZXBlbmRzIG9uIE5GQ19OQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTU1LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6NDAuOTAxMzYzNjUxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODE1MDYyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5GQyBWaXJ0dWFsIE5DSSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBORkMgVmlydHVhbCBOQ0kgdGhpbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBORkNfVklSVFVBTF9OQ0lgIG9idmlvdXNseSBkZXBlbmRzIG9uIGBORkNfTkNJYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlcmVmb3JlLCB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbmFibGUgd291bGQgYmUgYE5GQ2AsIGBORkNfTkNJYCwgYW5kIHRoZW4sIG9mIGNvdXJzZSwgYE5GQ19WSVJUVUFMX05DSWAgaXRzZWxmLiBUaGF0IHNlZW1zIGxvZ2ljYWwuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLiBJIHdhbnQgdG8gY2hlY2sgb3V0IGhvdyB0aGVzZSBpbmNvbWluZyBwYWNrZXRzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXQgYG5jaV9udGZfcGFja2V0YCBhbmQgYG5jaV9yeF93b3JrYC4gRnJvbSBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcsIGBuY2lfbnRmX3BhY2tldGAgYXBwZWFycyB0byBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgTm90aWZpY2F0aW9uIChOVEYpIHBhY2tldHMuIEFuZCwgYG5jaV9yeF93b3JrYCBpcyB0aGUgd29ya3F1ZXVlIGZ1bmN0aW9uIHdoZXJlIHRoZSByZWFsIHByb2Nlc3Npbmcgb2YgdGhlc2UgcGFja2V0cyB0YWtlcyBwbGFjZS4gR2l2ZW4gdGhhdCwgYG5jaV9udGZfcGFja2V0YCB3aWxsIGJlIHRoZSBmdW5jdGlvbiB0byBmb2N1cyBvbiBmb3Igbm93LlxuXG5MZXQncyBxdWlja2x5IHNjYW4gdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBub3RoaW5nIGVsc2UgY3J1Y2lhbC4gYG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0YCBpcyBzdGF0aWMuIFNpbmNlIHRoYXQncyBub3QgZXhwb3J0ZWQsIGl0J3Mgbm90IGEgZnVuY3Rpb24gSSBuZWVkIHRvIGZvY3VzIG9uLiBTaW5jZSBgbmNpX250Zl9wYWNrZXRgIGlzIG5vdCBzdGF0aWMsIGl0IG11c3QgYmUgZXhwb3J0ZWQuIFRoaXMgaXMgdGhlIG1haW4gb25lIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDMwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE3OjAxOjQ1LjU4Mjg3MjU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg5NDI2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpX250Zl9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9uY2kvbnRmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvbnRmLmM9OTQ4PXN0YXRpYyBpbnQgbmNpX25mY2VlX2Rpc2NvdmVyX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuLS1cXG5uZXQvbmZjL25jaS9udGYuYy05NzEtXFxubmV0L25mYy9uY2kvbnRmLmM6OTcyOnZvaWQgbmNpX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L25mYy9uY2kvbnRmLmMtOTczLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6NDYuMDcxODIxNDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExNDA0Mjc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIGNvbnNpZGVyYXRpb25zOlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBBdHRyaWJ1dGVzIGluIHRoZSBOQ0kgU3Vic3lzdGVtKipcblxuQWxyaWdodCwgc28gYG5jaV9udGZfcGFja2V0YCBpcyBjb25maXJtZWQgYXMgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBnb29kIHRvIGtub3csIGNvbmZpcm1pbmcgaXRzIHBvdGVudGlhbCB2aXNpYmlsaXR5IGFuZCByZXVzYWJpbGl0eSBiZXlvbmQgYSBzdHJpY3RseSBkZWZpbmVkIHNjb3BlIHdpdGhpbiB0aGUgaW1tZWRpYXRlIGNvbXBpbGF0aW9uIHVuaXQuIE5vdywgZ2l2ZW4gdGhhdCwgbXkgbmV4dCBsaW5lIG9mIGlucXVpcnkgaGFzIHRvIGJlIGFib3V0IGBuY2lfcnhfd29ya2AuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHZpc2liaWxpdHkgYXMgd2VsbC4gSXMgaXQgZGVjbGFyZWQgYXMgc3RhdGljPyBLbm93aW5nIGl0cyBhdHRyaWJ1dGUgd2lsbCBkZXRlcm1pbmUgYSBsb3QgYWJvdXQgaG93IGl04oCZcyBiZWluZyB1c2VkLCBhbmQgaWYgaXQncyBpbnRlcmFjdGluZyB3aXRoIG90aGVyIG1vZHVsZXMuIFRoaXMgaW5mb3JtYXRpb24gZGljdGF0ZXMgaG93IEkgc2hvdWxkIHByb2NlZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaW1wYWN0IHdpdGhpbiB0aGUgTkNJIGRhdGEgZmxvdyBhbmQgaWYgdGhlcmUncyBhbnkgbmVlZCBmb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6NDkuMTg1ODY3MTQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk4NzEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY2lfcnhfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL25jaS9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvY29yZS5jPTM5PXN0YXRpYyB2b2lkIG5jaV9jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbm5ldC9uZmMvbmNpL2NvcmUuYzo0MDpzdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy00MS1zdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTEyNTE9aW50IG5jaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTI2Ni1cXG5uZXQvbmZjL25jaS9jb3JlLmM6MTI2NzpcXHRJTklUX1dPUksoXFx1MDAyNm5kZXYtXFx1MDAzZXJ4X3dvcmssIG5jaV9yeF93b3JrKTtcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTI2OC1cXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFxcXCIlc19uY2lfcnhfd3FcXFwiLCBkZXZfbmFtZShkZXYpKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz0xNTIwPXN0YXRpYyB2b2lkIG5jaV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTU4LVxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxNTU5OnN0YXRpYyB2b2lkIG5jaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTU2MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE3OjAxOjQ5LjIzMzg1ODcxOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDQ1NDc2MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5DSSBOb3RpZmljYXRpb24gUGFja2V0IEZpeCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgdGhlIGZvY3VzIGhlcmUgaGFzIHRvIGJlIG9uIGBuY2lfbnRmX3BhY2tldGAuIEl0J3MgY2xlYXIgdGhhdCBgbmNpX3J4X3dvcmtgIGlzIHN0YXRpYywgd2hpY2ggc3RlZXJzIG1lIHRvd2FyZCB0aGUgcGFja2V0IGl0c2VsZiBhcyB0aGUga2V5LiBXZSdyZSBkZWFsaW5nIHdpdGggYSBub3RpZmljYXRpb24gcGFja2V0LCBzbyBhbnkgaXNzdWVzIGhlcmUgY291bGQgYmUgaW1wYWN0ZnVsLlxuXG5MZXQncyBjaGVjayB0aGUgY29uZmlnIGRlcGVuZGVuY2llcy4gV2UgbmVlZCBgTkZDYCwgYE5GQ19OQ0lgLCBhbmQgYE5GQ19WSVJUVUFMX05DSWAuIE5vIG90aGVyIGdsYXJpbmcgZGVwZW5kZW5jaWVzIHNlZW0gdG8gYXBwbHkgaGVyZS4gYE5GQ2AgbmVlZHMgZWl0aGVyIGBSRktJTExgIG9yIHRoZSBpbnZlcnNlLCBgIVJGS0lMTGAuIGBORkNfTkNJYCBkZXBlbmRzIG9uIGBORkNgLCBhbmQgYE5GQ19WSVJUVUFMX05DSWAgZGVwZW5kcyBvbiBgTkZDX05DSWAsIGFzIGV4cGVjdGVkLiBTbywgd2UncmUgdGFyZ2V0aW5nIHRob3NlIHRocmVlIGNvbmZpZ3M6IGBORkNgLCBgTkZDX05DSWAsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwYCwgd2hlcmUgdGhleSd2ZSBhZGRlZCBib3VuZHMgY2hlY2tpbmcgdG8gZml4IGFuIHVuZGVyZmxvdyBpc3N1ZS4gRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhpcyBjbGVhcmx5IHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MsIGVpdGhlciBhIHJlYWQgb3Igd3JpdGUsIG9yIHBvdGVudGlhbGx5IGFuIGludGVnZXIgdW5kZXJmbG93LiBHaXZlbiB0aGlzIGlzIE5DSSwgYW5kIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBgL2Rldi92aXJ0dWFsX25jaWAsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgdmlydHVhbCBOQ0kgZGV2aWNlIGlzIGEgY29tbW9uIGF0dGFjayBzdXJmYWNlLlxuXG5UaGVyZWZvcmUsIG15IHN1bW1hcnkgaXM6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBgdHJ1ZWBcbiogICAqKkZvY3VzU3ltYm9sczoqKiBgW1wibmNpX250Zl9wYWNrZXRcIl1gXG4qICAgKipFbmFibGVDb25maWdzOioqIGBbXCJORkNcIiwgXCJORkNfTkNJXCIsIFwiTkZDX1ZJUlRVQUxfTkNJXCJdYFxuKiAgICoqUmVhc29uaW5nOioqIFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cgaW4gTkNJIG5vdGlmaWNhdGlvbiBwYWNrZXQgcGFyc2luZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlICgvZGV2L3ZpcnR1YWxfbmNpKS5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwOSwiT3V0cHV0VG9rZW5zIjoxMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6NTUuNjc5MzM4NDQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI4NzIyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX05DSVwiLFxuICAgIFwiTkZDX1ZJUlRVQUxfTkNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmNpX250Zl9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93IGluIE5DSSBub3RpZmljYXRpb24gcGFja2V0IHBhcnNpbmcuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSAoL2Rldi92aXJ0dWFsX25jaSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfbnRmX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cgaW4gTkNJIG5vdGlmaWNhdGlvbiBwYWNrZXQgcGFyc2luZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlICgvZGV2L3ZpcnR1YWxfbmNpKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm5zp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 16:34:35 +0000 UTC FinishedAt: 2026-07-29 17:01:57 +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": "2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "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": "2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "a93e0d9c-fe26-47a5-a945-3d16cd7d1569" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nci_ntf_packet" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9udGZfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cgaW4gTkNJIG5vdGlmaWNhdGlvbiBwYWNrZXQgcGFyc2luZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlICgvZGV2L3ZpcnR1YWxfbmNpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg3MDkyYjk3ZDdhMjkxMTA5YzExMTQyMWYxZjA2ZTUyZmYzOTBmYWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxNzowMDoyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9udGYuYyBiL25ldC9uZmMvbmNpL250Zi5jXG5pbmRleCBjOTY1MTJiYjg2NTMxLi5lMDU1NWM5MGQ2NTc0IDEwMDY0NFxuLS0tIGEvbmV0L25mYy9uY2kvbnRmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmNpL250Zi5jXG5AQCAtNjMxLDYgJiM0Mzs2MzEsOSBAQCBzdGF0aWMgaW50IG5jaV9zdG9yZV9nZW5lcmFsX2J5dGVzX25mY19kZXAoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRzd2l0Y2ggKG50Zi1cdTAwM2VhY3RpdmF0aW9uX3JmX3RlY2hfYW5kX21vZGUpIHtcbiBcdGNhc2UgTkNJX05GQ19BX1BBU1NJVkVfUE9MTF9NT0RFOlxuIFx0Y2FzZSBOQ0lfTkZDX0ZfUEFTU0lWRV9QT0xMX01PREU6XG4mIzQzO1x0XHRpZiAobnRmLVx1MDAzZWFjdGl2YXRpb25fcGFyYW1zLnBvbGxfbmZjX2RlcC5hdHJfcmVzX2xlbiBcdTAwM2NcbiYjNDM7XHRcdCAgICBORkNfQVRSX1JFU19HVF9PRkZTRVQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRuZGV2LVx1MDAzZXJlbW90ZV9nYl9sZW4gPSBtaW5fdChfX3U4LFxuIFx0XHRcdChudGYtXHUwMDNlYWN0aXZhdGlvbl9wYXJhbXMucG9sbF9uZmNfZGVwLmF0cl9yZXNfbGVuXG4gXHRcdFx0XHRcdFx0LSBORkNfQVRSX1JFU19HVF9PRkZTRVQpLFxuQEAgLTY0Myw2ICYjNDM7NjQ2LDkgQEAgc3RhdGljIGludCBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFxuIFx0Y2FzZSBOQ0lfTkZDX0FfUEFTU0lWRV9MSVNURU5fTU9ERTpcbiBcdGNhc2UgTkNJX05GQ19GX1BBU1NJVkVfTElTVEVOX01PREU6XG4mIzQzO1x0XHRpZiAobnRmLVx1MDAzZWFjdGl2YXRpb25fcGFyYW1zLmxpc3Rlbl9uZmNfZGVwLmF0cl9yZXFfbGVuIFx1MDAzY1xuJiM0MztcdFx0ICAgIE5GQ19BVFJfUkVRX0dUX09GRlNFVClcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdG5kZXYtXHUwMDNlcmVtb3RlX2diX2xlbiA9IG1pbl90KF9fdTgsXG4gXHRcdFx0KG50Zi1cdTAwM2VhY3RpdmF0aW9uX3BhcmFtcy5saXN0ZW5fbmZjX2RlcC5hdHJfcmVxX2xlblxuIFx0XHRcdFx0XHRcdC0gTkZDX0FUUl9SRVFfR1RfT0ZGU0VUKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX250Zl9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBpbnRlZ2VyIHVuZGVyZmxvdyBpbiBOQ0kgbm90aWZpY2F0aW9uIHBhY2tldCBwYXJzaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB2aXJ0dWFsIE5DSSBkZXZpY2UgKC9kZXYvdmlydHVhbF9uY2kpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODcwOTJiOTdkN2EyOTExMDljMTExNDIxZjFmMDZlNTJmZjM5MGZhZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDI5IDE3OjAwOjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvbnRmLmMgYi9uZXQvbmZjL25jaS9udGYuYwppbmRleCBjOTY1MTJiYjg2NTMxLi5lMDU1NWM5MGQ2NTc0IDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9udGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL25jaS9udGYuYwpAQCAtNjMxLDYgJiM0Mzs2MzEsOSBAQCBzdGF0aWMgaW50IG5jaV9zdG9yZV9nZW5lcmFsX2J5dGVzX25mY19kZXAoc3RydWN0IG5jaV9kZXYgKm5kZXYsCiAJc3dpdGNoIChudGYtJmd0O2FjdGl2YXRpb25fcmZfdGVjaF9hbmRfbW9kZSkgewogCWNhc2UgTkNJX05GQ19BX1BBU1NJVkVfUE9MTF9NT0RFOgogCWNhc2UgTkNJX05GQ19GX1BBU1NJVkVfUE9MTF9NT0RFOgomIzQzOwkJaWYgKG50Zi0mZ3Q7YWN0aXZhdGlvbl9wYXJhbXMucG9sbF9uZmNfZGVwLmF0cl9yZXNfbGVuICZsdDsKJiM0MzsJCSAgICBORkNfQVRSX1JFU19HVF9PRkZTRVQpCiYjNDM7CQkJYnJlYWs7CiAJCW5kZXYtJmd0O3JlbW90ZV9nYl9sZW4gPSBtaW5fdChfX3U4LAogCQkJKG50Zi0mZ3Q7YWN0aXZhdGlvbl9wYXJhbXMucG9sbF9uZmNfZGVwLmF0cl9yZXNfbGVuCiAJCQkJCQktIE5GQ19BVFJfUkVTX0dUX09GRlNFVCksCkBAIC02NDMsNiAmIzQzOzY0Niw5IEBAIHN0YXRpYyBpbnQgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAogCWNhc2UgTkNJX05GQ19BX1BBU1NJVkVfTElTVEVOX01PREU6CiAJY2FzZSBOQ0lfTkZDX0ZfUEFTU0lWRV9MSVNURU5fTU9ERToKJiM0MzsJCWlmIChudGYtJmd0O2FjdGl2YXRpb25fcGFyYW1zLmxpc3Rlbl9uZmNfZGVwLmF0cl9yZXFfbGVuICZsdDsKJiM0MzsJCSAgICBORkNfQVRSX1JFUV9HVF9PRkZTRVQpCiYjNDM7CQkJYnJlYWs7CiAJCW5kZXYtJmd0O3JlbW90ZV9nYl9sZW4gPSBtaW5fdChfX3U4LAogCQkJKG50Zi0mZ3Q7YWN0aXZhdGlvbl9wYXJhbXMubGlzdGVuX25mY19kZXAuYXRyX3JlcV9sZW4KIAkJCQkJCS0gTkZDX0FUUl9SRVFfR1RfT0ZGU0VUKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBORkMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgbmV0L25mYy9uY2kvbnRmLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhleSYjMzk7cmUgYWRkaW5nIGJvdW5kcyBjaGVja2luZyBmb3IgYGF0cl9yZXNfbGVuYCBhbmQgYGF0cl9yZXFfbGVuYCwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aG9zZSBvZmZzZXQgc3VidHJhY3Rpb25zLiBQcmV2ZW50aW5nIHVuZGVyZmxvdyBpcyBhbHdheXMgYSB3aW4sIG1ha2VzIHNlbnNlIHRvIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWxseSBtYWxpY2lvdXMgTkZDIG1lc3NhZ2VzLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMsIGhvdyByZWxldmFudCBpcyB0aGlzIGNoYW5nZT8gSXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIGNvbmZpZ3VyYXRpb24/CgpNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZy4gSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIGBudGYuY2AgYW5kIHRodXMgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBhcmUgYnVpbHQgaW50byB0aGUga2VybmVsIGltYWdlLiBJdCYjMzk7cyBhIHF1aWNrIGxvb2t1cCwgYnV0IHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIG5lY2Vzc2FyeSBjb25maWcgb3B0aW9ucyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3QgYW5kIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgY29kZSBiZWluZyBhY3RpdmVseSB1c2VkIGluIGRlcGxveWVkIHN5c3RlbXMuIFRoYXQgZGV0ZXJtaW5lcyBob3cgbXVjaCB3ZWlnaHQgSSBzaG91bGQgcHV0IG9uIGEgZml4IGxpa2UgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvbnRmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvbnRmLmM9NjAwPXN0YXRpYyB2b2lkIG5jaV90YXJnZXRfYXV0b19hY3RpdmF0ZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4tLVxubmV0L25mYy9uY2kvbnRmLmMtNjIyLVxubmV0L25mYy9uY2kvbnRmLmM6NjIzOnN0YXRpYyBpbnQgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbm5ldC9uZmMvbmNpL250Zi5jLTYyNC1cdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGYgKm50Zilcbi0tXG5uZXQvbmZjL25jaS9udGYuYz02OTM9c3RhdGljIGludCBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9udGYuYy04NDktXHRcdGlmIChudGYucmZfaW50ZXJmYWNlID09IE5DSV9SRl9JTlRFUkZBQ0VfTkZDX0RFUCkge1xubmV0L25mYy9uY2kvbnRmLmM6ODUwOlx0XHRcdGVyciA9IG5jaV9zdG9yZV9nZW5lcmFsX2J5dGVzX25mY19kZXAobmRldiwgXHUwMDI2bnRmKTtcbm5ldC9uZmMvbmNpL250Zi5jLTg1MS1cdFx0XHRpZiAoZXJyICE9IE5DSV9TVEFUVVNfT0spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1NQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGF0YSBGbG93IG9mIGBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IG9ubHkgdXNlZCB3aXRoaW4gdGhpcyBjb21waWxhdGlvbiB1bml0LCB3aGljaCBsaW1pdHMgdGhlIHNjb3BlIG9mIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBpdHMgdXNhZ2UuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGRhdGEgZmxvdy4gSSBrbm93IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldGAsIHdoaWNoIGdpdmVzIG1lIGEgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldGAgYW5kIHNlZSAqaXRzKiBjYWxsZXJzLiBUaGF0IHdpbGwgc2hvdyBtZSB0aGUgaGlnaGVyLWxldmVsIGNvbnRleHQgaW4gd2hpY2ggdGhlIGJ5dGUgc3RvcmFnZSBvY2N1cnMgZHVyaW5nIE5GQy1ERVAgaW50ZXJmYWNlIGFjdGl2YXRpb24uIEtub3dpbmcgdGhlIGNhbGwgY2hhaW4gd2lsbCBoZWxwIG1lIHBpbnBvaW50IHRoZSBwdXJwb3NlIG9mIHRoaXMgYnl0ZSBzdG9yYWdlIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgKnRoYXQqIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvbnRmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvbnRmLmM9NjcxPXN0YXRpYyBpbnQgbmNpX3N0b3JlX2F0c19uZmNfaXNvX2RlcChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9udGYuYy02OTItXG5uZXQvbmZjL25jaS9udGYuYzo2OTM6c3RhdGljIGludCBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbm5ldC9uZmMvbmNpL250Zi5jLTY5NC1cdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9uY2kvbnRmLmM9OTcyPXZvaWQgbmNpX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9uY2kvbnRmLmMtMTAyMC1cdGNhc2UgTkNJX09QX1JGX0lOVEZfQUNUSVZBVEVEX05URjpcbm5ldC9uZmMvbmNpL250Zi5jOjEwMjE6XHRcdGlmIChuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldChuZGV2LCBza2IpKVxubmV0L25mYy9uY2kvbnRmLmMtMTAyMi1cdFx0XHRnb3RvIGVuZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjkzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5GQyBOb3RpZmljYXRpb24gRW50cnkgUG9pbnQqKgoKT2theSwgc28gYG5jaV9udGZfcGFja2V0YCBpcyBjbGVhcmx5IHdoZXJlIHRoZSBORkMgbm90aWZpY2F0aW9uIGFjdGlvbiBiZWdpbnMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbnRyeSBwb2ludC4gVGhhdCBsaWtlbHkgbWVhbnMgY2hlY2tpbmcgdGhlIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBnaXZlbiB0aGF0IHRoaXMgaXMgTkZDLXJlbGF0ZWQgY29kZSwgSSYjMzk7bGwgaGVhZCBzdHJhaWdodCBmb3IgdGhlIGBuZXQvbmZjL25jaS9NYWtlZmlsZWAgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBub3RpZmljYXRpb24gbWVjaGFuaXNtIGlzIGNvbmZpZ3VyZWQgYW5kIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgYnVpbGQtdGltZSBzcGVjaWZpY3Mgb2YgYW55IGtlcm5lbCBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9NYWtlZmlsZT02PW9iai0kKENPTkZJR19ORkNfTkNJKSAmIzQzOz0gbmNpLm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlLTctXG5uZXQvbmZjL25jaS9NYWtlZmlsZTo4Om5jaS1vYmpzIDo9IGNvcmUubyBkYXRhLm8gbGliLm8gbnRmLm8gcnNwLm8gaGNpLm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlLTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAxNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5GQyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgc3lzdGVtIG5lZWRzIGBDT05GSUdfTkZDX05DSWAuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGlzIHNldHRpbmcuIE15IGZvY3VzIHdpbGwgYmUgb24gYG5ldC9uZmMvS2NvbmZpZ2AgYW5kLCBjcnVjaWFsbHksIGBuZXQvbmZjL25jaS9LY29uZmlnYC4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGRyaXZlcnMgYXJlIGNvbnRpbmdlbnQgdXBvbiBgQ09ORklHX05GQ19OQ0lgIGJlaW5nIGVuYWJsZWQuIEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBvdGhlciBORkMgZnVuY3Rpb25hbGl0aWVzPyBBcmUgdGhlcmUgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCBjb25maWd1cmF0aW9ucyB0aWVkIHRvIHRoaXM/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIHNldHRpbmcgZml0cyBpbnRvIHRoZSBicm9hZGVyIE5GQyBlY29zeXN0ZW0gYW5kIHdoYXQgaW1wYWN0IGl0IGhhcyBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBsaWtlbHkgcmVxdWlyZW1lbnRzIGZvciB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZDX05DSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L25mYy9uY2kvS2NvbmZpZzoyOmNvbmZpZyBORkNfTkNJXG5uZXQvbmZjL25jaS9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIE5GQ1xuLS1cbm5ldC9uZmMvbmNpL0tjb25maWctMTItXG5uZXQvbmZjL25jaS9LY29uZmlnOjEzOmNvbmZpZyBORkNfTkNJX1NQSVxubmV0L25mYy9uY2kvS2NvbmZpZy0xNC1cdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgU1BJXG4tLVxubmV0L25mYy9uY2kvS2NvbmZpZy0yMy1cbm5ldC9uZmMvbmNpL0tjb25maWc6MjQ6Y29uZmlnIE5GQ19OQ0lfVUFSVFxubmV0L25mYy9uY2kvS2NvbmZpZy0yNS1cdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgVFRZXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUaGlua2luZyBUaHJvdWdoIE5GQyBTdGFjayBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgTkZDX05DSWAgY29tcG9uZW50LCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIGl0cyBkZXBlbmRlbmN5IG9uIHRoZSBiYXNlIGBORkNgIG1vZHVsZS4gTm8gc3VycHJpc2UgdGhlcmU7IHRoYXQmIzM5O3MgZ2VuZXJhbGx5IGhvdyB0aGVzZSB0aGluZ3MgYXJlIHN0cnVjdHVyZWQuIE5vdywgd2hlcmUgZG8gSSBzdGFydCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXA/IFRoZSBpbW1lZGlhdGUgcG9ydCBvZiBjYWxsIGZvciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBpcyBhbHdheXMgYG5ldC9uZmMvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZm9ybWFsIGRlY2xhcmF0aW9uIG9mIHRoaXMgcmVsYXRpb25zaGlwIGFuZCBjYW4gdmVyaWZ5IGFueSBwb3RlbnRpYWwgbnVhbmNlcyBvciBjb25kaXRpb25hbCBhc3BlY3RzLiBJdCBpcyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IGBORkNfTkNJYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgTkZDIGZyYW1ld29yay4gTGV0JiMzOTtzIGdldCB0byB0aGUgS2NvbmZpZyBmaWxlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvS2NvbmZpZy01LVxubmV0L25mYy9LY29uZmlnOjY6bWVudWNvbmZpZyBORkNcbm5ldC9uZmMvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuLS1cbm5ldC9uZmMvS2NvbmZpZy0xNi1cbm5ldC9uZmMvS2NvbmZpZzoxNzpjb25maWcgTkZDX0RJR0lUQUxcbm5ldC9uZmMvS2NvbmZpZy0xOC1cdGRlcGVuZHMgb24gTkZDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBhbmFseXNpcywgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiBpdCB3ZXJlIG15IG93biBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBORkMgRnV6emluZyBQb3NzaWJpbGl0aWVzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBORkMsIGFuZCBzcGVjaWZpY2FsbHkgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBORkNgIGFuZCBgTkZDX05DSWAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgYXJlIHRoZXJlIGFueSB2aXJ0dWFsIGRyaXZlcnMgSSBjYW4gbGV2ZXJhZ2UgdG8gZnV6eiB0aGUgYE5GQyBOQ0lgIHNpZGUgb2YgdGhpbmdzPyBUaGF0JiMzOTtzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIGlmIEkgY2FuIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiB3aXRob3V0IG5lZWRpbmcgYWN0dWFsIHBoeXNpY2FsIGRldmljZXMuCgpOb3csIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5LCBkb2VzIHN5emthbGxlciBhcHByb2FjaCBORkMgZnV6emluZyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIG5ldGxpbmsgc29ja2V0cyBvciBwZXJoYXBzIGV2ZW4gdXNpbmcgdmlydHVhbCBkZXZpY2VzPyBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHNldHVwLgoKQWgsIHdhaXQgYSBzZWNvbmQsIGxldCYjMzk7cyBsb29rIGF0IGBuY2lfbnRmX3BhY2tldGAgZnVuY3Rpb24uIFRoaXMgc2VlbXMgaW1wb3J0YW50LCBhcyBpdCYjMzk7cyBkaXJlY3RseSByZWxhdGVkIHRvIHJlY2VpdmluZyBwYWNrZXRzIGZyb20gdGhlIGRldmljZS4gVGhhdCYjMzk7cyBhIGtleSBpbnRlcmFjdGlvbiBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyIC0gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc3RhY2ssIHRvIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBgbmNpX250Zl9wYWNrZXRgIGZ1bmN0aW9uLiBUaGF0IHdpbGwgdGVsbCBtZSB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBtYXkgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25jaV9udGZfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL2NvcmUuYz0xNTU5PXN0YXRpYyB2b2lkIG5jaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTU4Mi1cdFx0Y2FzZSBOQ0lfTVRfTlRGX1BLVDpcbm5ldC9uZmMvbmNpL2NvcmUuYzoxNTgzOlx0XHRcdG5jaV9udGZfcGFja2V0KG5kZXYsIHNrYik7XG5uZXQvbmZjL25jaS9jb3JlLmMtMTU4NC1cdFx0XHRicmVhaztcbi0tXG5uZXQvbmZjL25jaS9udGYuYz05NDg9c3RhdGljIGludCBuY2lfbmZjZWVfZGlzY292ZXJfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9udGYuYy05NzEtXG5uZXQvbmZjL25jaS9udGYuYzo5NzI6dm9pZCBuY2lfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9uZmMvbmNpL250Zi5jLTk3My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NDEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5DSSBQYWNrZXQgSW5qZWN0aW9uKioKCk9rYXksIHNvIGBuY2lfcnhfd29ya2AgaXMgY2xlYXJseSB0aGUgZnVuY3Rpb24gcHJvY2Vzc2luZyByZWNlaXZlZCBwYWNrZXRzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICpob3cqIGFyZSB0aGVzZSBwYWNrZXRzIGV2ZW4gZ2V0dGluZyBpbmplY3RlZCBpbnRvIHRoZSBzeXN0ZW0gaW4gdGhlIGZpcnN0IHBsYWNlPyBJcyBTeXprYWxsZXIgbGV2ZXJhZ2luZyBhIHN0YW5kYXJkIE5DSSBkZXZpY2UsIGFsYmVpdCBwZXJoYXBzIGEgdmlydHVhbCBvbmU/IE9yIGFyZSB0aGV5IGVtcGxveWluZyBzb21lIG1vcmUgZXNvdGVyaWMgaW5qZWN0aW9uIG1lY2hhbmlzbT8KClRvIGZpZ3VyZSB0aGlzIG91dCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyB2aXJ0dWFsIE5DSSBkZXZpY2UgY29kZS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayB0aGUgYGRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmNgIGZpbGUg4oCTIG9yIHNvbWV0aGluZyBzaW1pbGFybHkgbmFtZWQsIGlmIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSB1bmRlcmx5aW5nIGluamVjdGlvbiBtZXRob2QuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IGFuZCByZXZlYWwgdGhlIGxpa2VseSBpbmplY3Rpb24gbWV0aG9kLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhlIGRldmVsb3BlcnMgaGF2ZSBpbXBsZW1lbnRlZCBhIHZpcnR1YWwgZGV2aWNlIHRvIGRvIHRoZSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0dWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWc9MzE9Y29uZmlnIE5GQ19TSU1cbi0tXG5kcml2ZXJzL25mYy9LY29uZmlnLTM0LVx0aGVscFxuZHJpdmVycy9uZmMvS2NvbmZpZzozNTpcdCAgVGhpcyBkcml2ZXIgZGVjbGFyZXMgdHdvIHZpcnR1YWwgTkZDIGRldmljZXMgc3VwcG9ydGluZyBORkMtREVQXG5kcml2ZXJzL25mYy9LY29uZmlnLTM2LVx0ICBwcm90b2NvbC4gQW4gTExDUCBjb25uZWN0aW9uIGNhbiBiZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZW0gYW5kXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZz01Mj1jb25maWcgTkZDX1ZJUlRVQUxfTkNJXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZy01NS1cdGhlbHBcbmRyaXZlcnMvbmZjL0tjb25maWc6NTY6XHQgIE5DSSB2aXJ0dWFsIGRldmljZSBzaW11bGF0ZXMgYSBOQ0kgZGV2aWNlIHRvIHRoZSB1c2VyLlxuZHJpdmVycy9uZmMvS2NvbmZpZy01Ny1cdCAgSXQgY2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIE5DSSBtb2R1bGUgYW5kIGFwcGxpY2F0aW9ucy5cbmRyaXZlcnMvbmZjL0tjb25maWc6NTg6XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIGFuZFxuZHJpdmVycy9uZmMvS2NvbmZpZy01OS1cdCAgbW9kdWxlLlxuLS1cbmRyaXZlcnMvbmZjL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19ORkNfU1Q5NUhGKVx0JiM0Mzs9IHN0OTVoZi9cbmRyaXZlcnMvbmZjL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpXHQmIzQzOz0gdmlydHVhbF9uY2lkZXYub1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjMtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjI0OnN0cnVjdCB2aXJ0dWFsX25jaV9kZXYge1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yNS1cdHN0cnVjdCBuY2lfZGV2ICpuZGV2O1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzEtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjMyOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzMte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzozNDpcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTM1LVxuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzktXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjQwOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfY2xvc2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTQxLXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NDI6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy00My1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTUyLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo1MzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpX3NlbmQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTU0LXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NTU6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01Ni1cbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTc1LVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgdmlydHVhbF9uY2lfb3BzID0ge1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3NzpcdC5vcGVuID0gdmlydHVhbF9uY2lfb3BlbixcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzg6XHQuY2xvc2UgPSB2aXJ0dWFsX25jaV9jbG9zZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzk6XHQuc2VuZCA9IHZpcnR1YWxfbmNpX3NlbmRcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODAtfTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODEtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjgyOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgzLVx0XHRcdFx0ICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTg0LXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6ODU6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTg2LVx0c2l6ZV90IGFjdHVhbF9sZW47XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTItXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjExMzpzdGF0aWMgc3NpemVfdCB2aXJ0dWFsX25jaWRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE0LVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTYte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMTc6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTExOC1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzItXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEzMzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNC17XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNS1cdGludCByZXQgPSAwO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMzY6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2O1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzctXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNDAtXHRcdHJldHVybiAtRU5PTUVNO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNDE6XHR2ZGV2LVx1MDAzZW5kZXYgPSBuY2lfYWxsb2NhdGVfZGV2aWNlKFx1MDAyNnZpcnR1YWxfbmNpX29wcyxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTQyLVx0XHRWSVJUVUFMX05GQ19QUk9UT0NPTFMsIDAsIDApO1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTYzLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjQ6c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTY1LXtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTY2Olx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjctXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzUtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3NjpzdGF0aWMgbG9uZyB2aXJ0dWFsX25jaWRldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTc3LVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzgte1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNzk6XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE4MC1cdGNvbnN0IHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2ID0gdmRldi1cdTAwM2VuZGV2LVx1MDAzZW5mY19kZXY7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTEtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5MjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aXJ0dWFsX25jaWRldl9mb3BzID0ge1xuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTMtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk0Olx0LnJlYWQgPSB2aXJ0dWFsX25jaWRldl9yZWFkLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTU6XHQud3JpdGUgPSB2aXJ0dWFsX25jaWRldl93cml0ZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk2Olx0Lm9wZW4gPSB2aXJ0dWFsX25jaWRldl9vcGVuLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTc6XHQucmVsZWFzZSA9IHZpcnR1YWxfbmNpZGV2X2Nsb3NlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTg6XHQudW5sb2NrZWRfaW9jdGwgPSB2aXJ0dWFsX25jaWRldl9pb2N0bFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTktfTtcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jPTIwMT1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbWlzY2RldiA9IHtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjAyLVx0Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyMDM6XHQubmFtZSA9IFwmIzM0O3ZpcnR1YWxfbmNpXCYjMzQ7LFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyMDQ6XHQuZm9wcyA9IFx1MDAyNnZpcnR1YWxfbmNpZGV2X2ZvcHMsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTIwNS1cdC5tb2RlID0gMDYwMCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgxOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBWaXJ0dWFsIE5DSSBEZXZpY2UqKgoKT2theSwgdGhpcyBpcyBwcm9taXNpbmchIFRoZSBgZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuY2AgZmlsZSBjcmVhdGVzIGEgYC9kZXYvdmlydHVhbF9uY2lgIGRldmljZS4gIFRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkgd2FzIGhvcGluZyBmb3Ig4oCTIGEgZGlyZWN0LCB1c2Vyc3BhY2UtYWNjZXNzaWJsZSBlbnRyeSBwb2ludCBpbnRvIHRoZSBOQ0kgc3Vic3lzdGVtLCBtYWtpbmcgaXQgcGVyZmVjdCBmb3IgZnV6emluZy4gIEkgY2FuIGluamVjdCBwYWNrZXRzIGRpcmVjdGx5ISAgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gZW5hYmxlIGFyZSBgTkZDYCwgYE5GQ19OQ0lgLCBhbmQgYE5GQ19WSVJUVUFMX05DSWAuICBHb29kLCBnb29kLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gYG5jaV9zdG9yZV9nZW5lcmFsX2J5dGVzX25mY19kZXBgLiBJIHJlbWVtYmVyIHRoYXQgZnVuY3Rpb24gYmVpbmcgYSBwb3RlbnRpYWwgdGFyZ2V0LiAgSXQmIzM5O3MgY2FsbGVkIGZyb20gYG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0YCwgd2hpY2ggaXRzZWxmIGlzIGxpa2VseSB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIHRyaWdnZXIuIEJ1dCB3YWl04oCmIGlzbiYjMzk7dCBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgIHN0YXRpYz8gIFllcywgaXQgaXMuIFRoYXQmIzM5O3MgYSBiaXQgYW5ub3lpbmc7IHRoZSBmdW5jdGlvbiBpcyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgaXRzIHNvdXJjZSBmaWxlLiBTbywgSSB3aWxsIG5lZWQgdG8gZm9jdXMgb24gYG5jaV9udGZfcGFja2V0YC4gSXQgaXMgdGhlIGNhbGwgcG9pbnQgZm9yIHRoZSBmb3JtZXIgYW5kIG5vdCBzdGF0aWMuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTkZDX1ZJUlRVQUxfTkNJYCBhZ2FpbiBqdXN0IHRvIGJlIGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORkNfVklSVFVBTF9OQ0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmZjL0tjb25maWc6NTI6Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O05DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTAxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzoKCioqSW52ZXN0aWdhdGluZyBORkMgVmlydHVhbGl6YXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBORkNfVklSVFVBTF9OQ0lgIGNvbmZpZ3VyYXRpb24uIEl0JiMzOTtzIGdvdCBtZSB3b25kZXJpbmcg4oCTIGlzIHRoaXMgdGhpbmcgdHJ1bHkgaW5kZXBlbmRlbnQsIG9yIGlzIGl0IGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGJhc2UgYE5GQ19OQ0lgIGNvbmZpZ3VyYXRpb24/IFRoZSBhcmNoaXRlY3R1cmUgZGlhZ3JhbXMgSSYjMzk7dmUgYmVlbiBwb3VyaW5nIG92ZXIgc2VlbSB0byBpbXBseSBzb21lIGxldmVsIG9mIGFic3RyYWN0aW9uLCBidXQgYWJzdHJhY3Rpb24gZG9lc24mIzM5O3QgYWx3YXlzIGVxdWFsIGNvbXBsZXRlIHNlcGFyYXRpb24uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGRlcGVuZGVuY3kgdHJlZSBoZXJlLgoKTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGEgY3J1Y2lhbCBwb2ludCBmb3Igc2V2ZXJhbCByZWFzb25zLiBJZiBgTkZDX1ZJUlRVQUxfTkNJYCByZWxpZXMgKmRpcmVjdGx5KiBvbiBgTkZDX05DSWAsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50IGZvciBkZXNpZ24gY29uc2lkZXJhdGlvbnMuIEl0IGNvdWxkIGxpbWl0IG91ciBtb2R1bGFyaXR5IGFuZCBwb3RlbnRpYWxseSBjcmVhdGUgYSB0aWdodCBjb3VwbGluZyB0aGF0IHdpbGwgbWFrZSBmdXR1cmUgdXBkYXRlcyBvciBwb3J0aW5nIHRvIGRpZmZlcmVudCBoYXJkd2FyZSBwcm9maWxlcyBmYXIgbW9yZSBkaWZmaWN1bHQuIEl0IHdvdWxkIGJlIGEgbmlnaHRtYXJlIHRvIGRlYnVnIGFuZCBtYWludGFpbiBsb25nIHRlcm0uIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBgTkZDX1ZJUlRVQUxfTkNJYCBpcyBhIGdlbnVpbmUgbGF5ZXIgb2YgdmlydHVhbGl6YXRpb24sIHRoZW4gd2UgbWlnaHQgaGF2ZSBzb21lIHJlYWwgZmxleGliaWxpdHkgaW4gaG93IHdlIGltcGxlbWVudCBhbmQgaW50ZWdyYXRlIGl0IHdpdGggZGlmZmVyZW50IE5GQyBjb250cm9sbGVycy4KClNvLCB0aGUgZnVuZGFtZW50YWwgcXVlc3Rpb24gSSBoYXZlIHRvIGFzayBteXNlbGYgaXM6IGNhbiBJIHRyZWF0IGBORkNfVklSVFVBTF9OQ0lgIGFzIGEgdHJ1bHkgdmlydHVhbCwgc2VsZi1jb250YWluZWQgY29tcG9uZW50LCBvciBkbyBJIG5lZWQgdG8gYmFrZSBpbiBhc3N1bXB0aW9ucyBhYm91dCBgTkZDX05DSWAgZHVyaW5nIG15IGRlc2lnbiBwcm9jZXNzPyBUaGlzIGlzIGdvaW5nIHRvIGluZmx1ZW5jZSBteSBhc3Nlc3NtZW50IG9mIHRoZSBhcmNoaXRlY3R1cmFsIGltcGFjdHMgdGhhdCB0aGlzIGhhcyBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFRpbWUgdG8gZGlnIGRlZXBlciBhbmQgbG9vayBhdCB0aGUgc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgZXJyb3IgaGFuZGxpbmcgdG8gY29tZSB0byBhIGZpcm0gY29uY2x1c2lvbi4gVGhpcyBpcyB0aGUgYmVkcm9jayB0byBzb2xpZGlmeWluZyBvdXIgYXBwcm9hY2ggdG8gZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnPTY9bWVudSBcJiMzNDtOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZmMvS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBORkNcbmRyaXZlcnMvbmZjL0tjb25maWctOC1cbmRyaXZlcnMvbmZjL0tjb25maWc9OT1jb25maWcgTkZDX1RSRjc5NzBBXG5kcml2ZXJzL25mYy9LY29uZmlnLTEwLVx0dHJpc3RhdGUgXCYjMzQ7VGV4YXMgSW5zdHJ1bWVudHMgVFJGNzk3MGEgTkZDIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZmMvS2NvbmZpZzoxMTpcdGRlcGVuZHMgb24gU1BJIFx1MDAyNlx1MDAyNiBORkNfRElHSVRBTCBcdTAwMjZcdTAwMjYgR1BJT0xJQlxuZHJpdmVycy9uZmMvS2NvbmZpZy0xMi1cdGhlbHBcbi0tXG5kcml2ZXJzL25mYy9LY29uZmlnPTIxPWNvbmZpZyBORkNfTUVJX1BIWVxuZHJpdmVycy9uZmMvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O01FSSBidXMgTkZDIGRldmljZSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25mYy9LY29uZmlnOjIzOlx0ZGVwZW5kcyBvbiBJTlRFTF9NRUkgXHUwMDI2XHUwMDI2IE5GQ19IQ0lcbmRyaXZlcnMvbmZjL0tjb25maWctMjQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZz0zMT1jb25maWcgTkZDX1NJTVxuZHJpdmVycy9uZmMvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O05GQyBoYXJkd2FyZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25mYy9LY29uZmlnOjMzOlx0ZGVwZW5kcyBvbiBORkNfRElHSVRBTFxuZHJpdmVycy9uZmMvS2NvbmZpZy0zNC1cdGhlbHBcbi0tXG5kcml2ZXJzL25mYy9LY29uZmlnPTQyPWNvbmZpZyBORkNfUE9SVDEwMFxuZHJpdmVycy9uZmMvS2NvbmZpZy00My1cdHRyaXN0YXRlIFwmIzM0O1NvbnkgTkZDIFBvcnQtMTAwIFNlcmllcyBVU0IgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmZjL0tjb25maWc6NDQ6XHRkZXBlbmRzIG9uIFVTQlxuZHJpdmVycy9uZmMvS2NvbmZpZzo0NTpcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcbmRyaXZlcnMvbmZjL0tjb25maWctNDYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZz01Mj1jb25maWcgTkZDX1ZJUlRVQUxfTkNJXG5kcml2ZXJzL25mYy9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7TkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25mYy9LY29uZmlnOjU0Olx0ZGVwZW5kcyBvbiBORkNfTkNJXG5kcml2ZXJzL25mYy9LY29uZmlnLTU1LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDMwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBORkMgVmlydHVhbCBOQ0kgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBORkMgVmlydHVhbCBOQ0kgdGhpbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBORkNfVklSVFVBTF9OQ0lgIG9idmlvdXNseSBkZXBlbmRzIG9uIGBORkNfTkNJYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlcmVmb3JlLCB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbmFibGUgd291bGQgYmUgYE5GQ2AsIGBORkNfTkNJYCwgYW5kIHRoZW4sIG9mIGNvdXJzZSwgYE5GQ19WSVJUVUFMX05DSWAgaXRzZWxmLiBUaGF0IHNlZW1zIGxvZ2ljYWwuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZSBpdHNlbGYuIEkgd2FudCB0byBjaGVjayBvdXQgaG93IHRoZXNlIGluY29taW5nIHBhY2tldHMgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBhdCBgbmNpX250Zl9wYWNrZXRgIGFuZCBgbmNpX3J4X3dvcmtgLiBGcm9tIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZywgYG5jaV9udGZfcGFja2V0YCBhcHBlYXJzIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBOb3RpZmljYXRpb24gKE5URikgcGFja2V0cy4gQW5kLCBgbmNpX3J4X3dvcmtgIGlzIHRoZSB3b3JrcXVldWUgZnVuY3Rpb24gd2hlcmUgdGhlIHJlYWwgcHJvY2Vzc2luZyBvZiB0aGVzZSBwYWNrZXRzIHRha2VzIHBsYWNlLiBHaXZlbiB0aGF0LCBgbmNpX250Zl9wYWNrZXRgIHdpbGwgYmUgdGhlIGZ1bmN0aW9uIHRvIGZvY3VzIG9uIGZvciBub3cuCgpMZXQmIzM5O3MgcXVpY2tseSBzY2FuIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyB0byBtYWtlIHN1cmUgdGhlcmUgaXMgbm90aGluZyBlbHNlIGNydWNpYWwuIGBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldGAgaXMgc3RhdGljLiBTaW5jZSB0aGF0JiMzOTtzIG5vdCBleHBvcnRlZCwgaXQmIzM5O3Mgbm90IGEgZnVuY3Rpb24gSSBuZWVkIHRvIGZvY3VzIG9uLiBTaW5jZSBgbmNpX250Zl9wYWNrZXRgIGlzIG5vdCBzdGF0aWMsIGl0IG11c3QgYmUgZXhwb3J0ZWQuIFRoaXMgaXMgdGhlIG1haW4gb25lIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfbnRmX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL250Zi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL250Zi5jPTk0OD1zdGF0aWMgaW50IG5jaV9uZmNlZV9kaXNjb3Zlcl9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLS1cbm5ldC9uZmMvbmNpL250Zi5jLTk3MS1cbm5ldC9uZmMvbmNpL250Zi5jOjk3Mjp2b2lkIG5jaV9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L25mYy9uY2kvbnRmLmMtOTczLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSBjb25zaWRlcmF0aW9uczoKCioqQW5hbHl6aW5nIEZ1bmN0aW9uIEF0dHJpYnV0ZXMgaW4gdGhlIE5DSSBTdWJzeXN0ZW0qKgoKQWxyaWdodCwgc28gYG5jaV9udGZfcGFja2V0YCBpcyBjb25maXJtZWQgYXMgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBjb25maXJtaW5nIGl0cyBwb3RlbnRpYWwgdmlzaWJpbGl0eSBhbmQgcmV1c2FiaWxpdHkgYmV5b25kIGEgc3RyaWN0bHkgZGVmaW5lZCBzY29wZSB3aXRoaW4gdGhlIGltbWVkaWF0ZSBjb21waWxhdGlvbiB1bml0LiBOb3csIGdpdmVuIHRoYXQsIG15IG5leHQgbGluZSBvZiBpbnF1aXJ5IGhhcyB0byBiZSBhYm91dCBgbmNpX3J4X3dvcmtgLiBJIG5lZWQgdG8gdmVyaWZ5IGl0cyB2aXNpYmlsaXR5IGFzIHdlbGwuIElzIGl0IGRlY2xhcmVkIGFzIHN0YXRpYz8gS25vd2luZyBpdHMgYXR0cmlidXRlIHdpbGwgZGV0ZXJtaW5lIGEgbG90IGFib3V0IGhvdyBpdOKAmXMgYmVpbmcgdXNlZCwgYW5kIGlmIGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggb3RoZXIgbW9kdWxlcy4gVGhpcyBpbmZvcm1hdGlvbiBkaWN0YXRlcyBob3cgSSBzaG91bGQgcHJvY2VlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpbXBhY3Qgd2l0aGluIHRoZSBOQ0kgZGF0YSBmbG93IGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgbmVlZCBmb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25jaV9yeF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL2NvcmUuYz0zOT1zdGF0aWMgdm9pZCBuY2lfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbm5ldC9uZmMvbmNpL2NvcmUuYzo0MDpzdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubmV0L25mYy9uY2kvY29yZS5jLTQxLXN0YXRpYyB2b2lkIG5jaV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTEyNTE9aW50IG5jaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTEyNjYtXG5uZXQvbmZjL25jaS9jb3JlLmM6MTI2NzpcdElOSVRfV09SSyhcdTAwMjZuZGV2LVx1MDAzZXJ4X3dvcmssIG5jaV9yeF93b3JrKTtcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMjY4LVx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcJiMzNDslc19uY2lfcnhfd3FcJiMzNDssIGRldl9uYW1lKGRldikpO1xuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xNTIwPXN0YXRpYyB2b2lkIG5jaV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTU1OC1cbm5ldC9uZmMvbmNpL2NvcmUuYzoxNTU5OnN0YXRpYyB2b2lkIG5jaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTYwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDkKCQkJCQkJCW91dHB1dDogMTAyCgkJCQkJCQl0aG91Z2h0czogMzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5DSSBOb3RpZmljYXRpb24gUGFja2V0IEZpeCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIHRoZSBmb2N1cyBoZXJlIGhhcyB0byBiZSBvbiBgbmNpX250Zl9wYWNrZXRgLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBuY2lfcnhfd29ya2AgaXMgc3RhdGljLCB3aGljaCBzdGVlcnMgbWUgdG93YXJkIHRoZSBwYWNrZXQgaXRzZWxmIGFzIHRoZSBrZXkuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBub3RpZmljYXRpb24gcGFja2V0LCBzbyBhbnkgaXNzdWVzIGhlcmUgY291bGQgYmUgaW1wYWN0ZnVsLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLiBXZSBuZWVkIGBORkNgLCBgTkZDX05DSWAsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYC4gTm8gb3RoZXIgZ2xhcmluZyBkZXBlbmRlbmNpZXMgc2VlbSB0byBhcHBseSBoZXJlLiBgTkZDYCBuZWVkcyBlaXRoZXIgYFJGS0lMTGAgb3IgdGhlIGludmVyc2UsIGAhUkZLSUxMYC4gYE5GQ19OQ0lgIGRlcGVuZHMgb24gYE5GQ2AsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYCBkZXBlbmRzIG9uIGBORkNfTkNJYCwgYXMgZXhwZWN0ZWQuIFNvLCB3ZSYjMzk7cmUgdGFyZ2V0aW5nIHRob3NlIHRocmVlIGNvbmZpZ3M6IGBORkNgLCBgTkZDX05DSWAsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYC4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcGAsIHdoZXJlIHRoZXkmIzM5O3ZlIGFkZGVkIGJvdW5kcyBjaGVja2luZyB0byBmaXggYW4gdW5kZXJmbG93IGlzc3VlLiBGcm9tIGEgZnVuY3Rpb25hbCBzdGFuZHBvaW50LCB0aGlzIGNsZWFybHkgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcywgZWl0aGVyIGEgcmVhZCBvciB3cml0ZSwgb3IgcG90ZW50aWFsbHkgYW4gaW50ZWdlciB1bmRlcmZsb3cuIEdpdmVuIHRoaXMgaXMgTkNJLCBhbmQgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGAvZGV2L3ZpcnR1YWxfbmNpYCwgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSB2aXJ0dWFsIE5DSSBkZXZpY2UgaXMgYSBjb21tb24gYXR0YWNrIHN1cmZhY2UuCgpUaGVyZWZvcmUsIG15IHN1bW1hcnkgaXM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogYHRydWVgCiogICAqKkZvY3VzU3ltYm9sczoqKiBgWyYjMzQ7bmNpX250Zl9wYWNrZXQmIzM0O11gCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFsmIzM0O05GQyYjMzQ7LCAmIzM0O05GQ19OQ0kmIzM0OywgJiMzNDtORkNfVklSVFVBTF9OQ0kmIzM0O11gCiogICAqKlJlYXNvbmluZzoqKiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93IGluIE5DSSBub3RpZmljYXRpb24gcGFja2V0IHBhcnNpbmcuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSAoL2Rldi92aXJ0dWFsX25jaSkuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9udGZfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cgaW4gTkNJIG5vdGlmaWNhdGlvbiBwYWNrZXQgcGFyc2luZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlICgvZGV2L3ZpcnR1YWxfbmNpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX250Zl9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBpbnRlZ2VyIHVuZGVyZmxvdyBpbiBOQ0kgbm90aWZpY2F0aW9uIHBhY2tldCBwYXJzaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB2aXJ0dWFsIE5DSSBkZXZpY2UgKC9kZXYvdmlydHVhbF9uY2kpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6MjUuNTYyODkxMDM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAyMDkzMzQ3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfbnRmX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cgaW4gTkNJIG5vdGlmaWNhdGlvbiBwYWNrZXQgcGFyc2luZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlICgvZGV2L3ZpcnR1YWxfbmNpKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6MjUuNTYyODk4NTc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA4NzczNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NzA5MmI5N2Q3YTI5MTEwOWMxMTE0MjFmMWYwNmU1MmZmMzkwZmFkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDE3OjAwOjI0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL250Zi5jIGIvbmV0L25mYy9uY2kvbnRmLmNcXG5pbmRleCBjOTY1MTJiYjg2NTMxLi5lMDU1NWM5MGQ2NTc0IDEwMDY0NFxcbi0tLSBhL25ldC9uZmMvbmNpL250Zi5jXFxuKysrIGIvbmV0L25mYy9uY2kvbnRmLmNcXG5AQCAtNjMxLDYgKzYzMSw5IEBAIHN0YXRpYyBpbnQgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFx0c3dpdGNoIChudGYtXFx1MDAzZWFjdGl2YXRpb25fcmZfdGVjaF9hbmRfbW9kZSkge1xcbiBcXHRjYXNlIE5DSV9ORkNfQV9QQVNTSVZFX1BPTExfTU9ERTpcXG4gXFx0Y2FzZSBOQ0lfTkZDX0ZfUEFTU0lWRV9QT0xMX01PREU6XFxuK1xcdFxcdGlmIChudGYtXFx1MDAzZWFjdGl2YXRpb25fcGFyYW1zLnBvbGxfbmZjX2RlcC5hdHJfcmVzX2xlbiBcXHUwMDNjXFxuK1xcdFxcdCAgICBORkNfQVRSX1JFU19HVF9PRkZTRVQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRuZGV2LVxcdTAwM2VyZW1vdGVfZ2JfbGVuID0gbWluX3QoX191OCxcXG4gXFx0XFx0XFx0KG50Zi1cXHUwMDNlYWN0aXZhdGlvbl9wYXJhbXMucG9sbF9uZmNfZGVwLmF0cl9yZXNfbGVuXFxuIFxcdFxcdFxcdFxcdFxcdFxcdC0gTkZDX0FUUl9SRVNfR1RfT0ZGU0VUKSxcXG5AQCAtNjQzLDYgKzY0Niw5IEBAIHN0YXRpYyBpbnQgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFxuIFxcdGNhc2UgTkNJX05GQ19BX1BBU1NJVkVfTElTVEVOX01PREU6XFxuIFxcdGNhc2UgTkNJX05GQ19GX1BBU1NJVkVfTElTVEVOX01PREU6XFxuK1xcdFxcdGlmIChudGYtXFx1MDAzZWFjdGl2YXRpb25fcGFyYW1zLmxpc3Rlbl9uZmNfZGVwLmF0cl9yZXFfbGVuIFxcdTAwM2NcXG4rXFx0XFx0ICAgIE5GQ19BVFJfUkVRX0dUX09GRlNFVClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdG5kZXYtXFx1MDAzZXJlbW90ZV9nYl9sZW4gPSBtaW5fdChfX3U4LFxcbiBcXHRcXHRcXHQobnRmLVxcdTAwM2VhY3RpdmF0aW9uX3BhcmFtcy5saXN0ZW5fbmZjX2RlcC5hdHJfcmVxX2xlblxcbiBcXHRcXHRcXHRcXHRcXHRcXHQtIE5GQ19BVFJfUkVRX0dUX09GRlNFVCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE3OjAwOjI2LjA0NDYwNDEyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg5NzI3NjEwMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX05DSVwiLFxuICAgIFwiTkZDX1ZJUlRVQUxfTkNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmNpX250Zl9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93IGluIE5DSSBub3RpZmljYXRpb24gcGFja2V0IHBhcnNpbmcuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSAoL2Rldi92aXJ0dWFsX25jaSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3MDkyYjk3ZDdhMjkxMTA5YzExMTQyMWYxZjA2ZTUyZmYzOTBmYWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxNzowMDoyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL250Zi5jIGIvbmV0L25mYy9uY2kvbnRmLmNcbmluZGV4IGM5NjUxMmJiODY1MzEuLmUwNTU1YzkwZDY1NzQgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9udGYuY1xuKysrIGIvbmV0L25mYy9uY2kvbnRmLmNcbkBAIC02MzEsNiArNjMxLDkgQEAgc3RhdGljIGludCBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFx0c3dpdGNoIChudGYtXHUwMDNlYWN0aXZhdGlvbl9yZl90ZWNoX2FuZF9tb2RlKSB7XG4gXHRjYXNlIE5DSV9ORkNfQV9QQVNTSVZFX1BPTExfTU9ERTpcbiBcdGNhc2UgTkNJX05GQ19GX1BBU1NJVkVfUE9MTF9NT0RFOlxuK1x0XHRpZiAobnRmLVx1MDAzZWFjdGl2YXRpb25fcGFyYW1zLnBvbGxfbmZjX2RlcC5hdHJfcmVzX2xlbiBcdTAwM2NcbitcdFx0ICAgIE5GQ19BVFJfUkVTX0dUX09GRlNFVClcbitcdFx0XHRicmVhaztcbiBcdFx0bmRldi1cdTAwM2VyZW1vdGVfZ2JfbGVuID0gbWluX3QoX191OCxcbiBcdFx0XHQobnRmLVx1MDAzZWFjdGl2YXRpb25fcGFyYW1zLnBvbGxfbmZjX2RlcC5hdHJfcmVzX2xlblxuIFx0XHRcdFx0XHRcdC0gTkZDX0FUUl9SRVNfR1RfT0ZGU0VUKSxcbkBAIC02NDMsNiArNjQ2LDkgQEAgc3RhdGljIGludCBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFxuIFx0Y2FzZSBOQ0lfTkZDX0FfUEFTU0lWRV9MSVNURU5fTU9ERTpcbiBcdGNhc2UgTkNJX05GQ19GX1BBU1NJVkVfTElTVEVOX01PREU6XG4rXHRcdGlmIChudGYtXHUwMDNlYWN0aXZhdGlvbl9wYXJhbXMubGlzdGVuX25mY19kZXAuYXRyX3JlcV9sZW4gXHUwMDNjXG4rXHRcdCAgICBORkNfQVRSX1JFUV9HVF9PRkZTRVQpXG4rXHRcdFx0YnJlYWs7XG4gXHRcdG5kZXYtXHUwMDNlcmVtb3RlX2diX2xlbiA9IG1pbl90KF9fdTgsXG4gXHRcdFx0KG50Zi1cdTAwM2VhY3RpdmF0aW9uX3BhcmFtcy5saXN0ZW5fbmZjX2RlcC5hdHJfcmVxX2xlblxuIFx0XHRcdFx0XHRcdC0gTkZDX0FUUl9SRVFfR1RfT0ZGU0VUKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE3OjAwOjI2LjA0NDYwNTI0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTU3NzM1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTkZDIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYG5ldC9uZmMvbmNpL250Zi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXkncmUgYWRkaW5nIGJvdW5kcyBjaGVja2luZyBmb3IgYGF0cl9yZXNfbGVuYCBhbmQgYGF0cl9yZXFfbGVuYCwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aG9zZSBvZmZzZXQgc3VidHJhY3Rpb25zLiBQcmV2ZW50aW5nIHVuZGVyZmxvdyBpcyBhbHdheXMgYSB3aW4sIG1ha2VzIHNlbnNlIHRvIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWxseSBtYWxpY2lvdXMgTkZDIG1lc3NhZ2VzLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMsIGhvdyByZWxldmFudCBpcyB0aGlzIGNoYW5nZT8gSXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIGNvbmZpZ3VyYXRpb24/XG5cbk15IG5leHQgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnLiBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgYG50Zi5jYCBhbmQgdGh1cyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGFyZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEl0J3MgYSBxdWljayBsb29rdXAsIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBwb3RlbnRpYWwgaW1wYWN0IGFuZCB0aGUgbGlrZWxpaG9vZCBvZiB0aGlzIGNvZGUgYmVpbmcgYWN0aXZlbHkgdXNlZCBpbiBkZXBsb3llZCBzeXN0ZW1zLiBUaGF0IGRldGVybWluZXMgaG93IG11Y2ggd2VpZ2h0IEkgc2hvdWxkIHB1dCBvbiBhIGZpeCBsaWtlIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNzowMDozMC42NjAzODA1MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNjczOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL25jaS9udGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL25jaS9udGYuYz02MDA9c3RhdGljIHZvaWQgbmNpX3RhcmdldF9hdXRvX2FjdGl2YXRlZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL250Zi5jLTYyMi1cXG5uZXQvbmZjL25jaS9udGYuYzo2MjM6c3RhdGljIGludCBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbm5ldC9uZmMvbmNpL250Zi5jLTYyNC1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250ZiAqbnRmKVxcbi0tXFxubmV0L25mYy9uY2kvbnRmLmM9NjkzPXN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuLS1cXG5uZXQvbmZjL25jaS9udGYuYy04NDktXFx0XFx0aWYgKG50Zi5yZl9pbnRlcmZhY2UgPT0gTkNJX1JGX0lOVEVSRkFDRV9ORkNfREVQKSB7XFxubmV0L25mYy9uY2kvbnRmLmM6ODUwOlxcdFxcdFxcdGVyciA9IG5jaV9zdG9yZV9nZW5lcmFsX2J5dGVzX25mY19kZXAobmRldiwgXFx1MDAyNm50Zik7XFxubmV0L25mYy9uY2kvbnRmLmMtODUxLVxcdFxcdFxcdGlmIChlcnIgIT0gTkNJX1NUQVRVU19PSylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6MzAuNzA3NzU1MDU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyOTQ0Mjk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBvZiBgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcGAqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgbmNpX3N0b3JlX2dlbmVyYWxfYnl0ZXNfbmZjX2RlcGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBsaWtlbHkgb25seSB1c2VkIHdpdGhpbiB0aGlzIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIGxpbWl0cyB0aGUgc2NvcGUgb2Ygd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGl0cyB1c2FnZS4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBOQ0kgKE5GQyBDb250cm9sbGVyIEludGVyZmFjZSkgZGF0YSBmbG93LiBJIGtub3cgaXQncyBjYWxsZWQgZnJvbSBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgLCB3aGljaCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgIGFuZCBzZWUgKml0cyogY2FsbGVycy4gVGhhdCB3aWxsIHNob3cgbWUgdGhlIGhpZ2hlci1sZXZlbCBjb250ZXh0IGluIHdoaWNoIHRoZSBieXRlIHN0b3JhZ2Ugb2NjdXJzIGR1cmluZyBORkMtREVQIGludGVyZmFjZSBhY3RpdmF0aW9uLiBLbm93aW5nIHRoZSBjYWxsIGNoYWluIHdpbGwgaGVscCBtZSBwaW5wb2ludCB0aGUgcHVycG9zZSBvZiB0aGlzIGJ5dGUgc3RvcmFnZSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyAqdGhhdCogZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNzowMDozNC4xMzcxOTk5NDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMjI2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9uY2kvbnRmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvbnRmLmM9NjcxPXN0YXRpYyBpbnQgbmNpX3N0b3JlX2F0c19uZmNfaXNvX2RlcChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL250Zi5jLTY5Mi1cXG5uZXQvbmZjL25jaS9udGYuYzo2OTM6c3RhdGljIGludCBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG5uZXQvbmZjL25jaS9udGYuYy02OTQtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL25jaS9udGYuYz05NzI9dm9pZCBuY2lfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbmNpL250Zi5jLTEwMjAtXFx0Y2FzZSBOQ0lfT1BfUkZfSU5URl9BQ1RJVkFURURfTlRGOlxcbm5ldC9uZmMvbmNpL250Zi5jOjEwMjE6XFx0XFx0aWYgKG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0KG5kZXYsIHNrYikpXFxubmV0L25mYy9uY2kvbnRmLmMtMTAyMi1cXHRcXHRcXHRnb3RvIGVuZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6MzQuMTg1MjI4MzM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMjM0ODAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5GQyBOb3RpZmljYXRpb24gRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBgbmNpX250Zl9wYWNrZXRgIGlzIGNsZWFybHkgd2hlcmUgdGhlIE5GQyBub3RpZmljYXRpb24gYWN0aW9uIGJlZ2lucy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVudHJ5IHBvaW50LiBUaGF0IGxpa2VseSBtZWFucyBjaGVja2luZyB0aGUgYnVpbGQgc3lzdGVtLiBTcGVjaWZpY2FsbHksIGdpdmVuIHRoYXQgdGhpcyBpcyBORkMtcmVsYXRlZCBjb2RlLCBJJ2xsIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L25mYy9uY2kvTWFrZWZpbGVgIGZpbGUuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBub3RpZmljYXRpb24gbWVjaGFuaXNtIGlzIGNvbmZpZ3VyZWQgYW5kIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gSXQncyB0aGUgc3RhbmRhcmQgcHJvY2VkdXJlIGZvciBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZSBidWlsZC10aW1lIHNwZWNpZmljcyBvZiBhbnkga2VybmVsIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE3OjAwOjM3LjEwNzU3OTAxOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg2NjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGYub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL25jaS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL25jaS9NYWtlZmlsZT02PW9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTctXFxubmV0L25mYy9uY2kvTWFrZWZpbGU6ODpuY2ktb2JqcyA6PSBjb3JlLm8gZGF0YS5vIGxpYi5vIG50Zi5vIHJzcC5vIGhjaS5vXFxubmV0L25mYy9uY2kvTWFrZWZpbGUtOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6MzcuMTU2NDUwOTc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0ODI3ODk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBORkMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc3lzdGVtIG5lZWRzIGBDT05GSUdfTkZDX05DSWAuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGlzIHNldHRpbmcuIE15IGZvY3VzIHdpbGwgYmUgb24gYG5ldC9uZmMvS2NvbmZpZ2AgYW5kLCBjcnVjaWFsbHksIGBuZXQvbmZjL25jaS9LY29uZmlnYC4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGRyaXZlcnMgYXJlIGNvbnRpbmdlbnQgdXBvbiBgQ09ORklHX05GQ19OQ0lgIGJlaW5nIGVuYWJsZWQuIEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBvdGhlciBORkMgZnVuY3Rpb25hbGl0aWVzPyBBcmUgdGhlcmUgc3BlY2lmaWMgaGFyZHdhcmUgc3VwcG9ydCBjb25maWd1cmF0aW9ucyB0aWVkIHRvIHRoaXM/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIHNldHRpbmcgZml0cyBpbnRvIHRoZSBicm9hZGVyIE5GQyBlY29zeXN0ZW0gYW5kIHdoYXQgaW1wYWN0IGl0IGhhcyBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBsaWtlbHkgcmVxdWlyZW1lbnRzIGZvciB0aGUgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDE1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6NDAuMTA0NzMzMTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjE5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORkNfTkNJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvbmNpL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9uZmMvbmNpL0tjb25maWc6Mjpjb25maWcgTkZDX05DSVxcbm5ldC9uZmMvbmNpL0tjb25maWctMy1cXHRkZXBlbmRzIG9uIE5GQ1xcbi0tXFxubmV0L25mYy9uY2kvS2NvbmZpZy0xMi1cXG5uZXQvbmZjL25jaS9LY29uZmlnOjEzOmNvbmZpZyBORkNfTkNJX1NQSVxcbm5ldC9uZmMvbmNpL0tjb25maWctMTQtXFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNQSVxcbi0tXFxubmV0L25mYy9uY2kvS2NvbmZpZy0yMy1cXG5uZXQvbmZjL25jaS9LY29uZmlnOjI0OmNvbmZpZyBORkNfTkNJX1VBUlRcXG5uZXQvbmZjL25jaS9LY29uZmlnLTI1LVxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBUVFlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6NDAuMTU0MzU4OTI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDUyODI0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggTkZDIFN0YWNrIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgTkZDX05DSWAgY29tcG9uZW50LCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIGl0cyBkZXBlbmRlbmN5IG9uIHRoZSBiYXNlIGBORkNgIG1vZHVsZS4gTm8gc3VycHJpc2UgdGhlcmU7IHRoYXQncyBnZW5lcmFsbHkgaG93IHRoZXNlIHRoaW5ncyBhcmUgc3RydWN0dXJlZC4gTm93LCB3aGVyZSBkbyBJIHN0YXJ0IHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGF0aW9uc2hpcD8gVGhlIGltbWVkaWF0ZSBwb3J0IG9mIGNhbGwgZm9yIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGlzIGFsd2F5cyBgbmV0L25mYy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZm9ybWFsIGRlY2xhcmF0aW9uIG9mIHRoaXMgcmVsYXRpb25zaGlwIGFuZCBjYW4gdmVyaWZ5IGFueSBwb3RlbnRpYWwgbnVhbmNlcyBvciBjb25kaXRpb25hbCBhc3BlY3RzLiBJdCBpcyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IGBORkNfTkNJYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgTkZDIGZyYW1ld29yay4gTGV0J3MgZ2V0IHRvIHRoZSBLY29uZmlnIGZpbGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNzowMDo0My4zNTk2NDQxOTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDEwMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORkNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvS2NvbmZpZy01LVxcbm5ldC9uZmMvS2NvbmZpZzo2Om1lbnVjb25maWcgTkZDXFxubmV0L25mYy9LY29uZmlnLTctXFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbi0tXFxubmV0L25mYy9LY29uZmlnLTE2LVxcbm5ldC9uZmMvS2NvbmZpZzoxNzpjb25maWcgTkZDX0RJR0lUQUxcXG5uZXQvbmZjL0tjb25maWctMTgtXFx0ZGVwZW5kcyBvbiBORkNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDA6NDMuNDA3NjYwMzk1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTk5OTYzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcyBhbmFseXNpcywgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiBpdCB3ZXJlIG15IG93biBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE5GQyBGdXp6aW5nIFBvc3NpYmlsaXRpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBORkMsIGFuZCBzcGVjaWZpY2FsbHkgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBORkNgIGFuZCBgTkZDX05DSWAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgYXJlIHRoZXJlIGFueSB2aXJ0dWFsIGRyaXZlcnMgSSBjYW4gbGV2ZXJhZ2UgdG8gZnV6eiB0aGUgYE5GQyBOQ0lgIHNpZGUgb2YgdGhpbmdzPyBUaGF0J3MgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBzZWUgaWYgSSBjYW4gc2ltdWxhdGUgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uIHdpdGhvdXQgbmVlZGluZyBhY3R1YWwgcGh5c2ljYWwgZGV2aWNlcy5cblxuTm93LCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSwgZG9lcyBzeXprYWxsZXIgYXBwcm9hY2ggTkZDIGZ1enppbmcgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBuZXRsaW5rIHNvY2tldHMgb3IgcGVyaGFwcyBldmVuIHVzaW5nIHZpcnR1YWwgZGV2aWNlcz8gSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzZXR1cC5cblxuQWgsIHdhaXQgYSBzZWNvbmQsIGxldCdzIGxvb2sgYXQgYG5jaV9udGZfcGFja2V0YCBmdW5jdGlvbi4gVGhpcyBzZWVtcyBpbXBvcnRhbnQsIGFzIGl0J3MgZGlyZWN0bHkgcmVsYXRlZCB0byByZWNlaXZpbmcgcGFja2V0cyBmcm9tIHRoZSBkZXZpY2UuIFRoYXQncyBhIGtleSBpbnRlcmFjdGlvbiBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyIC0gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc3RhY2ssIHRvIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBgbmNpX250Zl9wYWNrZXRgIGZ1bmN0aW9uLiBUaGF0IHdpbGwgdGVsbCBtZSB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBtYXkgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNzowMDo0Ny43Mjc2NTk1MzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDAwNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5jaV9udGZfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvbmNpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL25jaS9jb3JlLmM9MTU1OT1zdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTU4Mi1cXHRcXHRjYXNlIE5DSV9NVF9OVEZfUEtUOlxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxNTgzOlxcdFxcdFxcdG5jaV9udGZfcGFja2V0KG5kZXYsIHNrYik7XFxubmV0L25mYy9uY2kvY29yZS5jLTE1ODQtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL25jaS9udGYuYz05NDg9c3RhdGljIGludCBuY2lfbmZjZWVfZGlzY292ZXJfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL250Zi5jLTk3MS1cXG5uZXQvbmZjL25jaS9udGYuYzo5NzI6dm9pZCBuY2lfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbmZjL25jaS9udGYuYy05NzMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNzowMDo0Ny43Nzc2NjY0M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM0MjA1ODk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5DSSBQYWNrZXQgSW5qZWN0aW9uKipcblxuT2theSwgc28gYG5jaV9yeF93b3JrYCBpcyBjbGVhcmx5IHRoZSBmdW5jdGlvbiBwcm9jZXNzaW5nIHJlY2VpdmVkIHBhY2tldHMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgKmhvdyogYXJlIHRoZXNlIHBhY2tldHMgZXZlbiBnZXR0aW5nIGluamVjdGVkIGludG8gdGhlIHN5c3RlbSBpbiB0aGUgZmlyc3QgcGxhY2U/IElzIFN5emthbGxlciBsZXZlcmFnaW5nIGEgc3RhbmRhcmQgTkNJIGRldmljZSwgYWxiZWl0IHBlcmhhcHMgYSB2aXJ0dWFsIG9uZT8gT3IgYXJlIHRoZXkgZW1wbG95aW5nIHNvbWUgbW9yZSBlc290ZXJpYyBpbmplY3Rpb24gbWVjaGFuaXNtP1xuXG5UbyBmaWd1cmUgdGhpcyBvdXQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyB2aXJ0dWFsIE5DSSBkZXZpY2UgY29kZS4gSSdtIGdvaW5nIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuY2AgZmlsZSDigJMgb3Igc29tZXRoaW5nIHNpbWlsYXJseSBuYW1lZCwgaWYgdGhhdCdzIG5vdCBxdWl0ZSByaWdodC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSB1bmRlcmx5aW5nIGluamVjdGlvbiBtZXRob2QuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IGFuZCByZXZlYWwgdGhlIGxpa2VseSBpbmplY3Rpb24gbWV0aG9kLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUgZGV2ZWxvcGVycyBoYXZlIGltcGxlbWVudGVkIGEgdmlydHVhbCBkZXZpY2UgdG8gZG8gdGhlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNzowMToyOS4xMTk3Mjk5MjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjI0MTk3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydHVhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvS2NvbmZpZz0zMT1jb25maWcgTkZDX1NJTVxcbi0tXFxuZHJpdmVycy9uZmMvS2NvbmZpZy0zNC1cXHRoZWxwXFxuZHJpdmVycy9uZmMvS2NvbmZpZzozNTpcXHQgIFRoaXMgZHJpdmVyIGRlY2xhcmVzIHR3byB2aXJ0dWFsIE5GQyBkZXZpY2VzIHN1cHBvcnRpbmcgTkZDLURFUFxcbmRyaXZlcnMvbmZjL0tjb25maWctMzYtXFx0ICBwcm90b2NvbC4gQW4gTExDUCBjb25uZWN0aW9uIGNhbiBiZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZW0gYW5kXFxuLS1cXG5kcml2ZXJzL25mYy9LY29uZmlnPTUyPWNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWctNTUtXFx0aGVscFxcbmRyaXZlcnMvbmZjL0tjb25maWc6NTY6XFx0ICBOQ0kgdmlydHVhbCBkZXZpY2Ugc2ltdWxhdGVzIGEgTkNJIGRldmljZSB0byB0aGUgdXNlci5cXG5kcml2ZXJzL25mYy9LY29uZmlnLTU3LVxcdCAgSXQgY2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIE5DSSBtb2R1bGUgYW5kIGFwcGxpY2F0aW9ucy5cXG5kcml2ZXJzL25mYy9LY29uZmlnOjU4OlxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB2aXJ0dWFsIE5DSSBkZXZpY2UgYW5kXFxuZHJpdmVycy9uZmMvS2NvbmZpZy01OS1cXHQgIG1vZHVsZS5cXG4tLVxcbmRyaXZlcnMvbmZjL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19ORkNfU1Q5NUhGKVxcdCs9IHN0OTVoZi9cXG5kcml2ZXJzL25mYy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJKVxcdCs9IHZpcnR1YWxfbmNpZGV2Lm9cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjMtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoyNDpzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2IHtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTI1LVxcdHN0cnVjdCBuY2lfZGV2ICpuZGV2O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zMS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjMyOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTMzLXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjM0OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0zNS1cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMzktXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo0MDpzdGF0aWMgaW50IHZpcnR1YWxfbmNpX2Nsb3NlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNDEte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6NDI6XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTQzLVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01Mi1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjUzOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lfc2VuZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTU0LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjU1OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy01Ni1cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtNzUtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3NjpzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgdmlydHVhbF9uY2lfb3BzID0ge1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzc6XFx0Lm9wZW4gPSB2aXJ0dWFsX25jaV9vcGVuLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6Nzg6XFx0LmNsb3NlID0gdmlydHVhbF9uY2lfY2xvc2UsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzo3OTpcXHQuc2VuZCA9IHZpcnR1YWxfbmNpX3NlbmRcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgwLX07XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04MS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjgyOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04My1cXHRcXHRcXHRcXHQgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTg0LXtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjg1OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy04Ni1cXHRzaXplX3QgYWN0dWFsX2xlbjtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTEyLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTEzOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTYte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTE3OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTgtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTMyLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTMzOnN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNC17XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzUtXFx0aW50IHJldCA9IDA7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMzY6XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldjtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNy1cXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTQwLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTQxOlxcdHZkZXYtXFx1MDAzZW5kZXYgPSBuY2lfYWxsb2NhdGVfZGV2aWNlKFxcdTAwMjZ2aXJ0dWFsX25jaV9vcHMsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNDItXFx0XFx0VklSVFVBTF9ORkNfUFJPVE9DT0xTLCAwLCAwKTtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTYzLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTY0OnN0YXRpYyBpbnQgdmlydHVhbF9uY2lkZXZfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjUte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTY2OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjctXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3NS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3NjpzdGF0aWMgbG9uZyB2aXJ0dWFsX25jaWRldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3Ny1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNzgte1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTc5OlxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xODAtXFx0Y29uc3Qgc3RydWN0IG5mY19kZXYgKm5mY19kZXYgPSB2ZGV2LVxcdTAwM2VuZGV2LVxcdTAwM2VuZmNfZGV2O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xOTEtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlydHVhbF9uY2lkZXZfZm9wcyA9IHtcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5My1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NDpcXHQucmVhZCA9IHZpcnR1YWxfbmNpZGV2X3JlYWQsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTU6XFx0LndyaXRlID0gdmlydHVhbF9uY2lkZXZfd3JpdGUsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTY6XFx0Lm9wZW4gPSB2aXJ0dWFsX25jaWRldl9vcGVuLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk3OlxcdC5yZWxlYXNlID0gdmlydHVhbF9uY2lkZXZfY2xvc2UsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTg6XFx0LnVubG9ja2VkX2lvY3RsID0gdmlydHVhbF9uY2lkZXZfaW9jdGxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5OS19O1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz0yMDE9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXYgPSB7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMDItXFx0Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjAzOlxcdC5uYW1lID0gXFxcInZpcnR1YWxfbmNpXFxcIixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwNDpcXHQuZm9wcyA9IFxcdTAwMjZ2aXJ0dWFsX25jaWRldl9mb3BzLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjA1LVxcdC5tb2RlID0gMDYwMCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6MzAuOTQyMTU0NTc2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyOTk5MTI0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgVmlydHVhbCBOQ0kgRGV2aWNlKipcblxuT2theSwgdGhpcyBpcyBwcm9taXNpbmchIFRoZSBgZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuY2AgZmlsZSBjcmVhdGVzIGEgYC9kZXYvdmlydHVhbF9uY2lgIGRldmljZS4gIFRoYXQncyBleGFjdGx5IHdoYXQgSSB3YXMgaG9waW5nIGZvciDigJMgYSBkaXJlY3QsIHVzZXJzcGFjZS1hY2Nlc3NpYmxlIGVudHJ5IHBvaW50IGludG8gdGhlIE5DSSBzdWJzeXN0ZW0sIG1ha2luZyBpdCBwZXJmZWN0IGZvciBmdXp6aW5nLiAgSSBjYW4gaW5qZWN0IHBhY2tldHMgZGlyZWN0bHkhICBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlIGBORkNgLCBgTkZDX05DSWAsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYC4gIEdvb2QsIGdvb2QuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYG5jaV9zdG9yZV9nZW5lcmFsX2J5dGVzX25mY19kZXBgLiBJIHJlbWVtYmVyIHRoYXQgZnVuY3Rpb24gYmVpbmcgYSBwb3RlbnRpYWwgdGFyZ2V0LiAgSXQncyBjYWxsZWQgZnJvbSBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgLCB3aGljaCBpdHNlbGYgaXMgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gdHJpZ2dlci4gQnV0IHdhaXTigKYgaXNuJ3QgYG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0YCBzdGF0aWM/ICBZZXMsIGl0IGlzLiBUaGF0J3MgYSBiaXQgYW5ub3lpbmc7IHRoZSBmdW5jdGlvbiBpcyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgaXRzIHNvdXJjZSBmaWxlLiBTbywgSSB3aWxsIG5lZWQgdG8gZm9jdXMgb24gYG5jaV9udGZfcGFja2V0YC4gSXQgaXMgdGhlIGNhbGwgcG9pbnQgZm9yIHRoZSBmb3JtZXIgYW5kIG5vdCBzdGF0aWMuXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5GQ19WSVJUVUFMX05DSWAgYWdhaW4ganVzdCB0byBiZSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6MzYuMjQyMDY5ODgyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMyMDcyNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GQ19WSVJUVUFMX05DSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXFxuLS1cXG5kcml2ZXJzL25mYy9LY29uZmlnLTUxLVxcbmRyaXZlcnMvbmZjL0tjb25maWc6NTI6Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxcbmRyaXZlcnMvbmZjL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6MzYuNzM1Mjg3NzYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTU0NjU4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOlxuXG4qKkludmVzdGlnYXRpbmcgTkZDIFZpcnR1YWxpemF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgTkZDX1ZJUlRVQUxfTkNJYCBjb25maWd1cmF0aW9uLiBJdCdzIGdvdCBtZSB3b25kZXJpbmcg4oCTIGlzIHRoaXMgdGhpbmcgdHJ1bHkgaW5kZXBlbmRlbnQsIG9yIGlzIGl0IGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGJhc2UgYE5GQ19OQ0lgIGNvbmZpZ3VyYXRpb24/IFRoZSBhcmNoaXRlY3R1cmUgZGlhZ3JhbXMgSSd2ZSBiZWVuIHBvdXJpbmcgb3ZlciBzZWVtIHRvIGltcGx5IHNvbWUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24sIGJ1dCBhYnN0cmFjdGlvbiBkb2Vzbid0IGFsd2F5cyBlcXVhbCBjb21wbGV0ZSBzZXBhcmF0aW9uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBkZXBlbmRlbmN5IHRyZWUgaGVyZS5cblxuTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGEgY3J1Y2lhbCBwb2ludCBmb3Igc2V2ZXJhbCByZWFzb25zLiBJZiBgTkZDX1ZJUlRVQUxfTkNJYCByZWxpZXMgKmRpcmVjdGx5KiBvbiBgTkZDX05DSWAsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50IGZvciBkZXNpZ24gY29uc2lkZXJhdGlvbnMuIEl0IGNvdWxkIGxpbWl0IG91ciBtb2R1bGFyaXR5IGFuZCBwb3RlbnRpYWxseSBjcmVhdGUgYSB0aWdodCBjb3VwbGluZyB0aGF0IHdpbGwgbWFrZSBmdXR1cmUgdXBkYXRlcyBvciBwb3J0aW5nIHRvIGRpZmZlcmVudCBoYXJkd2FyZSBwcm9maWxlcyBmYXIgbW9yZSBkaWZmaWN1bHQuIEl0IHdvdWxkIGJlIGEgbmlnaHRtYXJlIHRvIGRlYnVnIGFuZCBtYWludGFpbiBsb25nIHRlcm0uIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBgTkZDX1ZJUlRVQUxfTkNJYCBpcyBhIGdlbnVpbmUgbGF5ZXIgb2YgdmlydHVhbGl6YXRpb24sIHRoZW4gd2UgbWlnaHQgaGF2ZSBzb21lIHJlYWwgZmxleGliaWxpdHkgaW4gaG93IHdlIGltcGxlbWVudCBhbmQgaW50ZWdyYXRlIGl0IHdpdGggZGlmZmVyZW50IE5GQyBjb250cm9sbGVycy5cblxuU28sIHRoZSBmdW5kYW1lbnRhbCBxdWVzdGlvbiBJIGhhdmUgdG8gYXNrIG15c2VsZiBpczogY2FuIEkgdHJlYXQgYE5GQ19WSVJUVUFMX05DSWAgYXMgYSB0cnVseSB2aXJ0dWFsLCBzZWxmLWNvbnRhaW5lZCBjb21wb25lbnQsIG9yIGRvIEkgbmVlZCB0byBiYWtlIGluIGFzc3VtcHRpb25zIGFib3V0IGBORkNfTkNJYCBkdXJpbmcgbXkgZGVzaWduIHByb2Nlc3M/IFRoaXMgaXMgZ29pbmcgdG8gaW5mbHVlbmNlIG15IGFzc2Vzc21lbnQgb2YgdGhlIGFyY2hpdGVjdHVyYWwgaW1wYWN0cyB0aGF0IHRoaXMgaGFzIG9uIHRoZSBvdmVyYWxsIHN5c3RlbS4gVGltZSB0byBkaWcgZGVlcGVyIGFuZCBsb29rIGF0IHRoZSBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4gSSdsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBjYWxscywgYW5kIGVycm9yIGhhbmRsaW5nIHRvIGNvbWUgdG8gYSBmaXJtIGNvbmNsdXNpb24uIFRoaXMgaXMgdGhlIGJlZHJvY2sgdG8gc29saWRpZnlpbmcgb3VyIGFwcHJvYWNoIHRvIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE3OjAxOjQwLjg1MDc1NjM0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA2MDA1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmZjL0tjb25maWc9Nj1tZW51IFxcXCJOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlc1xcXCJcXG5kcml2ZXJzL25mYy9LY29uZmlnOjc6XFx0ZGVwZW5kcyBvbiBORkNcXG5kcml2ZXJzL25mYy9LY29uZmlnLTgtXFxuZHJpdmVycy9uZmMvS2NvbmZpZz05PWNvbmZpZyBORkNfVFJGNzk3MEFcXG5kcml2ZXJzL25mYy9LY29uZmlnLTEwLVxcdHRyaXN0YXRlIFxcXCJUZXhhcyBJbnN0cnVtZW50cyBUUkY3OTcwYSBORkMgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmZjL0tjb25maWc6MTE6XFx0ZGVwZW5kcyBvbiBTUEkgXFx1MDAyNlxcdTAwMjYgTkZDX0RJR0lUQUwgXFx1MDAyNlxcdTAwMjYgR1BJT0xJQlxcbmRyaXZlcnMvbmZjL0tjb25maWctMTItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZmMvS2NvbmZpZz0yMT1jb25maWcgTkZDX01FSV9QSFlcXG5kcml2ZXJzL25mYy9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJNRUkgYnVzIE5GQyBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25mYy9LY29uZmlnOjIzOlxcdGRlcGVuZHMgb24gSU5URUxfTUVJIFxcdTAwMjZcXHUwMDI2IE5GQ19IQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTI0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWc9MzE9Y29uZmlnIE5GQ19TSU1cXG5kcml2ZXJzL25mYy9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJORkMgaGFyZHdhcmUgc2ltdWxhdG9yIGRyaXZlclxcXCJcXG5kcml2ZXJzL25mYy9LY29uZmlnOjMzOlxcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcXG5kcml2ZXJzL25mYy9LY29uZmlnLTM0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXFxuZHJpdmVycy9uZmMvS2NvbmZpZy00My1cXHR0cmlzdGF0ZSBcXFwiU29ueSBORkMgUG9ydC0xMDAgU2VyaWVzIFVTQiBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25mYy9LY29uZmlnOjQ0OlxcdGRlcGVuZHMgb24gVVNCXFxuZHJpdmVycy9uZmMvS2NvbmZpZzo0NTpcXHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXFxuZHJpdmVycy9uZmMvS2NvbmZpZy00Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25mYy9LY29uZmlnPTUyPWNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZmMvS2NvbmZpZzo1NDpcXHRkZXBlbmRzIG9uIE5GQ19OQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTU1LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6NDAuOTAxMzYzNjUxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODE1MDYyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5GQyBWaXJ0dWFsIE5DSSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBORkMgVmlydHVhbCBOQ0kgdGhpbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBORkNfVklSVFVBTF9OQ0lgIG9idmlvdXNseSBkZXBlbmRzIG9uIGBORkNfTkNJYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlcmVmb3JlLCB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbmFibGUgd291bGQgYmUgYE5GQ2AsIGBORkNfTkNJYCwgYW5kIHRoZW4sIG9mIGNvdXJzZSwgYE5GQ19WSVJUVUFMX05DSWAgaXRzZWxmLiBUaGF0IHNlZW1zIGxvZ2ljYWwuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLiBJIHdhbnQgdG8gY2hlY2sgb3V0IGhvdyB0aGVzZSBpbmNvbWluZyBwYWNrZXRzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXQgYG5jaV9udGZfcGFja2V0YCBhbmQgYG5jaV9yeF93b3JrYC4gRnJvbSBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcsIGBuY2lfbnRmX3BhY2tldGAgYXBwZWFycyB0byBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgTm90aWZpY2F0aW9uIChOVEYpIHBhY2tldHMuIEFuZCwgYG5jaV9yeF93b3JrYCBpcyB0aGUgd29ya3F1ZXVlIGZ1bmN0aW9uIHdoZXJlIHRoZSByZWFsIHByb2Nlc3Npbmcgb2YgdGhlc2UgcGFja2V0cyB0YWtlcyBwbGFjZS4gR2l2ZW4gdGhhdCwgYG5jaV9udGZfcGFja2V0YCB3aWxsIGJlIHRoZSBmdW5jdGlvbiB0byBmb2N1cyBvbiBmb3Igbm93LlxuXG5MZXQncyBxdWlja2x5IHNjYW4gdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBub3RoaW5nIGVsc2UgY3J1Y2lhbC4gYG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0YCBpcyBzdGF0aWMuIFNpbmNlIHRoYXQncyBub3QgZXhwb3J0ZWQsIGl0J3Mgbm90IGEgZnVuY3Rpb24gSSBuZWVkIHRvIGZvY3VzIG9uLiBTaW5jZSBgbmNpX250Zl9wYWNrZXRgIGlzIG5vdCBzdGF0aWMsIGl0IG11c3QgYmUgZXhwb3J0ZWQuIFRoaXMgaXMgdGhlIG1haW4gb25lIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDMwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE3OjAxOjQ1LjU4Mjg3MjU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg5NDI2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpX250Zl9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9uY2kvbnRmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvbnRmLmM9OTQ4PXN0YXRpYyBpbnQgbmNpX25mY2VlX2Rpc2NvdmVyX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuLS1cXG5uZXQvbmZjL25jaS9udGYuYy05NzEtXFxubmV0L25mYy9uY2kvbnRmLmM6OTcyOnZvaWQgbmNpX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L25mYy9uY2kvbnRmLmMtOTczLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6NDYuMDcxODIxNDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExNDA0Mjc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIGNvbnNpZGVyYXRpb25zOlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBBdHRyaWJ1dGVzIGluIHRoZSBOQ0kgU3Vic3lzdGVtKipcblxuQWxyaWdodCwgc28gYG5jaV9udGZfcGFja2V0YCBpcyBjb25maXJtZWQgYXMgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBnb29kIHRvIGtub3csIGNvbmZpcm1pbmcgaXRzIHBvdGVudGlhbCB2aXNpYmlsaXR5IGFuZCByZXVzYWJpbGl0eSBiZXlvbmQgYSBzdHJpY3RseSBkZWZpbmVkIHNjb3BlIHdpdGhpbiB0aGUgaW1tZWRpYXRlIGNvbXBpbGF0aW9uIHVuaXQuIE5vdywgZ2l2ZW4gdGhhdCwgbXkgbmV4dCBsaW5lIG9mIGlucXVpcnkgaGFzIHRvIGJlIGFib3V0IGBuY2lfcnhfd29ya2AuIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHZpc2liaWxpdHkgYXMgd2VsbC4gSXMgaXQgZGVjbGFyZWQgYXMgc3RhdGljPyBLbm93aW5nIGl0cyBhdHRyaWJ1dGUgd2lsbCBkZXRlcm1pbmUgYSBsb3QgYWJvdXQgaG93IGl04oCZcyBiZWluZyB1c2VkLCBhbmQgaWYgaXQncyBpbnRlcmFjdGluZyB3aXRoIG90aGVyIG1vZHVsZXMuIFRoaXMgaW5mb3JtYXRpb24gZGljdGF0ZXMgaG93IEkgc2hvdWxkIHByb2NlZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaW1wYWN0IHdpdGhpbiB0aGUgTkNJIGRhdGEgZmxvdyBhbmQgaWYgdGhlcmUncyBhbnkgbmVlZCBmb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6NDkuMTg1ODY3MTQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk4NzEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY2lfcnhfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL25jaS9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvY29yZS5jPTM5PXN0YXRpYyB2b2lkIG5jaV9jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbm5ldC9uZmMvbmNpL2NvcmUuYzo0MDpzdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy00MS1zdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTEyNTE9aW50IG5jaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTI2Ni1cXG5uZXQvbmZjL25jaS9jb3JlLmM6MTI2NzpcXHRJTklUX1dPUksoXFx1MDAyNm5kZXYtXFx1MDAzZXJ4X3dvcmssIG5jaV9yeF93b3JrKTtcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTI2OC1cXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFxcXCIlc19uY2lfcnhfd3FcXFwiLCBkZXZfbmFtZShkZXYpKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz0xNTIwPXN0YXRpYyB2b2lkIG5jaV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTU4LVxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxNTU5OnN0YXRpYyB2b2lkIG5jaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTU2MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE3OjAxOjQ5LjIzMzg1ODcxOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDQ1NDc2MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5DSSBOb3RpZmljYXRpb24gUGFja2V0IEZpeCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgdGhlIGZvY3VzIGhlcmUgaGFzIHRvIGJlIG9uIGBuY2lfbnRmX3BhY2tldGAuIEl0J3MgY2xlYXIgdGhhdCBgbmNpX3J4X3dvcmtgIGlzIHN0YXRpYywgd2hpY2ggc3RlZXJzIG1lIHRvd2FyZCB0aGUgcGFja2V0IGl0c2VsZiBhcyB0aGUga2V5LiBXZSdyZSBkZWFsaW5nIHdpdGggYSBub3RpZmljYXRpb24gcGFja2V0LCBzbyBhbnkgaXNzdWVzIGhlcmUgY291bGQgYmUgaW1wYWN0ZnVsLlxuXG5MZXQncyBjaGVjayB0aGUgY29uZmlnIGRlcGVuZGVuY2llcy4gV2UgbmVlZCBgTkZDYCwgYE5GQ19OQ0lgLCBhbmQgYE5GQ19WSVJUVUFMX05DSWAuIE5vIG90aGVyIGdsYXJpbmcgZGVwZW5kZW5jaWVzIHNlZW0gdG8gYXBwbHkgaGVyZS4gYE5GQ2AgbmVlZHMgZWl0aGVyIGBSRktJTExgIG9yIHRoZSBpbnZlcnNlLCBgIVJGS0lMTGAuIGBORkNfTkNJYCBkZXBlbmRzIG9uIGBORkNgLCBhbmQgYE5GQ19WSVJUVUFMX05DSWAgZGVwZW5kcyBvbiBgTkZDX05DSWAsIGFzIGV4cGVjdGVkLiBTbywgd2UncmUgdGFyZ2V0aW5nIHRob3NlIHRocmVlIGNvbmZpZ3M6IGBORkNgLCBgTkZDX05DSWAsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGBuY2lfc3RvcmVfZ2VuZXJhbF9ieXRlc19uZmNfZGVwYCwgd2hlcmUgdGhleSd2ZSBhZGRlZCBib3VuZHMgY2hlY2tpbmcgdG8gZml4IGFuIHVuZGVyZmxvdyBpc3N1ZS4gRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhpcyBjbGVhcmx5IHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MsIGVpdGhlciBhIHJlYWQgb3Igd3JpdGUsIG9yIHBvdGVudGlhbGx5IGFuIGludGVnZXIgdW5kZXJmbG93LiBHaXZlbiB0aGlzIGlzIE5DSSwgYW5kIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBgL2Rldi92aXJ0dWFsX25jaWAsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgdmlydHVhbCBOQ0kgZGV2aWNlIGlzIGEgY29tbW9uIGF0dGFjayBzdXJmYWNlLlxuXG5UaGVyZWZvcmUsIG15IHN1bW1hcnkgaXM6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBgdHJ1ZWBcbiogICAqKkZvY3VzU3ltYm9sczoqKiBgW1wibmNpX250Zl9wYWNrZXRcIl1gXG4qICAgKipFbmFibGVDb25maWdzOioqIGBbXCJORkNcIiwgXCJORkNfTkNJXCIsIFwiTkZDX1ZJUlRVQUxfTkNJXCJdYFxuKiAgICoqUmVhc29uaW5nOioqIFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cgaW4gTkNJIG5vdGlmaWNhdGlvbiBwYWNrZXQgcGFyc2luZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlICgvZGV2L3ZpcnR1YWxfbmNpKS5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwOSwiT3V0cHV0VG9rZW5zIjoxMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTc6MDE6NTUuNjc5MzM4NDQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI4NzIyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX05DSVwiLFxuICAgIFwiTkZDX1ZJUlRVQUxfTkNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmNpX250Zl9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IGludGVnZXIgdW5kZXJmbG93IGluIE5DSSBub3RpZmljYXRpb24gcGFja2V0IHBhcnNpbmcuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRldmljZSAoL2Rldi92aXJ0dWFsX25jaSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfbnRmX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgaW50ZWdlciB1bmRlcmZsb3cgaW4gTkNJIG5vdGlmaWNhdGlvbiBwYWNrZXQgcGFyc2luZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlICgvZGV2L3ZpcnR1YWxfbmNpKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm5zp[1] Phase: Succeeded StartedAt: 2026-07-29 17:02:07 +0000 UTC FinishedAt: 2026-07-29 17:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 17:02:07 +0000 UTC FinishedAt: 2026-07-29 17:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2] Phase: Succeeded StartedAt: 2026-07-29 17:02:07 +0000 UTC FinishedAt: 2026-07-29 21:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:02:07 +0000 UTC FinishedAt: 2026-07-29 21:12:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:02:07 +0000 UTC FinishedAt: 2026-07-29 17:02:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:02:07 +0000 UTC FinishedAt: 2026-07-29 17:02:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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-workflowqm5zp/series-workflowqm5zp-convert-artifact-366579776/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:02:27 +0000 UTC FinishedAt: 2026-07-29 17:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:02:27 +0000 UTC FinishedAt: 2026-07-29 17:34:15 +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:*4a3a8937-da73-4b90-9fa4-31df5a811e6f,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-workflowqm5zp/series-workflowqm5zp-convert-artifact-366579776/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": "ec7c1780-cd6e-4fc4-890e-8a28a399d839", "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-workflowqm5zp/series-workflowqm5zp-build-action-3125573638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:02:27 +0000 UTC FinishedAt: 2026-07-29 17:34:05 +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:*4a3a8937-da73-4b90-9fa4-31df5a811e6f,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-workflowqm5zp/series-workflowqm5zp-convert-artifact-366579776/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": "ec7c1780-cd6e-4fc4-890e-8a28a399d839", "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-workflowqm5zp/series-workflowqm5zp-build-action-3125573638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:34:15 +0000 UTC FinishedAt: 2026-07-29 17:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:34:15 +0000 UTC FinishedAt: 2026-07-29 17:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:34:15 +0000 UTC FinishedAt: 2026-07-29 17:34:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:34:15 +0000 UTC FinishedAt: 2026-07-29 17:34:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-workflowqm5zp/series-workflowqm5zp-convert-artifact-3474679783/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:34:25 +0000 UTC FinishedAt: 2026-07-29 17:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:34:25 +0000 UTC FinishedAt: 2026-07-29 17:36:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ec7c1780-cd6e-4fc4-890e-8a28a399d839,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-workflowqm5zp/series-workflowqm5zp-build-action-3125573638/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-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:36:34 +0000 UTC FinishedAt: 2026-07-29 17:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:36:34 +0000 UTC FinishedAt: 2026-07-29 17:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:36:34 +0000 UTC FinishedAt: 2026-07-29 18:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:36:34 +0000 UTC FinishedAt: 2026-07-29 18:01:02 +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:*4a3a8937-da73-4b90-9fa4-31df5a811e6f,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-workflowqm5zp/series-workflowqm5zp-convert-artifact-3474679783/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": "c565f2a7-f8e8-4df0-8ede-ac874f4ee890", "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-workflowqm5zp/series-workflowqm5zp-build-action-3051888491/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 17:36:34 +0000 UTC FinishedAt: 2026-07-29 18:00:52 +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:*4a3a8937-da73-4b90-9fa4-31df5a811e6f,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-workflowqm5zp/series-workflowqm5zp-convert-artifact-3474679783/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": "c565f2a7-f8e8-4df0-8ede-ac874f4ee890", "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-workflowqm5zp/series-workflowqm5zp-build-action-3051888491/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:01:02 +0000 UTC FinishedAt: 2026-07-29 18:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:01:02 +0000 UTC FinishedAt: 2026-07-29 18:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:01:02 +0000 UTC FinishedAt: 2026-07-29 18:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:01:02 +0000 UTC FinishedAt: 2026-07-29 18:03:00 +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:*c565f2a7-f8e8-4df0-8ede-ac874f4ee890,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-workflowqm5zp/series-workflowqm5zp-build-action-3051888491/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-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:03:09 +0000 UTC FinishedAt: 2026-07-29 21:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:03:09 +0000 UTC FinishedAt: 2026-07-29 21:12:15 +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":["nci_ntf_packet"],"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:*ec7c1780-cd6e-4fc4-890e-8a28a399d839,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c565f2a7-f8e8-4df0-8ede-ac874f4ee890,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-workflowqm5zp/series-workflowqm5zp-build-action-3125573638/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-workflowqm5zp/series-workflowqm5zp-build-action-3051888491/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:03:09 +0000 UTC FinishedAt: 2026-07-29 18:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:03:09 +0000 UTC FinishedAt: 2026-07-29 18:03:14 +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":["nci_ntf_packet"],"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-workflowqm5zp/series-workflowqm5zp-convert-artifact-3838688576/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:03:09 +0000 UTC FinishedAt: 2026-07-29 18:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:03:09 +0000 UTC FinishedAt: 2026-07-29 18:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:03:09 +0000 UTC FinishedAt: 2026-07-29 18:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:03:19 +0000 UTC FinishedAt: 2026-07-29 21:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqm5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"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":["nci_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb54b49e9d522f54dc9c0fe10ba40fbc56041c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"a93e0d9c-fe26-47a5-a945-3d16cd7d1569","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-07-29 18:03:19 +0000 UTC FinishedAt: 2026-07-29 21:12:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ec7c1780-cd6e-4fc4-890e-8a28a399d839,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c565f2a7-f8e8-4df0-8ede-ac874f4ee890,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-workflowqm5zp/series-workflowqm5zp-build-action-3125573638/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-workflowqm5zp/series-workflowqm5zp-build-action-3051888491/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-workflowqm5zp/series-workflowqm5zp-convert-artifact-3838688576/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,}