Name: series-workflowr76bt Phase: Succeeded StartedAt: 2026-07-31 12:26:04 +0000 UTC FinishedAt: 2026-07-31 14:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[0] Phase: Succeeded StartedAt: 2026-07-31 12:26:04 +0000 UTC FinishedAt: 2026-07-31 12:29:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 12:26:04 +0000 UTC FinishedAt: 2026-07-31 12:29:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CXACRU", "USB_ATM", "ATM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CXACRU", "USB_ATM", "ATM" ], "series_id": "9978f3e2-e7f4-42a1-92f8-b5c6a7148af7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cxacru_heavy_init", "cxacru_atm_start", "cxacru_bind", "cxacru_usb_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DWEFDUlUmIzM0OywKICAgICYjMzQ7VVNCX0FUTSYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjeGFjcnVfaGVhdnlfaW5pdCYjMzQ7LAogICAgJiMzNDtjeGFjcnVfYXRtX3N0YXJ0JiMzNDssCiAgICAmIzM0O2N4YWNydV9iaW5kJiMzNDssCiAgICAmIzM0O2N4YWNydV91c2JfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGN4YWNydSBVU0IgQVRNIGRyaXZlciB0byBraWxsIHRoZSByZWNlaXZlIFVSQiBpZiB0aGUgY29tbWFuZCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgVVNCIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMyY2Y5MTk4N2YwN2NjN2E4YmJlZTA0OWNkYjQxZmY4YmQ5OGQxZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAxMjoyNzoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcbmluZGV4IGYxOTAwYzU2N2JhNDEuLjQyOWFjMjBhODk5OWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuQEAgLTcwMCw2ICYjNDM7NzAwLDggQEAgc3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcbiBcdHJldCA9IG9mZmQ7XG4gXHR1c2JfZGJnKGluc3RhbmNlLVx1MDAzZXVzYmF0bSwgXCYjMzQ7Y20gJSN4XFxuXCYjMzQ7LCBjbSk7XG4gZmFpbDpcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0dXNiX2tpbGxfdXJiKGluc3RhbmNlLVx1MDAzZXJjdl91cmIpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluc3RhbmNlLVx1MDAzZWNtX3NlcmlhbGl6ZSk7XG4gZXJyOlxuIFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0NYQUNSVSYjMzQ7LAogICAgJiMzNDtVU0JfQVRNJiMzNDssCiAgICAmIzM0O0FUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N4YWNydV9oZWF2eV9pbml0JiMzNDssCiAgICAmIzM0O2N4YWNydV9hdG1fc3RhcnQmIzM0OywKICAgICYjMzQ7Y3hhY3J1X2JpbmQmIzM0OywKICAgICYjMzQ7Y3hhY3J1X3VzYl9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY3hhY3J1IFVTQiBBVE0gZHJpdmVyIHRvIGtpbGwgdGhlIHJlY2VpdmUgVVJCIGlmIHRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFVTQiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzJjZjkxOTg3ZjA3Y2M3YThiYmVlMDQ5Y2RiNDFmZjhiZDk4ZDFlOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDEyOjI3OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jIGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCmluZGV4IGYxOTAwYzU2N2JhNDEuLjQyOWFjMjBhODk5OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKQEAgLTcwMCw2ICYjNDM7NzAwLDggQEAgc3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSwKIAlyZXQgPSBvZmZkOwogCXVzYl9kYmcoaW5zdGFuY2UtJmd0O3VzYmF0bSwgJiMzNDtjbSAlI3hcbiYjMzQ7LCBjbSk7CiBmYWlsOgomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXVzYl9raWxsX3VyYihpbnN0YW5jZS0mZ3Q7cmN2X3VyYik7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7aW5zdGFuY2UtJmd0O2NtX3NlcmlhbGl6ZSk7CiBlcnI6CiAJcmV0dXJuIHJldDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgYSBVU0ItQVRNIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY2AuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgYWRkaXRpb24gb2YgYHVzYl9raWxsX3VyYihpbnN0YW5jZS0mZ3Q7cmN2X3VyYik7YCB3aXRoaW4gdGhlIGBjeGFjcnVfY21gIGZ1bmN0aW9uLCB0cmlnZ2VyZWQgd2hlbiBgcmV0ICZsdDsgMGAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGBjeGFjcnVfY21gIGl0c2VsZiB3aXRoaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSBhbmQgaG93IGl0IGhhbmRsZXMgZXJyb3JzIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGlzIGtpbGwgb3BlcmF0aW9uIG9uIHRoZSByZWNlaXZlIFVSQi4gSXMgdGhpcyBhIGNyaXRpY2FsIGVycm9yIHBhdGg/IElzIHRoaXMgYSBnb29kIHBsYWNlIHRvIGtpbGwgdGhlIFVSQiBvciBzaG91bGQgaXQgYmUgZWFybGllcj8gQW5kIHdoYXQgb3RoZXIgVVJCcyBhcmUgaW4gZmxpZ2h0IHRoYXQgYXJlIG5vdCBraWxsZWQ/IEl0IGFsc28gbWFrZXMgbWUgd29uZGVyIHdoYXQgYGluc3RhbmNlLSZndDtyY3ZfdXJiYCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjeGFjcnVfY20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU5PWVudW0gY3hhY3J1X2Z3X3JlcXVlc3Qge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MC0gKiBmaXJtd2FyZSBpcyBsb2FkZWQgICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzE6ZW51bSBjeGFjcnVfY21fcmVxdWVzdCB7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzItXHRDTV9SRVFVRVNUX1VOREVGSU5FRCA9IDB4ODAsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEwOC0gKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMDk6ZW51bSBjeGFjcnVfY21fZmxhc2gge1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMC1cdENNX0ZMQVNIX1JFQUQgPSAweGExLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTQtLyogcmVwbHkgY29kZXMgdG8gdGhlIGNvbW1hbmRzIGFib3ZlICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTE1OmVudW0gY3hhY3J1X2NtX3N0YXR1cyB7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE2LVx0Q01fU1RBVFVTX1VOREVGSU5FRCxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTcwPXN0cnVjdCBjeGFjcnVfZGF0YSB7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5Mi1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTM6c3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xOTQtXHR1OCAqd2RhdGEsIGludCB3c2l6ZSwgdTggKnJkYXRhLCBpbnQgcnNpemUpO1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0zMzI9c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1Ni1cdGlmICghc3RyY21wKHN0cl9jbWQsIFwmIzM0O3N0b3BcJiMzNDspIHx8ICFzdHJjbXAoc3RyX2NtZCwgXCYjMzQ7cmVzdGFydFwmIzM0OykpIHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNTc6XHRcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVE9QLCBOVUxMLCAwLCBOVUxMLCAwKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTgtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzc2LVx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXCYjMzQ7c3RhcnRcJiMzNDspIHx8ICFzdHJjbXAoc3RyX2NtZCwgXCYjMzQ7cmVzdGFydFwmIzM0OykpIHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNzc6XHRcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzc4LVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTQzNT1zdGF0aWMgc3NpemVfdCBhZHNsX2NvbmZpZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQ4MC1cdFx0XHRkYXRhWzBdID0gY3B1X3RvX2xlMzIobnVtKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo0ODE6XHRcdFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfREFUQV9TRVQsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDgyLVx0XHRcdFx0KHU4ICopIGRhdGEsIDQgJiM0MzsgbnVtICogOCwgTlVMTCwgMCk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU5MD1zdGF0aWMgaW50IGN4YWNydV9zdGFydF93YWl0X3VyYihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBjb21wbGV0aW9uICpkb25lLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy02MDctXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NjA4OnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA5LVx0XHQgICAgIHU4ICp3ZGF0YSwgaW50IHdzaXplLCB1OCAqcmRhdGEsIGludCByc2l6ZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzA5LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcxMDpzdGF0aWMgaW50IGN4YWNydV9jbV9nZXRfYXJyYXkoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MTEtXHRcdFx0ICAgICAgIHUzMiAqZGF0YSwgaW50IHNpemUpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyMy1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MjQ6XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIGNtLCBOVUxMLCAwLCAodTggKikgYnVmLCBidWZsZW4pO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyNS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyNy1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3Mjg6XHQvKiBsZW4gXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxlbiAlIDQgPT0gMCBndWFyYW50ZWVkIGJ5IGN4YWNydV9jbSgpICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI5LVx0bGVuID0gcmV0IC8gNDtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzYwPXN0YXRpYyBpbnQgY3hhY3J1X2NhcmRfc3RhdHVzKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzYxLXtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3NjI6XHRpbnQgcmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX1NUQVRVUywgTlVMTCwgMCwgTlVMTCwgMCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzYzLVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NzE9c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODEtXHQvKiBSZWFkIE1BQyBhZGRyZXNzICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzgyOlx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX01BQ19BRERSRVNTLCBOVUxMLCAwLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4My1cdFx0XHRhdG1fZGV2LVx1MDAzZWVzaSwgc2l6ZW9mKGF0bV9kZXYtXHUwMDNlZXNpKSk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5MC1cdG11dGV4X2xvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc5MTpcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzkyLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9ODIwPXN0YXRpYyB2b2lkIGN4YWNydV9wb2xsX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgyOS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo4MzA6XHRyZXQgPSBjeGFjcnVfY21fZ2V0X2FycmF5KGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfSU5GT19HRVQsIGJ1ZiwgQ1hJTkZfTUFYKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MzEtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTEwMDY9c3RhdGljIGludCBjeGFjcnVfaGVhdnlfaW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwMS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTAyOlx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX1NUQVRVUywgTlVMTCwgMCwgTlVMTCwgMCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwMy1cdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjMwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVVNCIEFUTSBEcml2ZXIgVXBkYXRlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBgdXNiX2tpbGxfdXJiYCBjYWxsIHdpdGhpbiB0aGUgYGN4YWNydV9jbWAgZnVuY3Rpb24uIEludGVyZXN0aW5nLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgVVNCIEFUTSBkcml2ZXIgY29udGV4dC4gVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgY3hhY3J1YC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMuIEZpcnN0LCBJ4oCZbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGN4YWNydWAgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY2hlY2sgaXRzIEtjb25maWcgZW50cnkgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgb3IgcmVzb3VyY2UgY2xlYW51cCB3aXRoaW4gdGhlIFVTQiBjb21tdW5pY2F0aW9uIGZsb3csIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjeGFjcnUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZz0zMj1jb25maWcgVVNCX0NYQUNSVVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTQxLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjQyOlx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3hhY3J1LlxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgVVNCX0NYQUNSVSBLY29uZmlnIEVudHJ5KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGdldCB0aGUgY29tcGxldGUgS2NvbmZpZyBlbnRyeSBmb3IgYFVTQl9DWEFDUlVgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSBuZWVkIHRoZSBmdWxsIGNvbnRleHQuIEkmIzM5O20gdGhpbmtpbmcgSSB3YW50IHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCB2YWx1ZSwgdGhlIGhlbHAgdGV4dCwgYW5kIGFueSBvdGhlciByZWxldmFudCBtZXRhZGF0YSBzdXJyb3VuZGluZyBpdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDt3aHkmIzM0OyBhbmQgJiMzNDt3aGVuJiMzNDsgdGhpcyBvcHRpb24gaXMgcmVsZXZhbnQuCgpJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSwgYmVjYXVzZSBJIGtub3cgdGhhdCBhIHNpbmdsZSBsaW5lIGluIGEgYEtjb25maWdgIGZpbGUgY2FuIGJlIGRlY2VwdGl2ZWx5IHNpbXBsZS4gSSYjMzk7bSBhZnRlciB0aGUgcmVsYXRpb25zaGlwcy4gRG9lcyBpdCBkZXBlbmQgb24gc3BlY2lmaWMgQ1BVIGFyY2hpdGVjdHVyZXM/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvbiBvdGhlciBVU0IgY29uZmlndXJhdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgVVNCIGRyaXZlcnMsIGVzcGVjaWFsbHkgYW55IGxpa2VseSBjb25mbGljdHMgb3IgaW50ZWdyYXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIENYQUNSVSBkcml2ZXIgKG9yIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eSkgaXMgc3RydWN0dXJlZCBpbiB0ZXJtcyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgZmVhdHVyZXMuCgpTbywgdGhlIGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgYFVTQl9DWEFDUlVgLiBPbmx5IHRoZW4gY2FuIEkgdHJ1bHkgYmVnaW4gdG8gYXNzZXNzIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcGVlZHRjaC5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgVVNCX0NYQUNSVVxuICAzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBzdXBwb3J0XCYjMzQ7XG4gIDM0Olx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gQURTTCBVU0IgbW9kZW0gYmFzZWQgb24gdGhlIENvbmV4YW50XG4gIDM3Olx0XHQgIEFjY2Vzc1J1bm5lciBjaGlwc2V0LiAgSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0b1xuICAzODpcdFx0ICBpbnN0YWxsIHRoZSBmaXJtd2FyZSwgZXh0cmFjdGVkIGJ5IHRoZSB1c2VyIHNwYWNlIHRvb2xzOyBzZWVcbiAgMzk6XHRcdCAgXHUwMDNjaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlIGZvciBkZXRhaWxzLlxuICA0MDpcdFxuICA0MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNDI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4YWNydS5cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgVVNCX1VFQUdMRUFUTVxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7QURJIDkzMCBhbmQgZWFnbGUgVVNCIERTTCBtb2RlbVwmIzM0O1xuICA0NjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFEU0wgVVNCIG1vZGVtIGJhc2VkIG9uIHRoZSBBREkgOTMwXG4gIDQ5Olx0XHQgIG9yIGVhZ2xlIGNoaXBzZXQuIEluIG9yZGVyIHRvIHVzZSB5b3VyIG1vZGVtIHlvdSB3aWxsIG5lZWQgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTkxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlVTQiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBVU0IgY29uZmlndXJhdGlvbiBoZXJlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGlzIGBVU0JfQ1hBQ1JVYCBjb25maWcsIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBwaXF1aW5nIG15IGludGVyZXN0IGF0IHRoZSBtb21lbnQuIEJ1dCwgeW91IGtub3csIG15IGJyYWluJiMzOTtzIGFscmVhZHkgbWFraW5nIGNvbm5lY3Rpb25zLiBJJiMzOTttIHdvbmRlcmluZywgYXMgYSBtYXR0ZXIgb2YgY291cnNlLCBob3cgdGhpcyBjb25uZWN0cyBvciBjb250cmFzdHMgd2l0aCBgVVNCX0FUTWA/IEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBpdHMgcG90ZW50aWFsIHJlbGF0aW9uc2hpcCwgaWYgYW55LiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgdW5wYWNrIGBVU0JfQ1hBQ1JVYC4gVW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBsYW5kc2NhcGUgb2YgcmVsYXRlZCBVU0IgY29uZmlndXJhdGlvbnMsIGxpa2UgdGhlIEFUTSBjb25uZWN0aW9uLCBpcyBrZXkgdG8gZ2V0dGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gQWx3YXlzIHN0YXJ0IHdpdGggdGhlIGdlbmVyYWwsIHRoZW4gd29yayB0byB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0FUTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTUtXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo2Om1lbnVjb25maWcgVVNCX0FUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1VTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIFVTQl9BVE0gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFVTQl9BVE1gLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O1doYXQgYXJlIHRoZSAqa2V5KiBjb21wb25lbnRzIHRoYXQgdGhpcyByZWxpZXMgdXBvbj8mIzM0OyBJIG5lZWQgdG8gbWFwIG91dCB0aGUgZW50aXJlIGxhbmRzY2FwZS4gTXkgbWluZCYjMzk7cyBydW5uaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBhcmVhczoga2VybmVsIG1vZHVsZXMsIGRldmljZSBkcml2ZXJzLCBwZXJoYXBzIHNvbWUgdXNlcnNwYWNlIHV0aWxpdGllcywgYW5kIGRlZmluaXRlbHkgc29tZSBjcnVjaWFsIGxpYnJhcmllcy4gVGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBtb2R1bGU7IGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbmV0d29yayBzdGFjaywgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzIChIQUxzKSwgYW5kIHBvc3NpYmx5IGV2ZW4gc3BlY2lmaWMgQVRNIGhhcmR3YXJlIGlmIGl0JiMzOTtzIG5vdCBwdXJlbHkgYSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbi4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHdoYXQgb3RoZXIgbW9kdWxlcyBhcmUgcmVxdWlyZWQsIHdoYXQgQVBJcyBpdCBleHBvc2VzLCBhbmQgaWYgaXQmIzM5O3MgYnVpbHQgb24gdG9wIG9mIG1vcmUgZnVuZGFtZW50YWwgbmV0d29ya2luZyBsYXllcnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjaGFpbiByZWFjdGlvbiBhbmQgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLiBXaGVyZSBpcyB0aGUgcG90ZW50aWFsIGZvciBjb25mbGljdHMsIGFuZCB3aGF0IHZlcnNpb25zIGRvIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gS25vd2luZyB0aGUgY29tcGxldGUgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSB0cm91Ymxlc2hvb3Rpbmcgb3Igc3lzdGVtIGRlc2lnbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgVVNCL0FUTSBEU0wgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIFVTQl9BVE1cbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBBVE1cbiAgIDk6XHRcdHNlbGVjdCBDUkMzMlxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBVU0IgRGlnaXRhbCBTdWJzY3JpYmVyIExpbmUgKERTTClcbiAgMTI6XHRcdCAgbW9kZW0gdG8geW91ciBjb21wdXRlciYjMzk7cyBVU0IgcG9ydC4gIFlvdSB3aWxsIHRoZW4gbmVlZCB0byBjaG9vc2UgeW91clxuICAxMzpcdFx0ICBtb2RlbSBmcm9tIHRoZSBsaXN0IGJlbG93LlxuICAxNDpcdFxuICAxNTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMTY6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmF0bS5cbiAgMTc6XHRcbiAgMTg6XHRpZiBVU0JfQVRNXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIFVTQl9TUEVFRFRPVUNIXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVwZW5kZW5jeSBBbmFseXNpcyBhbmQgRnVuY3Rpb24gQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGBVU0JfQVRNYCByZWxpZXMgb24gYEFUTWAsIGFuZCBgVVNCX0NYQUNSVWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgVVNCX0FUTWAuICBUaGF0IHRlbGxzIG1lIHJpZ2h0IGF3YXkgdGhhdCBpZiBJJiMzOTttIHdvcmtpbmcgd2l0aCBgVVNCX0NYQUNSVWAsIEkmIzM5O20gaW1wbGljaXRseSBkZWFsaW5nIHdpdGggYEFUTWAgYW5kIGBVU0JfQVRNYCBhcyB3ZWxsLiAgU28sIGluIHRlcm1zIG9mIGRlcGVuZGVuY2llcywgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBBVE1gLCBgVVNCX0FUTWAsIGFuZCBgVVNCX0NYQUNSVWAgYXJlIGFsbCBhY2NvdW50ZWQgZm9yLiBUaGlzIHNlZW1zIGJhc2ljIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAuCgpNeSBmb2N1cyBpcyBvbiB0aGUgYGN4YWNydV9jbWAgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBnZXRzIGNhbGxlZCBmcmVxdWVudGx5IG9yIGlmIGl0JiMzOTtzIG1vcmUgb2YgYW4gaW5pdGlhbGl6YXRpb24gb3Igc2V0dXAgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBuYW1lLCBhbmQgbXkgZXhwZXJpZW5jZSwgaXQgc2VlbXMgbGlrZSBhICYjMzQ7Y29tbWFuZCYjMzQ7IGZ1bmN0aW9uOyBtb3JlIGxpa2VseSB1c2VkIGZvciBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb3Igc29tZSBraW5kIG9mIGNvbnRyb2wgbWVjaGFuaXNtIHRoYW4gY29yZSBkYXRhIHRyYW5zZmVyLiBOb3cgbGV0IG1lIHRyYWNlIGl0cyBjYWxscyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQmIzM5O3MgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3hhY3J1X2NtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz01OT1lbnVtIGN4YWNydV9md19yZXF1ZXN0IHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzAtICogZmlybXdhcmUgaXMgbG9hZGVkICAqL1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcxOmVudW0gY3hhY3J1X2NtX3JlcXVlc3Qge1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyLVx0Q01fUkVRVUVTVF9VTkRFRklORUQgPSAweDgwLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMDgtICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTA5OmVudW0gY3hhY3J1X2NtX2ZsYXNoIHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTAtXHRDTV9GTEFTSF9SRUFEID0gMHhhMSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0LS8qIHJlcGx5IGNvZGVzIHRvIHRoZSBjb21tYW5kcyBhYm92ZSAqL1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjExNTplbnVtIGN4YWNydV9jbV9zdGF0dXMge1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNi1cdENNX1NUQVRVU19VTkRFRklORUQsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xOTItXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTkzOnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk0LVx0dTggKndkYXRhLCBpbnQgd3NpemUsIHU4ICpyZGF0YSwgaW50IHJzaXplKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzMyPXN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTYtXHRpZiAoIXN0cmNtcChzdHJfY21kLCBcJiMzNDtzdG9wXCYjMzQ7KSB8fCAhc3RyY21wKHN0cl9jbWQsIFwmIzM0O3Jlc3RhcnRcJiMzNDspKSB7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzU3Olx0XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RPUCwgTlVMTCwgMCwgTlVMTCwgMCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzU4LVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM3Ni1cdGlmICghc3RyY21wKHN0cl9jbWQsIFwmIzM0O3N0YXJ0XCYjMzQ7KSB8fCAhc3RyY21wKHN0cl9jbWQsIFwmIzM0O3Jlc3RhcnRcJiMzNDspKSB7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6Mzc3Olx0XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDApO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM3OC1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz00MzU9c3RhdGljIHNzaXplX3QgYWRzbF9jb25maWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00ODAtXHRcdFx0ZGF0YVswXSA9IGNwdV90b19sZTMyKG51bSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NDgxOlx0XHRcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0RBVEFfU0VULFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQ4Mi1cdFx0XHRcdCh1OCAqKSBkYXRhLCA0ICYjNDM7IG51bSAqIDgsIE5VTEwsIDApO1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz01OTA9c3RhdGljIGludCBjeGFjcnVfc3RhcnRfd2FpdF91cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA3LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjYwODpzdGF0aWMgaW50IGN4YWNydV9jbShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTYwOS1cdFx0ICAgICB1OCAqd2RhdGEsIGludCB3c2l6ZSwgdTggKnJkYXRhLCBpbnQgcnNpemUpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcwOS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MTA6c3RhdGljIGludCBjeGFjcnVfY21fZ2V0X2FycmF5KHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzExLVx0XHRcdCAgICAgICB1MzIgKmRhdGEsIGludCBzaXplKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjMtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzI0Olx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBjbSwgTlVMTCwgMCwgKHU4ICopIGJ1ZiwgYnVmbGVuKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjUtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjctXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzI4Olx0LyogbGVuIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBsZW4gJSA0ID09IDAgZ3VhcmFudGVlZCBieSBjeGFjcnVfY20oKSAqL1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyOS1cdGxlbiA9IHJldCAvIDQ7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTc2MD1zdGF0aWMgaW50IGN4YWNydV9jYXJkX3N0YXR1cyhzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2MS17XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzYyOlx0aW50IHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0dFVF9TVEFUVVMsIE5VTEwsIDAsIE5VTEwsIDApO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2My1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzcxPXN0YXRpYyBpbnQgY3hhY3J1X2F0bV9zdGFydChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzgxLVx0LyogUmVhZCBNQUMgYWRkcmVzcyAqL1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc4MjpcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0dFVF9NQUNfQUREUkVTUywgTlVMTCwgMCxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODMtXHRcdFx0YXRtX2Rldi1cdTAwM2Vlc2ksIHNpemVvZihhdG1fZGV2LVx1MDAzZWVzaSkpO1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTAtXHRtdXRleF9sb2NrKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3OTE6XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDApO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5Mi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTgyMD1zdGF0aWMgdm9pZCBjeGFjcnVfcG9sbF9zdGF0dXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MjktXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODMwOlx0cmV0ID0gY3hhY3J1X2NtX2dldF9hcnJheShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0lORk9fR0VULCBidWYsIENYSU5GX01BWCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODMxLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xMDA2PXN0YXRpYyBpbnQgY3hhY3J1X2hlYXZ5X2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMDEtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTEwMjpcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0dFVF9TVEFUVVMsIE5VTEwsIDAsIE5VTEwsIDApO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMDMtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNzQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDWEFDUlUgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSByZWZlcmVuY2VzIGluIGBjeGFjcnVfYXRtX3N0YXJ0YCwgYGN4YWNydV9oZWF2eV9pbml0YCwgYGN4YWNydV9wb2xsX3N0YXR1c2AsIGBhZHNsX3N0YXRlX3N0b3JlYCwgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAuIEdpdmVuIHRoYXQgYGN4YWNydV9jbWAgaXMgc3RhdGljLCBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGF0IGFzaWRlIGZvciBub3c7IGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgdGhlIGNvcmUgaXNzdWUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aG9zZSBvdGhlciBmdW5jdGlvbnMuIFdhaXQgYSBzZWNvbmQuLi4gYGN4YWNydV9hdG1fc3RhcnRgIGFuZCBgY3hhY3J1X2hlYXZ5X2luaXRgIGFyZSBjYWxsYmFja3MuIFJpZ2h0LCB0aGF0IGNoYW5nZXMgdGhpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBjYWxsYmFja3MuIFRpbWUgdG8gZGlnIGludG8gdGhlIHN0cnVjdCB0aGV5JiMzOTtyZSBhc3NpZ25lZCB0byDigJMgdGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgY3J1Y2lhbCBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3hhY3J1X2F0bV9zdGFydHxjeGFjcnVfaGVhdnlfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzYwPXN0YXRpYyBpbnQgY3hhY3J1X2NhcmRfc3RhdHVzKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc3MC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3NzE6c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc3Mi1cdFx0c3RydWN0IGF0bV9kZXYgKmF0bV9kZXYpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4NC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3ODU6XHRcdGF0bV9lcnIodXNiYXRtX2luc3RhbmNlLCBcJiMzNDtjeGFjcnVfYXRtX3N0YXJ0OiBDQVJEX0dFVF9NQUNfQUREUkVTUyByZXR1cm5lZCAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODYtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5Mi1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkzOlx0XHRhdG1fZXJyKHVzYmF0bV9pbnN0YW5jZSwgXCYjMzQ7Y3hhY3J1X2F0bV9zdGFydDogQ0hJUF9BRFNMX0xJTkVfU1RBUlQgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzk0LVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz05ODY9c3RhdGljIGludCBjeGFjcnVfZmluZF9maXJtd2FyZShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMDA1LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEwMDY6c3RhdGljIGludCBjeGFjcnVfaGVhdnlfaW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMDA3LVx0XHRcdCAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pbnRmKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xMzQyPXN0YXRpYyBzdHJ1Y3QgdXNiYXRtX2RyaXZlciBjeGFjcnVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMzQ0LVx0LmJpbmRcdFx0PSBjeGFjcnVfYmluZCxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMzQ1Olx0LmhlYXZ5X2luaXRcdD0gY3hhY3J1X2hlYXZ5X2luaXQsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTM0Ni1cdC51bmJpbmRcdFx0PSBjeGFjcnVfdW5iaW5kLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEzNDc6XHQuYXRtX3N0YXJ0XHQ9IGN4YWNydV9hdG1fc3RhcnQsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTM0OC1cdC5idWxrX2luXHQ9IENYQUNSVV9FUF9EQVRBLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIHRoZSBjeGFjcnUgRHJpdmVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgY3hhY3J1X2RyaXZlcmAgaXMgYSBgdXNiYXRtX2RyaXZlcmAsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQVRNIG92ZXIgVVNCLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzZWUgYGN4YWNydV9iaW5kYCwgYGN4YWNydV9oZWF2eV9pbml0YCwgYW5kIGBjeGFjcnVfYXRtX3N0YXJ0YCBqdW1wIG91dCBhcyBpbml0aWFsIGZ1enppbmcgdGFyZ2V0cy4gR29vZCBjYW5kaWRhdGVzIHRvIHN0YXJ0IHdpdGguCgpIb2xkIG9uLi4uIEkmIzM5O3ZlIGdvdCBzb21ldGhpbmcuIEkgc2VlIHRoYXQgYGN4YWNydV9jbWAgaXMgY2FsbGVkIGZyb20gYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgLiBBaGEsIHRoZXNlIGFyZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMhIFdlIG1pZ2h0IGdldCBzb21lIGludGVyZXN0aW5nIGVudHJ5IHBvaW50cyB0aHJvdWdoIHRob3NlLiBMZXQmIzM5O3MgbWFrZSBhIG5vdGUgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gT2gsIGFuZCBoZXJlIGlzIGBjeGFjcnVfcG9sbF9zdGF0dXNgIGFzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uLgoKU28sIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlIGFyZSBsb29raW5nIGxpa2U6IGBjeGFjcnVfaGVhdnlfaW5pdGAsIGBjeGFjcnVfYXRtX3N0YXJ0YCwgYGFkc2xfc3RhdGVfc3RvcmVgLCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYC4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3MgY3J1Y2lhbCB3ZSBnZXQgdGhlIGRlcGVuZGVuY2llcyByaWdodC4gYFVTQl9DWEFDUlVgIGRlcGVuZHMgb24gYFVTQl9BVE1gLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYEFUTWAuIEdvdCBpdC4gV2UgbmVlZCB0byBlbmFibGUgYFVTQl9DWEFDUlVgLCBgVVNCX0FUTWAsIGFuZCBgQVRNYCBpbiB0aGUga2VybmVsIGNvbmZpZy4gV2FpdCBhIG1pbnV0ZS4uLiBgVVNCX0NYQUNSVWAgKnNlbGVjdHMqIGBGV19MT0FERVJgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgd2UgY2FuIHRyaWdnZXIgYWRkaXRpb25hbCBjb2RlIHBhdGhzLgoKQWxyaWdodCwgbGV0JiMzOTtzIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gSXQgbW9kaWZpZXMgYSBVU0IgZHJpdmVyLCBhbmQgdGhhdCBpcyBhIG1ham9yIHBsdXMgaW4gbXkgYm9vay4gVVNCIGRyaXZlcnMgYXJlIG5pY2VseSBmdXp6YWJsZSB3aXRoIGVtdWxhdGVkIGRldmljZXMsIGxpa2UgZHVtbXlfaGNkIG9yIFN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIEFic29sdXRlbHksIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpTbywgdG8gc3VtbWFyaXplLCB0aGUgY29uZmlncyBJJiMzOTttIGVuYWJsaW5nIGFyZToKCiogICBgVVNCX0NYQUNSVWAKKiAgIGBVU0JfQVRNYAoqICAgYEFUTWAKCkFuZCB0aGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIHRhcmdldGluZyBhcmU6CgoqICAgYGN4YWNydV9oZWF2eV9pbml0YAoqICAgYGN4YWNydV9hdG1fc3RhcnRgCiogICBgYWRzbF9zdGF0ZV9zdG9yZWAKKiAgIGBhZHNsX2NvbmZpZ19zdG9yZWAKCkkgc2hvdWxkIGRvdWJsZS1jaGVjayBpZiBgY3hhY3J1X2NtYCBpcyBzdGF0aWMsIHdoaWNoIGl0IGxvb2tzIGxpa2UgaXQgaXMuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBmb2N1cyBvbiBpdHMgY2FsbGVycy4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBhcmUgbm90IHN0YXRpYywgb3IgaWYgdGhleSBhcmUgc3RhdGljIHdoYXQgYXJlIHRoZWlyIGFzc2lnbm1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZHNsX3N0YXRlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0zMTU9c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMzMjpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDY4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipFeGFtaW5pbmcgdGhlIFN5c2ZzIEF0dHJpYnV0ZSBBc3NpZ25tZW50KioKClJpZ2h0LCBzbyB0aGVzZSB0aGluZ3MgYXJlIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gaXRzZWxmLiBCdXQgdGhleSBhcmUgYWxzbyBkZXNpZ25hdGVkIGFzIGBzeXNmc2Agc3RvcmUgZnVuY3Rpb25zLiBUaGF0IG1lYW5zIHRoZXkmIzM5O3JlIGhvb2tlZCBpbnRvIHRoZSBzeXNmcyBpbmZyYXN0cnVjdHVyZSBzb21laG93LCBhc3NpZ25lZCB0byBgREVWSUNFX0FUVFJgIHN0cnVjdHVyZXMgbW9zdCBsaWtlbHkuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGFyZSB0aGV5IGFjdHVhbGx5ICpleHBvc2VkKiB0aHJvdWdoIHN5c2ZzPyBBcmUgdGhleSBzaG93aW5nIHVwIGFzIGF0dHJpYnV0ZXMgdW5kZXIgYSBkZXZpY2Ugbm9kZSwgYWxsb3dpbmcgdXMgdG8gcmVhZCBhbmQgd3JpdGUgdG8gdGhlbT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBhY3R1YWwgc3lzZnMgdHJlZSB0byBjb25maXJtIHRoZWlyIHZpc2liaWxpdHkgYW5kIHVuZGVyc3RhbmQgd2hhdCBlZmZlY3QgdGhleSYjMzk7bGwgaGF2ZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhwbG9yZSBob3cgdGhleSBhcmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERVZJQ0VfQVRUUi4qYWRzbF9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzA4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoZXNlIHRlY2huaWNhbCB0ZXJtczoKCioqQ2hlY2tpbmcgQmFjayBvbiBgYWRzbF9zdGF0ZV9zdG9yZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHJldmlzaXQgdGhpcy4gSSBrbm93IHdlJiMzOTt2ZSBsb29rZWQgYXQgaXQgYmVmb3JlLCBidXQgc29tZXRoaW5nIGlzIG5hZ2dpbmcgYXQgbWUuIFRpbWUgdG8gZG8gYSBxdWljayBzZWFyY2ggZm9yIGBhZHNsX3N0YXRlX3N0b3JlYCBhZ2Fpbi4gTmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGluIGl0cyBiZWhhdmlvciBvciBpbnRlcmFjdGlvbnMuIEdvdHRhIGtlZXAgZGlnZ2luZzsgaXQmIzM5O3MgcHJvYmFibHkgaW1wb3J0YW50IHRvIHRoZSBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgd2hhdCB0dXJucyB1cCB0aGlzIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fkc2xfc3RhdGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMxNT1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzEtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gTGV0JiMzOTtzIHNlZSBob3cgSSBjYW4gc3VtbWFyaXplIHRoaXMgZm9yIGFuIGV4cGVydC4uLgoKKioqCgoqKk15IEFuYWx5dGljYWwgUHJvY2VzcyoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBpcyB0byBlc3NlbnRpYWxseSB1bnBhY2sgYSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBhbmQgdGhlbiByZS1wcmVzZW50IGl0IGluIGEgY29uY2lzZSB3YXkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzPyBJdCYjMzk7cyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgaW5oZXJlbnQgdXNhZ2UuIFdoYXQgaXMgdGhpcyBwaWVjZSBvZiB0ZXh0ICpmb3IqPyBIb3cgaXMgaXQgaW50ZW5kZWQgdG8gYmUgdXNlZCBvciBob3cgY2FuIGl0IGJlIHVzZWQsIGV2ZW4gaWYgSSYjMzk7bSBub3QgZ2l2ZW4gZXhwbGljaXQgY29udGV4dD8gVG8gZGlzdGlsbCBpdCB0byBpdHMgZXNzZW5jZSByZXF1aXJlcyBncmFzcGluZyBpdHMgcHVycG9zZSB3aXRoaW4gYSBicm9hZGVyIGZyYW1ld29yay4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgJiMzOTtob3cmIzM5OyBhbmQgJiMzOTt3aHkmIzM5OyBvZiBpdHMgYXBwbGljYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbnRlbmRlZCBmdW5jdGlvbiwgdGhlIGltcGxpY2F0aW9ucyBhbmQgdGhlIGNvcmUgY29uY2VwdHMgYXQgcGxheSBhbmQgdGhlbiBwcmVzZW50IGl0IGVmZmljaWVudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzg1Olx0XHRcdFx0cG9sbCA9IENYUE9MTF9QT0xMSU5HO1xuIDM4NjpcdFx0XHR9XG4gMzg3Olx0XHR9XG4gMzg4Olx0XG4gMzg5Olx0XHRpZiAoIXN0cmNtcChzdHJfY21kLCBcJiMzNDtwb2xsXCYjMzQ7KSkge1xuIDM5MDpcdFx0XHRyZXQgPSBsZW47XG4gMzkxOlx0XHRcdHBvbGwgPSBDWFBPTExfUE9MTElORztcbiAzOTI6XHRcdH1cbiAzOTM6XHRcbiAzOTQ6XHRcdGlmIChyZXQgPT0gMCkge1xuIDM5NTpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDM5NjpcdFx0XHRwb2xsID0gLTE7XG4gMzk3Olx0XHR9XG4gMzk4Olx0XG4gMzk5Olx0XHRpZiAocG9sbCA9PSBDWFBPTExfUE9MTElORykge1xuIDQwMDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmluc3RhbmNlLVx1MDAzZXBvbGxfc3RhdGVfc2VyaWFsaXplKTtcbiA0MDE6XHRcdFx0c3dpdGNoIChpbnN0YW5jZS1cdTAwM2Vwb2xsX3N0YXRlKSB7XG4gNDAyOlx0XHRcdGNhc2UgQ1hQT0xMX1NUT1BQRUQ6XG4gNDAzOlx0XHRcdFx0Lyogc3RhcnQgcG9sbGluZyAqL1xuIDQwNDpcdFx0XHRcdGluc3RhbmNlLVx1MDAzZXBvbGxfc3RhdGUgPSBDWFBPTExfUE9MTElORztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0OTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBzZWN0aW9uLCBzcGVjaWZpY2FsbHksIHRoYXQmIzM5O3MgbGluZXMgMzMyIGFuZCBiZXlvbmQuIFRoZSBjb250ZXh0IGlzIGltcG9ydGFudCwgYnV0IGZvciB0aGUgc3VtbWFyeSBJIHdhbnQgdG8gZm9jdXMgb24gdGhpcyBwb3J0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBkZWVwZXIgbG9vayB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIHRoYXQgc3BlY2lmaWMgcG9ydGlvbiBvZiB0aGUgdGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMjpcdHN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIDMzMzpcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIDMzNDpcdHtcbiAzMzU6XHRcdHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB0b191c2JhdG1fZHJpdmVyX2RhdGEoXG4gMzM2Olx0XHRcdFx0dG9fdXNiX2ludGVyZmFjZShkZXYpKTtcbiAzMzc6XHRcdGludCByZXQ7XG4gMzM4Olx0XHRpbnQgcG9sbCA9IC0xO1xuIDMzOTpcdFx0Y2hhciBzdHJfY21kWzhdO1xuIDM0MDpcdFx0aW50IGxlbiA9IHN0cmxlbihidWYpO1xuIDM0MTpcdFxuIDM0MjpcdFx0aWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKVxuIDM0MzpcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiAzNDQ6XHRcbiAzNDU6XHRcdHJldCA9IHNzY2FuZihidWYsIFwmIzM0OyU3c1wmIzM0Oywgc3RyX2NtZCk7XG4gMzQ2Olx0XHRpZiAocmV0ICE9IDEpXG4gMzQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM0ODpcdFx0cmV0ID0gMDtcbiAzNDk6XHRcbiAzNTA6XHRcdGlmIChpbnN0YW5jZSA9PSBOVUxMKVxuIDM1MTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipGaW5kaW5nIHRoZSBBc3NpZ25tZW50IG9mIGBhZHNsX3N0YXRlX3N0b3JlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGFkc2xfc3RhdGVfc3RvcmVgIGlzIHVzZWQuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSB0cmFjZSB3aGVyZSBpdCYjMzk7cyAqYXNzaWduZWQqIGEgdmFsdWUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9yIG1vZGlmaWNhdGlvbiBwb2ludHMgb2YgdGhpcyB2YXJpYWJsZS4gVGhpcyBpcyBmdW5kYW1lbnRhbDsga25vd2luZyB3aGVyZSB0aGUgZGF0YSBvcmlnaW5hdGVzIGdpdmVzIG1lIGEgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZm9sbG93IGl0cyBmbG93IGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgc3lzdGVtLiBXaXRob3V0IGtub3dpbmcgaXRzIHNvdXJjZSwgYW55IGZ1cnRoZXIgYW5hbHlzaXMgaXMgZ29pbmcgdG8gYmUgZ3Vlc3NpbmcgYXQgYmVzdCwgYW5kIGluZWZmaWNpZW50IGF0IHdvcnN0LiBTbywgZmluZCB0aGUgYXNzaWdubWVudCEgVGhhdCYjMzk7cyB0aGUga2V5IHRvIGV2ZXJ5dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fkc2xfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xNzUtXHRpbnQgbGluZV9zdGF0dXM7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTc2Olx0c3RydWN0IG11dGV4IGFkc2xfc3RhdGVfc2VyaWFsaXplO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE3Ny1cdGludCBhZHNsX3N0YXR1cztcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzAzPXN0YXRpYyBzc2l6ZV90IG1hY19hZGRyZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMTQtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzE1OnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE2LVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMzMjpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1Mi1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNTM6XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTQtXHRcdHJldHVybiAtRVJFU1RBUlRTWVM7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo0MjU6XHRtdXRleF91bmxvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNi1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTM1PUNYQUNSVV9BVFRSXyMjX2FjdGlvbihDWElORl9DT05UUk9MTEVSX1ZFUlNJT04sICAgICAgICB1MzIsICBhZHNsX2NvbnRyb2xsZXJfdmVyc2lvbik7IFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NTM2OkNYQUNSVV9DTURfIyNfYWN0aW9uKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHNsX3N0YXRlKTsgXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01MzctQ1hBQ1JVX1NFVF8jI19hY3Rpb24oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkc2xfY29uZmlnKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTQxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjeGFjcnVfYXR0cnNbXSA9IHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01NDItXHRcdTAwMjZkZXZfYXR0cl9hZHNsX2NvbmZpZy5hdHRyLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjU0MzpcdFx1MDAyNmRldl9hdHRyX2Fkc2xfc3RhdGUuYXR0cixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01NDQtXHRcdTAwMjZkZXZfYXR0cl9hZHNsX2NvbnRyb2xsZXJfdmVyc2lvbi5hdHRyLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NzE9c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODktXHQvKiBzdGFydCBBRFNMICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkwOlx0bXV0ZXhfbG9jayhcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzkxLVx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODEyLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluc3RhbmNlLVx1MDAzZXBvbGxfc3RhdGVfc2VyaWFsaXplKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo4MTM6XHRtdXRleF91bmxvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgxNC1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9ODIwPXN0YXRpYyB2b2lkIGN4YWNydV9wb2xsX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgzOS1cdFx0XHRpZiAocmV0ICE9IC1FU0hVVERPV04pXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODQwOlx0XHRcdFx0YXRtX3dhcm4odXNiYXRtLCBcJiMzNDtwb2xsaW5nIGRpc2FibGVkLCBzZXQgYWRzbF9zdGF0ZVwmIzM0O1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTg0MS1cdFx0XHRcdFx0XHRcJiMzNDsgdG8gJiMzOTtzdGFydCYjMzk7IG9yICYjMzk7cG9sbCYjMzk7IHRvIHJlc3VtZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTExMjI9c3RhdGljIGludCBjeGFjcnVfYmluZChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0Ni1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTQ3Olx0bXV0ZXhfaW5pdChcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENYQUNSVSBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgQ1hBQ1JVX0NNRF8jI19hY3Rpb24oYWRzbF9zdGF0ZSlgIGJlY29tZXMgYGRldl9hdHRyX2Fkc2xfc3RhdGVgIHRocm91Z2ggZXhwYW5zaW9uLiBUaGF0IG1lYW5zIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBhcmUgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBpdCBhbHNvIG1lYW5zIGRpcmVjdGx5IGZ1enppbmcgdGhlbSBpcyBnb2luZyB0byBiZSBhIHBhaW4gaWYgdGhleSYjMzk7cmUgbm90IHN0YW5kYXJkIHN5c2ZzIGF0dHJpYnV0ZXMuIFRob3VnaCwgb2YgY291cnNlLCBTeXprYWxsZXIgKmNhbiogZnV6eiBzeXNmcywgc28gaXQmIzM5O3Mgbm90IGEgY29tcGxldGUgZGVhZCBlbmQuCgpIb3dldmVyLCB0aGUgcmVhbCBnZW1zIGhlcmUgYXJlIGxpa2VseSBgY3hhY3J1X2hlYXZ5X2luaXRgIGFuZCBgY3hhY3J1X2F0bV9zdGFydGAuIFRoZXNlIGFyZSBzdGFuZGFyZCBVU0IgQVRNIGNhbGxiYWNrcywgd2hpY2ggdGVsbHMgbWUgdGhleSYjMzk7bGwgYmUgY2FsbGVkIGR1cmluZyBkZXZpY2UgcHJvYmUgYW5kIHN0YXJ0dXAuIFRoaXMgbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIOKAkyBtdWNoIGVhc2llciB0byB0cmlnZ2VyIGFuZCBvYnNlcnZlIHRoYW4gc29tZXRoaW5nIGJ1cmllZCBkZWVwIGluIHN5c2ZzLiBEZWZpbml0ZWx5IGZvY3VzaW5nIG9uIHRob3NlLiBBbmQgYGN4YWNydV9iaW5kYCBzZWVtcyBsaWtlIGFub3RoZXIgcG90ZW50aWFsbHkgZnJ1aXRmdWwgc3RhcnRpbmcgcG9pbnQuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgY3hhY3J1X2NtYCBnZXRzIGNhbGxlZCBmcm9tIGBjeGFjcnVfYmluZGAuIFRoYXQgY291bGQgb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIGF2ZW51ZXMgZm9yIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N4YWNydV9jbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTk9ZW51bSBjeGFjcnVfZndfcmVxdWVzdCB7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcwLSAqIGZpcm13YXJlIGlzIGxvYWRlZCAgKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MTplbnVtIGN4YWNydV9jbV9yZXF1ZXN0IHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03Mi1cdENNX1JFUVVFU1RfVU5ERUZJTkVEID0gMHg4MCxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTA4LSAqL1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEwOTplbnVtIGN4YWNydV9jbV9mbGFzaCB7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwLVx0Q01fRkxBU0hfUkVBRCA9IDB4YTEsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNC0vKiByZXBseSBjb2RlcyB0byB0aGUgY29tbWFuZHMgYWJvdmUgKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTU6ZW51bSBjeGFjcnVfY21fc3RhdHVzIHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTYtXHRDTV9TVEFUVVNfVU5ERUZJTkVELFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xNzA9c3RydWN0IGN4YWNydV9kYXRhIHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTkyLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjE5MzpzdGF0aWMgaW50IGN4YWNydV9jbShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5NC1cdHU4ICp3ZGF0YSwgaW50IHdzaXplLCB1OCAqcmRhdGEsIGludCByc2l6ZSk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMzMj1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzU2LVx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXCYjMzQ7c3RvcFwmIzM0OykgfHwgIXN0cmNtcChzdHJfY21kLCBcJiMzNDtyZXN0YXJ0XCYjMzQ7KSkge1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjM1NzpcdFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUT1AsIE5VTEwsIDAsIE5VTEwsIDApO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1OC1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNzYtXHRpZiAoIXN0cmNtcChzdHJfY21kLCBcJiMzNDtzdGFydFwmIzM0OykgfHwgIXN0cmNtcChzdHJfY21kLCBcJiMzNDtyZXN0YXJ0XCYjMzQ7KSkge1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjM3NzpcdFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNzgtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NDM1PXN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDgwLVx0XHRcdGRhdGFbMF0gPSBjcHVfdG9fbGUzMihudW0pO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjQ4MTpcdFx0XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9EQVRBX1NFVCxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00ODItXHRcdFx0XHQodTggKikgZGF0YSwgNCAmIzQzOyBudW0gKiA4LCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTkwPXN0YXRpYyBpbnQgY3hhY3J1X3N0YXJ0X3dhaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTYwNy1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo2MDg6c3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy02MDktXHRcdCAgICAgdTggKndkYXRhLCBpbnQgd3NpemUsIHU4ICpyZGF0YSwgaW50IHJzaXplKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MDktXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzEwOnN0YXRpYyBpbnQgY3hhY3J1X2NtX2dldF9hcnJheShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcxMS1cdFx0XHQgICAgICAgdTMyICpkYXRhLCBpbnQgc2l6ZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzIzLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcyNDpcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgY20sIE5VTEwsIDAsICh1OCAqKSBidWYsIGJ1Zmxlbik7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI3LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcyODpcdC8qIGxlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgbGVuICUgNCA9PSAwIGd1YXJhbnRlZWQgYnkgY3hhY3J1X2NtKCkgKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjktXHRsZW4gPSByZXQgLyA0O1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NjA9c3RhdGljIGludCBjeGFjcnVfY2FyZF9zdGF0dXMoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NjEte1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc2MjpcdGludCByZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfU1RBVFVTLCBOVUxMLCAwLCBOVUxMLCAwKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NjMtXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTc3MT1zdGF0aWMgaW50IGN4YWNydV9hdG1fc3RhcnQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4MS1cdC8qIFJlYWQgTUFDIGFkZHJlc3MgKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3ODI6XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfTUFDX0FERFJFU1MsIE5VTEwsIDAsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzgzLVx0XHRcdGF0bV9kZXYtXHUwMDNlZXNpLCBzaXplb2YoYXRtX2Rldi1cdTAwM2Vlc2kpKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzkwLVx0bXV0ZXhfbG9jayhcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkxOlx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz04MjA9c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODI5LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjgzMDpcdHJldCA9IGN4YWNydV9jbV9nZXRfYXJyYXkoaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9JTkZPX0dFVCwgYnVmLCBDWElORl9NQVgpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgzMS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTAwNj1zdGF0aWMgaW50IGN4YWNydV9oZWF2eV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTAxLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjExMDI6XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfU1RBVFVTLCBOVUxMLCAwLCBOVUxMLCAwKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTAzLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0NQoJCQkJCQkJb3V0cHV0OiA2OAoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBjeGFjcnVfY21gIGdldHMgY2FsbGVkIHdpdGhpbiB0aGlzIGNvZGUuIFRoZSBpbml0aWFsIHNjYW4gc2hvd3MgdGhhdCBgY3hhY3J1X2JpbmRgICpkb2VzbiYjMzk7dCogY2FsbCBgY3hhY3J1X2NtYCBkaXJlY3RseS4gSG1tLCBpbnRlcmVzdGluZy4gSG93ZXZlciwgYGN4YWNydV9oZWF2eV9pbml0YCAqZG9lcyogY2FsbCBpdCwgc3BlY2lmaWNhbGx5IGF0IGxpbmUgMTEwMiwgYW5kIGBjeGFjcnVfYXRtX3N0YXJ0YCBhbHNvIGNhbGxzIGl0LCBhdCBsaW5lcyA3ODIgYW5kIDc5MS4gU28sIGJhc2VkIG9uIHRoaXMgcXVpY2sgbG9vaywgYGN4YWNydV9oZWF2eV9pbml0YCBhbmQgYGN4YWNydV9hdG1fc3RhcnRgIHNlZW0gbGlrZSB0aGUgbW9zdCBwcm9taXNpbmcgc3ltYm9scyB0byBmb2N1cyBvbi4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFllcywgdGhleSBhcmUuIEhvbGQgb24gYSBzZWNvbmQsIHRoYXQmIzM5O3Mgbm90IHdoYXQgdGhlIHByb21wdCB3YW50cy4gSXQgcHJlZmVycyBub24tc3RhdGljIGVudHJ5IHBvaW50cyBiZWNhdXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIG9mdGVuIGlubGluZWQsIGFuZCB3ZSBuZWVkIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgd2FpdC4uLiBpbiB0aGlzIGNhc2UsIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIHN0YXRpYywgYm90aCBgY3hhY3J1X2hlYXZ5X2luaXRgIGFuZCBgY3hhY3J1X2F0bV9zdGFydGAgYXJlIGFzc2lnbmVkIHRvIGEgc3RydWN0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGF0IG1lYW5zIHRoZXkgKmNhbm5vdCogYmUgaW5saW5lZC4gVGhleSYjMzk7bGwgZGVmaW5pdGVseSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFNvLCB0aGUgcHJvbXB0IGlzIHBlcmhhcHMgbm90IGNvbnNpZGVyaW5nIHRoaXMgbnVhbmNlIGluIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIE5ldmVydGhlbGVzcywgYmVmb3JlIEkgemVybyBpbiBvbiB0aG9zZSwgSSBzaG91bGQgYnJpZWZseSBzY2FuIHRoZSBjb2RlIGZvciAqYW55KiBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGN4YWNydS5jYCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTk1PXN0YXRpYyB2b2lkIGN4YWNydV9wb2xsX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xOTgtI2RlZmluZSBDWEFDUlVfX0FUVFJfSU5JVChfbmFtZSkgXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTk6c3RhdGljIERFVklDRV9BVFRSX1JPKF9uYW1lKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDEtI2RlZmluZSBDWEFDUlVfQ01EX0lOSVQoX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjAyOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhfbmFtZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDMtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA0LSNkZWZpbmUgQ1hBQ1JVX1NFVF9JTklUKF9uYW1lKSBcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIwNTpzdGF0aWMgREVWSUNFX0FUVFJfV08oX25hbWUpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU2MAoJCQkJCQkJb3V0cHV0OiA2OAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSWRlbnRpZnlpbmcgRHluYW1pYyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhcyB3aGVyZSB0aGUgc3lzdGVtICp0cnVseSogYmVoYXZlcyBkeW5hbWljYWxseS4gU3RhdGljIGZ1bmN0aW9ucyBhcmUsIGJ5IGRlZmluaXRpb24sIHByZWRpY3RhYmxlIGFuZCB0aWVkIGRpcmVjdGx5IHRvIHRoZSBjb2RlJiMzOTtzIHN0cnVjdHVyZSBhdCBjb21waWxlIHRpbWUuIFRoZXkgYXJlIHRoZSBmaXhlZCBwb2ludHMuIFRoZXJlZm9yZSwgYW55IGFuYWx5c2lzIGZvY3VzZWQgb24gYWRhcHRpdmUgYmVoYXZpb3IsIHJ1bnRpbWUgbW9kaWZpY2F0aW9ucywgb3IgdGhlIGltcGFjdHMgb2YgY29uZmlndXJhdGlvbiBvciBpbnB1dCBkYXRhIG5lZWRzIHRvIGV4Y2x1ZGUgdGhvc2UuIEkgbmVlZCB0byBmaWx0ZXIgb3V0IHRoZSBub2lzZS4gTGV0JiMzOTtzIGZvY3VzIG91ciBhdHRlbnRpb24gYnkgc2VhcmNoaW5nLCBkaXJlY3RseSwgZm9yIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGFyZSAqbm90KiBzdGF0aWMuIFRoaXMgd2lsbCBxdWlja2x5IHJldmVhbCB0aGUgYXJlYXMgdGhhdCBhcmUgY2FuZGlkYXRlcyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBzeXN0ZW0mIzM5O3MgZHluYW1pYyBiZWhhdmlvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE5NT1zdGF0aWMgdm9pZCBjeGFjcnVfcG9sbF9zdGF0dXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk4LSNkZWZpbmUgQ1hBQ1JVX19BVFRSX0lOSVQoX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTk5OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhfbmFtZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDAtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAxLSNkZWZpbmUgQ1hBQ1JVX0NNRF9JTklUKF9uYW1lKSBcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIwMjpzdGF0aWMgREVWSUNFX0FUVFJfUlcoX25hbWUpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAzLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwNC0jZGVmaW5lIENYQUNSVV9TRVRfSU5JVChfbmFtZSkgXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDU6c3RhdGljIERFVklDRV9BVFRSX1dPKF9uYW1lKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzczoKCioqUmVnZXggV29lcyBhbmQgYSBTaW1wbGUgU29sdXRpb24qKgoKSG1tLCB0aGF0IHJlZ2V4IEkgd2FzIHRyeWluZyB0byB1c2XigKYgaXQganVzdCB3YXNuJiMzOTt0IGN1dHRpbmcgaXQuIEl0JiMzOTtzIGJlY29taW5nIHRvbyBjb21wbGV4IGFuZCBub3QgZG9pbmcgdGhlIGpvYi4gWW91IGtub3cgaG93IGl0IGlzOyBzb21ldGltZXMgeW91IG92ZXJ0aGluayB0aGluZ3MuIFJhdGhlciB0aGFuIGJhbmdpbmcgbXkgaGVhZCBhZ2FpbnN0IHRoaXMgY29tcGxleCBwYXR0ZXJuLCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0tlZXAgaXQgc2ltcGxlLCBzdHVwaWQhJiMzNDsgQSBzaW1wbGUgYGdyZXAgLXYgc3RhdGljYCBvbiB0aGUgZnVuY3Rpb25zIHNob3VsZCBkbyB0aGUgdHJpY2suIEl0IHNob3VsZCBlZmZpY2llbnRseSBmaWx0ZXIgb3V0IHRob3NlIGBzdGF0aWNgIGZ1bmN0aW9ucywgZ2l2aW5nIG1lIHdoYXQgSSBuZWVkIHdpdGhvdXQgdGhlIHJlZ2V4IGhlYWRhY2hlLiBTb21ldGltZXMgdGhlIG1vc3QgZWxlZ2FudCBzb2x1dGlvbiBpcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgb25lLCBlc3BlY2lhbGx5IHdoZW4gdGltZSBpcyBvZiB0aGUgZXNzZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpdLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xOTItXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTkzOnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk0LVx0dTggKndkYXRhLCBpbnQgd3NpemUsIHU4ICpyZGF0YSwgaW50IHJzaXplKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTU6c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk2LVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xOTgtI2RlZmluZSBDWEFDUlVfX0FUVFJfSU5JVChfbmFtZSkgXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTk6c3RhdGljIERFVklDRV9BVFRSX1JPKF9uYW1lKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDEtI2RlZmluZSBDWEFDUlVfQ01EX0lOSVQoX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjAyOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhfbmFtZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDMtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA0LSNkZWZpbmUgQ1hBQ1JVX1NFVF9JTklUKF9uYW1lKSBcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIwNTpzdGF0aWMgREVWSUNFX0FUVFJfV08oX25hbWUpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA2LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwNy0jZGVmaW5lIENYQUNSVV9BVFRSX0lOSVQoX3ZhbHVlLCBfdHlwZSwgX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjA4OnN0YXRpYyBzc2l6ZV90IF9uYW1lIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA5LVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXFxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MjE5PUNYQUNSVV9fQVRUUl9JTklUKF9uYW1lKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMzAtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjMxOnN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl91MzIodTMyIHZhbHVlLCBjaGFyICpidWYpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjMyLXtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjM1LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIzNjpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfczgoczggdmFsdWUsIGNoYXIgKmJ1ZilcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMzcte1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNDAtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjQxOnN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl9kQihzMTYgdmFsdWUsIGNoYXIgKmJ1ZilcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNDIte1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNTItXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjUzOnN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl9ib29sKHUzMiB2YWx1ZSwgY2hhciAqYnVmKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTI1NC17XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTI2MS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyNjI6c3RhdGljIHNzaXplX3QgY3hhY3J1X3N5c2ZzX3Nob3dhdHRyX0xJTksodTMyIHZhbHVlLCBjaGFyICpidWYpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjYzLXtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjcwLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjI3MTpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfTElORSh1MzIgdmFsdWUsIGNoYXIgKmJ1ZilcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNzIte1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yODEtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjgyOnN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl9NT0RVKHUzMiB2YWx1ZSwgY2hhciAqYnVmKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTI4My17XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMwMi0gKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMDM6c3RhdGljIHNzaXplX3QgbWFjX2FkZHJlc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzA0LVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE0LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMxNTpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMxNi1cdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMzI6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMzLVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00MzQtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NDM1OnN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00MzYtXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU3MD1BVFRSSUJVVEVfR1JPVVBTKGN4YWNydSk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU3Mi0vKiB0aGUgZm9sbG93aW5nIHRocmVlIGZ1bmN0aW9ucyBhcmUgc3RvbGVuIGZyb20gZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo1NzM6c3RhdGljIHZvaWQgY3hhY3J1X2Jsb2NraW5nX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU3NC17XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU3OD1zdHJ1Y3QgY3hhY3J1X3RpbWVyIHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNTgyLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjU4MzpzdGF0aWMgdm9pZCBjeGFjcnVfdGltZW91dF9raWxsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU4NC17XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU4OS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo1OTA6c3RhdGljIGludCBjeGFjcnVfc3RhcnRfd2FpdF91cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01OTEtXHRcdFx0XHQgaW50ICphY3R1YWxfbGVuZ3RoKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy02MDctXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NjA4OnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA5LVx0XHQgICAgIHU4ICp3ZGF0YSwgaW50IHdzaXplLCB1OCAqcmRhdGEsIGludCByc2l6ZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzA5LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcxMDpzdGF0aWMgaW50IGN4YWNydV9jbV9nZXRfYXJyYXkoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MTEtXHRcdFx0ICAgICAgIHUzMiAqZGF0YSwgaW50IHNpemUpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc1OS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3NjA6c3RhdGljIGludCBjeGFjcnVfY2FyZF9zdGF0dXMoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NjEte1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NzAtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzcxOnN0YXRpYyBpbnQgY3hhY3J1X2F0bV9zdGFydChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NzItXHRcdHN0cnVjdCBhdG1fZGV2ICphdG1fZGV2KVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MTktXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODIwOnN0YXRpYyB2b2lkIGN4YWNydV9wb2xsX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODIxLXtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtOTM2LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjkzNzpzdGF0aWMgaW50IGN4YWNydV9mdyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgZW51bSBjeGFjcnVfZndfcmVxdWVzdCBmdyxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy05MzgtXHRcdCAgICAgdTggY29kZTEsIHU4IGNvZGUyLCB1MzIgYWRkciwgY29uc3QgdTggKmRhdGEsIGludCBzaXplKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy05ODUtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6OTg2OnN0YXRpYyBpbnQgY3hhY3J1X2ZpbmRfZmlybXdhcmUoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy05ODctXHRcdFx0XHRjaGFyICpwaGFzZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZndfcClcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTAwNS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMDA2OnN0YXRpYyBpbnQgY3hhY3J1X2hlYXZ5X2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTAwNy1cdFx0XHQgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaW50Zilcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEyMS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTIyOnN0YXRpYyBpbnQgY3hhY3J1X2JpbmQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEyMy1cdFx0ICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEyMzEtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTIzMjpzdGF0aWMgdm9pZCBjeGFjcnVfdW5iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEyMzMtXHRcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xMzQyPXN0YXRpYyBzdHJ1Y3QgdXNiYXRtX2RyaXZlciBjeGFjcnVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMzUzLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEzNTQ6c3RhdGljIGludCBjeGFjcnVfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzNTUtXHRcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTM3NT1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3hhY3J1X3VzYl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzODItXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTM4Mzptb2R1bGVfdXNiX2RyaXZlcihjeGFjcnVfdXNiX2RyaXZlcik7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTM4NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNzUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgRW50cnkgUG9pbnRzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZzogYWxsIHRoZSBmdW5jdGlvbiBwb2ludGVycyBJJiMzOTttIGxvb2tpbmcgYXQgYXJlIHN0YXRpYywgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIEluc3RlYWQgb2YgZm9sbG93aW5nIGR5bmFtaWMgY2FsbHMsIEkgY2FuIGp1c3QgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBleHBsaWNpdGx5IGxpc3RlZCBhcyBlbnRyeSBwb2ludHMgZm9yIHRoZSBkcml2ZXIuIEkgbmVlZCB0byBkb2N1bWVudCB0aGVzZSwgc28gaGVyZSYjMzk7cyBhIGNvbmNpc2UgbGlzdDoKCiogICBgY3hhY3J1X2JpbmRgCiogICBgY3hhY3J1X2hlYXZ5X2luaXRgCiogICBgY3hhY3J1X2F0bV9zdGFydGAKKiAgIGBjeGFjcnVfdXNiX3Byb2JlYAoKV2FpdCwgdGhhdCBsYXN0IG9uZSwgYGN4YWNydV91c2JfcHJvYmVgLCBpcyBhbiBlbnRyeSBwb2ludC4gVGhhdCYjMzk7cyBnb29kIHRvIG5vdGUsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGN4YWNydV91c2JfcHJvYmVgIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzU0Olx0c3RhdGljIGludCBjeGFjcnVfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuMTM1NTpcdFx0XHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4xMzU2Olx0e1xuMTM1NzpcdFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuMTM1ODpcdFx0Y2hhciBidWZbMTVdO1xuMTM1OTpcdFxuMTM2MDpcdFx0LyogQXZvaWQgQURTTCByb3V0ZXJzIChjeDgyMzEwX2V0aCkuXG4xMzYxOlx0XHQgKiBBYm9ydCBpZiBiRGV2aWNlQ2xhc3MgaXMgMHhmZiBhbmQgaVByb2R1Y3QgaXMgXCYjMzQ7VVNCIE5FVCBDQVJEXCYjMzQ7LlxuMTM2MjpcdFx0ICovXG4xMzYzOlx0XHRpZiAodXNiX2Rldi1cdTAwM2VkZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSBVU0JfQ0xBU1NfVkVORE9SX1NQRUNcbjEzNjQ6XHRcdFx0XHRcdTAwMjZcdTAwMjYgdXNiX3N0cmluZyh1c2JfZGV2LCB1c2JfZGV2LVx1MDAzZWRlc2NyaXB0b3IuaVByb2R1Y3QsXG4xMzY1Olx0XHRcdFx0XHRidWYsIHNpemVvZihidWYpKSBcdTAwM2UgMCkge1xuMTM2NjpcdFx0XHRpZiAoIXN0cmNtcChidWYsIFwmIzM0O1VTQiBORVQgQ0FSRFwmIzM0OykpIHtcbjEzNjc6XHRcdFx0XHRkZXZfaW5mbyhcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCYjMzQ7aWdub3JpbmcgY3g4MjMxMF9ldGggZGV2aWNlXFxuXCYjMzQ7KTtcbjEzNjg6XHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjEzNjk6XHRcdFx0fVxuMTM3MDpcdFx0fVxuMTM3MTpcdFxuMTM3MjpcdFx0cmV0dXJuIHVzYmF0bV91c2JfcHJvYmUoaW50ZiwgaWQsIFx1MDAyNmN4YWNydV9kcml2ZXIpO1xuMTM3MzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ1hBQ1JVIERyaXZlcioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSBmbG93LCBgY3hhY3J1X3VzYl9wcm9iZWAgaGFuZHMgb2ZmIHRvIGB1c2JhdG1fdXNiX3Byb2JlYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoYXQgbWVhbnMgZnVuY3Rpb25zIGxpa2UgYGN4YWNydV9iaW5kYCwgYGN4YWNydV9oZWF2eV9pbml0YCwgYW5kIHVsdGltYXRlbHksIGBjeGFjcnVfYXRtX3N0YXJ0YCBhcmUgYWxsIHJlYXNvbmFibGUgcGxhY2VzIHRvIHRhcmdldC4gSSBsaWtlIHRoZSBsb2dpY2FsIHByb2dyZXNzaW9uIGhlcmUuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgY3hhY3J1X2NtYC4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBwYXRjaCBhZ2Fpbi4gQWgsIHllcywgdGhlIGFkZGl0aW9uIG9mIGB1c2Jfa2lsbF91cmIoaW5zdGFuY2UtJmd0O3Jjdl91cmIpO2Agd2hlbiBgcmV0ICZsdDsgMGAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGVycm9yLWhhbmRsaW5nIG1lY2hhbmlzbSwgYW5kICpkZWZpbml0ZWx5KiByZWFjaGFibGUgdGhyb3VnaCBVU0IgZnV6emluZy4gVGhhdCYjMzk7cyBhIGdvb2QgZmluZCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgYSBrZXkgbGluZSBvZiBjb2RlIEkmIzM5O2xsIHdhbnQgdG8gZm9jdXMgb24uCgpMZXQgbWUgcXVpY2tseSBzdW1tYXJpemUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgdGhlbSBpbiBtaW5kLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYFVTQl9DWEFDUlVgLCBgVVNCX0FUTWAsIGFuZCB0aGUgYmFzZSBgQVRNYCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxheS4KCldhaXQuLi4gc29tZXRoaW5nIGp1c3Qgb2NjdXJyZWQgdG8gbWUsIGFuZCBpdCYjMzk7cyBpbXBvcnRhbnQuIERvZXMgYFVTQl9DWEFDUlVgIGhhdmUgYW55IGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQmIzM5O3MgaGVhZCBiYWNrIHRvIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBidWlsZCBvcHRpb25zLiBUaGlzIGNvbmZpZ3VyYXRpb24gY2hlY2sgaXMgY3JpdGljYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcGVlZHRjaC5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgVVNCX0NYQUNSVVxuICAzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBzdXBwb3J0XCYjMzQ7XG4gIDM0Olx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gQURTTCBVU0IgbW9kZW0gYmFzZWQgb24gdGhlIENvbmV4YW50XG4gIDM3Olx0XHQgIEFjY2Vzc1J1bm5lciBjaGlwc2V0LiAgSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0b1xuICAzODpcdFx0ICBpbnN0YWxsIHRoZSBmaXJtd2FyZSwgZXh0cmFjdGVkIGJ5IHRoZSB1c2VyIHNwYWNlIHRvb2xzOyBzZWVcbiAgMzk6XHRcdCAgXHUwMDNjaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlIGZvciBkZXRhaWxzLlxuICA0MDpcdFxuICA0MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNDI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4YWNydS5cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgVVNCX1VFQUdMRUFUTVxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7QURJIDkzMCBhbmQgZWFnbGUgVVNCIERTTCBtb2RlbVwmIzM0O1xuICA0NjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFEU0wgVVNCIG1vZGVtIGJhc2VkIG9uIHRoZSBBREkgOTMwXG4gIDQ5Olx0XHQgIG9yIGVhZ2xlIGNoaXBzZXQuIEluIG9yZGVyIHRvIHVzZSB5b3VyIG1vZGVtIHlvdSB3aWxsIG5lZWQgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NzUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kLCB3aGlsZSBpdCBkb2VzbiYjMzk7dCAqZGlyZWN0bHkqIHN0YXRlICYjMzQ7ZGVwZW5kcyBvbiwmIzM0OyB0aGUgc3RydWN0dXJlIHBsYWNlcyBpdCB3aXRoaW4gYW4gYGlmIFVTQl9BVE1gIGJsb2NrLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LiBOb3csIGBVU0JfQVRNYCwgSSByZW1lbWJlciwgaW4gdHVybiwgKmRvZXMqIGRlcGVuZCBvbiBgQVRNYC4gU28sIHB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyLCB0aGUgZWZmZWN0aXZlIGNvbmZpZ3VyYXRpb24gY2hhaW4gaGVyZSBpcyBgVVNCX0NYQUNSVWAgKHRoZSBvbmUgSSB3YXMgaW5pdGlhbGx5IGludGVyZXN0ZWQgaW4pLCBuZXN0ZWQgdW5kZXIgYFVTQl9BVE1gLCB3aGljaCBpdHNlbGYgaXMgY29udGluZ2VudCBvbiBgQVRNYCBiZWluZyBzZXQuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaXTigJlzIGFsd2F5cyB3aXNlIHRvIGRvdWJsZS1jaGVjayB0aGUgZm91bmRhdGlvbmFsIGRlcGVuZGVuY2llcy4gVGltZSB0byBjb25maXJtIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgdGhhdCBgQVRNYCBpdHNlbGYgcmVsaWVzIHVwb24sIGVuc3VyaW5nIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGNvbXBsaWNhdGlvbnMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL0tjb25maWctNS1cbm5ldC9hdG0vS2NvbmZpZzo2OmNvbmZpZyBBVE1cbm5ldC9hdG0vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7QXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcJiMzNDtcbi0tXG5uZXQvYXRtL0tjb25maWctMjEtXG5uZXQvYXRtL0tjb25maWc6MjI6Y29uZmlnIEFUTV9CUjI2ODRcbm5ldC9hdG0vS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O1JGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1wmIzM0O1xuLS1cbm5ldC9hdG0vS2NvbmZpZy0zMC1cbm5ldC9hdG0vS2NvbmZpZzozMTpjb25maWcgQVRNX0JSMjY4NF9JUEZJTFRFUlxubmV0L2F0bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtQZXItVkMgSVAgZmlsdGVyIGtsdWRnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAxNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBBVE0gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBVE0gd2l0aGluIHRoaXMga2VybmVsIGJ1aWxkLiAmIzM0O25ldC9hdG0vS2NvbmZpZyYjMzQ7IGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIGFscmVhZHkga25vdyB0aGlzIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIGNvZGluZyBzdHlsZSwgc28gSSBjYW4gaW1tZWRpYXRlbHkgYXNzdW1lIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIEFUTSBzdXBwb3J0IGFyZSBtYW5hZ2VkLiBObyBuZWVkIGZvciBhbnkgaGFuZGhvbGRpbmcgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNraW0gdGhlIGZpbGUsIGxvb2tpbmcgZm9yIHRoZSBrZXkgdmFyaWFibGVzLCB0aGVpciBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBnb3Zlcm5pbmcgdGhlaXIgaW5jbHVzaW9uLiBJIG5lZWQgdG8gYXNjZXJ0YWluIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBjdXN0b21pemF0aW9uIGF0IGNvbXBpbGUgdGltZS4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUsIHJlYWxseS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgZmFtaWxpYXIgYGNvbmZpZ2Aga2V5d29yZHMsIHRoZSBgYm9vbGAsIGB0cmlzdGF0ZWAsIGFuZCBgc3RyaW5nYCBkZWZpbml0aW9ucy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzIOKAkyB0aGUgb3RoZXIgS2NvbmZpZyBzeW1ib2xzIHRoYXQgQVRNIGZ1bmN0aW9uYWxpdHkgcmVsaWVzIHVwb24sIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBvcHRpb25zLCBhbmQgb2YgY291cnNlIGFueSBtb2R1bGUgc3VwcG9ydCBjb25zaWRlcmF0aW9ucy4gVGhpcyBpcyBqdXN0IHRoZSBpbml0aWFsIHJlY29ubmFpc3NhbmNlOyBJJiMzOTtsbCBtb3ZlIG9uIHRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gY29kZSBvbmNlIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBBVE1cbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0FzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXG4gIDEwOlx0XHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXG4gIDExOlx0XHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxuICAxMjpcdFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBJbiBvcmRlciB0byBwYXJ0aWNpcGF0ZSBpbiBhbiBBVE0gbmV0d29yaywgeW91ciBMaW51eCBib3ggbmVlZHMgYW5cbiAgMTU6XHRcdCAgQVRNIG5ldHdvcmtpbmcgY2FyZC4gSWYgeW91IGhhdmUgdGhhdCwgc2F5IFkgaGVyZSBhbmQgdG8gdGhlIGRyaXZlclxuICAxNjpcdFx0ICBvZiB5b3VyIEFUTSBjYXJkIGJlbG93LlxuICAxNzpcdFxuICAxODpcdFx0ICBOb3RlIHRoYXQgeW91IG5lZWQgYSBzZXQgb2YgdXNlci1zcGFjZSBwcm9ncmFtcyB0byBhY3R1YWxseSBtYWtlIHVzZVxuICAxOTpcdFx0ICBvZiBBVE0uICBTZWUgdGhlIGZpbGUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnJzdFx1MDAzZSBmb3JcbiAgMjA6XHRcdCAgZnVydGhlciBkZXRhaWxzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjYwNAoJCQkJCQkJb3V0cHV0OiAxMjQKCQkJCQkJCXRob3VnaHRzOiA0NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgQVRNYCBpcyBpbmRlcGVuZGVudCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZSBgVVNCX0NYQUNSVWAsIGBVU0JfQVRNYCwgYW5kIGBBVE1gLiBUaGUgY3J1Y2lhbCBzeW1ib2xzIGhlcmUgYXJlIGBjeGFjcnVfaGVhdnlfaW5pdGAsIGBjeGFjcnVfYXRtX3N0YXJ0YCwgYGN4YWNydV9iaW5kYCwgYW5kIGBjeGFjcnVfdXNiX3Byb2JlYC4gSSBub3RpY2VkIHRoYXQgYGN4YWNydV9jbWAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGhpZ2hsaWdodHMgcHJlZmVycmluZyBub24tc3RhdGljIGZ1bmN0aW9ucy4gQnV0LCBzaW5jZSB0aGUgc3RhdGljIGZ1bmN0aW9ucyBtZW50aW9uZWQgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB0aGV5IGFyZSAqbm90KiBpbmxpbmVkIGFuZCBkbyBoYXZlIGRpc3RpbmN0IGFkZHJlc3NlczsgdGhlcmVmb3JlLCB0aGV5IHNob3VsZCBiZSBwcmVmZXJyZWQuIEdvb2QuCgpJIHF1aWNrbHkgZG91YmxlLWNoZWNrZWQgdGhlIGRlcGVuZGVuY2llcy4gYEZXX0xPQURFUmAgaXMgc2VsZWN0ZWQgdGhyb3VnaCBgVVNCX0NYQUNSVWAsIGFuZCBgQ1JDMzJgIGNvbWVzIGZyb20gYFVTQl9BVE1gLiBTbywgSSBkb24mIzM5O3QgbmVlZCB0byBleHBsaWNpdGx5IGRlZmluZSB0aG9zZS4KCk5vdywgcmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGYuIEFoLCB0aGlzIGlzIGEgY2xlYXIgYnVnIGZpeC4gSXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIGByY3ZfdXJiYCBpcyBsZWZ0IGFjdGl2ZSBpZiBgY3hhY3J1X2NtYCBmYWlscy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIHBhdGNoLCB3aGljaCBtYWtlcyBpdCBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBTZWVtcyBsaWtlIGEgbGVnaXRpbWF0ZSBmaXgsIGFuZCB3b3J0aCB0aGUgdGltZS4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DWEFDUlUmIzM0OywKICAgICYjMzQ7VVNCX0FUTSYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjeGFjcnVfaGVhdnlfaW5pdCYjMzQ7LAogICAgJiMzNDtjeGFjcnVfYXRtX3N0YXJ0JiMzNDssCiAgICAmIzM0O2N4YWNydV9iaW5kJiMzNDssCiAgICAmIzM0O2N4YWNydV91c2JfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGN4YWNydSBVU0IgQVRNIGRyaXZlciB0byBraWxsIHRoZSByZWNlaXZlIFVSQiBpZiB0aGUgY29tbWFuZCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgVVNCIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0NYQUNSVSYjMzQ7LAogICAgJiMzNDtVU0JfQVRNJiMzNDssCiAgICAmIzM0O0FUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N4YWNydV9oZWF2eV9pbml0JiMzNDssCiAgICAmIzM0O2N4YWNydV9hdG1fc3RhcnQmIzM0OywKICAgICYjMzQ7Y3hhY3J1X2JpbmQmIzM0OywKICAgICYjMzQ7Y3hhY3J1X3VzYl9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY3hhY3J1IFVTQiBBVE0gZHJpdmVyIHRvIGtpbGwgdGhlIHJlY2VpdmUgVVJCIGlmIHRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFVTQiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6MTMuMDM1NDc3MjI4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDA0NzM3MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9DWEFDUlVcIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIkFUTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN4YWNydV9oZWF2eV9pbml0XCIsXG4gICAgXCJjeGFjcnVfYXRtX3N0YXJ0XCIsXG4gICAgXCJjeGFjcnVfYmluZFwiLFxuICAgIFwiY3hhY3J1X3VzYl9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIgdG8ga2lsbCB0aGUgcmVjZWl2ZSBVUkIgaWYgdGhlIGNvbW1hbmQgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIFVTQiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgVVNCIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjEzLjAzNTQ4MzMxOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2OTE5MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzJjZjkxOTg3ZjA3Y2M3YThiYmVlMDQ5Y2RiNDFmZjhiZDk4ZDFlOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAxMjoyNzoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcXG5pbmRleCBmMTkwMGM1NjdiYTQxLi40MjlhYzIwYTg5OTlmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xcbkBAIC03MDAsNiArNzAwLDggQEAgc3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcXG4gXFx0cmV0ID0gb2ZmZDtcXG4gXFx0dXNiX2RiZyhpbnN0YW5jZS1cXHUwMDNldXNiYXRtLCBcXFwiY20gJSN4XFxcXG5cXFwiLCBjbSk7XFxuIGZhaWw6XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHR1c2Jfa2lsbF91cmIoaW5zdGFuY2UtXFx1MDAzZXJjdl91cmIpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VjbV9zZXJpYWxpemUpO1xcbiBlcnI6XFxuIFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjEzLjMyNDAzNjcxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMTcxNjE2OTQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfQ1hBQ1JVXCIsXG4gICAgXCJVU0JfQVRNXCIsXG4gICAgXCJBVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjeGFjcnVfaGVhdnlfaW5pdFwiLFxuICAgIFwiY3hhY3J1X2F0bV9zdGFydFwiLFxuICAgIFwiY3hhY3J1X2JpbmRcIixcbiAgICBcImN4YWNydV91c2JfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY3hhY3J1IFVTQiBBVE0gZHJpdmVyIHRvIGtpbGwgdGhlIHJlY2VpdmUgVVJCIGlmIHRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFVTQiBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMmNmOTE5ODdmMDdjYzdhOGJiZWUwNDljZGI0MWZmOGJkOThkMWU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTI6Mjc6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcbmluZGV4IGYxOTAwYzU2N2JhNDEuLjQyOWFjMjBhODk5OWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcbisrKyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuQEAgLTcwMCw2ICs3MDAsOCBAQCBzdGF0aWMgaW50IGN4YWNydV9jbShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxuIFx0cmV0ID0gb2ZmZDtcbiBcdHVzYl9kYmcoaW5zdGFuY2UtXHUwMDNldXNiYXRtLCBcImNtICUjeFxcblwiLCBjbSk7XG4gZmFpbDpcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHVzYl9raWxsX3VyYihpbnN0YW5jZS1cdTAwM2VyY3ZfdXJiKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZpbnN0YW5jZS1cdTAwM2VjbV9zZXJpYWxpemUpO1xuIGVycjpcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyNzoxMy4zMjQwMzg2MzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIzOTEyMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgVVNCLUFUTSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy91c2IvYXRtL2N4YWNydS5jYC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBgdXNiX2tpbGxfdXJiKGluc3RhbmNlLVx1MDAzZXJjdl91cmIpO2Agd2l0aGluIHRoZSBgY3hhY3J1X2NtYCBmdW5jdGlvbiwgdHJpZ2dlcmVkIHdoZW4gYHJldCBcdTAwM2MgMGAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGBjeGFjcnVfY21gIGl0c2VsZiB3aXRoaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlIGFuZCBob3cgaXQgaGFuZGxlcyBlcnJvcnMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9uIG9mIHRoaXMga2lsbCBvcGVyYXRpb24gb24gdGhlIHJlY2VpdmUgVVJCLiBJcyB0aGlzIGEgY3JpdGljYWwgZXJyb3IgcGF0aD8gSXMgdGhpcyBhIGdvb2QgcGxhY2UgdG8ga2lsbCB0aGUgVVJCIG9yIHNob3VsZCBpdCBiZSBlYXJsaWVyPyBBbmQgd2hhdCBvdGhlciBVUkJzIGFyZSBpbiBmbGlnaHQgdGhhdCBhcmUgbm90IGtpbGxlZD8gSXQgYWxzbyBtYWtlcyBtZSB3b25kZXIgd2hhdCBgaW5zdGFuY2UtXHUwMDNlcmN2X3VyYmAgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjE3LjA0Nzk1MzU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjg4MzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjeGFjcnVfY21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz01OT1lbnVtIGN4YWNydV9md19yZXF1ZXN0IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MC0gKiBmaXJtd2FyZSBpcyBsb2FkZWQgICovXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcxOmVudW0gY3hhY3J1X2NtX3JlcXVlc3Qge1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03Mi1cXHRDTV9SRVFVRVNUX1VOREVGSU5FRCA9IDB4ODAsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTA4LSAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMDk6ZW51bSBjeGFjcnVfY21fZmxhc2gge1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTAtXFx0Q01fRkxBU0hfUkVBRCA9IDB4YTEsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0LS8qIHJlcGx5IGNvZGVzIHRvIHRoZSBjb21tYW5kcyBhYm92ZSAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTU6ZW51bSBjeGFjcnVfY21fc3RhdHVzIHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE2LVxcdENNX1NUQVRVU19VTkRFRklORUQsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTcwPXN0cnVjdCBjeGFjcnVfZGF0YSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTkyLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTM6c3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk0LVxcdHU4ICp3ZGF0YSwgaW50IHdzaXplLCB1OCAqcmRhdGEsIGludCByc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzMyPXN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1Ni1cXHRpZiAoIXN0cmNtcChzdHJfY21kLCBcXFwic3RvcFxcXCIpIHx8ICFzdHJjbXAoc3RyX2NtZCwgXFxcInJlc3RhcnRcXFwiKSkge1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNTc6XFx0XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUT1AsIE5VTEwsIDAsIE5VTEwsIDApO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTgtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNzYtXFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInN0YXJ0XFxcIikgfHwgIXN0cmNtcChzdHJfY21kLCBcXFwicmVzdGFydFxcXCIpKSB7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjM3NzpcXHRcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDApO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNzgtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz00MzU9c3RhdGljIHNzaXplX3QgYWRzbF9jb25maWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQ4MC1cXHRcXHRcXHRkYXRhWzBdID0gY3B1X3RvX2xlMzIobnVtKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NDgxOlxcdFxcdFxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0RBVEFfU0VULFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00ODItXFx0XFx0XFx0XFx0KHU4ICopIGRhdGEsIDQgKyBudW0gKiA4LCBOVUxMLCAwKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz01OTA9c3RhdGljIGludCBjeGFjcnVfc3RhcnRfd2FpdF91cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy02MDctXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjYwODpzdGF0aWMgaW50IGN4YWNydV9jbShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy02MDktXFx0XFx0ICAgICB1OCAqd2RhdGEsIGludCB3c2l6ZSwgdTggKnJkYXRhLCBpbnQgcnNpemUpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzA5LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MTA6c3RhdGljIGludCBjeGFjcnVfY21fZ2V0X2FycmF5KHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcxMS1cXHRcXHRcXHQgICAgICAgdTMyICpkYXRhLCBpbnQgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjMtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcyNDpcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIGNtLCBOVUxMLCAwLCAodTggKikgYnVmLCBidWZsZW4pO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI3LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3Mjg6XFx0LyogbGVuIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBsZW4gJSA0ID09IDAgZ3VhcmFudGVlZCBieSBjeGFjcnVfY20oKSAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjktXFx0bGVuID0gcmV0IC8gNDtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NjA9c3RhdGljIGludCBjeGFjcnVfY2FyZF9zdGF0dXMoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzYxLXtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzYyOlxcdGludCByZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfU1RBVFVTLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzYzLVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTc3MT1zdGF0aWMgaW50IGN4YWNydV9hdG1fc3RhcnQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzgxLVxcdC8qIFJlYWQgTUFDIGFkZHJlc3MgKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzgyOlxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0dFVF9NQUNfQUREUkVTUywgTlVMTCwgMCxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzgzLVxcdFxcdFxcdGF0bV9kZXYtXFx1MDAzZWVzaSwgc2l6ZW9mKGF0bV9kZXYtXFx1MDAzZWVzaSkpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5MC1cXHRtdXRleF9sb2NrKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3OTE6XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzkyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTgyMD1zdGF0aWMgdm9pZCBjeGFjcnVfcG9sbF9zdGF0dXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgyOS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODMwOlxcdHJldCA9IGN4YWNydV9jbV9nZXRfYXJyYXkoaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9JTkZPX0dFVCwgYnVmLCBDWElORl9NQVgpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MzEtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xMDA2PXN0YXRpYyBpbnQgY3hhY3J1X2hlYXZ5X2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwMS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTEwMjpcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfU1RBVFVTLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwMy1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyNzoxNy4yMjA4NDE3MzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTkyMDQyNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBBVE0gRHJpdmVyIFVwZGF0ZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBgdXNiX2tpbGxfdXJiYCBjYWxsIHdpdGhpbiB0aGUgYGN4YWNydV9jbWAgZnVuY3Rpb24uIEludGVyZXN0aW5nLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgVVNCIEFUTSBkcml2ZXIgY29udGV4dC4gVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgY3hhY3J1YC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMuIEZpcnN0LCBJ4oCZbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGN4YWNydWAgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY2hlY2sgaXRzIEtjb25maWcgZW50cnkgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgb3IgcmVzb3VyY2UgY2xlYW51cCB3aXRoaW4gdGhlIFVTQiBjb21tdW5pY2F0aW9uIGZsb3csIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjIwLjgxMjg4NzMwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTM5MDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjeGFjcnVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWc9MzI9Y29uZmlnIFVTQl9DWEFDUlVcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTQxLVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6NDI6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3hhY3J1LlxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTQzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyNzoyMC44NTQyODcyMzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ1OTkyNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFVTQl9DWEFDUlUgS2NvbmZpZyBFbnRyeSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgcmlnaHQgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZ2V0IHRoZSBjb21wbGV0ZSBLY29uZmlnIGVudHJ5IGZvciBgVVNCX0NYQUNSVWAuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCB0aGUgZnVsbCBjb250ZXh0LiBJJ20gdGhpbmtpbmcgSSB3YW50IHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCB2YWx1ZSwgdGhlIGhlbHAgdGV4dCwgYW5kIGFueSBvdGhlciByZWxldmFudCBtZXRhZGF0YSBzdXJyb3VuZGluZyBpdC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcIndoeVwiIGFuZCBcIndoZW5cIiB0aGlzIG9wdGlvbiBpcyByZWxldmFudC5cblxuSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUsIGJlY2F1c2UgSSBrbm93IHRoYXQgYSBzaW5nbGUgbGluZSBpbiBhIGBLY29uZmlnYCBmaWxlIGNhbiBiZSBkZWNlcHRpdmVseSBzaW1wbGUuIEknbSBhZnRlciB0aGUgcmVsYXRpb25zaGlwcy4gRG9lcyBpdCBkZXBlbmQgb24gc3BlY2lmaWMgQ1BVIGFyY2hpdGVjdHVyZXM/IFdoYXQncyB0aGUgaW1wYWN0IG9uIG90aGVyIFVTQiBjb25maWd1cmF0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBVU0IgZHJpdmVycywgZXNwZWNpYWxseSBhbnkgbGlrZWx5IGNvbmZsaWN0cyBvciBpbnRlZ3JhdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBDWEFDUlUgZHJpdmVyIChvciByZWxhdGVkIGZ1bmN0aW9uYWxpdHkpIGlzIHN0cnVjdHVyZWQgaW4gdGVybXMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGZlYXR1cmVzLlxuXG5TbywgdGhlIGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgYFVTQl9DWEFDUlVgLiBPbmx5IHRoZW4gY2FuIEkgdHJ1bHkgYmVnaW4gdG8gYXNzZXNzIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTczLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6MjQuMzAwMjgyMzc4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3BlZWR0Y2guXFxuICAzMTpcXHRcXG4gIDMyOlxcdGNvbmZpZyBVU0JfQ1hBQ1JVXFxuICAzMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBzdXBwb3J0XFxcIlxcbiAgMzQ6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMzU6XFx0XFx0aGVscFxcbiAgMzY6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFEU0wgVVNCIG1vZGVtIGJhc2VkIG9uIHRoZSBDb25leGFudFxcbiAgMzc6XFx0XFx0ICBBY2Nlc3NSdW5uZXIgY2hpcHNldC4gIEluIG9yZGVyIHRvIHVzZSB5b3VyIG1vZGVtIHlvdSB3aWxsIG5lZWQgdG9cXG4gIDM4OlxcdFxcdCAgaW5zdGFsbCB0aGUgZmlybXdhcmUsIGV4dHJhY3RlZCBieSB0aGUgdXNlciBzcGFjZSB0b29sczsgc2VlXFxuICAzOTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vYWNjZXNzcnVubmVyLnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgNDI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3hhY3J1LlxcbiAgNDM6XFx0XFxuICA0NDpcXHRjb25maWcgVVNCX1VFQUdMRUFUTVxcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIkFESSA5MzAgYW5kIGVhZ2xlIFVTQiBEU0wgbW9kZW1cXFwiXFxuICA0NjpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gQURTTCBVU0IgbW9kZW0gYmFzZWQgb24gdGhlIEFESSA5MzBcXG4gIDQ5OlxcdFxcdCAgb3IgZWFnbGUgY2hpcHNldC4gSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0b1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyNzoyNC4zMDAzNTcwMzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA3MTQ5ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipVU0IgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSBmb2N1c2luZyBvbiB0aGUgVVNCIGNvbmZpZ3VyYXRpb24gaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiB0aGlzIGBVU0JfQ1hBQ1JVYCBjb25maWcsIHRoYXQncyB3aGF0J3MgcGlxdWluZyBteSBpbnRlcmVzdCBhdCB0aGUgbW9tZW50LiBCdXQsIHlvdSBrbm93LCBteSBicmFpbidzIGFscmVhZHkgbWFraW5nIGNvbm5lY3Rpb25zLiBJJ20gd29uZGVyaW5nLCBhcyBhIG1hdHRlciBvZiBjb3Vyc2UsIGhvdyB0aGlzIGNvbm5lY3RzIG9yIGNvbnRyYXN0cyB3aXRoIGBVU0JfQVRNYD8gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgaXRzIHBvdGVudGlhbCByZWxhdGlvbnNoaXAsIGlmIGFueS4gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgdW5wYWNrIGBVU0JfQ1hBQ1JVYC4gVW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBsYW5kc2NhcGUgb2YgcmVsYXRlZCBVU0IgY29uZmlndXJhdGlvbnMsIGxpa2UgdGhlIEFUTSBjb25uZWN0aW9uLCBpcyBrZXkgdG8gZ2V0dGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gQWx3YXlzIHN0YXJ0IHdpdGggdGhlIGdlbmVyYWwsIHRoZW4gd29yayB0byB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTkxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyNzoyNy45MDc1MDk3MTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNDc4ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTUtXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6NjptZW51Y29uZmlnIFVTQl9BVE1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJVU0IgRFNMIG1vZGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjI3Ljk0ODk5NjYzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE2NDcxNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBVU0JfQVRNIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFVTQl9BVE1gLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiV2hhdCBhcmUgdGhlICprZXkqIGNvbXBvbmVudHMgdGhhdCB0aGlzIHJlbGllcyB1cG9uP1wiIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBlbnRpcmUgbGFuZHNjYXBlLiBNeSBtaW5kJ3MgcnVubmluZyB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgYXJlYXM6IGtlcm5lbCBtb2R1bGVzLCBkZXZpY2UgZHJpdmVycywgcGVyaGFwcyBzb21lIHVzZXJzcGFjZSB1dGlsaXRpZXMsIGFuZCBkZWZpbml0ZWx5IHNvbWUgY3J1Y2lhbCBsaWJyYXJpZXMuIFRoaXMgaXNuJ3QganVzdCBhIHNpbXBsZSBtb2R1bGU7IGl0J3MgYWxtb3N0IGNlcnRhaW5seSBpbnRlcmFjdGluZyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnMgKEhBTHMpLCBhbmQgcG9zc2libHkgZXZlbiBzcGVjaWZpYyBBVE0gaGFyZHdhcmUgaWYgaXQncyBub3QgcHVyZWx5IGEgc29mdHdhcmUgaW1wbGVtZW50YXRpb24uIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGF0IG90aGVyIG1vZHVsZXMgYXJlIHJlcXVpcmVkLCB3aGF0IEFQSXMgaXQgZXhwb3NlcywgYW5kIGlmIGl0J3MgYnVpbHQgb24gdG9wIG9mIG1vcmUgZnVuZGFtZW50YWwgbmV0d29ya2luZyBsYXllcnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjaGFpbiByZWFjdGlvbiBhbmQgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLiBXaGVyZSBpcyB0aGUgcG90ZW50aWFsIGZvciBjb25mbGljdHMsIGFuZCB3aGF0IHZlcnNpb25zIGRvIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gS25vd2luZyB0aGUgY29tcGxldGUgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSB0cm91Ymxlc2hvb3Rpbmcgb3Igc3lzdGVtIGRlc2lnbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyNzozMi4yNjU0NzA3NTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVTQi9BVE0gRFNMIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBVU0JfQVRNXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIERTTCBtb2RlbSBzdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBBVE1cXG4gICA5OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBVU0IgRGlnaXRhbCBTdWJzY3JpYmVyIExpbmUgKERTTClcXG4gIDEyOlxcdFxcdCAgbW9kZW0gdG8geW91ciBjb21wdXRlcidzIFVTQiBwb3J0LiAgWW91IHdpbGwgdGhlbiBuZWVkIHRvIGNob29zZSB5b3VyXFxuICAxMzpcXHRcXHQgIG1vZGVtIGZyb20gdGhlIGxpc3QgYmVsb3cuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAxNjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JhdG0uXFxuICAxNzpcXHRcXG4gIDE4OlxcdGlmIFVTQl9BVE1cXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIFVTQl9TUEVFRFRPVUNIXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjMyLjI2NTU0MDcyM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTEzNjE3MzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlcGVuZGVuY3kgQW5hbHlzaXMgYW5kIEZ1bmN0aW9uIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0J3MgY2xlYXIgdGhhdCBgVVNCX0FUTWAgcmVsaWVzIG9uIGBBVE1gLCBhbmQgYFVTQl9DWEFDUlVgIGhhcyBhIGRlcGVuZGVuY3kgb24gYFVTQl9BVE1gLiAgVGhhdCB0ZWxscyBtZSByaWdodCBhd2F5IHRoYXQgaWYgSSdtIHdvcmtpbmcgd2l0aCBgVVNCX0NYQUNSVWAsIEknbSBpbXBsaWNpdGx5IGRlYWxpbmcgd2l0aCBgQVRNYCBhbmQgYFVTQl9BVE1gIGFzIHdlbGwuICBTbywgaW4gdGVybXMgb2YgZGVwZW5kZW5jaWVzLCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYEFUTWAsIGBVU0JfQVRNYCwgYW5kIGBVU0JfQ1hBQ1JVYCBhcmUgYWxsIGFjY291bnRlZCBmb3IuIFRoaXMgc2VlbXMgYmFzaWMgYnV0IGl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwLlxuXG5NeSBmb2N1cyBpcyBvbiB0aGUgYGN4YWNydV9jbWAgZnVuY3Rpb24uIExldCdzIHNlZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGdldHMgY2FsbGVkIGZyZXF1ZW50bHkgb3IgaWYgaXQncyBtb3JlIG9mIGFuIGluaXRpYWxpemF0aW9uIG9yIHNldHVwIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgbmFtZSwgYW5kIG15IGV4cGVyaWVuY2UsIGl0IHNlZW1zIGxpa2UgYSBcImNvbW1hbmRcIiBmdW5jdGlvbjsgbW9yZSBsaWtlbHkgdXNlZCBmb3IgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9yIHNvbWUga2luZCBvZiBjb250cm9sIG1lY2hhbmlzbSB0aGFuIGNvcmUgZGF0YSB0cmFuc2Zlci4gTm93IGxldCBtZSB0cmFjZSBpdHMgY2FsbHMgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAyMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjM3LjM3OTE2MDgyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MTI5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3hhY3J1X2NtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTk9ZW51bSBjeGFjcnVfZndfcmVxdWVzdCB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzAtICogZmlybXdhcmUgaXMgbG9hZGVkICAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MTplbnVtIGN4YWNydV9jbV9yZXF1ZXN0IHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzItXFx0Q01fUkVRVUVTVF9VTkRFRklORUQgPSAweDgwLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEwOC0gKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTA5OmVudW0gY3hhY3J1X2NtX2ZsYXNoIHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwLVxcdENNX0ZMQVNIX1JFQUQgPSAweGExLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNC0vKiByZXBseSBjb2RlcyB0byB0aGUgY29tbWFuZHMgYWJvdmUgKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTE1OmVudW0gY3hhY3J1X2NtX3N0YXR1cyB7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNi1cXHRDTV9TVEFUVVNfVU5ERUZJTkVELFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5Mi1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTkzOnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5NC1cXHR1OCAqd2RhdGEsIGludCB3c2l6ZSwgdTggKnJkYXRhLCBpbnQgcnNpemUpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMzMj1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTYtXFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInN0b3BcXFwiKSB8fCAhc3RyY21wKHN0cl9jbWQsIFxcXCJyZXN0YXJ0XFxcIikpIHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzU3OlxcdFxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVE9QLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzU4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzc2LVxcdGlmICghc3RyY21wKHN0cl9jbWQsIFxcXCJzdGFydFxcXCIpIHx8ICFzdHJjbXAoc3RyX2NtZCwgXFxcInJlc3RhcnRcXFwiKSkge1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNzc6XFx0XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzc4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NDM1PXN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00ODAtXFx0XFx0XFx0ZGF0YVswXSA9IGNwdV90b19sZTMyKG51bSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjQ4MTpcXHRcXHRcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9EQVRBX1NFVCxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDgyLVxcdFxcdFxcdFxcdCh1OCAqKSBkYXRhLCA0ICsgbnVtICogOCwgTlVMTCwgMCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTkwPXN0YXRpYyBpbnQgY3hhY3J1X3N0YXJ0X3dhaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA3LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo2MDg6c3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA5LVxcdFxcdCAgICAgdTggKndkYXRhLCBpbnQgd3NpemUsIHU4ICpyZGF0YSwgaW50IHJzaXplKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcwOS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzEwOnN0YXRpYyBpbnQgY3hhY3J1X2NtX2dldF9hcnJheShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MTEtXFx0XFx0XFx0ICAgICAgIHUzMiAqZGF0YSwgaW50IHNpemUpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzIzLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MjQ6XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBjbSwgTlVMTCwgMCwgKHU4ICopIGJ1ZiwgYnVmbGVuKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyNy1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzI4OlxcdC8qIGxlbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgbGVuICUgNCA9PSAwIGd1YXJhbnRlZWQgYnkgY3hhY3J1X2NtKCkgKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI5LVxcdGxlbiA9IHJldCAvIDQ7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzYwPXN0YXRpYyBpbnQgY3hhY3J1X2NhcmRfc3RhdHVzKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2MS17XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc2MjpcXHRpbnQgcmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX1NUQVRVUywgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2My1cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NzE9c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4MS1cXHQvKiBSZWFkIE1BQyBhZGRyZXNzICovXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc4MjpcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfTUFDX0FERFJFU1MsIE5VTEwsIDAsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4My1cXHRcXHRcXHRhdG1fZGV2LVxcdTAwM2Vlc2ksIHNpemVvZihhdG1fZGV2LVxcdTAwM2Vlc2kpKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTAtXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkxOlxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5Mi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz04MjA9c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MjktXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjgzMDpcXHRyZXQgPSBjeGFjcnVfY21fZ2V0X2FycmF5KGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfSU5GT19HRVQsIGJ1ZiwgQ1hJTkZfTUFYKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODMxLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTAwNj1zdGF0aWMgaW50IGN4YWNydV9oZWF2eV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMDEtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjExMDI6XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX1NUQVRVUywgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMDMtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6MzcuNDIyNjc4Nzc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDQwOTI2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDWEFDUlUgQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgcmVmZXJlbmNlcyBpbiBgY3hhY3J1X2F0bV9zdGFydGAsIGBjeGFjcnVfaGVhdnlfaW5pdGAsIGBjeGFjcnVfcG9sbF9zdGF0dXNgLCBgYWRzbF9zdGF0ZV9zdG9yZWAsIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgLiBHaXZlbiB0aGF0IGBjeGFjcnVfY21gIGlzIHN0YXRpYywgSSdtIGdvaW5nIHRvIHNldCB0aGF0IGFzaWRlIGZvciBub3c7IGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSB0aGUgY29yZSBpc3N1ZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRob3NlIG90aGVyIGZ1bmN0aW9ucy4gV2FpdCBhIHNlY29uZC4uLiBgY3hhY3J1X2F0bV9zdGFydGAgYW5kIGBjeGFjcnVfaGVhdnlfaW5pdGAgYXJlIGNhbGxiYWNrcy4gUmlnaHQsIHRoYXQgY2hhbmdlcyB0aGluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNhbGxiYWNrcy4gVGltZSB0byBkaWcgaW50byB0aGUgc3RydWN0IHRoZXkncmUgYXNzaWduZWQgdG8g4oCTIHRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGNydWNpYWwgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNzQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6NDEuNjI2NzczNzM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE3MjY1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjeGFjcnVfYXRtX3N0YXJ0fGN4YWNydV9oZWF2eV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzYwPXN0YXRpYyBpbnQgY3hhY3J1X2NhcmRfc3RhdHVzKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzcwLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3NzE6c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NzItXFx0XFx0c3RydWN0IGF0bV9kZXYgKmF0bV9kZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzg0LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc4NTpcXHRcXHRhdG1fZXJyKHVzYmF0bV9pbnN0YW5jZSwgXFxcImN4YWNydV9hdG1fc3RhcnQ6IENBUkRfR0VUX01BQ19BRERSRVNTIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODYtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc5MzpcXHRcXHRhdG1fZXJyKHVzYmF0bV9pbnN0YW5jZSwgXFxcImN4YWNydV9hdG1fc3RhcnQ6IENISVBfQURTTF9MSU5FX1NUQVJUIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTQtXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9OTg2PXN0YXRpYyBpbnQgY3hhY3J1X2ZpbmRfZmlybXdhcmUoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMDA1LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMDA2OnN0YXRpYyBpbnQgY3hhY3J1X2hlYXZ5X2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEwMDctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ludGYpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTM0Mj1zdGF0aWMgc3RydWN0IHVzYmF0bV9kcml2ZXIgY3hhY3J1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMzQ0LVxcdC5iaW5kXFx0XFx0PSBjeGFjcnVfYmluZCxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTM0NTpcXHQuaGVhdnlfaW5pdFxcdD0gY3hhY3J1X2hlYXZ5X2luaXQsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzNDYtXFx0LnVuYmluZFxcdFxcdD0gY3hhY3J1X3VuYmluZCxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTM0NzpcXHQuYXRtX3N0YXJ0XFx0PSBjeGFjcnVfYXRtX3N0YXJ0LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMzQ4LVxcdC5idWxrX2luXFx0PSBDWEFDUlVfRVBfREFUQSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6NDEuNjY4OTUzNDE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTI1NTU2NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIHRoZSBjeGFjcnUgRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGN4YWNydV9kcml2ZXJgIGlzIGEgYHVzYmF0bV9kcml2ZXJgLCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggQVRNIG92ZXIgVVNCLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNlZSBgY3hhY3J1X2JpbmRgLCBgY3hhY3J1X2hlYXZ5X2luaXRgLCBhbmQgYGN4YWNydV9hdG1fc3RhcnRgIGp1bXAgb3V0IGFzIGluaXRpYWwgZnV6emluZyB0YXJnZXRzLiBHb29kIGNhbmRpZGF0ZXMgdG8gc3RhcnQgd2l0aC5cblxuSG9sZCBvbi4uLiBJJ3ZlIGdvdCBzb21ldGhpbmcuIEkgc2VlIHRoYXQgYGN4YWNydV9jbWAgaXMgY2FsbGVkIGZyb20gYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgLiBBaGEsIHRoZXNlIGFyZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMhIFdlIG1pZ2h0IGdldCBzb21lIGludGVyZXN0aW5nIGVudHJ5IHBvaW50cyB0aHJvdWdoIHRob3NlLiBMZXQncyBtYWtlIGEgbm90ZSB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLiBPaCwgYW5kIGhlcmUgaXMgYGN4YWNydV9wb2xsX3N0YXR1c2AgYXMgYSB3b3JrcXVldWUgZnVuY3Rpb24uXG5cblNvLCB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSBhcmUgbG9va2luZyBsaWtlOiBgY3hhY3J1X2hlYXZ5X2luaXRgLCBgY3hhY3J1X2F0bV9zdGFydGAsIGBhZHNsX3N0YXRlX3N0b3JlYCwgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAuXG5cbk5vdywgbGV0J3MgcmV2aXNpdCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJdCdzIGNydWNpYWwgd2UgZ2V0IHRoZSBkZXBlbmRlbmNpZXMgcmlnaHQuIGBVU0JfQ1hBQ1JVYCBkZXBlbmRzIG9uIGBVU0JfQVRNYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBBVE1gLiBHb3QgaXQuIFdlIG5lZWQgdG8gZW5hYmxlIGBVU0JfQ1hBQ1JVYCwgYFVTQl9BVE1gLCBhbmQgYEFUTWAgaW4gdGhlIGtlcm5lbCBjb25maWcuIFdhaXQgYSBtaW51dGUuLi4gYFVTQl9DWEFDUlVgICpzZWxlY3RzKiBgRldfTE9BREVSYC4gVGhhdCdzIGltcG9ydGFudDsgd2UgY2FuIHRyaWdnZXIgYWRkaXRpb25hbCBjb2RlIHBhdGhzLlxuXG5BbHJpZ2h0LCBsZXQncyBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIGlzIFwiV29ydGhGdXp6aW5nXCIuIEl0IG1vZGlmaWVzIGEgVVNCIGRyaXZlciwgYW5kIHRoYXQgaXMgYSBtYWpvciBwbHVzIGluIG15IGJvb2suIFVTQiBkcml2ZXJzIGFyZSBuaWNlbHkgZnV6emFibGUgd2l0aCBlbXVsYXRlZCBkZXZpY2VzLCBsaWtlIGR1bW15X2hjZCBvciBTeXprYWxsZXIncyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIEFic29sdXRlbHksIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSBjb25maWdzIEknbSBlbmFibGluZyBhcmU6XG5cbiogICBgVVNCX0NYQUNSVWBcbiogICBgVVNCX0FUTWBcbiogICBgQVRNYFxuXG5BbmQgdGhlIGtleSBmdW5jdGlvbnMgSSdtIHRhcmdldGluZyBhcmU6XG5cbiogICBgY3hhY3J1X2hlYXZ5X2luaXRgXG4qICAgYGN4YWNydV9hdG1fc3RhcnRgXG4qICAgYGFkc2xfc3RhdGVfc3RvcmVgXG4qICAgYGFkc2xfY29uZmlnX3N0b3JlYFxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYGN4YWNydV9jbWAgaXMgc3RhdGljLCB3aGljaCBpdCBsb29rcyBsaWtlIGl0IGlzLiBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gZm9jdXMgb24gaXRzIGNhbGxlcnMuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHRoYXQgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGFyZSBub3Qgc3RhdGljLCBvciBpZiB0aGV5IGFyZSBzdGF0aWMgd2hhdCBhcmUgdGhlaXIgYXNzaWdubWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyOTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6NTMuNTk0NTEyNjUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzg1NDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZHNsX3N0YXRlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzE1PXN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMzI6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjUzLjY0ODM3NTI3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAxMDcxNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkV4YW1pbmluZyB0aGUgU3lzZnMgQXR0cmlidXRlIEFzc2lnbm1lbnQqKlxuXG5SaWdodCwgc28gdGhlc2UgdGhpbmdzIGFyZSBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIGluIGl0c2VsZi4gQnV0IHRoZXkgYXJlIGFsc28gZGVzaWduYXRlZCBhcyBgc3lzZnNgIHN0b3JlIGZ1bmN0aW9ucy4gVGhhdCBtZWFucyB0aGV5J3JlIGhvb2tlZCBpbnRvIHRoZSBzeXNmcyBpbmZyYXN0cnVjdHVyZSBzb21laG93LCBhc3NpZ25lZCB0byBgREVWSUNFX0FUVFJgIHN0cnVjdHVyZXMgbW9zdCBsaWtlbHkuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGFyZSB0aGV5IGFjdHVhbGx5ICpleHBvc2VkKiB0aHJvdWdoIHN5c2ZzPyBBcmUgdGhleSBzaG93aW5nIHVwIGFzIGF0dHJpYnV0ZXMgdW5kZXIgYSBkZXZpY2Ugbm9kZSwgYWxsb3dpbmcgdXMgdG8gcmVhZCBhbmQgd3JpdGUgdG8gdGhlbT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBhY3R1YWwgc3lzZnMgdHJlZSB0byBjb25maXJtIHRoZWlyIHZpc2liaWxpdHkgYW5kIHVuZGVyc3RhbmQgd2hhdCBlZmZlY3QgdGhleSdsbCBoYXZlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBleHBsb3JlIGhvdyB0aGV5IGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ2OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjU3LjI0OTQ0OTExMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg4Mzg2NDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVklDRV9BVFRSLiphZHNsX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6NTcuMzI4Mjk1MTM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjEwNzAxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIGRlYWxpbmcgd2l0aCBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGVzZSB0ZWNobmljYWwgdGVybXM6XG5cbioqQ2hlY2tpbmcgQmFjayBvbiBgYWRzbF9zdGF0ZV9zdG9yZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyByZXZpc2l0IHRoaXMuIEkga25vdyB3ZSd2ZSBsb29rZWQgYXQgaXQgYmVmb3JlLCBidXQgc29tZXRoaW5nIGlzIG5hZ2dpbmcgYXQgbWUuIFRpbWUgdG8gZG8gYSBxdWljayBzZWFyY2ggZm9yIGBhZHNsX3N0YXRlX3N0b3JlYCBhZ2Fpbi4gTmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgaW4gaXRzIGJlaGF2aW9yIG9yIGludGVyYWN0aW9ucy4gR290dGEga2VlcCBkaWdnaW5nOyBpdCdzIHByb2JhYmx5IGltcG9ydGFudCB0byB0aGUgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgd2hhdCB0dXJucyB1cCB0aGlzIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzA4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MDAuODg5MzY3NzQ5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjAzNjgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZHNsX3N0YXRlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzE1PXN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMzI6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI4OjAwLjkzMTQwODkwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIxNzQ1NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIHNlZSBob3cgSSBjYW4gc3VtbWFyaXplIHRoaXMgZm9yIGFuIGV4cGVydC4uLlxuXG4qKipcblxuKipNeSBBbmFseXRpY2FsIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBpcyB0byBlc3NlbnRpYWxseSB1bnBhY2sgYSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBhbmQgdGhlbiByZS1wcmVzZW50IGl0IGluIGEgY29uY2lzZSB3YXkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzPyBJdCdzIGFsbCBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBpbmhlcmVudCB1c2FnZS4gV2hhdCBpcyB0aGlzIHBpZWNlIG9mIHRleHQgKmZvcio/IEhvdyBpcyBpdCBpbnRlbmRlZCB0byBiZSB1c2VkIG9yIGhvdyBjYW4gaXQgYmUgdXNlZCwgZXZlbiBpZiBJJ20gbm90IGdpdmVuIGV4cGxpY2l0IGNvbnRleHQ/IFRvIGRpc3RpbGwgaXQgdG8gaXRzIGVzc2VuY2UgcmVxdWlyZXMgZ3Jhc3BpbmcgaXRzIHB1cnBvc2Ugd2l0aGluIGEgYnJvYWRlciBmcmFtZXdvcmsuIEknbSBmb2N1c2luZyBvbiB0aGUgJ2hvdycgYW5kICd3aHknIG9mIGl0cyBhcHBsaWNhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVuZGVkIGZ1bmN0aW9uLCB0aGUgaW1wbGljYXRpb25zIGFuZCB0aGUgY29yZSBjb25jZXB0cyBhdCBwbGF5IGFuZCB0aGVuIHByZXNlbnQgaXQgZWZmaWNpZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDE4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MDUuMDUzMTU2OTI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg1OlxcdFxcdFxcdFxcdHBvbGwgPSBDWFBPTExfUE9MTElORztcXG4gMzg2OlxcdFxcdFxcdH1cXG4gMzg3OlxcdFxcdH1cXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInBvbGxcXFwiKSkge1xcbiAzOTA6XFx0XFx0XFx0cmV0ID0gbGVuO1xcbiAzOTE6XFx0XFx0XFx0cG9sbCA9IENYUE9MTF9QT0xMSU5HO1xcbiAzOTI6XFx0XFx0fVxcbiAzOTM6XFx0XFxuIDM5NDpcXHRcXHRpZiAocmV0ID09IDApIHtcXG4gMzk1OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDM5NjpcXHRcXHRcXHRwb2xsID0gLTE7XFxuIDM5NzpcXHRcXHR9XFxuIDM5ODpcXHRcXG4gMzk5OlxcdFxcdGlmIChwb2xsID09IENYUE9MTF9QT0xMSU5HKSB7XFxuIDQwMDpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlcG9sbF9zdGF0ZV9zZXJpYWxpemUpO1xcbiA0MDE6XFx0XFx0XFx0c3dpdGNoIChpbnN0YW5jZS1cXHUwMDNlcG9sbF9zdGF0ZSkge1xcbiA0MDI6XFx0XFx0XFx0Y2FzZSBDWFBPTExfU1RPUFBFRDpcXG4gNDAzOlxcdFxcdFxcdFxcdC8qIHN0YXJ0IHBvbGxpbmcgKi9cXG4gNDA0OlxcdFxcdFxcdFxcdGluc3RhbmNlLVxcdTAwM2Vwb2xsX3N0YXRlID0gQ1hQT0xMX1BPTExJTkc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI4OjA1LjA1MzI3NDg2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU2NDYyOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgc2VjdGlvbiwgc3BlY2lmaWNhbGx5LCB0aGF0J3MgbGluZXMgMzMyIGFuZCBiZXlvbmQuIFRoZSBjb250ZXh0IGlzIGltcG9ydGFudCwgYnV0IGZvciB0aGUgc3VtbWFyeSBJIHdhbnQgdG8gZm9jdXMgb24gdGhpcyBwb3J0aW9uLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGRlZXBlciBsb29rIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gdGhhdCBzcGVjaWZpYyBwb3J0aW9uIG9mIHRoZSB0ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ5MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MDkuOTA5NzQwNzc3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzMyOlxcdHN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbiAzMzM6XFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbiAzMzQ6XFx0e1xcbiAzMzU6XFx0XFx0c3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSA9IHRvX3VzYmF0bV9kcml2ZXJfZGF0YShcXG4gMzM2OlxcdFxcdFxcdFxcdHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7XFxuIDMzNzpcXHRcXHRpbnQgcmV0O1xcbiAzMzg6XFx0XFx0aW50IHBvbGwgPSAtMTtcXG4gMzM5OlxcdFxcdGNoYXIgc3RyX2NtZFs4XTtcXG4gMzQwOlxcdFxcdGludCBsZW4gPSBzdHJsZW4oYnVmKTtcXG4gMzQxOlxcdFxcbiAzNDI6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKVxcbiAzNDM6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIDM0NDpcXHRcXG4gMzQ1OlxcdFxcdHJldCA9IHNzY2FuZihidWYsIFxcXCIlN3NcXFwiLCBzdHJfY21kKTtcXG4gMzQ2OlxcdFxcdGlmIChyZXQgIT0gMSlcXG4gMzQ3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzNDg6XFx0XFx0cmV0ID0gMDtcXG4gMzQ5OlxcdFxcbiAzNTA6XFx0XFx0aWYgKGluc3RhbmNlID09IE5VTEwpXFxuIDM1MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MDkuOTA5ODY3MDM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NDYxNzA1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkZpbmRpbmcgdGhlIEFzc2lnbm1lbnQgb2YgYGFkc2xfc3RhdGVfc3RvcmVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhZHNsX3N0YXRlX3N0b3JlYCBpcyB1c2VkLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgdHJhY2Ugd2hlcmUgaXQncyAqYXNzaWduZWQqIGEgdmFsdWUuIEknbSBsb29raW5nIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb3IgbW9kaWZpY2F0aW9uIHBvaW50cyBvZiB0aGlzIHZhcmlhYmxlLiBUaGlzIGlzIGZ1bmRhbWVudGFsOyBrbm93aW5nIHdoZXJlIHRoZSBkYXRhIG9yaWdpbmF0ZXMgZ2l2ZXMgbWUgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludCB0byBmb2xsb3cgaXRzIGZsb3cgYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBzeXN0ZW0uIFdpdGhvdXQga25vd2luZyBpdHMgc291cmNlLCBhbnkgZnVydGhlciBhbmFseXNpcyBpcyBnb2luZyB0byBiZSBndWVzc2luZyBhdCBiZXN0LCBhbmQgaW5lZmZpY2llbnQgYXQgd29yc3QuIFNvLCBmaW5kIHRoZSBhc3NpZ25tZW50ISBUaGF0J3MgdGhlIGtleSB0byBldmVyeXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkxNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MTYuNTU2MDM5Nzc0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMxMDQwMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRzbF9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE3NS1cXHRpbnQgbGluZV9zdGF0dXM7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjE3NjpcXHRzdHJ1Y3QgbXV0ZXggYWRzbF9zdGF0ZV9zZXJpYWxpemU7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE3Ny1cXHRpbnQgYWRzbF9zdGF0dXM7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzAzPXN0YXRpYyBzc2l6ZV90IG1hY19hZGRyZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMxNC1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzE1OnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMxNi1cXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1Mi1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzUzOlxcdGlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSkpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1NC1cXHRcXHRyZXR1cm4gLUVSRVNUQVJUU1lTO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNC1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NDI1OlxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDI2LVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTUzNT1DWEFDUlVfQVRUUl8jI19hY3Rpb24oQ1hJTkZfQ09OVFJPTExFUl9WRVJTSU9OLCAgICAgICAgdTMyLCAgYWRzbF9jb250cm9sbGVyX3ZlcnNpb24pOyBcXFxcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjUzNjpDWEFDUlVfQ01EXyMjX2FjdGlvbiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRzbF9zdGF0ZSk7IFxcXFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNTM3LUNYQUNSVV9TRVRfIyNfYWN0aW9uKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHNsX2NvbmZpZyk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTQxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjeGFjcnVfYXR0cnNbXSA9IHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNTQyLVxcdFxcdTAwMjZkZXZfYXR0cl9hZHNsX2NvbmZpZy5hdHRyLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo1NDM6XFx0XFx1MDAyNmRldl9hdHRyX2Fkc2xfc3RhdGUuYXR0cixcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNTQ0LVxcdFxcdTAwMjZkZXZfYXR0cl9hZHNsX2NvbnRyb2xsZXJfdmVyc2lvbi5hdHRyLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTc3MT1zdGF0aWMgaW50IGN4YWNydV9hdG1fc3RhcnQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzg5LVxcdC8qIHN0YXJ0IEFEU0wgKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkwOlxcdG11dGV4X2xvY2soXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5MS1cXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgxMi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmluc3RhbmNlLVxcdTAwM2Vwb2xsX3N0YXRlX3NlcmlhbGl6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjgxMzpcXHRtdXRleF91bmxvY2soXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgxNC1cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz04MjA9c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MzktXFx0XFx0XFx0aWYgKHJldCAhPSAtRVNIVVRET1dOKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo4NDA6XFx0XFx0XFx0XFx0YXRtX3dhcm4odXNiYXRtLCBcXFwicG9sbGluZyBkaXNhYmxlZCwgc2V0IGFkc2xfc3RhdGVcXFwiXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTg0MS1cXHRcXHRcXHRcXHRcXHRcXHRcXFwiIHRvICdzdGFydCcgb3IgJ3BvbGwnIHRvIHJlc3VtZVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTEyMj1zdGF0aWMgaW50IGN4YWNydV9iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNDYtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjExNDc6XFx0bXV0ZXhfaW5pdChcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MTYuNzM5MTQ5MDgxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NjU1OTU4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENYQUNSVSBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYENYQUNSVV9DTURfIyNfYWN0aW9uKGFkc2xfc3RhdGUpYCBiZWNvbWVzIGBkZXZfYXR0cl9hZHNsX3N0YXRlYCB0aHJvdWdoIGV4cGFuc2lvbi4gVGhhdCBtZWFucyBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgYXJlIGV4cG9zZWQgdGhyb3VnaCBzeXNmcy4gVGhhdCdzIGdvb2QsIGJ1dCBpdCBhbHNvIG1lYW5zIGRpcmVjdGx5IGZ1enppbmcgdGhlbSBpcyBnb2luZyB0byBiZSBhIHBhaW4gaWYgdGhleSdyZSBub3Qgc3RhbmRhcmQgc3lzZnMgYXR0cmlidXRlcy4gVGhvdWdoLCBvZiBjb3Vyc2UsIFN5emthbGxlciAqY2FuKiBmdXp6IHN5c2ZzLCBzbyBpdCdzIG5vdCBhIGNvbXBsZXRlIGRlYWQgZW5kLlxuXG5Ib3dldmVyLCB0aGUgcmVhbCBnZW1zIGhlcmUgYXJlIGxpa2VseSBgY3hhY3J1X2hlYXZ5X2luaXRgIGFuZCBgY3hhY3J1X2F0bV9zdGFydGAuIFRoZXNlIGFyZSBzdGFuZGFyZCBVU0IgQVRNIGNhbGxiYWNrcywgd2hpY2ggdGVsbHMgbWUgdGhleSdsbCBiZSBjYWxsZWQgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgc3RhcnR1cC4gVGhpcyBtYWtlcyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcg4oCTIG11Y2ggZWFzaWVyIHRvIHRyaWdnZXIgYW5kIG9ic2VydmUgdGhhbiBzb21ldGhpbmcgYnVyaWVkIGRlZXAgaW4gc3lzZnMuIERlZmluaXRlbHkgZm9jdXNpbmcgb24gdGhvc2UuIEFuZCBgY3hhY3J1X2JpbmRgIHNlZW1zIGxpa2UgYW5vdGhlciBwb3RlbnRpYWxseSBmcnVpdGZ1bCBzdGFydGluZyBwb2ludC5cblxuTm93LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgY3hhY3J1X2NtYCBnZXRzIGNhbGxlZCBmcm9tIGBjeGFjcnVfYmluZGAuIFRoYXQgY291bGQgb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIGF2ZW51ZXMgZm9yIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjkwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI4OjIyLjMwNDc0ODMzN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMzg1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3hhY3J1X2NtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTk9ZW51bSBjeGFjcnVfZndfcmVxdWVzdCB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzAtICogZmlybXdhcmUgaXMgbG9hZGVkICAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MTplbnVtIGN4YWNydV9jbV9yZXF1ZXN0IHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzItXFx0Q01fUkVRVUVTVF9VTkRFRklORUQgPSAweDgwLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEwOC0gKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTA5OmVudW0gY3hhY3J1X2NtX2ZsYXNoIHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwLVxcdENNX0ZMQVNIX1JFQUQgPSAweGExLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNC0vKiByZXBseSBjb2RlcyB0byB0aGUgY29tbWFuZHMgYWJvdmUgKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTE1OmVudW0gY3hhY3J1X2NtX3N0YXR1cyB7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNi1cXHRDTV9TVEFUVVNfVU5ERUZJTkVELFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5Mi1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTkzOnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5NC1cXHR1OCAqd2RhdGEsIGludCB3c2l6ZSwgdTggKnJkYXRhLCBpbnQgcnNpemUpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMzMj1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTYtXFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInN0b3BcXFwiKSB8fCAhc3RyY21wKHN0cl9jbWQsIFxcXCJyZXN0YXJ0XFxcIikpIHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzU3OlxcdFxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVE9QLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzU4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzc2LVxcdGlmICghc3RyY21wKHN0cl9jbWQsIFxcXCJzdGFydFxcXCIpIHx8ICFzdHJjbXAoc3RyX2NtZCwgXFxcInJlc3RhcnRcXFwiKSkge1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNzc6XFx0XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzc4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NDM1PXN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00ODAtXFx0XFx0XFx0ZGF0YVswXSA9IGNwdV90b19sZTMyKG51bSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjQ4MTpcXHRcXHRcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9EQVRBX1NFVCxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDgyLVxcdFxcdFxcdFxcdCh1OCAqKSBkYXRhLCA0ICsgbnVtICogOCwgTlVMTCwgMCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTkwPXN0YXRpYyBpbnQgY3hhY3J1X3N0YXJ0X3dhaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA3LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo2MDg6c3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA5LVxcdFxcdCAgICAgdTggKndkYXRhLCBpbnQgd3NpemUsIHU4ICpyZGF0YSwgaW50IHJzaXplKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcwOS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzEwOnN0YXRpYyBpbnQgY3hhY3J1X2NtX2dldF9hcnJheShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MTEtXFx0XFx0XFx0ICAgICAgIHUzMiAqZGF0YSwgaW50IHNpemUpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzIzLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MjQ6XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBjbSwgTlVMTCwgMCwgKHU4ICopIGJ1ZiwgYnVmbGVuKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyNy1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzI4OlxcdC8qIGxlbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgbGVuICUgNCA9PSAwIGd1YXJhbnRlZWQgYnkgY3hhY3J1X2NtKCkgKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI5LVxcdGxlbiA9IHJldCAvIDQ7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzYwPXN0YXRpYyBpbnQgY3hhY3J1X2NhcmRfc3RhdHVzKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2MS17XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc2MjpcXHRpbnQgcmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX1NUQVRVUywgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2My1cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NzE9c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4MS1cXHQvKiBSZWFkIE1BQyBhZGRyZXNzICovXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc4MjpcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfTUFDX0FERFJFU1MsIE5VTEwsIDAsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4My1cXHRcXHRcXHRhdG1fZGV2LVxcdTAwM2Vlc2ksIHNpemVvZihhdG1fZGV2LVxcdTAwM2Vlc2kpKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTAtXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkxOlxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5Mi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz04MjA9c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MjktXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjgzMDpcXHRyZXQgPSBjeGFjcnVfY21fZ2V0X2FycmF5KGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfSU5GT19HRVQsIGJ1ZiwgQ1hJTkZfTUFYKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODMxLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTAwNj1zdGF0aWMgaW50IGN4YWNydV9oZWF2eV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMDEtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjExMDI6XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX1NUQVRVUywgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMDMtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MjIuMzQ3ODk0MzI2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1Mjc4ODAwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYGN4YWNydV9jbWAgZ2V0cyBjYWxsZWQgd2l0aGluIHRoaXMgY29kZS4gVGhlIGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IGBjeGFjcnVfYmluZGAgKmRvZXNuJ3QqIGNhbGwgYGN4YWNydV9jbWAgZGlyZWN0bHkuIEhtbSwgaW50ZXJlc3RpbmcuIEhvd2V2ZXIsIGBjeGFjcnVfaGVhdnlfaW5pdGAgKmRvZXMqIGNhbGwgaXQsIHNwZWNpZmljYWxseSBhdCBsaW5lIDExMDIsIGFuZCBgY3hhY3J1X2F0bV9zdGFydGAgYWxzbyBjYWxscyBpdCwgYXQgbGluZXMgNzgyIGFuZCA3OTEuIFNvLCBiYXNlZCBvbiB0aGlzIHF1aWNrIGxvb2ssIGBjeGFjcnVfaGVhdnlfaW5pdGAgYW5kIGBjeGFjcnVfYXRtX3N0YXJ0YCBzZWVtIGxpa2UgdGhlIG1vc3QgcHJvbWlzaW5nIHN5bWJvbHMgdG8gZm9jdXMgb24uXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFllcywgdGhleSBhcmUuIEhvbGQgb24gYSBzZWNvbmQsIHRoYXQncyBub3Qgd2hhdCB0aGUgcHJvbXB0IHdhbnRzLiBJdCBwcmVmZXJzIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW5saW5lZCwgYW5kIHdlIG5lZWQgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gQnV0LCB3YWl0Li4uIGluIHRoaXMgY2FzZSwgZXZlbiB0aG91Z2ggdGhleSdyZSBzdGF0aWMsIGJvdGggYGN4YWNydV9oZWF2eV9pbml0YCBhbmQgYGN4YWNydV9hdG1fc3RhcnRgIGFyZSBhc3NpZ25lZCB0byBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycy4gVGhhdCBtZWFucyB0aGV5ICpjYW5ub3QqIGJlIGlubGluZWQuIFRoZXknbGwgZGVmaW5pdGVseSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFNvLCB0aGUgcHJvbXB0IGlzIHBlcmhhcHMgbm90IGNvbnNpZGVyaW5nIHRoaXMgbnVhbmNlIGluIHRoZSBjb2RlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gTmV2ZXJ0aGVsZXNzLCBiZWZvcmUgSSB6ZXJvIGluIG9uIHRob3NlLCBJIHNob3VsZCBicmllZmx5IHNjYW4gdGhlIGNvZGUgZm9yICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgY3hhY3J1LmNgLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQ1LCJPdXRwdXRUb2tlbnMiOjY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI4OjMxLjg3NTc3NzQ3NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NjEyMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE5NT1zdGF0aWMgdm9pZCBjeGFjcnVfcG9sbF9zdGF0dXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xOTgtI2RlZmluZSBDWEFDUlVfX0FUVFJfSU5JVChfbmFtZSkgXFxcXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTk6c3RhdGljIERFVklDRV9BVFRSX1JPKF9uYW1lKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDAtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMS0jZGVmaW5lIENYQUNSVV9DTURfSU5JVChfbmFtZSkgXFxcXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDI6c3RhdGljIERFVklDRV9BVFRSX1JXKF9uYW1lKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDMtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwNC0jZGVmaW5lIENYQUNSVV9TRVRfSU5JVChfbmFtZSkgXFxcXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDU6c3RhdGljIERFVklDRV9BVFRSX1dPKF9uYW1lKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI4OjMxLjk5MTM5NTA0M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk2MDY4OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKklkZW50aWZ5aW5nIER5bmFtaWMgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhcyB3aGVyZSB0aGUgc3lzdGVtICp0cnVseSogYmVoYXZlcyBkeW5hbWljYWxseS4gU3RhdGljIGZ1bmN0aW9ucyBhcmUsIGJ5IGRlZmluaXRpb24sIHByZWRpY3RhYmxlIGFuZCB0aWVkIGRpcmVjdGx5IHRvIHRoZSBjb2RlJ3Mgc3RydWN0dXJlIGF0IGNvbXBpbGUgdGltZS4gVGhleSBhcmUgdGhlIGZpeGVkIHBvaW50cy4gVGhlcmVmb3JlLCBhbnkgYW5hbHlzaXMgZm9jdXNlZCBvbiBhZGFwdGl2ZSBiZWhhdmlvciwgcnVudGltZSBtb2RpZmljYXRpb25zLCBvciB0aGUgaW1wYWN0cyBvZiBjb25maWd1cmF0aW9uIG9yIGlucHV0IGRhdGEgbmVlZHMgdG8gZXhjbHVkZSB0aG9zZS4gSSBuZWVkIHRvIGZpbHRlciBvdXQgdGhlIG5vaXNlLiBMZXQncyBmb2N1cyBvdXIgYXR0ZW50aW9uIGJ5IHNlYXJjaGluZywgZGlyZWN0bHksIGZvciB0aG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgKm5vdCogc3RhdGljLiBUaGlzIHdpbGwgcXVpY2tseSByZXZlYWwgdGhlIGFyZWFzIHRoYXQgYXJlIGNhbmRpZGF0ZXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvZiB0aGUgc3lzdGVtJ3MgZHluYW1pYyBiZWhhdmlvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTYwLCJPdXRwdXRUb2tlbnMiOjY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MzUuNTg3NDY2ODEyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjMxODIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xOTU9c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk4LSNkZWZpbmUgQ1hBQ1JVX19BVFRSX0lOSVQoX25hbWUpIFxcXFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTk5OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhfbmFtZSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAwLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDEtI2RlZmluZSBDWEFDUlVfQ01EX0lOSVQoX25hbWUpIFxcXFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjAyOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhfbmFtZSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAzLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDQtI2RlZmluZSBDWEFDUlVfU0VUX0lOSVQoX25hbWUpIFxcXFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjA1OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhfbmFtZSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyODozNS42NDk3OTE1ODFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0NDEwMDMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlJlZ2V4IFdvZXMgYW5kIGEgU2ltcGxlIFNvbHV0aW9uKipcblxuSG1tLCB0aGF0IHJlZ2V4IEkgd2FzIHRyeWluZyB0byB1c2XigKYgaXQganVzdCB3YXNuJ3QgY3V0dGluZyBpdC4gSXQncyBiZWNvbWluZyB0b28gY29tcGxleCBhbmQgbm90IGRvaW5nIHRoZSBqb2IuIFlvdSBrbm93IGhvdyBpdCBpczsgc29tZXRpbWVzIHlvdSBvdmVydGhpbmsgdGhpbmdzLiBSYXRoZXIgdGhhbiBiYW5naW5nIG15IGhlYWQgYWdhaW5zdCB0aGlzIGNvbXBsZXggcGF0dGVybiwgSSdtIHRoaW5raW5nLCBcIktlZXAgaXQgc2ltcGxlLCBzdHVwaWQhXCIgQSBzaW1wbGUgYGdyZXAgLXYgc3RhdGljYCBvbiB0aGUgZnVuY3Rpb25zIHNob3VsZCBkbyB0aGUgdHJpY2suIEl0IHNob3VsZCBlZmZpY2llbnRseSBmaWx0ZXIgb3V0IHRob3NlIGBzdGF0aWNgIGZ1bmN0aW9ucywgZ2l2aW5nIG1lIHdoYXQgSSBuZWVkIHdpdGhvdXQgdGhlIHJlZ2V4IGhlYWRhY2hlLiBTb21ldGltZXMgdGhlIG1vc3QgZWxlZ2FudCBzb2x1dGlvbiBpcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgb25lLCBlc3BlY2lhbGx5IHdoZW4gdGltZSBpcyBvZiB0aGUgZXNzZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyODo0MC4yOTM4OTQzNTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzY0NzU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel0uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTcwPXN0cnVjdCBjeGFjcnVfZGF0YSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTkyLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTM6c3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk0LVxcdHU4ICp3ZGF0YSwgaW50IHdzaXplLCB1OCAqcmRhdGEsIGludCByc2l6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjE5NTpzdGF0aWMgdm9pZCBjeGFjcnVfcG9sbF9zdGF0dXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk2LVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5OC0jZGVmaW5lIENYQUNSVV9fQVRUUl9JTklUKF9uYW1lKSBcXFxcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjE5OTpzdGF0aWMgREVWSUNFX0FUVFJfUk8oX25hbWUpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMC1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAxLSNkZWZpbmUgQ1hBQ1JVX0NNRF9JTklUKF9uYW1lKSBcXFxcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIwMjpzdGF0aWMgREVWSUNFX0FUVFJfUlcoX25hbWUpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMy1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA0LSNkZWZpbmUgQ1hBQ1JVX1NFVF9JTklUKF9uYW1lKSBcXFxcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIwNTpzdGF0aWMgREVWSUNFX0FUVFJfV08oX25hbWUpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwNi1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA3LSNkZWZpbmUgQ1hBQ1JVX0FUVFJfSU5JVChfdmFsdWUsIF90eXBlLCBfbmFtZSkgXFxcXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDg6c3RhdGljIHNzaXplX3QgX25hbWUjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgXFxcXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDktXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXFxcXFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTIxOT1DWEFDUlVfX0FUVFJfSU5JVChfbmFtZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMzAtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIzMTpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfdTMyKHUzMiB2YWx1ZSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMzIte1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIzNS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjM2OnN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl9zOChzOCB2YWx1ZSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMzcte1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTI0MC1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjQxOnN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl9kQihzMTYgdmFsdWUsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjQyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNTItXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjI1MzpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfYm9vbCh1MzIgdmFsdWUsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjU0LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNjEtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjI2MjpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfTElOSyh1MzIgdmFsdWUsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjYzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNzAtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjI3MTpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfTElORSh1MzIgdmFsdWUsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjcyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yODEtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjI4MjpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfTU9EVSh1MzIgdmFsdWUsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjgzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMDItICovXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMwMzpzdGF0aWMgc3NpemVfdCBtYWNfYWRkcmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzA0LVxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE0LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMTU6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE2LVxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMzI6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDM0LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo0MzU6c3RhdGljIHNzaXplX3QgYWRzbF9jb25maWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00MzYtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU3MD1BVFRSSUJVVEVfR1JPVVBTKGN4YWNydSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNTcyLS8qIHRoZSBmb2xsb3dpbmcgdGhyZWUgZnVuY3Rpb25zIGFyZSBzdG9sZW4gZnJvbSBkcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo1NzM6c3RhdGljIHZvaWQgY3hhY3J1X2Jsb2NraW5nX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01NzQte1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU3OD1zdHJ1Y3QgY3hhY3J1X3RpbWVyIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01ODItXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjU4MzpzdGF0aWMgdm9pZCBjeGFjcnVfdGltZW91dF9raWxsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01ODQte1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU4OS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NTkwOnN0YXRpYyBpbnQgY3hhY3J1X3N0YXJ0X3dhaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU5MS1cXHRcXHRcXHRcXHQgaW50ICphY3R1YWxfbGVuZ3RoKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTYwNy1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NjA4OnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTYwOS1cXHRcXHQgICAgIHU4ICp3ZGF0YSwgaW50IHdzaXplLCB1OCAqcmRhdGEsIGludCByc2l6ZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MDktXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcxMDpzdGF0aWMgaW50IGN4YWNydV9jbV9nZXRfYXJyYXkoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzExLVxcdFxcdFxcdCAgICAgICB1MzIgKmRhdGEsIGludCBzaXplKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc1OS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzYwOnN0YXRpYyBpbnQgY3hhY3J1X2NhcmRfc3RhdHVzKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2MS17XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzcwLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3NzE6c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NzItXFx0XFx0c3RydWN0IGF0bV9kZXYgKmF0bV9kZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODE5LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo4MjA6c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODIxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy05MzYtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjkzNzpzdGF0aWMgaW50IGN4YWNydV9mdyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgZW51bSBjeGFjcnVfZndfcmVxdWVzdCBmdyxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtOTM4LVxcdFxcdCAgICAgdTggY29kZTEsIHU4IGNvZGUyLCB1MzIgYWRkciwgY29uc3QgdTggKmRhdGEsIGludCBzaXplKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTk4NS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6OTg2OnN0YXRpYyBpbnQgY3hhY3J1X2ZpbmRfZmlybXdhcmUoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtOTg3LVxcdFxcdFxcdFxcdGNoYXIgKnBoYXNlLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmd19wKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEwMDUtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEwMDY6c3RhdGljIGludCBjeGFjcnVfaGVhdnlfaW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTAwNy1cXHRcXHRcXHQgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaW50ZilcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTIxLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTIyOnN0YXRpYyBpbnQgY3hhY3J1X2JpbmQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMjMtXFx0XFx0ICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTIzMS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTIzMjpzdGF0aWMgdm9pZCBjeGFjcnVfdW5iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMjMzLVxcdFxcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTEzNDI9c3RhdGljIHN0cnVjdCB1c2JhdG1fZHJpdmVyIGN4YWNydV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTM1My1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTM1NDpzdGF0aWMgaW50IGN4YWNydV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzNTUtXFx0XFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTEzNzU9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGN4YWNydV91c2JfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzODItXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEzODM6bW9kdWxlX3VzYl9kcml2ZXIoY3hhY3J1X3VzYl9kcml2ZXIpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMzg0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyODo0MC40MDc1NDY5NzFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYzODEyOTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERyaXZlciBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nOiBhbGwgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIEknbSBsb29raW5nIGF0IGFyZSBzdGF0aWMsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBJbnN0ZWFkIG9mIGZvbGxvd2luZyBkeW5hbWljIGNhbGxzLCBJIGNhbiBqdXN0IGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgZXhwbGljaXRseSBsaXN0ZWQgYXMgZW50cnkgcG9pbnRzIGZvciB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gZG9jdW1lbnQgdGhlc2UsIHNvIGhlcmUncyBhIGNvbmNpc2UgbGlzdDpcblxuKiAgIGBjeGFjcnVfYmluZGBcbiogICBgY3hhY3J1X2hlYXZ5X2luaXRgXG4qICAgYGN4YWNydV9hdG1fc3RhcnRgXG4qICAgYGN4YWNydV91c2JfcHJvYmVgXG5cbldhaXQsIHRoYXQgbGFzdCBvbmUsIGBjeGFjcnVfdXNiX3Byb2JlYCwgaXMgYW4gZW50cnkgcG9pbnQuIFRoYXQncyBnb29kIHRvIG5vdGUsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGN4YWNydV91c2JfcHJvYmVgIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNzUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6NTAuMDQ1Njc4Mjg4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzU0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzU0OlxcdHN0YXRpYyBpbnQgY3hhY3J1X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4xMzU1OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4xMzU2OlxcdHtcXG4xMzU3OlxcdFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcXG4xMzU4OlxcdFxcdGNoYXIgYnVmWzE1XTtcXG4xMzU5OlxcdFxcbjEzNjA6XFx0XFx0LyogQXZvaWQgQURTTCByb3V0ZXJzIChjeDgyMzEwX2V0aCkuXFxuMTM2MTpcXHRcXHQgKiBBYm9ydCBpZiBiRGV2aWNlQ2xhc3MgaXMgMHhmZiBhbmQgaVByb2R1Y3QgaXMgXFxcIlVTQiBORVQgQ0FSRFxcXCIuXFxuMTM2MjpcXHRcXHQgKi9cXG4xMzYzOlxcdFxcdGlmICh1c2JfZGV2LVxcdTAwM2VkZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSBVU0JfQ0xBU1NfVkVORE9SX1NQRUNcXG4xMzY0OlxcdFxcdFxcdFxcdFxcdTAwMjZcXHUwMDI2IHVzYl9zdHJpbmcodXNiX2RldiwgdXNiX2Rldi1cXHUwMDNlZGVzY3JpcHRvci5pUHJvZHVjdCxcXG4xMzY1OlxcdFxcdFxcdFxcdFxcdGJ1Ziwgc2l6ZW9mKGJ1ZikpIFxcdTAwM2UgMCkge1xcbjEzNjY6XFx0XFx0XFx0aWYgKCFzdHJjbXAoYnVmLCBcXFwiVVNCIE5FVCBDQVJEXFxcIikpIHtcXG4xMzY3OlxcdFxcdFxcdFxcdGRldl9pbmZvKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJpZ25vcmluZyBjeDgyMzEwX2V0aCBkZXZpY2VcXFxcblxcXCIpO1xcbjEzNjg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTM2OTpcXHRcXHRcXHR9XFxuMTM3MDpcXHRcXHR9XFxuMTM3MTpcXHRcXG4xMzcyOlxcdFxcdHJldHVybiB1c2JhdG1fdXNiX3Byb2JlKGludGYsIGlkLCBcXHUwMDI2Y3hhY3J1X2RyaXZlcik7XFxuMTM3MzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI4OjUwLjA0NTc3NTU1OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTgxNTIzNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENYQUNSVSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSBmbG93LCBgY3hhY3J1X3VzYl9wcm9iZWAgaGFuZHMgb2ZmIHRvIGB1c2JhdG1fdXNiX3Byb2JlYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoYXQgbWVhbnMgZnVuY3Rpb25zIGxpa2UgYGN4YWNydV9iaW5kYCwgYGN4YWNydV9oZWF2eV9pbml0YCwgYW5kIHVsdGltYXRlbHksIGBjeGFjcnVfYXRtX3N0YXJ0YCBhcmUgYWxsIHJlYXNvbmFibGUgcGxhY2VzIHRvIHRhcmdldC4gSSBsaWtlIHRoZSBsb2dpY2FsIHByb2dyZXNzaW9uIGhlcmUuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYGN4YWNydV9jbWAuIEkgbmVlZCB0byByZXZpc2l0IHRoYXQgcGF0Y2ggYWdhaW4uIEFoLCB5ZXMsIHRoZSBhZGRpdGlvbiBvZiBgdXNiX2tpbGxfdXJiKGluc3RhbmNlLVx1MDAzZXJjdl91cmIpO2Agd2hlbiBgcmV0IFx1MDAzYyAwYC4gVGhhdCdzIGEgY2xhc3NpYyBlcnJvci1oYW5kbGluZyBtZWNoYW5pc20sIGFuZCAqZGVmaW5pdGVseSogcmVhY2hhYmxlIHRocm91Z2ggVVNCIGZ1enppbmcuIFRoYXQncyBhIGdvb2QgZmluZCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQncyBhIGtleSBsaW5lIG9mIGNvZGUgSSdsbCB3YW50IHRvIGZvY3VzIG9uLlxuXG5MZXQgbWUgcXVpY2tseSBzdW1tYXJpemUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgdGhlbSBpbiBtaW5kLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYFVTQl9DWEFDUlVgLCBgVVNCX0FUTWAsIGFuZCB0aGUgYmFzZSBgQVRNYCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxheS5cblxuV2FpdC4uLiBzb21ldGhpbmcganVzdCBvY2N1cnJlZCB0byBtZSwgYW5kIGl0J3MgaW1wb3J0YW50LiBEb2VzIGBVU0JfQ1hBQ1JVYCBoYXZlIGFueSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0J3MgaGVhZCBiYWNrIHRvIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBidWlsZCBvcHRpb25zLiBUaGlzIGNvbmZpZ3VyYXRpb24gY2hlY2sgaXMgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzQ2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6NTYuMDI3MzAxMDk3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNwZWVkdGNoLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgVVNCX0NYQUNSVVxcbiAgMzM6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0Igc3VwcG9ydFxcXCJcXG4gIDM0OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiBBRFNMIFVTQiBtb2RlbSBiYXNlZCBvbiB0aGUgQ29uZXhhbnRcXG4gIDM3OlxcdFxcdCAgQWNjZXNzUnVubmVyIGNoaXBzZXQuICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvXFxuICAzODpcXHRcXHQgIGluc3RhbGwgdGhlIGZpcm13YXJlLCBleHRyYWN0ZWQgYnkgdGhlIHVzZXIgc3BhY2UgdG9vbHM7IHNlZVxcbiAgMzk6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvXFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDQyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4YWNydS5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIFVTQl9VRUFHTEVBVE1cXG4gIDQ1OlxcdFxcdHRyaXN0YXRlIFxcXCJBREkgOTMwIGFuZCBlYWdsZSBVU0IgRFNMIG1vZGVtXFxcIlxcbiAgNDY6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFEU0wgVVNCIG1vZGVtIGJhc2VkIG9uIHRoZSBBREkgOTMwXFxuICA0OTpcXHRcXHQgIG9yIGVhZ2xlIGNoaXBzZXQuIEluIG9yZGVyIHRvIHVzZSB5b3VyIG1vZGVtIHlvdSB3aWxsIG5lZWQgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6NTYuMDI3MzkxNTU3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDU0NDY1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQsIHdoaWxlIGl0IGRvZXNuJ3QgKmRpcmVjdGx5KiBzdGF0ZSBcImRlcGVuZHMgb24sXCIgdGhlIHN0cnVjdHVyZSBwbGFjZXMgaXQgd2l0aGluIGFuIGBpZiBVU0JfQVRNYCBibG9jay4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LiBOb3csIGBVU0JfQVRNYCwgSSByZW1lbWJlciwgaW4gdHVybiwgKmRvZXMqIGRlcGVuZCBvbiBgQVRNYC4gU28sIHB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyLCB0aGUgZWZmZWN0aXZlIGNvbmZpZ3VyYXRpb24gY2hhaW4gaGVyZSBpcyBgVVNCX0NYQUNSVWAgKHRoZSBvbmUgSSB3YXMgaW5pdGlhbGx5IGludGVyZXN0ZWQgaW4pLCBuZXN0ZWQgdW5kZXIgYFVTQl9BVE1gLCB3aGljaCBpdHNlbGYgaXMgY29udGluZ2VudCBvbiBgQVRNYCBiZWluZyBzZXQuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBpdOKAmXMgYWx3YXlzIHdpc2UgdG8gZG91YmxlLWNoZWNrIHRoZSBmb3VuZGF0aW9uYWwgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlcGVuZGVuY2llcyB0aGF0IGBBVE1gIGl0c2VsZiByZWxpZXMgdXBvbiwgZW5zdXJpbmcgdGhlcmUgYXJlIG5vIHVuZm9yZXNlZW4gY29tcGxpY2F0aW9ucyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU3NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjk6MDAuNjMyODQwMDc5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQ1NTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL0tjb25maWctNS1cXG5uZXQvYXRtL0tjb25maWc6Njpjb25maWcgQVRNXFxubmV0L2F0bS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXFxcIlxcbi0tXFxubmV0L2F0bS9LY29uZmlnLTIxLVxcbm5ldC9hdG0vS2NvbmZpZzoyMjpjb25maWcgQVRNX0JSMjY4NFxcbm5ldC9hdG0vS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiUkZDMTQ4My8yNjg0IEJyaWRnZWQgcHJvdG9jb2xzXFxcIlxcbi0tXFxubmV0L2F0bS9LY29uZmlnLTMwLVxcbm5ldC9hdG0vS2NvbmZpZzozMTpjb25maWcgQVRNX0JSMjY4NF9JUEZJTFRFUlxcbm5ldC9hdG0vS2NvbmZpZy0zMi1cXHRib29sIFxcXCJQZXItVkMgSVAgZmlsdGVyIGtsdWRnZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjk6MDAuNzI3MzAyMzQ3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NjEzODY3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBBVE0gQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgQVRNIHdpdGhpbiB0aGlzIGtlcm5lbCBidWlsZC4gXCJuZXQvYXRtL0tjb25maWdcIiBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBhbHJlYWR5IGtub3cgdGhpcyBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBjb2Rpbmcgc3R5bGUsIHNvIEkgY2FuIGltbWVkaWF0ZWx5IGFzc3VtZSB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIEFUTSBzdXBwb3J0IGFyZSBtYW5hZ2VkLiBObyBuZWVkIGZvciBhbnkgaGFuZGhvbGRpbmcgaGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgZmlsZSwgbG9va2luZyBmb3IgdGhlIGtleSB2YXJpYWJsZXMsIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGdvdmVybmluZyB0aGVpciBpbmNsdXNpb24uIEkgbmVlZCB0byBhc2NlcnRhaW4gd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgZm9yIGN1c3RvbWl6YXRpb24gYXQgY29tcGlsZSB0aW1lLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSwgcmVhbGx5LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGZhbWlsaWFyIGBjb25maWdgIGtleXdvcmRzLCB0aGUgYGJvb2xgLCBgdHJpc3RhdGVgLCBhbmQgYHN0cmluZ2AgZGVmaW5pdGlvbnMuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzIOKAkyB0aGUgb3RoZXIgS2NvbmZpZyBzeW1ib2xzIHRoYXQgQVRNIGZ1bmN0aW9uYWxpdHkgcmVsaWVzIHVwb24sIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBvcHRpb25zLCBhbmQgb2YgY291cnNlIGFueSBtb2R1bGUgc3VwcG9ydCBjb25zaWRlcmF0aW9ucy4gVGhpcyBpcyBqdXN0IHRoZSBpbml0aWFsIHJlY29ubmFpc3NhbmNlOyBJJ2xsIG1vdmUgb24gdG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBjb2RlIG9uY2UgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDE0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjk6MDYuNjg4NjkyMjQ2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEFUTVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBBVE0gaXMgYSBoaWdoLXNwZWVkIG5ldHdvcmtpbmcgdGVjaG5vbG9neSBmb3IgTG9jYWwgQXJlYSBOZXR3b3Jrc1xcbiAgMTA6XFx0XFx0ICBhbmQgV2lkZSBBcmVhIE5ldHdvcmtzLiAgSXQgdXNlcyBhIGZpeGVkIHBhY2tldCBzaXplIGFuZCBpc1xcbiAgMTE6XFx0XFx0ICBjb25uZWN0aW9uIG9yaWVudGVkLCBhbGxvd2luZyBmb3IgdGhlIG5lZ290aWF0aW9uIG9mIG1pbmltdW1cXG4gIDEyOlxcdFxcdCAgYmFuZHdpZHRoIHJlcXVpcmVtZW50cy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBJbiBvcmRlciB0byBwYXJ0aWNpcGF0ZSBpbiBhbiBBVE0gbmV0d29yaywgeW91ciBMaW51eCBib3ggbmVlZHMgYW5cXG4gIDE1OlxcdFxcdCAgQVRNIG5ldHdvcmtpbmcgY2FyZC4gSWYgeW91IGhhdmUgdGhhdCwgc2F5IFkgaGVyZSBhbmQgdG8gdGhlIGRyaXZlclxcbiAgMTY6XFx0XFx0ICBvZiB5b3VyIEFUTSBjYXJkIGJlbG93LlxcbiAgMTc6XFx0XFxuICAxODpcXHRcXHQgIE5vdGUgdGhhdCB5b3UgbmVlZCBhIHNldCBvZiB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIGFjdHVhbGx5IG1ha2UgdXNlXFxuICAxOTpcXHRcXHQgIG9mIEFUTS4gIFNlZSB0aGUgZmlsZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnJzdFxcdTAwM2UgZm9yXFxuICAyMDpcXHRcXHQgIGZ1cnRoZXIgZGV0YWlscy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjk6MDYuNjg4ODU1OTM3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMDMwMTQ5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBBVE1gIGlzIGluZGVwZW5kZW50LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgYXJlIGBVU0JfQ1hBQ1JVYCwgYFVTQl9BVE1gLCBhbmQgYEFUTWAuIFRoZSBjcnVjaWFsIHN5bWJvbHMgaGVyZSBhcmUgYGN4YWNydV9oZWF2eV9pbml0YCwgYGN4YWNydV9hdG1fc3RhcnRgLCBgY3hhY3J1X2JpbmRgLCBhbmQgYGN4YWNydV91c2JfcHJvYmVgLiBJIG5vdGljZWQgdGhhdCBgY3hhY3J1X2NtYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgaGlnaGxpZ2h0cyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBCdXQsIHNpbmNlIHRoZSBzdGF0aWMgZnVuY3Rpb25zIG1lbnRpb25lZCBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIHRoZXkgYXJlICpub3QqIGlubGluZWQgYW5kIGRvIGhhdmUgZGlzdGluY3QgYWRkcmVzc2VzOyB0aGVyZWZvcmUsIHRoZXkgc2hvdWxkIGJlIHByZWZlcnJlZC4gR29vZC5cblxuSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoZSBkZXBlbmRlbmNpZXMuIGBGV19MT0FERVJgIGlzIHNlbGVjdGVkIHRocm91Z2ggYFVTQl9DWEFDUlVgLCBhbmQgYENSQzMyYCBjb21lcyBmcm9tIGBVU0JfQVRNYC4gU28sIEkgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IGRlZmluZSB0aG9zZS5cblxuTm93LCByZXZpZXdpbmcgdGhlIHBhdGNoIGl0c2VsZi4gQWgsIHRoaXMgaXMgYSBjbGVhciBidWcgZml4LiBJdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgYHJjdl91cmJgIGlzIGxlZnQgYWN0aXZlIGlmIGBjeGFjcnVfY21gIGZhaWxzLiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgcGF0Y2gsIHdoaWNoIG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFNlZW1zIGxpa2UgYSBsZWdpdGltYXRlIGZpeCwgYW5kIHdvcnRoIHRoZSB0aW1lLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MDQsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjk6MTQuODkxODc0MjY4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MzI4MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfQ1hBQ1JVXCIsXG4gICAgXCJVU0JfQVRNXCIsXG4gICAgXCJBVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjeGFjcnVfaGVhdnlfaW5pdFwiLFxuICAgIFwiY3hhY3J1X2F0bV9zdGFydFwiLFxuICAgIFwiY3hhY3J1X2JpbmRcIixcbiAgICBcImN4YWNydV91c2JfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY3hhY3J1IFVTQiBBVE0gZHJpdmVyIHRvIGtpbGwgdGhlIHJlY2VpdmUgVVJCIGlmIHRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFVTQiBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9DWEFDUlVcIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIkFUTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN4YWNydV9oZWF2eV9pbml0XCIsXG4gICAgXCJjeGFjcnVfYXRtX3N0YXJ0XCIsXG4gICAgXCJjeGFjcnVfYmluZFwiLFxuICAgIFwiY3hhY3J1X3VzYl9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIgdG8ga2lsbCB0aGUgcmVjZWl2ZSBVUkIgaWYgdGhlIGNvbW1hbmQgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIFVTQiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgVVNCIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowr76bt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 12:26:04 +0000 UTC FinishedAt: 2026-07-31 12:29:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CXACRU", "USB_ATM", "ATM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CXACRU", "USB_ATM", "ATM" ], "series_id": "9978f3e2-e7f4-42a1-92f8-b5c6a7148af7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cxacru_heavy_init", "cxacru_atm_start", "cxacru_bind", "cxacru_usb_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DWEFDUlUmIzM0OywKICAgICYjMzQ7VVNCX0FUTSYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjeGFjcnVfaGVhdnlfaW5pdCYjMzQ7LAogICAgJiMzNDtjeGFjcnVfYXRtX3N0YXJ0JiMzNDssCiAgICAmIzM0O2N4YWNydV9iaW5kJiMzNDssCiAgICAmIzM0O2N4YWNydV91c2JfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGN4YWNydSBVU0IgQVRNIGRyaXZlciB0byBraWxsIHRoZSByZWNlaXZlIFVSQiBpZiB0aGUgY29tbWFuZCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgVVNCIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMyY2Y5MTk4N2YwN2NjN2E4YmJlZTA0OWNkYjQxZmY4YmQ5OGQxZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAxMjoyNzoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcbmluZGV4IGYxOTAwYzU2N2JhNDEuLjQyOWFjMjBhODk5OWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuQEAgLTcwMCw2ICYjNDM7NzAwLDggQEAgc3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcbiBcdHJldCA9IG9mZmQ7XG4gXHR1c2JfZGJnKGluc3RhbmNlLVx1MDAzZXVzYmF0bSwgXCYjMzQ7Y20gJSN4XFxuXCYjMzQ7LCBjbSk7XG4gZmFpbDpcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0dXNiX2tpbGxfdXJiKGluc3RhbmNlLVx1MDAzZXJjdl91cmIpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluc3RhbmNlLVx1MDAzZWNtX3NlcmlhbGl6ZSk7XG4gZXJyOlxuIFx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0NYQUNSVSYjMzQ7LAogICAgJiMzNDtVU0JfQVRNJiMzNDssCiAgICAmIzM0O0FUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N4YWNydV9oZWF2eV9pbml0JiMzNDssCiAgICAmIzM0O2N4YWNydV9hdG1fc3RhcnQmIzM0OywKICAgICYjMzQ7Y3hhY3J1X2JpbmQmIzM0OywKICAgICYjMzQ7Y3hhY3J1X3VzYl9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY3hhY3J1IFVTQiBBVE0gZHJpdmVyIHRvIGtpbGwgdGhlIHJlY2VpdmUgVVJCIGlmIHRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFVTQiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzJjZjkxOTg3ZjA3Y2M3YThiYmVlMDQ5Y2RiNDFmZjhiZDk4ZDFlOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDEyOjI3OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jIGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCmluZGV4IGYxOTAwYzU2N2JhNDEuLjQyOWFjMjBhODk5OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKQEAgLTcwMCw2ICYjNDM7NzAwLDggQEAgc3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSwKIAlyZXQgPSBvZmZkOwogCXVzYl9kYmcoaW5zdGFuY2UtJmd0O3VzYmF0bSwgJiMzNDtjbSAlI3hcbiYjMzQ7LCBjbSk7CiBmYWlsOgomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXVzYl9raWxsX3VyYihpbnN0YW5jZS0mZ3Q7cmN2X3VyYik7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7aW5zdGFuY2UtJmd0O2NtX3NlcmlhbGl6ZSk7CiBlcnI6CiAJcmV0dXJuIHJldDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgYSBVU0ItQVRNIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY2AuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgYWRkaXRpb24gb2YgYHVzYl9raWxsX3VyYihpbnN0YW5jZS0mZ3Q7cmN2X3VyYik7YCB3aXRoaW4gdGhlIGBjeGFjcnVfY21gIGZ1bmN0aW9uLCB0cmlnZ2VyZWQgd2hlbiBgcmV0ICZsdDsgMGAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGBjeGFjcnVfY21gIGl0c2VsZiB3aXRoaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSBhbmQgaG93IGl0IGhhbmRsZXMgZXJyb3JzIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGlzIGtpbGwgb3BlcmF0aW9uIG9uIHRoZSByZWNlaXZlIFVSQi4gSXMgdGhpcyBhIGNyaXRpY2FsIGVycm9yIHBhdGg/IElzIHRoaXMgYSBnb29kIHBsYWNlIHRvIGtpbGwgdGhlIFVSQiBvciBzaG91bGQgaXQgYmUgZWFybGllcj8gQW5kIHdoYXQgb3RoZXIgVVJCcyBhcmUgaW4gZmxpZ2h0IHRoYXQgYXJlIG5vdCBraWxsZWQ/IEl0IGFsc28gbWFrZXMgbWUgd29uZGVyIHdoYXQgYGluc3RhbmNlLSZndDtyY3ZfdXJiYCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjeGFjcnVfY20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU5PWVudW0gY3hhY3J1X2Z3X3JlcXVlc3Qge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MC0gKiBmaXJtd2FyZSBpcyBsb2FkZWQgICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzE6ZW51bSBjeGFjcnVfY21fcmVxdWVzdCB7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzItXHRDTV9SRVFVRVNUX1VOREVGSU5FRCA9IDB4ODAsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEwOC0gKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMDk6ZW51bSBjeGFjcnVfY21fZmxhc2gge1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMC1cdENNX0ZMQVNIX1JFQUQgPSAweGExLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTQtLyogcmVwbHkgY29kZXMgdG8gdGhlIGNvbW1hbmRzIGFib3ZlICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTE1OmVudW0gY3hhY3J1X2NtX3N0YXR1cyB7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE2LVx0Q01fU1RBVFVTX1VOREVGSU5FRCxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTcwPXN0cnVjdCBjeGFjcnVfZGF0YSB7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5Mi1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTM6c3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xOTQtXHR1OCAqd2RhdGEsIGludCB3c2l6ZSwgdTggKnJkYXRhLCBpbnQgcnNpemUpO1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0zMzI9c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1Ni1cdGlmICghc3RyY21wKHN0cl9jbWQsIFwmIzM0O3N0b3BcJiMzNDspIHx8ICFzdHJjbXAoc3RyX2NtZCwgXCYjMzQ7cmVzdGFydFwmIzM0OykpIHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNTc6XHRcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVE9QLCBOVUxMLCAwLCBOVUxMLCAwKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTgtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzc2LVx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXCYjMzQ7c3RhcnRcJiMzNDspIHx8ICFzdHJjbXAoc3RyX2NtZCwgXCYjMzQ7cmVzdGFydFwmIzM0OykpIHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNzc6XHRcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzc4LVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTQzNT1zdGF0aWMgc3NpemVfdCBhZHNsX2NvbmZpZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQ4MC1cdFx0XHRkYXRhWzBdID0gY3B1X3RvX2xlMzIobnVtKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo0ODE6XHRcdFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfREFUQV9TRVQsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDgyLVx0XHRcdFx0KHU4ICopIGRhdGEsIDQgJiM0MzsgbnVtICogOCwgTlVMTCwgMCk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU5MD1zdGF0aWMgaW50IGN4YWNydV9zdGFydF93YWl0X3VyYihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBjb21wbGV0aW9uICpkb25lLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy02MDctXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NjA4OnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA5LVx0XHQgICAgIHU4ICp3ZGF0YSwgaW50IHdzaXplLCB1OCAqcmRhdGEsIGludCByc2l6ZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzA5LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcxMDpzdGF0aWMgaW50IGN4YWNydV9jbV9nZXRfYXJyYXkoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MTEtXHRcdFx0ICAgICAgIHUzMiAqZGF0YSwgaW50IHNpemUpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyMy1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MjQ6XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIGNtLCBOVUxMLCAwLCAodTggKikgYnVmLCBidWZsZW4pO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyNS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyNy1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3Mjg6XHQvKiBsZW4gXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGxlbiAlIDQgPT0gMCBndWFyYW50ZWVkIGJ5IGN4YWNydV9jbSgpICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI5LVx0bGVuID0gcmV0IC8gNDtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzYwPXN0YXRpYyBpbnQgY3hhY3J1X2NhcmRfc3RhdHVzKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzYxLXtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3NjI6XHRpbnQgcmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX1NUQVRVUywgTlVMTCwgMCwgTlVMTCwgMCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzYzLVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NzE9c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODEtXHQvKiBSZWFkIE1BQyBhZGRyZXNzICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzgyOlx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX01BQ19BRERSRVNTLCBOVUxMLCAwLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4My1cdFx0XHRhdG1fZGV2LVx1MDAzZWVzaSwgc2l6ZW9mKGF0bV9kZXYtXHUwMDNlZXNpKSk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5MC1cdG11dGV4X2xvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc5MTpcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzkyLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9ODIwPXN0YXRpYyB2b2lkIGN4YWNydV9wb2xsX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgyOS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo4MzA6XHRyZXQgPSBjeGFjcnVfY21fZ2V0X2FycmF5KGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfSU5GT19HRVQsIGJ1ZiwgQ1hJTkZfTUFYKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MzEtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTEwMDY9c3RhdGljIGludCBjeGFjcnVfaGVhdnlfaW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwMS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTAyOlx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX1NUQVRVUywgTlVMTCwgMCwgTlVMTCwgMCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwMy1cdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjMwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVVNCIEFUTSBEcml2ZXIgVXBkYXRlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBgdXNiX2tpbGxfdXJiYCBjYWxsIHdpdGhpbiB0aGUgYGN4YWNydV9jbWAgZnVuY3Rpb24uIEludGVyZXN0aW5nLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgVVNCIEFUTSBkcml2ZXIgY29udGV4dC4gVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgY3hhY3J1YC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMuIEZpcnN0LCBJ4oCZbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGN4YWNydWAgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY2hlY2sgaXRzIEtjb25maWcgZW50cnkgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgb3IgcmVzb3VyY2UgY2xlYW51cCB3aXRoaW4gdGhlIFVTQiBjb21tdW5pY2F0aW9uIGZsb3csIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjeGFjcnUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZz0zMj1jb25maWcgVVNCX0NYQUNSVVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTQxLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjQyOlx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3hhY3J1LlxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgVVNCX0NYQUNSVSBLY29uZmlnIEVudHJ5KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGdldCB0aGUgY29tcGxldGUgS2NvbmZpZyBlbnRyeSBmb3IgYFVTQl9DWEFDUlVgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSBuZWVkIHRoZSBmdWxsIGNvbnRleHQuIEkmIzM5O20gdGhpbmtpbmcgSSB3YW50IHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCB2YWx1ZSwgdGhlIGhlbHAgdGV4dCwgYW5kIGFueSBvdGhlciByZWxldmFudCBtZXRhZGF0YSBzdXJyb3VuZGluZyBpdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDt3aHkmIzM0OyBhbmQgJiMzNDt3aGVuJiMzNDsgdGhpcyBvcHRpb24gaXMgcmVsZXZhbnQuCgpJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSwgYmVjYXVzZSBJIGtub3cgdGhhdCBhIHNpbmdsZSBsaW5lIGluIGEgYEtjb25maWdgIGZpbGUgY2FuIGJlIGRlY2VwdGl2ZWx5IHNpbXBsZS4gSSYjMzk7bSBhZnRlciB0aGUgcmVsYXRpb25zaGlwcy4gRG9lcyBpdCBkZXBlbmQgb24gc3BlY2lmaWMgQ1BVIGFyY2hpdGVjdHVyZXM/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvbiBvdGhlciBVU0IgY29uZmlndXJhdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgVVNCIGRyaXZlcnMsIGVzcGVjaWFsbHkgYW55IGxpa2VseSBjb25mbGljdHMgb3IgaW50ZWdyYXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIENYQUNSVSBkcml2ZXIgKG9yIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eSkgaXMgc3RydWN0dXJlZCBpbiB0ZXJtcyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgZmVhdHVyZXMuCgpTbywgdGhlIGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgYFVTQl9DWEFDUlVgLiBPbmx5IHRoZW4gY2FuIEkgdHJ1bHkgYmVnaW4gdG8gYXNzZXNzIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcGVlZHRjaC5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgVVNCX0NYQUNSVVxuICAzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBzdXBwb3J0XCYjMzQ7XG4gIDM0Olx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gQURTTCBVU0IgbW9kZW0gYmFzZWQgb24gdGhlIENvbmV4YW50XG4gIDM3Olx0XHQgIEFjY2Vzc1J1bm5lciBjaGlwc2V0LiAgSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0b1xuICAzODpcdFx0ICBpbnN0YWxsIHRoZSBmaXJtd2FyZSwgZXh0cmFjdGVkIGJ5IHRoZSB1c2VyIHNwYWNlIHRvb2xzOyBzZWVcbiAgMzk6XHRcdCAgXHUwMDNjaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlIGZvciBkZXRhaWxzLlxuICA0MDpcdFxuICA0MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNDI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4YWNydS5cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgVVNCX1VFQUdMRUFUTVxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7QURJIDkzMCBhbmQgZWFnbGUgVVNCIERTTCBtb2RlbVwmIzM0O1xuICA0NjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFEU0wgVVNCIG1vZGVtIGJhc2VkIG9uIHRoZSBBREkgOTMwXG4gIDQ5Olx0XHQgIG9yIGVhZ2xlIGNoaXBzZXQuIEluIG9yZGVyIHRvIHVzZSB5b3VyIG1vZGVtIHlvdSB3aWxsIG5lZWQgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTkxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlVTQiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBVU0IgY29uZmlndXJhdGlvbiBoZXJlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGlzIGBVU0JfQ1hBQ1JVYCBjb25maWcsIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBwaXF1aW5nIG15IGludGVyZXN0IGF0IHRoZSBtb21lbnQuIEJ1dCwgeW91IGtub3csIG15IGJyYWluJiMzOTtzIGFscmVhZHkgbWFraW5nIGNvbm5lY3Rpb25zLiBJJiMzOTttIHdvbmRlcmluZywgYXMgYSBtYXR0ZXIgb2YgY291cnNlLCBob3cgdGhpcyBjb25uZWN0cyBvciBjb250cmFzdHMgd2l0aCBgVVNCX0FUTWA/IEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBpdHMgcG90ZW50aWFsIHJlbGF0aW9uc2hpcCwgaWYgYW55LiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgdW5wYWNrIGBVU0JfQ1hBQ1JVYC4gVW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBsYW5kc2NhcGUgb2YgcmVsYXRlZCBVU0IgY29uZmlndXJhdGlvbnMsIGxpa2UgdGhlIEFUTSBjb25uZWN0aW9uLCBpcyBrZXkgdG8gZ2V0dGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gQWx3YXlzIHN0YXJ0IHdpdGggdGhlIGdlbmVyYWwsIHRoZW4gd29yayB0byB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0FUTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTUtXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo2Om1lbnVjb25maWcgVVNCX0FUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1VTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIFVTQl9BVE0gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFVTQl9BVE1gLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O1doYXQgYXJlIHRoZSAqa2V5KiBjb21wb25lbnRzIHRoYXQgdGhpcyByZWxpZXMgdXBvbj8mIzM0OyBJIG5lZWQgdG8gbWFwIG91dCB0aGUgZW50aXJlIGxhbmRzY2FwZS4gTXkgbWluZCYjMzk7cyBydW5uaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBhcmVhczoga2VybmVsIG1vZHVsZXMsIGRldmljZSBkcml2ZXJzLCBwZXJoYXBzIHNvbWUgdXNlcnNwYWNlIHV0aWxpdGllcywgYW5kIGRlZmluaXRlbHkgc29tZSBjcnVjaWFsIGxpYnJhcmllcy4gVGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBtb2R1bGU7IGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbmV0d29yayBzdGFjaywgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzIChIQUxzKSwgYW5kIHBvc3NpYmx5IGV2ZW4gc3BlY2lmaWMgQVRNIGhhcmR3YXJlIGlmIGl0JiMzOTtzIG5vdCBwdXJlbHkgYSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbi4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHdoYXQgb3RoZXIgbW9kdWxlcyBhcmUgcmVxdWlyZWQsIHdoYXQgQVBJcyBpdCBleHBvc2VzLCBhbmQgaWYgaXQmIzM5O3MgYnVpbHQgb24gdG9wIG9mIG1vcmUgZnVuZGFtZW50YWwgbmV0d29ya2luZyBsYXllcnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjaGFpbiByZWFjdGlvbiBhbmQgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLiBXaGVyZSBpcyB0aGUgcG90ZW50aWFsIGZvciBjb25mbGljdHMsIGFuZCB3aGF0IHZlcnNpb25zIGRvIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gS25vd2luZyB0aGUgY29tcGxldGUgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSB0cm91Ymxlc2hvb3Rpbmcgb3Igc3lzdGVtIGRlc2lnbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgVVNCL0FUTSBEU0wgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIFVTQl9BVE1cbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBBVE1cbiAgIDk6XHRcdHNlbGVjdCBDUkMzMlxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBVU0IgRGlnaXRhbCBTdWJzY3JpYmVyIExpbmUgKERTTClcbiAgMTI6XHRcdCAgbW9kZW0gdG8geW91ciBjb21wdXRlciYjMzk7cyBVU0IgcG9ydC4gIFlvdSB3aWxsIHRoZW4gbmVlZCB0byBjaG9vc2UgeW91clxuICAxMzpcdFx0ICBtb2RlbSBmcm9tIHRoZSBsaXN0IGJlbG93LlxuICAxNDpcdFxuICAxNTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMTY6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmF0bS5cbiAgMTc6XHRcbiAgMTg6XHRpZiBVU0JfQVRNXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIFVTQl9TUEVFRFRPVUNIXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVwZW5kZW5jeSBBbmFseXNpcyBhbmQgRnVuY3Rpb24gQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGBVU0JfQVRNYCByZWxpZXMgb24gYEFUTWAsIGFuZCBgVVNCX0NYQUNSVWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgVVNCX0FUTWAuICBUaGF0IHRlbGxzIG1lIHJpZ2h0IGF3YXkgdGhhdCBpZiBJJiMzOTttIHdvcmtpbmcgd2l0aCBgVVNCX0NYQUNSVWAsIEkmIzM5O20gaW1wbGljaXRseSBkZWFsaW5nIHdpdGggYEFUTWAgYW5kIGBVU0JfQVRNYCBhcyB3ZWxsLiAgU28sIGluIHRlcm1zIG9mIGRlcGVuZGVuY2llcywgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBBVE1gLCBgVVNCX0FUTWAsIGFuZCBgVVNCX0NYQUNSVWAgYXJlIGFsbCBhY2NvdW50ZWQgZm9yLiBUaGlzIHNlZW1zIGJhc2ljIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAuCgpNeSBmb2N1cyBpcyBvbiB0aGUgYGN4YWNydV9jbWAgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBnZXRzIGNhbGxlZCBmcmVxdWVudGx5IG9yIGlmIGl0JiMzOTtzIG1vcmUgb2YgYW4gaW5pdGlhbGl6YXRpb24gb3Igc2V0dXAgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBuYW1lLCBhbmQgbXkgZXhwZXJpZW5jZSwgaXQgc2VlbXMgbGlrZSBhICYjMzQ7Y29tbWFuZCYjMzQ7IGZ1bmN0aW9uOyBtb3JlIGxpa2VseSB1c2VkIGZvciBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb3Igc29tZSBraW5kIG9mIGNvbnRyb2wgbWVjaGFuaXNtIHRoYW4gY29yZSBkYXRhIHRyYW5zZmVyLiBOb3cgbGV0IG1lIHRyYWNlIGl0cyBjYWxscyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQmIzM5O3MgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3hhY3J1X2NtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz01OT1lbnVtIGN4YWNydV9md19yZXF1ZXN0IHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzAtICogZmlybXdhcmUgaXMgbG9hZGVkICAqL1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcxOmVudW0gY3hhY3J1X2NtX3JlcXVlc3Qge1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyLVx0Q01fUkVRVUVTVF9VTkRFRklORUQgPSAweDgwLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMDgtICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTA5OmVudW0gY3hhY3J1X2NtX2ZsYXNoIHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTAtXHRDTV9GTEFTSF9SRUFEID0gMHhhMSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0LS8qIHJlcGx5IGNvZGVzIHRvIHRoZSBjb21tYW5kcyBhYm92ZSAqL1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjExNTplbnVtIGN4YWNydV9jbV9zdGF0dXMge1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNi1cdENNX1NUQVRVU19VTkRFRklORUQsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xOTItXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTkzOnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk0LVx0dTggKndkYXRhLCBpbnQgd3NpemUsIHU4ICpyZGF0YSwgaW50IHJzaXplKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzMyPXN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTYtXHRpZiAoIXN0cmNtcChzdHJfY21kLCBcJiMzNDtzdG9wXCYjMzQ7KSB8fCAhc3RyY21wKHN0cl9jbWQsIFwmIzM0O3Jlc3RhcnRcJiMzNDspKSB7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzU3Olx0XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RPUCwgTlVMTCwgMCwgTlVMTCwgMCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzU4LVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM3Ni1cdGlmICghc3RyY21wKHN0cl9jbWQsIFwmIzM0O3N0YXJ0XCYjMzQ7KSB8fCAhc3RyY21wKHN0cl9jbWQsIFwmIzM0O3Jlc3RhcnRcJiMzNDspKSB7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6Mzc3Olx0XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDApO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM3OC1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz00MzU9c3RhdGljIHNzaXplX3QgYWRzbF9jb25maWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00ODAtXHRcdFx0ZGF0YVswXSA9IGNwdV90b19sZTMyKG51bSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NDgxOlx0XHRcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0RBVEFfU0VULFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQ4Mi1cdFx0XHRcdCh1OCAqKSBkYXRhLCA0ICYjNDM7IG51bSAqIDgsIE5VTEwsIDApO1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz01OTA9c3RhdGljIGludCBjeGFjcnVfc3RhcnRfd2FpdF91cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA3LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjYwODpzdGF0aWMgaW50IGN4YWNydV9jbShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTYwOS1cdFx0ICAgICB1OCAqd2RhdGEsIGludCB3c2l6ZSwgdTggKnJkYXRhLCBpbnQgcnNpemUpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcwOS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MTA6c3RhdGljIGludCBjeGFjcnVfY21fZ2V0X2FycmF5KHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzExLVx0XHRcdCAgICAgICB1MzIgKmRhdGEsIGludCBzaXplKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjMtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzI0Olx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBjbSwgTlVMTCwgMCwgKHU4ICopIGJ1ZiwgYnVmbGVuKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjUtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjctXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzI4Olx0LyogbGVuIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBsZW4gJSA0ID09IDAgZ3VhcmFudGVlZCBieSBjeGFjcnVfY20oKSAqL1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyOS1cdGxlbiA9IHJldCAvIDQ7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTc2MD1zdGF0aWMgaW50IGN4YWNydV9jYXJkX3N0YXR1cyhzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2MS17XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzYyOlx0aW50IHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0dFVF9TVEFUVVMsIE5VTEwsIDAsIE5VTEwsIDApO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2My1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzcxPXN0YXRpYyBpbnQgY3hhY3J1X2F0bV9zdGFydChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzgxLVx0LyogUmVhZCBNQUMgYWRkcmVzcyAqL1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc4MjpcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0dFVF9NQUNfQUREUkVTUywgTlVMTCwgMCxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODMtXHRcdFx0YXRtX2Rldi1cdTAwM2Vlc2ksIHNpemVvZihhdG1fZGV2LVx1MDAzZWVzaSkpO1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTAtXHRtdXRleF9sb2NrKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3OTE6XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDApO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5Mi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTgyMD1zdGF0aWMgdm9pZCBjeGFjcnVfcG9sbF9zdGF0dXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MjktXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODMwOlx0cmV0ID0gY3hhY3J1X2NtX2dldF9hcnJheShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0lORk9fR0VULCBidWYsIENYSU5GX01BWCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODMxLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xMDA2PXN0YXRpYyBpbnQgY3hhY3J1X2hlYXZ5X2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMDEtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTEwMjpcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0dFVF9TVEFUVVMsIE5VTEwsIDAsIE5VTEwsIDApO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMDMtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNzQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDWEFDUlUgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSByZWZlcmVuY2VzIGluIGBjeGFjcnVfYXRtX3N0YXJ0YCwgYGN4YWNydV9oZWF2eV9pbml0YCwgYGN4YWNydV9wb2xsX3N0YXR1c2AsIGBhZHNsX3N0YXRlX3N0b3JlYCwgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAuIEdpdmVuIHRoYXQgYGN4YWNydV9jbWAgaXMgc3RhdGljLCBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGF0IGFzaWRlIGZvciBub3c7IGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgdGhlIGNvcmUgaXNzdWUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aG9zZSBvdGhlciBmdW5jdGlvbnMuIFdhaXQgYSBzZWNvbmQuLi4gYGN4YWNydV9hdG1fc3RhcnRgIGFuZCBgY3hhY3J1X2hlYXZ5X2luaXRgIGFyZSBjYWxsYmFja3MuIFJpZ2h0LCB0aGF0IGNoYW5nZXMgdGhpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBjYWxsYmFja3MuIFRpbWUgdG8gZGlnIGludG8gdGhlIHN0cnVjdCB0aGV5JiMzOTtyZSBhc3NpZ25lZCB0byDigJMgdGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgY3J1Y2lhbCBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3hhY3J1X2F0bV9zdGFydHxjeGFjcnVfaGVhdnlfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzYwPXN0YXRpYyBpbnQgY3hhY3J1X2NhcmRfc3RhdHVzKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc3MC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3NzE6c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc3Mi1cdFx0c3RydWN0IGF0bV9kZXYgKmF0bV9kZXYpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4NC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3ODU6XHRcdGF0bV9lcnIodXNiYXRtX2luc3RhbmNlLCBcJiMzNDtjeGFjcnVfYXRtX3N0YXJ0OiBDQVJEX0dFVF9NQUNfQUREUkVTUyByZXR1cm5lZCAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODYtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5Mi1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkzOlx0XHRhdG1fZXJyKHVzYmF0bV9pbnN0YW5jZSwgXCYjMzQ7Y3hhY3J1X2F0bV9zdGFydDogQ0hJUF9BRFNMX0xJTkVfU1RBUlQgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzk0LVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz05ODY9c3RhdGljIGludCBjeGFjcnVfZmluZF9maXJtd2FyZShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMDA1LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEwMDY6c3RhdGljIGludCBjeGFjcnVfaGVhdnlfaW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMDA3LVx0XHRcdCAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pbnRmKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xMzQyPXN0YXRpYyBzdHJ1Y3QgdXNiYXRtX2RyaXZlciBjeGFjcnVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMzQ0LVx0LmJpbmRcdFx0PSBjeGFjcnVfYmluZCxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMzQ1Olx0LmhlYXZ5X2luaXRcdD0gY3hhY3J1X2hlYXZ5X2luaXQsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTM0Ni1cdC51bmJpbmRcdFx0PSBjeGFjcnVfdW5iaW5kLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEzNDc6XHQuYXRtX3N0YXJ0XHQ9IGN4YWNydV9hdG1fc3RhcnQsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTM0OC1cdC5idWxrX2luXHQ9IENYQUNSVV9FUF9EQVRBLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjkxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIHRoZSBjeGFjcnUgRHJpdmVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgY3hhY3J1X2RyaXZlcmAgaXMgYSBgdXNiYXRtX2RyaXZlcmAsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQVRNIG92ZXIgVVNCLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzZWUgYGN4YWNydV9iaW5kYCwgYGN4YWNydV9oZWF2eV9pbml0YCwgYW5kIGBjeGFjcnVfYXRtX3N0YXJ0YCBqdW1wIG91dCBhcyBpbml0aWFsIGZ1enppbmcgdGFyZ2V0cy4gR29vZCBjYW5kaWRhdGVzIHRvIHN0YXJ0IHdpdGguCgpIb2xkIG9uLi4uIEkmIzM5O3ZlIGdvdCBzb21ldGhpbmcuIEkgc2VlIHRoYXQgYGN4YWNydV9jbWAgaXMgY2FsbGVkIGZyb20gYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgLiBBaGEsIHRoZXNlIGFyZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMhIFdlIG1pZ2h0IGdldCBzb21lIGludGVyZXN0aW5nIGVudHJ5IHBvaW50cyB0aHJvdWdoIHRob3NlLiBMZXQmIzM5O3MgbWFrZSBhIG5vdGUgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gT2gsIGFuZCBoZXJlIGlzIGBjeGFjcnVfcG9sbF9zdGF0dXNgIGFzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uLgoKU28sIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlIGFyZSBsb29raW5nIGxpa2U6IGBjeGFjcnVfaGVhdnlfaW5pdGAsIGBjeGFjcnVfYXRtX3N0YXJ0YCwgYGFkc2xfc3RhdGVfc3RvcmVgLCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYC4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3MgY3J1Y2lhbCB3ZSBnZXQgdGhlIGRlcGVuZGVuY2llcyByaWdodC4gYFVTQl9DWEFDUlVgIGRlcGVuZHMgb24gYFVTQl9BVE1gLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYEFUTWAuIEdvdCBpdC4gV2UgbmVlZCB0byBlbmFibGUgYFVTQl9DWEFDUlVgLCBgVVNCX0FUTWAsIGFuZCBgQVRNYCBpbiB0aGUga2VybmVsIGNvbmZpZy4gV2FpdCBhIG1pbnV0ZS4uLiBgVVNCX0NYQUNSVWAgKnNlbGVjdHMqIGBGV19MT0FERVJgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgd2UgY2FuIHRyaWdnZXIgYWRkaXRpb25hbCBjb2RlIHBhdGhzLgoKQWxyaWdodCwgbGV0JiMzOTtzIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gSXQgbW9kaWZpZXMgYSBVU0IgZHJpdmVyLCBhbmQgdGhhdCBpcyBhIG1ham9yIHBsdXMgaW4gbXkgYm9vay4gVVNCIGRyaXZlcnMgYXJlIG5pY2VseSBmdXp6YWJsZSB3aXRoIGVtdWxhdGVkIGRldmljZXMsIGxpa2UgZHVtbXlfaGNkIG9yIFN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIEFic29sdXRlbHksIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpTbywgdG8gc3VtbWFyaXplLCB0aGUgY29uZmlncyBJJiMzOTttIGVuYWJsaW5nIGFyZToKCiogICBgVVNCX0NYQUNSVWAKKiAgIGBVU0JfQVRNYAoqICAgYEFUTWAKCkFuZCB0aGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIHRhcmdldGluZyBhcmU6CgoqICAgYGN4YWNydV9oZWF2eV9pbml0YAoqICAgYGN4YWNydV9hdG1fc3RhcnRgCiogICBgYWRzbF9zdGF0ZV9zdG9yZWAKKiAgIGBhZHNsX2NvbmZpZ19zdG9yZWAKCkkgc2hvdWxkIGRvdWJsZS1jaGVjayBpZiBgY3hhY3J1X2NtYCBpcyBzdGF0aWMsIHdoaWNoIGl0IGxvb2tzIGxpa2UgaXQgaXMuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBmb2N1cyBvbiBpdHMgY2FsbGVycy4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBhcmUgbm90IHN0YXRpYywgb3IgaWYgdGhleSBhcmUgc3RhdGljIHdoYXQgYXJlIHRoZWlyIGFzc2lnbm1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZHNsX3N0YXRlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0zMTU9c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMzMjpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDY4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipFeGFtaW5pbmcgdGhlIFN5c2ZzIEF0dHJpYnV0ZSBBc3NpZ25tZW50KioKClJpZ2h0LCBzbyB0aGVzZSB0aGluZ3MgYXJlIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gaXRzZWxmLiBCdXQgdGhleSBhcmUgYWxzbyBkZXNpZ25hdGVkIGFzIGBzeXNmc2Agc3RvcmUgZnVuY3Rpb25zLiBUaGF0IG1lYW5zIHRoZXkmIzM5O3JlIGhvb2tlZCBpbnRvIHRoZSBzeXNmcyBpbmZyYXN0cnVjdHVyZSBzb21laG93LCBhc3NpZ25lZCB0byBgREVWSUNFX0FUVFJgIHN0cnVjdHVyZXMgbW9zdCBsaWtlbHkuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGFyZSB0aGV5IGFjdHVhbGx5ICpleHBvc2VkKiB0aHJvdWdoIHN5c2ZzPyBBcmUgdGhleSBzaG93aW5nIHVwIGFzIGF0dHJpYnV0ZXMgdW5kZXIgYSBkZXZpY2Ugbm9kZSwgYWxsb3dpbmcgdXMgdG8gcmVhZCBhbmQgd3JpdGUgdG8gdGhlbT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBhY3R1YWwgc3lzZnMgdHJlZSB0byBjb25maXJtIHRoZWlyIHZpc2liaWxpdHkgYW5kIHVuZGVyc3RhbmQgd2hhdCBlZmZlY3QgdGhleSYjMzk7bGwgaGF2ZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhwbG9yZSBob3cgdGhleSBhcmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERVZJQ0VfQVRUUi4qYWRzbF9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzA4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoZXNlIHRlY2huaWNhbCB0ZXJtczoKCioqQ2hlY2tpbmcgQmFjayBvbiBgYWRzbF9zdGF0ZV9zdG9yZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHJldmlzaXQgdGhpcy4gSSBrbm93IHdlJiMzOTt2ZSBsb29rZWQgYXQgaXQgYmVmb3JlLCBidXQgc29tZXRoaW5nIGlzIG5hZ2dpbmcgYXQgbWUuIFRpbWUgdG8gZG8gYSBxdWljayBzZWFyY2ggZm9yIGBhZHNsX3N0YXRlX3N0b3JlYCBhZ2Fpbi4gTmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGluIGl0cyBiZWhhdmlvciBvciBpbnRlcmFjdGlvbnMuIEdvdHRhIGtlZXAgZGlnZ2luZzsgaXQmIzM5O3MgcHJvYmFibHkgaW1wb3J0YW50IHRvIHRoZSBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgd2hhdCB0dXJucyB1cCB0aGlzIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fkc2xfc3RhdGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMxNT1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzEtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gTGV0JiMzOTtzIHNlZSBob3cgSSBjYW4gc3VtbWFyaXplIHRoaXMgZm9yIGFuIGV4cGVydC4uLgoKKioqCgoqKk15IEFuYWx5dGljYWwgUHJvY2VzcyoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBpcyB0byBlc3NlbnRpYWxseSB1bnBhY2sgYSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBhbmQgdGhlbiByZS1wcmVzZW50IGl0IGluIGEgY29uY2lzZSB3YXkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzPyBJdCYjMzk7cyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgaW5oZXJlbnQgdXNhZ2UuIFdoYXQgaXMgdGhpcyBwaWVjZSBvZiB0ZXh0ICpmb3IqPyBIb3cgaXMgaXQgaW50ZW5kZWQgdG8gYmUgdXNlZCBvciBob3cgY2FuIGl0IGJlIHVzZWQsIGV2ZW4gaWYgSSYjMzk7bSBub3QgZ2l2ZW4gZXhwbGljaXQgY29udGV4dD8gVG8gZGlzdGlsbCBpdCB0byBpdHMgZXNzZW5jZSByZXF1aXJlcyBncmFzcGluZyBpdHMgcHVycG9zZSB3aXRoaW4gYSBicm9hZGVyIGZyYW1ld29yay4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgJiMzOTtob3cmIzM5OyBhbmQgJiMzOTt3aHkmIzM5OyBvZiBpdHMgYXBwbGljYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbnRlbmRlZCBmdW5jdGlvbiwgdGhlIGltcGxpY2F0aW9ucyBhbmQgdGhlIGNvcmUgY29uY2VwdHMgYXQgcGxheSBhbmQgdGhlbiBwcmVzZW50IGl0IGVmZmljaWVudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzg1Olx0XHRcdFx0cG9sbCA9IENYUE9MTF9QT0xMSU5HO1xuIDM4NjpcdFx0XHR9XG4gMzg3Olx0XHR9XG4gMzg4Olx0XG4gMzg5Olx0XHRpZiAoIXN0cmNtcChzdHJfY21kLCBcJiMzNDtwb2xsXCYjMzQ7KSkge1xuIDM5MDpcdFx0XHRyZXQgPSBsZW47XG4gMzkxOlx0XHRcdHBvbGwgPSBDWFBPTExfUE9MTElORztcbiAzOTI6XHRcdH1cbiAzOTM6XHRcbiAzOTQ6XHRcdGlmIChyZXQgPT0gMCkge1xuIDM5NTpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDM5NjpcdFx0XHRwb2xsID0gLTE7XG4gMzk3Olx0XHR9XG4gMzk4Olx0XG4gMzk5Olx0XHRpZiAocG9sbCA9PSBDWFBPTExfUE9MTElORykge1xuIDQwMDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmluc3RhbmNlLVx1MDAzZXBvbGxfc3RhdGVfc2VyaWFsaXplKTtcbiA0MDE6XHRcdFx0c3dpdGNoIChpbnN0YW5jZS1cdTAwM2Vwb2xsX3N0YXRlKSB7XG4gNDAyOlx0XHRcdGNhc2UgQ1hQT0xMX1NUT1BQRUQ6XG4gNDAzOlx0XHRcdFx0Lyogc3RhcnQgcG9sbGluZyAqL1xuIDQwNDpcdFx0XHRcdGluc3RhbmNlLVx1MDAzZXBvbGxfc3RhdGUgPSBDWFBPTExfUE9MTElORztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0OTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBzZWN0aW9uLCBzcGVjaWZpY2FsbHksIHRoYXQmIzM5O3MgbGluZXMgMzMyIGFuZCBiZXlvbmQuIFRoZSBjb250ZXh0IGlzIGltcG9ydGFudCwgYnV0IGZvciB0aGUgc3VtbWFyeSBJIHdhbnQgdG8gZm9jdXMgb24gdGhpcyBwb3J0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBkZWVwZXIgbG9vayB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIHRoYXQgc3BlY2lmaWMgcG9ydGlvbiBvZiB0aGUgdGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMjpcdHN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIDMzMzpcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIDMzNDpcdHtcbiAzMzU6XHRcdHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB0b191c2JhdG1fZHJpdmVyX2RhdGEoXG4gMzM2Olx0XHRcdFx0dG9fdXNiX2ludGVyZmFjZShkZXYpKTtcbiAzMzc6XHRcdGludCByZXQ7XG4gMzM4Olx0XHRpbnQgcG9sbCA9IC0xO1xuIDMzOTpcdFx0Y2hhciBzdHJfY21kWzhdO1xuIDM0MDpcdFx0aW50IGxlbiA9IHN0cmxlbihidWYpO1xuIDM0MTpcdFxuIDM0MjpcdFx0aWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKVxuIDM0MzpcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiAzNDQ6XHRcbiAzNDU6XHRcdHJldCA9IHNzY2FuZihidWYsIFwmIzM0OyU3c1wmIzM0Oywgc3RyX2NtZCk7XG4gMzQ2Olx0XHRpZiAocmV0ICE9IDEpXG4gMzQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM0ODpcdFx0cmV0ID0gMDtcbiAzNDk6XHRcbiAzNTA6XHRcdGlmIChpbnN0YW5jZSA9PSBOVUxMKVxuIDM1MTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipGaW5kaW5nIHRoZSBBc3NpZ25tZW50IG9mIGBhZHNsX3N0YXRlX3N0b3JlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGFkc2xfc3RhdGVfc3RvcmVgIGlzIHVzZWQuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSB0cmFjZSB3aGVyZSBpdCYjMzk7cyAqYXNzaWduZWQqIGEgdmFsdWUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9yIG1vZGlmaWNhdGlvbiBwb2ludHMgb2YgdGhpcyB2YXJpYWJsZS4gVGhpcyBpcyBmdW5kYW1lbnRhbDsga25vd2luZyB3aGVyZSB0aGUgZGF0YSBvcmlnaW5hdGVzIGdpdmVzIG1lIGEgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZm9sbG93IGl0cyBmbG93IGFuZCB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgc3lzdGVtLiBXaXRob3V0IGtub3dpbmcgaXRzIHNvdXJjZSwgYW55IGZ1cnRoZXIgYW5hbHlzaXMgaXMgZ29pbmcgdG8gYmUgZ3Vlc3NpbmcgYXQgYmVzdCwgYW5kIGluZWZmaWNpZW50IGF0IHdvcnN0LiBTbywgZmluZCB0aGUgYXNzaWdubWVudCEgVGhhdCYjMzk7cyB0aGUga2V5IHRvIGV2ZXJ5dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fkc2xfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xNzUtXHRpbnQgbGluZV9zdGF0dXM7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTc2Olx0c3RydWN0IG11dGV4IGFkc2xfc3RhdGVfc2VyaWFsaXplO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE3Ny1cdGludCBhZHNsX3N0YXR1cztcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzAzPXN0YXRpYyBzc2l6ZV90IG1hY19hZGRyZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMTQtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzE1OnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE2LVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMzMjpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1Mi1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNTM6XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmluc3RhbmNlLVx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTQtXHRcdHJldHVybiAtRVJFU1RBUlRTWVM7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo0MjU6XHRtdXRleF91bmxvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNi1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTM1PUNYQUNSVV9BVFRSXyMjX2FjdGlvbihDWElORl9DT05UUk9MTEVSX1ZFUlNJT04sICAgICAgICB1MzIsICBhZHNsX2NvbnRyb2xsZXJfdmVyc2lvbik7IFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NTM2OkNYQUNSVV9DTURfIyNfYWN0aW9uKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHNsX3N0YXRlKTsgXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01MzctQ1hBQ1JVX1NFVF8jI19hY3Rpb24oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkc2xfY29uZmlnKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTQxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjeGFjcnVfYXR0cnNbXSA9IHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01NDItXHRcdTAwMjZkZXZfYXR0cl9hZHNsX2NvbmZpZy5hdHRyLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjU0MzpcdFx1MDAyNmRldl9hdHRyX2Fkc2xfc3RhdGUuYXR0cixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01NDQtXHRcdTAwMjZkZXZfYXR0cl9hZHNsX2NvbnRyb2xsZXJfdmVyc2lvbi5hdHRyLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NzE9c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODktXHQvKiBzdGFydCBBRFNMICovXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkwOlx0bXV0ZXhfbG9jayhcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzkxLVx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODEyLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluc3RhbmNlLVx1MDAzZXBvbGxfc3RhdGVfc2VyaWFsaXplKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo4MTM6XHRtdXRleF91bmxvY2soXHUwMDI2aW5zdGFuY2UtXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgxNC1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9ODIwPXN0YXRpYyB2b2lkIGN4YWNydV9wb2xsX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgzOS1cdFx0XHRpZiAocmV0ICE9IC1FU0hVVERPV04pXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODQwOlx0XHRcdFx0YXRtX3dhcm4odXNiYXRtLCBcJiMzNDtwb2xsaW5nIGRpc2FibGVkLCBzZXQgYWRzbF9zdGF0ZVwmIzM0O1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTg0MS1cdFx0XHRcdFx0XHRcJiMzNDsgdG8gJiMzOTtzdGFydCYjMzk7IG9yICYjMzk7cG9sbCYjMzk7IHRvIHJlc3VtZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTExMjI9c3RhdGljIGludCBjeGFjcnVfYmluZChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0Ni1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTQ3Olx0bXV0ZXhfaW5pdChcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENYQUNSVSBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgQ1hBQ1JVX0NNRF8jI19hY3Rpb24oYWRzbF9zdGF0ZSlgIGJlY29tZXMgYGRldl9hdHRyX2Fkc2xfc3RhdGVgIHRocm91Z2ggZXhwYW5zaW9uLiBUaGF0IG1lYW5zIGBhZHNsX3N0YXRlX3N0b3JlYCBhbmQgYGFkc2xfY29uZmlnX3N0b3JlYCBhcmUgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBpdCBhbHNvIG1lYW5zIGRpcmVjdGx5IGZ1enppbmcgdGhlbSBpcyBnb2luZyB0byBiZSBhIHBhaW4gaWYgdGhleSYjMzk7cmUgbm90IHN0YW5kYXJkIHN5c2ZzIGF0dHJpYnV0ZXMuIFRob3VnaCwgb2YgY291cnNlLCBTeXprYWxsZXIgKmNhbiogZnV6eiBzeXNmcywgc28gaXQmIzM5O3Mgbm90IGEgY29tcGxldGUgZGVhZCBlbmQuCgpIb3dldmVyLCB0aGUgcmVhbCBnZW1zIGhlcmUgYXJlIGxpa2VseSBgY3hhY3J1X2hlYXZ5X2luaXRgIGFuZCBgY3hhY3J1X2F0bV9zdGFydGAuIFRoZXNlIGFyZSBzdGFuZGFyZCBVU0IgQVRNIGNhbGxiYWNrcywgd2hpY2ggdGVsbHMgbWUgdGhleSYjMzk7bGwgYmUgY2FsbGVkIGR1cmluZyBkZXZpY2UgcHJvYmUgYW5kIHN0YXJ0dXAuIFRoaXMgbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIOKAkyBtdWNoIGVhc2llciB0byB0cmlnZ2VyIGFuZCBvYnNlcnZlIHRoYW4gc29tZXRoaW5nIGJ1cmllZCBkZWVwIGluIHN5c2ZzLiBEZWZpbml0ZWx5IGZvY3VzaW5nIG9uIHRob3NlLiBBbmQgYGN4YWNydV9iaW5kYCBzZWVtcyBsaWtlIGFub3RoZXIgcG90ZW50aWFsbHkgZnJ1aXRmdWwgc3RhcnRpbmcgcG9pbnQuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgY3hhY3J1X2NtYCBnZXRzIGNhbGxlZCBmcm9tIGBjeGFjcnVfYmluZGAuIFRoYXQgY291bGQgb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIGF2ZW51ZXMgZm9yIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N4YWNydV9jbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTk9ZW51bSBjeGFjcnVfZndfcmVxdWVzdCB7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcwLSAqIGZpcm13YXJlIGlzIGxvYWRlZCAgKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MTplbnVtIGN4YWNydV9jbV9yZXF1ZXN0IHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03Mi1cdENNX1JFUVVFU1RfVU5ERUZJTkVEID0gMHg4MCxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTA4LSAqL1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEwOTplbnVtIGN4YWNydV9jbV9mbGFzaCB7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwLVx0Q01fRkxBU0hfUkVBRCA9IDB4YTEsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNC0vKiByZXBseSBjb2RlcyB0byB0aGUgY29tbWFuZHMgYWJvdmUgKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTU6ZW51bSBjeGFjcnVfY21fc3RhdHVzIHtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTYtXHRDTV9TVEFUVVNfVU5ERUZJTkVELFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xNzA9c3RydWN0IGN4YWNydV9kYXRhIHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTkyLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjE5MzpzdGF0aWMgaW50IGN4YWNydV9jbShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5NC1cdHU4ICp3ZGF0YSwgaW50IHdzaXplLCB1OCAqcmRhdGEsIGludCByc2l6ZSk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMzMj1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzU2LVx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXCYjMzQ7c3RvcFwmIzM0OykgfHwgIXN0cmNtcChzdHJfY21kLCBcJiMzNDtyZXN0YXJ0XCYjMzQ7KSkge1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjM1NzpcdFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUT1AsIE5VTEwsIDAsIE5VTEwsIDApO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1OC1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNzYtXHRpZiAoIXN0cmNtcChzdHJfY21kLCBcJiMzNDtzdGFydFwmIzM0OykgfHwgIXN0cmNtcChzdHJfY21kLCBcJiMzNDtyZXN0YXJ0XCYjMzQ7KSkge1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjM3NzpcdFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNzgtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NDM1PXN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDgwLVx0XHRcdGRhdGFbMF0gPSBjcHVfdG9fbGUzMihudW0pO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjQ4MTpcdFx0XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9EQVRBX1NFVCxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00ODItXHRcdFx0XHQodTggKikgZGF0YSwgNCAmIzQzOyBudW0gKiA4LCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTkwPXN0YXRpYyBpbnQgY3hhY3J1X3N0YXJ0X3dhaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTYwNy1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo2MDg6c3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy02MDktXHRcdCAgICAgdTggKndkYXRhLCBpbnQgd3NpemUsIHU4ICpyZGF0YSwgaW50IHJzaXplKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MDktXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzEwOnN0YXRpYyBpbnQgY3hhY3J1X2NtX2dldF9hcnJheShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcxMS1cdFx0XHQgICAgICAgdTMyICpkYXRhLCBpbnQgc2l6ZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzIzLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcyNDpcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgY20sIE5VTEwsIDAsICh1OCAqKSBidWYsIGJ1Zmxlbik7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI3LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcyODpcdC8qIGxlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgbGVuICUgNCA9PSAwIGd1YXJhbnRlZWQgYnkgY3hhY3J1X2NtKCkgKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjktXHRsZW4gPSByZXQgLyA0O1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NjA9c3RhdGljIGludCBjeGFjcnVfY2FyZF9zdGF0dXMoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NjEte1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc2MjpcdGludCByZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfU1RBVFVTLCBOVUxMLCAwLCBOVUxMLCAwKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NjMtXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTc3MT1zdGF0aWMgaW50IGN4YWNydV9hdG1fc3RhcnQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4MS1cdC8qIFJlYWQgTUFDIGFkZHJlc3MgKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3ODI6XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfTUFDX0FERFJFU1MsIE5VTEwsIDAsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzgzLVx0XHRcdGF0bV9kZXYtXHUwMDNlZXNpLCBzaXplb2YoYXRtX2Rldi1cdTAwM2Vlc2kpKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzkwLVx0bXV0ZXhfbG9jayhcdTAwMjZpbnN0YW5jZS1cdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkxOlx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz04MjA9c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODI5LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjgzMDpcdHJldCA9IGN4YWNydV9jbV9nZXRfYXJyYXkoaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9JTkZPX0dFVCwgYnVmLCBDWElORl9NQVgpO1xuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgzMS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTAwNj1zdGF0aWMgaW50IGN4YWNydV9oZWF2eV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTAxLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjExMDI6XHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfU1RBVFVTLCBOVUxMLCAwLCBOVUxMLCAwKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTAzLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0NQoJCQkJCQkJb3V0cHV0OiA2OAoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBjeGFjcnVfY21gIGdldHMgY2FsbGVkIHdpdGhpbiB0aGlzIGNvZGUuIFRoZSBpbml0aWFsIHNjYW4gc2hvd3MgdGhhdCBgY3hhY3J1X2JpbmRgICpkb2VzbiYjMzk7dCogY2FsbCBgY3hhY3J1X2NtYCBkaXJlY3RseS4gSG1tLCBpbnRlcmVzdGluZy4gSG93ZXZlciwgYGN4YWNydV9oZWF2eV9pbml0YCAqZG9lcyogY2FsbCBpdCwgc3BlY2lmaWNhbGx5IGF0IGxpbmUgMTEwMiwgYW5kIGBjeGFjcnVfYXRtX3N0YXJ0YCBhbHNvIGNhbGxzIGl0LCBhdCBsaW5lcyA3ODIgYW5kIDc5MS4gU28sIGJhc2VkIG9uIHRoaXMgcXVpY2sgbG9vaywgYGN4YWNydV9oZWF2eV9pbml0YCBhbmQgYGN4YWNydV9hdG1fc3RhcnRgIHNlZW0gbGlrZSB0aGUgbW9zdCBwcm9taXNpbmcgc3ltYm9scyB0byBmb2N1cyBvbi4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFllcywgdGhleSBhcmUuIEhvbGQgb24gYSBzZWNvbmQsIHRoYXQmIzM5O3Mgbm90IHdoYXQgdGhlIHByb21wdCB3YW50cy4gSXQgcHJlZmVycyBub24tc3RhdGljIGVudHJ5IHBvaW50cyBiZWNhdXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIG9mdGVuIGlubGluZWQsIGFuZCB3ZSBuZWVkIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgd2FpdC4uLiBpbiB0aGlzIGNhc2UsIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIHN0YXRpYywgYm90aCBgY3hhY3J1X2hlYXZ5X2luaXRgIGFuZCBgY3hhY3J1X2F0bV9zdGFydGAgYXJlIGFzc2lnbmVkIHRvIGEgc3RydWN0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGF0IG1lYW5zIHRoZXkgKmNhbm5vdCogYmUgaW5saW5lZC4gVGhleSYjMzk7bGwgZGVmaW5pdGVseSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFNvLCB0aGUgcHJvbXB0IGlzIHBlcmhhcHMgbm90IGNvbnNpZGVyaW5nIHRoaXMgbnVhbmNlIGluIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIE5ldmVydGhlbGVzcywgYmVmb3JlIEkgemVybyBpbiBvbiB0aG9zZSwgSSBzaG91bGQgYnJpZWZseSBzY2FuIHRoZSBjb2RlIGZvciAqYW55KiBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGN4YWNydS5jYCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTk1PXN0YXRpYyB2b2lkIGN4YWNydV9wb2xsX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xOTgtI2RlZmluZSBDWEFDUlVfX0FUVFJfSU5JVChfbmFtZSkgXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTk6c3RhdGljIERFVklDRV9BVFRSX1JPKF9uYW1lKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDEtI2RlZmluZSBDWEFDUlVfQ01EX0lOSVQoX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjAyOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhfbmFtZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDMtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA0LSNkZWZpbmUgQ1hBQ1JVX1NFVF9JTklUKF9uYW1lKSBcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIwNTpzdGF0aWMgREVWSUNFX0FUVFJfV08oX25hbWUpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU2MAoJCQkJCQkJb3V0cHV0OiA2OAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSWRlbnRpZnlpbmcgRHluYW1pYyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhcyB3aGVyZSB0aGUgc3lzdGVtICp0cnVseSogYmVoYXZlcyBkeW5hbWljYWxseS4gU3RhdGljIGZ1bmN0aW9ucyBhcmUsIGJ5IGRlZmluaXRpb24sIHByZWRpY3RhYmxlIGFuZCB0aWVkIGRpcmVjdGx5IHRvIHRoZSBjb2RlJiMzOTtzIHN0cnVjdHVyZSBhdCBjb21waWxlIHRpbWUuIFRoZXkgYXJlIHRoZSBmaXhlZCBwb2ludHMuIFRoZXJlZm9yZSwgYW55IGFuYWx5c2lzIGZvY3VzZWQgb24gYWRhcHRpdmUgYmVoYXZpb3IsIHJ1bnRpbWUgbW9kaWZpY2F0aW9ucywgb3IgdGhlIGltcGFjdHMgb2YgY29uZmlndXJhdGlvbiBvciBpbnB1dCBkYXRhIG5lZWRzIHRvIGV4Y2x1ZGUgdGhvc2UuIEkgbmVlZCB0byBmaWx0ZXIgb3V0IHRoZSBub2lzZS4gTGV0JiMzOTtzIGZvY3VzIG91ciBhdHRlbnRpb24gYnkgc2VhcmNoaW5nLCBkaXJlY3RseSwgZm9yIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGFyZSAqbm90KiBzdGF0aWMuIFRoaXMgd2lsbCBxdWlja2x5IHJldmVhbCB0aGUgYXJlYXMgdGhhdCBhcmUgY2FuZGlkYXRlcyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBzeXN0ZW0mIzM5O3MgZHluYW1pYyBiZWhhdmlvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE5NT1zdGF0aWMgdm9pZCBjeGFjcnVfcG9sbF9zdGF0dXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk4LSNkZWZpbmUgQ1hBQ1JVX19BVFRSX0lOSVQoX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTk5OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhfbmFtZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDAtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAxLSNkZWZpbmUgQ1hBQ1JVX0NNRF9JTklUKF9uYW1lKSBcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIwMjpzdGF0aWMgREVWSUNFX0FUVFJfUlcoX25hbWUpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAzLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwNC0jZGVmaW5lIENYQUNSVV9TRVRfSU5JVChfbmFtZSkgXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDU6c3RhdGljIERFVklDRV9BVFRSX1dPKF9uYW1lKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzczoKCioqUmVnZXggV29lcyBhbmQgYSBTaW1wbGUgU29sdXRpb24qKgoKSG1tLCB0aGF0IHJlZ2V4IEkgd2FzIHRyeWluZyB0byB1c2XigKYgaXQganVzdCB3YXNuJiMzOTt0IGN1dHRpbmcgaXQuIEl0JiMzOTtzIGJlY29taW5nIHRvbyBjb21wbGV4IGFuZCBub3QgZG9pbmcgdGhlIGpvYi4gWW91IGtub3cgaG93IGl0IGlzOyBzb21ldGltZXMgeW91IG92ZXJ0aGluayB0aGluZ3MuIFJhdGhlciB0aGFuIGJhbmdpbmcgbXkgaGVhZCBhZ2FpbnN0IHRoaXMgY29tcGxleCBwYXR0ZXJuLCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0tlZXAgaXQgc2ltcGxlLCBzdHVwaWQhJiMzNDsgQSBzaW1wbGUgYGdyZXAgLXYgc3RhdGljYCBvbiB0aGUgZnVuY3Rpb25zIHNob3VsZCBkbyB0aGUgdHJpY2suIEl0IHNob3VsZCBlZmZpY2llbnRseSBmaWx0ZXIgb3V0IHRob3NlIGBzdGF0aWNgIGZ1bmN0aW9ucywgZ2l2aW5nIG1lIHdoYXQgSSBuZWVkIHdpdGhvdXQgdGhlIHJlZ2V4IGhlYWRhY2hlLiBTb21ldGltZXMgdGhlIG1vc3QgZWxlZ2FudCBzb2x1dGlvbiBpcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgb25lLCBlc3BlY2lhbGx5IHdoZW4gdGltZSBpcyBvZiB0aGUgZXNzZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpdLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xOTItXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTkzOnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk0LVx0dTggKndkYXRhLCBpbnQgd3NpemUsIHU4ICpyZGF0YSwgaW50IHJzaXplKTtcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTU6c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk2LVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xOTgtI2RlZmluZSBDWEFDUlVfX0FUVFJfSU5JVChfbmFtZSkgXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTk6c3RhdGljIERFVklDRV9BVFRSX1JPKF9uYW1lKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMC1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDEtI2RlZmluZSBDWEFDUlVfQ01EX0lOSVQoX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjAyOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhfbmFtZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDMtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA0LSNkZWZpbmUgQ1hBQ1JVX1NFVF9JTklUKF9uYW1lKSBcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIwNTpzdGF0aWMgREVWSUNFX0FUVFJfV08oX25hbWUpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA2LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwNy0jZGVmaW5lIENYQUNSVV9BVFRSX0lOSVQoX3ZhbHVlLCBfdHlwZSwgX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjA4OnN0YXRpYyBzc2l6ZV90IF9uYW1lIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA5LVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXFxcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MjE5PUNYQUNSVV9fQVRUUl9JTklUKF9uYW1lKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMzAtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjMxOnN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl91MzIodTMyIHZhbHVlLCBjaGFyICpidWYpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjMyLXtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjM1LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIzNjpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfczgoczggdmFsdWUsIGNoYXIgKmJ1ZilcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMzcte1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNDAtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjQxOnN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl9kQihzMTYgdmFsdWUsIGNoYXIgKmJ1ZilcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNDIte1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNTItXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjUzOnN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl9ib29sKHUzMiB2YWx1ZSwgY2hhciAqYnVmKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTI1NC17XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTI2MS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyNjI6c3RhdGljIHNzaXplX3QgY3hhY3J1X3N5c2ZzX3Nob3dhdHRyX0xJTksodTMyIHZhbHVlLCBjaGFyICpidWYpXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjYzLXtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjcwLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjI3MTpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfTElORSh1MzIgdmFsdWUsIGNoYXIgKmJ1ZilcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNzIte1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yODEtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjgyOnN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl9NT0RVKHUzMiB2YWx1ZSwgY2hhciAqYnVmKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTI4My17XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMwMi0gKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMDM6c3RhdGljIHNzaXplX3QgbWFjX2FkZHJlc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzA0LVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE0LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMxNTpzdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMxNi1cdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMzI6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMzLVx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00MzQtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NDM1OnN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00MzYtXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU3MD1BVFRSSUJVVEVfR1JPVVBTKGN4YWNydSk7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU3Mi0vKiB0aGUgZm9sbG93aW5nIHRocmVlIGZ1bmN0aW9ucyBhcmUgc3RvbGVuIGZyb20gZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgKi9cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo1NzM6c3RhdGljIHZvaWQgY3hhY3J1X2Jsb2NraW5nX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU3NC17XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU3OD1zdHJ1Y3QgY3hhY3J1X3RpbWVyIHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNTgyLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjU4MzpzdGF0aWMgdm9pZCBjeGFjcnVfdGltZW91dF9raWxsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU4NC17XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU4OS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo1OTA6c3RhdGljIGludCBjeGFjcnVfc3RhcnRfd2FpdF91cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01OTEtXHRcdFx0XHQgaW50ICphY3R1YWxfbGVuZ3RoKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy02MDctXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NjA4OnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA5LVx0XHQgICAgIHU4ICp3ZGF0YSwgaW50IHdzaXplLCB1OCAqcmRhdGEsIGludCByc2l6ZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzA5LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcxMDpzdGF0aWMgaW50IGN4YWNydV9jbV9nZXRfYXJyYXkoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MTEtXHRcdFx0ICAgICAgIHUzMiAqZGF0YSwgaW50IHNpemUpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc1OS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3NjA6c3RhdGljIGludCBjeGFjcnVfY2FyZF9zdGF0dXMoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSlcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NjEte1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NzAtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzcxOnN0YXRpYyBpbnQgY3hhY3J1X2F0bV9zdGFydChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NzItXHRcdHN0cnVjdCBhdG1fZGV2ICphdG1fZGV2KVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MTktXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODIwOnN0YXRpYyB2b2lkIGN4YWNydV9wb2xsX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODIxLXtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtOTM2LVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjkzNzpzdGF0aWMgaW50IGN4YWNydV9mdyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgZW51bSBjeGFjcnVfZndfcmVxdWVzdCBmdyxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy05MzgtXHRcdCAgICAgdTggY29kZTEsIHU4IGNvZGUyLCB1MzIgYWRkciwgY29uc3QgdTggKmRhdGEsIGludCBzaXplKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy05ODUtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6OTg2OnN0YXRpYyBpbnQgY3hhY3J1X2ZpbmRfZmlybXdhcmUoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy05ODctXHRcdFx0XHRjaGFyICpwaGFzZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZndfcClcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTAwNS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMDA2OnN0YXRpYyBpbnQgY3hhY3J1X2hlYXZ5X2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTAwNy1cdFx0XHQgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaW50Zilcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEyMS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTIyOnN0YXRpYyBpbnQgY3hhY3J1X2JpbmQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEyMy1cdFx0ICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEyMzEtXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTIzMjpzdGF0aWMgdm9pZCBjeGFjcnVfdW5iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEyMzMtXHRcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xMzQyPXN0YXRpYyBzdHJ1Y3QgdXNiYXRtX2RyaXZlciBjeGFjcnVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMzUzLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEzNTQ6c3RhdGljIGludCBjeGFjcnVfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzNTUtXHRcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTM3NT1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3hhY3J1X3VzYl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzODItXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTM4Mzptb2R1bGVfdXNiX2RyaXZlcihjeGFjcnVfdXNiX2RyaXZlcik7XG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTM4NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNzUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgRW50cnkgUG9pbnRzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZzogYWxsIHRoZSBmdW5jdGlvbiBwb2ludGVycyBJJiMzOTttIGxvb2tpbmcgYXQgYXJlIHN0YXRpYywgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIEluc3RlYWQgb2YgZm9sbG93aW5nIGR5bmFtaWMgY2FsbHMsIEkgY2FuIGp1c3QgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBleHBsaWNpdGx5IGxpc3RlZCBhcyBlbnRyeSBwb2ludHMgZm9yIHRoZSBkcml2ZXIuIEkgbmVlZCB0byBkb2N1bWVudCB0aGVzZSwgc28gaGVyZSYjMzk7cyBhIGNvbmNpc2UgbGlzdDoKCiogICBgY3hhY3J1X2JpbmRgCiogICBgY3hhY3J1X2hlYXZ5X2luaXRgCiogICBgY3hhY3J1X2F0bV9zdGFydGAKKiAgIGBjeGFjcnVfdXNiX3Byb2JlYAoKV2FpdCwgdGhhdCBsYXN0IG9uZSwgYGN4YWNydV91c2JfcHJvYmVgLCBpcyBhbiBlbnRyeSBwb2ludC4gVGhhdCYjMzk7cyBnb29kIHRvIG5vdGUsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGN4YWNydV91c2JfcHJvYmVgIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL2N4YWNydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzU0Olx0c3RhdGljIGludCBjeGFjcnVfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuMTM1NTpcdFx0XHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4xMzU2Olx0e1xuMTM1NzpcdFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuMTM1ODpcdFx0Y2hhciBidWZbMTVdO1xuMTM1OTpcdFxuMTM2MDpcdFx0LyogQXZvaWQgQURTTCByb3V0ZXJzIChjeDgyMzEwX2V0aCkuXG4xMzYxOlx0XHQgKiBBYm9ydCBpZiBiRGV2aWNlQ2xhc3MgaXMgMHhmZiBhbmQgaVByb2R1Y3QgaXMgXCYjMzQ7VVNCIE5FVCBDQVJEXCYjMzQ7LlxuMTM2MjpcdFx0ICovXG4xMzYzOlx0XHRpZiAodXNiX2Rldi1cdTAwM2VkZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSBVU0JfQ0xBU1NfVkVORE9SX1NQRUNcbjEzNjQ6XHRcdFx0XHRcdTAwMjZcdTAwMjYgdXNiX3N0cmluZyh1c2JfZGV2LCB1c2JfZGV2LVx1MDAzZWRlc2NyaXB0b3IuaVByb2R1Y3QsXG4xMzY1Olx0XHRcdFx0XHRidWYsIHNpemVvZihidWYpKSBcdTAwM2UgMCkge1xuMTM2NjpcdFx0XHRpZiAoIXN0cmNtcChidWYsIFwmIzM0O1VTQiBORVQgQ0FSRFwmIzM0OykpIHtcbjEzNjc6XHRcdFx0XHRkZXZfaW5mbyhcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCYjMzQ7aWdub3JpbmcgY3g4MjMxMF9ldGggZGV2aWNlXFxuXCYjMzQ7KTtcbjEzNjg6XHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjEzNjk6XHRcdFx0fVxuMTM3MDpcdFx0fVxuMTM3MTpcdFxuMTM3MjpcdFx0cmV0dXJuIHVzYmF0bV91c2JfcHJvYmUoaW50ZiwgaWQsIFx1MDAyNmN4YWNydV9kcml2ZXIpO1xuMTM3MzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ1hBQ1JVIERyaXZlcioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSBmbG93LCBgY3hhY3J1X3VzYl9wcm9iZWAgaGFuZHMgb2ZmIHRvIGB1c2JhdG1fdXNiX3Byb2JlYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoYXQgbWVhbnMgZnVuY3Rpb25zIGxpa2UgYGN4YWNydV9iaW5kYCwgYGN4YWNydV9oZWF2eV9pbml0YCwgYW5kIHVsdGltYXRlbHksIGBjeGFjcnVfYXRtX3N0YXJ0YCBhcmUgYWxsIHJlYXNvbmFibGUgcGxhY2VzIHRvIHRhcmdldC4gSSBsaWtlIHRoZSBsb2dpY2FsIHByb2dyZXNzaW9uIGhlcmUuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgY3hhY3J1X2NtYC4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBwYXRjaCBhZ2Fpbi4gQWgsIHllcywgdGhlIGFkZGl0aW9uIG9mIGB1c2Jfa2lsbF91cmIoaW5zdGFuY2UtJmd0O3Jjdl91cmIpO2Agd2hlbiBgcmV0ICZsdDsgMGAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGVycm9yLWhhbmRsaW5nIG1lY2hhbmlzbSwgYW5kICpkZWZpbml0ZWx5KiByZWFjaGFibGUgdGhyb3VnaCBVU0IgZnV6emluZy4gVGhhdCYjMzk7cyBhIGdvb2QgZmluZCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgYSBrZXkgbGluZSBvZiBjb2RlIEkmIzM5O2xsIHdhbnQgdG8gZm9jdXMgb24uCgpMZXQgbWUgcXVpY2tseSBzdW1tYXJpemUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgdGhlbSBpbiBtaW5kLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYFVTQl9DWEFDUlVgLCBgVVNCX0FUTWAsIGFuZCB0aGUgYmFzZSBgQVRNYCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxheS4KCldhaXQuLi4gc29tZXRoaW5nIGp1c3Qgb2NjdXJyZWQgdG8gbWUsIGFuZCBpdCYjMzk7cyBpbXBvcnRhbnQuIERvZXMgYFVTQl9DWEFDUlVgIGhhdmUgYW55IGRlcGVuZGVuY2llcz8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQmIzM5O3MgaGVhZCBiYWNrIHRvIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBidWlsZCBvcHRpb25zLiBUaGlzIGNvbmZpZ3VyYXRpb24gY2hlY2sgaXMgY3JpdGljYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcGVlZHRjaC5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgVVNCX0NYQUNSVVxuICAzMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBzdXBwb3J0XCYjMzQ7XG4gIDM0Olx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gQURTTCBVU0IgbW9kZW0gYmFzZWQgb24gdGhlIENvbmV4YW50XG4gIDM3Olx0XHQgIEFjY2Vzc1J1bm5lciBjaGlwc2V0LiAgSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0b1xuICAzODpcdFx0ICBpbnN0YWxsIHRoZSBmaXJtd2FyZSwgZXh0cmFjdGVkIGJ5IHRoZSB1c2VyIHNwYWNlIHRvb2xzOyBzZWVcbiAgMzk6XHRcdCAgXHUwMDNjaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlIGZvciBkZXRhaWxzLlxuICA0MDpcdFxuICA0MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNDI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4YWNydS5cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgVVNCX1VFQUdMRUFUTVxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7QURJIDkzMCBhbmQgZWFnbGUgVVNCIERTTCBtb2RlbVwmIzM0O1xuICA0NjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFEU0wgVVNCIG1vZGVtIGJhc2VkIG9uIHRoZSBBREkgOTMwXG4gIDQ5Olx0XHQgIG9yIGVhZ2xlIGNoaXBzZXQuIEluIG9yZGVyIHRvIHVzZSB5b3VyIG1vZGVtIHlvdSB3aWxsIG5lZWQgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NzUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kLCB3aGlsZSBpdCBkb2VzbiYjMzk7dCAqZGlyZWN0bHkqIHN0YXRlICYjMzQ7ZGVwZW5kcyBvbiwmIzM0OyB0aGUgc3RydWN0dXJlIHBsYWNlcyBpdCB3aXRoaW4gYW4gYGlmIFVTQl9BVE1gIGJsb2NrLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LiBOb3csIGBVU0JfQVRNYCwgSSByZW1lbWJlciwgaW4gdHVybiwgKmRvZXMqIGRlcGVuZCBvbiBgQVRNYC4gU28sIHB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyLCB0aGUgZWZmZWN0aXZlIGNvbmZpZ3VyYXRpb24gY2hhaW4gaGVyZSBpcyBgVVNCX0NYQUNSVWAgKHRoZSBvbmUgSSB3YXMgaW5pdGlhbGx5IGludGVyZXN0ZWQgaW4pLCBuZXN0ZWQgdW5kZXIgYFVTQl9BVE1gLCB3aGljaCBpdHNlbGYgaXMgY29udGluZ2VudCBvbiBgQVRNYCBiZWluZyBzZXQuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaXTigJlzIGFsd2F5cyB3aXNlIHRvIGRvdWJsZS1jaGVjayB0aGUgZm91bmRhdGlvbmFsIGRlcGVuZGVuY2llcy4gVGltZSB0byBjb25maXJtIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgdGhhdCBgQVRNYCBpdHNlbGYgcmVsaWVzIHVwb24sIGVuc3VyaW5nIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGNvbXBsaWNhdGlvbnMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL0tjb25maWctNS1cbm5ldC9hdG0vS2NvbmZpZzo2OmNvbmZpZyBBVE1cbm5ldC9hdG0vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7QXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcJiMzNDtcbi0tXG5uZXQvYXRtL0tjb25maWctMjEtXG5uZXQvYXRtL0tjb25maWc6MjI6Y29uZmlnIEFUTV9CUjI2ODRcbm5ldC9hdG0vS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O1JGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1wmIzM0O1xuLS1cbm5ldC9hdG0vS2NvbmZpZy0zMC1cbm5ldC9hdG0vS2NvbmZpZzozMTpjb25maWcgQVRNX0JSMjY4NF9JUEZJTFRFUlxubmV0L2F0bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtQZXItVkMgSVAgZmlsdGVyIGtsdWRnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAxNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBBVE0gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBVE0gd2l0aGluIHRoaXMga2VybmVsIGJ1aWxkLiAmIzM0O25ldC9hdG0vS2NvbmZpZyYjMzQ7IGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIGFscmVhZHkga25vdyB0aGlzIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIGNvZGluZyBzdHlsZSwgc28gSSBjYW4gaW1tZWRpYXRlbHkgYXNzdW1lIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIEFUTSBzdXBwb3J0IGFyZSBtYW5hZ2VkLiBObyBuZWVkIGZvciBhbnkgaGFuZGhvbGRpbmcgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNraW0gdGhlIGZpbGUsIGxvb2tpbmcgZm9yIHRoZSBrZXkgdmFyaWFibGVzLCB0aGVpciBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBnb3Zlcm5pbmcgdGhlaXIgaW5jbHVzaW9uLiBJIG5lZWQgdG8gYXNjZXJ0YWluIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBjdXN0b21pemF0aW9uIGF0IGNvbXBpbGUgdGltZS4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUsIHJlYWxseS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgZmFtaWxpYXIgYGNvbmZpZ2Aga2V5d29yZHMsIHRoZSBgYm9vbGAsIGB0cmlzdGF0ZWAsIGFuZCBgc3RyaW5nYCBkZWZpbml0aW9ucy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzIOKAkyB0aGUgb3RoZXIgS2NvbmZpZyBzeW1ib2xzIHRoYXQgQVRNIGZ1bmN0aW9uYWxpdHkgcmVsaWVzIHVwb24sIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBvcHRpb25zLCBhbmQgb2YgY291cnNlIGFueSBtb2R1bGUgc3VwcG9ydCBjb25zaWRlcmF0aW9ucy4gVGhpcyBpcyBqdXN0IHRoZSBpbml0aWFsIHJlY29ubmFpc3NhbmNlOyBJJiMzOTtsbCBtb3ZlIG9uIHRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gY29kZSBvbmNlIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBBVE1cbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0FzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXG4gIDEwOlx0XHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXG4gIDExOlx0XHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxuICAxMjpcdFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBJbiBvcmRlciB0byBwYXJ0aWNpcGF0ZSBpbiBhbiBBVE0gbmV0d29yaywgeW91ciBMaW51eCBib3ggbmVlZHMgYW5cbiAgMTU6XHRcdCAgQVRNIG5ldHdvcmtpbmcgY2FyZC4gSWYgeW91IGhhdmUgdGhhdCwgc2F5IFkgaGVyZSBhbmQgdG8gdGhlIGRyaXZlclxuICAxNjpcdFx0ICBvZiB5b3VyIEFUTSBjYXJkIGJlbG93LlxuICAxNzpcdFxuICAxODpcdFx0ICBOb3RlIHRoYXQgeW91IG5lZWQgYSBzZXQgb2YgdXNlci1zcGFjZSBwcm9ncmFtcyB0byBhY3R1YWxseSBtYWtlIHVzZVxuICAxOTpcdFx0ICBvZiBBVE0uICBTZWUgdGhlIGZpbGUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnJzdFx1MDAzZSBmb3JcbiAgMjA6XHRcdCAgZnVydGhlciBkZXRhaWxzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjYwNAoJCQkJCQkJb3V0cHV0OiAxMjQKCQkJCQkJCXRob3VnaHRzOiA0NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgQVRNYCBpcyBpbmRlcGVuZGVudCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZSBgVVNCX0NYQUNSVWAsIGBVU0JfQVRNYCwgYW5kIGBBVE1gLiBUaGUgY3J1Y2lhbCBzeW1ib2xzIGhlcmUgYXJlIGBjeGFjcnVfaGVhdnlfaW5pdGAsIGBjeGFjcnVfYXRtX3N0YXJ0YCwgYGN4YWNydV9iaW5kYCwgYW5kIGBjeGFjcnVfdXNiX3Byb2JlYC4gSSBub3RpY2VkIHRoYXQgYGN4YWNydV9jbWAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGhpZ2hsaWdodHMgcHJlZmVycmluZyBub24tc3RhdGljIGZ1bmN0aW9ucy4gQnV0LCBzaW5jZSB0aGUgc3RhdGljIGZ1bmN0aW9ucyBtZW50aW9uZWQgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB0aGV5IGFyZSAqbm90KiBpbmxpbmVkIGFuZCBkbyBoYXZlIGRpc3RpbmN0IGFkZHJlc3NlczsgdGhlcmVmb3JlLCB0aGV5IHNob3VsZCBiZSBwcmVmZXJyZWQuIEdvb2QuCgpJIHF1aWNrbHkgZG91YmxlLWNoZWNrZWQgdGhlIGRlcGVuZGVuY2llcy4gYEZXX0xPQURFUmAgaXMgc2VsZWN0ZWQgdGhyb3VnaCBgVVNCX0NYQUNSVWAsIGFuZCBgQ1JDMzJgIGNvbWVzIGZyb20gYFVTQl9BVE1gLiBTbywgSSBkb24mIzM5O3QgbmVlZCB0byBleHBsaWNpdGx5IGRlZmluZSB0aG9zZS4KCk5vdywgcmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGYuIEFoLCB0aGlzIGlzIGEgY2xlYXIgYnVnIGZpeC4gSXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIGByY3ZfdXJiYCBpcyBsZWZ0IGFjdGl2ZSBpZiBgY3hhY3J1X2NtYCBmYWlscy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIHBhdGNoLCB3aGljaCBtYWtlcyBpdCBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBTZWVtcyBsaWtlIGEgbGVnaXRpbWF0ZSBmaXgsIGFuZCB3b3J0aCB0aGUgdGltZS4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DWEFDUlUmIzM0OywKICAgICYjMzQ7VVNCX0FUTSYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjeGFjcnVfaGVhdnlfaW5pdCYjMzQ7LAogICAgJiMzNDtjeGFjcnVfYXRtX3N0YXJ0JiMzNDssCiAgICAmIzM0O2N4YWNydV9iaW5kJiMzNDssCiAgICAmIzM0O2N4YWNydV91c2JfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGN4YWNydSBVU0IgQVRNIGRyaXZlciB0byBraWxsIHRoZSByZWNlaXZlIFVSQiBpZiB0aGUgY29tbWFuZCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgVVNCIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBVU0IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0NYQUNSVSYjMzQ7LAogICAgJiMzNDtVU0JfQVRNJiMzNDssCiAgICAmIzM0O0FUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N4YWNydV9oZWF2eV9pbml0JiMzNDssCiAgICAmIzM0O2N4YWNydV9hdG1fc3RhcnQmIzM0OywKICAgICYjMzQ7Y3hhY3J1X2JpbmQmIzM0OywKICAgICYjMzQ7Y3hhY3J1X3VzYl9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY3hhY3J1IFVTQiBBVE0gZHJpdmVyIHRvIGtpbGwgdGhlIHJlY2VpdmUgVVJCIGlmIHRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFVTQiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6MTMuMDM1NDc3MjI4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDA0NzM3MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9DWEFDUlVcIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIkFUTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN4YWNydV9oZWF2eV9pbml0XCIsXG4gICAgXCJjeGFjcnVfYXRtX3N0YXJ0XCIsXG4gICAgXCJjeGFjcnVfYmluZFwiLFxuICAgIFwiY3hhY3J1X3VzYl9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIgdG8ga2lsbCB0aGUgcmVjZWl2ZSBVUkIgaWYgdGhlIGNvbW1hbmQgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIFVTQiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgVVNCIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjEzLjAzNTQ4MzMxOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2OTE5MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzJjZjkxOTg3ZjA3Y2M3YThiYmVlMDQ5Y2RiNDFmZjhiZDk4ZDFlOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAxMjoyNzoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcXG5pbmRleCBmMTkwMGM1NjdiYTQxLi40MjlhYzIwYTg5OTlmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xcbkBAIC03MDAsNiArNzAwLDggQEAgc3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcXG4gXFx0cmV0ID0gb2ZmZDtcXG4gXFx0dXNiX2RiZyhpbnN0YW5jZS1cXHUwMDNldXNiYXRtLCBcXFwiY20gJSN4XFxcXG5cXFwiLCBjbSk7XFxuIGZhaWw6XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHR1c2Jfa2lsbF91cmIoaW5zdGFuY2UtXFx1MDAzZXJjdl91cmIpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VjbV9zZXJpYWxpemUpO1xcbiBlcnI6XFxuIFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjEzLjMyNDAzNjcxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMTcxNjE2OTQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfQ1hBQ1JVXCIsXG4gICAgXCJVU0JfQVRNXCIsXG4gICAgXCJBVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjeGFjcnVfaGVhdnlfaW5pdFwiLFxuICAgIFwiY3hhY3J1X2F0bV9zdGFydFwiLFxuICAgIFwiY3hhY3J1X2JpbmRcIixcbiAgICBcImN4YWNydV91c2JfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY3hhY3J1IFVTQiBBVE0gZHJpdmVyIHRvIGtpbGwgdGhlIHJlY2VpdmUgVVJCIGlmIHRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFVTQiBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMmNmOTE5ODdmMDdjYzdhOGJiZWUwNDljZGI0MWZmOGJkOThkMWU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTI6Mjc6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcbmluZGV4IGYxOTAwYzU2N2JhNDEuLjQyOWFjMjBhODk5OWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcbisrKyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1xuQEAgLTcwMCw2ICs3MDAsOCBAQCBzdGF0aWMgaW50IGN4YWNydV9jbShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxuIFx0cmV0ID0gb2ZmZDtcbiBcdHVzYl9kYmcoaW5zdGFuY2UtXHUwMDNldXNiYXRtLCBcImNtICUjeFxcblwiLCBjbSk7XG4gZmFpbDpcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHVzYl9raWxsX3VyYihpbnN0YW5jZS1cdTAwM2VyY3ZfdXJiKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZpbnN0YW5jZS1cdTAwM2VjbV9zZXJpYWxpemUpO1xuIGVycjpcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyNzoxMy4zMjQwMzg2MzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIzOTEyMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgVVNCLUFUTSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy91c2IvYXRtL2N4YWNydS5jYC4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBgdXNiX2tpbGxfdXJiKGluc3RhbmNlLVx1MDAzZXJjdl91cmIpO2Agd2l0aGluIHRoZSBgY3hhY3J1X2NtYCBmdW5jdGlvbiwgdHJpZ2dlcmVkIHdoZW4gYHJldCBcdTAwM2MgMGAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGBjeGFjcnVfY21gIGl0c2VsZiB3aXRoaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlIGFuZCBob3cgaXQgaGFuZGxlcyBlcnJvcnMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9uIG9mIHRoaXMga2lsbCBvcGVyYXRpb24gb24gdGhlIHJlY2VpdmUgVVJCLiBJcyB0aGlzIGEgY3JpdGljYWwgZXJyb3IgcGF0aD8gSXMgdGhpcyBhIGdvb2QgcGxhY2UgdG8ga2lsbCB0aGUgVVJCIG9yIHNob3VsZCBpdCBiZSBlYXJsaWVyPyBBbmQgd2hhdCBvdGhlciBVUkJzIGFyZSBpbiBmbGlnaHQgdGhhdCBhcmUgbm90IGtpbGxlZD8gSXQgYWxzbyBtYWtlcyBtZSB3b25kZXIgd2hhdCBgaW5zdGFuY2UtXHUwMDNlcmN2X3VyYmAgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjE3LjA0Nzk1MzU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjg4MzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjeGFjcnVfY21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz01OT1lbnVtIGN4YWNydV9md19yZXF1ZXN0IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MC0gKiBmaXJtd2FyZSBpcyBsb2FkZWQgICovXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcxOmVudW0gY3hhY3J1X2NtX3JlcXVlc3Qge1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03Mi1cXHRDTV9SRVFVRVNUX1VOREVGSU5FRCA9IDB4ODAsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTA4LSAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMDk6ZW51bSBjeGFjcnVfY21fZmxhc2gge1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTAtXFx0Q01fRkxBU0hfUkVBRCA9IDB4YTEsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0LS8qIHJlcGx5IGNvZGVzIHRvIHRoZSBjb21tYW5kcyBhYm92ZSAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTU6ZW51bSBjeGFjcnVfY21fc3RhdHVzIHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE2LVxcdENNX1NUQVRVU19VTkRFRklORUQsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTcwPXN0cnVjdCBjeGFjcnVfZGF0YSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTkyLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTM6c3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk0LVxcdHU4ICp3ZGF0YSwgaW50IHdzaXplLCB1OCAqcmRhdGEsIGludCByc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzMyPXN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1Ni1cXHRpZiAoIXN0cmNtcChzdHJfY21kLCBcXFwic3RvcFxcXCIpIHx8ICFzdHJjbXAoc3RyX2NtZCwgXFxcInJlc3RhcnRcXFwiKSkge1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNTc6XFx0XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUT1AsIE5VTEwsIDAsIE5VTEwsIDApO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTgtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNzYtXFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInN0YXJ0XFxcIikgfHwgIXN0cmNtcChzdHJfY21kLCBcXFwicmVzdGFydFxcXCIpKSB7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjM3NzpcXHRcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDApO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNzgtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz00MzU9c3RhdGljIHNzaXplX3QgYWRzbF9jb25maWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQ4MC1cXHRcXHRcXHRkYXRhWzBdID0gY3B1X3RvX2xlMzIobnVtKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NDgxOlxcdFxcdFxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0RBVEFfU0VULFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00ODItXFx0XFx0XFx0XFx0KHU4ICopIGRhdGEsIDQgKyBudW0gKiA4LCBOVUxMLCAwKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz01OTA9c3RhdGljIGludCBjeGFjcnVfc3RhcnRfd2FpdF91cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy02MDctXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjYwODpzdGF0aWMgaW50IGN4YWNydV9jbShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy02MDktXFx0XFx0ICAgICB1OCAqd2RhdGEsIGludCB3c2l6ZSwgdTggKnJkYXRhLCBpbnQgcnNpemUpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzA5LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MTA6c3RhdGljIGludCBjeGFjcnVfY21fZ2V0X2FycmF5KHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcxMS1cXHRcXHRcXHQgICAgICAgdTMyICpkYXRhLCBpbnQgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjMtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcyNDpcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIGNtLCBOVUxMLCAwLCAodTggKikgYnVmLCBidWZsZW4pO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI3LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3Mjg6XFx0LyogbGVuIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBsZW4gJSA0ID09IDAgZ3VhcmFudGVlZCBieSBjeGFjcnVfY20oKSAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MjktXFx0bGVuID0gcmV0IC8gNDtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NjA9c3RhdGljIGludCBjeGFjcnVfY2FyZF9zdGF0dXMoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzYxLXtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzYyOlxcdGludCByZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfU1RBVFVTLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzYzLVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTc3MT1zdGF0aWMgaW50IGN4YWNydV9hdG1fc3RhcnQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzgxLVxcdC8qIFJlYWQgTUFDIGFkZHJlc3MgKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzgyOlxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DQVJEX0dFVF9NQUNfQUREUkVTUywgTlVMTCwgMCxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzgzLVxcdFxcdFxcdGF0bV9kZXYtXFx1MDAzZWVzaSwgc2l6ZW9mKGF0bV9kZXYtXFx1MDAzZWVzaSkpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5MC1cXHRtdXRleF9sb2NrKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlYWRzbF9zdGF0ZV9zZXJpYWxpemUpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3OTE6XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzkyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTgyMD1zdGF0aWMgdm9pZCBjeGFjcnVfcG9sbF9zdGF0dXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgyOS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6ODMwOlxcdHJldCA9IGN4YWNydV9jbV9nZXRfYXJyYXkoaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9JTkZPX0dFVCwgYnVmLCBDWElORl9NQVgpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MzEtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xMDA2PXN0YXRpYyBpbnQgY3hhY3J1X2hlYXZ5X2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwMS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTEwMjpcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfU1RBVFVTLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwMy1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyNzoxNy4yMjA4NDE3MzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTkyMDQyNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBBVE0gRHJpdmVyIFVwZGF0ZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBgdXNiX2tpbGxfdXJiYCBjYWxsIHdpdGhpbiB0aGUgYGN4YWNydV9jbWAgZnVuY3Rpb24uIEludGVyZXN0aW5nLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgVVNCIEFUTSBkcml2ZXIgY29udGV4dC4gVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgY3hhY3J1YC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMuIEZpcnN0LCBJ4oCZbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGN4YWNydWAgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY2hlY2sgaXRzIEtjb25maWcgZW50cnkgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgb3IgcmVzb3VyY2UgY2xlYW51cCB3aXRoaW4gdGhlIFVTQiBjb21tdW5pY2F0aW9uIGZsb3csIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjIwLjgxMjg4NzMwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTM5MDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjeGFjcnVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWc9MzI9Y29uZmlnIFVTQl9DWEFDUlVcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTQxLVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6NDI6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3hhY3J1LlxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTQzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyNzoyMC44NTQyODcyMzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ1OTkyNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFVTQl9DWEFDUlUgS2NvbmZpZyBFbnRyeSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgcmlnaHQgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZ2V0IHRoZSBjb21wbGV0ZSBLY29uZmlnIGVudHJ5IGZvciBgVVNCX0NYQUNSVWAuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBnbGFuY2U7IEkgbmVlZCB0aGUgZnVsbCBjb250ZXh0LiBJJ20gdGhpbmtpbmcgSSB3YW50IHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCB2YWx1ZSwgdGhlIGhlbHAgdGV4dCwgYW5kIGFueSBvdGhlciByZWxldmFudCBtZXRhZGF0YSBzdXJyb3VuZGluZyBpdC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcIndoeVwiIGFuZCBcIndoZW5cIiB0aGlzIG9wdGlvbiBpcyByZWxldmFudC5cblxuSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUsIGJlY2F1c2UgSSBrbm93IHRoYXQgYSBzaW5nbGUgbGluZSBpbiBhIGBLY29uZmlnYCBmaWxlIGNhbiBiZSBkZWNlcHRpdmVseSBzaW1wbGUuIEknbSBhZnRlciB0aGUgcmVsYXRpb25zaGlwcy4gRG9lcyBpdCBkZXBlbmQgb24gc3BlY2lmaWMgQ1BVIGFyY2hpdGVjdHVyZXM/IFdoYXQncyB0aGUgaW1wYWN0IG9uIG90aGVyIFVTQiBjb25maWd1cmF0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBVU0IgZHJpdmVycywgZXNwZWNpYWxseSBhbnkgbGlrZWx5IGNvbmZsaWN0cyBvciBpbnRlZ3JhdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBDWEFDUlUgZHJpdmVyIChvciByZWxhdGVkIGZ1bmN0aW9uYWxpdHkpIGlzIHN0cnVjdHVyZWQgaW4gdGVybXMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGZlYXR1cmVzLlxuXG5TbywgdGhlIGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgYFVTQl9DWEFDUlVgLiBPbmx5IHRoZW4gY2FuIEkgdHJ1bHkgYmVnaW4gdG8gYXNzZXNzIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTczLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6MjQuMzAwMjgyMzc4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3BlZWR0Y2guXFxuICAzMTpcXHRcXG4gIDMyOlxcdGNvbmZpZyBVU0JfQ1hBQ1JVXFxuICAzMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBzdXBwb3J0XFxcIlxcbiAgMzQ6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMzU6XFx0XFx0aGVscFxcbiAgMzY6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFEU0wgVVNCIG1vZGVtIGJhc2VkIG9uIHRoZSBDb25leGFudFxcbiAgMzc6XFx0XFx0ICBBY2Nlc3NSdW5uZXIgY2hpcHNldC4gIEluIG9yZGVyIHRvIHVzZSB5b3VyIG1vZGVtIHlvdSB3aWxsIG5lZWQgdG9cXG4gIDM4OlxcdFxcdCAgaW5zdGFsbCB0aGUgZmlybXdhcmUsIGV4dHJhY3RlZCBieSB0aGUgdXNlciBzcGFjZSB0b29sczsgc2VlXFxuICAzOTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vYWNjZXNzcnVubmVyLnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgNDI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3hhY3J1LlxcbiAgNDM6XFx0XFxuICA0NDpcXHRjb25maWcgVVNCX1VFQUdMRUFUTVxcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIkFESSA5MzAgYW5kIGVhZ2xlIFVTQiBEU0wgbW9kZW1cXFwiXFxuICA0NjpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gQURTTCBVU0IgbW9kZW0gYmFzZWQgb24gdGhlIEFESSA5MzBcXG4gIDQ5OlxcdFxcdCAgb3IgZWFnbGUgY2hpcHNldC4gSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0b1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyNzoyNC4zMDAzNTcwMzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA3MTQ5ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipVU0IgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSBmb2N1c2luZyBvbiB0aGUgVVNCIGNvbmZpZ3VyYXRpb24gaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiB0aGlzIGBVU0JfQ1hBQ1JVYCBjb25maWcsIHRoYXQncyB3aGF0J3MgcGlxdWluZyBteSBpbnRlcmVzdCBhdCB0aGUgbW9tZW50LiBCdXQsIHlvdSBrbm93LCBteSBicmFpbidzIGFscmVhZHkgbWFraW5nIGNvbm5lY3Rpb25zLiBJJ20gd29uZGVyaW5nLCBhcyBhIG1hdHRlciBvZiBjb3Vyc2UsIGhvdyB0aGlzIGNvbm5lY3RzIG9yIGNvbnRyYXN0cyB3aXRoIGBVU0JfQVRNYD8gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgaXRzIHBvdGVudGlhbCByZWxhdGlvbnNoaXAsIGlmIGFueS4gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgdW5wYWNrIGBVU0JfQ1hBQ1JVYC4gVW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBsYW5kc2NhcGUgb2YgcmVsYXRlZCBVU0IgY29uZmlndXJhdGlvbnMsIGxpa2UgdGhlIEFUTSBjb25uZWN0aW9uLCBpcyBrZXkgdG8gZ2V0dGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gQWx3YXlzIHN0YXJ0IHdpdGggdGhlIGdlbmVyYWwsIHRoZW4gd29yayB0byB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTkxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyNzoyNy45MDc1MDk3MTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNDc4ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTUtXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6NjptZW51Y29uZmlnIFVTQl9BVE1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJVU0IgRFNMIG1vZGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjI3Ljk0ODk5NjYzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE2NDcxNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBVU0JfQVRNIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFVTQl9BVE1gLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiV2hhdCBhcmUgdGhlICprZXkqIGNvbXBvbmVudHMgdGhhdCB0aGlzIHJlbGllcyB1cG9uP1wiIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBlbnRpcmUgbGFuZHNjYXBlLiBNeSBtaW5kJ3MgcnVubmluZyB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgYXJlYXM6IGtlcm5lbCBtb2R1bGVzLCBkZXZpY2UgZHJpdmVycywgcGVyaGFwcyBzb21lIHVzZXJzcGFjZSB1dGlsaXRpZXMsIGFuZCBkZWZpbml0ZWx5IHNvbWUgY3J1Y2lhbCBsaWJyYXJpZXMuIFRoaXMgaXNuJ3QganVzdCBhIHNpbXBsZSBtb2R1bGU7IGl0J3MgYWxtb3N0IGNlcnRhaW5seSBpbnRlcmFjdGluZyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnMgKEhBTHMpLCBhbmQgcG9zc2libHkgZXZlbiBzcGVjaWZpYyBBVE0gaGFyZHdhcmUgaWYgaXQncyBub3QgcHVyZWx5IGEgc29mdHdhcmUgaW1wbGVtZW50YXRpb24uIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGF0IG90aGVyIG1vZHVsZXMgYXJlIHJlcXVpcmVkLCB3aGF0IEFQSXMgaXQgZXhwb3NlcywgYW5kIGlmIGl0J3MgYnVpbHQgb24gdG9wIG9mIG1vcmUgZnVuZGFtZW50YWwgbmV0d29ya2luZyBsYXllcnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjaGFpbiByZWFjdGlvbiBhbmQgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLiBXaGVyZSBpcyB0aGUgcG90ZW50aWFsIGZvciBjb25mbGljdHMsIGFuZCB3aGF0IHZlcnNpb25zIGRvIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gS25vd2luZyB0aGUgY29tcGxldGUgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSB0cm91Ymxlc2hvb3Rpbmcgb3Igc3lzdGVtIGRlc2lnbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyNzozMi4yNjU0NzA3NTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVTQi9BVE0gRFNMIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBVU0JfQVRNXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIERTTCBtb2RlbSBzdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBBVE1cXG4gICA5OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBVU0IgRGlnaXRhbCBTdWJzY3JpYmVyIExpbmUgKERTTClcXG4gIDEyOlxcdFxcdCAgbW9kZW0gdG8geW91ciBjb21wdXRlcidzIFVTQiBwb3J0LiAgWW91IHdpbGwgdGhlbiBuZWVkIHRvIGNob29zZSB5b3VyXFxuICAxMzpcXHRcXHQgIG1vZGVtIGZyb20gdGhlIGxpc3QgYmVsb3cuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAxNjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JhdG0uXFxuICAxNzpcXHRcXG4gIDE4OlxcdGlmIFVTQl9BVE1cXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIFVTQl9TUEVFRFRPVUNIXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjMyLjI2NTU0MDcyM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTEzNjE3MzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlcGVuZGVuY3kgQW5hbHlzaXMgYW5kIEZ1bmN0aW9uIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0J3MgY2xlYXIgdGhhdCBgVVNCX0FUTWAgcmVsaWVzIG9uIGBBVE1gLCBhbmQgYFVTQl9DWEFDUlVgIGhhcyBhIGRlcGVuZGVuY3kgb24gYFVTQl9BVE1gLiAgVGhhdCB0ZWxscyBtZSByaWdodCBhd2F5IHRoYXQgaWYgSSdtIHdvcmtpbmcgd2l0aCBgVVNCX0NYQUNSVWAsIEknbSBpbXBsaWNpdGx5IGRlYWxpbmcgd2l0aCBgQVRNYCBhbmQgYFVTQl9BVE1gIGFzIHdlbGwuICBTbywgaW4gdGVybXMgb2YgZGVwZW5kZW5jaWVzLCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYEFUTWAsIGBVU0JfQVRNYCwgYW5kIGBVU0JfQ1hBQ1JVYCBhcmUgYWxsIGFjY291bnRlZCBmb3IuIFRoaXMgc2VlbXMgYmFzaWMgYnV0IGl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwLlxuXG5NeSBmb2N1cyBpcyBvbiB0aGUgYGN4YWNydV9jbWAgZnVuY3Rpb24uIExldCdzIHNlZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGdldHMgY2FsbGVkIGZyZXF1ZW50bHkgb3IgaWYgaXQncyBtb3JlIG9mIGFuIGluaXRpYWxpemF0aW9uIG9yIHNldHVwIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgbmFtZSwgYW5kIG15IGV4cGVyaWVuY2UsIGl0IHNlZW1zIGxpa2UgYSBcImNvbW1hbmRcIiBmdW5jdGlvbjsgbW9yZSBsaWtlbHkgdXNlZCBmb3IgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9yIHNvbWUga2luZCBvZiBjb250cm9sIG1lY2hhbmlzbSB0aGFuIGNvcmUgZGF0YSB0cmFuc2Zlci4gTm93IGxldCBtZSB0cmFjZSBpdHMgY2FsbHMgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAyMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjM3LjM3OTE2MDgyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MTI5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3hhY3J1X2NtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTk9ZW51bSBjeGFjcnVfZndfcmVxdWVzdCB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzAtICogZmlybXdhcmUgaXMgbG9hZGVkICAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MTplbnVtIGN4YWNydV9jbV9yZXF1ZXN0IHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzItXFx0Q01fUkVRVUVTVF9VTkRFRklORUQgPSAweDgwLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEwOC0gKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTA5OmVudW0gY3hhY3J1X2NtX2ZsYXNoIHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwLVxcdENNX0ZMQVNIX1JFQUQgPSAweGExLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNC0vKiByZXBseSBjb2RlcyB0byB0aGUgY29tbWFuZHMgYWJvdmUgKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTE1OmVudW0gY3hhY3J1X2NtX3N0YXR1cyB7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNi1cXHRDTV9TVEFUVVNfVU5ERUZJTkVELFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5Mi1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTkzOnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5NC1cXHR1OCAqd2RhdGEsIGludCB3c2l6ZSwgdTggKnJkYXRhLCBpbnQgcnNpemUpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMzMj1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTYtXFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInN0b3BcXFwiKSB8fCAhc3RyY21wKHN0cl9jbWQsIFxcXCJyZXN0YXJ0XFxcIikpIHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzU3OlxcdFxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVE9QLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzU4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzc2LVxcdGlmICghc3RyY21wKHN0cl9jbWQsIFxcXCJzdGFydFxcXCIpIHx8ICFzdHJjbXAoc3RyX2NtZCwgXFxcInJlc3RhcnRcXFwiKSkge1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNzc6XFx0XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzc4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NDM1PXN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00ODAtXFx0XFx0XFx0ZGF0YVswXSA9IGNwdV90b19sZTMyKG51bSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjQ4MTpcXHRcXHRcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9EQVRBX1NFVCxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDgyLVxcdFxcdFxcdFxcdCh1OCAqKSBkYXRhLCA0ICsgbnVtICogOCwgTlVMTCwgMCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTkwPXN0YXRpYyBpbnQgY3hhY3J1X3N0YXJ0X3dhaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA3LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo2MDg6c3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA5LVxcdFxcdCAgICAgdTggKndkYXRhLCBpbnQgd3NpemUsIHU4ICpyZGF0YSwgaW50IHJzaXplKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcwOS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzEwOnN0YXRpYyBpbnQgY3hhY3J1X2NtX2dldF9hcnJheShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MTEtXFx0XFx0XFx0ICAgICAgIHUzMiAqZGF0YSwgaW50IHNpemUpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzIzLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MjQ6XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBjbSwgTlVMTCwgMCwgKHU4ICopIGJ1ZiwgYnVmbGVuKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyNy1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzI4OlxcdC8qIGxlbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgbGVuICUgNCA9PSAwIGd1YXJhbnRlZWQgYnkgY3hhY3J1X2NtKCkgKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI5LVxcdGxlbiA9IHJldCAvIDQ7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzYwPXN0YXRpYyBpbnQgY3hhY3J1X2NhcmRfc3RhdHVzKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2MS17XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc2MjpcXHRpbnQgcmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX1NUQVRVUywgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2My1cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NzE9c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4MS1cXHQvKiBSZWFkIE1BQyBhZGRyZXNzICovXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc4MjpcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfTUFDX0FERFJFU1MsIE5VTEwsIDAsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4My1cXHRcXHRcXHRhdG1fZGV2LVxcdTAwM2Vlc2ksIHNpemVvZihhdG1fZGV2LVxcdTAwM2Vlc2kpKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTAtXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkxOlxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5Mi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz04MjA9c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MjktXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjgzMDpcXHRyZXQgPSBjeGFjcnVfY21fZ2V0X2FycmF5KGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfSU5GT19HRVQsIGJ1ZiwgQ1hJTkZfTUFYKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODMxLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTAwNj1zdGF0aWMgaW50IGN4YWNydV9oZWF2eV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMDEtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjExMDI6XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX1NUQVRVUywgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMDMtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6MzcuNDIyNjc4Nzc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDQwOTI2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDWEFDUlUgQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgcmVmZXJlbmNlcyBpbiBgY3hhY3J1X2F0bV9zdGFydGAsIGBjeGFjcnVfaGVhdnlfaW5pdGAsIGBjeGFjcnVfcG9sbF9zdGF0dXNgLCBgYWRzbF9zdGF0ZV9zdG9yZWAsIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgLiBHaXZlbiB0aGF0IGBjeGFjcnVfY21gIGlzIHN0YXRpYywgSSdtIGdvaW5nIHRvIHNldCB0aGF0IGFzaWRlIGZvciBub3c7IGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSB0aGUgY29yZSBpc3N1ZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRob3NlIG90aGVyIGZ1bmN0aW9ucy4gV2FpdCBhIHNlY29uZC4uLiBgY3hhY3J1X2F0bV9zdGFydGAgYW5kIGBjeGFjcnVfaGVhdnlfaW5pdGAgYXJlIGNhbGxiYWNrcy4gUmlnaHQsIHRoYXQgY2hhbmdlcyB0aGluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNhbGxiYWNrcy4gVGltZSB0byBkaWcgaW50byB0aGUgc3RydWN0IHRoZXkncmUgYXNzaWduZWQgdG8g4oCTIHRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGNydWNpYWwgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNzQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6NDEuNjI2NzczNzM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE3MjY1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjeGFjcnVfYXRtX3N0YXJ0fGN4YWNydV9oZWF2eV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzYwPXN0YXRpYyBpbnQgY3hhY3J1X2NhcmRfc3RhdHVzKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzcwLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3NzE6c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NzItXFx0XFx0c3RydWN0IGF0bV9kZXYgKmF0bV9kZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzg0LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc4NTpcXHRcXHRhdG1fZXJyKHVzYmF0bV9pbnN0YW5jZSwgXFxcImN4YWNydV9hdG1fc3RhcnQ6IENBUkRfR0VUX01BQ19BRERSRVNTIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03ODYtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc5MzpcXHRcXHRhdG1fZXJyKHVzYmF0bV9pbnN0YW5jZSwgXFxcImN4YWNydV9hdG1fc3RhcnQ6IENISVBfQURTTF9MSU5FX1NUQVJUIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTQtXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9OTg2PXN0YXRpYyBpbnQgY3hhY3J1X2ZpbmRfZmlybXdhcmUoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMDA1LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMDA2OnN0YXRpYyBpbnQgY3hhY3J1X2hlYXZ5X2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEwMDctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ludGYpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTM0Mj1zdGF0aWMgc3RydWN0IHVzYmF0bV9kcml2ZXIgY3hhY3J1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMzQ0LVxcdC5iaW5kXFx0XFx0PSBjeGFjcnVfYmluZCxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTM0NTpcXHQuaGVhdnlfaW5pdFxcdD0gY3hhY3J1X2hlYXZ5X2luaXQsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzNDYtXFx0LnVuYmluZFxcdFxcdD0gY3hhY3J1X3VuYmluZCxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTM0NzpcXHQuYXRtX3N0YXJ0XFx0PSBjeGFjcnVfYXRtX3N0YXJ0LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMzQ4LVxcdC5idWxrX2luXFx0PSBDWEFDUlVfRVBfREFUQSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6NDEuNjY4OTUzNDE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTI1NTU2NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIHRoZSBjeGFjcnUgRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGN4YWNydV9kcml2ZXJgIGlzIGEgYHVzYmF0bV9kcml2ZXJgLCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggQVRNIG92ZXIgVVNCLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNlZSBgY3hhY3J1X2JpbmRgLCBgY3hhY3J1X2hlYXZ5X2luaXRgLCBhbmQgYGN4YWNydV9hdG1fc3RhcnRgIGp1bXAgb3V0IGFzIGluaXRpYWwgZnV6emluZyB0YXJnZXRzLiBHb29kIGNhbmRpZGF0ZXMgdG8gc3RhcnQgd2l0aC5cblxuSG9sZCBvbi4uLiBJJ3ZlIGdvdCBzb21ldGhpbmcuIEkgc2VlIHRoYXQgYGN4YWNydV9jbWAgaXMgY2FsbGVkIGZyb20gYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgLiBBaGEsIHRoZXNlIGFyZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMhIFdlIG1pZ2h0IGdldCBzb21lIGludGVyZXN0aW5nIGVudHJ5IHBvaW50cyB0aHJvdWdoIHRob3NlLiBMZXQncyBtYWtlIGEgbm90ZSB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLiBPaCwgYW5kIGhlcmUgaXMgYGN4YWNydV9wb2xsX3N0YXR1c2AgYXMgYSB3b3JrcXVldWUgZnVuY3Rpb24uXG5cblNvLCB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSBhcmUgbG9va2luZyBsaWtlOiBgY3hhY3J1X2hlYXZ5X2luaXRgLCBgY3hhY3J1X2F0bV9zdGFydGAsIGBhZHNsX3N0YXRlX3N0b3JlYCwgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAuXG5cbk5vdywgbGV0J3MgcmV2aXNpdCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJdCdzIGNydWNpYWwgd2UgZ2V0IHRoZSBkZXBlbmRlbmNpZXMgcmlnaHQuIGBVU0JfQ1hBQ1JVYCBkZXBlbmRzIG9uIGBVU0JfQVRNYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBBVE1gLiBHb3QgaXQuIFdlIG5lZWQgdG8gZW5hYmxlIGBVU0JfQ1hBQ1JVYCwgYFVTQl9BVE1gLCBhbmQgYEFUTWAgaW4gdGhlIGtlcm5lbCBjb25maWcuIFdhaXQgYSBtaW51dGUuLi4gYFVTQl9DWEFDUlVgICpzZWxlY3RzKiBgRldfTE9BREVSYC4gVGhhdCdzIGltcG9ydGFudDsgd2UgY2FuIHRyaWdnZXIgYWRkaXRpb25hbCBjb2RlIHBhdGhzLlxuXG5BbHJpZ2h0LCBsZXQncyBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIGlzIFwiV29ydGhGdXp6aW5nXCIuIEl0IG1vZGlmaWVzIGEgVVNCIGRyaXZlciwgYW5kIHRoYXQgaXMgYSBtYWpvciBwbHVzIGluIG15IGJvb2suIFVTQiBkcml2ZXJzIGFyZSBuaWNlbHkgZnV6emFibGUgd2l0aCBlbXVsYXRlZCBkZXZpY2VzLCBsaWtlIGR1bW15X2hjZCBvciBTeXprYWxsZXIncyBVU0IgZnV6emluZyBjYXBhYmlsaXRpZXMuIEFic29sdXRlbHksIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSBjb25maWdzIEknbSBlbmFibGluZyBhcmU6XG5cbiogICBgVVNCX0NYQUNSVWBcbiogICBgVVNCX0FUTWBcbiogICBgQVRNYFxuXG5BbmQgdGhlIGtleSBmdW5jdGlvbnMgSSdtIHRhcmdldGluZyBhcmU6XG5cbiogICBgY3hhY3J1X2hlYXZ5X2luaXRgXG4qICAgYGN4YWNydV9hdG1fc3RhcnRgXG4qICAgYGFkc2xfc3RhdGVfc3RvcmVgXG4qICAgYGFkc2xfY29uZmlnX3N0b3JlYFxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYGN4YWNydV9jbWAgaXMgc3RhdGljLCB3aGljaCBpdCBsb29rcyBsaWtlIGl0IGlzLiBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gZm9jdXMgb24gaXRzIGNhbGxlcnMuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHRoYXQgYGFkc2xfc3RhdGVfc3RvcmVgIGFuZCBgYWRzbF9jb25maWdfc3RvcmVgIGFyZSBub3Qgc3RhdGljLCBvciBpZiB0aGV5IGFyZSBzdGF0aWMgd2hhdCBhcmUgdGhlaXIgYXNzaWdubWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyOTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6NTMuNTk0NTEyNjUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzg1NDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZHNsX3N0YXRlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzE1PXN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMzI6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjUzLjY0ODM3NTI3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAxMDcxNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkV4YW1pbmluZyB0aGUgU3lzZnMgQXR0cmlidXRlIEFzc2lnbm1lbnQqKlxuXG5SaWdodCwgc28gdGhlc2UgdGhpbmdzIGFyZSBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIGluIGl0c2VsZi4gQnV0IHRoZXkgYXJlIGFsc28gZGVzaWduYXRlZCBhcyBgc3lzZnNgIHN0b3JlIGZ1bmN0aW9ucy4gVGhhdCBtZWFucyB0aGV5J3JlIGhvb2tlZCBpbnRvIHRoZSBzeXNmcyBpbmZyYXN0cnVjdHVyZSBzb21laG93LCBhc3NpZ25lZCB0byBgREVWSUNFX0FUVFJgIHN0cnVjdHVyZXMgbW9zdCBsaWtlbHkuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGFyZSB0aGV5IGFjdHVhbGx5ICpleHBvc2VkKiB0aHJvdWdoIHN5c2ZzPyBBcmUgdGhleSBzaG93aW5nIHVwIGFzIGF0dHJpYnV0ZXMgdW5kZXIgYSBkZXZpY2Ugbm9kZSwgYWxsb3dpbmcgdXMgdG8gcmVhZCBhbmQgd3JpdGUgdG8gdGhlbT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBhY3R1YWwgc3lzZnMgdHJlZSB0byBjb25maXJtIHRoZWlyIHZpc2liaWxpdHkgYW5kIHVuZGVyc3RhbmQgd2hhdCBlZmZlY3QgdGhleSdsbCBoYXZlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBleHBsb3JlIGhvdyB0aGV5IGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ2OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI3OjU3LjI0OTQ0OTExMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg4Mzg2NDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVklDRV9BVFRSLiphZHNsX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjc6NTcuMzI4Mjk1MTM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjEwNzAxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIGRlYWxpbmcgd2l0aCBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGVzZSB0ZWNobmljYWwgdGVybXM6XG5cbioqQ2hlY2tpbmcgQmFjayBvbiBgYWRzbF9zdGF0ZV9zdG9yZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyByZXZpc2l0IHRoaXMuIEkga25vdyB3ZSd2ZSBsb29rZWQgYXQgaXQgYmVmb3JlLCBidXQgc29tZXRoaW5nIGlzIG5hZ2dpbmcgYXQgbWUuIFRpbWUgdG8gZG8gYSBxdWljayBzZWFyY2ggZm9yIGBhZHNsX3N0YXRlX3N0b3JlYCBhZ2Fpbi4gTmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgaW4gaXRzIGJlaGF2aW9yIG9yIGludGVyYWN0aW9ucy4gR290dGEga2VlcCBkaWdnaW5nOyBpdCdzIHByb2JhYmx5IGltcG9ydGFudCB0byB0aGUgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgd2hhdCB0dXJucyB1cCB0aGlzIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzA4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MDAuODg5MzY3NzQ5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjAzNjgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZHNsX3N0YXRlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzE1PXN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMzI6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI4OjAwLjkzMTQwODkwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIxNzQ1NjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIHNlZSBob3cgSSBjYW4gc3VtbWFyaXplIHRoaXMgZm9yIGFuIGV4cGVydC4uLlxuXG4qKipcblxuKipNeSBBbmFseXRpY2FsIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBpcyB0byBlc3NlbnRpYWxseSB1bnBhY2sgYSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBhbmQgdGhlbiByZS1wcmVzZW50IGl0IGluIGEgY29uY2lzZSB3YXkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzPyBJdCdzIGFsbCBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBpbmhlcmVudCB1c2FnZS4gV2hhdCBpcyB0aGlzIHBpZWNlIG9mIHRleHQgKmZvcio/IEhvdyBpcyBpdCBpbnRlbmRlZCB0byBiZSB1c2VkIG9yIGhvdyBjYW4gaXQgYmUgdXNlZCwgZXZlbiBpZiBJJ20gbm90IGdpdmVuIGV4cGxpY2l0IGNvbnRleHQ/IFRvIGRpc3RpbGwgaXQgdG8gaXRzIGVzc2VuY2UgcmVxdWlyZXMgZ3Jhc3BpbmcgaXRzIHB1cnBvc2Ugd2l0aGluIGEgYnJvYWRlciBmcmFtZXdvcmsuIEknbSBmb2N1c2luZyBvbiB0aGUgJ2hvdycgYW5kICd3aHknIG9mIGl0cyBhcHBsaWNhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVuZGVkIGZ1bmN0aW9uLCB0aGUgaW1wbGljYXRpb25zIGFuZCB0aGUgY29yZSBjb25jZXB0cyBhdCBwbGF5IGFuZCB0aGVuIHByZXNlbnQgaXQgZWZmaWNpZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDE4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MDUuMDUzMTU2OTI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg1OlxcdFxcdFxcdFxcdHBvbGwgPSBDWFBPTExfUE9MTElORztcXG4gMzg2OlxcdFxcdFxcdH1cXG4gMzg3OlxcdFxcdH1cXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInBvbGxcXFwiKSkge1xcbiAzOTA6XFx0XFx0XFx0cmV0ID0gbGVuO1xcbiAzOTE6XFx0XFx0XFx0cG9sbCA9IENYUE9MTF9QT0xMSU5HO1xcbiAzOTI6XFx0XFx0fVxcbiAzOTM6XFx0XFxuIDM5NDpcXHRcXHRpZiAocmV0ID09IDApIHtcXG4gMzk1OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDM5NjpcXHRcXHRcXHRwb2xsID0gLTE7XFxuIDM5NzpcXHRcXHR9XFxuIDM5ODpcXHRcXG4gMzk5OlxcdFxcdGlmIChwb2xsID09IENYUE9MTF9QT0xMSU5HKSB7XFxuIDQwMDpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNlcG9sbF9zdGF0ZV9zZXJpYWxpemUpO1xcbiA0MDE6XFx0XFx0XFx0c3dpdGNoIChpbnN0YW5jZS1cXHUwMDNlcG9sbF9zdGF0ZSkge1xcbiA0MDI6XFx0XFx0XFx0Y2FzZSBDWFBPTExfU1RPUFBFRDpcXG4gNDAzOlxcdFxcdFxcdFxcdC8qIHN0YXJ0IHBvbGxpbmcgKi9cXG4gNDA0OlxcdFxcdFxcdFxcdGluc3RhbmNlLVxcdTAwM2Vwb2xsX3N0YXRlID0gQ1hQT0xMX1BPTExJTkc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI4OjA1LjA1MzI3NDg2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU2NDYyOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgc2VjdGlvbiwgc3BlY2lmaWNhbGx5LCB0aGF0J3MgbGluZXMgMzMyIGFuZCBiZXlvbmQuIFRoZSBjb250ZXh0IGlzIGltcG9ydGFudCwgYnV0IGZvciB0aGUgc3VtbWFyeSBJIHdhbnQgdG8gZm9jdXMgb24gdGhpcyBwb3J0aW9uLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGRlZXBlciBsb29rIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gdGhhdCBzcGVjaWZpYyBwb3J0aW9uIG9mIHRoZSB0ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ5MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MDkuOTA5NzQwNzc3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzMyOlxcdHN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbiAzMzM6XFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbiAzMzQ6XFx0e1xcbiAzMzU6XFx0XFx0c3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSA9IHRvX3VzYmF0bV9kcml2ZXJfZGF0YShcXG4gMzM2OlxcdFxcdFxcdFxcdHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7XFxuIDMzNzpcXHRcXHRpbnQgcmV0O1xcbiAzMzg6XFx0XFx0aW50IHBvbGwgPSAtMTtcXG4gMzM5OlxcdFxcdGNoYXIgc3RyX2NtZFs4XTtcXG4gMzQwOlxcdFxcdGludCBsZW4gPSBzdHJsZW4oYnVmKTtcXG4gMzQxOlxcdFxcbiAzNDI6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKVxcbiAzNDM6XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIDM0NDpcXHRcXG4gMzQ1OlxcdFxcdHJldCA9IHNzY2FuZihidWYsIFxcXCIlN3NcXFwiLCBzdHJfY21kKTtcXG4gMzQ2OlxcdFxcdGlmIChyZXQgIT0gMSlcXG4gMzQ3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzNDg6XFx0XFx0cmV0ID0gMDtcXG4gMzQ5OlxcdFxcbiAzNTA6XFx0XFx0aWYgKGluc3RhbmNlID09IE5VTEwpXFxuIDM1MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MDkuOTA5ODY3MDM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NDYxNzA1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkZpbmRpbmcgdGhlIEFzc2lnbm1lbnQgb2YgYGFkc2xfc3RhdGVfc3RvcmVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhZHNsX3N0YXRlX3N0b3JlYCBpcyB1c2VkLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgdHJhY2Ugd2hlcmUgaXQncyAqYXNzaWduZWQqIGEgdmFsdWUuIEknbSBsb29raW5nIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb3IgbW9kaWZpY2F0aW9uIHBvaW50cyBvZiB0aGlzIHZhcmlhYmxlLiBUaGlzIGlzIGZ1bmRhbWVudGFsOyBrbm93aW5nIHdoZXJlIHRoZSBkYXRhIG9yaWdpbmF0ZXMgZ2l2ZXMgbWUgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludCB0byBmb2xsb3cgaXRzIGZsb3cgYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBzeXN0ZW0uIFdpdGhvdXQga25vd2luZyBpdHMgc291cmNlLCBhbnkgZnVydGhlciBhbmFseXNpcyBpcyBnb2luZyB0byBiZSBndWVzc2luZyBhdCBiZXN0LCBhbmQgaW5lZmZpY2llbnQgYXQgd29yc3QuIFNvLCBmaW5kIHRoZSBhc3NpZ25tZW50ISBUaGF0J3MgdGhlIGtleSB0byBldmVyeXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkxNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MTYuNTU2MDM5Nzc0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMxMDQwMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRzbF9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE3NS1cXHRpbnQgbGluZV9zdGF0dXM7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjE3NjpcXHRzdHJ1Y3QgbXV0ZXggYWRzbF9zdGF0ZV9zZXJpYWxpemU7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE3Ny1cXHRpbnQgYWRzbF9zdGF0dXM7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MzAzPXN0YXRpYyBzc2l6ZV90IG1hY19hZGRyZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMxNC1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzE1OnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMxNi1cXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzMyOnN0YXRpYyBzc2l6ZV90IGFkc2xfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMzMtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1Mi1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzUzOlxcdGlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSkpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTM1NC1cXHRcXHRyZXR1cm4gLUVSRVNUQVJUU1lTO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTQyNC1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NDI1OlxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDI2LVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTUzNT1DWEFDUlVfQVRUUl8jI19hY3Rpb24oQ1hJTkZfQ09OVFJPTExFUl9WRVJTSU9OLCAgICAgICAgdTMyLCAgYWRzbF9jb250cm9sbGVyX3ZlcnNpb24pOyBcXFxcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjUzNjpDWEFDUlVfQ01EXyMjX2FjdGlvbiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRzbF9zdGF0ZSk7IFxcXFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNTM3LUNYQUNSVV9TRVRfIyNfYWN0aW9uKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHNsX2NvbmZpZyk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTQxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjeGFjcnVfYXR0cnNbXSA9IHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNTQyLVxcdFxcdTAwMjZkZXZfYXR0cl9hZHNsX2NvbmZpZy5hdHRyLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo1NDM6XFx0XFx1MDAyNmRldl9hdHRyX2Fkc2xfc3RhdGUuYXR0cixcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNTQ0LVxcdFxcdTAwMjZkZXZfYXR0cl9hZHNsX2NvbnRyb2xsZXJfdmVyc2lvbi5hdHRyLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTc3MT1zdGF0aWMgaW50IGN4YWNydV9hdG1fc3RhcnQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzg5LVxcdC8qIHN0YXJ0IEFEU0wgKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkwOlxcdG11dGV4X2xvY2soXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5MS1cXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgxMi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmluc3RhbmNlLVxcdTAwM2Vwb2xsX3N0YXRlX3NlcmlhbGl6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjgxMzpcXHRtdXRleF91bmxvY2soXFx1MDAyNmluc3RhbmNlLVxcdTAwM2VhZHNsX3N0YXRlX3NlcmlhbGl6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTgxNC1cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz04MjA9c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MzktXFx0XFx0XFx0aWYgKHJldCAhPSAtRVNIVVRET1dOKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo4NDA6XFx0XFx0XFx0XFx0YXRtX3dhcm4odXNiYXRtLCBcXFwicG9sbGluZyBkaXNhYmxlZCwgc2V0IGFkc2xfc3RhdGVcXFwiXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTg0MS1cXHRcXHRcXHRcXHRcXHRcXHRcXFwiIHRvICdzdGFydCcgb3IgJ3BvbGwnIHRvIHJlc3VtZVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTEyMj1zdGF0aWMgaW50IGN4YWNydV9iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNDYtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjExNDc6XFx0bXV0ZXhfaW5pdChcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTE0OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MTYuNzM5MTQ5MDgxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NjU1OTU4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENYQUNSVSBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYENYQUNSVV9DTURfIyNfYWN0aW9uKGFkc2xfc3RhdGUpYCBiZWNvbWVzIGBkZXZfYXR0cl9hZHNsX3N0YXRlYCB0aHJvdWdoIGV4cGFuc2lvbi4gVGhhdCBtZWFucyBgYWRzbF9zdGF0ZV9zdG9yZWAgYW5kIGBhZHNsX2NvbmZpZ19zdG9yZWAgYXJlIGV4cG9zZWQgdGhyb3VnaCBzeXNmcy4gVGhhdCdzIGdvb2QsIGJ1dCBpdCBhbHNvIG1lYW5zIGRpcmVjdGx5IGZ1enppbmcgdGhlbSBpcyBnb2luZyB0byBiZSBhIHBhaW4gaWYgdGhleSdyZSBub3Qgc3RhbmRhcmQgc3lzZnMgYXR0cmlidXRlcy4gVGhvdWdoLCBvZiBjb3Vyc2UsIFN5emthbGxlciAqY2FuKiBmdXp6IHN5c2ZzLCBzbyBpdCdzIG5vdCBhIGNvbXBsZXRlIGRlYWQgZW5kLlxuXG5Ib3dldmVyLCB0aGUgcmVhbCBnZW1zIGhlcmUgYXJlIGxpa2VseSBgY3hhY3J1X2hlYXZ5X2luaXRgIGFuZCBgY3hhY3J1X2F0bV9zdGFydGAuIFRoZXNlIGFyZSBzdGFuZGFyZCBVU0IgQVRNIGNhbGxiYWNrcywgd2hpY2ggdGVsbHMgbWUgdGhleSdsbCBiZSBjYWxsZWQgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgc3RhcnR1cC4gVGhpcyBtYWtlcyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcg4oCTIG11Y2ggZWFzaWVyIHRvIHRyaWdnZXIgYW5kIG9ic2VydmUgdGhhbiBzb21ldGhpbmcgYnVyaWVkIGRlZXAgaW4gc3lzZnMuIERlZmluaXRlbHkgZm9jdXNpbmcgb24gdGhvc2UuIEFuZCBgY3hhY3J1X2JpbmRgIHNlZW1zIGxpa2UgYW5vdGhlciBwb3RlbnRpYWxseSBmcnVpdGZ1bCBzdGFydGluZyBwb2ludC5cblxuTm93LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgY3hhY3J1X2NtYCBnZXRzIGNhbGxlZCBmcm9tIGBjeGFjcnVfYmluZGAuIFRoYXQgY291bGQgb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIGF2ZW51ZXMgZm9yIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjkwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI4OjIyLjMwNDc0ODMzN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMzg1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3hhY3J1X2NtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTk9ZW51bSBjeGFjcnVfZndfcmVxdWVzdCB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzAtICogZmlybXdhcmUgaXMgbG9hZGVkICAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MTplbnVtIGN4YWNydV9jbV9yZXF1ZXN0IHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzItXFx0Q01fUkVRVUVTVF9VTkRFRklORUQgPSAweDgwLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEwOC0gKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTA5OmVudW0gY3hhY3J1X2NtX2ZsYXNoIHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTEwLVxcdENNX0ZMQVNIX1JFQUQgPSAweGExLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNC0vKiByZXBseSBjb2RlcyB0byB0aGUgY29tbWFuZHMgYWJvdmUgKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTE1OmVudW0gY3hhY3J1X2NtX3N0YXR1cyB7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExNi1cXHRDTV9TVEFUVVNfVU5ERUZJTkVELFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE3MD1zdHJ1Y3QgY3hhY3J1X2RhdGEge1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5Mi1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTkzOnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5NC1cXHR1OCAqd2RhdGEsIGludCB3c2l6ZSwgdTggKnJkYXRhLCBpbnQgcnNpemUpO1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTMzMj1zdGF0aWMgc3NpemVfdCBhZHNsX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zNTYtXFx0aWYgKCFzdHJjbXAoc3RyX2NtZCwgXFxcInN0b3BcXFwiKSB8fCAhc3RyY21wKHN0cl9jbWQsIFxcXCJyZXN0YXJ0XFxcIikpIHtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MzU3OlxcdFxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVE9QLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzU4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzc2LVxcdGlmICghc3RyY21wKHN0cl9jbWQsIFxcXCJzdGFydFxcXCIpIHx8ICFzdHJjbXAoc3RyX2NtZCwgXFxcInJlc3RhcnRcXFwiKSkge1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozNzc6XFx0XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NISVBfQURTTF9MSU5FX1NUQVJULCBOVUxMLCAwLCBOVUxMLCAwKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzc4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NDM1PXN0YXRpYyBzc2l6ZV90IGFkc2xfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00ODAtXFx0XFx0XFx0ZGF0YVswXSA9IGNwdV90b19sZTMyKG51bSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjQ4MTpcXHRcXHRcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9EQVRBX1NFVCxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDgyLVxcdFxcdFxcdFxcdCh1OCAqKSBkYXRhLCA0ICsgbnVtICogOCwgTlVMTCwgMCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NTkwPXN0YXRpYyBpbnQgY3hhY3J1X3N0YXJ0X3dhaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA3LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo2MDg6c3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNjA5LVxcdFxcdCAgICAgdTggKndkYXRhLCBpbnQgd3NpemUsIHU4ICpyZGF0YSwgaW50IHJzaXplKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcwOS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzEwOnN0YXRpYyBpbnQgY3hhY3J1X2NtX2dldF9hcnJheShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLCBlbnVtIGN4YWNydV9jbV9yZXF1ZXN0IGNtLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MTEtXFx0XFx0XFx0ICAgICAgIHUzMiAqZGF0YSwgaW50IHNpemUpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzIzLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3MjQ6XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBjbSwgTlVMTCwgMCwgKHU4ICopIGJ1ZiwgYnVmbGVuKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTcyNy1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzI4OlxcdC8qIGxlbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgbGVuICUgNCA9PSAwIGd1YXJhbnRlZWQgYnkgY3hhY3J1X2NtKCkgKi9cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzI5LVxcdGxlbiA9IHJldCAvIDQ7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9NzYwPXN0YXRpYyBpbnQgY3hhY3J1X2NhcmRfc3RhdHVzKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2MS17XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc2MjpcXHRpbnQgcmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX1NUQVRVUywgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2My1cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz03NzE9c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4MS1cXHQvKiBSZWFkIE1BQyBhZGRyZXNzICovXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjc4MjpcXHRyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9HRVRfTUFDX0FERFJFU1MsIE5VTEwsIDAsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc4My1cXHRcXHRcXHRhdG1fZGV2LVxcdTAwM2Vlc2ksIHNpemVvZihhdG1fZGV2LVxcdTAwM2Vlc2kpKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03OTAtXFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZWFkc2xfc3RhdGVfc2VyaWFsaXplKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzkxOlxcdHJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVEFSVCwgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc5Mi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz04MjA9c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy04MjktXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjgzMDpcXHRyZXQgPSBjeGFjcnVfY21fZ2V0X2FycmF5KGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfSU5GT19HRVQsIGJ1ZiwgQ1hJTkZfTUFYKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODMxLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTAwNj1zdGF0aWMgaW50IGN4YWNydV9oZWF2eV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMDEtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjExMDI6XFx0cmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfR0VUX1NUQVRVUywgTlVMTCwgMCwgTlVMTCwgMCk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMDMtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MjIuMzQ3ODk0MzI2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1Mjc4ODAwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYGN4YWNydV9jbWAgZ2V0cyBjYWxsZWQgd2l0aGluIHRoaXMgY29kZS4gVGhlIGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IGBjeGFjcnVfYmluZGAgKmRvZXNuJ3QqIGNhbGwgYGN4YWNydV9jbWAgZGlyZWN0bHkuIEhtbSwgaW50ZXJlc3RpbmcuIEhvd2V2ZXIsIGBjeGFjcnVfaGVhdnlfaW5pdGAgKmRvZXMqIGNhbGwgaXQsIHNwZWNpZmljYWxseSBhdCBsaW5lIDExMDIsIGFuZCBgY3hhY3J1X2F0bV9zdGFydGAgYWxzbyBjYWxscyBpdCwgYXQgbGluZXMgNzgyIGFuZCA3OTEuIFNvLCBiYXNlZCBvbiB0aGlzIHF1aWNrIGxvb2ssIGBjeGFjcnVfaGVhdnlfaW5pdGAgYW5kIGBjeGFjcnVfYXRtX3N0YXJ0YCBzZWVtIGxpa2UgdGhlIG1vc3QgcHJvbWlzaW5nIHN5bWJvbHMgdG8gZm9jdXMgb24uXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFllcywgdGhleSBhcmUuIEhvbGQgb24gYSBzZWNvbmQsIHRoYXQncyBub3Qgd2hhdCB0aGUgcHJvbXB0IHdhbnRzLiBJdCBwcmVmZXJzIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW5saW5lZCwgYW5kIHdlIG5lZWQgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gQnV0LCB3YWl0Li4uIGluIHRoaXMgY2FzZSwgZXZlbiB0aG91Z2ggdGhleSdyZSBzdGF0aWMsIGJvdGggYGN4YWNydV9oZWF2eV9pbml0YCBhbmQgYGN4YWNydV9hdG1fc3RhcnRgIGFyZSBhc3NpZ25lZCB0byBhIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycy4gVGhhdCBtZWFucyB0aGV5ICpjYW5ub3QqIGJlIGlubGluZWQuIFRoZXknbGwgZGVmaW5pdGVseSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFNvLCB0aGUgcHJvbXB0IGlzIHBlcmhhcHMgbm90IGNvbnNpZGVyaW5nIHRoaXMgbnVhbmNlIGluIHRoZSBjb2RlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gTmV2ZXJ0aGVsZXNzLCBiZWZvcmUgSSB6ZXJvIGluIG9uIHRob3NlLCBJIHNob3VsZCBicmllZmx5IHNjYW4gdGhlIGNvZGUgZm9yICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgY3hhY3J1LmNgLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQ1LCJPdXRwdXRUb2tlbnMiOjY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI4OjMxLjg3NTc3NzQ3NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NjEyMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTE5NT1zdGF0aWMgdm9pZCBjeGFjcnVfcG9sbF9zdGF0dXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xOTgtI2RlZmluZSBDWEFDUlVfX0FUVFJfSU5JVChfbmFtZSkgXFxcXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTk6c3RhdGljIERFVklDRV9BVFRSX1JPKF9uYW1lKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDAtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMS0jZGVmaW5lIENYQUNSVV9DTURfSU5JVChfbmFtZSkgXFxcXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDI6c3RhdGljIERFVklDRV9BVFRSX1JXKF9uYW1lKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDMtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwNC0jZGVmaW5lIENYQUNSVV9TRVRfSU5JVChfbmFtZSkgXFxcXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDU6c3RhdGljIERFVklDRV9BVFRSX1dPKF9uYW1lKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI4OjMxLjk5MTM5NTA0M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk2MDY4OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKklkZW50aWZ5aW5nIER5bmFtaWMgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhcyB3aGVyZSB0aGUgc3lzdGVtICp0cnVseSogYmVoYXZlcyBkeW5hbWljYWxseS4gU3RhdGljIGZ1bmN0aW9ucyBhcmUsIGJ5IGRlZmluaXRpb24sIHByZWRpY3RhYmxlIGFuZCB0aWVkIGRpcmVjdGx5IHRvIHRoZSBjb2RlJ3Mgc3RydWN0dXJlIGF0IGNvbXBpbGUgdGltZS4gVGhleSBhcmUgdGhlIGZpeGVkIHBvaW50cy4gVGhlcmVmb3JlLCBhbnkgYW5hbHlzaXMgZm9jdXNlZCBvbiBhZGFwdGl2ZSBiZWhhdmlvciwgcnVudGltZSBtb2RpZmljYXRpb25zLCBvciB0aGUgaW1wYWN0cyBvZiBjb25maWd1cmF0aW9uIG9yIGlucHV0IGRhdGEgbmVlZHMgdG8gZXhjbHVkZSB0aG9zZS4gSSBuZWVkIHRvIGZpbHRlciBvdXQgdGhlIG5vaXNlLiBMZXQncyBmb2N1cyBvdXIgYXR0ZW50aW9uIGJ5IHNlYXJjaGluZywgZGlyZWN0bHksIGZvciB0aG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgKm5vdCogc3RhdGljLiBUaGlzIHdpbGwgcXVpY2tseSByZXZlYWwgdGhlIGFyZWFzIHRoYXQgYXJlIGNhbmRpZGF0ZXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvZiB0aGUgc3lzdGVtJ3MgZHluYW1pYyBiZWhhdmlvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTYwLCJPdXRwdXRUb2tlbnMiOjY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6MzUuNTg3NDY2ODEyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjMxODIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL2N4YWNydS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYz0xOTU9c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk4LSNkZWZpbmUgQ1hBQ1JVX19BVFRSX0lOSVQoX25hbWUpIFxcXFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTk5OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhfbmFtZSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAwLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDEtI2RlZmluZSBDWEFDUlVfQ01EX0lOSVQoX25hbWUpIFxcXFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjAyOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhfbmFtZSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAzLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDQtI2RlZmluZSBDWEFDUlVfU0VUX0lOSVQoX25hbWUpIFxcXFxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjA1OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhfbmFtZSlcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyODozNS42NDk3OTE1ODFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0NDEwMDMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlJlZ2V4IFdvZXMgYW5kIGEgU2ltcGxlIFNvbHV0aW9uKipcblxuSG1tLCB0aGF0IHJlZ2V4IEkgd2FzIHRyeWluZyB0byB1c2XigKYgaXQganVzdCB3YXNuJ3QgY3V0dGluZyBpdC4gSXQncyBiZWNvbWluZyB0b28gY29tcGxleCBhbmQgbm90IGRvaW5nIHRoZSBqb2IuIFlvdSBrbm93IGhvdyBpdCBpczsgc29tZXRpbWVzIHlvdSBvdmVydGhpbmsgdGhpbmdzLiBSYXRoZXIgdGhhbiBiYW5naW5nIG15IGhlYWQgYWdhaW5zdCB0aGlzIGNvbXBsZXggcGF0dGVybiwgSSdtIHRoaW5raW5nLCBcIktlZXAgaXQgc2ltcGxlLCBzdHVwaWQhXCIgQSBzaW1wbGUgYGdyZXAgLXYgc3RhdGljYCBvbiB0aGUgZnVuY3Rpb25zIHNob3VsZCBkbyB0aGUgdHJpY2suIEl0IHNob3VsZCBlZmZpY2llbnRseSBmaWx0ZXIgb3V0IHRob3NlIGBzdGF0aWNgIGZ1bmN0aW9ucywgZ2l2aW5nIG1lIHdoYXQgSSBuZWVkIHdpdGhvdXQgdGhlIHJlZ2V4IGhlYWRhY2hlLiBTb21ldGltZXMgdGhlIG1vc3QgZWxlZ2FudCBzb2x1dGlvbiBpcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgb25lLCBlc3BlY2lhbGx5IHdoZW4gdGltZSBpcyBvZiB0aGUgZXNzZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyODo0MC4yOTM4OTQzNTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzY0NzU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel0uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM9MTcwPXN0cnVjdCBjeGFjcnVfZGF0YSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTkyLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxOTM6c3RhdGljIGludCBjeGFjcnVfY20oc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk0LVxcdHU4ICp3ZGF0YSwgaW50IHdzaXplLCB1OCAqcmRhdGEsIGludCByc2l6ZSk7XFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjE5NTpzdGF0aWMgdm9pZCBjeGFjcnVfcG9sbF9zdGF0dXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTk2LVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTE5OC0jZGVmaW5lIENYQUNSVV9fQVRUUl9JTklUKF9uYW1lKSBcXFxcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjE5OTpzdGF0aWMgREVWSUNFX0FUVFJfUk8oX25hbWUpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMC1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjAxLSNkZWZpbmUgQ1hBQ1JVX0NNRF9JTklUKF9uYW1lKSBcXFxcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIwMjpzdGF0aWMgREVWSUNFX0FUVFJfUlcoX25hbWUpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwMy1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA0LSNkZWZpbmUgQ1hBQ1JVX1NFVF9JTklUKF9uYW1lKSBcXFxcXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIwNTpzdGF0aWMgREVWSUNFX0FUVFJfV08oX25hbWUpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIwNi1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjA3LSNkZWZpbmUgQ1hBQ1JVX0FUVFJfSU5JVChfdmFsdWUsIF90eXBlLCBfbmFtZSkgXFxcXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoyMDg6c3RhdGljIHNzaXplX3QgX25hbWUjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgXFxcXFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMDktXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXFxcXFxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTIxOT1DWEFDUlVfX0FUVFJfSU5JVChfbmFtZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMzAtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjIzMTpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfdTMyKHUzMiB2YWx1ZSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMzIte1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTIzNS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjM2OnN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl9zOChzOCB2YWx1ZSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yMzcte1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTI0MC1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MjQxOnN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl9kQihzMTYgdmFsdWUsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjQyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNTItXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjI1MzpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfYm9vbCh1MzIgdmFsdWUsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjU0LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNjEtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjI2MjpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfTElOSyh1MzIgdmFsdWUsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjYzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yNzAtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjI3MTpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfTElORSh1MzIgdmFsdWUsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjcyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0yODEtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjI4MjpzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfTU9EVSh1MzIgdmFsdWUsIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMjgzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0zMDItICovXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjMwMzpzdGF0aWMgc3NpemVfdCBtYWNfYWRkcmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzA0LVxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE0LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMTU6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzE2LVxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMzMxLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzozMzI6c3RhdGljIHNzaXplX3QgYWRzbF9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTMzMy1cXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNDM0LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo0MzU6c3RhdGljIHNzaXplX3QgYWRzbF9jb25maWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy00MzYtXFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU3MD1BVFRSSUJVVEVfR1JPVVBTKGN4YWNydSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNTcyLS8qIHRoZSBmb2xsb3dpbmcgdGhyZWUgZnVuY3Rpb25zIGFyZSBzdG9sZW4gZnJvbSBkcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyAqL1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo1NzM6c3RhdGljIHZvaWQgY3hhY3J1X2Jsb2NraW5nX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01NzQte1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTU3OD1zdHJ1Y3QgY3hhY3J1X3RpbWVyIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01ODItXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjU4MzpzdGF0aWMgdm9pZCBjeGFjcnVfdGltZW91dF9raWxsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy01ODQte1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU4OS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NTkwOnN0YXRpYyBpbnQgY3hhY3J1X3N0YXJ0X3dhaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTU5MS1cXHRcXHRcXHRcXHQgaW50ICphY3R1YWxfbGVuZ3RoKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTYwNy1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NjA4OnN0YXRpYyBpbnQgY3hhY3J1X2NtKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsIGVudW0gY3hhY3J1X2NtX3JlcXVlc3QgY20sXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTYwOS1cXHRcXHQgICAgIHU4ICp3ZGF0YSwgaW50IHdzaXplLCB1OCAqcmRhdGEsIGludCByc2l6ZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03MDktXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjcxMDpzdGF0aWMgaW50IGN4YWNydV9jbV9nZXRfYXJyYXkoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwgZW51bSBjeGFjcnVfY21fcmVxdWVzdCBjbSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzExLVxcdFxcdFxcdCAgICAgICB1MzIgKmRhdGEsIGludCBzaXplKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc1OS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6NzYwOnN0YXRpYyBpbnQgY3hhY3J1X2NhcmRfc3RhdHVzKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UpXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTc2MS17XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtNzcwLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo3NzE6c3RhdGljIGludCBjeGFjcnVfYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy03NzItXFx0XFx0c3RydWN0IGF0bV9kZXYgKmF0bV9kZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODE5LVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzo4MjA6c3RhdGljIHZvaWQgY3hhY3J1X3BvbGxfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtODIxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy05MzYtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjkzNzpzdGF0aWMgaW50IGN4YWNydV9mdyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgZW51bSBjeGFjcnVfZndfcmVxdWVzdCBmdyxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtOTM4LVxcdFxcdCAgICAgdTggY29kZTEsIHU4IGNvZGUyLCB1MzIgYWRkciwgY29uc3QgdTggKmRhdGEsIGludCBzaXplKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTk4NS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6OTg2OnN0YXRpYyBpbnQgY3hhY3J1X2ZpbmRfZmlybXdhcmUoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtOTg3LVxcdFxcdFxcdFxcdGNoYXIgKnBoYXNlLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmd19wKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEwMDUtXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEwMDY6c3RhdGljIGludCBjeGFjcnVfaGVhdnlfaW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSxcXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTAwNy1cXHRcXHRcXHQgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaW50ZilcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMTIxLVxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYzoxMTIyOnN0YXRpYyBpbnQgY3hhY3J1X2JpbmQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTExMjMtXFx0XFx0ICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTIzMS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTIzMjpzdGF0aWMgdm9pZCBjeGFjcnVfdW5iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLFxcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMjMzLVxcdFxcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTEzNDI9c3RhdGljIHN0cnVjdCB1c2JhdG1fZHJpdmVyIGN4YWNydV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMtMTM1My1cXG5kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmM6MTM1NDpzdGF0aWMgaW50IGN4YWNydV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzNTUtXFx0XFx0Y29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jPTEzNzU9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGN4YWNydV91c2JfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jLTEzODItXFxuZHJpdmVycy91c2IvYXRtL2N4YWNydS5jOjEzODM6bW9kdWxlX3VzYl9kcml2ZXIoY3hhY3J1X3VzYl9kcml2ZXIpO1xcbmRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYy0xMzg0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMjoyODo0MC40MDc1NDY5NzFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYzODEyOTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERyaXZlciBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nOiBhbGwgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIEknbSBsb29raW5nIGF0IGFyZSBzdGF0aWMsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBJbnN0ZWFkIG9mIGZvbGxvd2luZyBkeW5hbWljIGNhbGxzLCBJIGNhbiBqdXN0IGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgZXhwbGljaXRseSBsaXN0ZWQgYXMgZW50cnkgcG9pbnRzIGZvciB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gZG9jdW1lbnQgdGhlc2UsIHNvIGhlcmUncyBhIGNvbmNpc2UgbGlzdDpcblxuKiAgIGBjeGFjcnVfYmluZGBcbiogICBgY3hhY3J1X2hlYXZ5X2luaXRgXG4qICAgYGN4YWNydV9hdG1fc3RhcnRgXG4qICAgYGN4YWNydV91c2JfcHJvYmVgXG5cbldhaXQsIHRoYXQgbGFzdCBvbmUsIGBjeGFjcnVfdXNiX3Byb2JlYCwgaXMgYW4gZW50cnkgcG9pbnQuIFRoYXQncyBnb29kIHRvIG5vdGUsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGN4YWNydV91c2JfcHJvYmVgIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNzUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6NTAuMDQ1Njc4Mjg4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9jeGFjcnUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzU0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzU0OlxcdHN0YXRpYyBpbnQgY3hhY3J1X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4xMzU1OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4xMzU2OlxcdHtcXG4xMzU3OlxcdFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcXG4xMzU4OlxcdFxcdGNoYXIgYnVmWzE1XTtcXG4xMzU5OlxcdFxcbjEzNjA6XFx0XFx0LyogQXZvaWQgQURTTCByb3V0ZXJzIChjeDgyMzEwX2V0aCkuXFxuMTM2MTpcXHRcXHQgKiBBYm9ydCBpZiBiRGV2aWNlQ2xhc3MgaXMgMHhmZiBhbmQgaVByb2R1Y3QgaXMgXFxcIlVTQiBORVQgQ0FSRFxcXCIuXFxuMTM2MjpcXHRcXHQgKi9cXG4xMzYzOlxcdFxcdGlmICh1c2JfZGV2LVxcdTAwM2VkZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSBVU0JfQ0xBU1NfVkVORE9SX1NQRUNcXG4xMzY0OlxcdFxcdFxcdFxcdFxcdTAwMjZcXHUwMDI2IHVzYl9zdHJpbmcodXNiX2RldiwgdXNiX2Rldi1cXHUwMDNlZGVzY3JpcHRvci5pUHJvZHVjdCxcXG4xMzY1OlxcdFxcdFxcdFxcdFxcdGJ1Ziwgc2l6ZW9mKGJ1ZikpIFxcdTAwM2UgMCkge1xcbjEzNjY6XFx0XFx0XFx0aWYgKCFzdHJjbXAoYnVmLCBcXFwiVVNCIE5FVCBDQVJEXFxcIikpIHtcXG4xMzY3OlxcdFxcdFxcdFxcdGRldl9pbmZvKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJpZ25vcmluZyBjeDgyMzEwX2V0aCBkZXZpY2VcXFxcblxcXCIpO1xcbjEzNjg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTM2OTpcXHRcXHRcXHR9XFxuMTM3MDpcXHRcXHR9XFxuMTM3MTpcXHRcXG4xMzcyOlxcdFxcdHJldHVybiB1c2JhdG1fdXNiX3Byb2JlKGludGYsIGlkLCBcXHUwMDI2Y3hhY3J1X2RyaXZlcik7XFxuMTM3MzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEyOjI4OjUwLjA0NTc3NTU1OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTgxNTIzNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENYQUNSVSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSBmbG93LCBgY3hhY3J1X3VzYl9wcm9iZWAgaGFuZHMgb2ZmIHRvIGB1c2JhdG1fdXNiX3Byb2JlYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoYXQgbWVhbnMgZnVuY3Rpb25zIGxpa2UgYGN4YWNydV9iaW5kYCwgYGN4YWNydV9oZWF2eV9pbml0YCwgYW5kIHVsdGltYXRlbHksIGBjeGFjcnVfYXRtX3N0YXJ0YCBhcmUgYWxsIHJlYXNvbmFibGUgcGxhY2VzIHRvIHRhcmdldC4gSSBsaWtlIHRoZSBsb2dpY2FsIHByb2dyZXNzaW9uIGhlcmUuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYGN4YWNydV9jbWAuIEkgbmVlZCB0byByZXZpc2l0IHRoYXQgcGF0Y2ggYWdhaW4uIEFoLCB5ZXMsIHRoZSBhZGRpdGlvbiBvZiBgdXNiX2tpbGxfdXJiKGluc3RhbmNlLVx1MDAzZXJjdl91cmIpO2Agd2hlbiBgcmV0IFx1MDAzYyAwYC4gVGhhdCdzIGEgY2xhc3NpYyBlcnJvci1oYW5kbGluZyBtZWNoYW5pc20sIGFuZCAqZGVmaW5pdGVseSogcmVhY2hhYmxlIHRocm91Z2ggVVNCIGZ1enppbmcuIFRoYXQncyBhIGdvb2QgZmluZCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQncyBhIGtleSBsaW5lIG9mIGNvZGUgSSdsbCB3YW50IHRvIGZvY3VzIG9uLlxuXG5MZXQgbWUgcXVpY2tseSBzdW1tYXJpemUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgdGhlbSBpbiBtaW5kLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYFVTQl9DWEFDUlVgLCBgVVNCX0FUTWAsIGFuZCB0aGUgYmFzZSBgQVRNYCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxheS5cblxuV2FpdC4uLiBzb21ldGhpbmcganVzdCBvY2N1cnJlZCB0byBtZSwgYW5kIGl0J3MgaW1wb3J0YW50LiBEb2VzIGBVU0JfQ1hBQ1JVYCBoYXZlIGFueSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0J3MgaGVhZCBiYWNrIHRvIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBidWlsZCBvcHRpb25zLiBUaGlzIGNvbmZpZ3VyYXRpb24gY2hlY2sgaXMgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzQ2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6NTYuMDI3MzAxMDk3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNwZWVkdGNoLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgVVNCX0NYQUNSVVxcbiAgMzM6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0Igc3VwcG9ydFxcXCJcXG4gIDM0OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiBBRFNMIFVTQiBtb2RlbSBiYXNlZCBvbiB0aGUgQ29uZXhhbnRcXG4gIDM3OlxcdFxcdCAgQWNjZXNzUnVubmVyIGNoaXBzZXQuICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvXFxuICAzODpcXHRcXHQgIGluc3RhbGwgdGhlIGZpcm13YXJlLCBleHRyYWN0ZWQgYnkgdGhlIHVzZXIgc3BhY2UgdG9vbHM7IHNlZVxcbiAgMzk6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvXFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDQyOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4YWNydS5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIFVTQl9VRUFHTEVBVE1cXG4gIDQ1OlxcdFxcdHRyaXN0YXRlIFxcXCJBREkgOTMwIGFuZCBlYWdsZSBVU0IgRFNMIG1vZGVtXFxcIlxcbiAgNDY6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEFEU0wgVVNCIG1vZGVtIGJhc2VkIG9uIHRoZSBBREkgOTMwXFxuICA0OTpcXHRcXHQgIG9yIGVhZ2xlIGNoaXBzZXQuIEluIG9yZGVyIHRvIHVzZSB5b3VyIG1vZGVtIHlvdSB3aWxsIG5lZWQgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjg6NTYuMDI3MzkxNTU3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDU0NDY1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQsIHdoaWxlIGl0IGRvZXNuJ3QgKmRpcmVjdGx5KiBzdGF0ZSBcImRlcGVuZHMgb24sXCIgdGhlIHN0cnVjdHVyZSBwbGFjZXMgaXQgd2l0aGluIGFuIGBpZiBVU0JfQVRNYCBibG9jay4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LiBOb3csIGBVU0JfQVRNYCwgSSByZW1lbWJlciwgaW4gdHVybiwgKmRvZXMqIGRlcGVuZCBvbiBgQVRNYC4gU28sIHB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyLCB0aGUgZWZmZWN0aXZlIGNvbmZpZ3VyYXRpb24gY2hhaW4gaGVyZSBpcyBgVVNCX0NYQUNSVWAgKHRoZSBvbmUgSSB3YXMgaW5pdGlhbGx5IGludGVyZXN0ZWQgaW4pLCBuZXN0ZWQgdW5kZXIgYFVTQl9BVE1gLCB3aGljaCBpdHNlbGYgaXMgY29udGluZ2VudCBvbiBgQVRNYCBiZWluZyBzZXQuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBpdOKAmXMgYWx3YXlzIHdpc2UgdG8gZG91YmxlLWNoZWNrIHRoZSBmb3VuZGF0aW9uYWwgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlcGVuZGVuY2llcyB0aGF0IGBBVE1gIGl0c2VsZiByZWxpZXMgdXBvbiwgZW5zdXJpbmcgdGhlcmUgYXJlIG5vIHVuZm9yZXNlZW4gY29tcGxpY2F0aW9ucyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU3NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjk6MDAuNjMyODQwMDc5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQ1NTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL0tjb25maWctNS1cXG5uZXQvYXRtL0tjb25maWc6Njpjb25maWcgQVRNXFxubmV0L2F0bS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXFxcIlxcbi0tXFxubmV0L2F0bS9LY29uZmlnLTIxLVxcbm5ldC9hdG0vS2NvbmZpZzoyMjpjb25maWcgQVRNX0JSMjY4NFxcbm5ldC9hdG0vS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiUkZDMTQ4My8yNjg0IEJyaWRnZWQgcHJvdG9jb2xzXFxcIlxcbi0tXFxubmV0L2F0bS9LY29uZmlnLTMwLVxcbm5ldC9hdG0vS2NvbmZpZzozMTpjb25maWcgQVRNX0JSMjY4NF9JUEZJTFRFUlxcbm5ldC9hdG0vS2NvbmZpZy0zMi1cXHRib29sIFxcXCJQZXItVkMgSVAgZmlsdGVyIGtsdWRnZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjk6MDAuNzI3MzAyMzQ3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NjEzODY3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBBVE0gQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgQVRNIHdpdGhpbiB0aGlzIGtlcm5lbCBidWlsZC4gXCJuZXQvYXRtL0tjb25maWdcIiBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBhbHJlYWR5IGtub3cgdGhpcyBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBjb2Rpbmcgc3R5bGUsIHNvIEkgY2FuIGltbWVkaWF0ZWx5IGFzc3VtZSB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIEFUTSBzdXBwb3J0IGFyZSBtYW5hZ2VkLiBObyBuZWVkIGZvciBhbnkgaGFuZGhvbGRpbmcgaGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgZmlsZSwgbG9va2luZyBmb3IgdGhlIGtleSB2YXJpYWJsZXMsIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGdvdmVybmluZyB0aGVpciBpbmNsdXNpb24uIEkgbmVlZCB0byBhc2NlcnRhaW4gd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgZm9yIGN1c3RvbWl6YXRpb24gYXQgY29tcGlsZSB0aW1lLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSwgcmVhbGx5LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGZhbWlsaWFyIGBjb25maWdgIGtleXdvcmRzLCB0aGUgYGJvb2xgLCBgdHJpc3RhdGVgLCBhbmQgYHN0cmluZ2AgZGVmaW5pdGlvbnMuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzIOKAkyB0aGUgb3RoZXIgS2NvbmZpZyBzeW1ib2xzIHRoYXQgQVRNIGZ1bmN0aW9uYWxpdHkgcmVsaWVzIHVwb24sIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBvcHRpb25zLCBhbmQgb2YgY291cnNlIGFueSBtb2R1bGUgc3VwcG9ydCBjb25zaWRlcmF0aW9ucy4gVGhpcyBpcyBqdXN0IHRoZSBpbml0aWFsIHJlY29ubmFpc3NhbmNlOyBJJ2xsIG1vdmUgb24gdG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBjb2RlIG9uY2UgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDE0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjk6MDYuNjg4NjkyMjQ2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEFUTVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBBVE0gaXMgYSBoaWdoLXNwZWVkIG5ldHdvcmtpbmcgdGVjaG5vbG9neSBmb3IgTG9jYWwgQXJlYSBOZXR3b3Jrc1xcbiAgMTA6XFx0XFx0ICBhbmQgV2lkZSBBcmVhIE5ldHdvcmtzLiAgSXQgdXNlcyBhIGZpeGVkIHBhY2tldCBzaXplIGFuZCBpc1xcbiAgMTE6XFx0XFx0ICBjb25uZWN0aW9uIG9yaWVudGVkLCBhbGxvd2luZyBmb3IgdGhlIG5lZ290aWF0aW9uIG9mIG1pbmltdW1cXG4gIDEyOlxcdFxcdCAgYmFuZHdpZHRoIHJlcXVpcmVtZW50cy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBJbiBvcmRlciB0byBwYXJ0aWNpcGF0ZSBpbiBhbiBBVE0gbmV0d29yaywgeW91ciBMaW51eCBib3ggbmVlZHMgYW5cXG4gIDE1OlxcdFxcdCAgQVRNIG5ldHdvcmtpbmcgY2FyZC4gSWYgeW91IGhhdmUgdGhhdCwgc2F5IFkgaGVyZSBhbmQgdG8gdGhlIGRyaXZlclxcbiAgMTY6XFx0XFx0ICBvZiB5b3VyIEFUTSBjYXJkIGJlbG93LlxcbiAgMTc6XFx0XFxuICAxODpcXHRcXHQgIE5vdGUgdGhhdCB5b3UgbmVlZCBhIHNldCBvZiB1c2VyLXNwYWNlIHByb2dyYW1zIHRvIGFjdHVhbGx5IG1ha2UgdXNlXFxuICAxOTpcXHRcXHQgIG9mIEFUTS4gIFNlZSB0aGUgZmlsZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnJzdFxcdTAwM2UgZm9yXFxuICAyMDpcXHRcXHQgIGZ1cnRoZXIgZGV0YWlscy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjk6MDYuNjg4ODU1OTM3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMDMwMTQ5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBBVE1gIGlzIGluZGVwZW5kZW50LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgYXJlIGBVU0JfQ1hBQ1JVYCwgYFVTQl9BVE1gLCBhbmQgYEFUTWAuIFRoZSBjcnVjaWFsIHN5bWJvbHMgaGVyZSBhcmUgYGN4YWNydV9oZWF2eV9pbml0YCwgYGN4YWNydV9hdG1fc3RhcnRgLCBgY3hhY3J1X2JpbmRgLCBhbmQgYGN4YWNydV91c2JfcHJvYmVgLiBJIG5vdGljZWQgdGhhdCBgY3hhY3J1X2NtYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgaGlnaGxpZ2h0cyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBCdXQsIHNpbmNlIHRoZSBzdGF0aWMgZnVuY3Rpb25zIG1lbnRpb25lZCBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIHRoZXkgYXJlICpub3QqIGlubGluZWQgYW5kIGRvIGhhdmUgZGlzdGluY3QgYWRkcmVzc2VzOyB0aGVyZWZvcmUsIHRoZXkgc2hvdWxkIGJlIHByZWZlcnJlZC4gR29vZC5cblxuSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoZSBkZXBlbmRlbmNpZXMuIGBGV19MT0FERVJgIGlzIHNlbGVjdGVkIHRocm91Z2ggYFVTQl9DWEFDUlVgLCBhbmQgYENSQzMyYCBjb21lcyBmcm9tIGBVU0JfQVRNYC4gU28sIEkgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IGRlZmluZSB0aG9zZS5cblxuTm93LCByZXZpZXdpbmcgdGhlIHBhdGNoIGl0c2VsZi4gQWgsIHRoaXMgaXMgYSBjbGVhciBidWcgZml4LiBJdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgYHJjdl91cmJgIGlzIGxlZnQgYWN0aXZlIGlmIGBjeGFjcnVfY21gIGZhaWxzLiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgcGF0Y2gsIHdoaWNoIG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFNlZW1zIGxpa2UgYSBsZWdpdGltYXRlIGZpeCwgYW5kIHdvcnRoIHRoZSB0aW1lLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MDQsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTI6Mjk6MTQuODkxODc0MjY4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MzI4MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfQ1hBQ1JVXCIsXG4gICAgXCJVU0JfQVRNXCIsXG4gICAgXCJBVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjeGFjcnVfaGVhdnlfaW5pdFwiLFxuICAgIFwiY3hhY3J1X2F0bV9zdGFydFwiLFxuICAgIFwiY3hhY3J1X2JpbmRcIixcbiAgICBcImN4YWNydV91c2JfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY3hhY3J1IFVTQiBBVE0gZHJpdmVyIHRvIGtpbGwgdGhlIHJlY2VpdmUgVVJCIGlmIHRoZSBjb21tYW5kIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFVTQiBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9DWEFDUlVcIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIkFUTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN4YWNydV9oZWF2eV9pbml0XCIsXG4gICAgXCJjeGFjcnVfYXRtX3N0YXJ0XCIsXG4gICAgXCJjeGFjcnVfYmluZFwiLFxuICAgIFwiY3hhY3J1X3VzYl9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjeGFjcnUgVVNCIEFUTSBkcml2ZXIgdG8ga2lsbCB0aGUgcmVjZWl2ZSBVUkIgaWYgdGhlIGNvbW1hbmQgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIFVTQiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgVVNCIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowr76bt[1] Phase: Succeeded StartedAt: 2026-07-31 12:29:22 +0000 UTC FinishedAt: 2026-07-31 12:29:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 12:29:22 +0000 UTC FinishedAt: 2026-07-31 12:29:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2] Phase: Succeeded StartedAt: 2026-07-31 12:29:22 +0000 UTC FinishedAt: 2026-07-31 14:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 12:29:22 +0000 UTC FinishedAt: 2026-07-31 14:05:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 12:29:22 +0000 UTC FinishedAt: 2026-07-31 12:29:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 12:29:22 +0000 UTC FinishedAt: 2026-07-31 12:29:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowr76bt/series-workflowr76bt-convert-artifact-2617081548/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 12:29:32 +0000 UTC FinishedAt: 2026-07-31 12:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 12:29:32 +0000 UTC FinishedAt: 2026-07-31 12:50:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6bce250f-cb22-432e-bb1f-0b73a4309174,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-workflowr76bt/series-workflowr76bt-convert-artifact-2617081548/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": "2b3a2248-6608-43e9-a7e6-8aefd2b13bf6", "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-workflowr76bt/series-workflowr76bt-build-action-2446032122/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 12:29:32 +0000 UTC FinishedAt: 2026-07-31 12:50:08 +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:*6bce250f-cb22-432e-bb1f-0b73a4309174,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-workflowr76bt/series-workflowr76bt-convert-artifact-2617081548/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": "2b3a2248-6608-43e9-a7e6-8aefd2b13bf6", "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-workflowr76bt/series-workflowr76bt-build-action-2446032122/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 12:50:18 +0000 UTC FinishedAt: 2026-07-31 12:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 12:50:18 +0000 UTC FinishedAt: 2026-07-31 12:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 12:50:18 +0000 UTC FinishedAt: 2026-07-31 12:50:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 12:50:18 +0000 UTC FinishedAt: 2026-07-31 12:50:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowr76bt/series-workflowr76bt-convert-artifact-3873502987/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 12:50:29 +0000 UTC FinishedAt: 2026-07-31 12:52:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 12:50:29 +0000 UTC FinishedAt: 2026-07-31 12:52:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2b3a2248-6608-43e9-a7e6-8aefd2b13bf6,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-workflowr76bt/series-workflowr76bt-build-action-2446032122/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-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 12:52:21 +0000 UTC FinishedAt: 2026-07-31 12:52:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 12:52:21 +0000 UTC FinishedAt: 2026-07-31 12:52:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 12:52:21 +0000 UTC FinishedAt: 2026-07-31 13:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 12:52:21 +0000 UTC FinishedAt: 2026-07-31 13:15:27 +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:*6bce250f-cb22-432e-bb1f-0b73a4309174,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-workflowr76bt/series-workflowr76bt-convert-artifact-3873502987/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": "99968f7b-c83f-4c62-97e2-5b5bafc9d3f2", "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-workflowr76bt/series-workflowr76bt-build-action-2247857583/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 12:52:21 +0000 UTC FinishedAt: 2026-07-31 13:15:17 +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:*6bce250f-cb22-432e-bb1f-0b73a4309174,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-workflowr76bt/series-workflowr76bt-convert-artifact-3873502987/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": "99968f7b-c83f-4c62-97e2-5b5bafc9d3f2", "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-workflowr76bt/series-workflowr76bt-build-action-2247857583/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 13:15:27 +0000 UTC FinishedAt: 2026-07-31 13:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 13:15:27 +0000 UTC FinishedAt: 2026-07-31 13:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 13:15:27 +0000 UTC FinishedAt: 2026-07-31 13:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 13:15:27 +0000 UTC FinishedAt: 2026-07-31 13:17:06 +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:*99968f7b-c83f-4c62-97e2-5b5bafc9d3f2,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-workflowr76bt/series-workflowr76bt-build-action-2247857583/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-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 13:17:17 +0000 UTC FinishedAt: 2026-07-31 14:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 13:17:17 +0000 UTC FinishedAt: 2026-07-31 14:05:00 +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":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*2b3a2248-6608-43e9-a7e6-8aefd2b13bf6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*99968f7b-c83f-4c62-97e2-5b5bafc9d3f2,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-workflowr76bt/series-workflowr76bt-build-action-2446032122/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-workflowr76bt/series-workflowr76bt-build-action-2247857583/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 13:17:17 +0000 UTC FinishedAt: 2026-07-31 13:17:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 13:17:17 +0000 UTC FinishedAt: 2026-07-31 13:17:23 +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":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr76bt/series-workflowr76bt-convert-artifact-1124431268/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 13:17:17 +0000 UTC FinishedAt: 2026-07-31 13:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 13:17:17 +0000 UTC FinishedAt: 2026-07-31 13:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 13:17:17 +0000 UTC FinishedAt: 2026-07-31 13:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 13:17:27 +0000 UTC FinishedAt: 2026-07-31 14:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr76bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["cxacru_heavy_init","cxacru_atm_start","cxacru_bind","cxacru_usb_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CXACRU","USB_ATM","ATM"],"series_id":"9978f3e2-e7f4-42a1-92f8-b5c6a7148af7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 13:17:27 +0000 UTC FinishedAt: 2026-07-31 14:04:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2b3a2248-6608-43e9-a7e6-8aefd2b13bf6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*99968f7b-c83f-4c62-97e2-5b5bafc9d3f2,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-workflowr76bt/series-workflowr76bt-build-action-2446032122/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-workflowr76bt/series-workflowr76bt-build-action-2247857583/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-workflowr76bt/series-workflowr76bt-convert-artifact-1124431268/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,}