Name: series-workflowd96p9 Phase: Succeeded StartedAt: 2026-08-19 19:33:29 +0000 UTC FinishedAt: 2026-08-19 21:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[0] Phase: Succeeded StartedAt: 2026-08-19 19:33:29 +0000 UTC FinishedAt: 2026-08-19 20:29:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 19:33:29 +0000 UTC FinishedAt: 2026-08-19 20:29:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MT7663U", "MAC80211", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MT7663U", "MAC80211", "USB" ], "series_id": "4331cc6e-07d5-4651-bd71-833ec517fd8e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mt7615_mcu_parse_response", "mt7615_mcu_get_temperature" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01UNzY2M1UmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSYjMzQ7LAogICAgJiMzNDttdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYXJzaW5nIG9mIGFuIE1DVSByZXNwb25zZSBpbiB0aGUgbXQ3NjE1IHdpcmVsZXNzIGRyaXZlciBieSBwdWxsaW5nIGFuIGFkZGl0aW9uYWwgNCBieXRlcyBmcm9tIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgZm9yIE1UNzY2MyBkZXZpY2VzIGJlZm9yZSByZWFkaW5nIGEgMzItYml0IGludGVnZXIuIFRoaXMgY2hhbmdlIGRlYWxzIHdpdGggc2tpcHBpbmcgcGFkZGluZyBvciBhbiBleHRyYSBoZWFkZXIgaW4gdGhlIGZpcm13YXJlIHJlc3BvbnNlLiBJZiB0aGUgYHNrYmAgaXMgdG9vIHNtYWxsLCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gZGVyZWZlcmVuY2luZyBgc2tiLVx1MDAzZWRhdGFgLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb3B5aW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZSBkYXRhIGJlaW5nIHJlYWQgaXMgcHJvdmlkZWQgYnkgdGhlIGhhcmR3YXJlL2Zpcm13YXJlLCBhbmQgS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IGFueSBidWZmZXIgb3Zlci1yZWFkcyBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUNVIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgZm9yIHRoZSBUSEVSTUFMX0NUUkwgY29tbWFuZCBpbiB0aGUgTWVkaWFUZWsgTVQ3NjE1L01UNzY2MyB3aXJlbGVzcyBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4gZHVtbXlfaGNkKSB3aGVuIHJlYWRpbmcgdGhlIHRlbXBlcmF0dXJlIHN5c2ZzIGF0dHJpYnV0ZSwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDIxZDI0OGYyYzI2YjEzN2NlZDM5YTc3NTY2ZDIyMmY5NTAwYWVhNzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAyMDoyNzoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jXG5pbmRleCBmZjU3ZWRlODdmNzE3Li4xY2UwMTkyYzJjOTFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jXG5AQCAtMTUzLDYgJiM0MzsxNTMsOCBAQCBpbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsXG4gXHRcdHJldCA9ICpza2ItXHUwMDNlZGF0YTtcbiBcdH0gZWxzZSBpZiAoY21kID09IE1DVV9FWFRfQ01EKFRIRVJNQUxfQ1RSTCkpIHtcbiBcdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKnJ4ZCkpO1xuJiM0MztcdFx0aWYgKGlzX210NzY2MyhtZGV2KSlcbiYjNDM7XHRcdFx0c2tiX3B1bGwoc2tiLCA0KTtcbiBcdFx0cmV0ID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilza2ItXHUwMDNlZGF0YSk7XG4gXHR9IGVsc2UgaWYgKGNtZCA9PSBNQ1VfRVhUX1FVRVJZKFJGX1JFR19BQ0NFU1MpKSB7XG4gXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVQ3NjYzVSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlJiMzNDssCiAgICAmIzM0O210NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQ1UgcmVzcG9uc2UgcGFyc2luZyBsb2dpYyBmb3IgdGhlIFRIRVJNQUxfQ1RSTCBjb21tYW5kIGluIHRoZSBNZWRpYVRlayBNVDc2MTUvTVQ3NjYzIHdpcmVsZXNzIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiBkdW1teV9oY2QpIHdoZW4gcmVhZGluZyB0aGUgdGVtcGVyYXR1cmUgc3lzZnMgYXR0cmlidXRlLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjFkMjQ4ZjJjMjZiMTM3Y2VkMzlhNzc1NjZkMjIyZjk1MDBhZWE3NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDE5IDIwOjI3OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYwppbmRleCBmZjU3ZWRlODdmNzE3Li4xY2UwMTkyYzJjOTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYwpAQCAtMTUzLDYgJiM0MzsxNTMsOCBAQCBpbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsCiAJCXJldCA9ICpza2ItJmd0O2RhdGE7CiAJfSBlbHNlIGlmIChjbWQgPT0gTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKSkgewogCQlza2JfcHVsbChza2IsIHNpemVvZigqcnhkKSk7CiYjNDM7CQlpZiAoaXNfbXQ3NjYzKG1kZXYpKQomIzQzOwkJCXNrYl9wdWxsKHNrYiwgNCk7CiAJCXJldCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopc2tiLSZndDtkYXRhKTsKIAl9IGVsc2UgaWYgKGNtZCA9PSBNQ1VfRVhUX1FVRVJZKFJGX1JFR19BQ0NFU1MpKSB7CiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBtb2RpZmllcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNgLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBjaGVjayB1c2luZyBgaXNfbXQ3NjYzKG1kZXYpYCBhbmQgdGhlbiByZWFkcyA0IGJ5dGVzIGZyb20gdGhlIGBza2JgIHdpdGhpbiBgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZWAgZm9yIGBNQ1VfRVhUX0NNRChUSEVSTUFMX0NUUkwpYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgZGVhbGluZyB3aXRoIHRoZXJtYWwgY29udHJvbCBhbHdheXMgZ2V0cyBteSBhdHRlbnRpb24sIHBhcnRpY3VsYXJseSBpbiBhIHdpcmVsZXNzIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGRyaXZlciBpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyBsaWtlbHkgdG8gc2hvdyB1cCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgYG10NzZgIHBhcnQgdGVsbHMgbWUgaXQmIzM5O3MgYSBNZWRpYVRlayB3aXJlbGVzcyBkcml2ZXIuIEkgbmVlZCB0byBxdWlja2x5IGZpZ3VyZSBvdXQgd2hldGhlciB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIFVTQi1iYXNlZCBvciBQQ0ktYmFzZWQgZHJpdmVyIGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvYCBkaXJlY3RvcnksIHNvIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhpbnQgdG8gYW5zd2VyIHRoYXQgcXVlc3Rpb24uIExldCBtZSB0YWtlIGEgbG9vay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2RlYnVnZnMuYyYjMzQ7LAogICAgJiMzNDtkbWEuYyYjMzQ7LAogICAgJiMzNDtlZXByb20uYyYjMzQ7LAogICAgJiMzNDtlZXByb20uaCYjMzQ7LAogICAgJiMzNDtpbml0LmMmIzM0OywKICAgICYjMzQ7bWFjLmMmIzM0OywKICAgICYjMzQ7bWFjLmgmIzM0OywKICAgICYjMzQ7bWFpbi5jJiMzNDssCiAgICAmIzM0O21jdS5jJiMzNDssCiAgICAmIzM0O21jdS5oJiMzNDssCiAgICAmIzM0O21taW8uYyYjMzQ7LAogICAgJiMzNDttdDc2MTUuaCYjMzQ7LAogICAgJiMzNDttdDc2MTVfdHJhY2UuaCYjMzQ7LAogICAgJiMzNDtwY2kuYyYjMzQ7LAogICAgJiMzNDtwY2lfaW5pdC5jJiMzNDssCiAgICAmIzM0O3BjaV9tYWMuYyYjMzQ7LAogICAgJiMzNDtyZWdzLmgmIzM0OywKICAgICYjMzQ7c2Rpby5jJiMzNDssCiAgICAmIzM0O3NkaW9fbWN1LmMmIzM0OywKICAgICYjMzQ7c29jLmMmIzM0OywKICAgICYjMzQ7dGVzdG1vZGUuYyYjMzQ7LAogICAgJiMzNDt0cmFjZS5jJiMzNDssCiAgICAmIzM0O3VzYi5jJiMzNDssCiAgICAmIzM0O3VzYl9tY3UuYyYjMzQ7LAogICAgJiMzNDt1c2Jfc2Rpby5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM1CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgQ2FwYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWVpbmcgYHVzYi5jYCwgYHBjaS5jYCwgYHNkaW8uY2AsIGFuZCBgc29jLmNgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGNsZWFyIHNpZ25hbCDigJMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGRyaXZlciB0aGF0IGhhbmRsZXMgVVNCLCBQQ0ksIGFuZCBTRElPIGludGVyZmFjZXMuIEdpdmVuIHRoYXQgVVNCIGlzIHByZXNlbnQsIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZnV6emluZyB2ZWN0b3JzLiBVU0IgZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgc29tZXRoaW5nIGxpa2UgYSBgZHVtbXlfaGNkYCwgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdlbmVyYXRlIHNvbWUgaW50ZXJlc3RpbmcgaW5wdXQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjaGVja2luZyBmb3IgYSBmdW5jdGlvbiBvciBtYWNybyBjYWxsZWQgYGlzX210NzY2MyhtZGV2KWAuIFVuZGVyc3RhbmRpbmcgdGhlIHRhcmdldCBkZXZpY2UmIzM5O3Mgc3BlY2lmaWMgbW9kZWwgaXMgY3J1Y2lhbCBmb3IgdGFpbG9yZWQgZnV6emluZy4gVGhlbiBJIHNob3VsZCBmb2xsb3cgdGhpcyB1cCBieSBjaGVja2luZyBgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZWAgLSBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgcmVzcG9uc2VzIGZyb20gdGhlIG1pY3JvY29udHJvbGxlci4gVGhpcyByZXNwb25zZSBwYXJzaW5nIGlzIG9mdGVuIGEgY3JpdGljYWwgYXJlYSBmb3IgYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTEzMz1FWFBPUlRfU1lNQk9MX0dQTChtdDc2MTVfbWN1X2ZpbGxfbXNnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEzNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jOjEzNTppbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xMzYtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlcSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xODItfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTgzOkVYUE9SVF9TWU1CT0xfR1BMKG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTg0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTE2OTg9aW50IG10NzYxNV9tY3VfaW5pdChzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTE3MDItXHRcdC5tY3Vfc2tiX3NlbmRfbXNnID0gbXQ3NjE1X21jdV9zZW5kX21lc3NhZ2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoxNzAzOlx0XHQubWN1X3BhcnNlX3Jlc3BvbnNlID0gbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTE3MDQtXHR9O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oPTQ4Mz11MzIgbXQ3NjE1X21hY19nZXRfc3RhX3RpZF9zbihzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2LCBpbnQgd2NpZCwgdTggdGlkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oLTQ4NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oOjQ4NTppbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tdDc2MTUuaC00ODYtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlcSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvc2Rpb19tY3UuYz0xMzM9aW50IG10NzY2M3NfbWN1X2luaXQoc3RydWN0IG10NzYxNV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9zZGlvX21jdS5jLTEzOC1cdFx0Lm1jdV9za2Jfc2VuZF9tc2cgPSBtdDc2NjNzX21jdV9zZW5kX21lc3NhZ2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9zZGlvX21jdS5jOjEzOTpcdFx0Lm1jdV9wYXJzZV9yZXNwb25zZSA9IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9zZGlvX21jdS5jLTE0MC1cdFx0Lm1jdV9yciA9IG10NzZfY29ubmFjX21jdV9yZWdfcnIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvdXNiX21jdS5jPTY1PWludCBtdDc2NjN1X21jdV9pbml0KHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvdXNiX21jdS5jLTcwLVx0XHQubWN1X3NrYl9zZW5kX21zZyA9IG10NzY2M3VfbWN1X3NlbmRfbWVzc2FnZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L3VzYl9tY3UuYzo3MTpcdFx0Lm1jdV9wYXJzZV9yZXNwb25zZSA9IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS91c2JfbWN1LmMtNzItXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRoZXJtYWwgQ29udHJvbCBQYXRoIGluIG10NzY2M3UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyB0aGVybWFsIGNvbnRyb2wgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIHRoaXMgYFRIRVJNQUxfQ1RSTGAgY29tbWFuZCBpcyBiZWluZyBraWNrZWQgb2ZmIGR1cmluZyB0aGUgVVNCIE1DVSBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbXQ3NjYzdV9tY3VfaW5pdGAuIFRoYXQgdGVsbHMgbWUgdGhlIGNvbW1hbmQgaXMgcG90ZW50aWFsbHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFVTQiBpbnRlcmZhY2UsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlYCBmdW5jdGlvbjsgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgc3lzdGVtIGludGVycHJldHMgdGhlIHJlc3BvbnNlIHRvIHRoZSBgVEhFUk1BTF9DVFJMYCBjb21tYW5kIHdoZW4gaXQmIzM5O3MgaXNzdWVkLiBJIGFsc28gd2FudCB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIHdoYXQgZXhhY3RseSB0cmlnZ2VycyB0aGUgZXhlY3V0aW9uIG9mIGBNQ1VfRVhUX0NNRChUSEVSTUFMX0NUUkwpYC4gS25vd2luZyB0aGUgdHJpZ2dlciBpcyBjcml0aWNhbCwgdW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gaXRzIGludm9jYXRpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGNoYWluIGFuZCBwaW5wb2ludGluZyBhbnkgcG90ZW50aWFsIHRoZXJtYWwgbWFuYWdlbWVudCBpc3N1ZXMgb3IgYXZlbnVlcyBmb3Igb3B0aW1pemF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiB0byBzZWUgd2hhdCB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbnMgZGV0ZXJtaW5lIHdoZW4gdGhpcyBjb250cm9sIGlzIGludm9rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEhFUk1BTF9DVFJMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTEzNT1pbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTUzLVx0XHRyZXQgPSAqc2tiLVx1MDAzZWRhdGE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoxNTQ6XHR9IGVsc2UgaWYgKGNtZCA9PSBNQ1VfRVhUX0NNRChUSEVSTUFMX0NUUkwpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xNTUtXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYz0yMTY5PWludCBtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTIxNzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoyMTc2Olx0cmV0dXJuIG10NzZfbWN1X3NlbmRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfRVhUX0NNRChUSEVSTUFMX0NUUkwpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMjE3Ny1cdFx0XHRcdCBcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQ2CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUgRnVuY3Rpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IGBtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZWAuIFRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGF0IHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqIC0gYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2VuZGluZyBhIHNwZWNpZmljIGNvbW1hbmQgdG8gdGhlIE1DVSwgcHJvYmFibHkgdG8gcmVxdWVzdCB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSByZWFkaW5nLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdC4gQnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuCgpOb3csIG15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoaXMgYG10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlYCBmdW5jdGlvbiBpcyBhY3R1YWxseSAqY2FsbGVkKiB3aXRoaW4gdGhlIGRyaXZlci4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBhbmFseXNpcyBiZWdpbnMuIEZpbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgY29udGV4dC4gSSBjYW4gc2VlIGhvdywgYW5kIHdoZW4sIHRoZSB0ZW1wZXJhdHVyZSBpcyBiZWluZyBmZXRjaGVkLiBUaGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgaW50ZXJlc3Rpbmcgc3BvdHMgd2hlcmUgdGhlIHJlYWRpbmcgaXMgdXNlZC4gSXMgaXQgYSBwZXJpb2RpYyBjaGVjaz8gVHJpZ2dlcmVkIGJ5IHNvbWUgZXh0ZXJuYWwgZXZlbnQ/IElzIGl0IHBhcnQgb2YgYSB0aGVybWFsIG1hbmFnZW1lbnQgc2NoZW1lLCBwZXJoYXBzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmM9MTg9c3RhdGljIHNzaXplX3QgbXQ3NjE1X3RoZXJtYWxfc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmMtMjgtXHRtdDc2MTVfbXV0ZXhfYWNxdWlyZShtZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYzoyOTpcdHRlbXBlcmF0dXJlID0gbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUobWRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmMtMzAtXHRtdDc2MTVfbXV0ZXhfcmVsZWFzZShtZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYz0yMTE2PWludCBtdDc2MTVfbWN1X3NldF9jaGFuX2luZm8oc3RydWN0IG10NzYxNV9waHkgKnBoeSwgaW50IGNtZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0yMTY4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MjE2OTppbnQgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IG10NzYxNV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTIxNzAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oPTQ5MD1pbnQgbXQ3NjE1X21jdV9zZXRfZWVwcm9tKHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbXQ3NjE1Lmg6NDkxOmludCBtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oLTQ5Mi1pbnQgbXQ3NjE1X21jdV9zZXRfdHhfcG93ZXIoc3RydWN0IG10NzYxNV9waHkgKnBoeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTAKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBUaGVybWFsIERhdGEgU291cmNlKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0ZW1wZXJhdHVyZSBkYXRhLCBhbmQgdGhlIHN0YXJ0aW5nIHBvaW50IGFwcGVhcnMgdG8gYmUgdGhlIGBtdDc2MTVfdGhlcm1hbF9zaG93X3RlbXBgIGZ1bmN0aW9uLiBUaGF0IG5hbWUgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IHRpZWQgdG8gaG93IHRoZSB0aGVybWFsIGluZm9ybWF0aW9uIGlzIGV4cG9zZWQsIGVpdGhlciBhcyBhIHN5c3RlbSBmaWxlIGF0dHJpYnV0ZSAoYSBzeXNmcyBlbnRyeSkgb3IgcGVyaGFwcyBhcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGhpbiB0aGUgdGhlcm1hbCB6b25lIGZyYW1ld29yay4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGVybWFsIG1hbmFnZW1lbnQgb24gdGhpcyBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGluIGFuZCBhbmFseXplIGBtdDc2MTVfdGhlcm1hbF9zaG93X3RlbXBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgYmVpbmcgY2FsbGVkLCB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhlIGhhcmR3YXJlIGRhdGEsIGFuZCBob3cgaXQmIzM5O3MgZm9ybWF0dGluZyB0aGUgb3V0cHV0LiBUaGlzIGlzIHRoZSBseW5jaHBpbiwgdGhlIHBsYWNlIHdoZXJlIHRoZSByYXcgdGVtcGVyYXR1cmUgcmVhZGluZyBpcyBsaWtlbHkgYmVpbmcgdHJhbnNsYXRlZCBmb3IgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjE1X3RoZXJtYWxfc2hvd190ZW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYy0xNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYzoxODpzdGF0aWMgc3NpemVfdCBtdDc2MTVfdGhlcm1hbF9zaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvaW5pdC5jLTE5LVx0XHRcdFx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmMtMzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmM6Mzk6c3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgMDQ0NCwgbXQ3NjE1X3RoZXJtYWxfc2hvd190ZW1wLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvaW5pdC5jLTQwLVx0XHRcdCAgTlVMTCwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNDcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRHJpdmVyIENoYW5nZSBmb3IgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBjaGFuZ2UgcmVsYXRlZCB0byBhIGBzeXNmc2AgYXR0cmlidXRlLCBzcGVjaWZpY2FsbHkgYHRlbXAxX2lucHV0YC4gIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGFjY2Vzc2VkIGJ5IHJlYWRpbmcgYC9zeXMvY2xhc3MvaHdtb24vaHdtb25YL3RlbXAxX2lucHV0YC4gIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGluY2x1ZGVzIGEgYHNrYl9wdWxsKHNrYiwgNClgIGNhbGwsIGFuZCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgY29uZGl0aW9uYWwgb24gYGlzX210NzY2MyhtZGV2KWAuICBIbW0sIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpdCBhbHRlcnMgdGhlIHdheSB0aGUgZHJpdmVyIGlzIHBhcnNpbmcgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSByZWQgZmxhZyBpbiBteSBib29rLiAgQW55IHRpbWUgeW91JiMzOTtyZSBtb2RpZnlpbmcgcGFyc2luZyBsb2dpYywgZXNwZWNpYWxseSB3aGVuIGludGVyYWN0aW5nIHdpdGggZXh0ZXJuYWwgaGFyZHdhcmUsIHRoZXJlJiMzOTtzIGEgY2hhbmNlIGZvciBvZmYtYnktb25lIGVycm9ycyBvciB1bmV4cGVjdGVkIGlucHV0IGhhbmRsaW5nIHRoYXQgY291bGQgbGVhZCB0byBzZWN1cml0eSBpc3N1ZXMuCgpHaXZlbiB0aGF0IGl0JiMzOTtzIHBhcnNpbmcgTUNVIHJlc3BvbnNlcywgdGhpcyBzY3JlYW1zIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIHRocm93IGEgYnVuY2ggb2YgbWFsZm9ybWVkIGFuZCB1bmV4cGVjdGVkIGRhdGEgYXQgdGhpcyB0aGluZyBhbmQgc2VlIHdoYXQgaGFwcGVucy4gIAoKQmVmb3JlIEkgY2FuIGV2ZW4gZ2V0IHRvIGZ1enppbmcsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBidWlsZCB0aGUgY29kZS4gIExldCYjMzk7cyBzZWUuLi4gdGhlIGRyaXZlciBpcyBgbXQ3NjE1YC4gIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgYnVpbGQgc3lzdGVtIGFuZCBjb25maWd1cmF0aW9uIHRvIGZpbmQgdGhlIG5lY2Vzc2FyeSBmbGFncyBhbmQgZGVwZW5kZW5jaWVzIHRvIGVuYWJsZSB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aCBzbyBJIGNhbiBhY3R1YWxseSBydW4gaXQgYW5kIHRoZW4gaG9vayBpdCB1cCB0byBteSBmdXp6aW5nIGhhcm5lc3MuIFRoaXMgY2hhbmdlIGlzIGludGVyZXN0aW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZSBzbyBpdCYjMzk7cyB3b3J0aCB0aGUgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdDc2MTUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnPTQ2PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYwMy9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc6NDc6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy00OC1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTcyCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIE1UNzYxNSBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIE1UNzYxNSB3aXJlbGVzcyBkcml2ZXIgY29uZmlndXJhdGlvbiwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHRoZSBiZWRyb2NrLCB0aGUgY29udHJvbCBjZW50ZXIgZm9yIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEtub3dpbmcgd2hhdCYjMzk7cyBjb25maWd1cmVkIGhlcmUgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMsIGJ1aWxkIG9wdGlvbnMsIGFuZCB1bHRpbWF0ZWx5LCBob3cgdGhpcyBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4gVGhpcyBgS2NvbmZpZ2Agd2lsbCB0ZWxsIG1lIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIHRvIHRoZSB1c2VyIChpZiBhdCBhbGwpLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIE1UNzYxNV9DT01NT05cbiAgIDQ6XHRcdHRyaXN0YXRlXG4gICA1Olx0XHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcbiAgIDY6XHRcdHNlbGVjdCBNVDc2X0NPTk5BQ19MSUJcbiAgIDc6XHRcbiAgIDg6XHRjb25maWcgTVQ3NjE1RVxuICAgOTpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3NjE1RSBhbmQgTVQ3NjYzRSAoUENJZSkgc3VwcG9ydFwmIzM0O1xuICAxMDpcdFx0c2VsZWN0IE1UNzYxNV9DT01NT05cbiAgMTE6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgMTI6XHRcdGRlcGVuZHMgb24gUENJXG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc2MTUtYmFzZWQgUENJZSB3aXJlbGVzcyBkZXZpY2VzLFxuICAxNTpcdFx0ICB3aGljaCBzdXBwb3J0IGNvbmN1cnJlbnQgZHVhbC1iYW5kIG9wZXJhdGlvbiBhdCBib3RoIDVHSHpcbiAgMTY6XHRcdCAgYW5kIDIuNEdIeiwgSUVFRSA4MDIuMTFhYyA0eDQ6NFNTIDE3MzNNYnBzIFBIWSByYXRlLCB3YXZlMlxuICAxNzpcdFx0ICBNVS1NSU1PIHVwIHRvIDQgdXNlcnMvZ3JvdXAgYW5kIDE2ME1IeiBjaGFubmVscy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTVQ3NjIyX1dNQUNcbiAgMjI6XHRcdGJvb2wgXCYjMzQ7TVQ3NjIyIChTb0MpIFdNQUMgc3VwcG9ydFwmIzM0O1xuICAyMzpcdFx0ZGVwZW5kcyBvbiBNVDc2MTVFXG4gIDI0Olx0XHRkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwgQ09NUElMRV9URVNUXG4gIDI1Olx0XHRzZWxlY3QgUkVHTUFQXG4gIDI2Olx0XHRkZWZhdWx0IHlcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBidWlsdC1pbiBXTUFDIG9uIE1UNzYyMiBTb0MgZGV2aWNlc1xuICAyOTpcdFx0ICB3aGljaCBoYXMgdGhlIHNhbWUgZmVhdHVyZSBzZXQgYXMgYSBNVDc2MTUsIGJ1dCBsaW1pdGVkIHRvXG4gIDMwOlx0XHQgIDIuNCBHSHogb25seS5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgTVQ3NjYzX1VTQl9TRElPX0NPTU1PTlxuICAzMzpcdFx0dHJpc3RhdGVcbiAgMzQ6XHRcdHNlbGVjdCBNVDc2MTVfQ09NTU9OXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIE1UNzY2M1VcbiAgMzc6XHRcdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNzY2M1UgKFVTQikgc3VwcG9ydFwmIzM0O1xuICAzODpcdFx0c2VsZWN0IE1UNzZfVVNCXG4gIDM5Olx0XHRzZWxlY3QgTVQ3NjYzX1VTQl9TRElPX0NPTU1PTlxuICA0MDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICA0MTpcdFx0ZGVwZW5kcyBvbiBVU0JcbiAgNDI6XHRcdGhlbHBcbiAgNDM6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzY2M1UgODAyLjExYWMgMngyOjIgd2lyZWxlc3MgZGV2aWNlcy5cbiAgNDQ6XHRcbiAgNDU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgTVQ3NjYzU1xuICA0ODpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3NjYzUyAoU0RJTykgc3VwcG9ydFwmIzM0O1xuICA0OTpcdFx0c2VsZWN0IE1UNzZfU0RJT1xuICA1MDpcdFx0c2VsZWN0IE1UNzY2M19VU0JfU0RJT19DT01NT05cbiAgNTE6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgNTI6XHRcdGRlcGVuZHMgb24gTU1DXG4gIDUzOlx0XHRoZWxwXG4gIDU0Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc2NjNTIDgwMi4xMWFjIDJ4MjoyIHdpcmVsZXNzIGRldmljZXMuXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwODAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBNVDc2MTUgZHJpdmVyLCB0aGUgYE1UNzYxNV9DT01NT05gIG9uZSwgZ2V0cyBwdWxsZWQgaW4uIEl0JiMzOTtzIHRyaWdnZXJlZCBieSB0aGVzZSBkZXZpY2VzOiBgTVQ3NjE1RWAsIGBNVDc2NjNVYCwgYW5kIGBNVDc2NjNTYC4gU2luY2UgSSYjMzk7bSBhaW1pbmcgdG8gZnV6eiBpdCB0aHJvdWdoIFVTQiwgSSBuZWVkIHRvIGZvY3VzIG9uIGVuYWJsaW5nIGBNVDc2NjNVYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwYXRoLgoKTm93LCBgTVQ3NjYzVWAgaGFzIHNvbWUgZGVwZW5kZW5jaWVzLiBJIHNlZSBpdCByZWxpZXMgb24gYE1BQzgwMjExYCBhbmQgYFVTQmAuIEFscmlnaHQsIG1ha2VzIHNlbnNlLiBTbywgdG8gZ2V0IGBNVDc2NjNVYCB3b3JraW5nLCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBgTUFDODAyMTFgIGFuZCBgVVNCYCBhcmUgYWxzbyBlbmFibGVkLiBBbmQsIEkgc2VlIHRoYXQgYE1UNzZfVVNCYCBpcyBhbHNvIGdldHRpbmcgYXV0b21hdGljYWxseSBzZWxlY3RlZC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHJlYWxseSBzY2FuIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWdgLiBUaGVyZSBtaWdodCBiZSBvdGhlciB0aGluZ3MgbHVya2luZyBpbiB0aGVyZSB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcsIHNvbWUgaGlkZGVuIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIG9wdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgZm9yIHRoaXMgZnV6emluZyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0Y29uZmlnIE1UNzZfQ09SRVxuICAgMzpcdFx0dHJpc3RhdGVcbiAgIDQ6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgTVQ3Nl9MRURTXG4gICA3Olx0XHRib29sXG4gICA4Olx0XHRkZXBlbmRzIG9uIE1UNzZfQ09SRVxuICAgOTpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTVQ3Nl9DT1JFPUxFRFNfQ0xBU1NcbiAgMTA6XHRcdGRlZmF1bHQgeVxuICAxMTpcdFxuICAxMjpcdGNvbmZpZyBNVDc2X1VTQlxuICAxMzpcdFx0dHJpc3RhdGVcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTVQ3Nl9DT1JFXG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIE1UNzZfU0RJT1xuICAxNzpcdFx0dHJpc3RhdGVcbiAgMTg6XHRcdGRlcGVuZHMgb24gTVQ3Nl9DT1JFXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1UNzZ4MDJfTElCXG4gIDIxOlx0XHR0cmlzdGF0ZVxuICAyMjpcdFx0c2VsZWN0IE1UNzZfQ09SRVxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBNVDc2eDAyX1VTQlxuICAyNTpcdFx0dHJpc3RhdGVcbiAgMjY6XHRcdHNlbGVjdCBNVDc2X1VTQlxuICAyNzpcdFxuICAyODpcdGNvbmZpZyBNVDc2X0NPTk5BQ19MSUJcbiAgMjk6XHRcdHRyaXN0YXRlXG4gIDMwOlx0XHRzZWxlY3QgTVQ3Nl9DT1JFXG4gIDMxOlx0XG4gIDMyOlx0Y29uZmlnIE1UNzkyeF9MSUJcbiAgMzM6XHRcdHRyaXN0YXRlXG4gIDM0Olx0XHRzZWxlY3QgTVQ3Nl9DT05OQUNfTElCXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIE1UNzkyeF9VU0JcbiAgMzc6XHRcdHRyaXN0YXRlXG4gIDM4Olx0XHRzZWxlY3QgTVQ3Nl9VU0JcbiAgMzk6XHRcbiAgNDA6XHRjb25maWcgTVQ3Nl9OUFVcbiAgNDE6XHRcdHRyaXN0YXRlXG4gIDQyOlx0XHRkZXBlbmRzIG9uIE5FVF9BSVJPSEFfTlBVPXkgfHwgTVQ3Nl9DT1JFPU5FVF9BSVJPSEFfTlBVXG4gIDQzOlx0XG4gIDQ0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwL0tjb25maWdcJiMzNDtcbiAgNDU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2eDIvS2NvbmZpZ1wmIzM0O1xuICA0NjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYwMy9LY29uZmlnXCYjMzQ7XG4gIDQ3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L0tjb25maWdcJiMzNDtcbiAgNDg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvS2NvbmZpZ1wmIzM0O1xuICA0OTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9LY29uZmlnXCYjMzQ7XG4gIDUwOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L0tjb25maWdcJiMzNDtcbiAgNTE6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjU2CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBNVDc2NjNVIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoaXMgYE1UNzY2M1VgIGNvbmZpZ3VyYXRpb24g4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZWAgZnVuY3Rpb247IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuIE5vdywgYSBxdWljayBjaGVjay4uLiBpcyBgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZWAgYSBzdGF0aWMgZnVuY3Rpb24/IE5vcGUsIGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkLiBFeGNlbGxlbnQsIHRoYXQgZ2l2ZXMgbWUgbW9yZSBmbGV4aWJpbGl0eS4gTm93LCBsZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuY2AuIEkgbmVlZCB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZWAgZGlyZWN0bHkgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiB0aGUgcmVzcG9uc2UgcGFyc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTEzMz1FWFBPUlRfU1lNQk9MX0dQTChtdDc2MTVfbWN1X2ZpbGxfbXNnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEzNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jOjEzNTppbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xMzYtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlcSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xODItfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTgzOkVYUE9SVF9TWU1CT0xfR1BMKG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTg0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTE2OTg9aW50IG10NzYxNV9tY3VfaW5pdChzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTE3MDItXHRcdC5tY3Vfc2tiX3NlbmRfbXNnID0gbXQ3NjE1X21jdV9zZW5kX21lc3NhZ2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoxNzAzOlx0XHQubWN1X3BhcnNlX3Jlc3BvbnNlID0gbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTE3MDQtXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA5OAoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMgaW4gdGhlIE1UNzYxNSBNQ1UgRHJpdmVyKioKCk9rYXksIHNvIGBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlYCBpcyBkZWZpbml0ZWx5IG5vdCBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBOb3csIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBpcyBhbiBpc29sYXRlZCBjYXNlLCBvciBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHRoYXQgYXJlbiYjMzk7dCBzdGF0aWMuIExldCYjMzk7cyBzZWUuLi4gQWhhISBgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVgIGFsc28gbG9va3MgbGlrZSBpdCYjMzk7cyAqbm90KiBzdGF0aWMuIFJpZ2h0LCB0aGF0IGNhbGxzIGZvciBhIGRlZXBlciBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyBpbiB0aGUgY29kZS4gTGV0JiMzOTtzIGdvIGNoZWNrIHRoZSBzb3VyY2UgZmlsZSBmb3IgYG10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlYCwgaXQgc2hvdWxkIGJlIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgYW5kIHdoYXQgdGhlaXIgcG90ZW50aWFsIGV4dGVybmFsIGRlcGVuZGVuY2llcyBtaWdodCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYz0yMTE2PWludCBtdDc2MTVfbWN1X3NldF9jaGFuX2luZm8oc3RydWN0IG10NzYxNV9waHkgKnBoeSwgaW50IGNtZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0yMTY4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MjE2OTppbnQgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IG10NzYxNV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTIxNzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYzNgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZ1bG5lcmFiaWxpdHkmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBpc3N1ZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBtZWFucyB3ZSBjYW4gemVybyBpbiBvbiB0aGUgYG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VgIGFuZCBgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVgIGZ1bmN0aW9ucy4gVGhlIHRhcmdldCBjb25maWcgaXMgYE1UNzY2M1VgLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiB0aGUgTVQ3NjE1L01UNzY2MyB3aXJlbGVzcyBkcml2ZXIuIFRoZSByZWFzb25pbmcgbWFrZXMgc2Vuc2U6IHRoZSBwYXRjaCBpcyBmaWRkbGluZyB3aXRoIGhvdyB0aGUgTUNVIHJlc3BvbnNlIGlzIGhhbmRsZWQgZm9yIHRoZSBUSEVSTUFMX0NUUkwgY29tbWFuZC4gSXQmIzM5O3MgYWNjZXNzaWJsZSB0aHJvdWdoIFVTQiBlbXVsYXRpb24g4oCTIGR1bW15X2hjZCwgZ290IGl0IOKAkyB3aGVuIHNvbWVvbmUgcmVhZHMgdGhlIHRlbXBlcmF0dXJlIHN5c2ZzIGF0dHJpYnV0ZS4gVGhhdCYjMzk7cyBhIHNvbGlkIHRhcmdldCBmb3IgZnV6emluZy4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QuIExldCYjMzk7cyBzZWUuLi4gYE1UNzY2M1VgIHNob3VsZCBzZWxlY3QgYE1UNzZfVVNCYCwgYW5kIGBNVDc2NjNfVVNCX1NESU9fQ09NTU9OYCwgd2hpY2gsIGluIHR1cm4sIHNlbGVjdHMgYE1UNzYxNV9DT01NT05gLiBSaWdodCwgYW5kIGBNVDc2MTVfQ09NTU9OYCBidWlsZHMgYG1jdS5jYC4gVGhpcyBjb25maXJtcyB0aGF0IGFsbCB0aGUgcGllY2VzIGFyZSBpbiBwbGFjZSBhbmQgdGhhdCB0aGUgYnVpbGQgdGFyZ2V0cyB0aGUgY29kZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuICAgMjpcdFxuICAgMzpcdG9iai0kKENPTkZJR19NVDc2MTVfQ09NTU9OKSAmIzQzOz0gbXQ3NjE1LWNvbW1vbi5vXG4gICA0Olx0b2JqLSQoQ09ORklHX01UNzYxNUUpICYjNDM7PSBtdDc2MTVlLm9cbiAgIDU6XHRvYmotJChDT05GSUdfTVQ3NjYzX1VTQl9TRElPX0NPTU1PTikgJiM0Mzs9IG10NzY2My11c2Itc2Rpby1jb21tb24ub1xuICAgNjpcdG9iai0kKENPTkZJR19NVDc2NjNVKSAmIzQzOz0gbXQ3NjYzdS5vXG4gICA3Olx0b2JqLSQoQ09ORklHX01UNzY2M1MpICYjNDM7PSBtdDc2NjNzLm9cbiAgIDg6XHRcbiAgIDk6XHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxuICAxMDpcdFxuICAxMTpcdG10NzYxNS1jb21tb24teSA6PSBtYWluLm8gaW5pdC5vIG1jdS5vIGVlcHJvbS5vIG1hYy5vIFxcXG4gIDEyOlx0XHRcdCAgIGRlYnVnZnMubyB0cmFjZS5vXG4gIDEzOlx0bXQ3NjE1LWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSAmIzQzOz0gdGVzdG1vZGUub1xuICAxNDpcdFxuICAxNTpcdG10NzYxNWUteSA6PSBwY2kubyBwY2lfaW5pdC5vIGRtYS5vIHBjaV9tYWMubyBtbWlvLm9cbiAgMTY6XHRtdDc2MTVlLSQoQ09ORklHX01UNzYyMl9XTUFDKSAmIzQzOz0gc29jLm9cbiAgMTc6XHRcbiAgMTg6XHRtdDc2NjMtdXNiLXNkaW8tY29tbW9uLXkgOj0gdXNiX3NkaW8ub1xuICAxOTpcdG10NzY2M3UteSA6PSB1c2IubyB1c2JfbWN1Lm9cbiAgMjA6XHRtdDc2NjNzLXkgOj0gc2Rpby5vIHNkaW9fbWN1Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1OTYKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtjb25maWcgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYG1jdS5vYCAqaXMqIGJ1aWx0IHdoZW4gYENPTkZJR19NVDc2MTVfQ09NTU9OYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzZWUgdGhhdCBgQ09ORklHX01UNzY2M1VgIGFsc28gc2VsZWN0cyBgQ09ORklHX01UNzY2M19VU0JfU0RJT19DT01NT05gLCB3aGljaCBpbiB0dXJuIHNlbGVjdHMgYENPTkZJR19NVDc2MTVfQ09NTU9OYC4gU28sIGBNVDc2NjNVYCAqc2hvdWxkKiBiZSB0aGUgY29ycmVjdCBjb25maWcgdG8gdXNlLgoKSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgYWRkaW5nIGBNQUM4MDIxMWAgYW5kIGBVU0JgIGp1c3QgYXMgYSBiZWx0LWFuZC1zdXNwZW5kZXJzIGFwcHJvYWNoLCB5b3Uga25vdywgdG8gYmUgZXh0cmEgdGhvcm91Z2guIFVzdWFsbHkganVzdCBsaXN0aW5nIGBNVDc2NjNVYCBpcyBzdWZmaWNpZW50LCBidXQgSSBkbyBsaWtlIHRvIGFkZCBkZXBlbmRlbmNpZXMuIFRoZXNlICphcmUqIGZhaXJseSBzdGFuZGFyZCBkZXBlbmRlbmNpZXMsIGJ1dCBpdCYjMzk7cyBwcm9iYWJseSBiZXN0IHRvIGJlIGV4cGxpY2l0IGlmIHRoZXkgYXJlbiYjMzk7dCBzdGFuZGFyZC4KCkFoLCB3YWl0IGEgbWludXRlLi4uIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHZlcnkgc3BlY2lmaWM6ICYjMzQ7QWxzbyBjaGVjayAmIzM5O2RlcGVuZHMgb24mIzM5OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXguJiMzNDsgT2theSwgbm93IGl0JiMzOTtzIGNsZWFyLiBgTUFDODAyMTFgIGFuZCBgVVNCYCAqYXJlKiBwYXJlbnQgc3Vic3lzdGVtcywgYW5kIEkgc2hvdWxkIGluY2x1ZGUgdGhlbSB0byBiZSBzYWZlLiBJdCYjMzk7cyBiZXR0ZXIgdG8gYmUgZXhwbGljaXQgdGhhbiB0byBjYXVzZSBjb21waWxhdGlvbiBpc3N1ZXMuCgpSaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc2NjNVJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O210NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UmIzM0OywKICAgICYjMzQ7bXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1DVSByZXNwb25zZSBwYXJzaW5nIGxvZ2ljIGZvciB0aGUgVEhFUk1BTF9DVFJMIGNvbW1hbmQgaW4gdGhlIE1lZGlhVGVrIE1UNzYxNS9NVDc2NjMgd2lyZWxlc3MgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuIGR1bW15X2hjZCkgd2hlbiByZWFkaW5nIHRoZSB0ZW1wZXJhdHVyZSBzeXNmcyBhdHRyaWJ1dGUsIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01UNzY2M1UmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSYjMzQ7LAogICAgJiMzNDttdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUNVIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgZm9yIHRoZSBUSEVSTUFMX0NUUkwgY29tbWFuZCBpbiB0aGUgTWVkaWFUZWsgTVQ3NjE1L01UNzY2MyB3aXJlbGVzcyBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4gZHVtbXlfaGNkKSB3aGVuIHJlYWRpbmcgdGhlIHRlbXBlcmF0dXJlIHN5c2ZzIGF0dHJpYnV0ZSwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBvZiBhbiBNQ1UgcmVzcG9uc2UgaW4gdGhlIG10NzYxNSB3aXJlbGVzcyBkcml2ZXIgYnkgcHVsbGluZyBhbiBhZGRpdGlvbmFsIDQgYnl0ZXMgZnJvbSB0aGUgc29ja2V0IGJ1ZmZlciAoYHNrYmApIGZvciBNVDc2NjMgZGV2aWNlcyBiZWZvcmUgcmVhZGluZyBhIDMyLWJpdCBpbnRlZ2VyLiBUaGlzIGNoYW5nZSBkZWFscyB3aXRoIHNraXBwaW5nIHBhZGRpbmcgb3IgYW4gZXh0cmEgaGVhZGVyIGluIHRoZSBmaXJtd2FyZSByZXNwb25zZS4gSWYgdGhlIGBza2JgIGlzIHRvbyBzbWFsbCwgdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGRlcmVmZXJlbmNpbmcgYHNrYi1cdTAwM2VkYXRhYC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgY29weWluZyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGUgZGF0YSBiZWluZyByZWFkIGlzIHByb3ZpZGVkIGJ5IHRoZSBoYXJkd2FyZS9maXJtd2FyZSwgYW5kIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIHRvIGRldGVjdCBhbnkgYnVmZmVyIG92ZXItcmVhZHMgaGVyZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjFkMjQ4ZjJjMjZiMTM3Y2VkMzlhNzc1NjZkMjIyZjk1MDBhZWE3NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDE5IDIwOjI3OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYwppbmRleCBmZjU3ZWRlODdmNzE3Li4xY2UwMTkyYzJjOTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYwpAQCAtMTUzLDYgJiM0MzsxNTMsOCBAQCBpbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsCiAJCXJldCA9ICpza2ItJmd0O2RhdGE7CiAJfSBlbHNlIGlmIChjbWQgPT0gTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKSkgewogCQlza2JfcHVsbChza2IsIHNpemVvZigqcnhkKSk7CiYjNDM7CQlpZiAoaXNfbXQ3NjYzKG1kZXYpKQomIzQzOwkJCXNrYl9wdWxsKHNrYiwgNCk7CiAJCXJldCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopc2tiLSZndDtkYXRhKTsKIAl9IGVsc2UgaWYgKGNtZCA9PSBNQ1VfRVhUX1FVRVJZKFJGX1JFR19BQ0NFU1MpKSB7CiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTgKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogMTQ1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTVQ3NjE1IE1DVSBSZXNwb25zZSBQYXJzaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuY2AuIEl0JiMzOTtzIG1vZGlmeWluZyBob3cgd2UgcGFyc2UgYSByZXNwb25zZSBmcm9tIHRoZSBNQ1UsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBgY21kYCBpcyBgTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKWAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhbiBleHRyYSBgc2tiX3B1bGwoc2tiLCA0KWAgY2FsbCBpZiB0aGUgZGV2aWNlIGlzIGFuIE1UNzY2My4gVGhpcyBpcyBkb25lIGJlZm9yZSByZWFkaW5nIGEgMzItYml0IGludGVnZXIuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgcG90ZW50aWFsIGZvciBpc3N1ZXM/IFRoZSBtYWluIGNvbmNlcm4gaGVyZSBpcyB3aXRoIHRoZSBgc2tiX3B1bGxgIGZ1bmN0aW9uLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBhZHZhbmNlIHRoZSBgc2tiLSZndDtkYXRhYCBwb2ludGVyIGFuZCBkZWNyZWFzZSBgc2tiLSZndDtsZW5gLiBJZiBgc2tiLSZndDtsZW5gIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHB1bGwgc2l6ZSwgaXQgcmV0dXJucyBgTlVMTGAuICBJbXBvcnRhbnRseSwgdGhlIGNvZGUgKmlnbm9yZXMqIHRoZSByZXR1cm4gdmFsdWUuIExldCYjMzk7cyBzZWUuLi4gYHNrYl9wdWxsYCBqdXN0IHJldHVybnMgTlVMTCBpZiBpdCBjYW4mIzM5O3QgcHVsbDsgaXQgKmRvZXNuJiMzOTt0KiBtb2RpZnkgYHNrYi0mZ3Q7ZGF0YWAgaWYgaXQgcmV0dXJucyBOVUxMLiBUaGF0IG1lYW5zIGlmIHRoZSBTS0IgaXMgdG9vIHNob3J0LCB3ZSYjMzk7bGwgc3RpbGwgdHJ5IHRvIGRlcmVmZXJlbmNlIGBza2ItJmd0O2RhdGFgIGluIHRoZSBuZXh0IGxpbmUsIGxlYWRpbmcgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGlzIGlzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcnJlYWQgc2NlbmFyaW8uCgpOb3csIGlzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBoZXJlPyBObywgdGhlIGRhdGEgY29tZXMgZnJvbSB0aGUgTUNVLCBlc3NlbnRpYWxseSBoYXJkd2FyZS9maXJtd2FyZSB2aWEgRE1BIGludG8gdGhlIFNLQi4gV2hpbGUgdGhlcmUmIzM5O3MgYSBjaGFuY2UgdGhhdCB0aGUgaGFyZHdhcmUvZmlybXdhcmUgbWlnaHQgd3JpdGUgbGVzcyB0aGFuIGV4cGVjdGVkIChsZWF2aW5nIHNvbWUgbWVtb3J5IHVuaW5pdGlhbGl6ZWQpLCB0aGlzIGlzbiYjMzk7dCB0aGUgcHJpbWFyeSBLTVNBTiBjb25jZXJuLiBJbiBuZXR3b3JrIGRyaXZlcnMsIHRoZSBTS0JzIHNob3VsZCBiZSB1bnBvaXNvbmVkLCBpZiB0aGUgZGF0YSBpcyBub3QgZnVsbHkgcG9wdWxhdGVkIGJ5IHRoZSBoYXJkd2FyZS4gS01TQU4gd291bGRuJiMzOTt0IGJlIHRoZSBjb3JyZWN0IHRvb2wgdW5sZXNzIHRoaXMgd2FzIGEgVVNCIGRyaXZlciB3aGVyZSB1bmluaXRpYWxpemVkIFVSQiBidWZmZXJzIHdvdWxkIGJlIGV4cG9zZWQuCgpTbywgdGhlIGxpa2VseSBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaWYgdGhlIFNLQiBpcyBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQuIEtBU0FOIGlzIHRoZSBjb3JyZWN0IHRvb2wgZm9yIHRoaXMuIEl0JiMzOTtsbCBpbW1lZGlhdGVseSBmbGFnIGFueSBhdHRlbXB0IHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBJIGRvbiYjMzk7dCBzZWUgYW55IEtNU0FOLXNwZWNpZmljIGlzc3VlLiBUaGlzIHBhdGNoIGlzIGp1c3Qgc2tpcHBpbmcgNCBieXRlcyB0aGF0IGFyZSBsaWtlbHkgcGFkZGluZyBvciBhIGhlYWRlci4gIEl0JiMzOTtzIGp1c3QgYW4gYHNrYi0mZ3Q7ZGF0YWAgcG9pbnRlciBtYW5pcHVsYXRpb24uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nICpleHBvc2VkKiB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cgd2hlcmUgS01TQU4gd291bGQgYmUgcGFydGljdWxhcmx5IGVmZmVjdGl2ZS4gVGhlIGRhdGEgaXMgY29taW5nIGZyb20gdGhlIGRldmljZSwgYW5kIEtNU0FOIGRvZXMgbm90IHRyYWNrIHRoaXMga2luZCBvZiBkYXRhIHByb3Blcmx5IHVubGVzcyB0aGVyZSYjMzk7cyBhbiBleHBsaWNpdCBjYWxsIHRvIHVucG9pc29uIG9yIGlmIGl0JiMzOTtzIGEgVVNCIGRyaXZlciB3aGVyZSBLTVNBTiBtb25pdG9ycyB1bmluaXRpYWxpemVkIFVSQiBidWZmZXJzLiBCdXQgdGhpcyBpcyBtdDc2LiBObywgdGhlIERNQSBBUEkgaXMgcmVzcG9uc2libGUgZm9yIHBvaXNvbmluZy91bnBvaXNvbmluZy4KCkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgYW4gU0tCIGlzIHBhcnNlZCwgYnkgc2tpcHBpbmcgNCBieXRlcyBmb3IgTVQ3NjYzLiBUaGUgcHJpbWFyeSByaXNrIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpZiB0aGUgU0tCIGlzIHRvbyBzbWFsbC4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgaGVyZS4gS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlIHRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBhIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLCBub3IgaXMgdGhlcmUgYW55IGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY29weWluZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYXJzaW5nIG9mIGFuIE1DVSByZXNwb25zZSBpbiB0aGUgbXQ3NjE1IHdpcmVsZXNzIGRyaXZlciBieSBwdWxsaW5nIGFuIGFkZGl0aW9uYWwgNCBieXRlcyBmcm9tIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgZm9yIE1UNzY2MyBkZXZpY2VzIGJlZm9yZSByZWFkaW5nIGEgMzItYml0IGludGVnZXIuIFRoaXMgY2hhbmdlIGRlYWxzIHdpdGggc2tpcHBpbmcgcGFkZGluZyBvciBhbiBleHRyYSBoZWFkZXIgaW4gdGhlIGZpcm13YXJlIHJlc3BvbnNlLiBJZiB0aGUgYHNrYmAgaXMgdG9vIHNtYWxsLCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gZGVyZWZlcmVuY2luZyBgc2tiLVx1MDAzZWRhdGFgLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb3B5aW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZSBkYXRhIGJlaW5nIHJlYWQgaXMgcHJvdmlkZWQgYnkgdGhlIGhhcmR3YXJlL2Zpcm13YXJlLCBhbmQgS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IGFueSBidWZmZXIgb3Zlci1yZWFkcyBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgYW4gTUNVIHJlc3BvbnNlIGluIHRoZSBtdDc2MTUgd2lyZWxlc3MgZHJpdmVyIGJ5IHB1bGxpbmcgYW4gYWRkaXRpb25hbCA0IGJ5dGVzIGZyb20gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSBmb3IgTVQ3NjYzIGRldmljZXMgYmVmb3JlIHJlYWRpbmcgYSAzMi1iaXQgaW50ZWdlci4gVGhpcyBjaGFuZ2UgZGVhbHMgd2l0aCBza2lwcGluZyBwYWRkaW5nIG9yIGFuIGV4dHJhIGhlYWRlciBpbiB0aGUgZmlybXdhcmUgcmVzcG9uc2UuIElmIHRoZSBgc2tiYCBpcyB0b28gc21hbGwsIHRoaXMgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBkZXJlZmVyZW5jaW5nIGBza2ItXHUwMDNlZGF0YWAuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgaXMgdGhlcmUgYW55IGNvcHlpbmcgb2YgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gVGhlIGRhdGEgYmVpbmcgcmVhZCBpcyBwcm92aWRlZCBieSB0aGUgaGFyZHdhcmUvZmlybXdhcmUsIGFuZCBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCB0byBkZXRlY3QgYW55IGJ1ZmZlciBvdmVyLXJlYWRzIGhlcmUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjEzLjg1MDM5NDkyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTA1NjI0MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1UNzY2M1VcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlXCIsXG4gICAgXCJtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgYW4gTUNVIHJlc3BvbnNlIGluIHRoZSBtdDc2MTUgd2lyZWxlc3MgZHJpdmVyIGJ5IHB1bGxpbmcgYW4gYWRkaXRpb25hbCA0IGJ5dGVzIGZyb20gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSBmb3IgTVQ3NjYzIGRldmljZXMgYmVmb3JlIHJlYWRpbmcgYSAzMi1iaXQgaW50ZWdlci4gVGhpcyBjaGFuZ2UgZGVhbHMgd2l0aCBza2lwcGluZyBwYWRkaW5nIG9yIGFuIGV4dHJhIGhlYWRlciBpbiB0aGUgZmlybXdhcmUgcmVzcG9uc2UuIElmIHRoZSBgc2tiYCBpcyB0b28gc21hbGwsIHRoaXMgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBkZXJlZmVyZW5jaW5nIGBza2ItXFx1MDAzZWRhdGFgLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb3B5aW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZSBkYXRhIGJlaW5nIHJlYWQgaXMgcHJvdmlkZWQgYnkgdGhlIGhhcmR3YXJlL2Zpcm13YXJlLCBhbmQgS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IGFueSBidWZmZXIgb3Zlci1yZWFkcyBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQ1UgcmVzcG9uc2UgcGFyc2luZyBsb2dpYyBmb3IgdGhlIFRIRVJNQUxfQ1RSTCBjb21tYW5kIGluIHRoZSBNZWRpYVRlayBNVDc2MTUvTVQ3NjYzIHdpcmVsZXNzIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiBkdW1teV9oY2QpIHdoZW4gcmVhZGluZyB0aGUgdGVtcGVyYXR1cmUgc3lzZnMgYXR0cmlidXRlLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzoxMy44NTA0MDExNjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjkwOTU0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyMWQyNDhmMmMyNmIxMzdjZWQzOWE3NzU2NmQyMjJmOTUwMGFlYTc0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDIwOjI3OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcXG5pbmRleCBmZjU3ZWRlODdmNzE3Li4xY2UwMTkyYzJjOTFmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcXG5AQCAtMTUzLDYgKzE1Myw4IEBAIGludCBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgaW50IGNtZCxcXG4gXFx0XFx0cmV0ID0gKnNrYi1cXHUwMDNlZGF0YTtcXG4gXFx0fSBlbHNlIGlmIChjbWQgPT0gTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKSkge1xcbiBcXHRcXHRza2JfcHVsbChza2IsIHNpemVvZigqcnhkKSk7XFxuK1xcdFxcdGlmIChpc19tdDc2NjMobWRldikpXFxuK1xcdFxcdFxcdHNrYl9wdWxsKHNrYiwgNCk7XFxuIFxcdFxcdHJldCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopc2tiLVxcdTAwM2VkYXRhKTtcXG4gXFx0fSBlbHNlIGlmIChjbWQgPT0gTUNVX0VYVF9RVUVSWShSRl9SRUdfQUNDRVNTKSkge1xcbiBcXHRcXHRza2JfcHVsbChza2IsIHNpemVvZigqcnhkKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjE1LjI4MDI1MTg1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxMzUyNzc3MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1UNzY2M1VcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlXCIsXG4gICAgXCJtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQ1UgcmVzcG9uc2UgcGFyc2luZyBsb2dpYyBmb3IgdGhlIFRIRVJNQUxfQ1RSTCBjb21tYW5kIGluIHRoZSBNZWRpYVRlayBNVDc2MTUvTVQ3NjYzIHdpcmVsZXNzIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiBkdW1teV9oY2QpIHdoZW4gcmVhZGluZyB0aGUgdGVtcGVyYXR1cmUgc3lzZnMgYXR0cmlidXRlLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMWQyNDhmMmMyNmIxMzdjZWQzOWE3NzU2NmQyMjJmOTUwMGFlYTc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMjA6Mjc6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jXG5pbmRleCBmZjU3ZWRlODdmNzE3Li4xY2UwMTkyYzJjOTFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jXG5AQCAtMTUzLDYgKzE1Myw4IEBAIGludCBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgaW50IGNtZCxcbiBcdFx0cmV0ID0gKnNrYi1cdTAwM2VkYXRhO1xuIFx0fSBlbHNlIGlmIChjbWQgPT0gTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKSkge1xuIFx0XHRza2JfcHVsbChza2IsIHNpemVvZigqcnhkKSk7XG4rXHRcdGlmIChpc19tdDc2NjMobWRldikpXG4rXHRcdFx0c2tiX3B1bGwoc2tiLCA0KTtcbiBcdFx0cmV0ID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilza2ItXHUwMDNlZGF0YSk7XG4gXHR9IGVsc2UgaWYgKGNtZCA9PSBNQ1VfRVhUX1FVRVJZKFJGX1JFR19BQ0NFU1MpKSB7XG4gXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjE1LjI4MDI1MzUwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDAwNTY1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IG1vZGlmaWVzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuY2AuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIGNoZWNrIHVzaW5nIGBpc19tdDc2NjMobWRldilgIGFuZCB0aGVuIHJlYWRzIDQgYnl0ZXMgZnJvbSB0aGUgYHNrYmAgd2l0aGluIGBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlYCBmb3IgYE1DVV9FWFRfQ01EKFRIRVJNQUxfQ1RSTClgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGRlYWxpbmcgd2l0aCB0aGVybWFsIGNvbnRyb2wgYWx3YXlzIGdldHMgbXkgYXR0ZW50aW9uLCBwYXJ0aWN1bGFybHkgaW4gYSB3aXJlbGVzcyBjb250ZXh0LlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGRyaXZlciBpcyBzb21ldGhpbmcgdGhhdCdzIGxpa2VseSB0byBzaG93IHVwIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBgbXQ3NmAgcGFydCB0ZWxscyBtZSBpdCdzIGEgTWVkaWFUZWsgd2lyZWxlc3MgZHJpdmVyLiBJIG5lZWQgdG8gcXVpY2tseSBmaWd1cmUgb3V0IHdoZXRoZXIgd2UncmUgdGFsa2luZyBhYm91dCBhIFVTQi1iYXNlZCBvciBQQ0ktYmFzZWQgZHJpdmVyIGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvYCBkaXJlY3RvcnksIHNvIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhpbnQgdG8gYW5zd2VyIHRoYXQgcXVlc3Rpb24uIExldCBtZSB0YWtlIGEgbG9vay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjc6MjEuMDIwMzEyMzY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJkZWJ1Z2ZzLmNcIixcbiAgICBcImRtYS5jXCIsXG4gICAgXCJlZXByb20uY1wiLFxuICAgIFwiZWVwcm9tLmhcIixcbiAgICBcImluaXQuY1wiLFxuICAgIFwibWFjLmNcIixcbiAgICBcIm1hYy5oXCIsXG4gICAgXCJtYWluLmNcIixcbiAgICBcIm1jdS5jXCIsXG4gICAgXCJtY3UuaFwiLFxuICAgIFwibW1pby5jXCIsXG4gICAgXCJtdDc2MTUuaFwiLFxuICAgIFwibXQ3NjE1X3RyYWNlLmhcIixcbiAgICBcInBjaS5jXCIsXG4gICAgXCJwY2lfaW5pdC5jXCIsXG4gICAgXCJwY2lfbWFjLmNcIixcbiAgICBcInJlZ3MuaFwiLFxuICAgIFwic2Rpby5jXCIsXG4gICAgXCJzZGlvX21jdS5jXCIsXG4gICAgXCJzb2MuY1wiLFxuICAgIFwidGVzdG1vZGUuY1wiLFxuICAgIFwidHJhY2UuY1wiLFxuICAgIFwidXNiLmNcIixcbiAgICBcInVzYl9tY3UuY1wiLFxuICAgIFwidXNiX3NkaW8uY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzoyMS4wMjAzOTA5OTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY2ODAzNDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRHJpdmVyIENhcGFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZWluZyBgdXNiLmNgLCBgcGNpLmNgLCBgc2Rpby5jYCwgYW5kIGBzb2MuY2AuIFRoYXQncyBhIHByZXR0eSBjbGVhciBzaWduYWwg4oCTIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRyaXZlciB0aGF0IGhhbmRsZXMgVVNCLCBQQ0ksIGFuZCBTRElPIGludGVyZmFjZXMuIEdpdmVuIHRoYXQgVVNCIGlzIHByZXNlbnQsIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBmdXp6aW5nIHZlY3RvcnMuIFVTQiBlbXVsYXRpb24sIHNwZWNpZmljYWxseSBzb21ldGhpbmcgbGlrZSBhIGBkdW1teV9oY2RgLCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2VuZXJhdGUgc29tZSBpbnRlcmVzdGluZyBpbnB1dC5cblxuTm93LCBsZXQncyBkaXZlIGRlZXBlci4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGZvciBhIGZ1bmN0aW9uIG9yIG1hY3JvIGNhbGxlZCBgaXNfbXQ3NjYzKG1kZXYpYC4gVW5kZXJzdGFuZGluZyB0aGUgdGFyZ2V0IGRldmljZSdzIHNwZWNpZmljIG1vZGVsIGlzIGNydWNpYWwgZm9yIHRhaWxvcmVkIGZ1enppbmcuIFRoZW4gSSBzaG91bGQgZm9sbG93IHRoaXMgdXAgYnkgY2hlY2tpbmcgYG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VgIC0gSSB3YW50IHRvIHNlZSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHJlc3BvbnNlcyBmcm9tIHRoZSBtaWNyb2NvbnRyb2xsZXIuIFRoaXMgcmVzcG9uc2UgcGFyc2luZyBpcyBvZnRlbiBhIGNyaXRpY2FsIGFyZWEgZm9yIGJ1Z3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzUsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjc6MjQuODg3MTk2NTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2NTc1NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTEzMz1FWFBPUlRfU1lNQk9MX0dQTChtdDc2MTVfbWN1X2ZpbGxfbXNnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xMzQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTM1OmludCBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgaW50IGNtZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xMzYtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlcSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTE4Mi19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTgzOkVYUE9SVF9TWU1CT0xfR1BMKG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTE4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTE2OTg9aW50IG10NzYxNV9tY3VfaW5pdChzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTcwMi1cXHRcXHQubWN1X3NrYl9zZW5kX21zZyA9IG10NzYxNV9tY3Vfc2VuZF9tZXNzYWdlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jOjE3MDM6XFx0XFx0Lm1jdV9wYXJzZV9yZXNwb25zZSA9IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTcwNC1cXHR9O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbXQ3NjE1Lmg9NDgzPXUzMiBtdDc2MTVfbWFjX2dldF9zdGFfdGlkX3NuKHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYsIGludCB3Y2lkLCB1OCB0aWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oLTQ4NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tdDc2MTUuaDo0ODU6aW50IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBpbnQgY21kLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oLTQ4Ni1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L3NkaW9fbWN1LmM9MTMzPWludCBtdDc2NjNzX21jdV9pbml0KHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9zZGlvX21jdS5jLTEzOC1cXHRcXHQubWN1X3NrYl9zZW5kX21zZyA9IG10NzY2M3NfbWN1X3NlbmRfbWVzc2FnZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9zZGlvX21jdS5jOjEzOTpcXHRcXHQubWN1X3BhcnNlX3Jlc3BvbnNlID0gbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9zZGlvX21jdS5jLTE0MC1cXHRcXHQubWN1X3JyID0gbXQ3Nl9jb25uYWNfbWN1X3JlZ19ycixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L3VzYl9tY3UuYz02NT1pbnQgbXQ3NjYzdV9tY3VfaW5pdChzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvdXNiX21jdS5jLTcwLVxcdFxcdC5tY3Vfc2tiX3NlbmRfbXNnID0gbXQ3NjYzdV9tY3Vfc2VuZF9tZXNzYWdlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L3VzYl9tY3UuYzo3MTpcXHRcXHQubWN1X3BhcnNlX3Jlc3BvbnNlID0gbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS91c2JfbWN1LmMtNzItXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjc6MjUuMzAzNzc3NjI3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MTQ4NTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRoZXJtYWwgQ29udHJvbCBQYXRoIGluIG10NzY2M3UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgdGhlcm1hbCBjb250cm9sIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGlzIGBUSEVSTUFMX0NUUkxgIGNvbW1hbmQgaXMgYmVpbmcga2lja2VkIG9mZiBkdXJpbmcgdGhlIFVTQiBNQ1UgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYG10NzY2M3VfbWN1X2luaXRgLiBUaGF0IHRlbGxzIG1lIHRoZSBjb21tYW5kIGlzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBVU0IgaW50ZXJmYWNlLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgY29udGV4dC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlYCBmdW5jdGlvbjsgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBzeXN0ZW0gaW50ZXJwcmV0cyB0aGUgcmVzcG9uc2UgdG8gdGhlIGBUSEVSTUFMX0NUUkxgIGNvbW1hbmQgd2hlbiBpdCdzIGlzc3VlZC4gSSBhbHNvIHdhbnQgdG8gZm9sbG93IHRoZSBsb2dpYyBhbmQgdW5kZXJzdGFuZCB3aGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhlIGV4ZWN1dGlvbiBvZiBgTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKWAuIEtub3dpbmcgdGhlIHRyaWdnZXIgaXMgY3JpdGljYWwsIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGl0cyBpbnZvY2F0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBjaGFpbiBhbmQgcGlucG9pbnRpbmcgYW55IHBvdGVudGlhbCB0aGVybWFsIG1hbmFnZW1lbnQgaXNzdWVzIG9yIGF2ZW51ZXMgZm9yIG9wdGltaXphdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiB0byBzZWUgd2hhdCB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbnMgZGV0ZXJtaW5lIHdoZW4gdGhpcyBjb250cm9sIGlzIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMjEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzoyOS4wNjUyNjU3NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxMzQ0OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVEhFUk1BTF9DVFJMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYz0xMzU9aW50IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTUzLVxcdFxcdHJldCA9ICpza2ItXFx1MDAzZWRhdGE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTU0OlxcdH0gZWxzZSBpZiAoY21kID09IE1DVV9FWFRfQ01EKFRIRVJNQUxfQ1RSTCkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xNTUtXFx0XFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKnJ4ZCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM9MjE2OT1pbnQgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IG10NzYxNV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTIxNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MjE3NjpcXHRyZXR1cm4gbXQ3Nl9tY3Vfc2VuZF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0yMTc3LVxcdFxcdFxcdFxcdCBcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjI5LjExODQwNTQxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDMzNzY1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIG10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgYG10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlYC4gVGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyogLSBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgYSBzcGVjaWZpYyBjb21tYW5kIHRvIHRoZSBNQ1UsIHByb2JhYmx5IHRvIHJlcXVlc3QgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgcmVhZGluZy4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5Ob3csIG15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoaXMgYG10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlYCBmdW5jdGlvbiBpcyBhY3R1YWxseSAqY2FsbGVkKiB3aXRoaW4gdGhlIGRyaXZlci4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGFuYWx5c2lzIGJlZ2lucy4gRmluZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0LiBJIGNhbiBzZWUgaG93LCBhbmQgd2hlbiwgdGhlIHRlbXBlcmF0dXJlIGlzIGJlaW5nIGZldGNoZWQuIFRoaXMgd2lsbCBsZWFkIG1lIHRvIHRoZSBpbnRlcmVzdGluZyBzcG90cyB3aGVyZSB0aGUgcmVhZGluZyBpcyB1c2VkLiBJcyBpdCBhIHBlcmlvZGljIGNoZWNrPyBUcmlnZ2VyZWQgYnkgc29tZSBleHRlcm5hbCBldmVudD8gSXMgaXQgcGFydCBvZiBhIHRoZXJtYWwgbWFuYWdlbWVudCBzY2hlbWUsIHBlcmhhcHM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDYsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzozMi41NjE3ODQxNjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzA0MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmM9MTg9c3RhdGljIHNzaXplX3QgbXQ3NjE1X3RoZXJtYWxfc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYy0yOC1cXHRtdDc2MTVfbXV0ZXhfYWNxdWlyZShtZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmM6Mjk6XFx0dGVtcGVyYXR1cmUgPSBtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZShtZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmMtMzAtXFx0bXQ3NjE1X211dGV4X3JlbGVhc2UobWRldik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYz0yMTE2PWludCBtdDc2MTVfbWN1X3NldF9jaGFuX2luZm8oc3RydWN0IG10NzYxNV9waHkgKnBoeSwgaW50IGNtZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTIxNjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MjE2OTppbnQgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IG10NzYxNV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0yMTcwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oPTQ5MD1pbnQgbXQ3NjE1X21jdV9zZXRfZWVwcm9tKHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oOjQ5MTppbnQgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IG10NzYxNV9kZXYgKmRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbXQ3NjE1LmgtNDkyLWludCBtdDc2MTVfbWN1X3NldF90eF9wb3dlcihzdHJ1Y3QgbXQ3NjE1X3BoeSAqcGh5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjc6MzIuNjEzNDkxMzY4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Mjk5NjE4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgVGhlcm1hbCBEYXRhIFNvdXJjZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRlbXBlcmF0dXJlIGRhdGEsIGFuZCB0aGUgc3RhcnRpbmcgcG9pbnQgYXBwZWFycyB0byBiZSB0aGUgYG10NzYxNV90aGVybWFsX3Nob3dfdGVtcGAgZnVuY3Rpb24uIFRoYXQgbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyBpdCdzIGxpa2VseSB0aWVkIHRvIGhvdyB0aGUgdGhlcm1hbCBpbmZvcm1hdGlvbiBpcyBleHBvc2VkLCBlaXRoZXIgYXMgYSBzeXN0ZW0gZmlsZSBhdHRyaWJ1dGUgKGEgc3lzZnMgZW50cnkpIG9yIHBlcmhhcHMgYXMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoaW4gdGhlIHRoZXJtYWwgem9uZSBmcmFtZXdvcmsuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGVybWFsIG1hbmFnZW1lbnQgb24gdGhpcyBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGluIGFuZCBhbmFseXplIGBtdDc2MTVfdGhlcm1hbF9zaG93X3RlbXBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQncyBiZWluZyBjYWxsZWQsIHdoYXQgaXQncyBkb2luZyB3aXRoIHRoZSBoYXJkd2FyZSBkYXRhLCBhbmQgaG93IGl0J3MgZm9ybWF0dGluZyB0aGUgb3V0cHV0LiBUaGlzIGlzIHRoZSBseW5jaHBpbiwgdGhlIHBsYWNlIHdoZXJlIHRoZSByYXcgdGVtcGVyYXR1cmUgcmVhZGluZyBpcyBsaWtlbHkgYmVpbmcgdHJhbnNsYXRlZCBmb3IgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxMCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjM3LjM0MzQ1NTgwOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NjI1Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzYxNV90aGVybWFsX3Nob3dfdGVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvaW5pdC5jLTE3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYzoxODpzdGF0aWMgc3NpemVfdCBtdDc2MTVfdGhlcm1hbF9zaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYy0xOS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYy0zOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmM6Mzk6c3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgMDQ0NCwgbXQ3NjE1X3RoZXJtYWxfc2hvd190ZW1wLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYy00MC1cXHRcXHRcXHQgIE5VTEwsIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzozNy40NDkwODcyMzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0NzA2ODg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEcml2ZXIgQ2hhbmdlIGZvciBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgcmVsYXRlZCB0byBhIGBzeXNmc2AgYXR0cmlidXRlLCBzcGVjaWZpY2FsbHkgYHRlbXAxX2lucHV0YC4gIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGFjY2Vzc2VkIGJ5IHJlYWRpbmcgYC9zeXMvY2xhc3MvaHdtb24vaHdtb25YL3RlbXAxX2lucHV0YC4gIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGluY2x1ZGVzIGEgYHNrYl9wdWxsKHNrYiwgNClgIGNhbGwsIGFuZCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgY29uZGl0aW9uYWwgb24gYGlzX210NzY2MyhtZGV2KWAuICBIbW0sIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpdCBhbHRlcnMgdGhlIHdheSB0aGUgZHJpdmVyIGlzIHBhcnNpbmcgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gIFRoYXQncyBhIGJpdCBvZiBhIHJlZCBmbGFnIGluIG15IGJvb2suICBBbnkgdGltZSB5b3UncmUgbW9kaWZ5aW5nIHBhcnNpbmcgbG9naWMsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGV4dGVybmFsIGhhcmR3YXJlLCB0aGVyZSdzIGEgY2hhbmNlIGZvciBvZmYtYnktb25lIGVycm9ycyBvciB1bmV4cGVjdGVkIGlucHV0IGhhbmRsaW5nIHRoYXQgY291bGQgbGVhZCB0byBzZWN1cml0eSBpc3N1ZXMuXG5cbkdpdmVuIHRoYXQgaXQncyBwYXJzaW5nIE1DVSByZXNwb25zZXMsIHRoaXMgc2NyZWFtcyBmb3IgZnV6emluZy4gV2UgbmVlZCB0byB0aHJvdyBhIGJ1bmNoIG9mIG1hbGZvcm1lZCBhbmQgdW5leHBlY3RlZCBkYXRhIGF0IHRoaXMgdGhpbmcgYW5kIHNlZSB3aGF0IGhhcHBlbnMuICBcblxuQmVmb3JlIEkgY2FuIGV2ZW4gZ2V0IHRvIGZ1enppbmcsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBidWlsZCB0aGUgY29kZS4gIExldCdzIHNlZS4uLiB0aGUgZHJpdmVyIGlzIGBtdDc2MTVgLiAgUmlnaHQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYnVpbGQgc3lzdGVtIGFuZCBjb25maWd1cmF0aW9uIHRvIGZpbmQgdGhlIG5lY2Vzc2FyeSBmbGFncyBhbmQgZGVwZW5kZW5jaWVzIHRvIGVuYWJsZSB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aCBzbyBJIGNhbiBhY3R1YWxseSBydW4gaXQgYW5kIHRoZW4gaG9vayBpdCB1cCB0byBteSBmdXp6aW5nIGhhcm5lc3MuIFRoaXMgY2hhbmdlIGlzIGludGVyZXN0aW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZSBzbyBpdCdzIHdvcnRoIHRoZSBkZWVwIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNDcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjc6NDIuNzk2MTU4NjE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc0MDc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdDc2MTVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZz00Nj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnOjQ3OnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctNDgtc291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzo0Mi44ODE5MDM0NjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwOTM2NDE4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIE1UNzYxNSBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgTVQ3NjE1IHdpcmVsZXNzIGRyaXZlciBjb25maWd1cmF0aW9uLCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB0aGUgYmVkcm9jaywgdGhlIGNvbnRyb2wgY2VudGVyIGZvciBob3cgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBLbm93aW5nIHdoYXQncyBjb25maWd1cmVkIGhlcmUgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMsIGJ1aWxkIG9wdGlvbnMsIGFuZCB1bHRpbWF0ZWx5LCBob3cgdGhpcyBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4gVGhpcyBgS2NvbmZpZ2Agd2lsbCB0ZWxsIG1lIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIGhvdyB0aGV5J3JlIGV4cG9zZWQgdG8gdGhlIHVzZXIgKGlmIGF0IGFsbCksIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3MiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjQ2LjQ5MTI3MDE2NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG4gICAyOlxcdFxcbiAgIDM6XFx0Y29uZmlnIE1UNzYxNV9DT01NT05cXG4gICA0OlxcdFxcdHRyaXN0YXRlXFxuICAgNTpcXHRcXHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcXG4gICA2OlxcdFxcdHNlbGVjdCBNVDc2X0NPTk5BQ19MSUJcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIE1UNzYxNUVcXG4gICA5OlxcdFxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc2MTVFIGFuZCBNVDc2NjNFIChQQ0llKSBzdXBwb3J0XFxcIlxcbiAgMTA6XFx0XFx0c2VsZWN0IE1UNzYxNV9DT01NT05cXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc2MTUtYmFzZWQgUENJZSB3aXJlbGVzcyBkZXZpY2VzLFxcbiAgMTU6XFx0XFx0ICB3aGljaCBzdXBwb3J0IGNvbmN1cnJlbnQgZHVhbC1iYW5kIG9wZXJhdGlvbiBhdCBib3RoIDVHSHpcXG4gIDE2OlxcdFxcdCAgYW5kIDIuNEdIeiwgSUVFRSA4MDIuMTFhYyA0eDQ6NFNTIDE3MzNNYnBzIFBIWSByYXRlLCB3YXZlMlxcbiAgMTc6XFx0XFx0ICBNVS1NSU1PIHVwIHRvIDQgdXNlcnMvZ3JvdXAgYW5kIDE2ME1IeiBjaGFubmVscy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgTVQ3NjIyX1dNQUNcXG4gIDIyOlxcdFxcdGJvb2wgXFxcIk1UNzYyMiAoU29DKSBXTUFDIHN1cHBvcnRcXFwiXFxuICAyMzpcXHRcXHRkZXBlbmRzIG9uIE1UNzYxNUVcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCBDT01QSUxFX1RFU1RcXG4gIDI1OlxcdFxcdHNlbGVjdCBSRUdNQVBcXG4gIDI2OlxcdFxcdGRlZmF1bHQgeVxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0LWluIFdNQUMgb24gTVQ3NjIyIFNvQyBkZXZpY2VzXFxuICAyOTpcXHRcXHQgIHdoaWNoIGhhcyB0aGUgc2FtZSBmZWF0dXJlIHNldCBhcyBhIE1UNzYxNSwgYnV0IGxpbWl0ZWQgdG9cXG4gIDMwOlxcdFxcdCAgMi40IEdIeiBvbmx5LlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgTVQ3NjYzX1VTQl9TRElPX0NPTU1PTlxcbiAgMzM6XFx0XFx0dHJpc3RhdGVcXG4gIDM0OlxcdFxcdHNlbGVjdCBNVDc2MTVfQ09NTU9OXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBNVDc2NjNVXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ3NjYzVSAoVVNCKSBzdXBwb3J0XFxcIlxcbiAgMzg6XFx0XFx0c2VsZWN0IE1UNzZfVVNCXFxuICAzOTpcXHRcXHRzZWxlY3QgTVQ3NjYzX1VTQl9TRElPX0NPTU1PTlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgNDE6XFx0XFx0ZGVwZW5kcyBvbiBVU0JcXG4gIDQyOlxcdFxcdGhlbHBcXG4gIDQzOlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzY2M1UgODAyLjExYWMgMngyOjIgd2lyZWxlc3MgZGV2aWNlcy5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgTVQ3NjYzU1xcbiAgNDg6XFx0XFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzY2M1MgKFNESU8pIHN1cHBvcnRcXFwiXFxuICA0OTpcXHRcXHRzZWxlY3QgTVQ3Nl9TRElPXFxuICA1MDpcXHRcXHRzZWxlY3QgTVQ3NjYzX1VTQl9TRElPX0NPTU1PTlxcbiAgNTE6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgNTI6XFx0XFx0ZGVwZW5kcyBvbiBNTUNcXG4gIDUzOlxcdFxcdGhlbHBcXG4gIDU0OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzY2M1MgODAyLjExYWMgMngyOjIgd2lyZWxlc3MgZGV2aWNlcy5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzo0Ni40OTEzODAxMDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc1NDAwMTczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBNVDc2MTUgZHJpdmVyLCB0aGUgYE1UNzYxNV9DT01NT05gIG9uZSwgZ2V0cyBwdWxsZWQgaW4uIEl0J3MgdHJpZ2dlcmVkIGJ5IHRoZXNlIGRldmljZXM6IGBNVDc2MTVFYCwgYE1UNzY2M1VgLCBhbmQgYE1UNzY2M1NgLiBTaW5jZSBJJ20gYWltaW5nIHRvIGZ1enogaXQgdGhyb3VnaCBVU0IsIEkgbmVlZCB0byBmb2N1cyBvbiBlbmFibGluZyBgTVQ3NjYzVWAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGF0aC5cblxuTm93LCBgTVQ3NjYzVWAgaGFzIHNvbWUgZGVwZW5kZW5jaWVzLiBJIHNlZSBpdCByZWxpZXMgb24gYE1BQzgwMjExYCBhbmQgYFVTQmAuIEFscmlnaHQsIG1ha2VzIHNlbnNlLiBTbywgdG8gZ2V0IGBNVDc2NjNVYCB3b3JraW5nLCBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIGBNQUM4MDIxMWAgYW5kIGBVU0JgIGFyZSBhbHNvIGVuYWJsZWQuIEFuZCwgSSBzZWUgdGhhdCBgTVQ3Nl9VU0JgIGlzIGFsc28gZ2V0dGluZyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCByZWFsbHkgc2NhbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnYC4gVGhlcmUgbWlnaHQgYmUgb3RoZXIgdGhpbmdzIGx1cmtpbmcgaW4gdGhlcmUgdGhhdCBJJ20gb3Zlcmxvb2tpbmcsIHNvbWUgaGlkZGVuIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIG9wdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBmb3IgdGhpcyBmdXp6aW5nIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDgwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjc6NTEuMjQ1Mzg1MTQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG4gICAyOlxcdGNvbmZpZyBNVDc2X0NPUkVcXG4gICAzOlxcdFxcdHRyaXN0YXRlXFxuICAgNDpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBNVDc2X0xFRFNcXG4gICA3OlxcdFxcdGJvb2xcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gTVQ3Nl9DT1JFXFxuICAgOTpcXHRcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBNVDc2X0NPUkU9TEVEU19DTEFTU1xcbiAgMTA6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMTpcXHRcXG4gIDEyOlxcdGNvbmZpZyBNVDc2X1VTQlxcbiAgMTM6XFx0XFx0dHJpc3RhdGVcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gTVQ3Nl9DT1JFXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBNVDc2X1NESU9cXG4gIDE3OlxcdFxcdHRyaXN0YXRlXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE1UNzZfQ09SRVxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgTVQ3NngwMl9MSUJcXG4gIDIxOlxcdFxcdHRyaXN0YXRlXFxuICAyMjpcXHRcXHRzZWxlY3QgTVQ3Nl9DT1JFXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBNVDc2eDAyX1VTQlxcbiAgMjU6XFx0XFx0dHJpc3RhdGVcXG4gIDI2OlxcdFxcdHNlbGVjdCBNVDc2X1VTQlxcbiAgMjc6XFx0XFxuICAyODpcXHRjb25maWcgTVQ3Nl9DT05OQUNfTElCXFxuICAyOTpcXHRcXHR0cmlzdGF0ZVxcbiAgMzA6XFx0XFx0c2VsZWN0IE1UNzZfQ09SRVxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgTVQ3OTJ4X0xJQlxcbiAgMzM6XFx0XFx0dHJpc3RhdGVcXG4gIDM0OlxcdFxcdHNlbGVjdCBNVDc2X0NPTk5BQ19MSUJcXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIE1UNzkyeF9VU0JcXG4gIDM3OlxcdFxcdHRyaXN0YXRlXFxuICAzODpcXHRcXHRzZWxlY3QgTVQ3Nl9VU0JcXG4gIDM5OlxcdFxcbiAgNDA6XFx0Y29uZmlnIE1UNzZfTlBVXFxuICA0MTpcXHRcXHR0cmlzdGF0ZVxcbiAgNDI6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQUlST0hBX05QVT15IHx8IE1UNzZfQ09SRT1ORVRfQUlST0hBX05QVVxcbiAgNDM6XFx0XFxuICA0NDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwL0tjb25maWdcXFwiXFxuICA0NTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngyL0tjb25maWdcXFwiXFxuICA0NjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL0tjb25maWdcXFwiXFxuICA0NzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L0tjb25maWdcXFwiXFxuICA0ODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L0tjb25maWdcXFwiXFxuICA0OTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL0tjb25maWdcXFwiXFxuICA1MDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L0tjb25maWdcXFwiXFxuICA1MTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjUxLjI0NTQ1OTcyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzc2ODIzNzk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgTVQ3NjYzVSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHplcm9pbmcgaW4gb24gdGhpcyBgTVQ3NjYzVWAgY29uZmlndXJhdGlvbiDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VgIGZ1bmN0aW9uOyB0aGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuIE5vdywgYSBxdWljayBjaGVjay4uLiBpcyBgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZWAgYSBzdGF0aWMgZnVuY3Rpb24/IE5vcGUsIGl0J3MgYWN0dWFsbHkgZXhwb3J0ZWQuIEV4Y2VsbGVudCwgdGhhdCBnaXZlcyBtZSBtb3JlIGZsZXhpYmlsaXR5LiBOb3csIGxldCdzIGhlYWQgb3ZlciB0byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNgLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VgIGRpcmVjdGx5IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiB0aGUgcmVzcG9uc2UgcGFyc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI1NiwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjA5LjAxMzcwMDkzOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM2NjU0MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM9MTMzPUVYUE9SVF9TWU1CT0xfR1BMKG10NzYxNV9tY3VfZmlsbF9tc2cpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEzNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoxMzU6aW50IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBpbnQgY21kLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEzNi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTgyLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoxODM6RVhQT1JUX1NZTUJPTF9HUEwobXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTg0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM9MTY5OD1pbnQgbXQ3NjE1X21jdV9pbml0KHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xNzAyLVxcdFxcdC5tY3Vfc2tiX3NlbmRfbXNnID0gbXQ3NjE1X21jdV9zZW5kX21lc3NhZ2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTcwMzpcXHRcXHQubWN1X3BhcnNlX3Jlc3BvbnNlID0gbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xNzA0LVxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjA5Ljk1MDM2MTE2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM5ODUzNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMgaW4gdGhlIE1UNzYxNSBNQ1UgRHJpdmVyKipcblxuT2theSwgc28gYG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VgIGlzIGRlZmluaXRlbHkgbm90IGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gaXNvbGF0ZWQgY2FzZSwgb3IgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB0aGF0IGFyZW4ndCBzdGF0aWMuIExldCdzIHNlZS4uLiBBaGEhIGBtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZWAgYWxzbyBsb29rcyBsaWtlIGl0J3MgKm5vdCogc3RhdGljLiBSaWdodCwgdGhhdCBjYWxscyBmb3IgYSBkZWVwZXIgbG9vay4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyBpbiB0aGUgY29kZS4gTGV0J3MgZ28gY2hlY2sgdGhlIHNvdXJjZSBmaWxlIGZvciBgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVgLCBpdCBzaG91bGQgYmUgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCBhbmQgd2hhdCB0aGVpciBwb3RlbnRpYWwgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA5OCwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjE0LjI5MDIxODA4N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3ODAzNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM9MjExNj1pbnQgbXQ3NjE1X21jdV9zZXRfY2hhbl9pbmZvKHN0cnVjdCBtdDc2MTVfcGh5ICpwaHksIGludCBjbWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0yMTY4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jOjIxNjk6aW50IG10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMjE3MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjE0LjM2NjAwNDY1NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU2NzE2ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVnVsbmVyYWJpbGl0eSdzIFNjb3BlKipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBpc3N1ZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBtZWFucyB3ZSBjYW4gemVybyBpbiBvbiB0aGUgYG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VgIGFuZCBgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVgIGZ1bmN0aW9ucy4gVGhlIHRhcmdldCBjb25maWcgaXMgYE1UNzY2M1VgLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiB0aGUgTVQ3NjE1L01UNzY2MyB3aXJlbGVzcyBkcml2ZXIuIFRoZSByZWFzb25pbmcgbWFrZXMgc2Vuc2U6IHRoZSBwYXRjaCBpcyBmaWRkbGluZyB3aXRoIGhvdyB0aGUgTUNVIHJlc3BvbnNlIGlzIGhhbmRsZWQgZm9yIHRoZSBUSEVSTUFMX0NUUkwgY29tbWFuZC4gSXQncyBhY2Nlc3NpYmxlIHRocm91Z2ggVVNCIGVtdWxhdGlvbiDigJMgZHVtbXlfaGNkLCBnb3QgaXQg4oCTIHdoZW4gc29tZW9uZSByZWFkcyB0aGUgdGVtcGVyYXR1cmUgc3lzZnMgYXR0cmlidXRlLiBUaGF0J3MgYSBzb2xpZCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QuIExldCdzIHNlZS4uLiBgTVQ3NjYzVWAgc2hvdWxkIHNlbGVjdCBgTVQ3Nl9VU0JgLCBhbmQgYE1UNzY2M19VU0JfU0RJT19DT01NT05gLCB3aGljaCwgaW4gdHVybiwgc2VsZWN0cyBgTVQ3NjE1X0NPTU1PTmAuIFJpZ2h0LCBhbmQgYE1UNzYxNV9DT01NT05gIGJ1aWxkcyBgbWN1LmNgLiBUaGlzIGNvbmZpcm1zIHRoYXQgYWxsIHRoZSBwaWVjZXMgYXJlIGluIHBsYWNlIGFuZCB0aGF0IHRoZSBidWlsZCB0YXJnZXRzIHRoZSBjb2RlIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzNiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyODoxOS4yMjI3MjQ4NDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLSQoQ09ORklHX01UNzYxNV9DT01NT04pICs9IG10NzYxNS1jb21tb24ub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX01UNzYxNUUpICs9IG10NzYxNWUub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX01UNzY2M19VU0JfU0RJT19DT01NT04pICs9IG10NzY2My11c2Itc2Rpby1jb21tb24ub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX01UNzY2M1UpICs9IG10NzY2M3Uub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX01UNzY2M1MpICs9IG10NzY2M3Mub1xcbiAgIDg6XFx0XFxuICAgOTpcXHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxcbiAgMTA6XFx0XFxuICAxMTpcXHRtdDc2MTUtY29tbW9uLXkgOj0gbWFpbi5vIGluaXQubyBtY3UubyBlZXByb20ubyBtYWMubyBcXFxcXFxuICAxMjpcXHRcXHRcXHQgICBkZWJ1Z2ZzLm8gdHJhY2Uub1xcbiAgMTM6XFx0bXQ3NjE1LWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSArPSB0ZXN0bW9kZS5vXFxuICAxNDpcXHRcXG4gIDE1OlxcdG10NzYxNWUteSA6PSBwY2kubyBwY2lfaW5pdC5vIGRtYS5vIHBjaV9tYWMubyBtbWlvLm9cXG4gIDE2OlxcdG10NzYxNWUtJChDT05GSUdfTVQ3NjIyX1dNQUMpICs9IHNvYy5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdG10NzY2My11c2Itc2Rpby1jb21tb24teSA6PSB1c2Jfc2Rpby5vXFxuICAxOTpcXHRtdDc2NjN1LXkgOj0gdXNiLm8gdXNiX21jdS5vXFxuICAyMDpcXHRtdDc2NjNzLXkgOj0gc2Rpby5vIHNkaW9fbWN1Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjg6MTkuMjIyNzg0NjU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzQxMDE5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS2NvbmZpZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYG1jdS5vYCAqaXMqIGJ1aWx0IHdoZW4gYENPTkZJR19NVDc2MTVfQ09NTU9OYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNlZSB0aGF0IGBDT05GSUdfTVQ3NjYzVWAgYWxzbyBzZWxlY3RzIGBDT05GSUdfTVQ3NjYzX1VTQl9TRElPX0NPTU1PTmAsIHdoaWNoIGluIHR1cm4gc2VsZWN0cyBgQ09ORklHX01UNzYxNV9DT01NT05gLiBTbywgYE1UNzY2M1VgICpzaG91bGQqIGJlIHRoZSBjb3JyZWN0IGNvbmZpZyB0byB1c2UuXG5cbkluaXRpYWxseSwgSSBjb25zaWRlcmVkIGFkZGluZyBgTUFDODAyMTFgIGFuZCBgVVNCYCBqdXN0IGFzIGEgYmVsdC1hbmQtc3VzcGVuZGVycyBhcHByb2FjaCwgeW91IGtub3csIHRvIGJlIGV4dHJhIHRob3JvdWdoLiBVc3VhbGx5IGp1c3QgbGlzdGluZyBgTVQ3NjYzVWAgaXMgc3VmZmljaWVudCwgYnV0IEkgZG8gbGlrZSB0byBhZGQgZGVwZW5kZW5jaWVzLiBUaGVzZSAqYXJlKiBmYWlybHkgc3RhbmRhcmQgZGVwZW5kZW5jaWVzLCBidXQgaXQncyBwcm9iYWJseSBiZXN0IHRvIGJlIGV4cGxpY2l0IGlmIHRoZXkgYXJlbid0IHN0YW5kYXJkLlxuXG5BaCwgd2FpdCBhIG1pbnV0ZS4uLiB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljOiBcIkFsc28gY2hlY2sgJ2RlcGVuZHMgb24nIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXguXCIgT2theSwgbm93IGl0J3MgY2xlYXIuIGBNQUM4MDIxMWAgYW5kIGBVU0JgICphcmUqIHBhcmVudCBzdWJzeXN0ZW1zLCBhbmQgSSBzaG91bGQgaW5jbHVkZSB0aGVtIHRvIGJlIHNhZmUuIEl0J3MgYmV0dGVyIHRvIGJlIGV4cGxpY2l0IHRoYW4gdG8gY2F1c2UgY29tcGlsYXRpb24gaXNzdWVzLlxuXG5SaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTk2LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjI2LjU1Njg4OTU2OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTM2NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc2NjNVXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZVwiLFxuICAgIFwibXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUNVIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgZm9yIHRoZSBUSEVSTUFMX0NUUkwgY29tbWFuZCBpbiB0aGUgTWVkaWFUZWsgTVQ3NjE1L01UNzY2MyB3aXJlbGVzcyBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4gZHVtbXlfaGNkKSB3aGVuIHJlYWRpbmcgdGhlIHRlbXBlcmF0dXJlIHN5c2ZzIGF0dHJpYnV0ZSwgc28gaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc2NjNVXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZVwiLFxuICAgIFwibXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUNVIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgZm9yIHRoZSBUSEVSTUFMX0NUUkwgY29tbWFuZCBpbiB0aGUgTWVkaWFUZWsgTVQ3NjE1L01UNzY2MyB3aXJlbGVzcyBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4gZHVtbXlfaGNkKSB3aGVuIHJlYWRpbmcgdGhlIHRlbXBlcmF0dXJlIHN5c2ZzIGF0dHJpYnV0ZSwgc28gaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjg6MjYuNjMzMDMyNzc2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMyMjk3NTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjI2LjYzMzY3NTMyNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODMyMjMyNzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgYW4gTUNVIHJlc3BvbnNlIGluIHRoZSBtdDc2MTUgd2lyZWxlc3MgZHJpdmVyIGJ5IHB1bGxpbmcgYW4gYWRkaXRpb25hbCA0IGJ5dGVzIGZyb20gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSBmb3IgTVQ3NjYzIGRldmljZXMgYmVmb3JlIHJlYWRpbmcgYSAzMi1iaXQgaW50ZWdlci4gVGhpcyBjaGFuZ2UgZGVhbHMgd2l0aCBza2lwcGluZyBwYWRkaW5nIG9yIGFuIGV4dHJhIGhlYWRlciBpbiB0aGUgZmlybXdhcmUgcmVzcG9uc2UuIElmIHRoZSBgc2tiYCBpcyB0b28gc21hbGwsIHRoaXMgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBkZXJlZmVyZW5jaW5nIGBza2ItXFx1MDAzZWRhdGFgLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb3B5aW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZSBkYXRhIGJlaW5nIHJlYWQgaXMgcHJvdmlkZWQgYnkgdGhlIGhhcmR3YXJlL2Zpcm13YXJlLCBhbmQgS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IGFueSBidWZmZXIgb3Zlci1yZWFkcyBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDIxZDI0OGYyYzI2YjEzN2NlZDM5YTc3NTY2ZDIyMmY5NTAwYWVhNzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAyMDoyNzoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcbmluZGV4IGZmNTdlZGU4N2Y3MTcuLjFjZTAxOTJjMmM5MWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcbkBAIC0xNTMsNiArMTUzLDggQEAgaW50IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBpbnQgY21kLFxuIFx0XHRyZXQgPSAqc2tiLVx1MDAzZWRhdGE7XG4gXHR9IGVsc2UgaWYgKGNtZCA9PSBNQ1VfRVhUX0NNRChUSEVSTUFMX0NUUkwpKSB7XG4gXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpKTtcbitcdFx0aWYgKGlzX210NzY2MyhtZGV2KSlcbitcdFx0XHRza2JfcHVsbChza2IsIDQpO1xuIFx0XHRyZXQgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXNrYi1cdTAwM2VkYXRhKTtcbiBcdH0gZWxzZSBpZiAoY21kID09IE1DVV9FWFRfUVVFUlkoUkZfUkVHX0FDQ0VTUykpIHtcbiBcdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKnJ4ZCkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjg6MjYuNjMzNjc4OTM2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MzIyMjk5NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBNVDc2MTUgTUNVIFJlc3BvbnNlIFBhcnNpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuY2AuIEl0J3MgbW9kaWZ5aW5nIGhvdyB3ZSBwYXJzZSBhIHJlc3BvbnNlIGZyb20gdGhlIE1DVSwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGBjbWRgIGlzIGBNQ1VfRVhUX0NNRChUSEVSTUFMX0NUUkwpYC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGFuIGV4dHJhIGBza2JfcHVsbChza2IsIDQpYCBjYWxsIGlmIHRoZSBkZXZpY2UgaXMgYW4gTVQ3NjYzLiBUaGlzIGlzIGRvbmUgYmVmb3JlIHJlYWRpbmcgYSAzMi1iaXQgaW50ZWdlci5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgcG90ZW50aWFsIGZvciBpc3N1ZXM/IFRoZSBtYWluIGNvbmNlcm4gaGVyZSBpcyB3aXRoIHRoZSBgc2tiX3B1bGxgIGZ1bmN0aW9uLiBJdCdzIGRlc2lnbmVkIHRvIGFkdmFuY2UgdGhlIGBza2ItXHUwMDNlZGF0YWAgcG9pbnRlciBhbmQgZGVjcmVhc2UgYHNrYi1cdTAwM2VsZW5gLiBJZiBgc2tiLVx1MDAzZWxlbmAgaXMgc21hbGxlciB0aGFuIHRoZSByZXF1ZXN0ZWQgcHVsbCBzaXplLCBpdCByZXR1cm5zIGBOVUxMYC4gIEltcG9ydGFudGx5LCB0aGUgY29kZSAqaWdub3JlcyogdGhlIHJldHVybiB2YWx1ZS4gTGV0J3Mgc2VlLi4uIGBza2JfcHVsbGAganVzdCByZXR1cm5zIE5VTEwgaWYgaXQgY2FuJ3QgcHVsbDsgaXQgKmRvZXNuJ3QqIG1vZGlmeSBgc2tiLVx1MDAzZWRhdGFgIGlmIGl0IHJldHVybnMgTlVMTC4gVGhhdCBtZWFucyBpZiB0aGUgU0tCIGlzIHRvbyBzaG9ydCwgd2UnbGwgc3RpbGwgdHJ5IHRvIGRlcmVmZXJlbmNlIGBza2ItXHUwMDNlZGF0YWAgaW4gdGhlIG5leHQgbGluZSwgbGVhZGluZyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgaXMgYSBjbGFzc2ljIGJ1ZmZlciBvdmVycmVhZCBzY2VuYXJpby5cblxuTm93LCBpcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgaGVyZT8gTm8sIHRoZSBkYXRhIGNvbWVzIGZyb20gdGhlIE1DVSwgZXNzZW50aWFsbHkgaGFyZHdhcmUvZmlybXdhcmUgdmlhIERNQSBpbnRvIHRoZSBTS0IuIFdoaWxlIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgaGFyZHdhcmUvZmlybXdhcmUgbWlnaHQgd3JpdGUgbGVzcyB0aGFuIGV4cGVjdGVkIChsZWF2aW5nIHNvbWUgbWVtb3J5IHVuaW5pdGlhbGl6ZWQpLCB0aGlzIGlzbid0IHRoZSBwcmltYXJ5IEtNU0FOIGNvbmNlcm4uIEluIG5ldHdvcmsgZHJpdmVycywgdGhlIFNLQnMgc2hvdWxkIGJlIHVucG9pc29uZWQsIGlmIHRoZSBkYXRhIGlzIG5vdCBmdWxseSBwb3B1bGF0ZWQgYnkgdGhlIGhhcmR3YXJlLiBLTVNBTiB3b3VsZG4ndCBiZSB0aGUgY29ycmVjdCB0b29sIHVubGVzcyB0aGlzIHdhcyBhIFVTQiBkcml2ZXIgd2hlcmUgdW5pbml0aWFsaXplZCBVUkIgYnVmZmVycyB3b3VsZCBiZSBleHBvc2VkLlxuXG5TbywgdGhlIGxpa2VseSBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaWYgdGhlIFNLQiBpcyBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQuIEtBU0FOIGlzIHRoZSBjb3JyZWN0IHRvb2wgZm9yIHRoaXMuIEl0J2xsIGltbWVkaWF0ZWx5IGZsYWcgYW55IGF0dGVtcHQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuIEkgZG9uJ3Qgc2VlIGFueSBLTVNBTi1zcGVjaWZpYyBpc3N1ZS4gVGhpcyBwYXRjaCBpcyBqdXN0IHNraXBwaW5nIDQgYnl0ZXMgdGhhdCBhcmUgbGlrZWx5IHBhZGRpbmcgb3IgYSBoZWFkZXIuICBJdCdzIGp1c3QgYW4gYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyIG1hbmlwdWxhdGlvbi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgKmV4cG9zZWQqIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdyB3aGVyZSBLTVNBTiB3b3VsZCBiZSBwYXJ0aWN1bGFybHkgZWZmZWN0aXZlLiBUaGUgZGF0YSBpcyBjb21pbmcgZnJvbSB0aGUgZGV2aWNlLCBhbmQgS01TQU4gZG9lcyBub3QgdHJhY2sgdGhpcyBraW5kIG9mIGRhdGEgcHJvcGVybHkgdW5sZXNzIHRoZXJlJ3MgYW4gZXhwbGljaXQgY2FsbCB0byB1bnBvaXNvbiBvciBpZiBpdCdzIGEgVVNCIGRyaXZlciB3aGVyZSBLTVNBTiBtb25pdG9ycyB1bmluaXRpYWxpemVkIFVSQiBidWZmZXJzLiBCdXQgdGhpcyBpcyBtdDc2LiBObywgdGhlIERNQSBBUEkgaXMgcmVzcG9uc2libGUgZm9yIHBvaXNvbmluZy91bnBvaXNvbmluZy5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyBhbiBTS0IgaXMgcGFyc2VkLCBieSBza2lwcGluZyA0IGJ5dGVzIGZvciBNVDc2NjMuIFRoZSBwcmltYXJ5IHJpc2sgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBTS0IgaXMgdG9vIHNtYWxsLiBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2UgdGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGJlaW5nIHVzZWQgaW4gYSBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaCwgbm9yIGlzIHRoZXJlIGFueSBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNvcHlpbmcgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTgsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjQ0Ljk1NTk4MjY3N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgYW4gTUNVIHJlc3BvbnNlIGluIHRoZSBtdDc2MTUgd2lyZWxlc3MgZHJpdmVyIGJ5IHB1bGxpbmcgYW4gYWRkaXRpb25hbCA0IGJ5dGVzIGZyb20gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSBmb3IgTVQ3NjYzIGRldmljZXMgYmVmb3JlIHJlYWRpbmcgYSAzMi1iaXQgaW50ZWdlci4gVGhpcyBjaGFuZ2UgZGVhbHMgd2l0aCBza2lwcGluZyBwYWRkaW5nIG9yIGFuIGV4dHJhIGhlYWRlciBpbiB0aGUgZmlybXdhcmUgcmVzcG9uc2UuIElmIHRoZSBgc2tiYCBpcyB0b28gc21hbGwsIHRoaXMgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBkZXJlZmVyZW5jaW5nIGBza2ItXFx1MDAzZWRhdGFgLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb3B5aW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZSBkYXRhIGJlaW5nIHJlYWQgaXMgcHJvdmlkZWQgYnkgdGhlIGhhcmR3YXJlL2Zpcm13YXJlLCBhbmQgS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IGFueSBidWZmZXIgb3Zlci1yZWFkcyBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYXJzaW5nIG9mIGFuIE1DVSByZXNwb25zZSBpbiB0aGUgbXQ3NjE1IHdpcmVsZXNzIGRyaXZlciBieSBwdWxsaW5nIGFuIGFkZGl0aW9uYWwgNCBieXRlcyBmcm9tIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgZm9yIE1UNzY2MyBkZXZpY2VzIGJlZm9yZSByZWFkaW5nIGEgMzItYml0IGludGVnZXIuIFRoaXMgY2hhbmdlIGRlYWxzIHdpdGggc2tpcHBpbmcgcGFkZGluZyBvciBhbiBleHRyYSBoZWFkZXIgaW4gdGhlIGZpcm13YXJlIHJlc3BvbnNlLiBJZiB0aGUgYHNrYmAgaXMgdG9vIHNtYWxsLCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gZGVyZWZlcmVuY2luZyBgc2tiLVxcdTAwM2VkYXRhYC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgY29weWluZyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGUgZGF0YSBiZWluZyByZWFkIGlzIHByb3ZpZGVkIGJ5IHRoZSBoYXJkd2FyZS9maXJtd2FyZSwgYW5kIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIHRvIGRldGVjdCBhbnkgYnVmZmVyIG92ZXItcmVhZHMgaGVyZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96p9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 19:33:29 +0000 UTC FinishedAt: 2026-08-19 20:28:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MT7663U", "MAC80211", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MT7663U", "MAC80211", "USB" ], "series_id": "4331cc6e-07d5-4651-bd71-833ec517fd8e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mt7615_mcu_parse_response", "mt7615_mcu_get_temperature" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01UNzY2M1UmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSYjMzQ7LAogICAgJiMzNDttdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYXJzaW5nIG9mIGFuIE1DVSByZXNwb25zZSBpbiB0aGUgbXQ3NjE1IHdpcmVsZXNzIGRyaXZlciBieSBwdWxsaW5nIGFuIGFkZGl0aW9uYWwgNCBieXRlcyBmcm9tIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgZm9yIE1UNzY2MyBkZXZpY2VzIGJlZm9yZSByZWFkaW5nIGEgMzItYml0IGludGVnZXIuIFRoaXMgY2hhbmdlIGRlYWxzIHdpdGggc2tpcHBpbmcgcGFkZGluZyBvciBhbiBleHRyYSBoZWFkZXIgaW4gdGhlIGZpcm13YXJlIHJlc3BvbnNlLiBJZiB0aGUgYHNrYmAgaXMgdG9vIHNtYWxsLCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gZGVyZWZlcmVuY2luZyBgc2tiLVx1MDAzZWRhdGFgLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb3B5aW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZSBkYXRhIGJlaW5nIHJlYWQgaXMgcHJvdmlkZWQgYnkgdGhlIGhhcmR3YXJlL2Zpcm13YXJlLCBhbmQgS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IGFueSBidWZmZXIgb3Zlci1yZWFkcyBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUNVIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgZm9yIHRoZSBUSEVSTUFMX0NUUkwgY29tbWFuZCBpbiB0aGUgTWVkaWFUZWsgTVQ3NjE1L01UNzY2MyB3aXJlbGVzcyBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4gZHVtbXlfaGNkKSB3aGVuIHJlYWRpbmcgdGhlIHRlbXBlcmF0dXJlIHN5c2ZzIGF0dHJpYnV0ZSwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDIxZDI0OGYyYzI2YjEzN2NlZDM5YTc3NTY2ZDIyMmY5NTAwYWVhNzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAyMDoyNzoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jXG5pbmRleCBmZjU3ZWRlODdmNzE3Li4xY2UwMTkyYzJjOTFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jXG5AQCAtMTUzLDYgJiM0MzsxNTMsOCBAQCBpbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsXG4gXHRcdHJldCA9ICpza2ItXHUwMDNlZGF0YTtcbiBcdH0gZWxzZSBpZiAoY21kID09IE1DVV9FWFRfQ01EKFRIRVJNQUxfQ1RSTCkpIHtcbiBcdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKnJ4ZCkpO1xuJiM0MztcdFx0aWYgKGlzX210NzY2MyhtZGV2KSlcbiYjNDM7XHRcdFx0c2tiX3B1bGwoc2tiLCA0KTtcbiBcdFx0cmV0ID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilza2ItXHUwMDNlZGF0YSk7XG4gXHR9IGVsc2UgaWYgKGNtZCA9PSBNQ1VfRVhUX1FVRVJZKFJGX1JFR19BQ0NFU1MpKSB7XG4gXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVQ3NjYzVSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlJiMzNDssCiAgICAmIzM0O210NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQ1UgcmVzcG9uc2UgcGFyc2luZyBsb2dpYyBmb3IgdGhlIFRIRVJNQUxfQ1RSTCBjb21tYW5kIGluIHRoZSBNZWRpYVRlayBNVDc2MTUvTVQ3NjYzIHdpcmVsZXNzIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiBkdW1teV9oY2QpIHdoZW4gcmVhZGluZyB0aGUgdGVtcGVyYXR1cmUgc3lzZnMgYXR0cmlidXRlLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjFkMjQ4ZjJjMjZiMTM3Y2VkMzlhNzc1NjZkMjIyZjk1MDBhZWE3NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDE5IDIwOjI3OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYwppbmRleCBmZjU3ZWRlODdmNzE3Li4xY2UwMTkyYzJjOTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYwpAQCAtMTUzLDYgJiM0MzsxNTMsOCBAQCBpbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsCiAJCXJldCA9ICpza2ItJmd0O2RhdGE7CiAJfSBlbHNlIGlmIChjbWQgPT0gTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKSkgewogCQlza2JfcHVsbChza2IsIHNpemVvZigqcnhkKSk7CiYjNDM7CQlpZiAoaXNfbXQ3NjYzKG1kZXYpKQomIzQzOwkJCXNrYl9wdWxsKHNrYiwgNCk7CiAJCXJldCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopc2tiLSZndDtkYXRhKTsKIAl9IGVsc2UgaWYgKGNtZCA9PSBNQ1VfRVhUX1FVRVJZKFJGX1JFR19BQ0NFU1MpKSB7CiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBtb2RpZmllcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNgLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBjaGVjayB1c2luZyBgaXNfbXQ3NjYzKG1kZXYpYCBhbmQgdGhlbiByZWFkcyA0IGJ5dGVzIGZyb20gdGhlIGBza2JgIHdpdGhpbiBgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZWAgZm9yIGBNQ1VfRVhUX0NNRChUSEVSTUFMX0NUUkwpYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgZGVhbGluZyB3aXRoIHRoZXJtYWwgY29udHJvbCBhbHdheXMgZ2V0cyBteSBhdHRlbnRpb24sIHBhcnRpY3VsYXJseSBpbiBhIHdpcmVsZXNzIGNvbnRleHQuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGRyaXZlciBpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyBsaWtlbHkgdG8gc2hvdyB1cCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgYG10NzZgIHBhcnQgdGVsbHMgbWUgaXQmIzM5O3MgYSBNZWRpYVRlayB3aXJlbGVzcyBkcml2ZXIuIEkgbmVlZCB0byBxdWlja2x5IGZpZ3VyZSBvdXQgd2hldGhlciB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIFVTQi1iYXNlZCBvciBQQ0ktYmFzZWQgZHJpdmVyIGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvYCBkaXJlY3RvcnksIHNvIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhpbnQgdG8gYW5zd2VyIHRoYXQgcXVlc3Rpb24uIExldCBtZSB0YWtlIGEgbG9vay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2RlYnVnZnMuYyYjMzQ7LAogICAgJiMzNDtkbWEuYyYjMzQ7LAogICAgJiMzNDtlZXByb20uYyYjMzQ7LAogICAgJiMzNDtlZXByb20uaCYjMzQ7LAogICAgJiMzNDtpbml0LmMmIzM0OywKICAgICYjMzQ7bWFjLmMmIzM0OywKICAgICYjMzQ7bWFjLmgmIzM0OywKICAgICYjMzQ7bWFpbi5jJiMzNDssCiAgICAmIzM0O21jdS5jJiMzNDssCiAgICAmIzM0O21jdS5oJiMzNDssCiAgICAmIzM0O21taW8uYyYjMzQ7LAogICAgJiMzNDttdDc2MTUuaCYjMzQ7LAogICAgJiMzNDttdDc2MTVfdHJhY2UuaCYjMzQ7LAogICAgJiMzNDtwY2kuYyYjMzQ7LAogICAgJiMzNDtwY2lfaW5pdC5jJiMzNDssCiAgICAmIzM0O3BjaV9tYWMuYyYjMzQ7LAogICAgJiMzNDtyZWdzLmgmIzM0OywKICAgICYjMzQ7c2Rpby5jJiMzNDssCiAgICAmIzM0O3NkaW9fbWN1LmMmIzM0OywKICAgICYjMzQ7c29jLmMmIzM0OywKICAgICYjMzQ7dGVzdG1vZGUuYyYjMzQ7LAogICAgJiMzNDt0cmFjZS5jJiMzNDssCiAgICAmIzM0O3VzYi5jJiMzNDssCiAgICAmIzM0O3VzYl9tY3UuYyYjMzQ7LAogICAgJiMzNDt1c2Jfc2Rpby5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM1CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgQ2FwYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWVpbmcgYHVzYi5jYCwgYHBjaS5jYCwgYHNkaW8uY2AsIGFuZCBgc29jLmNgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGNsZWFyIHNpZ25hbCDigJMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGRyaXZlciB0aGF0IGhhbmRsZXMgVVNCLCBQQ0ksIGFuZCBTRElPIGludGVyZmFjZXMuIEdpdmVuIHRoYXQgVVNCIGlzIHByZXNlbnQsIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZnV6emluZyB2ZWN0b3JzLiBVU0IgZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgc29tZXRoaW5nIGxpa2UgYSBgZHVtbXlfaGNkYCwgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdlbmVyYXRlIHNvbWUgaW50ZXJlc3RpbmcgaW5wdXQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjaGVja2luZyBmb3IgYSBmdW5jdGlvbiBvciBtYWNybyBjYWxsZWQgYGlzX210NzY2MyhtZGV2KWAuIFVuZGVyc3RhbmRpbmcgdGhlIHRhcmdldCBkZXZpY2UmIzM5O3Mgc3BlY2lmaWMgbW9kZWwgaXMgY3J1Y2lhbCBmb3IgdGFpbG9yZWQgZnV6emluZy4gVGhlbiBJIHNob3VsZCBmb2xsb3cgdGhpcyB1cCBieSBjaGVja2luZyBgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZWAgLSBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgcmVzcG9uc2VzIGZyb20gdGhlIG1pY3JvY29udHJvbGxlci4gVGhpcyByZXNwb25zZSBwYXJzaW5nIGlzIG9mdGVuIGEgY3JpdGljYWwgYXJlYSBmb3IgYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTEzMz1FWFBPUlRfU1lNQk9MX0dQTChtdDc2MTVfbWN1X2ZpbGxfbXNnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEzNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jOjEzNTppbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xMzYtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlcSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xODItfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTgzOkVYUE9SVF9TWU1CT0xfR1BMKG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTg0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTE2OTg9aW50IG10NzYxNV9tY3VfaW5pdChzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTE3MDItXHRcdC5tY3Vfc2tiX3NlbmRfbXNnID0gbXQ3NjE1X21jdV9zZW5kX21lc3NhZ2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoxNzAzOlx0XHQubWN1X3BhcnNlX3Jlc3BvbnNlID0gbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTE3MDQtXHR9O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oPTQ4Mz11MzIgbXQ3NjE1X21hY19nZXRfc3RhX3RpZF9zbihzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2LCBpbnQgd2NpZCwgdTggdGlkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oLTQ4NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oOjQ4NTppbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tdDc2MTUuaC00ODYtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlcSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvc2Rpb19tY3UuYz0xMzM9aW50IG10NzY2M3NfbWN1X2luaXQoc3RydWN0IG10NzYxNV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9zZGlvX21jdS5jLTEzOC1cdFx0Lm1jdV9za2Jfc2VuZF9tc2cgPSBtdDc2NjNzX21jdV9zZW5kX21lc3NhZ2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9zZGlvX21jdS5jOjEzOTpcdFx0Lm1jdV9wYXJzZV9yZXNwb25zZSA9IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9zZGlvX21jdS5jLTE0MC1cdFx0Lm1jdV9yciA9IG10NzZfY29ubmFjX21jdV9yZWdfcnIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvdXNiX21jdS5jPTY1PWludCBtdDc2NjN1X21jdV9pbml0KHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvdXNiX21jdS5jLTcwLVx0XHQubWN1X3NrYl9zZW5kX21zZyA9IG10NzY2M3VfbWN1X3NlbmRfbWVzc2FnZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L3VzYl9tY3UuYzo3MTpcdFx0Lm1jdV9wYXJzZV9yZXNwb25zZSA9IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS91c2JfbWN1LmMtNzItXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRoZXJtYWwgQ29udHJvbCBQYXRoIGluIG10NzY2M3UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyB0aGVybWFsIGNvbnRyb2wgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIHRoaXMgYFRIRVJNQUxfQ1RSTGAgY29tbWFuZCBpcyBiZWluZyBraWNrZWQgb2ZmIGR1cmluZyB0aGUgVVNCIE1DVSBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbXQ3NjYzdV9tY3VfaW5pdGAuIFRoYXQgdGVsbHMgbWUgdGhlIGNvbW1hbmQgaXMgcG90ZW50aWFsbHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFVTQiBpbnRlcmZhY2UsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlYCBmdW5jdGlvbjsgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgc3lzdGVtIGludGVycHJldHMgdGhlIHJlc3BvbnNlIHRvIHRoZSBgVEhFUk1BTF9DVFJMYCBjb21tYW5kIHdoZW4gaXQmIzM5O3MgaXNzdWVkLiBJIGFsc28gd2FudCB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIHdoYXQgZXhhY3RseSB0cmlnZ2VycyB0aGUgZXhlY3V0aW9uIG9mIGBNQ1VfRVhUX0NNRChUSEVSTUFMX0NUUkwpYC4gS25vd2luZyB0aGUgdHJpZ2dlciBpcyBjcml0aWNhbCwgdW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gaXRzIGludm9jYXRpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGNoYWluIGFuZCBwaW5wb2ludGluZyBhbnkgcG90ZW50aWFsIHRoZXJtYWwgbWFuYWdlbWVudCBpc3N1ZXMgb3IgYXZlbnVlcyBmb3Igb3B0aW1pemF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiB0byBzZWUgd2hhdCB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbnMgZGV0ZXJtaW5lIHdoZW4gdGhpcyBjb250cm9sIGlzIGludm9rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEhFUk1BTF9DVFJMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTEzNT1pbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTUzLVx0XHRyZXQgPSAqc2tiLVx1MDAzZWRhdGE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoxNTQ6XHR9IGVsc2UgaWYgKGNtZCA9PSBNQ1VfRVhUX0NNRChUSEVSTUFMX0NUUkwpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xNTUtXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYz0yMTY5PWludCBtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTIxNzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoyMTc2Olx0cmV0dXJuIG10NzZfbWN1X3NlbmRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfRVhUX0NNRChUSEVSTUFMX0NUUkwpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMjE3Ny1cdFx0XHRcdCBcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQ2CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUgRnVuY3Rpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IGBtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZWAuIFRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGF0IHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqIC0gYW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2VuZGluZyBhIHNwZWNpZmljIGNvbW1hbmQgdG8gdGhlIE1DVSwgcHJvYmFibHkgdG8gcmVxdWVzdCB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSByZWFkaW5nLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdC4gQnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuCgpOb3csIG15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoaXMgYG10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlYCBmdW5jdGlvbiBpcyBhY3R1YWxseSAqY2FsbGVkKiB3aXRoaW4gdGhlIGRyaXZlci4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBhbmFseXNpcyBiZWdpbnMuIEZpbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgY29udGV4dC4gSSBjYW4gc2VlIGhvdywgYW5kIHdoZW4sIHRoZSB0ZW1wZXJhdHVyZSBpcyBiZWluZyBmZXRjaGVkLiBUaGlzIHdpbGwgbGVhZCBtZSB0byB0aGUgaW50ZXJlc3Rpbmcgc3BvdHMgd2hlcmUgdGhlIHJlYWRpbmcgaXMgdXNlZC4gSXMgaXQgYSBwZXJpb2RpYyBjaGVjaz8gVHJpZ2dlcmVkIGJ5IHNvbWUgZXh0ZXJuYWwgZXZlbnQ/IElzIGl0IHBhcnQgb2YgYSB0aGVybWFsIG1hbmFnZW1lbnQgc2NoZW1lLCBwZXJoYXBzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmM9MTg9c3RhdGljIHNzaXplX3QgbXQ3NjE1X3RoZXJtYWxfc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmMtMjgtXHRtdDc2MTVfbXV0ZXhfYWNxdWlyZShtZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYzoyOTpcdHRlbXBlcmF0dXJlID0gbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUobWRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmMtMzAtXHRtdDc2MTVfbXV0ZXhfcmVsZWFzZShtZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYz0yMTE2PWludCBtdDc2MTVfbWN1X3NldF9jaGFuX2luZm8oc3RydWN0IG10NzYxNV9waHkgKnBoeSwgaW50IGNtZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0yMTY4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MjE2OTppbnQgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IG10NzYxNV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTIxNzAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oPTQ5MD1pbnQgbXQ3NjE1X21jdV9zZXRfZWVwcm9tKHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbXQ3NjE1Lmg6NDkxOmludCBtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oLTQ5Mi1pbnQgbXQ3NjE1X21jdV9zZXRfdHhfcG93ZXIoc3RydWN0IG10NzYxNV9waHkgKnBoeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTAKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBUaGVybWFsIERhdGEgU291cmNlKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0ZW1wZXJhdHVyZSBkYXRhLCBhbmQgdGhlIHN0YXJ0aW5nIHBvaW50IGFwcGVhcnMgdG8gYmUgdGhlIGBtdDc2MTVfdGhlcm1hbF9zaG93X3RlbXBgIGZ1bmN0aW9uLiBUaGF0IG5hbWUgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IHRpZWQgdG8gaG93IHRoZSB0aGVybWFsIGluZm9ybWF0aW9uIGlzIGV4cG9zZWQsIGVpdGhlciBhcyBhIHN5c3RlbSBmaWxlIGF0dHJpYnV0ZSAoYSBzeXNmcyBlbnRyeSkgb3IgcGVyaGFwcyBhcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGhpbiB0aGUgdGhlcm1hbCB6b25lIGZyYW1ld29yay4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGVybWFsIG1hbmFnZW1lbnQgb24gdGhpcyBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGluIGFuZCBhbmFseXplIGBtdDc2MTVfdGhlcm1hbF9zaG93X3RlbXBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgYmVpbmcgY2FsbGVkLCB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhlIGhhcmR3YXJlIGRhdGEsIGFuZCBob3cgaXQmIzM5O3MgZm9ybWF0dGluZyB0aGUgb3V0cHV0LiBUaGlzIGlzIHRoZSBseW5jaHBpbiwgdGhlIHBsYWNlIHdoZXJlIHRoZSByYXcgdGVtcGVyYXR1cmUgcmVhZGluZyBpcyBsaWtlbHkgYmVpbmcgdHJhbnNsYXRlZCBmb3IgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjE1X3RoZXJtYWxfc2hvd190ZW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYy0xNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYzoxODpzdGF0aWMgc3NpemVfdCBtdDc2MTVfdGhlcm1hbF9zaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvaW5pdC5jLTE5LVx0XHRcdFx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmMtMzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmM6Mzk6c3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgMDQ0NCwgbXQ3NjE1X3RoZXJtYWxfc2hvd190ZW1wLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvaW5pdC5jLTQwLVx0XHRcdCAgTlVMTCwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNDcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRHJpdmVyIENoYW5nZSBmb3IgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBjaGFuZ2UgcmVsYXRlZCB0byBhIGBzeXNmc2AgYXR0cmlidXRlLCBzcGVjaWZpY2FsbHkgYHRlbXAxX2lucHV0YC4gIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGFjY2Vzc2VkIGJ5IHJlYWRpbmcgYC9zeXMvY2xhc3MvaHdtb24vaHdtb25YL3RlbXAxX2lucHV0YC4gIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGluY2x1ZGVzIGEgYHNrYl9wdWxsKHNrYiwgNClgIGNhbGwsIGFuZCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgY29uZGl0aW9uYWwgb24gYGlzX210NzY2MyhtZGV2KWAuICBIbW0sIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpdCBhbHRlcnMgdGhlIHdheSB0aGUgZHJpdmVyIGlzIHBhcnNpbmcgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSByZWQgZmxhZyBpbiBteSBib29rLiAgQW55IHRpbWUgeW91JiMzOTtyZSBtb2RpZnlpbmcgcGFyc2luZyBsb2dpYywgZXNwZWNpYWxseSB3aGVuIGludGVyYWN0aW5nIHdpdGggZXh0ZXJuYWwgaGFyZHdhcmUsIHRoZXJlJiMzOTtzIGEgY2hhbmNlIGZvciBvZmYtYnktb25lIGVycm9ycyBvciB1bmV4cGVjdGVkIGlucHV0IGhhbmRsaW5nIHRoYXQgY291bGQgbGVhZCB0byBzZWN1cml0eSBpc3N1ZXMuCgpHaXZlbiB0aGF0IGl0JiMzOTtzIHBhcnNpbmcgTUNVIHJlc3BvbnNlcywgdGhpcyBzY3JlYW1zIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIHRocm93IGEgYnVuY2ggb2YgbWFsZm9ybWVkIGFuZCB1bmV4cGVjdGVkIGRhdGEgYXQgdGhpcyB0aGluZyBhbmQgc2VlIHdoYXQgaGFwcGVucy4gIAoKQmVmb3JlIEkgY2FuIGV2ZW4gZ2V0IHRvIGZ1enppbmcsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBidWlsZCB0aGUgY29kZS4gIExldCYjMzk7cyBzZWUuLi4gdGhlIGRyaXZlciBpcyBgbXQ3NjE1YC4gIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgYnVpbGQgc3lzdGVtIGFuZCBjb25maWd1cmF0aW9uIHRvIGZpbmQgdGhlIG5lY2Vzc2FyeSBmbGFncyBhbmQgZGVwZW5kZW5jaWVzIHRvIGVuYWJsZSB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aCBzbyBJIGNhbiBhY3R1YWxseSBydW4gaXQgYW5kIHRoZW4gaG9vayBpdCB1cCB0byBteSBmdXp6aW5nIGhhcm5lc3MuIFRoaXMgY2hhbmdlIGlzIGludGVyZXN0aW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZSBzbyBpdCYjMzk7cyB3b3J0aCB0aGUgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdDc2MTUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnPTQ2PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYwMy9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWc6NDc6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy00OC1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTcyCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIE1UNzYxNSBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIE1UNzYxNSB3aXJlbGVzcyBkcml2ZXIgY29uZmlndXJhdGlvbiwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHRoZSBiZWRyb2NrLCB0aGUgY29udHJvbCBjZW50ZXIgZm9yIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEtub3dpbmcgd2hhdCYjMzk7cyBjb25maWd1cmVkIGhlcmUgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMsIGJ1aWxkIG9wdGlvbnMsIGFuZCB1bHRpbWF0ZWx5LCBob3cgdGhpcyBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4gVGhpcyBgS2NvbmZpZ2Agd2lsbCB0ZWxsIG1lIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIHRvIHRoZSB1c2VyIChpZiBhdCBhbGwpLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIE1UNzYxNV9DT01NT05cbiAgIDQ6XHRcdHRyaXN0YXRlXG4gICA1Olx0XHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcbiAgIDY6XHRcdHNlbGVjdCBNVDc2X0NPTk5BQ19MSUJcbiAgIDc6XHRcbiAgIDg6XHRjb25maWcgTVQ3NjE1RVxuICAgOTpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3NjE1RSBhbmQgTVQ3NjYzRSAoUENJZSkgc3VwcG9ydFwmIzM0O1xuICAxMDpcdFx0c2VsZWN0IE1UNzYxNV9DT01NT05cbiAgMTE6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgMTI6XHRcdGRlcGVuZHMgb24gUENJXG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc2MTUtYmFzZWQgUENJZSB3aXJlbGVzcyBkZXZpY2VzLFxuICAxNTpcdFx0ICB3aGljaCBzdXBwb3J0IGNvbmN1cnJlbnQgZHVhbC1iYW5kIG9wZXJhdGlvbiBhdCBib3RoIDVHSHpcbiAgMTY6XHRcdCAgYW5kIDIuNEdIeiwgSUVFRSA4MDIuMTFhYyA0eDQ6NFNTIDE3MzNNYnBzIFBIWSByYXRlLCB3YXZlMlxuICAxNzpcdFx0ICBNVS1NSU1PIHVwIHRvIDQgdXNlcnMvZ3JvdXAgYW5kIDE2ME1IeiBjaGFubmVscy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTVQ3NjIyX1dNQUNcbiAgMjI6XHRcdGJvb2wgXCYjMzQ7TVQ3NjIyIChTb0MpIFdNQUMgc3VwcG9ydFwmIzM0O1xuICAyMzpcdFx0ZGVwZW5kcyBvbiBNVDc2MTVFXG4gIDI0Olx0XHRkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwgQ09NUElMRV9URVNUXG4gIDI1Olx0XHRzZWxlY3QgUkVHTUFQXG4gIDI2Olx0XHRkZWZhdWx0IHlcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBidWlsdC1pbiBXTUFDIG9uIE1UNzYyMiBTb0MgZGV2aWNlc1xuICAyOTpcdFx0ICB3aGljaCBoYXMgdGhlIHNhbWUgZmVhdHVyZSBzZXQgYXMgYSBNVDc2MTUsIGJ1dCBsaW1pdGVkIHRvXG4gIDMwOlx0XHQgIDIuNCBHSHogb25seS5cbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgTVQ3NjYzX1VTQl9TRElPX0NPTU1PTlxuICAzMzpcdFx0dHJpc3RhdGVcbiAgMzQ6XHRcdHNlbGVjdCBNVDc2MTVfQ09NTU9OXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIE1UNzY2M1VcbiAgMzc6XHRcdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNzY2M1UgKFVTQikgc3VwcG9ydFwmIzM0O1xuICAzODpcdFx0c2VsZWN0IE1UNzZfVVNCXG4gIDM5Olx0XHRzZWxlY3QgTVQ3NjYzX1VTQl9TRElPX0NPTU1PTlxuICA0MDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICA0MTpcdFx0ZGVwZW5kcyBvbiBVU0JcbiAgNDI6XHRcdGhlbHBcbiAgNDM6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzY2M1UgODAyLjExYWMgMngyOjIgd2lyZWxlc3MgZGV2aWNlcy5cbiAgNDQ6XHRcbiAgNDU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgTVQ3NjYzU1xuICA0ODpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3NjYzUyAoU0RJTykgc3VwcG9ydFwmIzM0O1xuICA0OTpcdFx0c2VsZWN0IE1UNzZfU0RJT1xuICA1MDpcdFx0c2VsZWN0IE1UNzY2M19VU0JfU0RJT19DT01NT05cbiAgNTE6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgNTI6XHRcdGRlcGVuZHMgb24gTU1DXG4gIDUzOlx0XHRoZWxwXG4gIDU0Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc2NjNTIDgwMi4xMWFjIDJ4MjoyIHdpcmVsZXNzIGRldmljZXMuXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwODAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBNVDc2MTUgZHJpdmVyLCB0aGUgYE1UNzYxNV9DT01NT05gIG9uZSwgZ2V0cyBwdWxsZWQgaW4uIEl0JiMzOTtzIHRyaWdnZXJlZCBieSB0aGVzZSBkZXZpY2VzOiBgTVQ3NjE1RWAsIGBNVDc2NjNVYCwgYW5kIGBNVDc2NjNTYC4gU2luY2UgSSYjMzk7bSBhaW1pbmcgdG8gZnV6eiBpdCB0aHJvdWdoIFVTQiwgSSBuZWVkIHRvIGZvY3VzIG9uIGVuYWJsaW5nIGBNVDc2NjNVYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwYXRoLgoKTm93LCBgTVQ3NjYzVWAgaGFzIHNvbWUgZGVwZW5kZW5jaWVzLiBJIHNlZSBpdCByZWxpZXMgb24gYE1BQzgwMjExYCBhbmQgYFVTQmAuIEFscmlnaHQsIG1ha2VzIHNlbnNlLiBTbywgdG8gZ2V0IGBNVDc2NjNVYCB3b3JraW5nLCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBgTUFDODAyMTFgIGFuZCBgVVNCYCBhcmUgYWxzbyBlbmFibGVkLiBBbmQsIEkgc2VlIHRoYXQgYE1UNzZfVVNCYCBpcyBhbHNvIGdldHRpbmcgYXV0b21hdGljYWxseSBzZWxlY3RlZC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHJlYWxseSBzY2FuIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWdgLiBUaGVyZSBtaWdodCBiZSBvdGhlciB0aGluZ3MgbHVya2luZyBpbiB0aGVyZSB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcsIHNvbWUgaGlkZGVuIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIG9wdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgZm9yIHRoaXMgZnV6emluZyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0Y29uZmlnIE1UNzZfQ09SRVxuICAgMzpcdFx0dHJpc3RhdGVcbiAgIDQ6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgTVQ3Nl9MRURTXG4gICA3Olx0XHRib29sXG4gICA4Olx0XHRkZXBlbmRzIG9uIE1UNzZfQ09SRVxuICAgOTpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTVQ3Nl9DT1JFPUxFRFNfQ0xBU1NcbiAgMTA6XHRcdGRlZmF1bHQgeVxuICAxMTpcdFxuICAxMjpcdGNvbmZpZyBNVDc2X1VTQlxuICAxMzpcdFx0dHJpc3RhdGVcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTVQ3Nl9DT1JFXG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIE1UNzZfU0RJT1xuICAxNzpcdFx0dHJpc3RhdGVcbiAgMTg6XHRcdGRlcGVuZHMgb24gTVQ3Nl9DT1JFXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1UNzZ4MDJfTElCXG4gIDIxOlx0XHR0cmlzdGF0ZVxuICAyMjpcdFx0c2VsZWN0IE1UNzZfQ09SRVxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBNVDc2eDAyX1VTQlxuICAyNTpcdFx0dHJpc3RhdGVcbiAgMjY6XHRcdHNlbGVjdCBNVDc2X1VTQlxuICAyNzpcdFxuICAyODpcdGNvbmZpZyBNVDc2X0NPTk5BQ19MSUJcbiAgMjk6XHRcdHRyaXN0YXRlXG4gIDMwOlx0XHRzZWxlY3QgTVQ3Nl9DT1JFXG4gIDMxOlx0XG4gIDMyOlx0Y29uZmlnIE1UNzkyeF9MSUJcbiAgMzM6XHRcdHRyaXN0YXRlXG4gIDM0Olx0XHRzZWxlY3QgTVQ3Nl9DT05OQUNfTElCXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIE1UNzkyeF9VU0JcbiAgMzc6XHRcdHRyaXN0YXRlXG4gIDM4Olx0XHRzZWxlY3QgTVQ3Nl9VU0JcbiAgMzk6XHRcbiAgNDA6XHRjb25maWcgTVQ3Nl9OUFVcbiAgNDE6XHRcdHRyaXN0YXRlXG4gIDQyOlx0XHRkZXBlbmRzIG9uIE5FVF9BSVJPSEFfTlBVPXkgfHwgTVQ3Nl9DT1JFPU5FVF9BSVJPSEFfTlBVXG4gIDQzOlx0XG4gIDQ0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwL0tjb25maWdcJiMzNDtcbiAgNDU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2eDIvS2NvbmZpZ1wmIzM0O1xuICA0NjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYwMy9LY29uZmlnXCYjMzQ7XG4gIDQ3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L0tjb25maWdcJiMzNDtcbiAgNDg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvS2NvbmZpZ1wmIzM0O1xuICA0OTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9LY29uZmlnXCYjMzQ7XG4gIDUwOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L0tjb25maWdcJiMzNDtcbiAgNTE6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjU2CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBNVDc2NjNVIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoaXMgYE1UNzY2M1VgIGNvbmZpZ3VyYXRpb24g4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZWAgZnVuY3Rpb247IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuIE5vdywgYSBxdWljayBjaGVjay4uLiBpcyBgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZWAgYSBzdGF0aWMgZnVuY3Rpb24/IE5vcGUsIGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkLiBFeGNlbGxlbnQsIHRoYXQgZ2l2ZXMgbWUgbW9yZSBmbGV4aWJpbGl0eS4gTm93LCBsZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuY2AuIEkgbmVlZCB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZWAgZGlyZWN0bHkgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiB0aGUgcmVzcG9uc2UgcGFyc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTEzMz1FWFBPUlRfU1lNQk9MX0dQTChtdDc2MTVfbWN1X2ZpbGxfbXNnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEzNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jOjEzNTppbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xMzYtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlcSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xODItfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTgzOkVYUE9SVF9TWU1CT0xfR1BMKG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTg0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTE2OTg9aW50IG10NzYxNV9tY3VfaW5pdChzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTE3MDItXHRcdC5tY3Vfc2tiX3NlbmRfbXNnID0gbXQ3NjE1X21jdV9zZW5kX21lc3NhZ2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoxNzAzOlx0XHQubWN1X3BhcnNlX3Jlc3BvbnNlID0gbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTE3MDQtXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA5OAoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMgaW4gdGhlIE1UNzYxNSBNQ1UgRHJpdmVyKioKCk9rYXksIHNvIGBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlYCBpcyBkZWZpbml0ZWx5IG5vdCBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBOb3csIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBpcyBhbiBpc29sYXRlZCBjYXNlLCBvciBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHRoYXQgYXJlbiYjMzk7dCBzdGF0aWMuIExldCYjMzk7cyBzZWUuLi4gQWhhISBgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVgIGFsc28gbG9va3MgbGlrZSBpdCYjMzk7cyAqbm90KiBzdGF0aWMuIFJpZ2h0LCB0aGF0IGNhbGxzIGZvciBhIGRlZXBlciBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyBpbiB0aGUgY29kZS4gTGV0JiMzOTtzIGdvIGNoZWNrIHRoZSBzb3VyY2UgZmlsZSBmb3IgYG10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlYCwgaXQgc2hvdWxkIGJlIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgYW5kIHdoYXQgdGhlaXIgcG90ZW50aWFsIGV4dGVybmFsIGRlcGVuZGVuY2llcyBtaWdodCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYz0yMTE2PWludCBtdDc2MTVfbWN1X3NldF9jaGFuX2luZm8oc3RydWN0IG10NzYxNV9waHkgKnBoeSwgaW50IGNtZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0yMTY4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MjE2OTppbnQgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IG10NzYxNV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTIxNzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYzNgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZ1bG5lcmFiaWxpdHkmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBpc3N1ZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBtZWFucyB3ZSBjYW4gemVybyBpbiBvbiB0aGUgYG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VgIGFuZCBgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVgIGZ1bmN0aW9ucy4gVGhlIHRhcmdldCBjb25maWcgaXMgYE1UNzY2M1VgLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiB0aGUgTVQ3NjE1L01UNzY2MyB3aXJlbGVzcyBkcml2ZXIuIFRoZSByZWFzb25pbmcgbWFrZXMgc2Vuc2U6IHRoZSBwYXRjaCBpcyBmaWRkbGluZyB3aXRoIGhvdyB0aGUgTUNVIHJlc3BvbnNlIGlzIGhhbmRsZWQgZm9yIHRoZSBUSEVSTUFMX0NUUkwgY29tbWFuZC4gSXQmIzM5O3MgYWNjZXNzaWJsZSB0aHJvdWdoIFVTQiBlbXVsYXRpb24g4oCTIGR1bW15X2hjZCwgZ290IGl0IOKAkyB3aGVuIHNvbWVvbmUgcmVhZHMgdGhlIHRlbXBlcmF0dXJlIHN5c2ZzIGF0dHJpYnV0ZS4gVGhhdCYjMzk7cyBhIHNvbGlkIHRhcmdldCBmb3IgZnV6emluZy4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QuIExldCYjMzk7cyBzZWUuLi4gYE1UNzY2M1VgIHNob3VsZCBzZWxlY3QgYE1UNzZfVVNCYCwgYW5kIGBNVDc2NjNfVVNCX1NESU9fQ09NTU9OYCwgd2hpY2gsIGluIHR1cm4sIHNlbGVjdHMgYE1UNzYxNV9DT01NT05gLiBSaWdodCwgYW5kIGBNVDc2MTVfQ09NTU9OYCBidWlsZHMgYG1jdS5jYC4gVGhpcyBjb25maXJtcyB0aGF0IGFsbCB0aGUgcGllY2VzIGFyZSBpbiBwbGFjZSBhbmQgdGhhdCB0aGUgYnVpbGQgdGFyZ2V0cyB0aGUgY29kZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuICAgMjpcdFxuICAgMzpcdG9iai0kKENPTkZJR19NVDc2MTVfQ09NTU9OKSAmIzQzOz0gbXQ3NjE1LWNvbW1vbi5vXG4gICA0Olx0b2JqLSQoQ09ORklHX01UNzYxNUUpICYjNDM7PSBtdDc2MTVlLm9cbiAgIDU6XHRvYmotJChDT05GSUdfTVQ3NjYzX1VTQl9TRElPX0NPTU1PTikgJiM0Mzs9IG10NzY2My11c2Itc2Rpby1jb21tb24ub1xuICAgNjpcdG9iai0kKENPTkZJR19NVDc2NjNVKSAmIzQzOz0gbXQ3NjYzdS5vXG4gICA3Olx0b2JqLSQoQ09ORklHX01UNzY2M1MpICYjNDM7PSBtdDc2NjNzLm9cbiAgIDg6XHRcbiAgIDk6XHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxuICAxMDpcdFxuICAxMTpcdG10NzYxNS1jb21tb24teSA6PSBtYWluLm8gaW5pdC5vIG1jdS5vIGVlcHJvbS5vIG1hYy5vIFxcXG4gIDEyOlx0XHRcdCAgIGRlYnVnZnMubyB0cmFjZS5vXG4gIDEzOlx0bXQ3NjE1LWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSAmIzQzOz0gdGVzdG1vZGUub1xuICAxNDpcdFxuICAxNTpcdG10NzYxNWUteSA6PSBwY2kubyBwY2lfaW5pdC5vIGRtYS5vIHBjaV9tYWMubyBtbWlvLm9cbiAgMTY6XHRtdDc2MTVlLSQoQ09ORklHX01UNzYyMl9XTUFDKSAmIzQzOz0gc29jLm9cbiAgMTc6XHRcbiAgMTg6XHRtdDc2NjMtdXNiLXNkaW8tY29tbW9uLXkgOj0gdXNiX3NkaW8ub1xuICAxOTpcdG10NzY2M3UteSA6PSB1c2IubyB1c2JfbWN1Lm9cbiAgMjA6XHRtdDc2NjNzLXkgOj0gc2Rpby5vIHNkaW9fbWN1Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1OTYKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtjb25maWcgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYG1jdS5vYCAqaXMqIGJ1aWx0IHdoZW4gYENPTkZJR19NVDc2MTVfQ09NTU9OYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzZWUgdGhhdCBgQ09ORklHX01UNzY2M1VgIGFsc28gc2VsZWN0cyBgQ09ORklHX01UNzY2M19VU0JfU0RJT19DT01NT05gLCB3aGljaCBpbiB0dXJuIHNlbGVjdHMgYENPTkZJR19NVDc2MTVfQ09NTU9OYC4gU28sIGBNVDc2NjNVYCAqc2hvdWxkKiBiZSB0aGUgY29ycmVjdCBjb25maWcgdG8gdXNlLgoKSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgYWRkaW5nIGBNQUM4MDIxMWAgYW5kIGBVU0JgIGp1c3QgYXMgYSBiZWx0LWFuZC1zdXNwZW5kZXJzIGFwcHJvYWNoLCB5b3Uga25vdywgdG8gYmUgZXh0cmEgdGhvcm91Z2guIFVzdWFsbHkganVzdCBsaXN0aW5nIGBNVDc2NjNVYCBpcyBzdWZmaWNpZW50LCBidXQgSSBkbyBsaWtlIHRvIGFkZCBkZXBlbmRlbmNpZXMuIFRoZXNlICphcmUqIGZhaXJseSBzdGFuZGFyZCBkZXBlbmRlbmNpZXMsIGJ1dCBpdCYjMzk7cyBwcm9iYWJseSBiZXN0IHRvIGJlIGV4cGxpY2l0IGlmIHRoZXkgYXJlbiYjMzk7dCBzdGFuZGFyZC4KCkFoLCB3YWl0IGEgbWludXRlLi4uIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHZlcnkgc3BlY2lmaWM6ICYjMzQ7QWxzbyBjaGVjayAmIzM5O2RlcGVuZHMgb24mIzM5OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXguJiMzNDsgT2theSwgbm93IGl0JiMzOTtzIGNsZWFyLiBgTUFDODAyMTFgIGFuZCBgVVNCYCAqYXJlKiBwYXJlbnQgc3Vic3lzdGVtcywgYW5kIEkgc2hvdWxkIGluY2x1ZGUgdGhlbSB0byBiZSBzYWZlLiBJdCYjMzk7cyBiZXR0ZXIgdG8gYmUgZXhwbGljaXQgdGhhbiB0byBjYXVzZSBjb21waWxhdGlvbiBpc3N1ZXMuCgpSaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc2NjNVJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O210NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UmIzM0OywKICAgICYjMzQ7bXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1DVSByZXNwb25zZSBwYXJzaW5nIGxvZ2ljIGZvciB0aGUgVEhFUk1BTF9DVFJMIGNvbW1hbmQgaW4gdGhlIE1lZGlhVGVrIE1UNzYxNS9NVDc2NjMgd2lyZWxlc3MgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuIGR1bW15X2hjZCkgd2hlbiByZWFkaW5nIHRoZSB0ZW1wZXJhdHVyZSBzeXNmcyBhdHRyaWJ1dGUsIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01UNzY2M1UmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSYjMzQ7LAogICAgJiMzNDttdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUNVIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgZm9yIHRoZSBUSEVSTUFMX0NUUkwgY29tbWFuZCBpbiB0aGUgTWVkaWFUZWsgTVQ3NjE1L01UNzY2MyB3aXJlbGVzcyBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4gZHVtbXlfaGNkKSB3aGVuIHJlYWRpbmcgdGhlIHRlbXBlcmF0dXJlIHN5c2ZzIGF0dHJpYnV0ZSwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBvZiBhbiBNQ1UgcmVzcG9uc2UgaW4gdGhlIG10NzYxNSB3aXJlbGVzcyBkcml2ZXIgYnkgcHVsbGluZyBhbiBhZGRpdGlvbmFsIDQgYnl0ZXMgZnJvbSB0aGUgc29ja2V0IGJ1ZmZlciAoYHNrYmApIGZvciBNVDc2NjMgZGV2aWNlcyBiZWZvcmUgcmVhZGluZyBhIDMyLWJpdCBpbnRlZ2VyLiBUaGlzIGNoYW5nZSBkZWFscyB3aXRoIHNraXBwaW5nIHBhZGRpbmcgb3IgYW4gZXh0cmEgaGVhZGVyIGluIHRoZSBmaXJtd2FyZSByZXNwb25zZS4gSWYgdGhlIGBza2JgIGlzIHRvbyBzbWFsbCwgdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGRlcmVmZXJlbmNpbmcgYHNrYi1cdTAwM2VkYXRhYC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgY29weWluZyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGUgZGF0YSBiZWluZyByZWFkIGlzIHByb3ZpZGVkIGJ5IHRoZSBoYXJkd2FyZS9maXJtd2FyZSwgYW5kIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIHRvIGRldGVjdCBhbnkgYnVmZmVyIG92ZXItcmVhZHMgaGVyZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjFkMjQ4ZjJjMjZiMTM3Y2VkMzlhNzc1NjZkMjIyZjk1MDBhZWE3NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDE5IDIwOjI3OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYwppbmRleCBmZjU3ZWRlODdmNzE3Li4xY2UwMTkyYzJjOTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYwpAQCAtMTUzLDYgJiM0MzsxNTMsOCBAQCBpbnQgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGludCBjbWQsCiAJCXJldCA9ICpza2ItJmd0O2RhdGE7CiAJfSBlbHNlIGlmIChjbWQgPT0gTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKSkgewogCQlza2JfcHVsbChza2IsIHNpemVvZigqcnhkKSk7CiYjNDM7CQlpZiAoaXNfbXQ3NjYzKG1kZXYpKQomIzQzOwkJCXNrYl9wdWxsKHNrYiwgNCk7CiAJCXJldCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopc2tiLSZndDtkYXRhKTsKIAl9IGVsc2UgaWYgKGNtZCA9PSBNQ1VfRVhUX1FVRVJZKFJGX1JFR19BQ0NFU1MpKSB7CiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTgKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogMTQ1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTVQ3NjE1IE1DVSBSZXNwb25zZSBQYXJzaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuY2AuIEl0JiMzOTtzIG1vZGlmeWluZyBob3cgd2UgcGFyc2UgYSByZXNwb25zZSBmcm9tIHRoZSBNQ1UsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBgY21kYCBpcyBgTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKWAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhbiBleHRyYSBgc2tiX3B1bGwoc2tiLCA0KWAgY2FsbCBpZiB0aGUgZGV2aWNlIGlzIGFuIE1UNzY2My4gVGhpcyBpcyBkb25lIGJlZm9yZSByZWFkaW5nIGEgMzItYml0IGludGVnZXIuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgcG90ZW50aWFsIGZvciBpc3N1ZXM/IFRoZSBtYWluIGNvbmNlcm4gaGVyZSBpcyB3aXRoIHRoZSBgc2tiX3B1bGxgIGZ1bmN0aW9uLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBhZHZhbmNlIHRoZSBgc2tiLSZndDtkYXRhYCBwb2ludGVyIGFuZCBkZWNyZWFzZSBgc2tiLSZndDtsZW5gLiBJZiBgc2tiLSZndDtsZW5gIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHB1bGwgc2l6ZSwgaXQgcmV0dXJucyBgTlVMTGAuICBJbXBvcnRhbnRseSwgdGhlIGNvZGUgKmlnbm9yZXMqIHRoZSByZXR1cm4gdmFsdWUuIExldCYjMzk7cyBzZWUuLi4gYHNrYl9wdWxsYCBqdXN0IHJldHVybnMgTlVMTCBpZiBpdCBjYW4mIzM5O3QgcHVsbDsgaXQgKmRvZXNuJiMzOTt0KiBtb2RpZnkgYHNrYi0mZ3Q7ZGF0YWAgaWYgaXQgcmV0dXJucyBOVUxMLiBUaGF0IG1lYW5zIGlmIHRoZSBTS0IgaXMgdG9vIHNob3J0LCB3ZSYjMzk7bGwgc3RpbGwgdHJ5IHRvIGRlcmVmZXJlbmNlIGBza2ItJmd0O2RhdGFgIGluIHRoZSBuZXh0IGxpbmUsIGxlYWRpbmcgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGlzIGlzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcnJlYWQgc2NlbmFyaW8uCgpOb3csIGlzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBoZXJlPyBObywgdGhlIGRhdGEgY29tZXMgZnJvbSB0aGUgTUNVLCBlc3NlbnRpYWxseSBoYXJkd2FyZS9maXJtd2FyZSB2aWEgRE1BIGludG8gdGhlIFNLQi4gV2hpbGUgdGhlcmUmIzM5O3MgYSBjaGFuY2UgdGhhdCB0aGUgaGFyZHdhcmUvZmlybXdhcmUgbWlnaHQgd3JpdGUgbGVzcyB0aGFuIGV4cGVjdGVkIChsZWF2aW5nIHNvbWUgbWVtb3J5IHVuaW5pdGlhbGl6ZWQpLCB0aGlzIGlzbiYjMzk7dCB0aGUgcHJpbWFyeSBLTVNBTiBjb25jZXJuLiBJbiBuZXR3b3JrIGRyaXZlcnMsIHRoZSBTS0JzIHNob3VsZCBiZSB1bnBvaXNvbmVkLCBpZiB0aGUgZGF0YSBpcyBub3QgZnVsbHkgcG9wdWxhdGVkIGJ5IHRoZSBoYXJkd2FyZS4gS01TQU4gd291bGRuJiMzOTt0IGJlIHRoZSBjb3JyZWN0IHRvb2wgdW5sZXNzIHRoaXMgd2FzIGEgVVNCIGRyaXZlciB3aGVyZSB1bmluaXRpYWxpemVkIFVSQiBidWZmZXJzIHdvdWxkIGJlIGV4cG9zZWQuCgpTbywgdGhlIGxpa2VseSBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaWYgdGhlIFNLQiBpcyBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQuIEtBU0FOIGlzIHRoZSBjb3JyZWN0IHRvb2wgZm9yIHRoaXMuIEl0JiMzOTtsbCBpbW1lZGlhdGVseSBmbGFnIGFueSBhdHRlbXB0IHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBJIGRvbiYjMzk7dCBzZWUgYW55IEtNU0FOLXNwZWNpZmljIGlzc3VlLiBUaGlzIHBhdGNoIGlzIGp1c3Qgc2tpcHBpbmcgNCBieXRlcyB0aGF0IGFyZSBsaWtlbHkgcGFkZGluZyBvciBhIGhlYWRlci4gIEl0JiMzOTtzIGp1c3QgYW4gYHNrYi0mZ3Q7ZGF0YWAgcG9pbnRlciBtYW5pcHVsYXRpb24uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nICpleHBvc2VkKiB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cgd2hlcmUgS01TQU4gd291bGQgYmUgcGFydGljdWxhcmx5IGVmZmVjdGl2ZS4gVGhlIGRhdGEgaXMgY29taW5nIGZyb20gdGhlIGRldmljZSwgYW5kIEtNU0FOIGRvZXMgbm90IHRyYWNrIHRoaXMga2luZCBvZiBkYXRhIHByb3Blcmx5IHVubGVzcyB0aGVyZSYjMzk7cyBhbiBleHBsaWNpdCBjYWxsIHRvIHVucG9pc29uIG9yIGlmIGl0JiMzOTtzIGEgVVNCIGRyaXZlciB3aGVyZSBLTVNBTiBtb25pdG9ycyB1bmluaXRpYWxpemVkIFVSQiBidWZmZXJzLiBCdXQgdGhpcyBpcyBtdDc2LiBObywgdGhlIERNQSBBUEkgaXMgcmVzcG9uc2libGUgZm9yIHBvaXNvbmluZy91bnBvaXNvbmluZy4KCkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgYW4gU0tCIGlzIHBhcnNlZCwgYnkgc2tpcHBpbmcgNCBieXRlcyBmb3IgTVQ3NjYzLiBUaGUgcHJpbWFyeSByaXNrIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpZiB0aGUgU0tCIGlzIHRvbyBzbWFsbC4gS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgaGVyZS4gS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlIHRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBhIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLCBub3IgaXMgdGhlcmUgYW55IGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY29weWluZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYXJzaW5nIG9mIGFuIE1DVSByZXNwb25zZSBpbiB0aGUgbXQ3NjE1IHdpcmVsZXNzIGRyaXZlciBieSBwdWxsaW5nIGFuIGFkZGl0aW9uYWwgNCBieXRlcyBmcm9tIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgZm9yIE1UNzY2MyBkZXZpY2VzIGJlZm9yZSByZWFkaW5nIGEgMzItYml0IGludGVnZXIuIFRoaXMgY2hhbmdlIGRlYWxzIHdpdGggc2tpcHBpbmcgcGFkZGluZyBvciBhbiBleHRyYSBoZWFkZXIgaW4gdGhlIGZpcm13YXJlIHJlc3BvbnNlLiBJZiB0aGUgYHNrYmAgaXMgdG9vIHNtYWxsLCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gZGVyZWZlcmVuY2luZyBgc2tiLVx1MDAzZWRhdGFgLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb3B5aW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZSBkYXRhIGJlaW5nIHJlYWQgaXMgcHJvdmlkZWQgYnkgdGhlIGhhcmR3YXJlL2Zpcm13YXJlLCBhbmQgS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IGFueSBidWZmZXIgb3Zlci1yZWFkcyBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgYW4gTUNVIHJlc3BvbnNlIGluIHRoZSBtdDc2MTUgd2lyZWxlc3MgZHJpdmVyIGJ5IHB1bGxpbmcgYW4gYWRkaXRpb25hbCA0IGJ5dGVzIGZyb20gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSBmb3IgTVQ3NjYzIGRldmljZXMgYmVmb3JlIHJlYWRpbmcgYSAzMi1iaXQgaW50ZWdlci4gVGhpcyBjaGFuZ2UgZGVhbHMgd2l0aCBza2lwcGluZyBwYWRkaW5nIG9yIGFuIGV4dHJhIGhlYWRlciBpbiB0aGUgZmlybXdhcmUgcmVzcG9uc2UuIElmIHRoZSBgc2tiYCBpcyB0b28gc21hbGwsIHRoaXMgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBkZXJlZmVyZW5jaW5nIGBza2ItXHUwMDNlZGF0YWAuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgaXMgdGhlcmUgYW55IGNvcHlpbmcgb2YgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gVGhlIGRhdGEgYmVpbmcgcmVhZCBpcyBwcm92aWRlZCBieSB0aGUgaGFyZHdhcmUvZmlybXdhcmUsIGFuZCBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCB0byBkZXRlY3QgYW55IGJ1ZmZlciBvdmVyLXJlYWRzIGhlcmUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjEzLjg1MDM5NDkyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTA1NjI0MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1UNzY2M1VcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlXCIsXG4gICAgXCJtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgYW4gTUNVIHJlc3BvbnNlIGluIHRoZSBtdDc2MTUgd2lyZWxlc3MgZHJpdmVyIGJ5IHB1bGxpbmcgYW4gYWRkaXRpb25hbCA0IGJ5dGVzIGZyb20gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSBmb3IgTVQ3NjYzIGRldmljZXMgYmVmb3JlIHJlYWRpbmcgYSAzMi1iaXQgaW50ZWdlci4gVGhpcyBjaGFuZ2UgZGVhbHMgd2l0aCBza2lwcGluZyBwYWRkaW5nIG9yIGFuIGV4dHJhIGhlYWRlciBpbiB0aGUgZmlybXdhcmUgcmVzcG9uc2UuIElmIHRoZSBgc2tiYCBpcyB0b28gc21hbGwsIHRoaXMgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBkZXJlZmVyZW5jaW5nIGBza2ItXFx1MDAzZWRhdGFgLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb3B5aW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZSBkYXRhIGJlaW5nIHJlYWQgaXMgcHJvdmlkZWQgYnkgdGhlIGhhcmR3YXJlL2Zpcm13YXJlLCBhbmQgS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IGFueSBidWZmZXIgb3Zlci1yZWFkcyBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQ1UgcmVzcG9uc2UgcGFyc2luZyBsb2dpYyBmb3IgdGhlIFRIRVJNQUxfQ1RSTCBjb21tYW5kIGluIHRoZSBNZWRpYVRlayBNVDc2MTUvTVQ3NjYzIHdpcmVsZXNzIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiBkdW1teV9oY2QpIHdoZW4gcmVhZGluZyB0aGUgdGVtcGVyYXR1cmUgc3lzZnMgYXR0cmlidXRlLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzoxMy44NTA0MDExNjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjkwOTU0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyMWQyNDhmMmMyNmIxMzdjZWQzOWE3NzU2NmQyMjJmOTUwMGFlYTc0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDIwOjI3OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcXG5pbmRleCBmZjU3ZWRlODdmNzE3Li4xY2UwMTkyYzJjOTFmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcXG5AQCAtMTUzLDYgKzE1Myw4IEBAIGludCBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgaW50IGNtZCxcXG4gXFx0XFx0cmV0ID0gKnNrYi1cXHUwMDNlZGF0YTtcXG4gXFx0fSBlbHNlIGlmIChjbWQgPT0gTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKSkge1xcbiBcXHRcXHRza2JfcHVsbChza2IsIHNpemVvZigqcnhkKSk7XFxuK1xcdFxcdGlmIChpc19tdDc2NjMobWRldikpXFxuK1xcdFxcdFxcdHNrYl9wdWxsKHNrYiwgNCk7XFxuIFxcdFxcdHJldCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopc2tiLVxcdTAwM2VkYXRhKTtcXG4gXFx0fSBlbHNlIGlmIChjbWQgPT0gTUNVX0VYVF9RVUVSWShSRl9SRUdfQUNDRVNTKSkge1xcbiBcXHRcXHRza2JfcHVsbChza2IsIHNpemVvZigqcnhkKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjE1LjI4MDI1MTg1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxMzUyNzc3MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1UNzY2M1VcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlXCIsXG4gICAgXCJtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQ1UgcmVzcG9uc2UgcGFyc2luZyBsb2dpYyBmb3IgdGhlIFRIRVJNQUxfQ1RSTCBjb21tYW5kIGluIHRoZSBNZWRpYVRlayBNVDc2MTUvTVQ3NjYzIHdpcmVsZXNzIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiBkdW1teV9oY2QpIHdoZW4gcmVhZGluZyB0aGUgdGVtcGVyYXR1cmUgc3lzZnMgYXR0cmlidXRlLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMWQyNDhmMmMyNmIxMzdjZWQzOWE3NzU2NmQyMjJmOTUwMGFlYTc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMjA6Mjc6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jXG5pbmRleCBmZjU3ZWRlODdmNzE3Li4xY2UwMTkyYzJjOTFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jXG5AQCAtMTUzLDYgKzE1Myw4IEBAIGludCBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgaW50IGNtZCxcbiBcdFx0cmV0ID0gKnNrYi1cdTAwM2VkYXRhO1xuIFx0fSBlbHNlIGlmIChjbWQgPT0gTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKSkge1xuIFx0XHRza2JfcHVsbChza2IsIHNpemVvZigqcnhkKSk7XG4rXHRcdGlmIChpc19tdDc2NjMobWRldikpXG4rXHRcdFx0c2tiX3B1bGwoc2tiLCA0KTtcbiBcdFx0cmV0ID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilza2ItXHUwMDNlZGF0YSk7XG4gXHR9IGVsc2UgaWYgKGNtZCA9PSBNQ1VfRVhUX1FVRVJZKFJGX1JFR19BQ0NFU1MpKSB7XG4gXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjE1LjI4MDI1MzUwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDAwNTY1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IG1vZGlmaWVzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuY2AuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIGNoZWNrIHVzaW5nIGBpc19tdDc2NjMobWRldilgIGFuZCB0aGVuIHJlYWRzIDQgYnl0ZXMgZnJvbSB0aGUgYHNrYmAgd2l0aGluIGBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlYCBmb3IgYE1DVV9FWFRfQ01EKFRIRVJNQUxfQ1RSTClgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGRlYWxpbmcgd2l0aCB0aGVybWFsIGNvbnRyb2wgYWx3YXlzIGdldHMgbXkgYXR0ZW50aW9uLCBwYXJ0aWN1bGFybHkgaW4gYSB3aXJlbGVzcyBjb250ZXh0LlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGRyaXZlciBpcyBzb21ldGhpbmcgdGhhdCdzIGxpa2VseSB0byBzaG93IHVwIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBgbXQ3NmAgcGFydCB0ZWxscyBtZSBpdCdzIGEgTWVkaWFUZWsgd2lyZWxlc3MgZHJpdmVyLiBJIG5lZWQgdG8gcXVpY2tseSBmaWd1cmUgb3V0IHdoZXRoZXIgd2UncmUgdGFsa2luZyBhYm91dCBhIFVTQi1iYXNlZCBvciBQQ0ktYmFzZWQgZHJpdmVyIGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvYCBkaXJlY3RvcnksIHNvIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhpbnQgdG8gYW5zd2VyIHRoYXQgcXVlc3Rpb24uIExldCBtZSB0YWtlIGEgbG9vay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjc6MjEuMDIwMzEyMzY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJkZWJ1Z2ZzLmNcIixcbiAgICBcImRtYS5jXCIsXG4gICAgXCJlZXByb20uY1wiLFxuICAgIFwiZWVwcm9tLmhcIixcbiAgICBcImluaXQuY1wiLFxuICAgIFwibWFjLmNcIixcbiAgICBcIm1hYy5oXCIsXG4gICAgXCJtYWluLmNcIixcbiAgICBcIm1jdS5jXCIsXG4gICAgXCJtY3UuaFwiLFxuICAgIFwibW1pby5jXCIsXG4gICAgXCJtdDc2MTUuaFwiLFxuICAgIFwibXQ3NjE1X3RyYWNlLmhcIixcbiAgICBcInBjaS5jXCIsXG4gICAgXCJwY2lfaW5pdC5jXCIsXG4gICAgXCJwY2lfbWFjLmNcIixcbiAgICBcInJlZ3MuaFwiLFxuICAgIFwic2Rpby5jXCIsXG4gICAgXCJzZGlvX21jdS5jXCIsXG4gICAgXCJzb2MuY1wiLFxuICAgIFwidGVzdG1vZGUuY1wiLFxuICAgIFwidHJhY2UuY1wiLFxuICAgIFwidXNiLmNcIixcbiAgICBcInVzYl9tY3UuY1wiLFxuICAgIFwidXNiX3NkaW8uY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzoyMS4wMjAzOTA5OTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY2ODAzNDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRHJpdmVyIENhcGFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZWluZyBgdXNiLmNgLCBgcGNpLmNgLCBgc2Rpby5jYCwgYW5kIGBzb2MuY2AuIFRoYXQncyBhIHByZXR0eSBjbGVhciBzaWduYWwg4oCTIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRyaXZlciB0aGF0IGhhbmRsZXMgVVNCLCBQQ0ksIGFuZCBTRElPIGludGVyZmFjZXMuIEdpdmVuIHRoYXQgVVNCIGlzIHByZXNlbnQsIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBmdXp6aW5nIHZlY3RvcnMuIFVTQiBlbXVsYXRpb24sIHNwZWNpZmljYWxseSBzb21ldGhpbmcgbGlrZSBhIGBkdW1teV9oY2RgLCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2VuZXJhdGUgc29tZSBpbnRlcmVzdGluZyBpbnB1dC5cblxuTm93LCBsZXQncyBkaXZlIGRlZXBlci4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGZvciBhIGZ1bmN0aW9uIG9yIG1hY3JvIGNhbGxlZCBgaXNfbXQ3NjYzKG1kZXYpYC4gVW5kZXJzdGFuZGluZyB0aGUgdGFyZ2V0IGRldmljZSdzIHNwZWNpZmljIG1vZGVsIGlzIGNydWNpYWwgZm9yIHRhaWxvcmVkIGZ1enppbmcuIFRoZW4gSSBzaG91bGQgZm9sbG93IHRoaXMgdXAgYnkgY2hlY2tpbmcgYG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VgIC0gSSB3YW50IHRvIHNlZSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHJlc3BvbnNlcyBmcm9tIHRoZSBtaWNyb2NvbnRyb2xsZXIuIFRoaXMgcmVzcG9uc2UgcGFyc2luZyBpcyBvZnRlbiBhIGNyaXRpY2FsIGFyZWEgZm9yIGJ1Z3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzUsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjc6MjQuODg3MTk2NTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2NTc1NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTEzMz1FWFBPUlRfU1lNQk9MX0dQTChtdDc2MTVfbWN1X2ZpbGxfbXNnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xMzQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTM1OmludCBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgaW50IGNtZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xMzYtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlcSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTE4Mi19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTgzOkVYUE9SVF9TWU1CT0xfR1BMKG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTE4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jPTE2OTg9aW50IG10NzYxNV9tY3VfaW5pdChzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTcwMi1cXHRcXHQubWN1X3NrYl9zZW5kX21zZyA9IG10NzYxNV9tY3Vfc2VuZF9tZXNzYWdlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jOjE3MDM6XFx0XFx0Lm1jdV9wYXJzZV9yZXNwb25zZSA9IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTcwNC1cXHR9O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbXQ3NjE1Lmg9NDgzPXUzMiBtdDc2MTVfbWFjX2dldF9zdGFfdGlkX3NuKHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYsIGludCB3Y2lkLCB1OCB0aWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oLTQ4NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tdDc2MTUuaDo0ODU6aW50IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBpbnQgY21kLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oLTQ4Ni1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L3NkaW9fbWN1LmM9MTMzPWludCBtdDc2NjNzX21jdV9pbml0KHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9zZGlvX21jdS5jLTEzOC1cXHRcXHQubWN1X3NrYl9zZW5kX21zZyA9IG10NzY2M3NfbWN1X3NlbmRfbWVzc2FnZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9zZGlvX21jdS5jOjEzOTpcXHRcXHQubWN1X3BhcnNlX3Jlc3BvbnNlID0gbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9zZGlvX21jdS5jLTE0MC1cXHRcXHQubWN1X3JyID0gbXQ3Nl9jb25uYWNfbWN1X3JlZ19ycixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L3VzYl9tY3UuYz02NT1pbnQgbXQ3NjYzdV9tY3VfaW5pdChzdHJ1Y3QgbXQ3NjE1X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvdXNiX21jdS5jLTcwLVxcdFxcdC5tY3Vfc2tiX3NlbmRfbXNnID0gbXQ3NjYzdV9tY3Vfc2VuZF9tZXNzYWdlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L3VzYl9tY3UuYzo3MTpcXHRcXHQubWN1X3BhcnNlX3Jlc3BvbnNlID0gbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS91c2JfbWN1LmMtNzItXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjc6MjUuMzAzNzc3NjI3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MTQ4NTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRoZXJtYWwgQ29udHJvbCBQYXRoIGluIG10NzY2M3UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgdGhlcm1hbCBjb250cm9sIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGlzIGBUSEVSTUFMX0NUUkxgIGNvbW1hbmQgaXMgYmVpbmcga2lja2VkIG9mZiBkdXJpbmcgdGhlIFVTQiBNQ1UgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYG10NzY2M3VfbWN1X2luaXRgLiBUaGF0IHRlbGxzIG1lIHRoZSBjb21tYW5kIGlzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBVU0IgaW50ZXJmYWNlLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgY29udGV4dC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBtdDc2MTVfbWN1X3BhcnNlX3Jlc3BvbnNlYCBmdW5jdGlvbjsgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBzeXN0ZW0gaW50ZXJwcmV0cyB0aGUgcmVzcG9uc2UgdG8gdGhlIGBUSEVSTUFMX0NUUkxgIGNvbW1hbmQgd2hlbiBpdCdzIGlzc3VlZC4gSSBhbHNvIHdhbnQgdG8gZm9sbG93IHRoZSBsb2dpYyBhbmQgdW5kZXJzdGFuZCB3aGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhlIGV4ZWN1dGlvbiBvZiBgTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKWAuIEtub3dpbmcgdGhlIHRyaWdnZXIgaXMgY3JpdGljYWwsIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGl0cyBpbnZvY2F0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBjaGFpbiBhbmQgcGlucG9pbnRpbmcgYW55IHBvdGVudGlhbCB0aGVybWFsIG1hbmFnZW1lbnQgaXNzdWVzIG9yIGF2ZW51ZXMgZm9yIG9wdGltaXphdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiB0byBzZWUgd2hhdCB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbnMgZGV0ZXJtaW5lIHdoZW4gdGhpcyBjb250cm9sIGlzIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMjEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzoyOS4wNjUyNjU3NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxMzQ0OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVEhFUk1BTF9DVFJMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYz0xMzU9aW50IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTUzLVxcdFxcdHJldCA9ICpza2ItXFx1MDAzZWRhdGE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTU0OlxcdH0gZWxzZSBpZiAoY21kID09IE1DVV9FWFRfQ01EKFRIRVJNQUxfQ1RSTCkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xNTUtXFx0XFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKnJ4ZCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM9MjE2OT1pbnQgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IG10NzYxNV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTIxNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MjE3NjpcXHRyZXR1cm4gbXQ3Nl9tY3Vfc2VuZF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX0VYVF9DTUQoVEhFUk1BTF9DVFJMKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0yMTc3LVxcdFxcdFxcdFxcdCBcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjI5LjExODQwNTQxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDMzNzY1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIG10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgYG10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlYC4gVGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyogLSBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgYSBzcGVjaWZpYyBjb21tYW5kIHRvIHRoZSBNQ1UsIHByb2JhYmx5IHRvIHJlcXVlc3QgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgcmVhZGluZy4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5Ob3csIG15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoaXMgYG10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlYCBmdW5jdGlvbiBpcyBhY3R1YWxseSAqY2FsbGVkKiB3aXRoaW4gdGhlIGRyaXZlci4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGFuYWx5c2lzIGJlZ2lucy4gRmluZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0LiBJIGNhbiBzZWUgaG93LCBhbmQgd2hlbiwgdGhlIHRlbXBlcmF0dXJlIGlzIGJlaW5nIGZldGNoZWQuIFRoaXMgd2lsbCBsZWFkIG1lIHRvIHRoZSBpbnRlcmVzdGluZyBzcG90cyB3aGVyZSB0aGUgcmVhZGluZyBpcyB1c2VkLiBJcyBpdCBhIHBlcmlvZGljIGNoZWNrPyBUcmlnZ2VyZWQgYnkgc29tZSBleHRlcm5hbCBldmVudD8gSXMgaXQgcGFydCBvZiBhIHRoZXJtYWwgbWFuYWdlbWVudCBzY2hlbWUsIHBlcmhhcHM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDYsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzozMi41NjE3ODQxNjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzA0MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmM9MTg9c3RhdGljIHNzaXplX3QgbXQ3NjE1X3RoZXJtYWxfc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYy0yOC1cXHRtdDc2MTVfbXV0ZXhfYWNxdWlyZShtZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmM6Mjk6XFx0dGVtcGVyYXR1cmUgPSBtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZShtZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmMtMzAtXFx0bXQ3NjE1X211dGV4X3JlbGVhc2UobWRldik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYz0yMTE2PWludCBtdDc2MTVfbWN1X3NldF9jaGFuX2luZm8oc3RydWN0IG10NzYxNV9waHkgKnBoeSwgaW50IGNtZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTIxNjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MjE2OTppbnQgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IG10NzYxNV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0yMTcwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oPTQ5MD1pbnQgbXQ3NjE1X21jdV9zZXRfZWVwcm9tKHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L210NzYxNS5oOjQ5MTppbnQgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IG10NzYxNV9kZXYgKmRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbXQ3NjE1LmgtNDkyLWludCBtdDc2MTVfbWN1X3NldF90eF9wb3dlcihzdHJ1Y3QgbXQ3NjE1X3BoeSAqcGh5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjc6MzIuNjEzNDkxMzY4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Mjk5NjE4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgVGhlcm1hbCBEYXRhIFNvdXJjZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRlbXBlcmF0dXJlIGRhdGEsIGFuZCB0aGUgc3RhcnRpbmcgcG9pbnQgYXBwZWFycyB0byBiZSB0aGUgYG10NzYxNV90aGVybWFsX3Nob3dfdGVtcGAgZnVuY3Rpb24uIFRoYXQgbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyBpdCdzIGxpa2VseSB0aWVkIHRvIGhvdyB0aGUgdGhlcm1hbCBpbmZvcm1hdGlvbiBpcyBleHBvc2VkLCBlaXRoZXIgYXMgYSBzeXN0ZW0gZmlsZSBhdHRyaWJ1dGUgKGEgc3lzZnMgZW50cnkpIG9yIHBlcmhhcHMgYXMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoaW4gdGhlIHRoZXJtYWwgem9uZSBmcmFtZXdvcmsuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGVybWFsIG1hbmFnZW1lbnQgb24gdGhpcyBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGluIGFuZCBhbmFseXplIGBtdDc2MTVfdGhlcm1hbF9zaG93X3RlbXBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQncyBiZWluZyBjYWxsZWQsIHdoYXQgaXQncyBkb2luZyB3aXRoIHRoZSBoYXJkd2FyZSBkYXRhLCBhbmQgaG93IGl0J3MgZm9ybWF0dGluZyB0aGUgb3V0cHV0LiBUaGlzIGlzIHRoZSBseW5jaHBpbiwgdGhlIHBsYWNlIHdoZXJlIHRoZSByYXcgdGVtcGVyYXR1cmUgcmVhZGluZyBpcyBsaWtlbHkgYmVpbmcgdHJhbnNsYXRlZCBmb3IgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxMCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjM3LjM0MzQ1NTgwOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NjI1Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzYxNV90aGVybWFsX3Nob3dfdGVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvaW5pdC5jLTE3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYzoxODpzdGF0aWMgc3NpemVfdCBtdDc2MTVfdGhlcm1hbF9zaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYy0xOS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYy0zOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9pbml0LmM6Mzk6c3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgMDQ0NCwgbXQ3NjE1X3RoZXJtYWxfc2hvd190ZW1wLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L2luaXQuYy00MC1cXHRcXHRcXHQgIE5VTEwsIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzozNy40NDkwODcyMzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0NzA2ODg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEcml2ZXIgQ2hhbmdlIGZvciBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgcmVsYXRlZCB0byBhIGBzeXNmc2AgYXR0cmlidXRlLCBzcGVjaWZpY2FsbHkgYHRlbXAxX2lucHV0YC4gIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGFjY2Vzc2VkIGJ5IHJlYWRpbmcgYC9zeXMvY2xhc3MvaHdtb24vaHdtb25YL3RlbXAxX2lucHV0YC4gIFRoZSBjb2RlIGluIHF1ZXN0aW9uIGluY2x1ZGVzIGEgYHNrYl9wdWxsKHNrYiwgNClgIGNhbGwsIGFuZCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgY29uZGl0aW9uYWwgb24gYGlzX210NzY2MyhtZGV2KWAuICBIbW0sIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpdCBhbHRlcnMgdGhlIHdheSB0aGUgZHJpdmVyIGlzIHBhcnNpbmcgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gIFRoYXQncyBhIGJpdCBvZiBhIHJlZCBmbGFnIGluIG15IGJvb2suICBBbnkgdGltZSB5b3UncmUgbW9kaWZ5aW5nIHBhcnNpbmcgbG9naWMsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGV4dGVybmFsIGhhcmR3YXJlLCB0aGVyZSdzIGEgY2hhbmNlIGZvciBvZmYtYnktb25lIGVycm9ycyBvciB1bmV4cGVjdGVkIGlucHV0IGhhbmRsaW5nIHRoYXQgY291bGQgbGVhZCB0byBzZWN1cml0eSBpc3N1ZXMuXG5cbkdpdmVuIHRoYXQgaXQncyBwYXJzaW5nIE1DVSByZXNwb25zZXMsIHRoaXMgc2NyZWFtcyBmb3IgZnV6emluZy4gV2UgbmVlZCB0byB0aHJvdyBhIGJ1bmNoIG9mIG1hbGZvcm1lZCBhbmQgdW5leHBlY3RlZCBkYXRhIGF0IHRoaXMgdGhpbmcgYW5kIHNlZSB3aGF0IGhhcHBlbnMuICBcblxuQmVmb3JlIEkgY2FuIGV2ZW4gZ2V0IHRvIGZ1enppbmcsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBidWlsZCB0aGUgY29kZS4gIExldCdzIHNlZS4uLiB0aGUgZHJpdmVyIGlzIGBtdDc2MTVgLiAgUmlnaHQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYnVpbGQgc3lzdGVtIGFuZCBjb25maWd1cmF0aW9uIHRvIGZpbmQgdGhlIG5lY2Vzc2FyeSBmbGFncyBhbmQgZGVwZW5kZW5jaWVzIHRvIGVuYWJsZSB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aCBzbyBJIGNhbiBhY3R1YWxseSBydW4gaXQgYW5kIHRoZW4gaG9vayBpdCB1cCB0byBteSBmdXp6aW5nIGhhcm5lc3MuIFRoaXMgY2hhbmdlIGlzIGludGVyZXN0aW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZSBzbyBpdCdzIHdvcnRoIHRoZSBkZWVwIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNDcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjc6NDIuNzk2MTU4NjE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc0MDc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdDc2MTVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZz00Nj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnOjQ3OnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctNDgtc291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzo0Mi44ODE5MDM0NjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwOTM2NDE4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIE1UNzYxNSBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgTVQ3NjE1IHdpcmVsZXNzIGRyaXZlciBjb25maWd1cmF0aW9uLCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB0aGUgYmVkcm9jaywgdGhlIGNvbnRyb2wgY2VudGVyIGZvciBob3cgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBLbm93aW5nIHdoYXQncyBjb25maWd1cmVkIGhlcmUgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMsIGJ1aWxkIG9wdGlvbnMsIGFuZCB1bHRpbWF0ZWx5LCBob3cgdGhpcyBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4gVGhpcyBgS2NvbmZpZ2Agd2lsbCB0ZWxsIG1lIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIGhvdyB0aGV5J3JlIGV4cG9zZWQgdG8gdGhlIHVzZXIgKGlmIGF0IGFsbCksIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3MiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjQ2LjQ5MTI3MDE2NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG4gICAyOlxcdFxcbiAgIDM6XFx0Y29uZmlnIE1UNzYxNV9DT01NT05cXG4gICA0OlxcdFxcdHRyaXN0YXRlXFxuICAgNTpcXHRcXHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcXG4gICA2OlxcdFxcdHNlbGVjdCBNVDc2X0NPTk5BQ19MSUJcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIE1UNzYxNUVcXG4gICA5OlxcdFxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc2MTVFIGFuZCBNVDc2NjNFIChQQ0llKSBzdXBwb3J0XFxcIlxcbiAgMTA6XFx0XFx0c2VsZWN0IE1UNzYxNV9DT01NT05cXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc2MTUtYmFzZWQgUENJZSB3aXJlbGVzcyBkZXZpY2VzLFxcbiAgMTU6XFx0XFx0ICB3aGljaCBzdXBwb3J0IGNvbmN1cnJlbnQgZHVhbC1iYW5kIG9wZXJhdGlvbiBhdCBib3RoIDVHSHpcXG4gIDE2OlxcdFxcdCAgYW5kIDIuNEdIeiwgSUVFRSA4MDIuMTFhYyA0eDQ6NFNTIDE3MzNNYnBzIFBIWSByYXRlLCB3YXZlMlxcbiAgMTc6XFx0XFx0ICBNVS1NSU1PIHVwIHRvIDQgdXNlcnMvZ3JvdXAgYW5kIDE2ME1IeiBjaGFubmVscy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgTVQ3NjIyX1dNQUNcXG4gIDIyOlxcdFxcdGJvb2wgXFxcIk1UNzYyMiAoU29DKSBXTUFDIHN1cHBvcnRcXFwiXFxuICAyMzpcXHRcXHRkZXBlbmRzIG9uIE1UNzYxNUVcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCBDT01QSUxFX1RFU1RcXG4gIDI1OlxcdFxcdHNlbGVjdCBSRUdNQVBcXG4gIDI2OlxcdFxcdGRlZmF1bHQgeVxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0LWluIFdNQUMgb24gTVQ3NjIyIFNvQyBkZXZpY2VzXFxuICAyOTpcXHRcXHQgIHdoaWNoIGhhcyB0aGUgc2FtZSBmZWF0dXJlIHNldCBhcyBhIE1UNzYxNSwgYnV0IGxpbWl0ZWQgdG9cXG4gIDMwOlxcdFxcdCAgMi40IEdIeiBvbmx5LlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgTVQ3NjYzX1VTQl9TRElPX0NPTU1PTlxcbiAgMzM6XFx0XFx0dHJpc3RhdGVcXG4gIDM0OlxcdFxcdHNlbGVjdCBNVDc2MTVfQ09NTU9OXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBNVDc2NjNVXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ3NjYzVSAoVVNCKSBzdXBwb3J0XFxcIlxcbiAgMzg6XFx0XFx0c2VsZWN0IE1UNzZfVVNCXFxuICAzOTpcXHRcXHRzZWxlY3QgTVQ3NjYzX1VTQl9TRElPX0NPTU1PTlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgNDE6XFx0XFx0ZGVwZW5kcyBvbiBVU0JcXG4gIDQyOlxcdFxcdGhlbHBcXG4gIDQzOlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzY2M1UgODAyLjExYWMgMngyOjIgd2lyZWxlc3MgZGV2aWNlcy5cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgTVQ3NjYzU1xcbiAgNDg6XFx0XFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzY2M1MgKFNESU8pIHN1cHBvcnRcXFwiXFxuICA0OTpcXHRcXHRzZWxlY3QgTVQ3Nl9TRElPXFxuICA1MDpcXHRcXHRzZWxlY3QgTVQ3NjYzX1VTQl9TRElPX0NPTU1PTlxcbiAgNTE6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgNTI6XFx0XFx0ZGVwZW5kcyBvbiBNTUNcXG4gIDUzOlxcdFxcdGhlbHBcXG4gIDU0OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzY2M1MgODAyLjExYWMgMngyOjIgd2lyZWxlc3MgZGV2aWNlcy5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyNzo0Ni40OTEzODAxMDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc1NDAwMTczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBNVDc2MTUgZHJpdmVyLCB0aGUgYE1UNzYxNV9DT01NT05gIG9uZSwgZ2V0cyBwdWxsZWQgaW4uIEl0J3MgdHJpZ2dlcmVkIGJ5IHRoZXNlIGRldmljZXM6IGBNVDc2MTVFYCwgYE1UNzY2M1VgLCBhbmQgYE1UNzY2M1NgLiBTaW5jZSBJJ20gYWltaW5nIHRvIGZ1enogaXQgdGhyb3VnaCBVU0IsIEkgbmVlZCB0byBmb2N1cyBvbiBlbmFibGluZyBgTVQ3NjYzVWAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGF0aC5cblxuTm93LCBgTVQ3NjYzVWAgaGFzIHNvbWUgZGVwZW5kZW5jaWVzLiBJIHNlZSBpdCByZWxpZXMgb24gYE1BQzgwMjExYCBhbmQgYFVTQmAuIEFscmlnaHQsIG1ha2VzIHNlbnNlLiBTbywgdG8gZ2V0IGBNVDc2NjNVYCB3b3JraW5nLCBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIGBNQUM4MDIxMWAgYW5kIGBVU0JgIGFyZSBhbHNvIGVuYWJsZWQuIEFuZCwgSSBzZWUgdGhhdCBgTVQ3Nl9VU0JgIGlzIGFsc28gZ2V0dGluZyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCByZWFsbHkgc2NhbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnYC4gVGhlcmUgbWlnaHQgYmUgb3RoZXIgdGhpbmdzIGx1cmtpbmcgaW4gdGhlcmUgdGhhdCBJJ20gb3Zlcmxvb2tpbmcsIHNvbWUgaGlkZGVuIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIG9wdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBmb3IgdGhpcyBmdXp6aW5nIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDgwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjc6NTEuMjQ1Mzg1MTQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG4gICAyOlxcdGNvbmZpZyBNVDc2X0NPUkVcXG4gICAzOlxcdFxcdHRyaXN0YXRlXFxuICAgNDpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBNVDc2X0xFRFNcXG4gICA3OlxcdFxcdGJvb2xcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gTVQ3Nl9DT1JFXFxuICAgOTpcXHRcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBNVDc2X0NPUkU9TEVEU19DTEFTU1xcbiAgMTA6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMTpcXHRcXG4gIDEyOlxcdGNvbmZpZyBNVDc2X1VTQlxcbiAgMTM6XFx0XFx0dHJpc3RhdGVcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gTVQ3Nl9DT1JFXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBNVDc2X1NESU9cXG4gIDE3OlxcdFxcdHRyaXN0YXRlXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE1UNzZfQ09SRVxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgTVQ3NngwMl9MSUJcXG4gIDIxOlxcdFxcdHRyaXN0YXRlXFxuICAyMjpcXHRcXHRzZWxlY3QgTVQ3Nl9DT1JFXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBNVDc2eDAyX1VTQlxcbiAgMjU6XFx0XFx0dHJpc3RhdGVcXG4gIDI2OlxcdFxcdHNlbGVjdCBNVDc2X1VTQlxcbiAgMjc6XFx0XFxuICAyODpcXHRjb25maWcgTVQ3Nl9DT05OQUNfTElCXFxuICAyOTpcXHRcXHR0cmlzdGF0ZVxcbiAgMzA6XFx0XFx0c2VsZWN0IE1UNzZfQ09SRVxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgTVQ3OTJ4X0xJQlxcbiAgMzM6XFx0XFx0dHJpc3RhdGVcXG4gIDM0OlxcdFxcdHNlbGVjdCBNVDc2X0NPTk5BQ19MSUJcXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIE1UNzkyeF9VU0JcXG4gIDM3OlxcdFxcdHRyaXN0YXRlXFxuICAzODpcXHRcXHRzZWxlY3QgTVQ3Nl9VU0JcXG4gIDM5OlxcdFxcbiAgNDA6XFx0Y29uZmlnIE1UNzZfTlBVXFxuICA0MTpcXHRcXHR0cmlzdGF0ZVxcbiAgNDI6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQUlST0hBX05QVT15IHx8IE1UNzZfQ09SRT1ORVRfQUlST0hBX05QVVxcbiAgNDM6XFx0XFxuICA0NDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwL0tjb25maWdcXFwiXFxuICA0NTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngyL0tjb25maWdcXFwiXFxuICA0NjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL0tjb25maWdcXFwiXFxuICA0NzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L0tjb25maWdcXFwiXFxuICA0ODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L0tjb25maWdcXFwiXFxuICA0OTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL0tjb25maWdcXFwiXFxuICA1MDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L0tjb25maWdcXFwiXFxuICA1MTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI3OjUxLjI0NTQ1OTcyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzc2ODIzNzk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgTVQ3NjYzVSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHplcm9pbmcgaW4gb24gdGhpcyBgTVQ3NjYzVWAgY29uZmlndXJhdGlvbiDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VgIGZ1bmN0aW9uOyB0aGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuIE5vdywgYSBxdWljayBjaGVjay4uLiBpcyBgbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZWAgYSBzdGF0aWMgZnVuY3Rpb24/IE5vcGUsIGl0J3MgYWN0dWFsbHkgZXhwb3J0ZWQuIEV4Y2VsbGVudCwgdGhhdCBnaXZlcyBtZSBtb3JlIGZsZXhpYmlsaXR5LiBOb3csIGxldCdzIGhlYWQgb3ZlciB0byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNgLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VgIGRpcmVjdGx5IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiB0aGUgcmVzcG9uc2UgcGFyc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI1NiwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjA5LjAxMzcwMDkzOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM2NjU0MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM9MTMzPUVYUE9SVF9TWU1CT0xfR1BMKG10NzYxNV9tY3VfZmlsbF9tc2cpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEzNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoxMzU6aW50IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBpbnQgY21kLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jLTEzNi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTgyLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYzoxODM6RVhQT1JUX1NZTUJPTF9HUEwobXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMTg0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM9MTY5OD1pbnQgbXQ3NjE1X21jdV9pbml0KHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xNzAyLVxcdFxcdC5tY3Vfc2tiX3NlbmRfbXNnID0gbXQ3NjE1X21jdV9zZW5kX21lc3NhZ2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM6MTcwMzpcXHRcXHQubWN1X3BhcnNlX3Jlc3BvbnNlID0gbXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0xNzA0LVxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjA5Ljk1MDM2MTE2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM5ODUzNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMgaW4gdGhlIE1UNzYxNSBNQ1UgRHJpdmVyKipcblxuT2theSwgc28gYG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VgIGlzIGRlZmluaXRlbHkgbm90IGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gaXNvbGF0ZWQgY2FzZSwgb3IgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB0aGF0IGFyZW4ndCBzdGF0aWMuIExldCdzIHNlZS4uLiBBaGEhIGBtdDc2MTVfbWN1X2dldF90ZW1wZXJhdHVyZWAgYWxzbyBsb29rcyBsaWtlIGl0J3MgKm5vdCogc3RhdGljLiBSaWdodCwgdGhhdCBjYWxscyBmb3IgYSBkZWVwZXIgbG9vay4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyBpbiB0aGUgY29kZS4gTGV0J3MgZ28gY2hlY2sgdGhlIHNvdXJjZSBmaWxlIGZvciBgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVgLCBpdCBzaG91bGQgYmUgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCBhbmQgd2hhdCB0aGVpciBwb3RlbnRpYWwgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA5OCwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjE0LjI5MDIxODA4N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3ODAzNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmM9MjExNj1pbnQgbXQ3NjE1X21jdV9zZXRfY2hhbl9pbmZvKHN0cnVjdCBtdDc2MTVfcGh5ICpwaHksIGludCBjbWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuYy0yMTY4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jOjIxNjk6aW50IG10NzYxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBtdDc2MTVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmMtMjE3MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjE0LjM2NjAwNDY1NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU2NzE2ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVnVsbmVyYWJpbGl0eSdzIFNjb3BlKipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBpc3N1ZSwgd2hpY2ggaXMgZ29vZC4gVGhhdCBtZWFucyB3ZSBjYW4gemVybyBpbiBvbiB0aGUgYG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2VgIGFuZCBgbXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVgIGZ1bmN0aW9ucy4gVGhlIHRhcmdldCBjb25maWcgaXMgYE1UNzY2M1VgLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiB0aGUgTVQ3NjE1L01UNzY2MyB3aXJlbGVzcyBkcml2ZXIuIFRoZSByZWFzb25pbmcgbWFrZXMgc2Vuc2U6IHRoZSBwYXRjaCBpcyBmaWRkbGluZyB3aXRoIGhvdyB0aGUgTUNVIHJlc3BvbnNlIGlzIGhhbmRsZWQgZm9yIHRoZSBUSEVSTUFMX0NUUkwgY29tbWFuZC4gSXQncyBhY2Nlc3NpYmxlIHRocm91Z2ggVVNCIGVtdWxhdGlvbiDigJMgZHVtbXlfaGNkLCBnb3QgaXQg4oCTIHdoZW4gc29tZW9uZSByZWFkcyB0aGUgdGVtcGVyYXR1cmUgc3lzZnMgYXR0cmlidXRlLiBUaGF0J3MgYSBzb2xpZCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QuIExldCdzIHNlZS4uLiBgTVQ3NjYzVWAgc2hvdWxkIHNlbGVjdCBgTVQ3Nl9VU0JgLCBhbmQgYE1UNzY2M19VU0JfU0RJT19DT01NT05gLCB3aGljaCwgaW4gdHVybiwgc2VsZWN0cyBgTVQ3NjE1X0NPTU1PTmAuIFJpZ2h0LCBhbmQgYE1UNzYxNV9DT01NT05gIGJ1aWxkcyBgbWN1LmNgLiBUaGlzIGNvbmZpcm1zIHRoYXQgYWxsIHRoZSBwaWVjZXMgYXJlIGluIHBsYWNlIGFuZCB0aGF0IHRoZSBidWlsZCB0YXJnZXRzIHRoZSBjb2RlIHdlIGFyZSBpbnRlcmVzdGVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzNiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoyODoxOS4yMjI3MjQ4NDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLSQoQ09ORklHX01UNzYxNV9DT01NT04pICs9IG10NzYxNS1jb21tb24ub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX01UNzYxNUUpICs9IG10NzYxNWUub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX01UNzY2M19VU0JfU0RJT19DT01NT04pICs9IG10NzY2My11c2Itc2Rpby1jb21tb24ub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX01UNzY2M1UpICs9IG10NzY2M3Uub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX01UNzY2M1MpICs9IG10NzY2M3Mub1xcbiAgIDg6XFx0XFxuICAgOTpcXHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxcbiAgMTA6XFx0XFxuICAxMTpcXHRtdDc2MTUtY29tbW9uLXkgOj0gbWFpbi5vIGluaXQubyBtY3UubyBlZXByb20ubyBtYWMubyBcXFxcXFxuICAxMjpcXHRcXHRcXHQgICBkZWJ1Z2ZzLm8gdHJhY2Uub1xcbiAgMTM6XFx0bXQ3NjE1LWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSArPSB0ZXN0bW9kZS5vXFxuICAxNDpcXHRcXG4gIDE1OlxcdG10NzYxNWUteSA6PSBwY2kubyBwY2lfaW5pdC5vIGRtYS5vIHBjaV9tYWMubyBtbWlvLm9cXG4gIDE2OlxcdG10NzYxNWUtJChDT05GSUdfTVQ3NjIyX1dNQUMpICs9IHNvYy5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdG10NzY2My11c2Itc2Rpby1jb21tb24teSA6PSB1c2Jfc2Rpby5vXFxuICAxOTpcXHRtdDc2NjN1LXkgOj0gdXNiLm8gdXNiX21jdS5vXFxuICAyMDpcXHRtdDc2NjNzLXkgOj0gc2Rpby5vIHNkaW9fbWN1Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjg6MTkuMjIyNzg0NjU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzQxMDE5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS2NvbmZpZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYG1jdS5vYCAqaXMqIGJ1aWx0IHdoZW4gYENPTkZJR19NVDc2MTVfQ09NTU9OYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNlZSB0aGF0IGBDT05GSUdfTVQ3NjYzVWAgYWxzbyBzZWxlY3RzIGBDT05GSUdfTVQ3NjYzX1VTQl9TRElPX0NPTU1PTmAsIHdoaWNoIGluIHR1cm4gc2VsZWN0cyBgQ09ORklHX01UNzYxNV9DT01NT05gLiBTbywgYE1UNzY2M1VgICpzaG91bGQqIGJlIHRoZSBjb3JyZWN0IGNvbmZpZyB0byB1c2UuXG5cbkluaXRpYWxseSwgSSBjb25zaWRlcmVkIGFkZGluZyBgTUFDODAyMTFgIGFuZCBgVVNCYCBqdXN0IGFzIGEgYmVsdC1hbmQtc3VzcGVuZGVycyBhcHByb2FjaCwgeW91IGtub3csIHRvIGJlIGV4dHJhIHRob3JvdWdoLiBVc3VhbGx5IGp1c3QgbGlzdGluZyBgTVQ3NjYzVWAgaXMgc3VmZmljaWVudCwgYnV0IEkgZG8gbGlrZSB0byBhZGQgZGVwZW5kZW5jaWVzLiBUaGVzZSAqYXJlKiBmYWlybHkgc3RhbmRhcmQgZGVwZW5kZW5jaWVzLCBidXQgaXQncyBwcm9iYWJseSBiZXN0IHRvIGJlIGV4cGxpY2l0IGlmIHRoZXkgYXJlbid0IHN0YW5kYXJkLlxuXG5BaCwgd2FpdCBhIG1pbnV0ZS4uLiB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljOiBcIkFsc28gY2hlY2sgJ2RlcGVuZHMgb24nIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXguXCIgT2theSwgbm93IGl0J3MgY2xlYXIuIGBNQUM4MDIxMWAgYW5kIGBVU0JgICphcmUqIHBhcmVudCBzdWJzeXN0ZW1zLCBhbmQgSSBzaG91bGQgaW5jbHVkZSB0aGVtIHRvIGJlIHNhZmUuIEl0J3MgYmV0dGVyIHRvIGJlIGV4cGxpY2l0IHRoYW4gdG8gY2F1c2UgY29tcGlsYXRpb24gaXNzdWVzLlxuXG5SaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTk2LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjI2LjU1Njg4OTU2OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MTM2NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc2NjNVXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZVwiLFxuICAgIFwibXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUNVIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgZm9yIHRoZSBUSEVSTUFMX0NUUkwgY29tbWFuZCBpbiB0aGUgTWVkaWFUZWsgTVQ3NjE1L01UNzY2MyB3aXJlbGVzcyBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4gZHVtbXlfaGNkKSB3aGVuIHJlYWRpbmcgdGhlIHRlbXBlcmF0dXJlIHN5c2ZzIGF0dHJpYnV0ZSwgc28gaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc2NjNVXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3NjE1X21jdV9wYXJzZV9yZXNwb25zZVwiLFxuICAgIFwibXQ3NjE1X21jdV9nZXRfdGVtcGVyYXR1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUNVIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgZm9yIHRoZSBUSEVSTUFMX0NUUkwgY29tbWFuZCBpbiB0aGUgTWVkaWFUZWsgTVQ3NjE1L01UNzY2MyB3aXJlbGVzcyBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4gZHVtbXlfaGNkKSB3aGVuIHJlYWRpbmcgdGhlIHRlbXBlcmF0dXJlIHN5c2ZzIGF0dHJpYnV0ZSwgc28gaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjg6MjYuNjMzMDMyNzc2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMyMjk3NTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjI2LjYzMzY3NTMyNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODMyMjMyNzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgYW4gTUNVIHJlc3BvbnNlIGluIHRoZSBtdDc2MTUgd2lyZWxlc3MgZHJpdmVyIGJ5IHB1bGxpbmcgYW4gYWRkaXRpb25hbCA0IGJ5dGVzIGZyb20gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSBmb3IgTVQ3NjYzIGRldmljZXMgYmVmb3JlIHJlYWRpbmcgYSAzMi1iaXQgaW50ZWdlci4gVGhpcyBjaGFuZ2UgZGVhbHMgd2l0aCBza2lwcGluZyBwYWRkaW5nIG9yIGFuIGV4dHJhIGhlYWRlciBpbiB0aGUgZmlybXdhcmUgcmVzcG9uc2UuIElmIHRoZSBgc2tiYCBpcyB0b28gc21hbGwsIHRoaXMgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBkZXJlZmVyZW5jaW5nIGBza2ItXFx1MDAzZWRhdGFgLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb3B5aW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZSBkYXRhIGJlaW5nIHJlYWQgaXMgcHJvdmlkZWQgYnkgdGhlIGhhcmR3YXJlL2Zpcm13YXJlLCBhbmQgS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IGFueSBidWZmZXIgb3Zlci1yZWFkcyBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDIxZDI0OGYyYzI2YjEzN2NlZDM5YTc3NTY2ZDIyMmY5NTAwYWVhNzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAyMDoyNzoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L21jdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcbmluZGV4IGZmNTdlZGU4N2Y3MTcuLjFjZTAxOTJjMmM5MWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MTUvbWN1LmNcbkBAIC0xNTMsNiArMTUzLDggQEAgaW50IG10NzYxNV9tY3VfcGFyc2VfcmVzcG9uc2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBpbnQgY21kLFxuIFx0XHRyZXQgPSAqc2tiLVx1MDAzZWRhdGE7XG4gXHR9IGVsc2UgaWYgKGNtZCA9PSBNQ1VfRVhUX0NNRChUSEVSTUFMX0NUUkwpKSB7XG4gXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpKTtcbitcdFx0aWYgKGlzX210NzY2MyhtZGV2KSlcbitcdFx0XHRza2JfcHVsbChza2IsIDQpO1xuIFx0XHRyZXQgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXNrYi1cdTAwM2VkYXRhKTtcbiBcdH0gZWxzZSBpZiAoY21kID09IE1DVV9FWFRfUVVFUlkoUkZfUkVHX0FDQ0VTUykpIHtcbiBcdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKnJ4ZCkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6Mjg6MjYuNjMzNjc4OTM2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MzIyMjk5NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBNVDc2MTUgTUNVIFJlc3BvbnNlIFBhcnNpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9tY3UuY2AuIEl0J3MgbW9kaWZ5aW5nIGhvdyB3ZSBwYXJzZSBhIHJlc3BvbnNlIGZyb20gdGhlIE1DVSwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGBjbWRgIGlzIGBNQ1VfRVhUX0NNRChUSEVSTUFMX0NUUkwpYC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGFuIGV4dHJhIGBza2JfcHVsbChza2IsIDQpYCBjYWxsIGlmIHRoZSBkZXZpY2UgaXMgYW4gTVQ3NjYzLiBUaGlzIGlzIGRvbmUgYmVmb3JlIHJlYWRpbmcgYSAzMi1iaXQgaW50ZWdlci5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgcG90ZW50aWFsIGZvciBpc3N1ZXM/IFRoZSBtYWluIGNvbmNlcm4gaGVyZSBpcyB3aXRoIHRoZSBgc2tiX3B1bGxgIGZ1bmN0aW9uLiBJdCdzIGRlc2lnbmVkIHRvIGFkdmFuY2UgdGhlIGBza2ItXHUwMDNlZGF0YWAgcG9pbnRlciBhbmQgZGVjcmVhc2UgYHNrYi1cdTAwM2VsZW5gLiBJZiBgc2tiLVx1MDAzZWxlbmAgaXMgc21hbGxlciB0aGFuIHRoZSByZXF1ZXN0ZWQgcHVsbCBzaXplLCBpdCByZXR1cm5zIGBOVUxMYC4gIEltcG9ydGFudGx5LCB0aGUgY29kZSAqaWdub3JlcyogdGhlIHJldHVybiB2YWx1ZS4gTGV0J3Mgc2VlLi4uIGBza2JfcHVsbGAganVzdCByZXR1cm5zIE5VTEwgaWYgaXQgY2FuJ3QgcHVsbDsgaXQgKmRvZXNuJ3QqIG1vZGlmeSBgc2tiLVx1MDAzZWRhdGFgIGlmIGl0IHJldHVybnMgTlVMTC4gVGhhdCBtZWFucyBpZiB0aGUgU0tCIGlzIHRvbyBzaG9ydCwgd2UnbGwgc3RpbGwgdHJ5IHRvIGRlcmVmZXJlbmNlIGBza2ItXHUwMDNlZGF0YWAgaW4gdGhlIG5leHQgbGluZSwgbGVhZGluZyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgaXMgYSBjbGFzc2ljIGJ1ZmZlciBvdmVycmVhZCBzY2VuYXJpby5cblxuTm93LCBpcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgaGVyZT8gTm8sIHRoZSBkYXRhIGNvbWVzIGZyb20gdGhlIE1DVSwgZXNzZW50aWFsbHkgaGFyZHdhcmUvZmlybXdhcmUgdmlhIERNQSBpbnRvIHRoZSBTS0IuIFdoaWxlIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgaGFyZHdhcmUvZmlybXdhcmUgbWlnaHQgd3JpdGUgbGVzcyB0aGFuIGV4cGVjdGVkIChsZWF2aW5nIHNvbWUgbWVtb3J5IHVuaW5pdGlhbGl6ZWQpLCB0aGlzIGlzbid0IHRoZSBwcmltYXJ5IEtNU0FOIGNvbmNlcm4uIEluIG5ldHdvcmsgZHJpdmVycywgdGhlIFNLQnMgc2hvdWxkIGJlIHVucG9pc29uZWQsIGlmIHRoZSBkYXRhIGlzIG5vdCBmdWxseSBwb3B1bGF0ZWQgYnkgdGhlIGhhcmR3YXJlLiBLTVNBTiB3b3VsZG4ndCBiZSB0aGUgY29ycmVjdCB0b29sIHVubGVzcyB0aGlzIHdhcyBhIFVTQiBkcml2ZXIgd2hlcmUgdW5pbml0aWFsaXplZCBVUkIgYnVmZmVycyB3b3VsZCBiZSBleHBvc2VkLlxuXG5TbywgdGhlIGxpa2VseSBpc3N1ZSBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaWYgdGhlIFNLQiBpcyBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQuIEtBU0FOIGlzIHRoZSBjb3JyZWN0IHRvb2wgZm9yIHRoaXMuIEl0J2xsIGltbWVkaWF0ZWx5IGZsYWcgYW55IGF0dGVtcHQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuIEkgZG9uJ3Qgc2VlIGFueSBLTVNBTi1zcGVjaWZpYyBpc3N1ZS4gVGhpcyBwYXRjaCBpcyBqdXN0IHNraXBwaW5nIDQgYnl0ZXMgdGhhdCBhcmUgbGlrZWx5IHBhZGRpbmcgb3IgYSBoZWFkZXIuICBJdCdzIGp1c3QgYW4gYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyIG1hbmlwdWxhdGlvbi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgKmV4cG9zZWQqIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdyB3aGVyZSBLTVNBTiB3b3VsZCBiZSBwYXJ0aWN1bGFybHkgZWZmZWN0aXZlLiBUaGUgZGF0YSBpcyBjb21pbmcgZnJvbSB0aGUgZGV2aWNlLCBhbmQgS01TQU4gZG9lcyBub3QgdHJhY2sgdGhpcyBraW5kIG9mIGRhdGEgcHJvcGVybHkgdW5sZXNzIHRoZXJlJ3MgYW4gZXhwbGljaXQgY2FsbCB0byB1bnBvaXNvbiBvciBpZiBpdCdzIGEgVVNCIGRyaXZlciB3aGVyZSBLTVNBTiBtb25pdG9ycyB1bmluaXRpYWxpemVkIFVSQiBidWZmZXJzLiBCdXQgdGhpcyBpcyBtdDc2LiBObywgdGhlIERNQSBBUEkgaXMgcmVzcG9uc2libGUgZm9yIHBvaXNvbmluZy91bnBvaXNvbmluZy5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyBhbiBTS0IgaXMgcGFyc2VkLCBieSBza2lwcGluZyA0IGJ5dGVzIGZvciBNVDc2NjMuIFRoZSBwcmltYXJ5IHJpc2sgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBTS0IgaXMgdG9vIHNtYWxsLiBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkIGJlY2F1c2UgdGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGJlaW5nIHVzZWQgaW4gYSBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaCwgbm9yIGlzIHRoZXJlIGFueSBhbGxvY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNvcHlpbmcgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTgsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjI4OjQ0Ljk1NTk4MjY3N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgb2YgYW4gTUNVIHJlc3BvbnNlIGluIHRoZSBtdDc2MTUgd2lyZWxlc3MgZHJpdmVyIGJ5IHB1bGxpbmcgYW4gYWRkaXRpb25hbCA0IGJ5dGVzIGZyb20gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKSBmb3IgTVQ3NjYzIGRldmljZXMgYmVmb3JlIHJlYWRpbmcgYSAzMi1iaXQgaW50ZWdlci4gVGhpcyBjaGFuZ2UgZGVhbHMgd2l0aCBza2lwcGluZyBwYWRkaW5nIG9yIGFuIGV4dHJhIGhlYWRlciBpbiB0aGUgZmlybXdhcmUgcmVzcG9uc2UuIElmIHRoZSBgc2tiYCBpcyB0b28gc21hbGwsIHRoaXMgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBkZXJlZmVyZW5jaW5nIGBza2ItXFx1MDAzZWRhdGFgLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gYWxsb2NhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGlzIHRoZXJlIGFueSBjb3B5aW5nIG9mIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFRoZSBkYXRhIGJlaW5nIHJlYWQgaXMgcHJvdmlkZWQgYnkgdGhlIGhhcmR3YXJlL2Zpcm13YXJlLCBhbmQgS0FTQU4gaXMgdGhlIGFwcHJvcHJpYXRlIHRvb2wgdG8gZGV0ZWN0IGFueSBidWZmZXIgb3Zlci1yZWFkcyBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYXJzaW5nIG9mIGFuIE1DVSByZXNwb25zZSBpbiB0aGUgbXQ3NjE1IHdpcmVsZXNzIGRyaXZlciBieSBwdWxsaW5nIGFuIGFkZGl0aW9uYWwgNCBieXRlcyBmcm9tIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkgZm9yIE1UNzY2MyBkZXZpY2VzIGJlZm9yZSByZWFkaW5nIGEgMzItYml0IGludGVnZXIuIFRoaXMgY2hhbmdlIGRlYWxzIHdpdGggc2tpcHBpbmcgcGFkZGluZyBvciBhbiBleHRyYSBoZWFkZXIgaW4gdGhlIGZpcm13YXJlIHJlc3BvbnNlLiBJZiB0aGUgYHNrYmAgaXMgdG9vIHNtYWxsLCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gZGVyZWZlcmVuY2luZyBgc2tiLVxcdTAwM2VkYXRhYC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIGFsbG9jYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBpcyB0aGVyZSBhbnkgY29weWluZyBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBUaGUgZGF0YSBiZWluZyByZWFkIGlzIHByb3ZpZGVkIGJ5IHRoZSBoYXJkd2FyZS9maXJtd2FyZSwgYW5kIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIHRvIGRldGVjdCBhbnkgYnVmZmVyIG92ZXItcmVhZHMgaGVyZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96p9[1] Phase: Succeeded StartedAt: 2026-08-19 20:29:10 +0000 UTC FinishedAt: 2026-08-19 20:29:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 20:29:10 +0000 UTC FinishedAt: 2026-08-19 20:29:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2] Phase: Succeeded StartedAt: 2026-08-19 20:29:10 +0000 UTC FinishedAt: 2026-08-19 21:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-19 20:29:10 +0000 UTC FinishedAt: 2026-08-19 21:10:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-19 20:29:10 +0000 UTC FinishedAt: 2026-08-19 20:29:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-19 20:29:10 +0000 UTC FinishedAt: 2026-08-19 20:29:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96p9/series-workflowd96p9-convert-artifact-1640738113/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-19 20:29:21 +0000 UTC FinishedAt: 2026-08-19 20:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-19 20:29:21 +0000 UTC FinishedAt: 2026-08-19 20:49: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:*48b64dda-986b-4b59-82ed-85480d4c4163,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-workflowd96p9/series-workflowd96p9-convert-artifact-1640738113/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": "558c9ca9-4ce6-4fbb-9bc1-de170d98e758", "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-workflowd96p9/series-workflowd96p9-build-action-467194735/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-19 20:29:21 +0000 UTC FinishedAt: 2026-08-19 20:48:58 +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:*48b64dda-986b-4b59-82ed-85480d4c4163,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-workflowd96p9/series-workflowd96p9-convert-artifact-1640738113/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": "558c9ca9-4ce6-4fbb-9bc1-de170d98e758", "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-workflowd96p9/series-workflowd96p9-build-action-467194735/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-19 20:49:08 +0000 UTC FinishedAt: 2026-08-19 20:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-19 20:49:08 +0000 UTC FinishedAt: 2026-08-19 20:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-19 20:49:08 +0000 UTC FinishedAt: 2026-08-19 20:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-19 20:49:08 +0000 UTC FinishedAt: 2026-08-19 20:49:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96p9/series-workflowd96p9-convert-artifact-2078893844/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-19 20:49:18 +0000 UTC FinishedAt: 2026-08-19 20:51:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-19 20:49:18 +0000 UTC FinishedAt: 2026-08-19 20:50:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*558c9ca9-4ce6-4fbb-9bc1-de170d98e758,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-workflowd96p9/series-workflowd96p9-build-action-467194735/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-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-19 20:51:07 +0000 UTC FinishedAt: 2026-08-19 20:51:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-19 20:51:07 +0000 UTC FinishedAt: 2026-08-19 20:51:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-19 20:51:07 +0000 UTC FinishedAt: 2026-08-19 21:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-19 20:51:07 +0000 UTC FinishedAt: 2026-08-19 21:08:00 +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:*48b64dda-986b-4b59-82ed-85480d4c4163,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-workflowd96p9/series-workflowd96p9-convert-artifact-2078893844/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": "fef45058-692c-400c-a439-024cac85095c", "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-workflowd96p9/series-workflowd96p9-build-action-4046573536/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-19 20:51:07 +0000 UTC FinishedAt: 2026-08-19 21:07:50 +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:*48b64dda-986b-4b59-82ed-85480d4c4163,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-workflowd96p9/series-workflowd96p9-convert-artifact-2078893844/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": "fef45058-692c-400c-a439-024cac85095c", "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-workflowd96p9/series-workflowd96p9-build-action-4046573536/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-19 21:08:00 +0000 UTC FinishedAt: 2026-08-19 21:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-19 21:08:00 +0000 UTC FinishedAt: 2026-08-19 21:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-19 21:08:00 +0000 UTC FinishedAt: 2026-08-19 21:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-19 21:08:00 +0000 UTC FinishedAt: 2026-08-19 21:09:26 +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:*fef45058-692c-400c-a439-024cac85095c,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-workflowd96p9/series-workflowd96p9-build-action-4046573536/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-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-19 21:09:36 +0000 UTC FinishedAt: 2026-08-19 21:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-19 21:09:36 +0000 UTC FinishedAt: 2026-08-19 21:10:52 +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":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"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:*558c9ca9-4ce6-4fbb-9bc1-de170d98e758,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fef45058-692c-400c-a439-024cac85095c,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-workflowd96p9/series-workflowd96p9-build-action-467194735/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-workflowd96p9/series-workflowd96p9-build-action-4046573536/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-19 21:09:36 +0000 UTC FinishedAt: 2026-08-19 21:09:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-19 21:09:36 +0000 UTC FinishedAt: 2026-08-19 21:09:42 +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":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"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-workflowd96p9/series-workflowd96p9-convert-artifact-2969594685/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-19 21:09:36 +0000 UTC FinishedAt: 2026-08-19 21:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-19 21:09:36 +0000 UTC FinishedAt: 2026-08-19 21:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-19 21:09:36 +0000 UTC FinishedAt: 2026-08-19 21:09:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-19 21:09:46 +0000 UTC FinishedAt: 2026-08-19 21:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96p9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7615_mcu_parse_response","mt7615_mcu_get_temperature"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7663U","MAC80211","USB"],"series_id":"4331cc6e-07d5-4651-bd71-833ec517fd8e","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-19 21:09:46 +0000 UTC FinishedAt: 2026-08-19 21:10:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*558c9ca9-4ce6-4fbb-9bc1-de170d98e758,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fef45058-692c-400c-a439-024cac85095c,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-workflowd96p9/series-workflowd96p9-build-action-467194735/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-workflowd96p9/series-workflowd96p9-build-action-4046573536/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-workflowd96p9/series-workflowd96p9-convert-artifact-2969594685/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,}