Name: series-workflowldxt4 Phase: Succeeded StartedAt: 2026-08-10 02:07:57 +0000 UTC FinishedAt: 2026-08-10 03:06:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[0] Phase: Succeeded StartedAt: 2026-08-10 02:07:57 +0000 UTC FinishedAt: 2026-08-10 02:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 02:07:57 +0000 UTC FinishedAt: 2026-08-10 02:26:13 +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": [ "MT7925U", "MAC80211", "USB", "DEBUG_FS" ], "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": [ "MT7925U", "MAC80211", "USB", "DEBUG_FS" ], "series_id": "b4657700-aa69-472b-a5ed-bd2a9c0d5811" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mt7925_mcu_chip_config_query", "mt7925_coex_info" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01UNzkyNVUmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeSYjMzQ7LAogICAgJiMzNDttdDc5MjVfY29leF9pbmZvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGVudHJ5IGBjb2V4X2luZm9gIGFuZCBhIGZ1bmN0aW9uIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCB0byBxdWVyeSB0aGUgTUNVLiBUaGUgbG9jYWwgYHJlcWAgc3RydWN0dXJlIHVzZWQgdG8gc2VuZCB0aGUgcXVlcnkgaXMgcGFydGlhbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJ1Y3QgaW5pdGlhbGl6ZXIsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgY29tcGlsZXIgemVyby1pbml0aWFsaXplcyBhbGwgcmVtYWluaW5nIGZpZWxkcyBhbmQgcGFkZGluZy4gVGhlIGByZXNwYCBidWZmZXIgYW5kIGByZXNwX3R5cGVgIHZhcmlhYmxlIGFyZSBwb3B1bGF0ZWQgYnkgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBUaGUgZnVuY3Rpb24gY29ycmVjdGx5IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgaW50byBgcmVzcGAsIGFuZCB0aGUgY2FsbGVyIGBtdDc5MjVfY29leF9pbmZvYCBvbmx5IHJlYWRzIGV4YWN0bHkgdGhhdCBtYW55IGJ5dGVzLiBgcmVzcF90eXBlYCBpcyBhbHNvIG9ubHkgYWNjZXNzZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvc2l0aXZlIGxlbmd0aCwgbWVhbmluZyBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LCBzZW50IHRvIHRoZSBkZXZpY2UsIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb25zLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZGVidWdmcyBpbnRlcmZhY2UgdGhhdCB0cmlnZ2VycyBhbiBNQ1UgY29tbWFuZCBhbmQgcGFyc2VzIHRoZSByZXNwb25zZS4gVGhlIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgaW4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIHByb2Nlc3NlcyB1bnRydXN0ZWQgZGF0YSBmcm9tIHRoZSBoYXJkd2FyZSAod2hpY2ggY2FuIGJlIGVtdWxhdGVkIHZpYSBVU0IgZ2FkZ2V0IGluIHN5emthbGxlcikgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJvYnVzdG5lc3MgYWdhaW5zdCBtYWxmb3JtZWQgVExWcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM0ODJhODlhNWRlMWUxZjEzYjVjOWI2ZmFmNzFlZjYwNWJlZmNkYzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMjoyMjozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcbmluZGV4IGQwMWZmNDlkZTQ3YWYuLjlhNWVhMTJiNzZjNzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xuQEAgLTI4Niw2ICYjNDM7Mjg2LDM0IEBAIHN0YXRpYyBpbnQgbXQ3OTI1X2NoaXBfcmVzZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiBcbiBERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoZm9wc19yZXNldCwgTlVMTCwgbXQ3OTI1X2NoaXBfcmVzZXQsIFwmIzM0OyVsbGRcXG5cJiMzNDspO1xuIFxuJiM0MztzdGF0aWMgaW50XG4mIzQzO210NzkyNV9jb2V4X2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzOyNkZWZpbmUgTVQ3OTI1X0NISVBfQ09ORklHX1JFU1BfU0laRVx0MzIwXG4mIzQzO1x0c3RydWN0IG10NzkyeF9kZXYgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShzLVx1MDAzZXByaXZhdGUpO1xuJiM0MztcdHU4IHJlc3BbTVQ3OTI1X0NISVBfQ09ORklHX1JFU1BfU0laRV0sIHJlc3BfdHlwZTtcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcbiYjNDM7XHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xuJiM0MztcdHJldCA9IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoZGV2LCBcJiMzNDtjb2V4QndjR2V0TW9kZUluZm8gMFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNnJlc3BfdHlwZSwgcmVzcCwgc2l6ZW9mKHJlc3ApKTtcbiYjNDM7XHRtdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRzZXFfcHV0cyhzLCBcJiMzNDtubyByZXBseVxcblwmIzM0Oyk7XG4mIzQzO1x0ZWxzZSBpZiAocmVzcF90eXBlID09IENISVBfQ09ORklHX1RZUEVfQVNDSUkpXG4mIzQzO1x0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUuKnNcXG5cJiMzNDssIHJldCwgcmVzcCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmV0OyBpICYjNDM7PSAxNilcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslMDR4OiAlKnBoXFxuXCYjMzQ7LCBpLFxuJiM0MztcdFx0XHRcdCAgIG1pbl90KGludCwgMTYsIHJldCAtIGkpLCByZXNwICYjNDM7IGkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbXQ3OTI1X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCBkZW50cnkgKmRpcjtcbkBAIC0zMDksNiAmIzQzOzMzNyw4IEBAIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2lkbGUtdGltZW91dFwmIzM0OywgMDYwMCwgZGlyLCBkZXYsXG4gXHRcdFx0ICAgIFx1MDAyNmZvcHNfcG1faWRsZV90aW1lb3V0KTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7Y2hpcF9yZXNldFwmIzM0OywgMDYwMCwgZGlyLCBkZXYsIFx1MDAyNmZvcHNfcmVzZXQpO1xuJiM0MztcdGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtXHUwMDNlbXQ3Ni5kZXYsIFwmIzM0O2NvZXhfaW5mb1wmIzM0OywgZGlyLFxuJiM0MztcdFx0XHRcdCAgICBtdDc5MjVfY29leF9pbmZvKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtXHUwMDNlbXQ3Ni5kZXYsIFwmIzM0O3J1bnRpbWVfcG1fc3RhdHNcJiMzNDssIGRpcixcbiBcdFx0XHRcdCAgICBtdDc5MnhfcG1fc3RhdHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtkZWVwLXNsZWVwXCYjMzQ7LCAwNjAwLCBkaXIsIGRldiwgXHUwMDI2Zm9wc19kcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuY1xuaW5kZXggZmEyOWM0ODZhNDU1My4uZTYzMTZjZWExODY1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuY1xuQEAgLTExNjAsNiAmIzQzOzExNjAsODEgQEAgaW50IG10NzkyNV9tY3VfY2hpcF9jb25maWcoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kKVxuIFx0XHRcdFx0IFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIGZhbHNlKTtcbiB9XG4gXG4mIzQzO2ludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCxcbiYjNDM7XHRcdFx0XHQgdTggKnJlc3BfdHlwZSwgdm9pZCAqcmVzcCwgdTE2IHJlc3Bfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHUxNiBsZW4gPSBzdHJsZW4oY21kKTtcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0dTggX3Jzdls0XTtcbiYjNDM7XHRcdF9fbGUxNiB0YWc7XG4mIzQzO1x0XHRfX2xlMTYgbGVuO1xuJiM0MztcdFx0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyBjb25maWc7XG4mIzQzO1x0fSBfX3BhY2tlZCByZXEgPSB7XG4mIzQzO1x0XHQudGFnID0gY3B1X3RvX2xlMTYoVU5JX0NISVBfQ09ORklHX0NISVBfQ0ZHKSxcbiYjNDM7XHRcdC5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIDQpLFxuJiM0MztcdFx0LmNvbmZpZyA9IHtcbiYjNDM7XHRcdFx0LnJlc3BfdHlwZSA9IDAsXG4mIzQzO1x0XHRcdC50eXBlID0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSxcbiYjNDM7XHRcdFx0LmRhdGFfc2l6ZSA9IGNwdV90b19sZTE2KGxlbiksXG4mIzQzO1x0XHR9LFxuJiM0MztcdH07XG4mIzQzO1x0Y29uc3QgdTE2IGhkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHRsdikgJiM0MztcbiYjNDM7XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcsIGRhdGEpO1xuJiM0MztcdHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKmNmZztcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghbGVuIHx8IGxlbiBcdTAwM2U9IHNpemVvZihyZXEuY29uZmlnLmRhdGEpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG1lbWNweShyZXEuY29uZmlnLmRhdGEsIGNtZCwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9RVUVSWShDSElQX0NPTkZJRyksXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBza2lwIHRoZSBmaXhlZCBmaWVsZCBvZiB0aGUgZXZlbnQsIHRoZSBUTFZzIGZvbGxvdyBpdCAqL1xuJiM0MztcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyA0KSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdHNrYl9wdWxsKHNrYiwgNCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IC1FTk9FTlQ7XG4mIzQzO1x0d2hpbGUgKHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IHRsdikpIHtcbiYjNDM7XHRcdHN0cnVjdCB0bHYgKnRsdiA9IChzdHJ1Y3QgdGx2ICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1x0XHR1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KHRsdi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0dTE2IGRhdGFfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGx2X2xlbiBcdTAwM2Mgc2l6ZW9mKCp0bHYpIHx8IHRsdl9sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChsZTE2X3RvX2NwdSh0bHYtXHUwMDNldGFnKSAhPSBVTklfQ0hJUF9DT05GSUdfQ0hJUF9DRkcpIHtcbiYjNDM7XHRcdFx0c2tiX3B1bGwoc2tiLCB0bHZfbGVuKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRsdl9sZW4gXHUwMDNjIGhkcl9sZW4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGNmZyA9IChzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICopdGx2LVx1MDAzZWRhdGE7XG4mIzQzO1x0XHRkYXRhX3NpemUgPSBsZTE2X3RvX2NwdShjZmctXHUwMDNlZGF0YV9zaXplKTtcbiYjNDM7XHRcdGlmIChkYXRhX3NpemUgXHUwMDNlIHRsdl9sZW4gLSBoZHJfbGVuKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQqcmVzcF90eXBlID0gY2ZnLVx1MDAzZXJlc3BfdHlwZTtcbiYjNDM7XHRcdHJldCA9IG1pbl90KHUxNiwgZGF0YV9zaXplLCByZXNwX3NpemUpO1xuJiM0MztcdFx0bWVtY3B5KHJlc3AsIGNmZy1cdTAwM2VkYXRhLCByZXQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbXQ3OTI1X21jdV9zZXRfZGVlcF9zbGVlcChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBib29sIGVuYWJsZSlcbiB7XG4gXHRjaGFyIGNtZFsxNl07XG5AQCAtMzc3Miw3ICYjNDM7Mzg0Nyw4IEBAIGludCBtdDc5MjVfbWN1X2ZpbGxfbWVzc2FnZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0dW5pX3R4ZC1cdTAwM2VvcHRpb24gPSBNQ1VfQ01EX1VOSV9FWFRfQUNLO1xuIFxuIFx0XHRpZiAoY21kID09IE1DVV9VTklfQ01EKEhJRl9DVFJMKSB8fFxuLVx0XHQgICAgY21kID09IE1DVV9VTklfQ01EKENISVBfQ09ORklHKSlcbiYjNDM7XHRcdCAgICBjbWQgPT0gTUNVX1VOSV9DTUQoQ0hJUF9DT05GSUcpIHx8XG4mIzQzO1x0XHQgICAgY21kID09IE1DVV9VTklfUVVFUlkoQ0hJUF9DT05GSUcpKVxuIFx0XHRcdHVuaV90eGQtXHUwMDNlb3B0aW9uIFx1MDAyNj0gfk1DVV9DTURfQUNLO1xuIFxuIFx0XHRpZiAobWN1X2NtZCA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMIHx8XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaFxuaW5kZXggMTFmOWVhYzEzZmZjNi4uMmNmMzk3MWQ5ODUzYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaFxuQEAgLTExOSw2ICYjNDM7MTE5LDE1IEBAIGVudW0ge1xuIFx0VU5JX0NISVBfQ09ORklHX05JQ19DQVBBID0gMHgzLFxuIH07XG4gXG4mIzQzOy8qIHR5cGUvcmVzcF90eXBlIG9mIHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKi9cbiYjNDM7ZW51bSB7XG4mIzQzO1x0Q0hJUF9DT05GSUdfVFlQRV9XT19SRVNQT05TRSxcbiYjNDM7XHRDSElQX0NPTkZJR19UWVBFX01FTTgsXG4mIzQzO1x0Q0hJUF9DT05GSUdfVFlQRV9NRU0zMixcbiYjNDM7XHRDSElQX0NPTkZJR19UWVBFX0FTQ0lJLFxuJiM0MztcdENISVBfQ09ORklHX1RZUEVfQklOQVJZLFxuJiM0Mzt9O1xuJiM0MztcbiBlbnVtIHtcbiBcdFVOSV9CQU5EX0NPTkZJR19SQURJT19FTkFCTEUsXG4gXHRVTklfQkFORF9DT05GSUdfUlRTX1RIUkVTSE9MRCA9IDB4MDgsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaFxuaW5kZXggMzIxZTczMjM0N2YyZi4uZDBkYjVkOGRhZTQ4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaFxuQEAgLTI5NSw2ICYjNDM7Mjk1LDggQEAgaW50IG10NzkyNV9tY3VfZ2V0X3J4X3JhdGUoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBpbnQgbXQ3OTI1X21jdV9md19sb2dfMl9ob3N0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGN0cmwpO1xuIHZvaWQgbXQ3OTI1X21jdV9yeF9ldmVudChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpO1xuJiM0MztpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQsXG4mIzQzO1x0XHRcdFx0IHU4ICpyZXNwX3R5cGUsIHZvaWQgKnJlc3AsIHUxNiByZXNwX3NpemUpO1xuIGludCBtdDc5MjVfbWN1X3NldF9yeGZpbHRlcihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MzIgZmlmLFxuIFx0XHRcdCAgICB1OCBiaXRfb3AsIHUzMiBiaXRfbWFwKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVQ3OTI1VSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5JiMzNDssCiAgICAmIzM0O210NzkyNV9jb2V4X2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGRlYnVnZnMgaW50ZXJmYWNlIHRoYXQgdHJpZ2dlcnMgYW4gTUNVIGNvbW1hbmQgYW5kIHBhcnNlcyB0aGUgcmVzcG9uc2UuIFRoZSByZXNwb25zZSBwYXJzaW5nIGxvZ2ljIGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBwcm9jZXNzZXMgdW50cnVzdGVkIGRhdGEgZnJvbSB0aGUgaGFyZHdhcmUgKHdoaWNoIGNhbiBiZSBlbXVsYXRlZCB2aWEgVVNCIGdhZGdldCBpbiBzeXprYWxsZXIpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSByb2J1c3RuZXNzIGFnYWluc3QgbWFsZm9ybWVkIFRMVnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNDgyYTg5YTVkZTFlMWYxM2I1YzliNmZhZjcxZWY2MDViZWZjZGM2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMDI6MjI6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMKaW5kZXggZDAxZmY0OWRlNDdhZi4uOWE1ZWExMmI3NmM3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuYwpAQCAtMjg2LDYgJiM0MzsyODYsMzQgQEAgc3RhdGljIGludCBtdDc5MjVfY2hpcF9yZXNldCh2b2lkICpkYXRhLCB1NjQgdmFsKQogCiBERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoZm9wc19yZXNldCwgTlVMTCwgbXQ3OTI1X2NoaXBfcmVzZXQsICYjMzQ7JWxsZFxuJiMzNDspOwogCiYjNDM7c3RhdGljIGludAomIzQzO210NzkyNV9jb2V4X2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsjZGVmaW5lIE1UNzkyNV9DSElQX0NPTkZJR19SRVNQX1NJWkUJMzIwCiYjNDM7CXN0cnVjdCBtdDc5MnhfZGV2ICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocy0mZ3Q7cHJpdmF0ZSk7CiYjNDM7CXU4IHJlc3BbTVQ3OTI1X0NISVBfQ09ORklHX1JFU1BfU0laRV0sIHJlc3BfdHlwZTsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJbXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTsKJiM0MzsJcmV0ID0gbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShkZXYsICYjMzQ7Y29leEJ3Y0dldE1vZGVJbmZvIDAmIzM0OywKJiM0MzsJCQkJCSAgICZhbXA7cmVzcF90eXBlLCByZXNwLCBzaXplb2YocmVzcCkpOwomIzQzOwltdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJc2VxX3B1dHMocywgJiMzNDtubyByZXBseVxuJiMzNDspOwomIzQzOwllbHNlIGlmIChyZXNwX3R5cGUgPT0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSkKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDslLipzXG4mIzM0OywgcmV0LCByZXNwKTsKJiM0MzsJZWxzZQomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHJldDsgaSAmIzQzOz0gMTYpCiYjNDM7CQkJc2VxX3ByaW50ZihzLCAmIzM0OyUwNHg6ICUqcGhcbiYjMzQ7LCBpLAomIzQzOwkJCQkgICBtaW5fdChpbnQsIDE2LCByZXQgLSBpKSwgcmVzcCAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IG10NzkyNV9pbml0X2RlYnVnZnMoc3RydWN0IG10NzkyeF9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkaXI7CkBAIC0zMDksNiAmIzQzOzMzNyw4IEBAIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpCiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O2lkbGUtdGltZW91dCYjMzQ7LCAwNjAwLCBkaXIsIGRldiwKIAkJCSAgICAmYW1wO2ZvcHNfcG1faWRsZV90aW1lb3V0KTsKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7Y2hpcF9yZXNldCYjMzQ7LCAwNjAwLCBkaXIsIGRldiwgJmFtcDtmb3BzX3Jlc2V0KTsKJiM0MzsJZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi0mZ3Q7bXQ3Ni5kZXYsICYjMzQ7Y29leF9pbmZvJiMzNDssIGRpciwKJiM0MzsJCQkJICAgIG10NzkyNV9jb2V4X2luZm8pOwogCWRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtJmd0O210NzYuZGV2LCAmIzM0O3J1bnRpbWVfcG1fc3RhdHMmIzM0OywgZGlyLAogCQkJCSAgICBtdDc5MnhfcG1fc3RhdHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtkZWVwLXNsZWVwJiMzNDssIDA2MDAsIGRpciwgZGV2LCAmYW1wO2ZvcHNfZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYwppbmRleCBmYTI5YzQ4NmE0NTUzLi5lNjMxNmNlYTE4NjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYwpAQCAtMTE2MCw2ICYjNDM7MTE2MCw4MSBAQCBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpCiAJCQkJICZhbXA7cmVxLCBzaXplb2YocmVxKSwgZmFsc2UpOwogfQogCiYjNDM7aW50IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kLAomIzQzOwkJCQkgdTggKnJlc3BfdHlwZSwgdm9pZCAqcmVzcCwgdTE2IHJlc3Bfc2l6ZSkKJiM0Mzt7CiYjNDM7CXUxNiBsZW4gPSBzdHJsZW4oY21kKTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXU4IF9yc3ZbNF07CiYjNDM7CQlfX2xlMTYgdGFnOwomIzQzOwkJX19sZTE2IGxlbjsKJiM0MzsJCXN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgY29uZmlnOwomIzQzOwl9IF9fcGFja2VkIHJlcSA9IHsKJiM0MzsJCS50YWcgPSBjcHVfdG9fbGUxNihVTklfQ0hJUF9DT05GSUdfQ0hJUF9DRkcpLAomIzQzOwkJLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihyZXEpIC0gNCksCiYjNDM7CQkuY29uZmlnID0gewomIzQzOwkJCS5yZXNwX3R5cGUgPSAwLAomIzQzOwkJCS50eXBlID0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSwKJiM0MzsJCQkuZGF0YV9zaXplID0gY3B1X3RvX2xlMTYobGVuKSwKJiM0MzsJCX0sCiYjNDM7CX07CiYjNDM7CWNvbnN0IHUxNiBoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB0bHYpICYjNDM7CiYjNDM7CQkJICAgIG9mZnNldG9mKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcsIGRhdGEpOwomIzQzOwlzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICpjZmc7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghbGVuIHx8IGxlbiAmZ3Q7PSBzaXplb2YocmVxLmNvbmZpZy5kYXRhKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltZW1jcHkocmVxLmNvbmZpZy5kYXRhLCBjbWQsIGxlbik7CiYjNDM7CiYjNDM7CXJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coJmFtcDtkZXYtJmd0O210NzYsIE1DVV9VTklfUVVFUlkoQ0hJUF9DT05GSUcpLAomIzQzOwkJCQkJJmFtcDtyZXEsIHNpemVvZihyZXEpLCB0cnVlLCAmYW1wO3NrYik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBza2lwIHRoZSBmaXhlZCBmaWVsZCBvZiB0aGUgZXZlbnQsIHRoZSBUTFZzIGZvbGxvdyBpdCAqLwomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0OyA0KSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJc2tiX3B1bGwoc2tiLCA0KTsKJiM0MzsKJiM0MzsJcmV0ID0gLUVOT0VOVDsKJiM0MzsJd2hpbGUgKHNrYi0mZ3Q7bGVuICZndDs9IHNpemVvZihzdHJ1Y3QgdGx2KSkgewomIzQzOwkJc3RydWN0IHRsdiAqdGx2ID0gKHN0cnVjdCB0bHYgKilza2ItJmd0O2RhdGE7CiYjNDM7CQl1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KHRsdi0mZ3Q7bGVuKTsKJiM0MzsJCXUxNiBkYXRhX3NpemU7CiYjNDM7CiYjNDM7CQlpZiAodGx2X2xlbiAmbHQ7IHNpemVvZigqdGx2KSB8fCB0bHZfbGVuICZndDsgc2tiLSZndDtsZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAobGUxNl90b19jcHUodGx2LSZndDt0YWcpICE9IFVOSV9DSElQX0NPTkZJR19DSElQX0NGRykgewomIzQzOwkJCXNrYl9wdWxsKHNrYiwgdGx2X2xlbik7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAodGx2X2xlbiAmbHQ7IGhkcl9sZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQljZmcgPSAoc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqKXRsdi0mZ3Q7ZGF0YTsKJiM0MzsJCWRhdGFfc2l6ZSA9IGxlMTZfdG9fY3B1KGNmZy0mZ3Q7ZGF0YV9zaXplKTsKJiM0MzsJCWlmIChkYXRhX3NpemUgJmd0OyB0bHZfbGVuIC0gaGRyX2xlbikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCSpyZXNwX3R5cGUgPSBjZmctJmd0O3Jlc3BfdHlwZTsKJiM0MzsJCXJldCA9IG1pbl90KHUxNiwgZGF0YV9zaXplLCByZXNwX3NpemUpOwomIzQzOwkJbWVtY3B5KHJlc3AsIGNmZy0mZ3Q7ZGF0YSwgcmV0KTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlkZXZfa2ZyZWVfc2tiKHNrYik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogaW50IG10NzkyNV9tY3Vfc2V0X2RlZXBfc2xlZXAoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgYm9vbCBlbmFibGUpCiB7CiAJY2hhciBjbWRbMTZdOwpAQCAtMzc3Miw3ICYjNDM7Mzg0Nyw4IEBAIGludCBtdDc5MjVfbWN1X2ZpbGxfbWVzc2FnZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQl1bmlfdHhkLSZndDtvcHRpb24gPSBNQ1VfQ01EX1VOSV9FWFRfQUNLOwogCiAJCWlmIChjbWQgPT0gTUNVX1VOSV9DTUQoSElGX0NUUkwpIHx8Ci0JCSAgICBjbWQgPT0gTUNVX1VOSV9DTUQoQ0hJUF9DT05GSUcpKQomIzQzOwkJICAgIGNtZCA9PSBNQ1VfVU5JX0NNRChDSElQX0NPTkZJRykgfHwKJiM0MzsJCSAgICBjbWQgPT0gTUNVX1VOSV9RVUVSWShDSElQX0NPTkZJRykpCiAJCQl1bmlfdHhkLSZndDtvcHRpb24gJmFtcDs9IH5NQ1VfQ01EX0FDSzsKIAogCQlpZiAobWN1X2NtZCA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oCmluZGV4IDExZjllYWMxM2ZmYzYuLjJjZjM5NzFkOTg1M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oCkBAIC0xMTksNiAmIzQzOzExOSwxNSBAQCBlbnVtIHsKIAlVTklfQ0hJUF9DT05GSUdfTklDX0NBUEEgPSAweDMsCiB9OwogCiYjNDM7LyogdHlwZS9yZXNwX3R5cGUgb2Ygc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqLwomIzQzO2VudW0gewomIzQzOwlDSElQX0NPTkZJR19UWVBFX1dPX1JFU1BPTlNFLAomIzQzOwlDSElQX0NPTkZJR19UWVBFX01FTTgsCiYjNDM7CUNISVBfQ09ORklHX1RZUEVfTUVNMzIsCiYjNDM7CUNISVBfQ09ORklHX1RZUEVfQVNDSUksCiYjNDM7CUNISVBfQ09ORklHX1RZUEVfQklOQVJZLAomIzQzO307CiYjNDM7CiBlbnVtIHsKIAlVTklfQkFORF9DT05GSUdfUkFESU9fRU5BQkxFLAogCVVOSV9CQU5EX0NPTkZJR19SVFNfVEhSRVNIT0xEID0gMHgwOCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmgKaW5kZXggMzIxZTczMjM0N2YyZi4uZDBkYjVkOGRhZTQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmgKQEAgLTI5NSw2ICYjNDM7Mjk1LDggQEAgaW50IG10NzkyNV9tY3VfZ2V0X3J4X3JhdGUoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIGludCBtdDc5MjVfbWN1X2Z3X2xvZ18yX2hvc3Qoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggY3RybCk7CiB2b2lkIG10NzkyNV9tY3VfcnhfZXZlbnQoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpOwomIzQzO2ludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCwKJiM0MzsJCQkJIHU4ICpyZXNwX3R5cGUsIHZvaWQgKnJlc3AsIHUxNiByZXNwX3NpemUpOwogaW50IG10NzkyNV9tY3Vfc2V0X3J4ZmlsdGVyKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHUzMiBmaWYsCiAJCQkgICAgdTggYml0X29wLCB1MzIgYml0X21hcCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1UNzkyNSBDb2V4aXN0ZW5jZSBJbmZvcm1hdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbml0aWFsbHkuIEl0IGFkZHMgYSBgY29leF9pbmZvYCBkZWJ1Z2ZzIGZpbGUgd2l0aGluIHRoZSBtdDc5MjUgd2lyZWxlc3MgZHJpdmVyLCBjcmVhdGVkIHVzaW5nIGBkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGVgLiBUaGUgYWN0dWFsIGRhdGEgaXMgZ2VuZXJhdGVkIGJ5IGBtdDc5MjVfY29leF9pbmZvYCwgd2hpY2ggY2FsbHMgdGhpcyBuZXcgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIHRoZSBrZXksIGl0JiMzOTtzIHRoZSBvbmUgc2VuZGluZyBhbiBNQ1UgY29tbWFuZCwgc3BlY2lmaWNhbGx5IGBNQ1VfVU5JX1FVRVJZKENISVBfQ09ORklHKWAsIGFuZCB0aGVuIHBhcnNpbmcgdGhlIHJlc3BvbnNlLiBJdCBhbGwgbG9va3MgY2xlYW4gYXQgZmlyc3QgZ2xhbmNlLCB3ZWxsLXN0cnVjdHVyZWQuCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uIHBvcHMgaW50byBteSBtaW5kOiBDYW4gSSBhY3R1YWxseSB0ZXN0IHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIE1UNzkyNSBkcml2ZXIgaXMgdXN1YWxseSBmb3IgUENJZSBvciBVU0Igd2lyZWxlc3MgY2FyZHMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyeSBwcm9iaW5nIGl0IGluIFFFTVUuIEJ1dCB0aGVuIEkgcXVpY2tseSByZW1lbWJlciwgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoYXQgc3BlY2lmaWMgTVQ3OTI1IGhhcmR3YXJlLiBTbywgdGhhdCYjMzk7cyBhIGRlYWQgZW5kLgoKV2FpdCBhIG1pbnV0ZSwgZG9lcyB0aGUgZHJpdmVyIGV2ZW4gc3VwcG9ydCBVU0I/IEl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJJiMzOTt2ZSB3b3JrZWQgb24gTVQ3NiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBVU0Itc3BlY2lmaWMgY29kZSB3aXRoaW4gdGhlIGRyaXZlci4gTGV0IG1lIHNlYXJjaCB0aHJvdWdoIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS91c2IuY2Agb3IgYW55IG90aGVyIHJlbGV2YW50IGZpbGVzLiBJJiMzOTtsbCB1c2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCBvciBzaW1pbGFyIHRvIHF1aWNrbHkgY29uZmlybSBpZiBhIFVTQiBkcml2ZXIgaW1wbGVtZW50YXRpb24gZXhpc3RzLiBUaGF0JiMzOTtzIHRoZSByb3V0ZSBJJiMzOTttIGdvaW5nIHRvIHRha2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtkZWJ1Z2ZzLmMmIzM0OywKICAgICYjMzQ7aW5pdC5jJiMzNDssCiAgICAmIzM0O21hYy5jJiMzNDssCiAgICAmIzM0O21hYy5oJiMzNDssCiAgICAmIzM0O21haW4uYyYjMzQ7LAogICAgJiMzNDttY3UuYyYjMzQ7LAogICAgJiMzNDttY3UuaCYjMzQ7LAogICAgJiMzNDttdDc5MjUuaCYjMzQ7LAogICAgJiMzNDtuYW4uYyYjMzQ7LAogICAgJiMzNDtuYW4uaCYjMzQ7LAogICAgJiMzNDtwY2kuYyYjMzQ7LAogICAgJiMzNDtwY2lfbWFjLmMmIzM0OywKICAgICYjMzQ7cGNpX21jdS5jJiMzNDssCiAgICAmIzM0O3JlZ2QuYyYjMzQ7LAogICAgJiMzNDtyZWdkLmgmIzM0OywKICAgICYjMzQ7cmVncy5oJiMzNDssCiAgICAmIzM0O3Rlc3Rtb2RlLmMmIzM0OywKICAgICYjMzQ7dXNiLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjAKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA5OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBXb3J0aGluZXNzIEFzc2Vzc21lbnQgZm9yIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBgbXQ3OTI1YCBkcml2ZXIsIGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgd2hldGhlciB3ZSBjYW4gcmVhY2ggdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQuCgpGaXJzdCwgSSBzZWUgdGhlIGRyaXZlciYjMzk7cyBVU0IgcHJvYmUgY2FuIGJlIHRyaWdnZXJlZCBiZWNhdXNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcyB2aWEgYHN5el91c2JfY29ubmVjdGAuIFNvIGZhciwgc28gZ29vZC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvciBhcmUgcHVyZWx5IGRlY29yYXRpdmUuCgpOb3csIHRoZSBwYXRjaCBhZGRzIGEgZGVidWdmcyBmaWxlIChgY29leF9pbmZvYCkgYW5kIGEgcmVhZCBoYW5kbGVyIChgbXQ3OTI1X2NvZXhfaW5mb2ApIGFzIHdlbGwgYXMgYSBoZWxwZXIgZnVuY3Rpb24gKGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCkuIEluaXRpYWxseSwgZGVidWdmcyBmaWxlcyBzZWVtIGxpa2UgYSBiaXQgb2YgYSBncmV5IGFyZWEuIFRoZXkmIzM5O3JlIG9mdGVuIGNvbnNpZGVyZWQgZGVjb3JhdGl2ZSwgYnV0IHRoZXkgKmNhbiogYmUgZnV6emVkLiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSAqb25seSogZGVidWdmcyBtb2RpZmljYXRpb25zPwoKTGV0JiMzOTtzIGxvb2sgbW9yZSBjbG9zZWx5LiBUaGUgcGF0Y2ggdG91Y2hlcyBgZGVidWdmcy5jYCwgYG1jdS5jYCwgYW5kIGBtY3UuY2AuIEkgc2VlIHRoYXQgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIGlzIGludm9sdmVkLCBhbmQgaXQgYXBwZWFycyB0byBzZW5kIGEgc3BlY2lmaWMgTUNVIGNvbW1hbmQgKGBjb2V4QndjR2V0TW9kZUluZm8gMGApIGFuZCBwYXJzZXMgdGhlIHJlc3BvbnNlLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UhIEl0JiMzOTtzIG5vdCAqanVzdCogZGVidWcgb3V0cHV0LgoKRGlnZ2luZyBkZWVwZXIsIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBwYXJzZXMgYSBUTFYgKFR5cGUtTGVuZ3RoLVZhbHVlKSBmcm9tIHRoZSBTS0IuIENydWNpYWxseSwgdGhpcyBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgaGFyZHdhcmUgdGhyb3VnaCB0aGUgZW11bGF0ZWQgVVNCIGRldmljZS4gQW5kLCB0aGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IFN5emthbGxlciBjYW4gcHJvdmlkZSBhcmJpdHJhcnkgcmVzcG9uc2VzIHRvIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgc2VuZGluZyB0aGlzIHJlc3BvbnNlLiBUaGlzIG1lYW5zIHdlIGNhbiBjcmFmdCBtYWxpY2lvdXMgVVNCIHJlc3BvbnNlcyB0byBleHBsb2l0IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgVExWIHBhcnNpbmcgY29kZS4KClRoZXJlZm9yZSwgc2luY2UgdGhlIFVTQiByZXNwb25zZSBpcyBlbXVsYXRlZCwgd2UgY2FuIGRlZmluaXRlbHkgcmVhY2ggYW5kIGZ1enogdGhlIFRMViBwYXJzaW5nIGxvZ2ljIGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCwgd2hpY2ggcHJvY2Vzc2VzIHVudHJ1c3RlZCBpbnB1dC4gSXTigJlzIGFic29sdXRlbHkgd29ydGggZnV6emluZyBiZWNhdXNlIHdlIGNhbiB0cmlnZ2VyIGl0IGFuZCBwcm92aWRlIGEgcmFuZ2Ugb2YgbWFsaWNpb3VzIGlucHV0cy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIGBNVDc5MjVfVVNCYCBjb25maWd1cmF0aW9uIHNvIHRoYXQgaXQgY2FuIGJlIHRlc3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVQ3OTI1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnOjI6Y29uZmlnIE1UNzkyNV9DT01NT05cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy02LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZzo3OmNvbmZpZyBNVDc5MjVFXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTgtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc5MjVFIChQQ0llKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy0xOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWc6MTk6Y29uZmlnIE1UNzkyNVVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc5MjVVIChVU0IpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzE2CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBNVDc5MjVVYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE1UNzkyNVVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSByZWxldmFudCBrZXJuZWwgZG9jdW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGFueXRoaW5nIHN1cnJvdW5kaW5nIHRoZSBNZWRpYVRlayB3aXJlbGVzcyBkcml2ZXJzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB1c3VhbCBzdXNwZWN0czogdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzLCB0aGUgZHJpdmVyIGNvZGUgaXRzZWxmLCBhbmQgYW55IHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgKGxpa2UgZmlybXdhcmUgYmxvYnMgb3IgcmVndWxhdG9yeSBkYXRhYmFzZSBpbnRlcmFjdGlvbnMpLgoKTXkgYnJhaW4mIzM5O3MgYWxyZWFkeSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGFyZWFzIHRvIHByb2JlLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIG1vZHVsZXMgdGhhdCBhcmUgKmtub3duKiB0byBpbnRlcmFjdCB3aXRoIHRoaXMgcGFydGljdWxhciBjaGlwLCBldmVuIGluZGlyZWN0bHk/IFRoaW5rIGFib3V0IHRoZSB0eXBpY2FsIFdpRmkgc3RhY2sgbGF5ZXJzOiBNQUMsIFBIWSwgcmVndWxhdG9yeSwgbmV0d29ya2luZy4gQXJlIHRoZXJlIGFueSBpbnRlci1tb2R1bGUgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGltcG9ydGFudCB0byBjb25zaWRlcj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGdyZXAgc2VhcmNoIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciBgTVQ3OTI1VWAgb3IgcmVsYXRlZCBzdHJpbmdzLCBwYXlpbmcgYXR0ZW50aW9uIHRvIGhlYWRlcnMgYW5kIEtjb25maWcgZmlsZXMgdG8gZ2V0IGEgcHJlbGltaW5hcnkgZGVwZW5kZW5jeSBtYXAuCgpCZXlvbmQgdGhlIGRpcmVjdCBrZXJuZWwgbW9kdWxlcywgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIFdoYXQga2VybmVsIHZlcnNpb25zIGlzIHRoaXMgZHJpdmVyIGtub3duIHRvIHN1cHBvcnQ/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBzZXQgdG8gZW5hYmxlIGl0PyBJIHNob3VsZCBjaGVjayB0aGUgbWFrZWZpbGVzIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IG9idmlvdXMuIEl0JiMzOTtzIGFsc28gaW1wb3J0YW50IHRvIHRoaW5rIGFib3V0IHRoZSB1c2VyLXNwYWNlIHRvb2xzIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgZHJpdmVyIHRocm91Z2ggYG5sODAyMTFgIG9yIG90aGVyIGludGVyZmFjZXMuIFRob3NlIGluZGlyZWN0IGRlcGVuZGVuY2llcyBhcmUgY3JpdGljYWwuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIGhvdyB0aGlzIHRoaW5nIGZpdHMgaW50byB0aGUgc3lzdGVtLiBJdCYjMzk7cyBub3QganVzdCBhYm91dCBsaXN0aW5nIG1vZHVsZXM7IGl0JiMzOTtzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgZXhjaGFuZ2UsIGFuZCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIGNvbmZsaWN0LiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIG1hcCBvdXQgdGhpcyBsYW5kc2NhcGUgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxOTpcdGNvbmZpZyBNVDc5MjVVXG4gIDIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc5MjVVIChVU0IpIHN1cHBvcnRcJiMzNDtcbiAgMjE6XHRcdHNlbGVjdCBNVDc5MnhfVVNCXG4gIDIyOlx0XHRzZWxlY3QgTVQ3OTI1X0NPTU1PTlxuICAyMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAyNDpcdFx0ZGVwZW5kcyBvbiBVU0JcbiAgMjU6XHRcdGhlbHBcbiAgMjY6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzkyNS1iYXNlZCB3aXJlbGVzcyBVU0IgZGV2aWNlcyxcbiAgMjc6XHRcdCAgd2hpY2ggc3VwcG9ydCBvcGVyYXRpb24gYXQgNkdIeiwgNUdIeiwgYW5kIDIuNEdIeiBJRUVFIDgwMi4xMWJlXG4gIDI4Olx0XHQgIDJ4MjoyU1MgNDA5Ni1RQU0sIDE2ME1IeiBjaGFubmVscy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTY0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVQ3OTI1VSBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlIGBNVDc5MjVVYCBkcml2ZXIsIHdoaWNoIEkga25vdyBwcmV0dHkgd2VsbCwgaXMgYnVpbHQgb24gdG9wIG9mIGBNQUM4MDIxMWAgYW5kIHJlbGllcyBvbiB0aGUgYFVTQmAgc3Vic3lzdGVtLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB0aGUgY29tbW9uIGFyY2hpdGVjdHVyZSBmb3IgVVNCLWJhc2VkIHdpcmVsZXNzIGRldmljZXMuIEkgYWxzbyBzZWUgdGhhdCBgTVQ3OTI1X0NPTU1PTmAgaXMgc2VsZWN0ZWQsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIGEgc2xpZ2h0IHBhdXNlLi4uIEkmIzM5O20ganVzdCBxdWlja2x5IGNvbmZpcm1pbmcgaWYgYE1UNzkyNVVgIGRpcmVjdGx5IGRlcGVuZHMgb24gYE1UNzZfVVNCYCwgb3IgaWYgaXQmIzM5O3Mgc2VsZWN0ZWQgaW1wbGljaXRseSB2aWEgc29tZXRoaW5nIGVsc2UuIE15IGludHVpdGlvbiBpcyB0aGF0IGBNVDc5MnhfVVNCYCBwcm9iYWJseSBoYW5kbGVzIHRoZSBzZWxlY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MngvS2NvbmZpZ2AgZGlyZWN0b3J5IG9yIGEgc2ltaWxhcmx5IHN0cnVjdHVyZWQgbG9jYXRpb24gZm9yIHRoZSBkZXBlbmRlbmNpZXMuIEdvdHRhIGJlIHN1cmUgYWJvdXQgdGhpcyB0byBnZXQgdGhlIG1vZHVsZSBsb2FkaW5nIG9yZGVyIGNvcnJlY3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNVDc5MnhfVVNCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnPTMyPWNvbmZpZyBNVDc5MnhfTElCXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnLTM1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnOjM2OmNvbmZpZyBNVDc5MnhfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctMzctXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDU5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gY2hlY2tpbmcgdGhlIGBNVDc5MnhfVVNCYCBkZXBlbmRlbmNpZXMsIHByZXNlbnRlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgYE1UNzkyeF9VU0JgIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBgTVQ3OTJ4X1VTQmAgbW9kdWxlIHJlbGllcyBvbi4gQmVmb3JlIEkgZXZlbiBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIHR5cGljYWwgYXJlYXM6CgoqICAgKipVbmRlcmx5aW5nIEhhcmR3YXJlOioqIEZpcnN0IGFuZCBmb3JlbW9zdCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgdGhpcyBpcyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aC4gRG9lcyBpdCBhc3N1bWUgYSBwYXJ0aWN1bGFyIFVTQiBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24/IFdoYXQgYWJvdXQgdGhlIG92ZXJhbGwgc3lzdGVtLW9uLWEtY2hpcCAoU29DKSBhcmNoaXRlY3R1cmU/IEFueSBzcGVjaWFsaXplZCByZWdpc3RlcnMgb3IgbWVtb3J5IG1hcHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGhhcmR3YXJlIGNvbmZsaWN0cyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zLgoKKiAgICoqVVNCIFN0YWNrIEludGVncmF0aW9uOioqIE5vdywgaXQmIzM5O3MgYWJvdXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGhvc3QgVVNCIHN0YWNrLiBJcyBpdCB1c2luZyBhIHN0YW5kYXJkIFVTQiBjbGFzcyBkcml2ZXIsIG9yIGlzIHRoaXMgYSBjdXN0b20gaW1wbGVtZW50YXRpb24/IEFyZSB0aGVyZSBzcGVjaWZpYyBVU0IgdHJhbnNmZXIgdHlwZXMgKGJ1bGssIGludGVycnVwdCwgY29udHJvbCwgaXNvY2hyb25vdXMpIGl0JiMzOTtzIGxldmVyYWdpbmcsIGFuZCB0aGVyZWZvcmUgZGVwZW5kZW50IG9uIHRoZSBjb3JyZXNwb25kaW5nIHN0YWNrIGNhcGFiaWxpdGllcz8gSSBuZWVkIHRvIGtub3cgaG93IGRlZXBseSBpbnRlZ3JhdGVkIGl0IGlzIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0uCgoqICAgKipLZXJuZWwgRGVwZW5kZW5jaWVzOioqIFdoYXQga2VybmVsIG1vZHVsZXMgZG9lcyBgTVQ3OTJ4X1VTQmAgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGNvcmUga2VybmVsIGludGVyZmFjZXMgaXQmIzM5O3MgdXNpbmcgKGxpa2UgRE1BIGVuZ2luZXMsIGludGVycnVwdCBoYW5kbGluZyBtZWNoYW5pc21zLCBvciBzcGVjaWZpYyBkZXZpY2UgdHJlZSBiaW5kaW5ncyk/IEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhvc2UgbW9kdWxlcyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBsb2FkZWQgYW5kIGNvbmZpZ3VyZWQsIGFuZCBsb29rIGZvciBhbnkgdmVyc2lvbmluZyBkZXBlbmRlbmNpZXMuCgoqICAgKipGaXJtd2FyZS9Db25maWd1cmF0aW9uIEZpbGVzOioqIE9mdGVuLCB0aGVzZSB0eXBlcyBvZiBkcml2ZXJzIHJlbHkgb24gZmlybXdhcmUgYmxvYnMgb3IgY29uZmlndXJhdGlvbiBmaWxlcy4gSSBuZWVkIHRvIGJlIHByZXBhcmVkIHRvIGlkZW50aWZ5IHRob3NlIGZpbGUgbG9jYXRpb25zIGFuZCBlbnN1cmUgdGhhdCB0aGUgYXBwcm9wcmlhdGUgdmVyc2lvbnMgYXJlIGluY2x1ZGVkLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGxvYWRpbmcgZGVwZW5kZW5jaWVzLgoKKiAgICoqQnVpbGQgU3lzdGVtOioqIEZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIHN5c3RlbSDigJMgd2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcyB0aGVyZT8gSXMgaXQgYSBzdGFuZGFyZCBgTWFrZWZpbGVgIHNldHVwLCBvciBpcyBpdCB1c2luZyBzb21ldGhpbmcgbW9yZSBjb21wbGV4IGxpa2UgYGtidWlsZGAgb3Igc29tZXRoaW5nIGVsc2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kdWxlIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHN5c3RlbSBpcyBjcml0aWNhbCB0byBiZSBzdXJlIHRoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUgcHJvcGVybHkgaW5jbHVkZWQuCgpNeSBpbW1lZGlhdGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHNvbGlkIGxpc3Qgb2YgZXZlcnl0aGluZyBgTVQ3OTJ4X1VTQmAgaXMgKnJlbGlhbnQqIHVwb24sIGJvdGggYXQgdGhlIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBsZXZlbHMuIFRoYXQgd2F5LCBJJiMzOTttIGVxdWlwcGVkIHRvIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzLCBvcHRpbWl6ZSB0aGUgbW9kdWxlJiMzOTtzIHBlcmZvcm1hbmNlLCBvciBpbnRlZ3JhdGUgaXQgd2l0aCBhIG5ldyBzeXN0ZW0gd2l0aCBjb25maWRlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzY6XHRjb25maWcgTVQ3OTJ4X1VTQlxuICAzNzpcdFx0dHJpc3RhdGVcbiAgMzg6XHRcdHNlbGVjdCBNVDc2X1VTQlxuICAzOTpcdFxuICA0MDpcdGNvbmZpZyBNVDc2X05QVVxuICA0MTpcdFx0dHJpc3RhdGVcbiAgNDI6XHRcdGRlcGVuZHMgb24gTkVUX0FJUk9IQV9OUFU9eSB8fCBNVDc2X0NPUkU9TkVUX0FJUk9IQV9OUFVcbiAgNDM6XHRcbiAgNDQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2eDAvS2NvbmZpZ1wmIzM0O1xuICA0NTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4Mi9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgdGhlIE1UNzkyNVUgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBlbmFibGluZyB0aGUgYE1UNzkyNVVgIGRyaXZlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyB3aXRoIGBNVDc5MjVVYCBhcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbmF0dXJhbGx5LiBBbG9uZ3NpZGUgdGhhdCwgSSBuZWVkIHRvIGJyaW5nIGluIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXM6IGBNQUM4MDIxMWAsIGBVU0JgLCBgV0xBTmAsIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AsIGBNVDc2X0NPUkVgLCBgTVQ3Nl9VU0JgLCBgTVQ3OTJ4X1VTQmAsIGFuZCBgTVQ3OTI1X0NPTU1PTmAuIEEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AgYW5kIGBNQUM4MDIxMWAgaXMgd2FycmFudGVkOyBnb3R0YSBiZSB0aG9yb3VnaC4KClJpZ2h0IG5vdywgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBleHBsaWNpdGx5IGluY2x1ZGluZyBgTVQ3OTI1VWAsIGBNQUM4MDIxMWAsIGBXTEFOYCwgYW5kIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AuIEhvd2V2ZXIsIEkganVzdCBjYXVnaHQgc29tZXRoaW5nIOKAkyB0aGlzIHBhdGNoIG1lbnRpb25zIGEgZGVidWdmcyBmaWxlLiBUaGF0IHRocm93cyBhIHBvdGVudGlhbCB3cmVuY2ggaW50byB0aGUgd29ya3MuIFNvLCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgZW5hYmxpbmcgYERFQlVHX0ZTYCBpcyBhIHJlcXVpcmVtZW50IG9yIGp1c3QgYW4gb3B0aW9uYWwgZmVhdHVyZS4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3Mgc2V0IHVwIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERUJVR19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2OTYKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGRlYnVnZnMuY2AqKgoKT2theSwgc28gYGRlYnVnZnMuY2Agc2VlbXMgdG8gYmUgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIFRpbWUgdG8gZGlnIGludG8gdGhlIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCB0aGUgYE1ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZmxhZ3MsIGRlZmluZXMsIG9yIG90aGVyIGZhY3RvcnMgYXJlIGRldGVybWluaW5nIHdoZXRoZXIgdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlIGdldHMgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGJ1aWxkIG9yIG5vdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBgTWFrZWZpbGVgIGhhcyB0byBzYXkuIEdvdHRhIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyBhc3NvY2lhdGVkIHdpdGggdGhhdCBmaWxlLiBUaGlzIHNtZWxscyBsaWtlIGEgZmVhdHVyZSBmbGFnIG9yIGEgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYXQgcGxheS4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0XG4gICAzOlx0b2JqLSQoQ09ORklHX01UNzkyNV9DT01NT04pICYjNDM7PSBtdDc5MjUtY29tbW9uLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfTVQ3OTI1RSkgJiM0Mzs9IG10NzkyNWUub1xuICAgNTpcdG9iai0kKENPTkZJR19NVDc5MjVVKSAmIzQzOz0gbXQ3OTI1dS5vXG4gICA2Olx0XG4gICA3Olx0bXQ3OTI1LWNvbW1vbi15IDo9IG1hYy5vIG1jdS5vIHJlZ2QubyBtYWluLm8gaW5pdC5vIGRlYnVnZnMubyBuYW4ub1xuICAgODpcdG10NzkyNS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgJiM0Mzs9IHRlc3Rtb2RlLm9cbiAgIDk6XHRtdDc5MjVlLXkgOj0gcGNpLm8gcGNpX21hYy5vIHBjaV9tY3Uub1xuICAxMDpcdG10NzkyNXUteSA6PSB1c2Iub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgZm9yIFNlbGVjdGluZyB0aGUgUmVsZXZhbnQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gYGRlYnVnZnMub2AgaXMgYWx3YXlzIGNvbXBpbGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gIEkgc2VlIHRoYXQgYGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZWAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmhgLiAgSW1wb3J0YW50IHBvaW50OiB0aGlzIGlzIGEgbm8tb3AgaWYgYERFQlVHX0ZTYCBpc24mIzM5O3QgZW5hYmxlZC4gU28sIHRvIGFjdHVhbGx5IHRlc3QgdGhpcywgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgREVCVUdfRlNgIGlzIHNldC4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IG9uZXM/IEkmIzM5O3ZlIGdvdCBgbXQ3OTI1X2NvZXhfaW5mb2AgYW5kIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBoaWdobGlnaHRlZC4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayBpZiB0aGVzZSBhcmUgc3RhdGljLiBgbXQ3OTI1X2NvZXhfaW5mb2AgKmlzKiBzdGF0aWMuIEJ1dCwgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyB1c2VkIGFzIGEgY2FsbGJhY2sgdG8gYGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZWAuICBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgaXMgbm9uLXN0YXRpYy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBjb25maXJtIHRoaXMuCgpZZXMsIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpcyBkZWZpbmVkIGluIGBtY3UuY2AgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLgoKTm93LCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gQWx0aG91Z2ggYG10NzkyNV9jb2V4X2luZm9gIGlzIHN0YXRpYywgaXQgKmlzKiBhbiBBUEkgZW50cnkgcG9pbnQgKGZvciBkZWJ1Z2ZzIHJlYWQpLCBzbyBpdCBnZXRzIGFuIGFkZHJlc3MuIEJ1dCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMsIGl0ICptaWdodCogYmUgaW5saW5lZC4gQnV0IHNpbmNlIGl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZWAsIGl0IGNhbm5vdCBiZSBpbmxpbmVkLiBJdCBnZXRzIGEgZGlzdGluY3Qgc3ltYm9sLiAgU3RpbGwsIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBsb29rcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIEkmIzM5O20gYWZ0ZXIsIGFuZCBpdCYjMzk7cyBub24tc3RhdGljLgoKT2theSwgbGV0JiMzOTtzIGNoZWNrIGlmIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpcyBleHBvcnRlZC4gTm9wZSwgaXQmIzM5O3Mgbm90IGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBtYXR0ZXIsIHNpbmNlIGl0JiMzOTtzIG5vbi1zdGF0aWMuIFNvIEkmIzM5O2xsIGRlZmluaXRlbHkgbGlzdCBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgYW5kIGFsc28gaW5jbHVkZSBgbXQ3OTI1X2NvZXhfaW5mb2Agc2luY2UgdGhlIGRlYnVnZnMgcmVhZCBnb2VzIHRocm91Z2ggaXQuCgpPbmUgbGFzdCB0aG91Z2h0OiB0aGUgcHJvbXB0IG1lbnRpb25zIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJcyBgbXQ3OTI1YCBhY2Nlc3NpYmxlPyBZZXMsIEkgY2FuIHJlYWNoIGl0IHRocm91Z2ggYHVzYiBnYWRnZXRgIHZpYSBgc3l6X3VzYl9jb25uZWN0YC4KClNvLCB0aGUga2V5IGNvbmZpZ3MgZm9yIG15IHRlc3RpbmcgYXJlOiBgTVQ3OTI1VWAsIGBNQUM4MDIxMWAsIGBXTEFOYCwgYFdMQU5fVkVORE9SX01FRElBVEVLYCwgYW5kLCBjcml0aWNhbGx5LCBgREVCVUdfRlNgLiBJIG5lZWQgdG8gZW5zdXJlIHRob3NlIGFyZSBhbGwgc2V0LiBBbmQgbm93LCBJJiMzOTtsbCBjaGVjayB0byBzZWUgaWYgYFdMQU5fVkVORE9SX01FRElBVEVLYCBoYXMgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgV0xBTl9WRU5ET1JfTUVESUFURUsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWc6Mjpjb25maWcgV0xBTl9WRU5ET1JfTUVESUFURUtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TWVkaWFUZWsgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc3OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE1lZGlhdGVrIFdpcmVsZXNzIERyaXZlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWdgIGZpbGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSB3YW50IHRvIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgdGhlIGtleXN0b25lIHRvIHRoZSBNZWRpYXRlayB3aXJlbGVzcyBkcml2ZXImIzM5O3MgY29uZmlndXJhdGlvbiwgc28gdW5kZXJzdGFuZGluZyB3aGF0IGtleXMgdHJpZ2dlciBpdHMgaW5jbHVzaW9uIChvciBleGNsdXNpb24pIGlzIGNydWNpYWwuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgcmVsZXZhbnQgYnVpbGQgb3B0aW9ucywgdGhlIGNvbmRpdGlvbnMgd2hpY2ggZW5hYmxlIHRoZW0gYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBzeXN0ZW0gY29uZmlndXJhdGlvbi4gQmFzaWNhbGx5LCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgbmVlZCB0byBiZSBhY3RpdmUgZm9yIHRoZXNlIE1lZGlhdGVrIHdpcmVsZXNzIGRyaXZlcnMgdG8gZXZlbiBiZSBjb25zaWRlcmVkPyBJIGV4cGVjdCB0aGVyZSB0byBiZSBkZXBlbmRlbmNpZXMgb24gcGxhdGZvcm0gc3VwcG9ydCwgc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zLCBhbmQgcG90ZW50aWFsbHkgb24gb3RoZXIgd2lyZWxlc3MgcmVsYXRlZCBzdWItc3lzdGVtcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJIG5lZWQgdG8gc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZXNlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFdMQU5fVkVORE9SX01FRElBVEVLXG4gICAzOlx0XHRib29sIFwmIzM0O01lZGlhVGVrIGRldmljZXNcJiMzNDtcbiAgIDQ6XHRcdGRlZmF1bHQgeVxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBJZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAgNzpcdFxuICAgODpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgIDk6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcbiAgMTA6XHRcdCAgcXVlc3Rpb25zIGFib3V0IHRoZXNlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE5MAoJCQkJCQkJb3V0cHV0OiAxNjEKCQkJCQkJCXRob3VnaHRzOiA4NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1UNzkyNVUgTUNVIENvbW1hbmQgUmVzcG9uc2UgUGFyc2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBhdHRhY2sgc3VyZmFjZSB0byBmdXp6LiBMZXQmIzM5O3Mgc2VlLi4uIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AgaXMgc2V0IHRvICYjMzk7eSYjMzk7IGJ5IGRlZmF1bHQsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBidXQgbm90IHRoZSBmb2N1cyBoZXJlLiBUaGUgY3J1eCBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBgTVQ3OTI1VWAgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IGRlcGVuZHMgb24gYE1BQzgwMjExYCwgYFVTQmAsIGFuZCwgY3J1Y2lhbGx5IGZvciBkZWJ1ZyBhbmQgZnV6emluZywgYERFQlVHX0ZTYC4KCkkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0sIHJpZ2h0LCBgTVQ3OTI1VWAsIGBNQUM4MDIxMWAsIGBVU0JgLCBhbmQgYERFQlVHX0ZTYCBhcmUgdGhlIGNvbmZpZ3MgSSYjMzk7bGwgYmUgZW5hYmxpbmcuIEFuZCBgTVQ3OTI1X0NPTU1PTmAgaXMgc2VsZWN0ZWQgYnkgYE1UNzkyNVVgLCBubyBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIHRoYXQuCgpOb3csIHRoZSBqdWljeSBiaXQ6IGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpbiBgbWN1LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCYjMzk7cyBwYXJzaW5nIHRoZSByZXNwb25zZSBmcm9tIHRoZSBNQ1UuIFRoZSByZXNwb25zZSwgdmlhIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnYCwgaXMgYmFzaWNhbGx5IGEgVVNCIFVSQiBmcm9tIHRoZSBzeXprYWxsZXIgVVNCIGZ1enplci4gQW5kIHRoYXQgcmVzcG9uc2UgZ2V0cyBwYXJzZWQgYXMgYSBUTFYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcGFyc2luZyBsb2dpYywgdGhvcm91Z2hseS4KCkkmIzM5O20gc2VlaW5nIGEgYHdoaWxlYCBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgVExWcy4gSXQmIzM5O3MgZG9pbmcgc29tZSBsZW5ndGggY2hlY2tzOiBgdGx2X2xlbmAgYWdhaW5zdCBgc2l6ZW9mKCp0bHYpYCBhbmQgYHNrYi0mZ3Q7bGVuYC4gVGhlbiwgaXQgY2hlY2tzIHRoZSBgdGx2LSZndDt0YWdgLiBJZiBpdCYjMzk7cyB0aGUgcmlnaHQgdGFnIChgVU5JX0NISVBfQ09ORklHX0NISVBfQ0ZHYCksIGl0IGdldHMgZXZlbiBtb3JlIGNvbXBsaWNhdGVkLiBJdCBleHRyYWN0cyBgY2ZnLSZndDtkYXRhX3NpemVgLCBjb21wYXJlcyB0aGF0IHRvIGB0bHZfbGVuIC0gaGRyX2xlbmAgd2hpY2ggc2VlbXMgcmVhc29uYWJsZS4gIFRoZW4sIGl0JiMzOTtzIGNvcHlpbmcgZGF0YSBpbnRvIHRoZSBgcmVzcGAgYnVmZmVyIHVzaW5nIGBtZW1jcHlgLiAgYHNrYl9wdWxsYCBpcyB1c2VkIGZvciBhZHZhbmNpbmcgdGhlIGJ1ZmZlciwgYnV0IHRoZSBjaGVja3MgYmVmb3JlIGl0IG1ha2UgaXQgc2FmZSAtIHRoYXQmIzM5O3MgZ29vZC4KCk9rYXksIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gVGhpcyAqVExWKiBwYXJzaW5nLCBlc3BlY2lhbGx5IHRob3NlIGxlbmd0aCBhbmQgc2l6ZSBjaGVja3MsIHRoaXMgaXMgcHJpbWUgZnV6emluZyBtYXRlcmlhbC4gSXQgaGFzIGFsbCB0aGUgaGFsbG1hcmtzIG9mIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5OiB1bnRydXN0ZWQgZGF0YSBjb21pbmcgaW4sIHNvbWUgKGhvcGVmdWxseSByb2J1c3QpIHBhcnNpbmcgYW5kIGRhdGEgbWFuaXB1bGF0aW9uLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBmdXp6ZXJzIGFyZSAqZGVzaWduZWQqIHRvIGJyZWFrISBUaGUgY29kZSBzZWVtcyByZWxhdGl2ZWx5IGNhcmVmdWwsIGJ1dCB0aGUgY29tcGxleGl0eSBtYWtlcyBpdCBhIGhpZ2ggdmFsdWUgdGFyZ2V0LgoKU28sIHRvIHN1bW1hcml6ZSB3aGF0IEkgaGF2ZSBoZXJlOgoKKiAgICoqV29ydGhGdXp6aW5nKio6IEFic29sdXRlbHkuIFRoaXMgbmVlZHMgZnV6emluZy4KKiAgICoqRm9jdXNTeW1ib2xzKio6IGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCwgYW5kIEkgc2hvdWxkIGFsc28gYWRkIGBtdDc5MjVfY29leF9pbmZvYCBhcyB3ZWxsIHNpbmNlIGl0IGludGVyYWN0cyB3aXRoIHRoZSBNQ1UuCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYE1UNzkyNVVgLCBgTUFDODAyMTFgLCBgVVNCYCwgYERFQlVHX0ZTYCDigJMgdGhlc2UgYXJlIG15IGJhc2Ugc2V0dXAuCiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGFkZHMgYSBkZWJ1Z2ZzIGludGVyZmFjZSB0aGF0IHRyaWdnZXJzIGFuIE1DVSBjb21tYW5kLiBUaGUgY29yZSB2dWxuZXJhYmlsaXR5IGlzIHJlc3BvbnNlIHBhcnNpbmcgLSB3aGljaCBpcyB1bnRydXN0ZWQgZGF0YSBmcm9tIHRoZSBoYXJkd2FyZSAod2hpY2ggY2FuIGJlIGVtdWxhdGVkIHZpYSBVU0IgZ2FkZ2V0IGluIHN5emthbGxlcikgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBmdXp6IHRoZSByb2J1c3RuZXNzIGFnYWluc3QgbWFsZm9ybWVkIFRMVnMuIFRoZSBrZXkgaGVyZSBpcyB0byBmaW5kIG91dCBpZiB0aGUgTUNVIGhhcyB0aGUgc2FtZSBjaGVja3MgdGhhdCB0aGUgZHJpdmVyIGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc5MjVVJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O210NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkmIzM0OywKICAgICYjMzQ7bXQ3OTI1X2NvZXhfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZGVidWdmcyBpbnRlcmZhY2UgdGhhdCB0cmlnZ2VycyBhbiBNQ1UgY29tbWFuZCBhbmQgcGFyc2VzIHRoZSByZXNwb25zZS4gVGhlIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgaW4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIHByb2Nlc3NlcyB1bnRydXN0ZWQgZGF0YSBmcm9tIHRoZSBoYXJkd2FyZSAod2hpY2ggY2FuIGJlIGVtdWxhdGVkIHZpYSBVU0IgZ2FkZ2V0IGluIHN5emthbGxlcikgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJvYnVzdG5lc3MgYWdhaW5zdCBtYWxmb3JtZWQgVExWcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVQ3OTI1VSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5JiMzNDssCiAgICAmIzM0O210NzkyNV9jb2V4X2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGRlYnVnZnMgaW50ZXJmYWNlIHRoYXQgdHJpZ2dlcnMgYW4gTUNVIGNvbW1hbmQgYW5kIHBhcnNlcyB0aGUgcmVzcG9uc2UuIFRoZSByZXNwb25zZSBwYXJzaW5nIGxvZ2ljIGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBwcm9jZXNzZXMgdW50cnVzdGVkIGRhdGEgZnJvbSB0aGUgaGFyZHdhcmUgKHdoaWNoIGNhbiBiZSBlbXVsYXRlZCB2aWEgVVNCIGdhZGdldCBpbiBzeXprYWxsZXIpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSByb2J1c3RuZXNzIGFnYWluc3QgbWFsZm9ybWVkIFRMVnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGVudHJ5IGBjb2V4X2luZm9gIGFuZCBhIGZ1bmN0aW9uIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCB0byBxdWVyeSB0aGUgTUNVLiBUaGUgbG9jYWwgYHJlcWAgc3RydWN0dXJlIHVzZWQgdG8gc2VuZCB0aGUgcXVlcnkgaXMgcGFydGlhbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJ1Y3QgaW5pdGlhbGl6ZXIsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgY29tcGlsZXIgemVyby1pbml0aWFsaXplcyBhbGwgcmVtYWluaW5nIGZpZWxkcyBhbmQgcGFkZGluZy4gVGhlIGByZXNwYCBidWZmZXIgYW5kIGByZXNwX3R5cGVgIHZhcmlhYmxlIGFyZSBwb3B1bGF0ZWQgYnkgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBUaGUgZnVuY3Rpb24gY29ycmVjdGx5IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgaW50byBgcmVzcGAsIGFuZCB0aGUgY2FsbGVyIGBtdDc5MjVfY29leF9pbmZvYCBvbmx5IHJlYWRzIGV4YWN0bHkgdGhhdCBtYW55IGJ5dGVzLiBgcmVzcF90eXBlYCBpcyBhbHNvIG9ubHkgYWNjZXNzZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvc2l0aXZlIGxlbmd0aCwgbWVhbmluZyBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LCBzZW50IHRvIHRoZSBkZXZpY2UsIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb25zLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNDgyYTg5YTVkZTFlMWYxM2I1YzliNmZhZjcxZWY2MDViZWZjZGM2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMDI6MjI6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMKaW5kZXggZDAxZmY0OWRlNDdhZi4uOWE1ZWExMmI3NmM3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuYwpAQCAtMjg2LDYgJiM0MzsyODYsMzQgQEAgc3RhdGljIGludCBtdDc5MjVfY2hpcF9yZXNldCh2b2lkICpkYXRhLCB1NjQgdmFsKQogCiBERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoZm9wc19yZXNldCwgTlVMTCwgbXQ3OTI1X2NoaXBfcmVzZXQsICYjMzQ7JWxsZFxuJiMzNDspOwogCiYjNDM7c3RhdGljIGludAomIzQzO210NzkyNV9jb2V4X2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsjZGVmaW5lIE1UNzkyNV9DSElQX0NPTkZJR19SRVNQX1NJWkUJMzIwCiYjNDM7CXN0cnVjdCBtdDc5MnhfZGV2ICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocy0mZ3Q7cHJpdmF0ZSk7CiYjNDM7CXU4IHJlc3BbTVQ3OTI1X0NISVBfQ09ORklHX1JFU1BfU0laRV0sIHJlc3BfdHlwZTsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJbXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTsKJiM0MzsJcmV0ID0gbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShkZXYsICYjMzQ7Y29leEJ3Y0dldE1vZGVJbmZvIDAmIzM0OywKJiM0MzsJCQkJCSAgICZhbXA7cmVzcF90eXBlLCByZXNwLCBzaXplb2YocmVzcCkpOwomIzQzOwltdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJc2VxX3B1dHMocywgJiMzNDtubyByZXBseVxuJiMzNDspOwomIzQzOwllbHNlIGlmIChyZXNwX3R5cGUgPT0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSkKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDslLipzXG4mIzM0OywgcmV0LCByZXNwKTsKJiM0MzsJZWxzZQomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHJldDsgaSAmIzQzOz0gMTYpCiYjNDM7CQkJc2VxX3ByaW50ZihzLCAmIzM0OyUwNHg6ICUqcGhcbiYjMzQ7LCBpLAomIzQzOwkJCQkgICBtaW5fdChpbnQsIDE2LCByZXQgLSBpKSwgcmVzcCAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IG10NzkyNV9pbml0X2RlYnVnZnMoc3RydWN0IG10NzkyeF9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkaXI7CkBAIC0zMDksNiAmIzQzOzMzNyw4IEBAIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpCiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O2lkbGUtdGltZW91dCYjMzQ7LCAwNjAwLCBkaXIsIGRldiwKIAkJCSAgICAmYW1wO2ZvcHNfcG1faWRsZV90aW1lb3V0KTsKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7Y2hpcF9yZXNldCYjMzQ7LCAwNjAwLCBkaXIsIGRldiwgJmFtcDtmb3BzX3Jlc2V0KTsKJiM0MzsJZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi0mZ3Q7bXQ3Ni5kZXYsICYjMzQ7Y29leF9pbmZvJiMzNDssIGRpciwKJiM0MzsJCQkJICAgIG10NzkyNV9jb2V4X2luZm8pOwogCWRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtJmd0O210NzYuZGV2LCAmIzM0O3J1bnRpbWVfcG1fc3RhdHMmIzM0OywgZGlyLAogCQkJCSAgICBtdDc5MnhfcG1fc3RhdHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtkZWVwLXNsZWVwJiMzNDssIDA2MDAsIGRpciwgZGV2LCAmYW1wO2ZvcHNfZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYwppbmRleCBmYTI5YzQ4NmE0NTUzLi5lNjMxNmNlYTE4NjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYwpAQCAtMTE2MCw2ICYjNDM7MTE2MCw4MSBAQCBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpCiAJCQkJICZhbXA7cmVxLCBzaXplb2YocmVxKSwgZmFsc2UpOwogfQogCiYjNDM7aW50IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kLAomIzQzOwkJCQkgdTggKnJlc3BfdHlwZSwgdm9pZCAqcmVzcCwgdTE2IHJlc3Bfc2l6ZSkKJiM0Mzt7CiYjNDM7CXUxNiBsZW4gPSBzdHJsZW4oY21kKTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXU4IF9yc3ZbNF07CiYjNDM7CQlfX2xlMTYgdGFnOwomIzQzOwkJX19sZTE2IGxlbjsKJiM0MzsJCXN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgY29uZmlnOwomIzQzOwl9IF9fcGFja2VkIHJlcSA9IHsKJiM0MzsJCS50YWcgPSBjcHVfdG9fbGUxNihVTklfQ0hJUF9DT05GSUdfQ0hJUF9DRkcpLAomIzQzOwkJLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihyZXEpIC0gNCksCiYjNDM7CQkuY29uZmlnID0gewomIzQzOwkJCS5yZXNwX3R5cGUgPSAwLAomIzQzOwkJCS50eXBlID0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSwKJiM0MzsJCQkuZGF0YV9zaXplID0gY3B1X3RvX2xlMTYobGVuKSwKJiM0MzsJCX0sCiYjNDM7CX07CiYjNDM7CWNvbnN0IHUxNiBoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB0bHYpICYjNDM7CiYjNDM7CQkJICAgIG9mZnNldG9mKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcsIGRhdGEpOwomIzQzOwlzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICpjZmc7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghbGVuIHx8IGxlbiAmZ3Q7PSBzaXplb2YocmVxLmNvbmZpZy5kYXRhKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltZW1jcHkocmVxLmNvbmZpZy5kYXRhLCBjbWQsIGxlbik7CiYjNDM7CiYjNDM7CXJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coJmFtcDtkZXYtJmd0O210NzYsIE1DVV9VTklfUVVFUlkoQ0hJUF9DT05GSUcpLAomIzQzOwkJCQkJJmFtcDtyZXEsIHNpemVvZihyZXEpLCB0cnVlLCAmYW1wO3NrYik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBza2lwIHRoZSBmaXhlZCBmaWVsZCBvZiB0aGUgZXZlbnQsIHRoZSBUTFZzIGZvbGxvdyBpdCAqLwomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0OyA0KSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJc2tiX3B1bGwoc2tiLCA0KTsKJiM0MzsKJiM0MzsJcmV0ID0gLUVOT0VOVDsKJiM0MzsJd2hpbGUgKHNrYi0mZ3Q7bGVuICZndDs9IHNpemVvZihzdHJ1Y3QgdGx2KSkgewomIzQzOwkJc3RydWN0IHRsdiAqdGx2ID0gKHN0cnVjdCB0bHYgKilza2ItJmd0O2RhdGE7CiYjNDM7CQl1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KHRsdi0mZ3Q7bGVuKTsKJiM0MzsJCXUxNiBkYXRhX3NpemU7CiYjNDM7CiYjNDM7CQlpZiAodGx2X2xlbiAmbHQ7IHNpemVvZigqdGx2KSB8fCB0bHZfbGVuICZndDsgc2tiLSZndDtsZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAobGUxNl90b19jcHUodGx2LSZndDt0YWcpICE9IFVOSV9DSElQX0NPTkZJR19DSElQX0NGRykgewomIzQzOwkJCXNrYl9wdWxsKHNrYiwgdGx2X2xlbik7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAodGx2X2xlbiAmbHQ7IGhkcl9sZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQljZmcgPSAoc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqKXRsdi0mZ3Q7ZGF0YTsKJiM0MzsJCWRhdGFfc2l6ZSA9IGxlMTZfdG9fY3B1KGNmZy0mZ3Q7ZGF0YV9zaXplKTsKJiM0MzsJCWlmIChkYXRhX3NpemUgJmd0OyB0bHZfbGVuIC0gaGRyX2xlbikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCSpyZXNwX3R5cGUgPSBjZmctJmd0O3Jlc3BfdHlwZTsKJiM0MzsJCXJldCA9IG1pbl90KHUxNiwgZGF0YV9zaXplLCByZXNwX3NpemUpOwomIzQzOwkJbWVtY3B5KHJlc3AsIGNmZy0mZ3Q7ZGF0YSwgcmV0KTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlkZXZfa2ZyZWVfc2tiKHNrYik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogaW50IG10NzkyNV9tY3Vfc2V0X2RlZXBfc2xlZXAoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgYm9vbCBlbmFibGUpCiB7CiAJY2hhciBjbWRbMTZdOwpAQCAtMzc3Miw3ICYjNDM7Mzg0Nyw4IEBAIGludCBtdDc5MjVfbWN1X2ZpbGxfbWVzc2FnZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQl1bmlfdHhkLSZndDtvcHRpb24gPSBNQ1VfQ01EX1VOSV9FWFRfQUNLOwogCiAJCWlmIChjbWQgPT0gTUNVX1VOSV9DTUQoSElGX0NUUkwpIHx8Ci0JCSAgICBjbWQgPT0gTUNVX1VOSV9DTUQoQ0hJUF9DT05GSUcpKQomIzQzOwkJICAgIGNtZCA9PSBNQ1VfVU5JX0NNRChDSElQX0NPTkZJRykgfHwKJiM0MzsJCSAgICBjbWQgPT0gTUNVX1VOSV9RVUVSWShDSElQX0NPTkZJRykpCiAJCQl1bmlfdHhkLSZndDtvcHRpb24gJmFtcDs9IH5NQ1VfQ01EX0FDSzsKIAogCQlpZiAobWN1X2NtZCA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oCmluZGV4IDExZjllYWMxM2ZmYzYuLjJjZjM5NzFkOTg1M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oCkBAIC0xMTksNiAmIzQzOzExOSwxNSBAQCBlbnVtIHsKIAlVTklfQ0hJUF9DT05GSUdfTklDX0NBUEEgPSAweDMsCiB9OwogCiYjNDM7LyogdHlwZS9yZXNwX3R5cGUgb2Ygc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqLwomIzQzO2VudW0gewomIzQzOwlDSElQX0NPTkZJR19UWVBFX1dPX1JFU1BPTlNFLAomIzQzOwlDSElQX0NPTkZJR19UWVBFX01FTTgsCiYjNDM7CUNISVBfQ09ORklHX1RZUEVfTUVNMzIsCiYjNDM7CUNISVBfQ09ORklHX1RZUEVfQVNDSUksCiYjNDM7CUNISVBfQ09ORklHX1RZUEVfQklOQVJZLAomIzQzO307CiYjNDM7CiBlbnVtIHsKIAlVTklfQkFORF9DT05GSUdfUkFESU9fRU5BQkxFLAogCVVOSV9CQU5EX0NPTkZJR19SVFNfVEhSRVNIT0xEID0gMHgwOCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmgKaW5kZXggMzIxZTczMjM0N2YyZi4uZDBkYjVkOGRhZTQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmgKQEAgLTI5NSw2ICYjNDM7Mjk1LDggQEAgaW50IG10NzkyNV9tY3VfZ2V0X3J4X3JhdGUoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIGludCBtdDc5MjVfbWN1X2Z3X2xvZ18yX2hvc3Qoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggY3RybCk7CiB2b2lkIG10NzkyNV9tY3VfcnhfZXZlbnQoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpOwomIzQzO2ludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCwKJiM0MzsJCQkJIHU4ICpyZXNwX3R5cGUsIHZvaWQgKnJlc3AsIHUxNiByZXNwX3NpemUpOwogaW50IG10NzkyNV9tY3Vfc2V0X3J4ZmlsdGVyKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHUzMiBmaWYsCiAJCQkgICAgdTggYml0X29wLCB1MzIgYml0X21hcCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2V4aXN0ZW5jZSBJbmZvcm1hdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBgZGVidWdmc2AgZmlsZSwgYGNvZXhfaW5mb2AsIHdpdGhpbiB0aGUgbXQ3OTI1IHdpcmVsZXNzIGRyaXZlci4gVGhlIHB1cnBvc2Ugc2VlbXMgdG8gYmUgcHJvdmlkaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIE1DVSwgZmV0Y2hlZCB2aWEgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBMZXQmIzM5O3MgZGlnIGluLgoKVGhlIGBtdDc5MjVfY29leF9pbmZvYCBmdW5jdGlvbiBpcyB0aGUgY29yZSBvZiB0aGlzLiBJdCBncmFicyBhIGBtdDc5MnhfZGV2YCBzdHJ1Y3QsIGNhbGxzIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCwgYW5kIHRoZW4gZGlzcGxheXMgdGhlIHJlc3VsdCwgaGFuZGxpbmcgQVNDSUkgb3IgcmF3IGJ5dGVzIGRlcGVuZGluZyBvbiBgcmVzcF90eXBlYC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGJ1ZmZlciBgcmVzcGAsIGEgMzIwLWJ5dGUgc3RhY2sgYWxsb2NhdGlvbi4gSXQmIzM5O3MgdW5pbml0aWFsaXplZCwgd2hpY2ggaXMgaW1tZWRpYXRlbHkgYSBwb2ludCBvZiBjb25jZXJuIGZvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGRlcGVuZGluZyBvbiBob3cgdGhlIHJlc3BvbnNlIGlzIGhhbmRsZWQgYW5kIGhvdyBpdCBpcyBsYXRlciBhY2Nlc3NlZC4KCmBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpcyB3aGF0IGZlZWRzIHRoaXMgYnVmZmVyLiBJdCBjb25zdHJ1Y3RzIGEgcmVxdWVzdCBhbmQgc2VuZHMgaXQgdG8gdGhlIE1DVS4gTm93LCB0aGlzIGByZXFgIHN0cnVjdCBoYXMgY2F1Z2h0IG15IGV5ZS4gSXQmIzM5O3MgaW5pdGlhbGl6ZWQgd2l0aCBhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIgbGlzdCAoYD0geyAuLi4gfWApLiBUaGUgYF9yc3ZbNF1gIG1lbWJlciwgYW4gdW5uYW1lZCBhcnJheSBvZiA0IGJ5dGVzLCBpc24mIzM5O3QgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB0aGUgbGlzdC4gVGhpcyByYWlzZXMgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgdGhpcyBpcyBwcm9wZXJseSB6ZXJvZWQgYXMgZXhwZWN0ZWQuIFNpbmNlIHRoZXJlIGlzIHBhZGRpbmcsIGl0IG1heSBub3QgYmUuIEFsc28sIHRoZSBzdHJ1Y3QgaXMgbWFya2VkIGFzIGBfX3BhY2tlZGAuIFNvLCB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIHBhZGRpbmcsIGJ1dCBpcyB0aGF0IGhhbmRsZWQgc2FmZWx5PwoKQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBwYXJ0aWFsIGluaXRpYWxpemF0aW9uIG9mIGEgc3RydWN0IG1lYW5zIHRoZSB1bmluaXRpYWxpemVkIG1lbWJlcnMgYXJlIHplcm9lZC4gSG93ZXZlciwgYmVjYXVzZSBgcmVxYCBpcyBgX19wYWNrZWRgIHRoaXMgbmVlZHMgZG91YmxlLWNoZWNraW5nLiBOb3csIGByZXEuY29uZmlnLmRhdGFgIGlzIGFuIGFycmF5IHRoYXQgd2lsbCBiZSBjb3BpZWQgaW50bywgYW5kIHRoZSByZXN0IGlzIHplcm9lZCBieSB0aGUgc3RydWN0IGluaXRpYWxpemVyLCBpZiBpdCYjMzk7cyBub3QgcGFja2VkLgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWdgLiBJdCBtdXN0IGJlIGRlZmluZWQgaW4gYSBoZWFkZXIsIGFuZCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGF0IHN0cnVjdHVyZS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZm9ybWF0IG9mIHRoZSByZXF1ZXN0IGFuZCByZXNwb25zZSwgc3BlY2lmaWNhbGx5IGhvdyBgZGF0YV9zaXplYCwgYHJlc3BfdHlwZWAgYW5kIGB0eXBlYCBhcmUgaGFuZGxlZCwgd2hpY2ggbWF5IGNvbnRhaW4gY3JpdGljYWwgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuYz0yMDQ3PWludCBtdDc2X2Nvbm5hY19tY3VfY2hpcF9jb25maWcoc3RydWN0IG10NzZfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5jLTIwNDgte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuYzoyMDQ5Olx0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyByZXEgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5jLTIwNTAtXHRcdC5yZXNwX3R5cGUgPSAwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmM9MjA2MD1pbnQgbXQ3Nl9jb25uYWNfbWN1X3NldF9kZWVwX3NsZWVwKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBib29sIGVuYWJsZSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmMtMjA2MS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5jOjIwNjI6XHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIHJlcSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmMtMjA2My1cdFx0LnJlc3BfdHlwZSA9IDAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaD0xODUwPXN0cnVjdCBtdDc2X2Nvbm5hY190eF9wb3dlcl9saW1pdF90bHYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgtMTg2NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1Lmg6MTg2NTpzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgtMTg2Ni1cdF9fbGUxNiBpZDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0xMTM5PWludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMTQ1LVx0XHRfX2xlMTYgbGVuO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MTE0NjpcdFx0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyBjb25maWc7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMTQ3LVx0fSBfX3BhY2tlZCByZXEgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM9MTE2Mz1pbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTE3MC1cdFx0X19sZTE2IGxlbjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjExNzE6XHRcdHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgY29uZmlnO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTE3Mi1cdH0gX19wYWNrZWQgcmVxID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTExODEtXHRjb25zdCB1MTYgaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdGx2KSAmIzQzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MTE4MjpcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZywgZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoxMTgzOlx0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqY2ZnO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTE4NC1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTIyMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjEyMjE6XHRcdGNmZyA9IChzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICopdGx2LVx1MDAzZWRhdGE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMjIyLVx0XHRkYXRhX3NpemUgPSBsZTE2X3RvX2NwdShjZmctXHUwMDNlZGF0YV9zaXplKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaD0xMTc9ZW51bSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmgtMTIxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1Lmg6MTIyOi8qIHR5cGUvcmVzcF90eXBlIG9mIHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oLTEyMy1lbnVtIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRGl2aW5nIGludG8gdGhlIE1UNzYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgTVQ3NiBDb25uYWMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIGEga2V5IHN0cnVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBmaW5kIGEgbG90IG9mIHRoZSBpbml0aWFsIHNldHVwIHBhcmFtZXRlcnMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWdgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBsb3ctZG93biBvbiBob3cgdGhlIENvbm5hYyBoYXJkd2FyZSBpcyBpbml0aWFsaXplZCBhbmQgd2hhdCBzZXR0aW5ncyBhcmUgYmVpbmcgdXNlZC4gSSBleHBlY3QgdG8gc2VlIGFsbCB0aGUgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbnMgb2YgaGFyZHdhcmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaD0xODUwPXN0cnVjdCBtdDc2X2Nvbm5hY190eF9wb3dlcl9saW1pdF90bHYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgtMTg2NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1Lmg6MTg2NTpzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgtMTg2Ni1cdF9fbGUxNiBpZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1MQoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIE1UNzYgQ29ubmVjdGlvbiBNYW5hZ2VyKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIE1lZGlhVGVrIHdpcmVsZXNzIGRyaXZlci4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaGAgLSBzcGVjaWZpY2FsbHksIGxldCYjMzk7cyB6b29tIGluIGFyb3VuZCBsaW5lIDE4NjUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBkZWZpbml0aW9ucyBvciBzdHJ1Y3R1cmVzIGluIHRoaXMgYXJlYS4gUHJvYmFibHkgcmVsYXRlZCB0byB0aGUgQ29ubmFjIE1DVSwgd2hpY2ggaGFuZGxlcyBhIGxvdCBvZiB0aGUgbG93LWxldmVsIHdpcmVsZXNzIGludGVyYWN0aW9uIG9uIHRoZXNlIGNoaXBzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgY29ubmVjdGlvbnMsIGRpc2Nvbm5lY3Rpb25zLCByb2FtaW5nLCBhbmQgbWF5YmUgZXZlbiBmaXJtd2FyZS1yZWxhdGVkIGludGVyYWN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYXdhaXQgdXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg2MDpcdFx0LyogRFczICovXG4xODYxOlx0XHR1OCBhbHBoYTJbNF07IC8qIHJlZ3VsYXRvcnlfcmVxdWVzdC5hbHBoYTIgKi9cbjE4NjI6XHRcdHU4IHBhZDJbMzJdO1xuMTg2MzpcdH0gX19wYWNrZWQ7XG4xODY0Olx0XG4xODY1Olx0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyB7XG4xODY2Olx0XHRfX2xlMTYgaWQ7XG4xODY3Olx0XHR1OCB0eXBlO1xuMTg2ODpcdFx0dTggcmVzcF90eXBlO1xuMTg2OTpcdFx0X19sZTE2IGRhdGFfc2l6ZTtcbjE4NzA6XHRcdF9fbGUxNiByZXN2O1xuMTg3MTpcdFx0dTggZGF0YVszMjBdO1xuMTg3MjpcdH0gX19wYWNrZWQ7XG4xODczOlx0XG4xODc0Olx0c3RydWN0IG10NzZfY29ubmFjX21jdV91bmlfZXZlbnQge1xuMTg3NTpcdFx0dTggY2lkO1xuMTg3NjpcdFx0dTggcGFkWzNdO1xuMTg3NzpcdFx0X19sZTMyIHN0YXR1czsgLyogMDogc3VjY2Vzcywgb3RoZXJzOiBmYWlsICovXG4xODc4Olx0fSBfX3BhY2tlZDtcbjE4Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI5MAoJCQkJCQkJb3V0cHV0OiAyMzcKCQkJCQkJCXRob3VnaHRzOiAyNzc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBhbmQgUmVsYXRlZCBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBzZW5kcyB0byB0aGUgTUNVLCBwYXJ0aWN1bGFybHkgZ2l2ZW4gdGhlIG5ldyBjb2RlIGludHJvZHVjZWQgaW4gdGhpcyBwYXRjaC4KCkkgc2VlIHRoYXQgYHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWdgIGhhcyBhIGBkYXRhWzMyMF1gIG1lbWJlci4gVGhlIGNvcmUgb2YgdGhlIGNvbmNlcm4gcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGlzIGlzIGhhbmRsZWQsIGFsb25nIHdpdGggdGhlIHN0YWNrIHZhcmlhYmxlIGByZXNwYCBhbmQgYHJlc3BfdHlwZWAuCgpJbiBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAsIHRoZSBgcmVxYCBzdHJ1Y3R1cmUgaXMgdGhlIGtleSB0byBzZW5kaW5nIGRhdGEgdG8gdGhlIE1DVS4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGF0IHRoZSBjb21waWxlciYjMzk7cyBiZWhhdmlvciB3aGVuIHVzaW5nIHRoZSBgeyAuLi4gfWAgaW5pdGlhbGl6ZXIgaXMgdG8gemVyby1pbml0aWFsaXplIGFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoaXMgbWVhbnMgYF9yc3ZgLCBgY29uZmlnLmlkYCwgYGNvbmZpZy5yZXN2YCBhbmQgY3JpdGljYWxseSwgYGNvbmZpZy5kYXRhYCwgd2lsbCBiZSB6ZXJvZWQuIFRoZW4sIGBtZW1jcHlgIHBvcHVsYXRlcyB0aGUgKmJlZ2lubmluZyogb2YgYGNvbmZpZy5kYXRhYC4gVGhlIGVudGlyZSBgcmVxYCBzdHJ1Y3R1cmUgaXMgdGhlbiBzZW50LiBUaGlzIG1lYW5zIHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHNlbnQgdG8gdGhlIE1DVS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYG10NzkyNV9jb2V4X2luZm9gLCB3aGVyZSB0aGUgYHJlc3BgIGFuZCBgcmVzcF90eXBlYCBhcmUgdXNlZC4gYHJlc3BgIGlzIHVuaW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrLiBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgdGhlbiBwb3B1bGF0ZXMgYHJlc3BgIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcG9wdWxhdGVkIGluIGByZXRgLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB0aGUgc3Vic2VxdWVudCBgc2VxX3ByaW50ZmAgY2FsbHMgb25seSBwcmludCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIGNvcGllZCBpbnRvIGByZXNwYC4gVGhlIGNvZGUgKm9ubHkqIHJlYWRzIHRoZSBpbml0aWFsaXplZCBwYXJ0cyBvZiBgcmVzcGAuCgpUaGUgY3J1Y2lhbCBiaXQsIHRoZXJlZm9yZSwgaXMgdGhlIGNvZGUgaW4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBJZiB0aGUgcm91dGluZSBmaW5kcyB0aGUgYXBwcm9wcmlhdGUgdGFnIHdpdGhpbiB0aGUgcmVjZWl2ZWQgZGF0YSwgaXQgY29waWVzIGRhdGEgaW50byBgcmVzcGAgKHVwIHRvIGByZXNwX3NpemVgKSBhbmQgc2V0cyBgcmV0YCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4gSWYgdGhlIHJvdXRpbmUgZG9lcyBub3QgZmluZCB0aGUgdGFnLCBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIHBhdGggKmVuc3VyZXMqIGByZXRgIHJlcHJlc2VudHMgdGhlIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gdG8gYHJlc3BgLiBUaGVyZSYjMzk7cyBubyBzY2VuYXJpbyB3aGVyZSBgcmV0ICZndDsgMGAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGJ5dGVzIHdlcmVuJiMzOTt0IGluaXRpYWxpemVkLgoKSSB0aGVuIHdlbnQgYmFjayB0byBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ2AgdG8gcmUtZXZhbHVhdGUgaXQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5ldyBwYXRjaC4gSXQgc3RpbGwgc2VlbXMgZmluZSwgYmVjYXVzZSB0aGUgc3RydWN0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgcmVzdCBpcyB6ZXJvZWQuCgpTbywgbGV0JiMzOTtzIGRvdWJsZSBjaGVjay4gYHJlcWAgaXMgY29tcGxldGVseSBpbml0aWFsaXplZC4gTm90aGluZyBpcyBzZW50IHVuaW5pdGlhbGl6ZWQgdG8gdGhlIE1DVS4gVGhlIHJldHVybmVkIGByZXRgIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2YgaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gYHJlc3BgLiBgcmVzcF90eXBlYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdGhlIHVzZS4gVGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlIGlzIGNoZWNrZWQgZm9yIHNpemVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLgoKRmluYWxseSwgcmVnYXJkaW5nIHRoZSBLTVNBTiBydWxlczoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZTogTm8sIHdlIGFyZW4mIzM5O3QgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YTogTm8sIGFsbCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cgYXJlIGluaXRpYWxpemVkIGNvcnJlY3RseS4KMy4gIEFsbG9jYXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQ6IE5vLCB0aGUgc3RhY2sgYnVmZmVyIGByZXNwYCBpcyBvbmx5IHJlYWQgdXAgdG8gdGhlIGluaXRpYWxpemVkIGJ5dGVzLgo0LiAgQm91bmRzIGNoZWNrcyB0aGF0IGFsbG93IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzczogVGhlIGxvZ2ljIGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCB2ZXJpZmllcyB0aGUgc2l6ZXMuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYCBiZWNhdXNlIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGVudHJ5IGBjb2V4X2luZm9gIGFuZCBhIGZ1bmN0aW9uIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCB0byBxdWVyeSB0aGUgTUNVLiBUaGUgbG9jYWwgYHJlcWAgc3RydWN0dXJlIHVzZWQgdG8gc2VuZCB0aGUgcXVlcnkgaXMgcGFydGlhbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJ1Y3QgaW5pdGlhbGl6ZXIsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgY29tcGlsZXIgemVyby1pbml0aWFsaXplcyBhbGwgcmVtYWluaW5nIGZpZWxkcyBhbmQgcGFkZGluZy4gVGhlIGByZXNwYCBidWZmZXIgYW5kIGByZXNwX3R5cGVgIHZhcmlhYmxlIGFyZSBwb3B1bGF0ZWQgYnkgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBUaGUgZnVuY3Rpb24gY29ycmVjdGx5IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgaW50byBgcmVzcGAsIGFuZCB0aGUgY2FsbGVyIGBtdDc5MjVfY29leF9pbmZvYCBvbmx5IHJlYWRzIGV4YWN0bHkgdGhhdCBtYW55IGJ5dGVzLiBgcmVzcF90eXBlYCBpcyBhbHNvIG9ubHkgYWNjZXNzZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvc2l0aXZlIGxlbmd0aCwgbWVhbmluZyBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LCBzZW50IHRvIHRoZSBkZXZpY2UsIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb25zLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGVudHJ5IGBjb2V4X2luZm9gIGFuZCBhIGZ1bmN0aW9uIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCB0byBxdWVyeSB0aGUgTUNVLiBUaGUgbG9jYWwgYHJlcWAgc3RydWN0dXJlIHVzZWQgdG8gc2VuZCB0aGUgcXVlcnkgaXMgcGFydGlhbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJ1Y3QgaW5pdGlhbGl6ZXIsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgY29tcGlsZXIgemVyby1pbml0aWFsaXplcyBhbGwgcmVtYWluaW5nIGZpZWxkcyBhbmQgcGFkZGluZy4gVGhlIGByZXNwYCBidWZmZXIgYW5kIGByZXNwX3R5cGVgIHZhcmlhYmxlIGFyZSBwb3B1bGF0ZWQgYnkgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBUaGUgZnVuY3Rpb24gY29ycmVjdGx5IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgaW50byBgcmVzcGAsIGFuZCB0aGUgY2FsbGVyIGBtdDc5MjVfY29leF9pbmZvYCBvbmx5IHJlYWRzIGV4YWN0bHkgdGhhdCBtYW55IGJ5dGVzLiBgcmVzcF90eXBlYCBpcyBhbHNvIG9ubHkgYWNjZXNzZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvc2l0aXZlIGxlbmd0aCwgbWVhbmluZyBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LCBzZW50IHRvIHRoZSBkZXZpY2UsIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb25zLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMjozMi4wNjY3ODcwNDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkwNDE5NTAzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVQ3OTI1VVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiREVCVUdfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5XCIsXG4gICAgXCJtdDc5MjVfY29leF9pbmZvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRlYnVnZnMgZW50cnkgYGNvZXhfaW5mb2AgYW5kIGEgZnVuY3Rpb24gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIHRvIHF1ZXJ5IHRoZSBNQ1UuIFRoZSBsb2NhbCBgcmVxYCBzdHJ1Y3R1cmUgdXNlZCB0byBzZW5kIHRoZSBxdWVyeSBpcyBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHN0cnVjdCBpbml0aWFsaXplciwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjb21waWxlciB6ZXJvLWluaXRpYWxpemVzIGFsbCByZW1haW5pbmcgZmllbGRzIGFuZCBwYWRkaW5nLiBUaGUgYHJlc3BgIGJ1ZmZlciBhbmQgYHJlc3BfdHlwZWAgdmFyaWFibGUgYXJlIHBvcHVsYXRlZCBieSBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAuIFRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBpbnRvIGByZXNwYCwgYW5kIHRoZSBjYWxsZXIgYG10NzkyNV9jb2V4X2luZm9gIG9ubHkgcmVhZHMgZXhhY3RseSB0aGF0IG1hbnkgYnl0ZXMuIGByZXNwX3R5cGVgIGlzIGFsc28gb25seSBhY2Nlc3NlZCB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9zaXRpdmUgbGVuZ3RoLCBtZWFuaW5nIGl0IHdhcyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3csIHNlbnQgdG8gdGhlIGRldmljZSwgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBtZW1vcnkgY29ycnVwdGlvbnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGRlYnVnZnMgaW50ZXJmYWNlIHRoYXQgdHJpZ2dlcnMgYW4gTUNVIGNvbW1hbmQgYW5kIHBhcnNlcyB0aGUgcmVzcG9uc2UuIFRoZSByZXNwb25zZSBwYXJzaW5nIGxvZ2ljIGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBwcm9jZXNzZXMgdW50cnVzdGVkIGRhdGEgZnJvbSB0aGUgaGFyZHdhcmUgKHdoaWNoIGNhbiBiZSBlbXVsYXRlZCB2aWEgVVNCIGdhZGdldCBpbiBzeXprYWxsZXIpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSByb2J1c3RuZXNzIGFnYWluc3QgbWFsZm9ybWVkIFRMVnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIyOjMyLjA2Njc5MjY2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwMDk1NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzQ4MmE4OWE1ZGUxZTFmMTNiNWM5YjZmYWY3MWVmNjA1YmVmY2RjNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMjoyMjozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcXG5pbmRleCBkMDFmZjQ5ZGU0N2FmLi45YTVlYTEyYjc2Yzc4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xcbkBAIC0yODYsNiArMjg2LDM0IEBAIHN0YXRpYyBpbnQgbXQ3OTI1X2NoaXBfcmVzZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcXG4gXFxuIERFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX3Jlc2V0LCBOVUxMLCBtdDc5MjVfY2hpcF9yZXNldCwgXFxcIiVsbGRcXFxcblxcXCIpO1xcbiBcXG4rc3RhdGljIGludFxcbittdDc5MjVfY29leF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG4re1xcbisjZGVmaW5lIE1UNzkyNV9DSElQX0NPTkZJR19SRVNQX1NJWkVcXHQzMjBcXG4rXFx0c3RydWN0IG10NzkyeF9kZXYgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShzLVxcdTAwM2Vwcml2YXRlKTtcXG4rXFx0dTggcmVzcFtNVDc5MjVfQ0hJUF9DT05GSUdfUkVTUF9TSVpFXSwgcmVzcF90eXBlO1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4rXFx0bXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTtcXG4rXFx0cmV0ID0gbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShkZXYsIFxcXCJjb2V4QndjR2V0TW9kZUluZm8gMFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZyZXNwX3R5cGUsIHJlc3AsIHNpemVvZihyZXNwKSk7XFxuK1xcdG10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRzZXFfcHV0cyhzLCBcXFwibm8gcmVwbHlcXFxcblxcXCIpO1xcbitcXHRlbHNlIGlmIChyZXNwX3R5cGUgPT0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSlcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJS4qc1xcXFxuXFxcIiwgcmV0LCByZXNwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmV0OyBpICs9IDE2KVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIlMDR4OiAlKnBoXFxcXG5cXFwiLCBpLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fdChpbnQsIDE2LCByZXQgLSBpKSwgcmVzcCArIGkpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGlyO1xcbkBAIC0zMDksNiArMzM3LDggQEAgaW50IG10NzkyNV9pbml0X2RlYnVnZnMoc3RydWN0IG10NzkyeF9kZXYgKmRldilcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiaWRsZS10aW1lb3V0XFxcIiwgMDYwMCwgZGlyLCBkZXYsXFxuIFxcdFxcdFxcdCAgICBcXHUwMDI2Zm9wc19wbV9pZGxlX3RpbWVvdXQpO1xcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJjaGlwX3Jlc2V0XFxcIiwgMDYwMCwgZGlyLCBkZXYsIFxcdTAwMjZmb3BzX3Jlc2V0KTtcXG4rXFx0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi1cXHUwMDNlbXQ3Ni5kZXYsIFxcXCJjb2V4X2luZm9cXFwiLCBkaXIsXFxuK1xcdFxcdFxcdFxcdCAgICBtdDc5MjVfY29leF9pbmZvKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi1cXHUwMDNlbXQ3Ni5kZXYsIFxcXCJydW50aW1lX3BtX3N0YXRzXFxcIiwgZGlyLFxcbiBcXHRcXHRcXHRcXHQgICAgbXQ3OTJ4X3BtX3N0YXRzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiZGVlcC1zbGVlcFxcXCIsIDA2MDAsIGRpciwgZGV2LCBcXHUwMDI2Zm9wc19kcyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmNcXG5pbmRleCBmYTI5YzQ4NmE0NTUzLi5lNjMxNmNlYTE4NjUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmNcXG5AQCAtMTE2MCw2ICsxMTYwLDgxIEBAIGludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZClcXG4gXFx0XFx0XFx0XFx0IFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCBmYWxzZSk7XFxuIH1cXG4gXFxuK2ludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCxcXG4rXFx0XFx0XFx0XFx0IHU4ICpyZXNwX3R5cGUsIHZvaWQgKnJlc3AsIHUxNiByZXNwX3NpemUpXFxuK3tcXG4rXFx0dTE2IGxlbiA9IHN0cmxlbihjbWQpO1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHR1OCBfcnN2WzRdO1xcbitcXHRcXHRfX2xlMTYgdGFnO1xcbitcXHRcXHRfX2xlMTYgbGVuO1xcbitcXHRcXHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIGNvbmZpZztcXG4rXFx0fSBfX3BhY2tlZCByZXEgPSB7XFxuK1xcdFxcdC50YWcgPSBjcHVfdG9fbGUxNihVTklfQ0hJUF9DT05GSUdfQ0hJUF9DRkcpLFxcbitcXHRcXHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSA0KSxcXG4rXFx0XFx0LmNvbmZpZyA9IHtcXG4rXFx0XFx0XFx0LnJlc3BfdHlwZSA9IDAsXFxuK1xcdFxcdFxcdC50eXBlID0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSxcXG4rXFx0XFx0XFx0LmRhdGFfc2l6ZSA9IGNwdV90b19sZTE2KGxlbiksXFxuK1xcdFxcdH0sXFxuK1xcdH07XFxuK1xcdGNvbnN0IHUxNiBoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB0bHYpICtcXG4rXFx0XFx0XFx0ICAgIG9mZnNldG9mKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcsIGRhdGEpO1xcbitcXHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICpjZmc7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWxlbiB8fCBsZW4gXFx1MDAzZT0gc2l6ZW9mKHJlcS5jb25maWcuZGF0YSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bWVtY3B5KHJlcS5jb25maWcuZGF0YSwgY21kLCBsZW4pO1xcbitcXG4rXFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKENISVBfQ09ORklHKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIHRydWUsIFxcdTAwMjZza2IpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogc2tpcCB0aGUgZml4ZWQgZmllbGQgb2YgdGhlIGV2ZW50LCB0aGUgVExWcyBmb2xsb3cgaXQgKi9cXG4rXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgNCkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRza2JfcHVsbChza2IsIDQpO1xcbitcXG4rXFx0cmV0ID0gLUVOT0VOVDtcXG4rXFx0d2hpbGUgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgdGx2KSkge1xcbitcXHRcXHRzdHJ1Y3QgdGx2ICp0bHYgPSAoc3RydWN0IHRsdiAqKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0XFx0dTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdSh0bHYtXFx1MDAzZWxlbik7XFxuK1xcdFxcdHUxNiBkYXRhX3NpemU7XFxuK1xcbitcXHRcXHRpZiAodGx2X2xlbiBcXHUwMDNjIHNpemVvZigqdGx2KSB8fCB0bHZfbGVuIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aWYgKGxlMTZfdG9fY3B1KHRsdi1cXHUwMDNldGFnKSAhPSBVTklfQ0hJUF9DT05GSUdfQ0hJUF9DRkcpIHtcXG4rXFx0XFx0XFx0c2tiX3B1bGwoc2tiLCB0bHZfbGVuKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICh0bHZfbGVuIFxcdTAwM2MgaGRyX2xlbilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRjZmcgPSAoc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqKXRsdi1cXHUwMDNlZGF0YTtcXG4rXFx0XFx0ZGF0YV9zaXplID0gbGUxNl90b19jcHUoY2ZnLVxcdTAwM2VkYXRhX3NpemUpO1xcbitcXHRcXHRpZiAoZGF0YV9zaXplIFxcdTAwM2UgdGx2X2xlbiAtIGhkcl9sZW4pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0KnJlc3BfdHlwZSA9IGNmZy1cXHUwMDNlcmVzcF90eXBlO1xcbitcXHRcXHRyZXQgPSBtaW5fdCh1MTYsIGRhdGFfc2l6ZSwgcmVzcF9zaXplKTtcXG4rXFx0XFx0bWVtY3B5KHJlc3AsIGNmZy1cXHUwMDNlZGF0YSwgcmV0KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK291dDpcXG4rXFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gaW50IG10NzkyNV9tY3Vfc2V0X2RlZXBfc2xlZXAoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgYm9vbCBlbmFibGUpXFxuIHtcXG4gXFx0Y2hhciBjbWRbMTZdO1xcbkBAIC0zNzcyLDcgKzM4NDcsOCBAQCBpbnQgbXQ3OTI1X21jdV9maWxsX21lc3NhZ2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHR1bmlfdHhkLVxcdTAwM2VvcHRpb24gPSBNQ1VfQ01EX1VOSV9FWFRfQUNLO1xcbiBcXG4gXFx0XFx0aWYgKGNtZCA9PSBNQ1VfVU5JX0NNRChISUZfQ1RSTCkgfHxcXG4tXFx0XFx0ICAgIGNtZCA9PSBNQ1VfVU5JX0NNRChDSElQX0NPTkZJRykpXFxuK1xcdFxcdCAgICBjbWQgPT0gTUNVX1VOSV9DTUQoQ0hJUF9DT05GSUcpIHx8XFxuK1xcdFxcdCAgICBjbWQgPT0gTUNVX1VOSV9RVUVSWShDSElQX0NPTkZJRykpXFxuIFxcdFxcdFxcdHVuaV90eGQtXFx1MDAzZW9wdGlvbiBcXHUwMDI2PSB+TUNVX0NNRF9BQ0s7XFxuIFxcbiBcXHRcXHRpZiAobWN1X2NtZCA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMIHx8XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmhcXG5pbmRleCAxMWY5ZWFjMTNmZmM2Li4yY2YzOTcxZDk4NTNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmhcXG5AQCAtMTE5LDYgKzExOSwxNSBAQCBlbnVtIHtcXG4gXFx0VU5JX0NISVBfQ09ORklHX05JQ19DQVBBID0gMHgzLFxcbiB9O1xcbiBcXG4rLyogdHlwZS9yZXNwX3R5cGUgb2Ygc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqL1xcbitlbnVtIHtcXG4rXFx0Q0hJUF9DT05GSUdfVFlQRV9XT19SRVNQT05TRSxcXG4rXFx0Q0hJUF9DT05GSUdfVFlQRV9NRU04LFxcbitcXHRDSElQX0NPTkZJR19UWVBFX01FTTMyLFxcbitcXHRDSElQX0NPTkZJR19UWVBFX0FTQ0lJLFxcbitcXHRDSElQX0NPTkZJR19UWVBFX0JJTkFSWSxcXG4rfTtcXG4rXFxuIGVudW0ge1xcbiBcXHRVTklfQkFORF9DT05GSUdfUkFESU9fRU5BQkxFLFxcbiBcXHRVTklfQkFORF9DT05GSUdfUlRTX1RIUkVTSE9MRCA9IDB4MDgsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmhcXG5pbmRleCAzMjFlNzMyMzQ3ZjJmLi5kMGRiNWQ4ZGFlNDgzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmhcXG5AQCAtMjk1LDYgKzI5NSw4IEBAIGludCBtdDc5MjVfbWN1X2dldF9yeF9yYXRlKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuIGludCBtdDc5MjVfbWN1X2Z3X2xvZ18yX2hvc3Qoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggY3RybCk7XFxuIHZvaWQgbXQ3OTI1X21jdV9yeF9ldmVudChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gaW50IG10NzkyNV9tY3VfY2hpcF9jb25maWcoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kKTtcXG4raW50IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kLFxcbitcXHRcXHRcXHRcXHQgdTggKnJlc3BfdHlwZSwgdm9pZCAqcmVzcCwgdTE2IHJlc3Bfc2l6ZSk7XFxuIGludCBtdDc5MjVfbWN1X3NldF9yeGZpbHRlcihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MzIgZmlmLFxcbiBcXHRcXHRcXHQgICAgdTggYml0X29wLCB1MzIgYml0X21hcCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMjozMi40ODc1NTQzNDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzEzMDU5NDgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc5MjVVXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJERUJVR19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlcIixcbiAgICBcIm10NzkyNV9jb2V4X2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZGVidWdmcyBpbnRlcmZhY2UgdGhhdCB0cmlnZ2VycyBhbiBNQ1UgY29tbWFuZCBhbmQgcGFyc2VzIHRoZSByZXNwb25zZS4gVGhlIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgaW4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIHByb2Nlc3NlcyB1bnRydXN0ZWQgZGF0YSBmcm9tIHRoZSBoYXJkd2FyZSAod2hpY2ggY2FuIGJlIGVtdWxhdGVkIHZpYSBVU0IgZ2FkZ2V0IGluIHN5emthbGxlcikgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJvYnVzdG5lc3MgYWdhaW5zdCBtYWxmb3JtZWQgVExWcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzQ4MmE4OWE1ZGUxZTFmMTNiNWM5YjZmYWY3MWVmNjA1YmVmY2RjNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDAyOjIyOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jXG5pbmRleCBkMDFmZjQ5ZGU0N2FmLi45YTVlYTEyYjc2Yzc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcbkBAIC0yODYsNiArMjg2LDM0IEBAIHN0YXRpYyBpbnQgbXQ3OTI1X2NoaXBfcmVzZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiBcbiBERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoZm9wc19yZXNldCwgTlVMTCwgbXQ3OTI1X2NoaXBfcmVzZXQsIFwiJWxsZFxcblwiKTtcbiBcbitzdGF0aWMgaW50XG4rbXQ3OTI1X2NvZXhfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4re1xuKyNkZWZpbmUgTVQ3OTI1X0NISVBfQ09ORklHX1JFU1BfU0laRVx0MzIwXG4rXHRzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKHMtXHUwMDNlcHJpdmF0ZSk7XG4rXHR1OCByZXNwW01UNzkyNV9DSElQX0NPTkZJR19SRVNQX1NJWkVdLCByZXNwX3R5cGU7XG4rXHRpbnQgaSwgcmV0O1xuK1xuK1x0bXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTtcbitcdHJldCA9IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoZGV2LCBcImNvZXhCd2NHZXRNb2RlSW5mbyAwXCIsXG4rXHRcdFx0XHRcdCAgIFx1MDAyNnJlc3BfdHlwZSwgcmVzcCwgc2l6ZW9mKHJlc3ApKTtcbitcdG10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKCFyZXQpXG4rXHRcdHNlcV9wdXRzKHMsIFwibm8gcmVwbHlcXG5cIik7XG4rXHRlbHNlIGlmIChyZXNwX3R5cGUgPT0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSlcbitcdFx0c2VxX3ByaW50ZihzLCBcIiUuKnNcXG5cIiwgcmV0LCByZXNwKTtcbitcdGVsc2VcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmV0OyBpICs9IDE2KVxuK1x0XHRcdHNlcV9wcmludGYocywgXCIlMDR4OiAlKnBoXFxuXCIsIGksXG4rXHRcdFx0XHQgICBtaW5fdChpbnQsIDE2LCByZXQgLSBpKSwgcmVzcCArIGkpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqZGlyO1xuQEAgLTMwOSw2ICszMzcsOCBAQCBpbnQgbXQ3OTI1X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcImlkbGUtdGltZW91dFwiLCAwNjAwLCBkaXIsIGRldixcbiBcdFx0XHQgICAgXHUwMDI2Zm9wc19wbV9pZGxlX3RpbWVvdXQpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcImNoaXBfcmVzZXRcIiwgMDYwMCwgZGlyLCBkZXYsIFx1MDAyNmZvcHNfcmVzZXQpO1xuK1x0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi1cdTAwM2VtdDc2LmRldiwgXCJjb2V4X2luZm9cIiwgZGlyLFxuK1x0XHRcdFx0ICAgIG10NzkyNV9jb2V4X2luZm8pO1xuIFx0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi1cdTAwM2VtdDc2LmRldiwgXCJydW50aW1lX3BtX3N0YXRzXCIsIGRpcixcbiBcdFx0XHRcdCAgICBtdDc5MnhfcG1fc3RhdHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcImRlZXAtc2xlZXBcIiwgMDYwMCwgZGlyLCBkZXYsIFx1MDAyNmZvcHNfZHMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmNcbmluZGV4IGZhMjljNDg2YTQ1NTMuLmU2MzE2Y2VhMTg2NTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmNcbkBAIC0xMTYwLDYgKzExNjAsODEgQEAgaW50IG10NzkyNV9tY3VfY2hpcF9jb25maWcoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kKVxuIFx0XHRcdFx0IFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIGZhbHNlKTtcbiB9XG4gXG4raW50IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kLFxuK1x0XHRcdFx0IHU4ICpyZXNwX3R5cGUsIHZvaWQgKnJlc3AsIHUxNiByZXNwX3NpemUpXG4re1xuK1x0dTE2IGxlbiA9IHN0cmxlbihjbWQpO1xuK1x0c3RydWN0IHtcbitcdFx0dTggX3Jzdls0XTtcbitcdFx0X19sZTE2IHRhZztcbitcdFx0X19sZTE2IGxlbjtcbitcdFx0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyBjb25maWc7XG4rXHR9IF9fcGFja2VkIHJlcSA9IHtcbitcdFx0LnRhZyA9IGNwdV90b19sZTE2KFVOSV9DSElQX0NPTkZJR19DSElQX0NGRyksXG4rXHRcdC5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIDQpLFxuK1x0XHQuY29uZmlnID0ge1xuK1x0XHRcdC5yZXNwX3R5cGUgPSAwLFxuK1x0XHRcdC50eXBlID0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSxcbitcdFx0XHQuZGF0YV9zaXplID0gY3B1X3RvX2xlMTYobGVuKSxcbitcdFx0fSxcbitcdH07XG4rXHRjb25zdCB1MTYgaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdGx2KSArXG4rXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcsIGRhdGEpO1xuK1x0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqY2ZnO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWxlbiB8fCBsZW4gXHUwMDNlPSBzaXplb2YocmVxLmNvbmZpZy5kYXRhKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtZW1jcHkocmVxLmNvbmZpZy5kYXRhLCBjbWQsIGxlbik7XG4rXG4rXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKENISVBfQ09ORklHKSxcbitcdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBza2lwIHRoZSBmaXhlZCBmaWVsZCBvZiB0aGUgZXZlbnQsIHRoZSBUTFZzIGZvbGxvdyBpdCAqL1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIDQpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRza2JfcHVsbChza2IsIDQpO1xuK1xuK1x0cmV0ID0gLUVOT0VOVDtcbitcdHdoaWxlIChza2ItXHUwMDNlbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCB0bHYpKSB7XG4rXHRcdHN0cnVjdCB0bHYgKnRsdiA9IChzdHJ1Y3QgdGx2ICopc2tiLVx1MDAzZWRhdGE7XG4rXHRcdHUxNiB0bHZfbGVuID0gbGUxNl90b19jcHUodGx2LVx1MDAzZWxlbik7XG4rXHRcdHUxNiBkYXRhX3NpemU7XG4rXG4rXHRcdGlmICh0bHZfbGVuIFx1MDAzYyBzaXplb2YoKnRsdikgfHwgdGx2X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbitcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKGxlMTZfdG9fY3B1KHRsdi1cdTAwM2V0YWcpICE9IFVOSV9DSElQX0NPTkZJR19DSElQX0NGRykge1xuK1x0XHRcdHNrYl9wdWxsKHNrYiwgdGx2X2xlbik7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0aWYgKHRsdl9sZW4gXHUwMDNjIGhkcl9sZW4pXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGNmZyA9IChzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICopdGx2LVx1MDAzZWRhdGE7XG4rXHRcdGRhdGFfc2l6ZSA9IGxlMTZfdG9fY3B1KGNmZy1cdTAwM2VkYXRhX3NpemUpO1xuK1x0XHRpZiAoZGF0YV9zaXplIFx1MDAzZSB0bHZfbGVuIC0gaGRyX2xlbilcbitcdFx0XHRicmVhaztcbitcbitcdFx0KnJlc3BfdHlwZSA9IGNmZy1cdTAwM2VyZXNwX3R5cGU7XG4rXHRcdHJldCA9IG1pbl90KHUxNiwgZGF0YV9zaXplLCByZXNwX3NpemUpO1xuK1x0XHRtZW1jcHkocmVzcCwgY2ZnLVx1MDAzZWRhdGEsIHJldCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK291dDpcbitcdGRldl9rZnJlZV9za2Ioc2tiKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIGludCBtdDc5MjVfbWN1X3NldF9kZWVwX3NsZWVwKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKVxuIHtcbiBcdGNoYXIgY21kWzE2XTtcbkBAIC0zNzcyLDcgKzM4NDcsOCBAQCBpbnQgbXQ3OTI1X21jdV9maWxsX21lc3NhZ2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdHVuaV90eGQtXHUwMDNlb3B0aW9uID0gTUNVX0NNRF9VTklfRVhUX0FDSztcbiBcbiBcdFx0aWYgKGNtZCA9PSBNQ1VfVU5JX0NNRChISUZfQ1RSTCkgfHxcbi1cdFx0ICAgIGNtZCA9PSBNQ1VfVU5JX0NNRChDSElQX0NPTkZJRykpXG4rXHRcdCAgICBjbWQgPT0gTUNVX1VOSV9DTUQoQ0hJUF9DT05GSUcpIHx8XG4rXHRcdCAgICBjbWQgPT0gTUNVX1VOSV9RVUVSWShDSElQX0NPTkZJRykpXG4gXHRcdFx0dW5pX3R4ZC1cdTAwM2VvcHRpb24gXHUwMDI2PSB+TUNVX0NNRF9BQ0s7XG4gXG4gXHRcdGlmIChtY3VfY21kID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX0NUUkwgfHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oXG5pbmRleCAxMWY5ZWFjMTNmZmM2Li4yY2YzOTcxZDk4NTNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oXG5AQCAtMTE5LDYgKzExOSwxNSBAQCBlbnVtIHtcbiBcdFVOSV9DSElQX0NPTkZJR19OSUNfQ0FQQSA9IDB4MyxcbiB9O1xuIFxuKy8qIHR5cGUvcmVzcF90eXBlIG9mIHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKi9cbitlbnVtIHtcbitcdENISVBfQ09ORklHX1RZUEVfV09fUkVTUE9OU0UsXG4rXHRDSElQX0NPTkZJR19UWVBFX01FTTgsXG4rXHRDSElQX0NPTkZJR19UWVBFX01FTTMyLFxuK1x0Q0hJUF9DT05GSUdfVFlQRV9BU0NJSSxcbitcdENISVBfQ09ORklHX1RZUEVfQklOQVJZLFxuK307XG4rXG4gZW51bSB7XG4gXHRVTklfQkFORF9DT05GSUdfUkFESU9fRU5BQkxFLFxuIFx0VU5JX0JBTkRfQ09ORklHX1JUU19USFJFU0hPTEQgPSAweDA4LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmhcbmluZGV4IDMyMWU3MzIzNDdmMmYuLmQwZGI1ZDhkYWU0ODMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmhcbkBAIC0yOTUsNiArMjk1LDggQEAgaW50IG10NzkyNV9tY3VfZ2V0X3J4X3JhdGUoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBpbnQgbXQ3OTI1X21jdV9md19sb2dfMl9ob3N0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGN0cmwpO1xuIHZvaWQgbXQ3OTI1X21jdV9yeF9ldmVudChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpO1xuK2ludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCxcbitcdFx0XHRcdCB1OCAqcmVzcF90eXBlLCB2b2lkICpyZXNwLCB1MTYgcmVzcF9zaXplKTtcbiBpbnQgbXQ3OTI1X21jdV9zZXRfcnhmaWx0ZXIoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTMyIGZpZixcbiBcdFx0XHQgICAgdTggYml0X29wLCB1MzIgYml0X21hcCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMjozMi40ODc1NTU4MzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODc0MDAzMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVQ3OTI1IENvZXhpc3RlbmNlIEluZm9ybWF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbml0aWFsbHkuIEl0IGFkZHMgYSBgY29leF9pbmZvYCBkZWJ1Z2ZzIGZpbGUgd2l0aGluIHRoZSBtdDc5MjUgd2lyZWxlc3MgZHJpdmVyLCBjcmVhdGVkIHVzaW5nIGBkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGVgLiBUaGUgYWN0dWFsIGRhdGEgaXMgZ2VuZXJhdGVkIGJ5IGBtdDc5MjVfY29leF9pbmZvYCwgd2hpY2ggY2FsbHMgdGhpcyBuZXcgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uJ3MgdGhlIGtleSwgaXQncyB0aGUgb25lIHNlbmRpbmcgYW4gTUNVIGNvbW1hbmQsIHNwZWNpZmljYWxseSBgTUNVX1VOSV9RVUVSWShDSElQX0NPTkZJRylgLCBhbmQgdGhlbiBwYXJzaW5nIHRoZSByZXNwb25zZS4gSXQgYWxsIGxvb2tzIGNsZWFuIGF0IGZpcnN0IGdsYW5jZSwgd2VsbC1zdHJ1Y3R1cmVkLlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uIHBvcHMgaW50byBteSBtaW5kOiBDYW4gSSBhY3R1YWxseSB0ZXN0IHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIE1UNzkyNSBkcml2ZXIgaXMgdXN1YWxseSBmb3IgUENJZSBvciBVU0Igd2lyZWxlc3MgY2FyZHMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyeSBwcm9iaW5nIGl0IGluIFFFTVUuIEJ1dCB0aGVuIEkgcXVpY2tseSByZW1lbWJlciwgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBNVDc5MjUgaGFyZHdhcmUuIFNvLCB0aGF0J3MgYSBkZWFkIGVuZC5cblxuV2FpdCBhIG1pbnV0ZSwgZG9lcyB0aGUgZHJpdmVyIGV2ZW4gc3VwcG9ydCBVU0I/IEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkndmUgd29ya2VkIG9uIE1UNzYsIEkgbmVlZCB0byBjaGVjayB0aGUgVVNCLXNwZWNpZmljIGNvZGUgd2l0aGluIHRoZSBkcml2ZXIuIExldCBtZSBzZWFyY2ggdGhyb3VnaCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdXNiLmNgIG9yIGFueSBvdGhlciByZWxldmFudCBmaWxlcy4gSSdsbCB1c2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCBvciBzaW1pbGFyIHRvIHF1aWNrbHkgY29uZmlybSBpZiBhIFVTQiBkcml2ZXIgaW1wbGVtZW50YXRpb24gZXhpc3RzLiBUaGF0J3MgdGhlIHJvdXRlIEknbSBnb2luZyB0byB0YWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTkzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6MjI6MzguMzYxNTYxMTgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImRlYnVnZnMuY1wiLFxuICAgIFwiaW5pdC5jXCIsXG4gICAgXCJtYWMuY1wiLFxuICAgIFwibWFjLmhcIixcbiAgICBcIm1haW4uY1wiLFxuICAgIFwibWN1LmNcIixcbiAgICBcIm1jdS5oXCIsXG4gICAgXCJtdDc5MjUuaFwiLFxuICAgIFwibmFuLmNcIixcbiAgICBcIm5hbi5oXCIsXG4gICAgXCJwY2kuY1wiLFxuICAgIFwicGNpX21hYy5jXCIsXG4gICAgXCJwY2lfbWN1LmNcIixcbiAgICBcInJlZ2QuY1wiLFxuICAgIFwicmVnZC5oXCIsXG4gICAgXCJyZWdzLmhcIixcbiAgICBcInRlc3Rtb2RlLmNcIixcbiAgICBcInVzYi5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIyOjM4LjM2MTYyNTM0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTI0Mjg0MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgV29ydGhpbmVzcyBBc3Nlc3NtZW50IGZvciBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIGZvciB0aGUgYG10NzkyNWAgZHJpdmVyLCBhbmQgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgd2hldGhlciB3ZSBjYW4gcmVhY2ggdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cbkZpcnN0LCBJIHNlZSB0aGUgZHJpdmVyJ3MgVVNCIHByb2JlIGNhbiBiZSB0cmlnZ2VyZWQgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMgdmlhIGBzeXpfdXNiX2Nvbm5lY3RgLiBTbyBmYXIsIHNvIGdvb2QuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb3IgYXJlIHB1cmVseSBkZWNvcmF0aXZlLlxuXG5Ob3csIHRoZSBwYXRjaCBhZGRzIGEgZGVidWdmcyBmaWxlIChgY29leF9pbmZvYCkgYW5kIGEgcmVhZCBoYW5kbGVyIChgbXQ3OTI1X2NvZXhfaW5mb2ApIGFzIHdlbGwgYXMgYSBoZWxwZXIgZnVuY3Rpb24gKGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCkuIEluaXRpYWxseSwgZGVidWdmcyBmaWxlcyBzZWVtIGxpa2UgYSBiaXQgb2YgYSBncmV5IGFyZWEuIFRoZXkncmUgb2Z0ZW4gY29uc2lkZXJlZCBkZWNvcmF0aXZlLCBidXQgdGhleSAqY2FuKiBiZSBmdXp6ZWQuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXNlICpvbmx5KiBkZWJ1Z2ZzIG1vZGlmaWNhdGlvbnM/XG5cbkxldCdzIGxvb2sgbW9yZSBjbG9zZWx5LiBUaGUgcGF0Y2ggdG91Y2hlcyBgZGVidWdmcy5jYCwgYG1jdS5jYCwgYW5kIGBtY3UuY2AuIEkgc2VlIHRoYXQgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIGlzIGludm9sdmVkLCBhbmQgaXQgYXBwZWFycyB0byBzZW5kIGEgc3BlY2lmaWMgTUNVIGNvbW1hbmQgKGBjb2V4QndjR2V0TW9kZUluZm8gMGApIGFuZCBwYXJzZXMgdGhlIHJlc3BvbnNlLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSEgSXQncyBub3QgKmp1c3QqIGRlYnVnIG91dHB1dC5cblxuRGlnZ2luZyBkZWVwZXIsIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBwYXJzZXMgYSBUTFYgKFR5cGUtTGVuZ3RoLVZhbHVlKSBmcm9tIHRoZSBTS0IuIENydWNpYWxseSwgdGhpcyBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgaGFyZHdhcmUgdGhyb3VnaCB0aGUgZW11bGF0ZWQgVVNCIGRldmljZS4gQW5kLCB0aGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IFN5emthbGxlciBjYW4gcHJvdmlkZSBhcmJpdHJhcnkgcmVzcG9uc2VzIHRvIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgc2VuZGluZyB0aGlzIHJlc3BvbnNlLiBUaGlzIG1lYW5zIHdlIGNhbiBjcmFmdCBtYWxpY2lvdXMgVVNCIHJlc3BvbnNlcyB0byBleHBsb2l0IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgVExWIHBhcnNpbmcgY29kZS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgVVNCIHJlc3BvbnNlIGlzIGVtdWxhdGVkLCB3ZSBjYW4gZGVmaW5pdGVseSByZWFjaCBhbmQgZnV6eiB0aGUgVExWIHBhcnNpbmcgbG9naWMgaW4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLCB3aGljaCBwcm9jZXNzZXMgdW50cnVzdGVkIGlucHV0LiBJdOKAmXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIGJlY2F1c2Ugd2UgY2FuIHRyaWdnZXIgaXQgYW5kIHByb3ZpZGUgYSByYW5nZSBvZiBtYWxpY2lvdXMgaW5wdXRzLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYE1UNzkyNV9VU0JgIGNvbmZpZ3VyYXRpb24gc28gdGhhdCBpdCBjYW4gYmUgdGVzdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDIwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk4LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMjo1MC44ODU5MTI2MDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwOTE2MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1UNzkyNVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnOjI6Y29uZmlnIE1UNzkyNV9DT01NT05cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWctNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnOjc6Y29uZmlnIE1UNzkyNUVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTgtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzkyNUUgKFBDSWUpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTE4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWc6MTk6Y29uZmlnIE1UNzkyNVVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc5MjVVIChVU0IpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIyOjUwLjkzMTAxMDQ1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MTIwNzg4NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYE1UNzkyNVVgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBNVDc5MjVVYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgcmVsZXZhbnQga2VybmVsIGRvY3VtZW50YXRpb24sIHNwZWNpZmljYWxseSBhbnl0aGluZyBzdXJyb3VuZGluZyB0aGUgTWVkaWFUZWsgd2lyZWxlc3MgZHJpdmVycy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSB1c3VhbCBzdXNwZWN0czogdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzLCB0aGUgZHJpdmVyIGNvZGUgaXRzZWxmLCBhbmQgYW55IHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgKGxpa2UgZmlybXdhcmUgYmxvYnMgb3IgcmVndWxhdG9yeSBkYXRhYmFzZSBpbnRlcmFjdGlvbnMpLlxuXG5NeSBicmFpbidzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBhcmVhcyB0byBwcm9iZS4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBtb2R1bGVzIHRoYXQgYXJlICprbm93biogdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIHBhcnRpY3VsYXIgY2hpcCwgZXZlbiBpbmRpcmVjdGx5PyBUaGluayBhYm91dCB0aGUgdHlwaWNhbCBXaUZpIHN0YWNrIGxheWVyczogTUFDLCBQSFksIHJlZ3VsYXRvcnksIG5ldHdvcmtpbmcuIEFyZSB0aGVyZSBhbnkgaW50ZXItbW9kdWxlIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBpbXBvcnRhbnQgdG8gY29uc2lkZXI/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGdyZXAgc2VhcmNoIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciBgTVQ3OTI1VWAgb3IgcmVsYXRlZCBzdHJpbmdzLCBwYXlpbmcgYXR0ZW50aW9uIHRvIGhlYWRlcnMgYW5kIEtjb25maWcgZmlsZXMgdG8gZ2V0IGEgcHJlbGltaW5hcnkgZGVwZW5kZW5jeSBtYXAuXG5cbkJleW9uZCB0aGUgZGlyZWN0IGtlcm5lbCBtb2R1bGVzLCBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJ1aWxkIGVudmlyb25tZW50LiBXaGF0IGtlcm5lbCB2ZXJzaW9ucyBpcyB0aGlzIGRyaXZlciBrbm93biB0byBzdXBwb3J0PyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gc2V0IHRvIGVuYWJsZSBpdD8gSSBzaG91bGQgY2hlY2sgdGhlIG1ha2VmaWxlcyBmb3IgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzLiBJdCdzIGFsc28gaW1wb3J0YW50IHRvIHRoaW5rIGFib3V0IHRoZSB1c2VyLXNwYWNlIHRvb2xzIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgZHJpdmVyIHRocm91Z2ggYG5sODAyMTFgIG9yIG90aGVyIGludGVyZmFjZXMuIFRob3NlIGluZGlyZWN0IGRlcGVuZGVuY2llcyBhcmUgY3JpdGljYWwuXG5cblVsdGltYXRlbHksIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgaG93IHRoaXMgdGhpbmcgZml0cyBpbnRvIHRoZSBzeXN0ZW0uIEl0J3Mgbm90IGp1c3QgYWJvdXQgbGlzdGluZyBtb2R1bGVzOyBpdCdzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgZXhjaGFuZ2UsIGFuZCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIGNvbmZsaWN0LiBMZXQncyBzZWUgaWYgSSBjYW4gbWFwIG91dCB0aGlzIGxhbmRzY2FwZSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMxNiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIzOjA3LjA1MTgwMjM2NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTk6XFx0Y29uZmlnIE1UNzkyNVVcXG4gIDIwOlxcdFxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc5MjVVIChVU0IpIHN1cHBvcnRcXFwiXFxuICAyMTpcXHRcXHRzZWxlY3QgTVQ3OTJ4X1VTQlxcbiAgMjI6XFx0XFx0c2VsZWN0IE1UNzkyNV9DT01NT05cXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gVVNCXFxuICAyNTpcXHRcXHRoZWxwXFxuICAyNjpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc5MjUtYmFzZWQgd2lyZWxlc3MgVVNCIGRldmljZXMsXFxuICAyNzpcXHRcXHQgIHdoaWNoIHN1cHBvcnQgb3BlcmF0aW9uIGF0IDZHSHosIDVHSHosIGFuZCAyLjRHSHogSUVFRSA4MDIuMTFiZVxcbiAgMjg6XFx0XFx0ICAyeDI6MlNTIDQwOTYtUUFNLCAxNjBNSHogY2hhbm5lbHMuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6MjM6MDcuMDUxODcwNzQ0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MzQ1MjYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1UNzkyNVUgRHJpdmVyIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoZSBgTVQ3OTI1VWAgZHJpdmVyLCB3aGljaCBJIGtub3cgcHJldHR5IHdlbGwsIGlzIGJ1aWx0IG9uIHRvcCBvZiBgTUFDODAyMTFgIGFuZCByZWxpZXMgb24gdGhlIGBVU0JgIHN1YnN5c3RlbS4gTWFrZXMgc2Vuc2UsIHRoYXQncyB0aGUgY29tbW9uIGFyY2hpdGVjdHVyZSBmb3IgVVNCLWJhc2VkIHdpcmVsZXNzIGRldmljZXMuIEkgYWxzbyBzZWUgdGhhdCBgTVQ3OTI1X0NPTU1PTmAgaXMgc2VsZWN0ZWQsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIGEgc2xpZ2h0IHBhdXNlLi4uIEknbSBqdXN0IHF1aWNrbHkgY29uZmlybWluZyBpZiBgTVQ3OTI1VWAgZGlyZWN0bHkgZGVwZW5kcyBvbiBgTVQ3Nl9VU0JgLCBvciBpZiBpdCdzIHNlbGVjdGVkIGltcGxpY2l0bHkgdmlhIHNvbWV0aGluZyBlbHNlLiBNeSBpbnR1aXRpb24gaXMgdGhhdCBgTVQ3OTJ4X1VTQmAgcHJvYmFibHkgaGFuZGxlcyB0aGUgc2VsZWN0aW9uLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MngvS2NvbmZpZ2AgZGlyZWN0b3J5IG9yIGEgc2ltaWxhcmx5IHN0cnVjdHVyZWQgbG9jYXRpb24gZm9yIHRoZSBkZXBlbmRlbmNpZXMuIEdvdHRhIGJlIHN1cmUgYWJvdXQgdGhpcyB0byBnZXQgdGhlIG1vZHVsZSBsb2FkaW5nIG9yZGVyIGNvcnJlY3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NjQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzoxMS4zOTUzMjU5MjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODA2MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNVDc5MnhfVVNCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZz0zMj1jb25maWcgTVQ3OTJ4X0xJQlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnLTM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZzozNjpjb25maWcgTVQ3OTJ4X1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy0zNy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzoxMS40NDQxMzkxNDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA5OTc3NjAwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gY2hlY2tpbmcgdGhlIGBNVDc5MnhfVVNCYCBkZXBlbmRlbmNpZXMsIHByZXNlbnRlZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBgTVQ3OTJ4X1VTQmAgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgYE1UNzkyeF9VU0JgIG1vZHVsZSByZWxpZXMgb24uIEJlZm9yZSBJIGV2ZW4gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSB0eXBpY2FsIGFyZWFzOlxuXG4qICAgKipVbmRlcmx5aW5nIEhhcmR3YXJlOioqIEZpcnN0IGFuZCBmb3JlbW9zdCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSB0aGlzIGlzIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoLiBEb2VzIGl0IGFzc3VtZSBhIHBhcnRpY3VsYXIgVVNCIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbj8gV2hhdCBhYm91dCB0aGUgb3ZlcmFsbCBzeXN0ZW0tb24tYS1jaGlwIChTb0MpIGFyY2hpdGVjdHVyZT8gQW55IHNwZWNpYWxpemVkIHJlZ2lzdGVycyBvciBtZW1vcnkgbWFwcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgaGFyZHdhcmUgY29uZmxpY3RzIG9yIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMuXG5cbiogICAqKlVTQiBTdGFjayBJbnRlZ3JhdGlvbjoqKiBOb3csIGl0J3MgYWJvdXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGhvc3QgVVNCIHN0YWNrLiBJcyBpdCB1c2luZyBhIHN0YW5kYXJkIFVTQiBjbGFzcyBkcml2ZXIsIG9yIGlzIHRoaXMgYSBjdXN0b20gaW1wbGVtZW50YXRpb24/IEFyZSB0aGVyZSBzcGVjaWZpYyBVU0IgdHJhbnNmZXIgdHlwZXMgKGJ1bGssIGludGVycnVwdCwgY29udHJvbCwgaXNvY2hyb25vdXMpIGl0J3MgbGV2ZXJhZ2luZywgYW5kIHRoZXJlZm9yZSBkZXBlbmRlbnQgb24gdGhlIGNvcnJlc3BvbmRpbmcgc3RhY2sgY2FwYWJpbGl0aWVzPyBJIG5lZWQgdG8ga25vdyBob3cgZGVlcGx5IGludGVncmF0ZWQgaXQgaXMgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbS5cblxuKiAgICoqS2VybmVsIERlcGVuZGVuY2llczoqKiBXaGF0IGtlcm5lbCBtb2R1bGVzIGRvZXMgYE1UNzkyeF9VU0JgIGRlcGVuZCBvbj8gQXJlIHRoZXJlIGFueSBjb3JlIGtlcm5lbCBpbnRlcmZhY2VzIGl0J3MgdXNpbmcgKGxpa2UgRE1BIGVuZ2luZXMsIGludGVycnVwdCBoYW5kbGluZyBtZWNoYW5pc21zLCBvciBzcGVjaWZpYyBkZXZpY2UgdHJlZSBiaW5kaW5ncyk/IEknbGwgbmVlZCB0byBpZGVudGlmeSB0aG9zZSBtb2R1bGVzIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGxvYWRlZCBhbmQgY29uZmlndXJlZCwgYW5kIGxvb2sgZm9yIGFueSB2ZXJzaW9uaW5nIGRlcGVuZGVuY2llcy5cblxuKiAgICoqRmlybXdhcmUvQ29uZmlndXJhdGlvbiBGaWxlczoqKiBPZnRlbiwgdGhlc2UgdHlwZXMgb2YgZHJpdmVycyByZWx5IG9uIGZpcm13YXJlIGJsb2JzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBpZGVudGlmeSB0aG9zZSBmaWxlIGxvY2F0aW9ucyBhbmQgZW5zdXJlIHRoYXQgdGhlIGFwcHJvcHJpYXRlIHZlcnNpb25zIGFyZSBpbmNsdWRlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBsb2FkaW5nIGRlcGVuZGVuY2llcy5cblxuKiAgICoqQnVpbGQgU3lzdGVtOioqIEZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgc3lzdGVtIOKAkyB3aGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzIHRoZXJlPyBJcyBpdCBhIHN0YW5kYXJkIGBNYWtlZmlsZWAgc2V0dXAsIG9yIGlzIGl0IHVzaW5nIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggbGlrZSBga2J1aWxkYCBvciBzb21ldGhpbmcgZWxzZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb2R1bGUgaXMgY29tcGlsZWQgYW5kIGxpbmtlZC4gVW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgc3lzdGVtIGlzIGNyaXRpY2FsIHRvIGJlIHN1cmUgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBwcm9wZXJseSBpbmNsdWRlZC5cblxuTXkgaW1tZWRpYXRlIGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBsaXN0IG9mIGV2ZXJ5dGhpbmcgYE1UNzkyeF9VU0JgIGlzICpyZWxpYW50KiB1cG9uLCBib3RoIGF0IHRoZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgbGV2ZWxzLiBUaGF0IHdheSwgSSdtIGVxdWlwcGVkIHRvIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzLCBvcHRpbWl6ZSB0aGUgbW9kdWxlJ3MgcGVyZm9ybWFuY2UsIG9yIGludGVncmF0ZSBpdCB3aXRoIGEgbmV3IHN5c3RlbSB3aXRoIGNvbmZpZGVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzoxOS41NDM5MTkzNzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM2OlxcdGNvbmZpZyBNVDc5MnhfVVNCXFxuICAzNzpcXHRcXHR0cmlzdGF0ZVxcbiAgMzg6XFx0XFx0c2VsZWN0IE1UNzZfVVNCXFxuICAzOTpcXHRcXG4gIDQwOlxcdGNvbmZpZyBNVDc2X05QVVxcbiAgNDE6XFx0XFx0dHJpc3RhdGVcXG4gIDQyOlxcdFxcdGRlcGVuZHMgb24gTkVUX0FJUk9IQV9OUFU9eSB8fCBNVDc2X0NPUkU9TkVUX0FJUk9IQV9OUFVcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4MC9LY29uZmlnXFxcIlxcbiAgNDU6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4Mi9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzoxOS41NDM5OTA0MzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1NjkwOTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciB0aGUgTVQ3OTI1VSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBlbmFibGluZyB0aGUgYE1UNzkyNVVgIGRyaXZlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyB3aXRoIGBNVDc5MjVVYCBhcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbmF0dXJhbGx5LiBBbG9uZ3NpZGUgdGhhdCwgSSBuZWVkIHRvIGJyaW5nIGluIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXM6IGBNQUM4MDIxMWAsIGBVU0JgLCBgV0xBTmAsIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AsIGBNVDc2X0NPUkVgLCBgTVQ3Nl9VU0JgLCBgTVQ3OTJ4X1VTQmAsIGFuZCBgTVQ3OTI1X0NPTU1PTmAuIEEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AgYW5kIGBNQUM4MDIxMWAgaXMgd2FycmFudGVkOyBnb3R0YSBiZSB0aG9yb3VnaC5cblxuUmlnaHQgbm93LCBJJ20gbGVhbmluZyB0b3dhcmQgZXhwbGljaXRseSBpbmNsdWRpbmcgYE1UNzkyNVVgLCBgTUFDODAyMTFgLCBgV0xBTmAsIGFuZCBgV0xBTl9WRU5ET1JfTUVESUFURUtgLiBIb3dldmVyLCBJIGp1c3QgY2F1Z2h0IHNvbWV0aGluZyDigJMgdGhpcyBwYXRjaCBtZW50aW9ucyBhIGRlYnVnZnMgZmlsZS4gVGhhdCB0aHJvd3MgYSBwb3RlbnRpYWwgd3JlbmNoIGludG8gdGhlIHdvcmtzLiBTbywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGlmIGVuYWJsaW5nIGBERUJVR19GU2AgaXMgYSByZXF1aXJlbWVudCBvciBqdXN0IGFuIG9wdGlvbmFsIGZlYXR1cmUuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3Mgc2V0IHVwIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxNiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIzOjI0LjIwMDkwMzI4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MDM3Nzg4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERUJVR19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIzOjI0LjMxODk0OTE5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM3Mjk5NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGRlYnVnZnMuY2AqKlxuXG5Pa2F5LCBzbyBgZGVidWdmcy5jYCBzZWVtcyB0byBiZSBjb21waWxlZCBjb25kaXRpb25hbGx5LiBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIFNwZWNpZmljYWxseSwgdGhlIGBNYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZmxhZ3MsIGRlZmluZXMsIG9yIG90aGVyIGZhY3RvcnMgYXJlIGRldGVybWluaW5nIHdoZXRoZXIgdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlIGdldHMgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGJ1aWxkIG9yIG5vdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGBNYWtlZmlsZWAgaGFzIHRvIHNheS4gR290dGEgdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGZpbGUuIFRoaXMgc21lbGxzIGxpa2UgYSBmZWF0dXJlIGZsYWcgb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBhdCBwbGF5LiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY5NiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIzOjI4LjI1NjI1MTgzNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmotJChDT05GSUdfTVQ3OTI1X0NPTU1PTikgKz0gbXQ3OTI1LWNvbW1vbi5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfTVQ3OTI1RSkgKz0gbXQ3OTI1ZS5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfTVQ3OTI1VSkgKz0gbXQ3OTI1dS5vXFxuICAgNjpcXHRcXG4gICA3OlxcdG10NzkyNS1jb21tb24teSA6PSBtYWMubyBtY3UubyByZWdkLm8gbWFpbi5vIGluaXQubyBkZWJ1Z2ZzLm8gbmFuLm9cXG4gICA4OlxcdG10NzkyNS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgKz0gdGVzdG1vZGUub1xcbiAgIDk6XFx0bXQ3OTI1ZS15IDo9IHBjaS5vIHBjaV9tYWMubyBwY2lfbWN1Lm9cXG4gIDEwOlxcdG10NzkyNXUteSA6PSB1c2Iub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzoyOC4yNTYzMDkwNDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMTM5MTcyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIGZvciBTZWxlY3RpbmcgdGhlIFJlbGV2YW50IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBgZGVidWdmcy5vYCBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiAgSSBzZWUgdGhhdCBgZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlYCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2RlYnVnZnMuaGAuICBJbXBvcnRhbnQgcG9pbnQ6IHRoaXMgaXMgYSBuby1vcCBpZiBgREVCVUdfRlNgIGlzbid0IGVuYWJsZWQuIFNvLCB0byBhY3R1YWxseSB0ZXN0IHRoaXMsIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgREVCVUdfRlNgIGlzIHNldC5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgb25lcz8gSSd2ZSBnb3QgYG10NzkyNV9jb2V4X2luZm9gIGFuZCBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgaGlnaGxpZ2h0ZWQuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgYXJlIHN0YXRpYy4gYG10NzkyNV9jb2V4X2luZm9gICppcyogc3RhdGljLiBCdXQsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBpdCdzIHVzZWQgYXMgYSBjYWxsYmFjayB0byBgZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlYC4gIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpcyBub24tc3RhdGljLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gY29uZmlybSB0aGlzLlxuXG5ZZXMsIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpcyBkZWZpbmVkIGluIGBtY3UuY2AgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLlxuXG5Ob3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBBbHRob3VnaCBgbXQ3OTI1X2NvZXhfaW5mb2AgaXMgc3RhdGljLCBpdCAqaXMqIGFuIEFQSSBlbnRyeSBwb2ludCAoZm9yIGRlYnVnZnMgcmVhZCksIHNvIGl0IGdldHMgYW4gYWRkcmVzcy4gQnV0IHNpbmNlIGl0J3Mgc3RhdGljLCBpdCAqbWlnaHQqIGJlIGlubGluZWQuIEJ1dCBzaW5jZSBpdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZWAsIGl0IGNhbm5vdCBiZSBpbmxpbmVkLiBJdCBnZXRzIGEgZGlzdGluY3Qgc3ltYm9sLiAgU3RpbGwsIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBsb29rcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIEknbSBhZnRlciwgYW5kIGl0J3Mgbm9uLXN0YXRpYy5cblxuT2theSwgbGV0J3MgY2hlY2sgaWYgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIGlzIGV4cG9ydGVkLiBOb3BlLCBpdCdzIG5vdCBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYCwgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIsIHNpbmNlIGl0J3Mgbm9uLXN0YXRpYy4gU28gSSdsbCBkZWZpbml0ZWx5IGxpc3QgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIGFuZCBhbHNvIGluY2x1ZGUgYG10NzkyNV9jb2V4X2luZm9gIHNpbmNlIHRoZSBkZWJ1Z2ZzIHJlYWQgZ29lcyB0aHJvdWdoIGl0LlxuXG5PbmUgbGFzdCB0aG91Z2h0OiB0aGUgcHJvbXB0IG1lbnRpb25zIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJcyBgbXQ3OTI1YCBhY2Nlc3NpYmxlPyBZZXMsIEkgY2FuIHJlYWNoIGl0IHRocm91Z2ggYHVzYiBnYWRnZXRgIHZpYSBgc3l6X3VzYl9jb25uZWN0YC5cblxuU28sIHRoZSBrZXkgY29uZmlncyBmb3IgbXkgdGVzdGluZyBhcmU6IGBNVDc5MjVVYCwgYE1BQzgwMjExYCwgYFdMQU5gLCBgV0xBTl9WRU5ET1JfTUVESUFURUtgLCBhbmQsIGNyaXRpY2FsbHksIGBERUJVR19GU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgYXJlIGFsbCBzZXQuIEFuZCBub3csIEknbGwgY2hlY2sgdG8gc2VlIGlmIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AgaGFzIGFueSBmdXJ0aGVyIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzozOC4yNzAyMjk1MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjQ4OTU4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgV0xBTl9WRU5ET1JfTUVESUFURUtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvS2NvbmZpZzoyOmNvbmZpZyBXTEFOX1ZFTkRPUl9NRURJQVRFS1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWctMy1cXHRib29sIFxcXCJNZWRpYVRlayBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzozOC41NTY3MjU4NTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMTE2MTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNZWRpYXRlayBXaXJlbGVzcyBEcml2ZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWdgIGZpbGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSB3YW50IHRvIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyB0aGUga2V5c3RvbmUgdG8gdGhlIE1lZGlhdGVrIHdpcmVsZXNzIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24sIHNvIHVuZGVyc3RhbmRpbmcgd2hhdCBrZXlzIHRyaWdnZXIgaXRzIGluY2x1c2lvbiAob3IgZXhjbHVzaW9uKSBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHJlbGV2YW50IGJ1aWxkIG9wdGlvbnMsIHRoZSBjb25kaXRpb25zIHdoaWNoIGVuYWJsZSB0aGVtIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEJhc2ljYWxseSwgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIG5lZWQgdG8gYmUgYWN0aXZlIGZvciB0aGVzZSBNZWRpYXRlayB3aXJlbGVzcyBkcml2ZXJzIHRvIGV2ZW4gYmUgY29uc2lkZXJlZD8gSSBleHBlY3QgdGhlcmUgdG8gYmUgZGVwZW5kZW5jaWVzIG9uIHBsYXRmb3JtIHN1cHBvcnQsIHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9ucywgYW5kIHBvdGVudGlhbGx5IG9uIG90aGVyIHdpcmVsZXNzIHJlbGF0ZWQgc3ViLXN5c3RlbXMuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJIG5lZWQgdG8gc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZXNlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzo0Mi44Njc4OTA1MjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdMQU5fVkVORE9SX01FRElBVEVLXFxuICAgMzpcXHRcXHRib29sIFxcXCJNZWRpYVRlayBkZXZpY2VzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIElmIHlvdSBoYXZlIGEgd2lyZWxlc3MgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAgNzpcXHRcXG4gICA4OlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gICA5OlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcXG4gIDEwOlxcdFxcdCAgcXVlc3Rpb25zIGFib3V0IHRoZXNlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzo0Mi44Njc5NTU5MDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY2NjYzMTg1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1UNzkyNVUgTUNVIENvbW1hbmQgUmVzcG9uc2UgUGFyc2luZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgYXR0YWNrIHN1cmZhY2UgdG8gZnV6ei4gTGV0J3Mgc2VlLi4uIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AgaXMgc2V0IHRvICd5JyBieSBkZWZhdWx0LCB0aGF0J3MgZ29vZCB0byBrbm93LCBidXQgbm90IHRoZSBmb2N1cyBoZXJlLiBUaGUgY3J1eCBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBgTVQ3OTI1VWAgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IGRlcGVuZHMgb24gYE1BQzgwMjExYCwgYFVTQmAsIGFuZCwgY3J1Y2lhbGx5IGZvciBkZWJ1ZyBhbmQgZnV6emluZywgYERFQlVHX0ZTYC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSwgcmlnaHQsIGBNVDc5MjVVYCwgYE1BQzgwMjExYCwgYFVTQmAsIGFuZCBgREVCVUdfRlNgIGFyZSB0aGUgY29uZmlncyBJJ2xsIGJlIGVuYWJsaW5nLiBBbmQgYE1UNzkyNV9DT01NT05gIGlzIHNlbGVjdGVkIGJ5IGBNVDc5MjVVYCwgbm8gbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGF0LlxuXG5Ob3csIHRoZSBqdWljeSBiaXQ6IGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpbiBgbWN1LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCdzIHBhcnNpbmcgdGhlIHJlc3BvbnNlIGZyb20gdGhlIE1DVS4gVGhlIHJlc3BvbnNlLCB2aWEgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2dgLCBpcyBiYXNpY2FsbHkgYSBVU0IgVVJCIGZyb20gdGhlIHN5emthbGxlciBVU0IgZnV6emVyLiBBbmQgdGhhdCByZXNwb25zZSBnZXRzIHBhcnNlZCBhcyBhIFRMVi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBwYXJzaW5nIGxvZ2ljLCB0aG9yb3VnaGx5LlxuXG5JJ20gc2VlaW5nIGEgYHdoaWxlYCBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgVExWcy4gSXQncyBkb2luZyBzb21lIGxlbmd0aCBjaGVja3M6IGB0bHZfbGVuYCBhZ2FpbnN0IGBzaXplb2YoKnRsdilgIGFuZCBgc2tiLVx1MDAzZWxlbmAuIFRoZW4sIGl0IGNoZWNrcyB0aGUgYHRsdi1cdTAwM2V0YWdgLiBJZiBpdCdzIHRoZSByaWdodCB0YWcgKGBVTklfQ0hJUF9DT05GSUdfQ0hJUF9DRkdgKSwgaXQgZ2V0cyBldmVuIG1vcmUgY29tcGxpY2F0ZWQuIEl0IGV4dHJhY3RzIGBjZmctXHUwMDNlZGF0YV9zaXplYCwgY29tcGFyZXMgdGhhdCB0byBgdGx2X2xlbiAtIGhkcl9sZW5gIHdoaWNoIHNlZW1zIHJlYXNvbmFibGUuICBUaGVuLCBpdCdzIGNvcHlpbmcgZGF0YSBpbnRvIHRoZSBgcmVzcGAgYnVmZmVyIHVzaW5nIGBtZW1jcHlgLiAgYHNrYl9wdWxsYCBpcyB1c2VkIGZvciBhZHZhbmNpbmcgdGhlIGJ1ZmZlciwgYnV0IHRoZSBjaGVja3MgYmVmb3JlIGl0IG1ha2UgaXQgc2FmZSAtIHRoYXQncyBnb29kLlxuXG5Pa2F5LCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIFRoaXMgKlRMViogcGFyc2luZywgZXNwZWNpYWxseSB0aG9zZSBsZW5ndGggYW5kIHNpemUgY2hlY2tzLCB0aGlzIGlzIHByaW1lIGZ1enppbmcgbWF0ZXJpYWwuIEl0IGhhcyBhbGwgdGhlIGhhbGxtYXJrcyBvZiBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eTogdW50cnVzdGVkIGRhdGEgY29taW5nIGluLCBzb21lIChob3BlZnVsbHkgcm9idXN0KSBwYXJzaW5nIGFuZCBkYXRhIG1hbmlwdWxhdGlvbi4gVGhpcyBpcyBleGFjdGx5IHdoYXQgZnV6emVycyBhcmUgKmRlc2lnbmVkKiB0byBicmVhayEgVGhlIGNvZGUgc2VlbXMgcmVsYXRpdmVseSBjYXJlZnVsLCBidXQgdGhlIGNvbXBsZXhpdHkgbWFrZXMgaXQgYSBoaWdoIHZhbHVlIHRhcmdldC5cblxuU28sIHRvIHN1bW1hcml6ZSB3aGF0IEkgaGF2ZSBoZXJlOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseS4gVGhpcyBuZWVkcyBmdXp6aW5nLlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCwgYW5kIEkgc2hvdWxkIGFsc28gYWRkIGBtdDc5MjVfY29leF9pbmZvYCBhcyB3ZWxsIHNpbmNlIGl0IGludGVyYWN0cyB3aXRoIHRoZSBNQ1UuXG4qICAgKipFbmFibGVDb25maWdzKio6IGBNVDc5MjVVYCwgYE1BQzgwMjExYCwgYFVTQmAsIGBERUJVR19GU2Ag4oCTIHRoZXNlIGFyZSBteSBiYXNlIHNldHVwLlxuKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggYWRkcyBhIGRlYnVnZnMgaW50ZXJmYWNlIHRoYXQgdHJpZ2dlcnMgYW4gTUNVIGNvbW1hbmQuIFRoZSBjb3JlIHZ1bG5lcmFiaWxpdHkgaXMgcmVzcG9uc2UgcGFyc2luZyAtIHdoaWNoIGlzIHVudHJ1c3RlZCBkYXRhIGZyb20gdGhlIGhhcmR3YXJlICh3aGljaCBjYW4gYmUgZW11bGF0ZWQgdmlhIFVTQiBnYWRnZXQgaW4gc3l6a2FsbGVyKSBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGZ1enogdGhlIHJvYnVzdG5lc3MgYWdhaW5zdCBtYWxmb3JtZWQgVExWcy4gVGhlIGtleSBoZXJlIGlzIHRvIGZpbmQgb3V0IGlmIHRoZSBNQ1UgaGFzIHRoZSBzYW1lIGNoZWNrcyB0aGF0IHRoZSBkcml2ZXIgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxOTAsIk91dHB1dFRva2VucyI6MTYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6MjM6NTkuNTM0Mjc2OTA0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4Njk1MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1UNzkyNVVcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeVwiLFxuICAgIFwibXQ3OTI1X2NvZXhfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBkZWJ1Z2ZzIGludGVyZmFjZSB0aGF0IHRyaWdnZXJzIGFuIE1DVSBjb21tYW5kIGFuZCBwYXJzZXMgdGhlIHJlc3BvbnNlLiBUaGUgcmVzcG9uc2UgcGFyc2luZyBsb2dpYyBpbiBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgcHJvY2Vzc2VzIHVudHJ1c3RlZCBkYXRhIGZyb20gdGhlIGhhcmR3YXJlICh3aGljaCBjYW4gYmUgZW11bGF0ZWQgdmlhIFVTQiBnYWRnZXQgaW4gc3l6a2FsbGVyKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcm9idXN0bmVzcyBhZ2FpbnN0IG1hbGZvcm1lZCBUTFZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1UNzkyNVVcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeVwiLFxuICAgIFwibXQ3OTI1X2NvZXhfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBkZWJ1Z2ZzIGludGVyZmFjZSB0aGF0IHRyaWdnZXJzIGFuIE1DVSBjb21tYW5kIGFuZCBwYXJzZXMgdGhlIHJlc3BvbnNlLiBUaGUgcmVzcG9uc2UgcGFyc2luZyBsb2dpYyBpbiBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgcHJvY2Vzc2VzIHVudHJ1c3RlZCBkYXRhIGZyb20gdGhlIGhhcmR3YXJlICh3aGljaCBjYW4gYmUgZW11bGF0ZWQgdmlhIFVTQiBnYWRnZXQgaW4gc3l6a2FsbGVyKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcm9idXN0bmVzcyBhZ2FpbnN0IG1hbGZvcm1lZCBUTFZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzo1OS42MTgxNTMxMTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTQ5MDU3MDczNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIzOjU5LjYxODgyMTEzNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjE0ODk4OTczODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGVidWdmcyBlbnRyeSBgY29leF9pbmZvYCBhbmQgYSBmdW5jdGlvbiBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgdG8gcXVlcnkgdGhlIE1DVS4gVGhlIGxvY2FsIGByZXFgIHN0cnVjdHVyZSB1c2VkIHRvIHNlbmQgdGhlIHF1ZXJ5IGlzIHBhcnRpYWxseSBpbml0aWFsaXplZCB3aXRoIGEgc3RydWN0IGluaXRpYWxpemVyLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGNvbXBpbGVyIHplcm8taW5pdGlhbGl6ZXMgYWxsIHJlbWFpbmluZyBmaWVsZHMgYW5kIHBhZGRpbmcuIFRoZSBgcmVzcGAgYnVmZmVyIGFuZCBgcmVzcF90eXBlYCB2YXJpYWJsZSBhcmUgcG9wdWxhdGVkIGJ5IGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YC4gVGhlIGZ1bmN0aW9uIGNvcnJlY3RseSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGludG8gYHJlc3BgLCBhbmQgdGhlIGNhbGxlciBgbXQ3OTI1X2NvZXhfaW5mb2Agb25seSByZWFkcyBleGFjdGx5IHRoYXQgbWFueSBieXRlcy4gYHJlc3BfdHlwZWAgaXMgYWxzbyBvbmx5IGFjY2Vzc2VkIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBwb3NpdGl2ZSBsZW5ndGgsIG1lYW5pbmcgaXQgd2FzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdywgc2VudCB0byB0aGUgZGV2aWNlLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIG1lbW9yeSBjb3JydXB0aW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNDgyYTg5YTVkZTFlMWYxM2I1YzliNmZhZjcxZWY2MDViZWZjZGM2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDI6MjI6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcbmluZGV4IGQwMWZmNDlkZTQ3YWYuLjlhNWVhMTJiNzZjNzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xuQEAgLTI4Niw2ICsyODYsMzQgQEAgc3RhdGljIGludCBtdDc5MjVfY2hpcF9yZXNldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxuIFxuIERFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX3Jlc2V0LCBOVUxMLCBtdDc5MjVfY2hpcF9yZXNldCwgXCIlbGxkXFxuXCIpO1xuIFxuK3N0YXRpYyBpbnRcbittdDc5MjVfY29leF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcbit7XG4rI2RlZmluZSBNVDc5MjVfQ0hJUF9DT05GSUdfUkVTUF9TSVpFXHQzMjBcbitcdHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocy1cdTAwM2Vwcml2YXRlKTtcbitcdHU4IHJlc3BbTVQ3OTI1X0NISVBfQ09ORklHX1JFU1BfU0laRV0sIHJlc3BfdHlwZTtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xuK1x0cmV0ID0gbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShkZXYsIFwiY29leEJ3Y0dldE1vZGVJbmZvIDBcIixcbitcdFx0XHRcdFx0ICAgXHUwMDI2cmVzcF90eXBlLCByZXNwLCBzaXplb2YocmVzcCkpO1xuK1x0bXQ3OTJ4X211dGV4X3JlbGVhc2UoZGV2KTtcbitcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoIXJldClcbitcdFx0c2VxX3B1dHMocywgXCJubyByZXBseVxcblwiKTtcbitcdGVsc2UgaWYgKHJlc3BfdHlwZSA9PSBDSElQX0NPTkZJR19UWVBFX0FTQ0lJKVxuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJS4qc1xcblwiLCByZXQsIHJlc3ApO1xuK1x0ZWxzZVxuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXQ7IGkgKz0gMTYpXG4rXHRcdFx0c2VxX3ByaW50ZihzLCBcIiUwNHg6ICUqcGhcXG5cIiwgaSxcbitcdFx0XHRcdCAgIG1pbl90KGludCwgMTYsIHJldCAtIGkpLCByZXNwICsgaSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IG10NzkyNV9pbml0X2RlYnVnZnMoc3RydWN0IG10NzkyeF9kZXYgKmRldilcbiB7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkaXI7XG5AQCAtMzA5LDYgKzMzNyw4IEBAIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiaWRsZS10aW1lb3V0XCIsIDA2MDAsIGRpciwgZGV2LFxuIFx0XHRcdCAgICBcdTAwMjZmb3BzX3BtX2lkbGVfdGltZW91dCk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiY2hpcF9yZXNldFwiLCAwNjAwLCBkaXIsIGRldiwgXHUwMDI2Zm9wc19yZXNldCk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LVx1MDAzZW10NzYuZGV2LCBcImNvZXhfaW5mb1wiLCBkaXIsXG4rXHRcdFx0XHQgICAgbXQ3OTI1X2NvZXhfaW5mbyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LVx1MDAzZW10NzYuZGV2LCBcInJ1bnRpbWVfcG1fc3RhdHNcIiwgZGlyLFxuIFx0XHRcdFx0ICAgIG10NzkyeF9wbV9zdGF0cyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiZGVlcC1zbGVlcFwiLCAwNjAwLCBkaXIsIGRldiwgXHUwMDI2Zm9wc19kcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuY1xuaW5kZXggZmEyOWM0ODZhNDU1My4uZTYzMTZjZWExODY1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuY1xuQEAgLTExNjAsNiArMTE2MCw4MSBAQCBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpXG4gXHRcdFx0XHQgXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgZmFsc2UpO1xuIH1cbiBcbitpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQsXG4rXHRcdFx0XHQgdTggKnJlc3BfdHlwZSwgdm9pZCAqcmVzcCwgdTE2IHJlc3Bfc2l6ZSlcbit7XG4rXHR1MTYgbGVuID0gc3RybGVuKGNtZCk7XG4rXHRzdHJ1Y3Qge1xuK1x0XHR1OCBfcnN2WzRdO1xuK1x0XHRfX2xlMTYgdGFnO1xuK1x0XHRfX2xlMTYgbGVuO1xuK1x0XHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIGNvbmZpZztcbitcdH0gX19wYWNrZWQgcmVxID0ge1xuK1x0XHQudGFnID0gY3B1X3RvX2xlMTYoVU5JX0NISVBfQ09ORklHX0NISVBfQ0ZHKSxcbitcdFx0LmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihyZXEpIC0gNCksXG4rXHRcdC5jb25maWcgPSB7XG4rXHRcdFx0LnJlc3BfdHlwZSA9IDAsXG4rXHRcdFx0LnR5cGUgPSBDSElQX0NPTkZJR19UWVBFX0FTQ0lJLFxuK1x0XHRcdC5kYXRhX3NpemUgPSBjcHVfdG9fbGUxNihsZW4pLFxuK1x0XHR9LFxuK1x0fTtcbitcdGNvbnN0IHUxNiBoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB0bHYpICtcbitcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZywgZGF0YSk7XG4rXHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICpjZmc7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghbGVuIHx8IGxlbiBcdTAwM2U9IHNpemVvZihyZXEuY29uZmlnLmRhdGEpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG1lbWNweShyZXEuY29uZmlnLmRhdGEsIGNtZCwgbGVuKTtcbitcbitcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoQ0hJUF9DT05GSUcpLFxuK1x0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIHNraXAgdGhlIGZpeGVkIGZpZWxkIG9mIHRoZSBldmVudCwgdGhlIFRMVnMgZm9sbG93IGl0ICovXG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgNCkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdHNrYl9wdWxsKHNrYiwgNCk7XG4rXG4rXHRyZXQgPSAtRU5PRU5UO1xuK1x0d2hpbGUgKHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IHRsdikpIHtcbitcdFx0c3RydWN0IHRsdiAqdGx2ID0gKHN0cnVjdCB0bHYgKilza2ItXHUwMDNlZGF0YTtcbitcdFx0dTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdSh0bHYtXHUwMDNlbGVuKTtcbitcdFx0dTE2IGRhdGFfc2l6ZTtcbitcbitcdFx0aWYgKHRsdl9sZW4gXHUwMDNjIHNpemVvZigqdGx2KSB8fCB0bHZfbGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAobGUxNl90b19jcHUodGx2LVx1MDAzZXRhZykgIT0gVU5JX0NISVBfQ09ORklHX0NISVBfQ0ZHKSB7XG4rXHRcdFx0c2tiX3B1bGwoc2tiLCB0bHZfbGVuKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAodGx2X2xlbiBcdTAwM2MgaGRyX2xlbilcbitcdFx0XHRicmVhaztcbitcbitcdFx0Y2ZnID0gKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKil0bHYtXHUwMDNlZGF0YTtcbitcdFx0ZGF0YV9zaXplID0gbGUxNl90b19jcHUoY2ZnLVx1MDAzZWRhdGFfc2l6ZSk7XG4rXHRcdGlmIChkYXRhX3NpemUgXHUwMDNlIHRsdl9sZW4gLSBoZHJfbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQqcmVzcF90eXBlID0gY2ZnLVx1MDAzZXJlc3BfdHlwZTtcbitcdFx0cmV0ID0gbWluX3QodTE2LCBkYXRhX3NpemUsIHJlc3Bfc2l6ZSk7XG4rXHRcdG1lbWNweShyZXNwLCBjZmctXHUwMDNlZGF0YSwgcmV0KTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rb3V0OlxuK1x0ZGV2X2tmcmVlX3NrYihza2IpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gaW50IG10NzkyNV9tY3Vfc2V0X2RlZXBfc2xlZXAoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgYm9vbCBlbmFibGUpXG4ge1xuIFx0Y2hhciBjbWRbMTZdO1xuQEAgLTM3NzIsNyArMzg0Nyw4IEBAIGludCBtdDc5MjVfbWN1X2ZpbGxfbWVzc2FnZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0dW5pX3R4ZC1cdTAwM2VvcHRpb24gPSBNQ1VfQ01EX1VOSV9FWFRfQUNLO1xuIFxuIFx0XHRpZiAoY21kID09IE1DVV9VTklfQ01EKEhJRl9DVFJMKSB8fFxuLVx0XHQgICAgY21kID09IE1DVV9VTklfQ01EKENISVBfQ09ORklHKSlcbitcdFx0ICAgIGNtZCA9PSBNQ1VfVU5JX0NNRChDSElQX0NPTkZJRykgfHxcbitcdFx0ICAgIGNtZCA9PSBNQ1VfVU5JX1FVRVJZKENISVBfQ09ORklHKSlcbiBcdFx0XHR1bmlfdHhkLVx1MDAzZW9wdGlvbiBcdTAwMjY9IH5NQ1VfQ01EX0FDSztcbiBcbiBcdFx0aWYgKG1jdV9jbWQgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfQ1RSTCB8fFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmhcbmluZGV4IDExZjllYWMxM2ZmYzYuLjJjZjM5NzFkOTg1M2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmhcbkBAIC0xMTksNiArMTE5LDE1IEBAIGVudW0ge1xuIFx0VU5JX0NISVBfQ09ORklHX05JQ19DQVBBID0gMHgzLFxuIH07XG4gXG4rLyogdHlwZS9yZXNwX3R5cGUgb2Ygc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqL1xuK2VudW0ge1xuK1x0Q0hJUF9DT05GSUdfVFlQRV9XT19SRVNQT05TRSxcbitcdENISVBfQ09ORklHX1RZUEVfTUVNOCxcbitcdENISVBfQ09ORklHX1RZUEVfTUVNMzIsXG4rXHRDSElQX0NPTkZJR19UWVBFX0FTQ0lJLFxuK1x0Q0hJUF9DT05GSUdfVFlQRV9CSU5BUlksXG4rfTtcbitcbiBlbnVtIHtcbiBcdFVOSV9CQU5EX0NPTkZJR19SQURJT19FTkFCTEUsXG4gXHRVTklfQkFORF9DT05GSUdfUlRTX1RIUkVTSE9MRCA9IDB4MDgsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaFxuaW5kZXggMzIxZTczMjM0N2YyZi4uZDBkYjVkOGRhZTQ4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaFxuQEAgLTI5NSw2ICsyOTUsOCBAQCBpbnQgbXQ3OTI1X21jdV9nZXRfcnhfcmF0ZShzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIGludCBtdDc5MjVfbWN1X2Z3X2xvZ18yX2hvc3Qoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggY3RybCk7XG4gdm9pZCBtdDc5MjVfbWN1X3J4X2V2ZW50KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCk7XG4raW50IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kLFxuK1x0XHRcdFx0IHU4ICpyZXNwX3R5cGUsIHZvaWQgKnJlc3AsIHUxNiByZXNwX3NpemUpO1xuIGludCBtdDc5MjVfbWN1X3NldF9yeGZpbHRlcihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MzIgZmlmLFxuIFx0XHRcdCAgICB1OCBiaXRfb3AsIHUzMiBiaXRfbWFwKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIzOjU5LjYxODgyMjQwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjcyMDMxNjY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZXhpc3RlbmNlIEluZm9ybWF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgYGRlYnVnZnNgIGZpbGUsIGBjb2V4X2luZm9gLCB3aXRoaW4gdGhlIG10NzkyNSB3aXJlbGVzcyBkcml2ZXIuIFRoZSBwdXJwb3NlIHNlZW1zIHRvIGJlIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBNQ1UsIGZldGNoZWQgdmlhIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YC4gTGV0J3MgZGlnIGluLlxuXG5UaGUgYG10NzkyNV9jb2V4X2luZm9gIGZ1bmN0aW9uIGlzIHRoZSBjb3JlIG9mIHRoaXMuIEl0IGdyYWJzIGEgYG10NzkyeF9kZXZgIHN0cnVjdCwgY2FsbHMgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLCBhbmQgdGhlbiBkaXNwbGF5cyB0aGUgcmVzdWx0LCBoYW5kbGluZyBBU0NJSSBvciByYXcgYnl0ZXMgZGVwZW5kaW5nIG9uIGByZXNwX3R5cGVgLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgYnVmZmVyIGByZXNwYCwgYSAzMjAtYnl0ZSBzdGFjayBhbGxvY2F0aW9uLiBJdCdzIHVuaW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGEgcG9pbnQgb2YgY29uY2VybiBmb3IgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBkZXBlbmRpbmcgb24gaG93IHRoZSByZXNwb25zZSBpcyBoYW5kbGVkIGFuZCBob3cgaXQgaXMgbGF0ZXIgYWNjZXNzZWQuXG5cbmBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpcyB3aGF0IGZlZWRzIHRoaXMgYnVmZmVyLiBJdCBjb25zdHJ1Y3RzIGEgcmVxdWVzdCBhbmQgc2VuZHMgaXQgdG8gdGhlIE1DVS4gTm93LCB0aGlzIGByZXFgIHN0cnVjdCBoYXMgY2F1Z2h0IG15IGV5ZS4gSXQncyBpbml0aWFsaXplZCB3aXRoIGEgZGVzaWduYXRlZCBpbml0aWFsaXplciBsaXN0IChgPSB7IC4uLiB9YCkuIFRoZSBgX3Jzdls0XWAgbWVtYmVyLCBhbiB1bm5hbWVkIGFycmF5IG9mIDQgYnl0ZXMsIGlzbid0IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gdGhlIGxpc3QuIFRoaXMgcmFpc2VzIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIHRoaXMgaXMgcHJvcGVybHkgemVyb2VkIGFzIGV4cGVjdGVkLiBTaW5jZSB0aGVyZSBpcyBwYWRkaW5nLCBpdCBtYXkgbm90IGJlLiBBbHNvLCB0aGUgc3RydWN0IGlzIG1hcmtlZCBhcyBgX19wYWNrZWRgLiBTbywgdGhlcmUgc2hvdWxkbid0IGJlIHBhZGRpbmcsIGJ1dCBpcyB0aGF0IGhhbmRsZWQgc2FmZWx5P1xuXG5BY2NvcmRpbmcgdG8gdGhlIEMgc3RhbmRhcmQsIHBhcnRpYWwgaW5pdGlhbGl6YXRpb24gb2YgYSBzdHJ1Y3QgbWVhbnMgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtYmVycyBhcmUgemVyb2VkLiBIb3dldmVyLCBiZWNhdXNlIGByZXFgIGlzIGBfX3BhY2tlZGAgdGhpcyBuZWVkcyBkb3VibGUtY2hlY2tpbmcuIE5vdywgYHJlcS5jb25maWcuZGF0YWAgaXMgYW4gYXJyYXkgdGhhdCB3aWxsIGJlIGNvcGllZCBpbnRvLCBhbmQgdGhlIHJlc3QgaXMgemVyb2VkIGJ5IHRoZSBzdHJ1Y3QgaW5pdGlhbGl6ZXIsIGlmIGl0J3Mgbm90IHBhY2tlZC5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWdgLiBJdCBtdXN0IGJlIGRlZmluZWQgaW4gYSBoZWFkZXIsIGFuZCBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gbG9jYXRlIHRoYXQgc3RydWN0dXJlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmb3JtYXQgb2YgdGhlIHJlcXVlc3QgYW5kIHJlc3BvbnNlLCBzcGVjaWZpY2FsbHkgaG93IGBkYXRhX3NpemVgLCBgcmVzcF90eXBlYCBhbmQgYHR5cGVgIGFyZSBoYW5kbGVkLCB3aGljaCBtYXkgY29udGFpbiBjcml0aWNhbCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU5MCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjI1OjIyLjMzOTE0MzM3OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1ODQ0NjEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmM9MjA0Nz1pbnQgbXQ3Nl9jb25uYWNfbWN1X2NoaXBfY29uZmlnKHN0cnVjdCBtdDc2X2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmMtMjA0OC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuYzoyMDQ5OlxcdHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgcmVxID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmMtMjA1MC1cXHRcXHQucmVzcF90eXBlID0gMCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmM9MjA2MD1pbnQgbXQ3Nl9jb25uYWNfbWN1X3NldF9kZWVwX3NsZWVwKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBib29sIGVuYWJsZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5jLTIwNjEte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmM6MjA2MjpcXHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIHJlcSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5jLTIwNjMtXFx0XFx0LnJlc3BfdHlwZSA9IDAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oPTE4NTA9c3RydWN0IG10NzZfY29ubmFjX3R4X3Bvd2VyX2xpbWl0X3RsdiB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oLTE4NjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaDoxODY1OnN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgtMTg2Ni1cXHRfX2xlMTYgaWQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0xMTM5PWludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTExNDUtXFx0XFx0X19sZTE2IGxlbjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoxMTQ2OlxcdFxcdHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgY29uZmlnO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTExNDctXFx0fSBfX3BhY2tlZCByZXEgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0xMTYzPWludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTExNzAtXFx0XFx0X19sZTE2IGxlbjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoxMTcxOlxcdFxcdHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgY29uZmlnO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTExNzItXFx0fSBfX3BhY2tlZCByZXEgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMTgxLVxcdGNvbnN0IHUxNiBoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB0bHYpICtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoxMTgyOlxcdFxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnLCBkYXRhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoxMTgzOlxcdHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKmNmZztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMTg0LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMjIwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjEyMjE6XFx0XFx0Y2ZnID0gKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKil0bHYtXFx1MDAzZWRhdGE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTIyMi1cXHRcXHRkYXRhX3NpemUgPSBsZTE2X3RvX2NwdShjZmctXFx1MDAzZWRhdGFfc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaD0xMTc9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaC0xMjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1Lmg6MTIyOi8qIHR5cGUvcmVzcF90eXBlIG9mIHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaC0xMjMtZW51bSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjI1OjI0LjU5NzYwMjA4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTMyNDI0MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNVDc2IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgTVQ3NiBDb25uYWMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQuIExldCdzIHN0YXJ0IHdpdGggYSBrZXkgc3RydWN0dXJlLiBJJ20gdGhpbmtpbmcgSSdsbCBmaW5kIGEgbG90IG9mIHRoZSBpbml0aWFsIHNldHVwIHBhcmFtZXRlcnMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmhgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGxvdy1kb3duIG9uIGhvdyB0aGUgQ29ubmFjIGhhcmR3YXJlIGlzIGluaXRpYWxpemVkIGFuZCB3aGF0IHNldHRpbmdzIGFyZSBiZWluZyB1c2VkLiBJIGV4cGVjdCB0byBzZWUgYWxsIHRoZSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9ucyBvZiBoYXJkd2FyZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyNToyOC4xMzAwMzQxMDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjkwNjYxNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oPTE4NTA9c3RydWN0IG10NzZfY29ubmFjX3R4X3Bvd2VyX2xpbWl0X3RsdiB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oLTE4NjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaDoxODY1OnN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgtMTg2Ni1cXHRfX2xlMTYgaWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjI1OjMwLjc5OTEwNjg3N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA3NTY0NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNVDc2IENvbm5lY3Rpb24gTWFuYWdlcioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIE1lZGlhVGVrIHdpcmVsZXNzIGRyaXZlci4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oYCAtIHNwZWNpZmljYWxseSwgbGV0J3Mgem9vbSBpbiBhcm91bmQgbGluZSAxODY1LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBkZWZpbml0aW9ucyBvciBzdHJ1Y3R1cmVzIGluIHRoaXMgYXJlYS4gUHJvYmFibHkgcmVsYXRlZCB0byB0aGUgQ29ubmFjIE1DVSwgd2hpY2ggaGFuZGxlcyBhIGxvdCBvZiB0aGUgbG93LWxldmVsIHdpcmVsZXNzIGludGVyYWN0aW9uIG9uIHRoZXNlIGNoaXBzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBjb25uZWN0aW9ucywgZGlzY29ubmVjdGlvbnMsIHJvYW1pbmcsIGFuZCBtYXliZSBldmVuIGZpcm13YXJlLXJlbGF0ZWQgaW50ZXJhY3Rpb25zLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGF3YWl0IHVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzUxLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6MjU6MzUuMDA2Njc0MzNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MDpcXHRcXHQvKiBEVzMgKi9cXG4xODYxOlxcdFxcdHU4IGFscGhhMls0XTsgLyogcmVndWxhdG9yeV9yZXF1ZXN0LmFscGhhMiAqL1xcbjE4NjI6XFx0XFx0dTggcGFkMlszMl07XFxuMTg2MzpcXHR9IF9fcGFja2VkO1xcbjE4NjQ6XFx0XFxuMTg2NTpcXHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIHtcXG4xODY2OlxcdFxcdF9fbGUxNiBpZDtcXG4xODY3OlxcdFxcdHU4IHR5cGU7XFxuMTg2ODpcXHRcXHR1OCByZXNwX3R5cGU7XFxuMTg2OTpcXHRcXHRfX2xlMTYgZGF0YV9zaXplO1xcbjE4NzA6XFx0XFx0X19sZTE2IHJlc3Y7XFxuMTg3MTpcXHRcXHR1OCBkYXRhWzMyMF07XFxuMTg3MjpcXHR9IF9fcGFja2VkO1xcbjE4NzM6XFx0XFxuMTg3NDpcXHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfbWN1X3VuaV9ldmVudCB7XFxuMTg3NTpcXHRcXHR1OCBjaWQ7XFxuMTg3NjpcXHRcXHR1OCBwYWRbM107XFxuMTg3NzpcXHRcXHRfX2xlMzIgc3RhdHVzOyAvKiAwOiBzdWNjZXNzLCBvdGhlcnM6IGZhaWwgKi9cXG4xODc4OlxcdH0gX19wYWNrZWQ7XFxuMTg3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6MjU6MzUuMDA2ODQxMTgxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MTAxODUyNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBhbmQgUmVsYXRlZCBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiBpZGVudGlmeWluZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igc2VuZHMgdG8gdGhlIE1DVSwgcGFydGljdWxhcmx5IGdpdmVuIHRoZSBuZXcgY29kZSBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2guXG5cbkkgc2VlIHRoYXQgYHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWdgIGhhcyBhIGBkYXRhWzMyMF1gIG1lbWJlci4gVGhlIGNvcmUgb2YgdGhlIGNvbmNlcm4gcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGlzIGlzIGhhbmRsZWQsIGFsb25nIHdpdGggdGhlIHN0YWNrIHZhcmlhYmxlIGByZXNwYCBhbmQgYHJlc3BfdHlwZWAuXG5cbkluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCwgdGhlIGByZXFgIHN0cnVjdHVyZSBpcyB0aGUga2V5IHRvIHNlbmRpbmcgZGF0YSB0byB0aGUgTUNVLiBUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgdGhlIGNvbXBpbGVyJ3MgYmVoYXZpb3Igd2hlbiB1c2luZyB0aGUgYHsgLi4uIH1gIGluaXRpYWxpemVyIGlzIHRvIHplcm8taW5pdGlhbGl6ZSBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IGFzc2lnbmVkLiBUaGlzIG1lYW5zIGBfcnN2YCwgYGNvbmZpZy5pZGAsIGBjb25maWcucmVzdmAgYW5kIGNyaXRpY2FsbHksIGBjb25maWcuZGF0YWAsIHdpbGwgYmUgemVyb2VkLiBUaGVuLCBgbWVtY3B5YCBwb3B1bGF0ZXMgdGhlICpiZWdpbm5pbmcqIG9mIGBjb25maWcuZGF0YWAuIFRoZSBlbnRpcmUgYHJlcWAgc3RydWN0dXJlIGlzIHRoZW4gc2VudC4gVGhpcyBtZWFucyB0aGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHNlbnQgdG8gdGhlIE1DVS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBtdDc5MjVfY29leF9pbmZvYCwgd2hlcmUgdGhlIGByZXNwYCBhbmQgYHJlc3BfdHlwZWAgYXJlIHVzZWQuIGByZXNwYCBpcyB1bmluaXRpYWxpemVkIG9uIHRoZSBzdGFjay4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIHRoZW4gcG9wdWxhdGVzIGByZXNwYCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBvcHVsYXRlZCBpbiBgcmV0YC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhlIHN1YnNlcXVlbnQgYHNlcV9wcmludGZgIGNhbGxzIG9ubHkgcHJpbnQgYmFzZWQgb24gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiBjb3BpZWQgaW50byBgcmVzcGAuIFRoZSBjb2RlICpvbmx5KiByZWFkcyB0aGUgaW5pdGlhbGl6ZWQgcGFydHMgb2YgYHJlc3BgLlxuXG5UaGUgY3J1Y2lhbCBiaXQsIHRoZXJlZm9yZSwgaXMgdGhlIGNvZGUgaW4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBJZiB0aGUgcm91dGluZSBmaW5kcyB0aGUgYXBwcm9wcmlhdGUgdGFnIHdpdGhpbiB0aGUgcmVjZWl2ZWQgZGF0YSwgaXQgY29waWVzIGRhdGEgaW50byBgcmVzcGAgKHVwIHRvIGByZXNwX3NpemVgKSBhbmQgc2V0cyBgcmV0YCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4gSWYgdGhlIHJvdXRpbmUgZG9lcyBub3QgZmluZCB0aGUgdGFnLCBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIHBhdGggKmVuc3VyZXMqIGByZXRgIHJlcHJlc2VudHMgdGhlIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gdG8gYHJlc3BgLiBUaGVyZSdzIG5vIHNjZW5hcmlvIHdoZXJlIGByZXQgXHUwMDNlIDBgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBieXRlcyB3ZXJlbid0IGluaXRpYWxpemVkLlxuXG5JIHRoZW4gd2VudCBiYWNrIHRvIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnYCB0byByZS1ldmFsdWF0ZSBpdCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHBhdGNoLiBJdCBzdGlsbCBzZWVtcyBmaW5lLCBiZWNhdXNlIHRoZSBzdHJ1Y3QgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZXN0IGlzIHplcm9lZC5cblxuU28sIGxldCdzIGRvdWJsZSBjaGVjay4gYHJlcWAgaXMgY29tcGxldGVseSBpbml0aWFsaXplZC4gTm90aGluZyBpcyBzZW50IHVuaW5pdGlhbGl6ZWQgdG8gdGhlIE1DVS4gVGhlIHJldHVybmVkIGByZXRgIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2YgaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gYHJlc3BgLiBgcmVzcF90eXBlYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdGhlIHVzZS4gVGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlIGlzIGNoZWNrZWQgZm9yIHNpemVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgdGhlIEtNU0FOIHJ1bGVzOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6IE5vLCB3ZSBhcmVuJ3QgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE6IE5vLCBhbGwgdmFyaWFibGVzIHVzZWQgaW4gY29udHJvbCBmbG93IGFyZSBpbml0aWFsaXplZCBjb3JyZWN0bHkuXG4zLiAgQWxsb2NhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZDogTm8sIHRoZSBzdGFjayBidWZmZXIgYHJlc3BgIGlzIG9ubHkgcmVhZCB1cCB0byB0aGUgaW5pdGlhbGl6ZWQgYnl0ZXMuXG40LiAgQm91bmRzIGNoZWNrcyB0aGF0IGFsbG93IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzczogVGhlIGxvZ2ljIGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCB2ZXJpZmllcyB0aGUgc2l6ZXMuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU49ZmFsc2VgIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjkwLCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyNjowMS4xMDg2OTY4NDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGVidWdmcyBlbnRyeSBgY29leF9pbmZvYCBhbmQgYSBmdW5jdGlvbiBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgdG8gcXVlcnkgdGhlIE1DVS4gVGhlIGxvY2FsIGByZXFgIHN0cnVjdHVyZSB1c2VkIHRvIHNlbmQgdGhlIHF1ZXJ5IGlzIHBhcnRpYWxseSBpbml0aWFsaXplZCB3aXRoIGEgc3RydWN0IGluaXRpYWxpemVyLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGNvbXBpbGVyIHplcm8taW5pdGlhbGl6ZXMgYWxsIHJlbWFpbmluZyBmaWVsZHMgYW5kIHBhZGRpbmcuIFRoZSBgcmVzcGAgYnVmZmVyIGFuZCBgcmVzcF90eXBlYCB2YXJpYWJsZSBhcmUgcG9wdWxhdGVkIGJ5IGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YC4gVGhlIGZ1bmN0aW9uIGNvcnJlY3RseSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGludG8gYHJlc3BgLCBhbmQgdGhlIGNhbGxlciBgbXQ3OTI1X2NvZXhfaW5mb2Agb25seSByZWFkcyBleGFjdGx5IHRoYXQgbWFueSBieXRlcy4gYHJlc3BfdHlwZWAgaXMgYWxzbyBvbmx5IGFjY2Vzc2VkIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBwb3NpdGl2ZSBsZW5ndGgsIG1lYW5pbmcgaXQgd2FzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdywgc2VudCB0byB0aGUgZGV2aWNlLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIG1lbW9yeSBjb3JydXB0aW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRlYnVnZnMgZW50cnkgYGNvZXhfaW5mb2AgYW5kIGEgZnVuY3Rpb24gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIHRvIHF1ZXJ5IHRoZSBNQ1UuIFRoZSBsb2NhbCBgcmVxYCBzdHJ1Y3R1cmUgdXNlZCB0byBzZW5kIHRoZSBxdWVyeSBpcyBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHN0cnVjdCBpbml0aWFsaXplciwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjb21waWxlciB6ZXJvLWluaXRpYWxpemVzIGFsbCByZW1haW5pbmcgZmllbGRzIGFuZCBwYWRkaW5nLiBUaGUgYHJlc3BgIGJ1ZmZlciBhbmQgYHJlc3BfdHlwZWAgdmFyaWFibGUgYXJlIHBvcHVsYXRlZCBieSBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAuIFRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBpbnRvIGByZXNwYCwgYW5kIHRoZSBjYWxsZXIgYG10NzkyNV9jb2V4X2luZm9gIG9ubHkgcmVhZHMgZXhhY3RseSB0aGF0IG1hbnkgYnl0ZXMuIGByZXNwX3R5cGVgIGlzIGFsc28gb25seSBhY2Nlc3NlZCB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9zaXRpdmUgbGVuZ3RoLCBtZWFuaW5nIGl0IHdhcyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3csIHNlbnQgdG8gdGhlIGRldmljZSwgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBtZW1vcnkgY29ycnVwdGlvbnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowldxt4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 02:07:57 +0000 UTC FinishedAt: 2026-08-10 02:26:03 +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": [ "MT7925U", "MAC80211", "USB", "DEBUG_FS" ], "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": [ "MT7925U", "MAC80211", "USB", "DEBUG_FS" ], "series_id": "b4657700-aa69-472b-a5ed-bd2a9c0d5811" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mt7925_mcu_chip_config_query", "mt7925_coex_info" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01UNzkyNVUmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeSYjMzQ7LAogICAgJiMzNDttdDc5MjVfY29leF9pbmZvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGVudHJ5IGBjb2V4X2luZm9gIGFuZCBhIGZ1bmN0aW9uIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCB0byBxdWVyeSB0aGUgTUNVLiBUaGUgbG9jYWwgYHJlcWAgc3RydWN0dXJlIHVzZWQgdG8gc2VuZCB0aGUgcXVlcnkgaXMgcGFydGlhbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJ1Y3QgaW5pdGlhbGl6ZXIsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgY29tcGlsZXIgemVyby1pbml0aWFsaXplcyBhbGwgcmVtYWluaW5nIGZpZWxkcyBhbmQgcGFkZGluZy4gVGhlIGByZXNwYCBidWZmZXIgYW5kIGByZXNwX3R5cGVgIHZhcmlhYmxlIGFyZSBwb3B1bGF0ZWQgYnkgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBUaGUgZnVuY3Rpb24gY29ycmVjdGx5IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgaW50byBgcmVzcGAsIGFuZCB0aGUgY2FsbGVyIGBtdDc5MjVfY29leF9pbmZvYCBvbmx5IHJlYWRzIGV4YWN0bHkgdGhhdCBtYW55IGJ5dGVzLiBgcmVzcF90eXBlYCBpcyBhbHNvIG9ubHkgYWNjZXNzZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvc2l0aXZlIGxlbmd0aCwgbWVhbmluZyBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LCBzZW50IHRvIHRoZSBkZXZpY2UsIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb25zLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZGVidWdmcyBpbnRlcmZhY2UgdGhhdCB0cmlnZ2VycyBhbiBNQ1UgY29tbWFuZCBhbmQgcGFyc2VzIHRoZSByZXNwb25zZS4gVGhlIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgaW4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIHByb2Nlc3NlcyB1bnRydXN0ZWQgZGF0YSBmcm9tIHRoZSBoYXJkd2FyZSAod2hpY2ggY2FuIGJlIGVtdWxhdGVkIHZpYSBVU0IgZ2FkZ2V0IGluIHN5emthbGxlcikgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJvYnVzdG5lc3MgYWdhaW5zdCBtYWxmb3JtZWQgVExWcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM0ODJhODlhNWRlMWUxZjEzYjVjOWI2ZmFmNzFlZjYwNWJlZmNkYzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMjoyMjozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcbmluZGV4IGQwMWZmNDlkZTQ3YWYuLjlhNWVhMTJiNzZjNzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xuQEAgLTI4Niw2ICYjNDM7Mjg2LDM0IEBAIHN0YXRpYyBpbnQgbXQ3OTI1X2NoaXBfcmVzZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiBcbiBERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoZm9wc19yZXNldCwgTlVMTCwgbXQ3OTI1X2NoaXBfcmVzZXQsIFwmIzM0OyVsbGRcXG5cJiMzNDspO1xuIFxuJiM0MztzdGF0aWMgaW50XG4mIzQzO210NzkyNV9jb2V4X2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzOyNkZWZpbmUgTVQ3OTI1X0NISVBfQ09ORklHX1JFU1BfU0laRVx0MzIwXG4mIzQzO1x0c3RydWN0IG10NzkyeF9kZXYgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShzLVx1MDAzZXByaXZhdGUpO1xuJiM0MztcdHU4IHJlc3BbTVQ3OTI1X0NISVBfQ09ORklHX1JFU1BfU0laRV0sIHJlc3BfdHlwZTtcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcbiYjNDM7XHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xuJiM0MztcdHJldCA9IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoZGV2LCBcJiMzNDtjb2V4QndjR2V0TW9kZUluZm8gMFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNnJlc3BfdHlwZSwgcmVzcCwgc2l6ZW9mKHJlc3ApKTtcbiYjNDM7XHRtdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRzZXFfcHV0cyhzLCBcJiMzNDtubyByZXBseVxcblwmIzM0Oyk7XG4mIzQzO1x0ZWxzZSBpZiAocmVzcF90eXBlID09IENISVBfQ09ORklHX1RZUEVfQVNDSUkpXG4mIzQzO1x0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyUuKnNcXG5cJiMzNDssIHJldCwgcmVzcCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmV0OyBpICYjNDM7PSAxNilcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslMDR4OiAlKnBoXFxuXCYjMzQ7LCBpLFxuJiM0MztcdFx0XHRcdCAgIG1pbl90KGludCwgMTYsIHJldCAtIGkpLCByZXNwICYjNDM7IGkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbXQ3OTI1X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCBkZW50cnkgKmRpcjtcbkBAIC0zMDksNiAmIzQzOzMzNyw4IEBAIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2lkbGUtdGltZW91dFwmIzM0OywgMDYwMCwgZGlyLCBkZXYsXG4gXHRcdFx0ICAgIFx1MDAyNmZvcHNfcG1faWRsZV90aW1lb3V0KTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7Y2hpcF9yZXNldFwmIzM0OywgMDYwMCwgZGlyLCBkZXYsIFx1MDAyNmZvcHNfcmVzZXQpO1xuJiM0MztcdGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtXHUwMDNlbXQ3Ni5kZXYsIFwmIzM0O2NvZXhfaW5mb1wmIzM0OywgZGlyLFxuJiM0MztcdFx0XHRcdCAgICBtdDc5MjVfY29leF9pbmZvKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtXHUwMDNlbXQ3Ni5kZXYsIFwmIzM0O3J1bnRpbWVfcG1fc3RhdHNcJiMzNDssIGRpcixcbiBcdFx0XHRcdCAgICBtdDc5MnhfcG1fc3RhdHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtkZWVwLXNsZWVwXCYjMzQ7LCAwNjAwLCBkaXIsIGRldiwgXHUwMDI2Zm9wc19kcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuY1xuaW5kZXggZmEyOWM0ODZhNDU1My4uZTYzMTZjZWExODY1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuY1xuQEAgLTExNjAsNiAmIzQzOzExNjAsODEgQEAgaW50IG10NzkyNV9tY3VfY2hpcF9jb25maWcoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kKVxuIFx0XHRcdFx0IFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIGZhbHNlKTtcbiB9XG4gXG4mIzQzO2ludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCxcbiYjNDM7XHRcdFx0XHQgdTggKnJlc3BfdHlwZSwgdm9pZCAqcmVzcCwgdTE2IHJlc3Bfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHUxNiBsZW4gPSBzdHJsZW4oY21kKTtcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0dTggX3Jzdls0XTtcbiYjNDM7XHRcdF9fbGUxNiB0YWc7XG4mIzQzO1x0XHRfX2xlMTYgbGVuO1xuJiM0MztcdFx0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyBjb25maWc7XG4mIzQzO1x0fSBfX3BhY2tlZCByZXEgPSB7XG4mIzQzO1x0XHQudGFnID0gY3B1X3RvX2xlMTYoVU5JX0NISVBfQ09ORklHX0NISVBfQ0ZHKSxcbiYjNDM7XHRcdC5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIDQpLFxuJiM0MztcdFx0LmNvbmZpZyA9IHtcbiYjNDM7XHRcdFx0LnJlc3BfdHlwZSA9IDAsXG4mIzQzO1x0XHRcdC50eXBlID0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSxcbiYjNDM7XHRcdFx0LmRhdGFfc2l6ZSA9IGNwdV90b19sZTE2KGxlbiksXG4mIzQzO1x0XHR9LFxuJiM0MztcdH07XG4mIzQzO1x0Y29uc3QgdTE2IGhkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHRsdikgJiM0MztcbiYjNDM7XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcsIGRhdGEpO1xuJiM0MztcdHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKmNmZztcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghbGVuIHx8IGxlbiBcdTAwM2U9IHNpemVvZihyZXEuY29uZmlnLmRhdGEpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG1lbWNweShyZXEuY29uZmlnLmRhdGEsIGNtZCwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9RVUVSWShDSElQX0NPTkZJRyksXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBza2lwIHRoZSBmaXhlZCBmaWVsZCBvZiB0aGUgZXZlbnQsIHRoZSBUTFZzIGZvbGxvdyBpdCAqL1xuJiM0MztcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyA0KSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdHNrYl9wdWxsKHNrYiwgNCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IC1FTk9FTlQ7XG4mIzQzO1x0d2hpbGUgKHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IHRsdikpIHtcbiYjNDM7XHRcdHN0cnVjdCB0bHYgKnRsdiA9IChzdHJ1Y3QgdGx2ICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1x0XHR1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KHRsdi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0dTE2IGRhdGFfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGx2X2xlbiBcdTAwM2Mgc2l6ZW9mKCp0bHYpIHx8IHRsdl9sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChsZTE2X3RvX2NwdSh0bHYtXHUwMDNldGFnKSAhPSBVTklfQ0hJUF9DT05GSUdfQ0hJUF9DRkcpIHtcbiYjNDM7XHRcdFx0c2tiX3B1bGwoc2tiLCB0bHZfbGVuKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRsdl9sZW4gXHUwMDNjIGhkcl9sZW4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGNmZyA9IChzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICopdGx2LVx1MDAzZWRhdGE7XG4mIzQzO1x0XHRkYXRhX3NpemUgPSBsZTE2X3RvX2NwdShjZmctXHUwMDNlZGF0YV9zaXplKTtcbiYjNDM7XHRcdGlmIChkYXRhX3NpemUgXHUwMDNlIHRsdl9sZW4gLSBoZHJfbGVuKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQqcmVzcF90eXBlID0gY2ZnLVx1MDAzZXJlc3BfdHlwZTtcbiYjNDM7XHRcdHJldCA9IG1pbl90KHUxNiwgZGF0YV9zaXplLCByZXNwX3NpemUpO1xuJiM0MztcdFx0bWVtY3B5KHJlc3AsIGNmZy1cdTAwM2VkYXRhLCByZXQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbXQ3OTI1X21jdV9zZXRfZGVlcF9zbGVlcChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBib29sIGVuYWJsZSlcbiB7XG4gXHRjaGFyIGNtZFsxNl07XG5AQCAtMzc3Miw3ICYjNDM7Mzg0Nyw4IEBAIGludCBtdDc5MjVfbWN1X2ZpbGxfbWVzc2FnZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0dW5pX3R4ZC1cdTAwM2VvcHRpb24gPSBNQ1VfQ01EX1VOSV9FWFRfQUNLO1xuIFxuIFx0XHRpZiAoY21kID09IE1DVV9VTklfQ01EKEhJRl9DVFJMKSB8fFxuLVx0XHQgICAgY21kID09IE1DVV9VTklfQ01EKENISVBfQ09ORklHKSlcbiYjNDM7XHRcdCAgICBjbWQgPT0gTUNVX1VOSV9DTUQoQ0hJUF9DT05GSUcpIHx8XG4mIzQzO1x0XHQgICAgY21kID09IE1DVV9VTklfUVVFUlkoQ0hJUF9DT05GSUcpKVxuIFx0XHRcdHVuaV90eGQtXHUwMDNlb3B0aW9uIFx1MDAyNj0gfk1DVV9DTURfQUNLO1xuIFxuIFx0XHRpZiAobWN1X2NtZCA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMIHx8XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaFxuaW5kZXggMTFmOWVhYzEzZmZjNi4uMmNmMzk3MWQ5ODUzYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaFxuQEAgLTExOSw2ICYjNDM7MTE5LDE1IEBAIGVudW0ge1xuIFx0VU5JX0NISVBfQ09ORklHX05JQ19DQVBBID0gMHgzLFxuIH07XG4gXG4mIzQzOy8qIHR5cGUvcmVzcF90eXBlIG9mIHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKi9cbiYjNDM7ZW51bSB7XG4mIzQzO1x0Q0hJUF9DT05GSUdfVFlQRV9XT19SRVNQT05TRSxcbiYjNDM7XHRDSElQX0NPTkZJR19UWVBFX01FTTgsXG4mIzQzO1x0Q0hJUF9DT05GSUdfVFlQRV9NRU0zMixcbiYjNDM7XHRDSElQX0NPTkZJR19UWVBFX0FTQ0lJLFxuJiM0MztcdENISVBfQ09ORklHX1RZUEVfQklOQVJZLFxuJiM0Mzt9O1xuJiM0MztcbiBlbnVtIHtcbiBcdFVOSV9CQU5EX0NPTkZJR19SQURJT19FTkFCTEUsXG4gXHRVTklfQkFORF9DT05GSUdfUlRTX1RIUkVTSE9MRCA9IDB4MDgsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaFxuaW5kZXggMzIxZTczMjM0N2YyZi4uZDBkYjVkOGRhZTQ4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaFxuQEAgLTI5NSw2ICYjNDM7Mjk1LDggQEAgaW50IG10NzkyNV9tY3VfZ2V0X3J4X3JhdGUoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBpbnQgbXQ3OTI1X21jdV9md19sb2dfMl9ob3N0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGN0cmwpO1xuIHZvaWQgbXQ3OTI1X21jdV9yeF9ldmVudChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpO1xuJiM0MztpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQsXG4mIzQzO1x0XHRcdFx0IHU4ICpyZXNwX3R5cGUsIHZvaWQgKnJlc3AsIHUxNiByZXNwX3NpemUpO1xuIGludCBtdDc5MjVfbWN1X3NldF9yeGZpbHRlcihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MzIgZmlmLFxuIFx0XHRcdCAgICB1OCBiaXRfb3AsIHUzMiBiaXRfbWFwKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVQ3OTI1VSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5JiMzNDssCiAgICAmIzM0O210NzkyNV9jb2V4X2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGRlYnVnZnMgaW50ZXJmYWNlIHRoYXQgdHJpZ2dlcnMgYW4gTUNVIGNvbW1hbmQgYW5kIHBhcnNlcyB0aGUgcmVzcG9uc2UuIFRoZSByZXNwb25zZSBwYXJzaW5nIGxvZ2ljIGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBwcm9jZXNzZXMgdW50cnVzdGVkIGRhdGEgZnJvbSB0aGUgaGFyZHdhcmUgKHdoaWNoIGNhbiBiZSBlbXVsYXRlZCB2aWEgVVNCIGdhZGdldCBpbiBzeXprYWxsZXIpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSByb2J1c3RuZXNzIGFnYWluc3QgbWFsZm9ybWVkIFRMVnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNDgyYTg5YTVkZTFlMWYxM2I1YzliNmZhZjcxZWY2MDViZWZjZGM2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMDI6MjI6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMKaW5kZXggZDAxZmY0OWRlNDdhZi4uOWE1ZWExMmI3NmM3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuYwpAQCAtMjg2LDYgJiM0MzsyODYsMzQgQEAgc3RhdGljIGludCBtdDc5MjVfY2hpcF9yZXNldCh2b2lkICpkYXRhLCB1NjQgdmFsKQogCiBERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoZm9wc19yZXNldCwgTlVMTCwgbXQ3OTI1X2NoaXBfcmVzZXQsICYjMzQ7JWxsZFxuJiMzNDspOwogCiYjNDM7c3RhdGljIGludAomIzQzO210NzkyNV9jb2V4X2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsjZGVmaW5lIE1UNzkyNV9DSElQX0NPTkZJR19SRVNQX1NJWkUJMzIwCiYjNDM7CXN0cnVjdCBtdDc5MnhfZGV2ICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocy0mZ3Q7cHJpdmF0ZSk7CiYjNDM7CXU4IHJlc3BbTVQ3OTI1X0NISVBfQ09ORklHX1JFU1BfU0laRV0sIHJlc3BfdHlwZTsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJbXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTsKJiM0MzsJcmV0ID0gbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShkZXYsICYjMzQ7Y29leEJ3Y0dldE1vZGVJbmZvIDAmIzM0OywKJiM0MzsJCQkJCSAgICZhbXA7cmVzcF90eXBlLCByZXNwLCBzaXplb2YocmVzcCkpOwomIzQzOwltdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJc2VxX3B1dHMocywgJiMzNDtubyByZXBseVxuJiMzNDspOwomIzQzOwllbHNlIGlmIChyZXNwX3R5cGUgPT0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSkKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDslLipzXG4mIzM0OywgcmV0LCByZXNwKTsKJiM0MzsJZWxzZQomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHJldDsgaSAmIzQzOz0gMTYpCiYjNDM7CQkJc2VxX3ByaW50ZihzLCAmIzM0OyUwNHg6ICUqcGhcbiYjMzQ7LCBpLAomIzQzOwkJCQkgICBtaW5fdChpbnQsIDE2LCByZXQgLSBpKSwgcmVzcCAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IG10NzkyNV9pbml0X2RlYnVnZnMoc3RydWN0IG10NzkyeF9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkaXI7CkBAIC0zMDksNiAmIzQzOzMzNyw4IEBAIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpCiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O2lkbGUtdGltZW91dCYjMzQ7LCAwNjAwLCBkaXIsIGRldiwKIAkJCSAgICAmYW1wO2ZvcHNfcG1faWRsZV90aW1lb3V0KTsKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7Y2hpcF9yZXNldCYjMzQ7LCAwNjAwLCBkaXIsIGRldiwgJmFtcDtmb3BzX3Jlc2V0KTsKJiM0MzsJZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi0mZ3Q7bXQ3Ni5kZXYsICYjMzQ7Y29leF9pbmZvJiMzNDssIGRpciwKJiM0MzsJCQkJICAgIG10NzkyNV9jb2V4X2luZm8pOwogCWRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtJmd0O210NzYuZGV2LCAmIzM0O3J1bnRpbWVfcG1fc3RhdHMmIzM0OywgZGlyLAogCQkJCSAgICBtdDc5MnhfcG1fc3RhdHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtkZWVwLXNsZWVwJiMzNDssIDA2MDAsIGRpciwgZGV2LCAmYW1wO2ZvcHNfZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYwppbmRleCBmYTI5YzQ4NmE0NTUzLi5lNjMxNmNlYTE4NjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYwpAQCAtMTE2MCw2ICYjNDM7MTE2MCw4MSBAQCBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpCiAJCQkJICZhbXA7cmVxLCBzaXplb2YocmVxKSwgZmFsc2UpOwogfQogCiYjNDM7aW50IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kLAomIzQzOwkJCQkgdTggKnJlc3BfdHlwZSwgdm9pZCAqcmVzcCwgdTE2IHJlc3Bfc2l6ZSkKJiM0Mzt7CiYjNDM7CXUxNiBsZW4gPSBzdHJsZW4oY21kKTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXU4IF9yc3ZbNF07CiYjNDM7CQlfX2xlMTYgdGFnOwomIzQzOwkJX19sZTE2IGxlbjsKJiM0MzsJCXN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgY29uZmlnOwomIzQzOwl9IF9fcGFja2VkIHJlcSA9IHsKJiM0MzsJCS50YWcgPSBjcHVfdG9fbGUxNihVTklfQ0hJUF9DT05GSUdfQ0hJUF9DRkcpLAomIzQzOwkJLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihyZXEpIC0gNCksCiYjNDM7CQkuY29uZmlnID0gewomIzQzOwkJCS5yZXNwX3R5cGUgPSAwLAomIzQzOwkJCS50eXBlID0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSwKJiM0MzsJCQkuZGF0YV9zaXplID0gY3B1X3RvX2xlMTYobGVuKSwKJiM0MzsJCX0sCiYjNDM7CX07CiYjNDM7CWNvbnN0IHUxNiBoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB0bHYpICYjNDM7CiYjNDM7CQkJICAgIG9mZnNldG9mKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcsIGRhdGEpOwomIzQzOwlzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICpjZmc7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghbGVuIHx8IGxlbiAmZ3Q7PSBzaXplb2YocmVxLmNvbmZpZy5kYXRhKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltZW1jcHkocmVxLmNvbmZpZy5kYXRhLCBjbWQsIGxlbik7CiYjNDM7CiYjNDM7CXJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coJmFtcDtkZXYtJmd0O210NzYsIE1DVV9VTklfUVVFUlkoQ0hJUF9DT05GSUcpLAomIzQzOwkJCQkJJmFtcDtyZXEsIHNpemVvZihyZXEpLCB0cnVlLCAmYW1wO3NrYik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBza2lwIHRoZSBmaXhlZCBmaWVsZCBvZiB0aGUgZXZlbnQsIHRoZSBUTFZzIGZvbGxvdyBpdCAqLwomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0OyA0KSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJc2tiX3B1bGwoc2tiLCA0KTsKJiM0MzsKJiM0MzsJcmV0ID0gLUVOT0VOVDsKJiM0MzsJd2hpbGUgKHNrYi0mZ3Q7bGVuICZndDs9IHNpemVvZihzdHJ1Y3QgdGx2KSkgewomIzQzOwkJc3RydWN0IHRsdiAqdGx2ID0gKHN0cnVjdCB0bHYgKilza2ItJmd0O2RhdGE7CiYjNDM7CQl1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KHRsdi0mZ3Q7bGVuKTsKJiM0MzsJCXUxNiBkYXRhX3NpemU7CiYjNDM7CiYjNDM7CQlpZiAodGx2X2xlbiAmbHQ7IHNpemVvZigqdGx2KSB8fCB0bHZfbGVuICZndDsgc2tiLSZndDtsZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAobGUxNl90b19jcHUodGx2LSZndDt0YWcpICE9IFVOSV9DSElQX0NPTkZJR19DSElQX0NGRykgewomIzQzOwkJCXNrYl9wdWxsKHNrYiwgdGx2X2xlbik7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAodGx2X2xlbiAmbHQ7IGhkcl9sZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQljZmcgPSAoc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqKXRsdi0mZ3Q7ZGF0YTsKJiM0MzsJCWRhdGFfc2l6ZSA9IGxlMTZfdG9fY3B1KGNmZy0mZ3Q7ZGF0YV9zaXplKTsKJiM0MzsJCWlmIChkYXRhX3NpemUgJmd0OyB0bHZfbGVuIC0gaGRyX2xlbikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCSpyZXNwX3R5cGUgPSBjZmctJmd0O3Jlc3BfdHlwZTsKJiM0MzsJCXJldCA9IG1pbl90KHUxNiwgZGF0YV9zaXplLCByZXNwX3NpemUpOwomIzQzOwkJbWVtY3B5KHJlc3AsIGNmZy0mZ3Q7ZGF0YSwgcmV0KTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlkZXZfa2ZyZWVfc2tiKHNrYik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogaW50IG10NzkyNV9tY3Vfc2V0X2RlZXBfc2xlZXAoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgYm9vbCBlbmFibGUpCiB7CiAJY2hhciBjbWRbMTZdOwpAQCAtMzc3Miw3ICYjNDM7Mzg0Nyw4IEBAIGludCBtdDc5MjVfbWN1X2ZpbGxfbWVzc2FnZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQl1bmlfdHhkLSZndDtvcHRpb24gPSBNQ1VfQ01EX1VOSV9FWFRfQUNLOwogCiAJCWlmIChjbWQgPT0gTUNVX1VOSV9DTUQoSElGX0NUUkwpIHx8Ci0JCSAgICBjbWQgPT0gTUNVX1VOSV9DTUQoQ0hJUF9DT05GSUcpKQomIzQzOwkJICAgIGNtZCA9PSBNQ1VfVU5JX0NNRChDSElQX0NPTkZJRykgfHwKJiM0MzsJCSAgICBjbWQgPT0gTUNVX1VOSV9RVUVSWShDSElQX0NPTkZJRykpCiAJCQl1bmlfdHhkLSZndDtvcHRpb24gJmFtcDs9IH5NQ1VfQ01EX0FDSzsKIAogCQlpZiAobWN1X2NtZCA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oCmluZGV4IDExZjllYWMxM2ZmYzYuLjJjZjM5NzFkOTg1M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oCkBAIC0xMTksNiAmIzQzOzExOSwxNSBAQCBlbnVtIHsKIAlVTklfQ0hJUF9DT05GSUdfTklDX0NBUEEgPSAweDMsCiB9OwogCiYjNDM7LyogdHlwZS9yZXNwX3R5cGUgb2Ygc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqLwomIzQzO2VudW0gewomIzQzOwlDSElQX0NPTkZJR19UWVBFX1dPX1JFU1BPTlNFLAomIzQzOwlDSElQX0NPTkZJR19UWVBFX01FTTgsCiYjNDM7CUNISVBfQ09ORklHX1RZUEVfTUVNMzIsCiYjNDM7CUNISVBfQ09ORklHX1RZUEVfQVNDSUksCiYjNDM7CUNISVBfQ09ORklHX1RZUEVfQklOQVJZLAomIzQzO307CiYjNDM7CiBlbnVtIHsKIAlVTklfQkFORF9DT05GSUdfUkFESU9fRU5BQkxFLAogCVVOSV9CQU5EX0NPTkZJR19SVFNfVEhSRVNIT0xEID0gMHgwOCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmgKaW5kZXggMzIxZTczMjM0N2YyZi4uZDBkYjVkOGRhZTQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmgKQEAgLTI5NSw2ICYjNDM7Mjk1LDggQEAgaW50IG10NzkyNV9tY3VfZ2V0X3J4X3JhdGUoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIGludCBtdDc5MjVfbWN1X2Z3X2xvZ18yX2hvc3Qoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggY3RybCk7CiB2b2lkIG10NzkyNV9tY3VfcnhfZXZlbnQoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpOwomIzQzO2ludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCwKJiM0MzsJCQkJIHU4ICpyZXNwX3R5cGUsIHZvaWQgKnJlc3AsIHUxNiByZXNwX3NpemUpOwogaW50IG10NzkyNV9tY3Vfc2V0X3J4ZmlsdGVyKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHUzMiBmaWYsCiAJCQkgICAgdTggYml0X29wLCB1MzIgYml0X21hcCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1UNzkyNSBDb2V4aXN0ZW5jZSBJbmZvcm1hdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbml0aWFsbHkuIEl0IGFkZHMgYSBgY29leF9pbmZvYCBkZWJ1Z2ZzIGZpbGUgd2l0aGluIHRoZSBtdDc5MjUgd2lyZWxlc3MgZHJpdmVyLCBjcmVhdGVkIHVzaW5nIGBkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGVgLiBUaGUgYWN0dWFsIGRhdGEgaXMgZ2VuZXJhdGVkIGJ5IGBtdDc5MjVfY29leF9pbmZvYCwgd2hpY2ggY2FsbHMgdGhpcyBuZXcgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIHRoZSBrZXksIGl0JiMzOTtzIHRoZSBvbmUgc2VuZGluZyBhbiBNQ1UgY29tbWFuZCwgc3BlY2lmaWNhbGx5IGBNQ1VfVU5JX1FVRVJZKENISVBfQ09ORklHKWAsIGFuZCB0aGVuIHBhcnNpbmcgdGhlIHJlc3BvbnNlLiBJdCBhbGwgbG9va3MgY2xlYW4gYXQgZmlyc3QgZ2xhbmNlLCB3ZWxsLXN0cnVjdHVyZWQuCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uIHBvcHMgaW50byBteSBtaW5kOiBDYW4gSSBhY3R1YWxseSB0ZXN0IHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIE1UNzkyNSBkcml2ZXIgaXMgdXN1YWxseSBmb3IgUENJZSBvciBVU0Igd2lyZWxlc3MgY2FyZHMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyeSBwcm9iaW5nIGl0IGluIFFFTVUuIEJ1dCB0aGVuIEkgcXVpY2tseSByZW1lbWJlciwgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoYXQgc3BlY2lmaWMgTVQ3OTI1IGhhcmR3YXJlLiBTbywgdGhhdCYjMzk7cyBhIGRlYWQgZW5kLgoKV2FpdCBhIG1pbnV0ZSwgZG9lcyB0aGUgZHJpdmVyIGV2ZW4gc3VwcG9ydCBVU0I/IEl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJJiMzOTt2ZSB3b3JrZWQgb24gTVQ3NiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBVU0Itc3BlY2lmaWMgY29kZSB3aXRoaW4gdGhlIGRyaXZlci4gTGV0IG1lIHNlYXJjaCB0aHJvdWdoIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS91c2IuY2Agb3IgYW55IG90aGVyIHJlbGV2YW50IGZpbGVzLiBJJiMzOTtsbCB1c2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCBvciBzaW1pbGFyIHRvIHF1aWNrbHkgY29uZmlybSBpZiBhIFVTQiBkcml2ZXIgaW1wbGVtZW50YXRpb24gZXhpc3RzLiBUaGF0JiMzOTtzIHRoZSByb3V0ZSBJJiMzOTttIGdvaW5nIHRvIHRha2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtkZWJ1Z2ZzLmMmIzM0OywKICAgICYjMzQ7aW5pdC5jJiMzNDssCiAgICAmIzM0O21hYy5jJiMzNDssCiAgICAmIzM0O21hYy5oJiMzNDssCiAgICAmIzM0O21haW4uYyYjMzQ7LAogICAgJiMzNDttY3UuYyYjMzQ7LAogICAgJiMzNDttY3UuaCYjMzQ7LAogICAgJiMzNDttdDc5MjUuaCYjMzQ7LAogICAgJiMzNDtuYW4uYyYjMzQ7LAogICAgJiMzNDtuYW4uaCYjMzQ7LAogICAgJiMzNDtwY2kuYyYjMzQ7LAogICAgJiMzNDtwY2lfbWFjLmMmIzM0OywKICAgICYjMzQ7cGNpX21jdS5jJiMzNDssCiAgICAmIzM0O3JlZ2QuYyYjMzQ7LAogICAgJiMzNDtyZWdkLmgmIzM0OywKICAgICYjMzQ7cmVncy5oJiMzNDssCiAgICAmIzM0O3Rlc3Rtb2RlLmMmIzM0OywKICAgICYjMzQ7dXNiLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjAKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA5OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBXb3J0aGluZXNzIEFzc2Vzc21lbnQgZm9yIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBgbXQ3OTI1YCBkcml2ZXIsIGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgd2hldGhlciB3ZSBjYW4gcmVhY2ggdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQuCgpGaXJzdCwgSSBzZWUgdGhlIGRyaXZlciYjMzk7cyBVU0IgcHJvYmUgY2FuIGJlIHRyaWdnZXJlZCBiZWNhdXNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcyB2aWEgYHN5el91c2JfY29ubmVjdGAuIFNvIGZhciwgc28gZ29vZC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvciBhcmUgcHVyZWx5IGRlY29yYXRpdmUuCgpOb3csIHRoZSBwYXRjaCBhZGRzIGEgZGVidWdmcyBmaWxlIChgY29leF9pbmZvYCkgYW5kIGEgcmVhZCBoYW5kbGVyIChgbXQ3OTI1X2NvZXhfaW5mb2ApIGFzIHdlbGwgYXMgYSBoZWxwZXIgZnVuY3Rpb24gKGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCkuIEluaXRpYWxseSwgZGVidWdmcyBmaWxlcyBzZWVtIGxpa2UgYSBiaXQgb2YgYSBncmV5IGFyZWEuIFRoZXkmIzM5O3JlIG9mdGVuIGNvbnNpZGVyZWQgZGVjb3JhdGl2ZSwgYnV0IHRoZXkgKmNhbiogYmUgZnV6emVkLiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSAqb25seSogZGVidWdmcyBtb2RpZmljYXRpb25zPwoKTGV0JiMzOTtzIGxvb2sgbW9yZSBjbG9zZWx5LiBUaGUgcGF0Y2ggdG91Y2hlcyBgZGVidWdmcy5jYCwgYG1jdS5jYCwgYW5kIGBtY3UuY2AuIEkgc2VlIHRoYXQgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIGlzIGludm9sdmVkLCBhbmQgaXQgYXBwZWFycyB0byBzZW5kIGEgc3BlY2lmaWMgTUNVIGNvbW1hbmQgKGBjb2V4QndjR2V0TW9kZUluZm8gMGApIGFuZCBwYXJzZXMgdGhlIHJlc3BvbnNlLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UhIEl0JiMzOTtzIG5vdCAqanVzdCogZGVidWcgb3V0cHV0LgoKRGlnZ2luZyBkZWVwZXIsIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBwYXJzZXMgYSBUTFYgKFR5cGUtTGVuZ3RoLVZhbHVlKSBmcm9tIHRoZSBTS0IuIENydWNpYWxseSwgdGhpcyBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgaGFyZHdhcmUgdGhyb3VnaCB0aGUgZW11bGF0ZWQgVVNCIGRldmljZS4gQW5kLCB0aGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IFN5emthbGxlciBjYW4gcHJvdmlkZSBhcmJpdHJhcnkgcmVzcG9uc2VzIHRvIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgc2VuZGluZyB0aGlzIHJlc3BvbnNlLiBUaGlzIG1lYW5zIHdlIGNhbiBjcmFmdCBtYWxpY2lvdXMgVVNCIHJlc3BvbnNlcyB0byBleHBsb2l0IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgVExWIHBhcnNpbmcgY29kZS4KClRoZXJlZm9yZSwgc2luY2UgdGhlIFVTQiByZXNwb25zZSBpcyBlbXVsYXRlZCwgd2UgY2FuIGRlZmluaXRlbHkgcmVhY2ggYW5kIGZ1enogdGhlIFRMViBwYXJzaW5nIGxvZ2ljIGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCwgd2hpY2ggcHJvY2Vzc2VzIHVudHJ1c3RlZCBpbnB1dC4gSXTigJlzIGFic29sdXRlbHkgd29ydGggZnV6emluZyBiZWNhdXNlIHdlIGNhbiB0cmlnZ2VyIGl0IGFuZCBwcm92aWRlIGEgcmFuZ2Ugb2YgbWFsaWNpb3VzIGlucHV0cy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIGBNVDc5MjVfVVNCYCBjb25maWd1cmF0aW9uIHNvIHRoYXQgaXQgY2FuIGJlIHRlc3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVQ3OTI1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnOjI6Y29uZmlnIE1UNzkyNV9DT01NT05cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy02LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZzo3OmNvbmZpZyBNVDc5MjVFXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTgtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc5MjVFIChQQ0llKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy0xOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWc6MTk6Y29uZmlnIE1UNzkyNVVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc5MjVVIChVU0IpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzE2CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBNVDc5MjVVYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE1UNzkyNVVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSByZWxldmFudCBrZXJuZWwgZG9jdW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGFueXRoaW5nIHN1cnJvdW5kaW5nIHRoZSBNZWRpYVRlayB3aXJlbGVzcyBkcml2ZXJzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB1c3VhbCBzdXNwZWN0czogdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzLCB0aGUgZHJpdmVyIGNvZGUgaXRzZWxmLCBhbmQgYW55IHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgKGxpa2UgZmlybXdhcmUgYmxvYnMgb3IgcmVndWxhdG9yeSBkYXRhYmFzZSBpbnRlcmFjdGlvbnMpLgoKTXkgYnJhaW4mIzM5O3MgYWxyZWFkeSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGFyZWFzIHRvIHByb2JlLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIG1vZHVsZXMgdGhhdCBhcmUgKmtub3duKiB0byBpbnRlcmFjdCB3aXRoIHRoaXMgcGFydGljdWxhciBjaGlwLCBldmVuIGluZGlyZWN0bHk/IFRoaW5rIGFib3V0IHRoZSB0eXBpY2FsIFdpRmkgc3RhY2sgbGF5ZXJzOiBNQUMsIFBIWSwgcmVndWxhdG9yeSwgbmV0d29ya2luZy4gQXJlIHRoZXJlIGFueSBpbnRlci1tb2R1bGUgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGltcG9ydGFudCB0byBjb25zaWRlcj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGdyZXAgc2VhcmNoIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciBgTVQ3OTI1VWAgb3IgcmVsYXRlZCBzdHJpbmdzLCBwYXlpbmcgYXR0ZW50aW9uIHRvIGhlYWRlcnMgYW5kIEtjb25maWcgZmlsZXMgdG8gZ2V0IGEgcHJlbGltaW5hcnkgZGVwZW5kZW5jeSBtYXAuCgpCZXlvbmQgdGhlIGRpcmVjdCBrZXJuZWwgbW9kdWxlcywgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIFdoYXQga2VybmVsIHZlcnNpb25zIGlzIHRoaXMgZHJpdmVyIGtub3duIHRvIHN1cHBvcnQ/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBzZXQgdG8gZW5hYmxlIGl0PyBJIHNob3VsZCBjaGVjayB0aGUgbWFrZWZpbGVzIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IG9idmlvdXMuIEl0JiMzOTtzIGFsc28gaW1wb3J0YW50IHRvIHRoaW5rIGFib3V0IHRoZSB1c2VyLXNwYWNlIHRvb2xzIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgZHJpdmVyIHRocm91Z2ggYG5sODAyMTFgIG9yIG90aGVyIGludGVyZmFjZXMuIFRob3NlIGluZGlyZWN0IGRlcGVuZGVuY2llcyBhcmUgY3JpdGljYWwuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIGhvdyB0aGlzIHRoaW5nIGZpdHMgaW50byB0aGUgc3lzdGVtLiBJdCYjMzk7cyBub3QganVzdCBhYm91dCBsaXN0aW5nIG1vZHVsZXM7IGl0JiMzOTtzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgZXhjaGFuZ2UsIGFuZCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIGNvbmZsaWN0LiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIG1hcCBvdXQgdGhpcyBsYW5kc2NhcGUgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxOTpcdGNvbmZpZyBNVDc5MjVVXG4gIDIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc5MjVVIChVU0IpIHN1cHBvcnRcJiMzNDtcbiAgMjE6XHRcdHNlbGVjdCBNVDc5MnhfVVNCXG4gIDIyOlx0XHRzZWxlY3QgTVQ3OTI1X0NPTU1PTlxuICAyMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAyNDpcdFx0ZGVwZW5kcyBvbiBVU0JcbiAgMjU6XHRcdGhlbHBcbiAgMjY6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzkyNS1iYXNlZCB3aXJlbGVzcyBVU0IgZGV2aWNlcyxcbiAgMjc6XHRcdCAgd2hpY2ggc3VwcG9ydCBvcGVyYXRpb24gYXQgNkdIeiwgNUdIeiwgYW5kIDIuNEdIeiBJRUVFIDgwMi4xMWJlXG4gIDI4Olx0XHQgIDJ4MjoyU1MgNDA5Ni1RQU0sIDE2ME1IeiBjaGFubmVscy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTY0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVQ3OTI1VSBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhlIGBNVDc5MjVVYCBkcml2ZXIsIHdoaWNoIEkga25vdyBwcmV0dHkgd2VsbCwgaXMgYnVpbHQgb24gdG9wIG9mIGBNQUM4MDIxMWAgYW5kIHJlbGllcyBvbiB0aGUgYFVTQmAgc3Vic3lzdGVtLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB0aGUgY29tbW9uIGFyY2hpdGVjdHVyZSBmb3IgVVNCLWJhc2VkIHdpcmVsZXNzIGRldmljZXMuIEkgYWxzbyBzZWUgdGhhdCBgTVQ3OTI1X0NPTU1PTmAgaXMgc2VsZWN0ZWQsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIGEgc2xpZ2h0IHBhdXNlLi4uIEkmIzM5O20ganVzdCBxdWlja2x5IGNvbmZpcm1pbmcgaWYgYE1UNzkyNVVgIGRpcmVjdGx5IGRlcGVuZHMgb24gYE1UNzZfVVNCYCwgb3IgaWYgaXQmIzM5O3Mgc2VsZWN0ZWQgaW1wbGljaXRseSB2aWEgc29tZXRoaW5nIGVsc2UuIE15IGludHVpdGlvbiBpcyB0aGF0IGBNVDc5MnhfVVNCYCBwcm9iYWJseSBoYW5kbGVzIHRoZSBzZWxlY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MngvS2NvbmZpZ2AgZGlyZWN0b3J5IG9yIGEgc2ltaWxhcmx5IHN0cnVjdHVyZWQgbG9jYXRpb24gZm9yIHRoZSBkZXBlbmRlbmNpZXMuIEdvdHRhIGJlIHN1cmUgYWJvdXQgdGhpcyB0byBnZXQgdGhlIG1vZHVsZSBsb2FkaW5nIG9yZGVyIGNvcnJlY3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNVDc5MnhfVVNCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnPTMyPWNvbmZpZyBNVDc5MnhfTElCXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnLTM1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnOjM2OmNvbmZpZyBNVDc5MnhfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctMzctXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDU5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gY2hlY2tpbmcgdGhlIGBNVDc5MnhfVVNCYCBkZXBlbmRlbmNpZXMsIHByZXNlbnRlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgYE1UNzkyeF9VU0JgIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBgTVQ3OTJ4X1VTQmAgbW9kdWxlIHJlbGllcyBvbi4gQmVmb3JlIEkgZXZlbiBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIHR5cGljYWwgYXJlYXM6CgoqICAgKipVbmRlcmx5aW5nIEhhcmR3YXJlOioqIEZpcnN0IGFuZCBmb3JlbW9zdCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgdGhpcyBpcyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aC4gRG9lcyBpdCBhc3N1bWUgYSBwYXJ0aWN1bGFyIFVTQiBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24/IFdoYXQgYWJvdXQgdGhlIG92ZXJhbGwgc3lzdGVtLW9uLWEtY2hpcCAoU29DKSBhcmNoaXRlY3R1cmU/IEFueSBzcGVjaWFsaXplZCByZWdpc3RlcnMgb3IgbWVtb3J5IG1hcHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGhhcmR3YXJlIGNvbmZsaWN0cyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zLgoKKiAgICoqVVNCIFN0YWNrIEludGVncmF0aW9uOioqIE5vdywgaXQmIzM5O3MgYWJvdXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGhvc3QgVVNCIHN0YWNrLiBJcyBpdCB1c2luZyBhIHN0YW5kYXJkIFVTQiBjbGFzcyBkcml2ZXIsIG9yIGlzIHRoaXMgYSBjdXN0b20gaW1wbGVtZW50YXRpb24/IEFyZSB0aGVyZSBzcGVjaWZpYyBVU0IgdHJhbnNmZXIgdHlwZXMgKGJ1bGssIGludGVycnVwdCwgY29udHJvbCwgaXNvY2hyb25vdXMpIGl0JiMzOTtzIGxldmVyYWdpbmcsIGFuZCB0aGVyZWZvcmUgZGVwZW5kZW50IG9uIHRoZSBjb3JyZXNwb25kaW5nIHN0YWNrIGNhcGFiaWxpdGllcz8gSSBuZWVkIHRvIGtub3cgaG93IGRlZXBseSBpbnRlZ3JhdGVkIGl0IGlzIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0uCgoqICAgKipLZXJuZWwgRGVwZW5kZW5jaWVzOioqIFdoYXQga2VybmVsIG1vZHVsZXMgZG9lcyBgTVQ3OTJ4X1VTQmAgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGNvcmUga2VybmVsIGludGVyZmFjZXMgaXQmIzM5O3MgdXNpbmcgKGxpa2UgRE1BIGVuZ2luZXMsIGludGVycnVwdCBoYW5kbGluZyBtZWNoYW5pc21zLCBvciBzcGVjaWZpYyBkZXZpY2UgdHJlZSBiaW5kaW5ncyk/IEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhvc2UgbW9kdWxlcyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBsb2FkZWQgYW5kIGNvbmZpZ3VyZWQsIGFuZCBsb29rIGZvciBhbnkgdmVyc2lvbmluZyBkZXBlbmRlbmNpZXMuCgoqICAgKipGaXJtd2FyZS9Db25maWd1cmF0aW9uIEZpbGVzOioqIE9mdGVuLCB0aGVzZSB0eXBlcyBvZiBkcml2ZXJzIHJlbHkgb24gZmlybXdhcmUgYmxvYnMgb3IgY29uZmlndXJhdGlvbiBmaWxlcy4gSSBuZWVkIHRvIGJlIHByZXBhcmVkIHRvIGlkZW50aWZ5IHRob3NlIGZpbGUgbG9jYXRpb25zIGFuZCBlbnN1cmUgdGhhdCB0aGUgYXBwcm9wcmlhdGUgdmVyc2lvbnMgYXJlIGluY2x1ZGVkLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGxvYWRpbmcgZGVwZW5kZW5jaWVzLgoKKiAgICoqQnVpbGQgU3lzdGVtOioqIEZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIHN5c3RlbSDigJMgd2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcyB0aGVyZT8gSXMgaXQgYSBzdGFuZGFyZCBgTWFrZWZpbGVgIHNldHVwLCBvciBpcyBpdCB1c2luZyBzb21ldGhpbmcgbW9yZSBjb21wbGV4IGxpa2UgYGtidWlsZGAgb3Igc29tZXRoaW5nIGVsc2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kdWxlIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHN5c3RlbSBpcyBjcml0aWNhbCB0byBiZSBzdXJlIHRoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUgcHJvcGVybHkgaW5jbHVkZWQuCgpNeSBpbW1lZGlhdGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHNvbGlkIGxpc3Qgb2YgZXZlcnl0aGluZyBgTVQ3OTJ4X1VTQmAgaXMgKnJlbGlhbnQqIHVwb24sIGJvdGggYXQgdGhlIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBsZXZlbHMuIFRoYXQgd2F5LCBJJiMzOTttIGVxdWlwcGVkIHRvIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzLCBvcHRpbWl6ZSB0aGUgbW9kdWxlJiMzOTtzIHBlcmZvcm1hbmNlLCBvciBpbnRlZ3JhdGUgaXQgd2l0aCBhIG5ldyBzeXN0ZW0gd2l0aCBjb25maWRlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzY6XHRjb25maWcgTVQ3OTJ4X1VTQlxuICAzNzpcdFx0dHJpc3RhdGVcbiAgMzg6XHRcdHNlbGVjdCBNVDc2X1VTQlxuICAzOTpcdFxuICA0MDpcdGNvbmZpZyBNVDc2X05QVVxuICA0MTpcdFx0dHJpc3RhdGVcbiAgNDI6XHRcdGRlcGVuZHMgb24gTkVUX0FJUk9IQV9OUFU9eSB8fCBNVDc2X0NPUkU9TkVUX0FJUk9IQV9OUFVcbiAgNDM6XHRcbiAgNDQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2eDAvS2NvbmZpZ1wmIzM0O1xuICA0NTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4Mi9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgdGhlIE1UNzkyNVUgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBlbmFibGluZyB0aGUgYE1UNzkyNVVgIGRyaXZlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyB3aXRoIGBNVDc5MjVVYCBhcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbmF0dXJhbGx5LiBBbG9uZ3NpZGUgdGhhdCwgSSBuZWVkIHRvIGJyaW5nIGluIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXM6IGBNQUM4MDIxMWAsIGBVU0JgLCBgV0xBTmAsIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AsIGBNVDc2X0NPUkVgLCBgTVQ3Nl9VU0JgLCBgTVQ3OTJ4X1VTQmAsIGFuZCBgTVQ3OTI1X0NPTU1PTmAuIEEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AgYW5kIGBNQUM4MDIxMWAgaXMgd2FycmFudGVkOyBnb3R0YSBiZSB0aG9yb3VnaC4KClJpZ2h0IG5vdywgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBleHBsaWNpdGx5IGluY2x1ZGluZyBgTVQ3OTI1VWAsIGBNQUM4MDIxMWAsIGBXTEFOYCwgYW5kIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AuIEhvd2V2ZXIsIEkganVzdCBjYXVnaHQgc29tZXRoaW5nIOKAkyB0aGlzIHBhdGNoIG1lbnRpb25zIGEgZGVidWdmcyBmaWxlLiBUaGF0IHRocm93cyBhIHBvdGVudGlhbCB3cmVuY2ggaW50byB0aGUgd29ya3MuIFNvLCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgZW5hYmxpbmcgYERFQlVHX0ZTYCBpcyBhIHJlcXVpcmVtZW50IG9yIGp1c3QgYW4gb3B0aW9uYWwgZmVhdHVyZS4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3Mgc2V0IHVwIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERUJVR19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2OTYKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGRlYnVnZnMuY2AqKgoKT2theSwgc28gYGRlYnVnZnMuY2Agc2VlbXMgdG8gYmUgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIFRpbWUgdG8gZGlnIGludG8gdGhlIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCB0aGUgYE1ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZmxhZ3MsIGRlZmluZXMsIG9yIG90aGVyIGZhY3RvcnMgYXJlIGRldGVybWluaW5nIHdoZXRoZXIgdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlIGdldHMgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGJ1aWxkIG9yIG5vdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBgTWFrZWZpbGVgIGhhcyB0byBzYXkuIEdvdHRhIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBjb25kaXRpb25hbCBsb2dpYyBhc3NvY2lhdGVkIHdpdGggdGhhdCBmaWxlLiBUaGlzIHNtZWxscyBsaWtlIGEgZmVhdHVyZSBmbGFnIG9yIGEgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYXQgcGxheS4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0XG4gICAzOlx0b2JqLSQoQ09ORklHX01UNzkyNV9DT01NT04pICYjNDM7PSBtdDc5MjUtY29tbW9uLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfTVQ3OTI1RSkgJiM0Mzs9IG10NzkyNWUub1xuICAgNTpcdG9iai0kKENPTkZJR19NVDc5MjVVKSAmIzQzOz0gbXQ3OTI1dS5vXG4gICA2Olx0XG4gICA3Olx0bXQ3OTI1LWNvbW1vbi15IDo9IG1hYy5vIG1jdS5vIHJlZ2QubyBtYWluLm8gaW5pdC5vIGRlYnVnZnMubyBuYW4ub1xuICAgODpcdG10NzkyNS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgJiM0Mzs9IHRlc3Rtb2RlLm9cbiAgIDk6XHRtdDc5MjVlLXkgOj0gcGNpLm8gcGNpX21hYy5vIHBjaV9tY3Uub1xuICAxMDpcdG10NzkyNXUteSA6PSB1c2Iub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgZm9yIFNlbGVjdGluZyB0aGUgUmVsZXZhbnQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gYGRlYnVnZnMub2AgaXMgYWx3YXlzIGNvbXBpbGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gIEkgc2VlIHRoYXQgYGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZWAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmhgLiAgSW1wb3J0YW50IHBvaW50OiB0aGlzIGlzIGEgbm8tb3AgaWYgYERFQlVHX0ZTYCBpc24mIzM5O3QgZW5hYmxlZC4gU28sIHRvIGFjdHVhbGx5IHRlc3QgdGhpcywgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgREVCVUdfRlNgIGlzIHNldC4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IG9uZXM/IEkmIzM5O3ZlIGdvdCBgbXQ3OTI1X2NvZXhfaW5mb2AgYW5kIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBoaWdobGlnaHRlZC4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayBpZiB0aGVzZSBhcmUgc3RhdGljLiBgbXQ3OTI1X2NvZXhfaW5mb2AgKmlzKiBzdGF0aWMuIEJ1dCwgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyB1c2VkIGFzIGEgY2FsbGJhY2sgdG8gYGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZWAuICBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgaXMgbm9uLXN0YXRpYy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byBjb25maXJtIHRoaXMuCgpZZXMsIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpcyBkZWZpbmVkIGluIGBtY3UuY2AgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLgoKTm93LCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gQWx0aG91Z2ggYG10NzkyNV9jb2V4X2luZm9gIGlzIHN0YXRpYywgaXQgKmlzKiBhbiBBUEkgZW50cnkgcG9pbnQgKGZvciBkZWJ1Z2ZzIHJlYWQpLCBzbyBpdCBnZXRzIGFuIGFkZHJlc3MuIEJ1dCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMsIGl0ICptaWdodCogYmUgaW5saW5lZC4gQnV0IHNpbmNlIGl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZWAsIGl0IGNhbm5vdCBiZSBpbmxpbmVkLiBJdCBnZXRzIGEgZGlzdGluY3Qgc3ltYm9sLiAgU3RpbGwsIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBsb29rcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIEkmIzM5O20gYWZ0ZXIsIGFuZCBpdCYjMzk7cyBub24tc3RhdGljLgoKT2theSwgbGV0JiMzOTtzIGNoZWNrIGlmIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpcyBleHBvcnRlZC4gTm9wZSwgaXQmIzM5O3Mgbm90IGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBtYXR0ZXIsIHNpbmNlIGl0JiMzOTtzIG5vbi1zdGF0aWMuIFNvIEkmIzM5O2xsIGRlZmluaXRlbHkgbGlzdCBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgYW5kIGFsc28gaW5jbHVkZSBgbXQ3OTI1X2NvZXhfaW5mb2Agc2luY2UgdGhlIGRlYnVnZnMgcmVhZCBnb2VzIHRocm91Z2ggaXQuCgpPbmUgbGFzdCB0aG91Z2h0OiB0aGUgcHJvbXB0IG1lbnRpb25zIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJcyBgbXQ3OTI1YCBhY2Nlc3NpYmxlPyBZZXMsIEkgY2FuIHJlYWNoIGl0IHRocm91Z2ggYHVzYiBnYWRnZXRgIHZpYSBgc3l6X3VzYl9jb25uZWN0YC4KClNvLCB0aGUga2V5IGNvbmZpZ3MgZm9yIG15IHRlc3RpbmcgYXJlOiBgTVQ3OTI1VWAsIGBNQUM4MDIxMWAsIGBXTEFOYCwgYFdMQU5fVkVORE9SX01FRElBVEVLYCwgYW5kLCBjcml0aWNhbGx5LCBgREVCVUdfRlNgLiBJIG5lZWQgdG8gZW5zdXJlIHRob3NlIGFyZSBhbGwgc2V0LiBBbmQgbm93LCBJJiMzOTtsbCBjaGVjayB0byBzZWUgaWYgYFdMQU5fVkVORE9SX01FRElBVEVLYCBoYXMgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgV0xBTl9WRU5ET1JfTUVESUFURUsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWc6Mjpjb25maWcgV0xBTl9WRU5ET1JfTUVESUFURUtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TWVkaWFUZWsgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc3OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE1lZGlhdGVrIFdpcmVsZXNzIERyaXZlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWdgIGZpbGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSB3YW50IHRvIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgdGhlIGtleXN0b25lIHRvIHRoZSBNZWRpYXRlayB3aXJlbGVzcyBkcml2ZXImIzM5O3MgY29uZmlndXJhdGlvbiwgc28gdW5kZXJzdGFuZGluZyB3aGF0IGtleXMgdHJpZ2dlciBpdHMgaW5jbHVzaW9uIChvciBleGNsdXNpb24pIGlzIGNydWNpYWwuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgcmVsZXZhbnQgYnVpbGQgb3B0aW9ucywgdGhlIGNvbmRpdGlvbnMgd2hpY2ggZW5hYmxlIHRoZW0gYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBzeXN0ZW0gY29uZmlndXJhdGlvbi4gQmFzaWNhbGx5LCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZmVhdHVyZXMgbmVlZCB0byBiZSBhY3RpdmUgZm9yIHRoZXNlIE1lZGlhdGVrIHdpcmVsZXNzIGRyaXZlcnMgdG8gZXZlbiBiZSBjb25zaWRlcmVkPyBJIGV4cGVjdCB0aGVyZSB0byBiZSBkZXBlbmRlbmNpZXMgb24gcGxhdGZvcm0gc3VwcG9ydCwgc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zLCBhbmQgcG90ZW50aWFsbHkgb24gb3RoZXIgd2lyZWxlc3MgcmVsYXRlZCBzdWItc3lzdGVtcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJIG5lZWQgdG8gc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZXNlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFdMQU5fVkVORE9SX01FRElBVEVLXG4gICAzOlx0XHRib29sIFwmIzM0O01lZGlhVGVrIGRldmljZXNcJiMzNDtcbiAgIDQ6XHRcdGRlZmF1bHQgeVxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBJZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAgNzpcdFxuICAgODpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgIDk6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcbiAgMTA6XHRcdCAgcXVlc3Rpb25zIGFib3V0IHRoZXNlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE5MAoJCQkJCQkJb3V0cHV0OiAxNjEKCQkJCQkJCXRob3VnaHRzOiA4NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1UNzkyNVUgTUNVIENvbW1hbmQgUmVzcG9uc2UgUGFyc2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBhdHRhY2sgc3VyZmFjZSB0byBmdXp6LiBMZXQmIzM5O3Mgc2VlLi4uIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AgaXMgc2V0IHRvICYjMzk7eSYjMzk7IGJ5IGRlZmF1bHQsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBidXQgbm90IHRoZSBmb2N1cyBoZXJlLiBUaGUgY3J1eCBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBgTVQ3OTI1VWAgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IGRlcGVuZHMgb24gYE1BQzgwMjExYCwgYFVTQmAsIGFuZCwgY3J1Y2lhbGx5IGZvciBkZWJ1ZyBhbmQgZnV6emluZywgYERFQlVHX0ZTYC4KCkkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0sIHJpZ2h0LCBgTVQ3OTI1VWAsIGBNQUM4MDIxMWAsIGBVU0JgLCBhbmQgYERFQlVHX0ZTYCBhcmUgdGhlIGNvbmZpZ3MgSSYjMzk7bGwgYmUgZW5hYmxpbmcuIEFuZCBgTVQ3OTI1X0NPTU1PTmAgaXMgc2VsZWN0ZWQgYnkgYE1UNzkyNVVgLCBubyBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIHRoYXQuCgpOb3csIHRoZSBqdWljeSBiaXQ6IGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpbiBgbWN1LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCYjMzk7cyBwYXJzaW5nIHRoZSByZXNwb25zZSBmcm9tIHRoZSBNQ1UuIFRoZSByZXNwb25zZSwgdmlhIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnYCwgaXMgYmFzaWNhbGx5IGEgVVNCIFVSQiBmcm9tIHRoZSBzeXprYWxsZXIgVVNCIGZ1enplci4gQW5kIHRoYXQgcmVzcG9uc2UgZ2V0cyBwYXJzZWQgYXMgYSBUTFYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcGFyc2luZyBsb2dpYywgdGhvcm91Z2hseS4KCkkmIzM5O20gc2VlaW5nIGEgYHdoaWxlYCBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgVExWcy4gSXQmIzM5O3MgZG9pbmcgc29tZSBsZW5ndGggY2hlY2tzOiBgdGx2X2xlbmAgYWdhaW5zdCBgc2l6ZW9mKCp0bHYpYCBhbmQgYHNrYi0mZ3Q7bGVuYC4gVGhlbiwgaXQgY2hlY2tzIHRoZSBgdGx2LSZndDt0YWdgLiBJZiBpdCYjMzk7cyB0aGUgcmlnaHQgdGFnIChgVU5JX0NISVBfQ09ORklHX0NISVBfQ0ZHYCksIGl0IGdldHMgZXZlbiBtb3JlIGNvbXBsaWNhdGVkLiBJdCBleHRyYWN0cyBgY2ZnLSZndDtkYXRhX3NpemVgLCBjb21wYXJlcyB0aGF0IHRvIGB0bHZfbGVuIC0gaGRyX2xlbmAgd2hpY2ggc2VlbXMgcmVhc29uYWJsZS4gIFRoZW4sIGl0JiMzOTtzIGNvcHlpbmcgZGF0YSBpbnRvIHRoZSBgcmVzcGAgYnVmZmVyIHVzaW5nIGBtZW1jcHlgLiAgYHNrYl9wdWxsYCBpcyB1c2VkIGZvciBhZHZhbmNpbmcgdGhlIGJ1ZmZlciwgYnV0IHRoZSBjaGVja3MgYmVmb3JlIGl0IG1ha2UgaXQgc2FmZSAtIHRoYXQmIzM5O3MgZ29vZC4KCk9rYXksIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gVGhpcyAqVExWKiBwYXJzaW5nLCBlc3BlY2lhbGx5IHRob3NlIGxlbmd0aCBhbmQgc2l6ZSBjaGVja3MsIHRoaXMgaXMgcHJpbWUgZnV6emluZyBtYXRlcmlhbC4gSXQgaGFzIGFsbCB0aGUgaGFsbG1hcmtzIG9mIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5OiB1bnRydXN0ZWQgZGF0YSBjb21pbmcgaW4sIHNvbWUgKGhvcGVmdWxseSByb2J1c3QpIHBhcnNpbmcgYW5kIGRhdGEgbWFuaXB1bGF0aW9uLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBmdXp6ZXJzIGFyZSAqZGVzaWduZWQqIHRvIGJyZWFrISBUaGUgY29kZSBzZWVtcyByZWxhdGl2ZWx5IGNhcmVmdWwsIGJ1dCB0aGUgY29tcGxleGl0eSBtYWtlcyBpdCBhIGhpZ2ggdmFsdWUgdGFyZ2V0LgoKU28sIHRvIHN1bW1hcml6ZSB3aGF0IEkgaGF2ZSBoZXJlOgoKKiAgICoqV29ydGhGdXp6aW5nKio6IEFic29sdXRlbHkuIFRoaXMgbmVlZHMgZnV6emluZy4KKiAgICoqRm9jdXNTeW1ib2xzKio6IGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCwgYW5kIEkgc2hvdWxkIGFsc28gYWRkIGBtdDc5MjVfY29leF9pbmZvYCBhcyB3ZWxsIHNpbmNlIGl0IGludGVyYWN0cyB3aXRoIHRoZSBNQ1UuCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYE1UNzkyNVVgLCBgTUFDODAyMTFgLCBgVVNCYCwgYERFQlVHX0ZTYCDigJMgdGhlc2UgYXJlIG15IGJhc2Ugc2V0dXAuCiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGFkZHMgYSBkZWJ1Z2ZzIGludGVyZmFjZSB0aGF0IHRyaWdnZXJzIGFuIE1DVSBjb21tYW5kLiBUaGUgY29yZSB2dWxuZXJhYmlsaXR5IGlzIHJlc3BvbnNlIHBhcnNpbmcgLSB3aGljaCBpcyB1bnRydXN0ZWQgZGF0YSBmcm9tIHRoZSBoYXJkd2FyZSAod2hpY2ggY2FuIGJlIGVtdWxhdGVkIHZpYSBVU0IgZ2FkZ2V0IGluIHN5emthbGxlcikgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBmdXp6IHRoZSByb2J1c3RuZXNzIGFnYWluc3QgbWFsZm9ybWVkIFRMVnMuIFRoZSBrZXkgaGVyZSBpcyB0byBmaW5kIG91dCBpZiB0aGUgTUNVIGhhcyB0aGUgc2FtZSBjaGVja3MgdGhhdCB0aGUgZHJpdmVyIGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc5MjVVJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O210NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkmIzM0OywKICAgICYjMzQ7bXQ3OTI1X2NvZXhfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZGVidWdmcyBpbnRlcmZhY2UgdGhhdCB0cmlnZ2VycyBhbiBNQ1UgY29tbWFuZCBhbmQgcGFyc2VzIHRoZSByZXNwb25zZS4gVGhlIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgaW4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIHByb2Nlc3NlcyB1bnRydXN0ZWQgZGF0YSBmcm9tIHRoZSBoYXJkd2FyZSAod2hpY2ggY2FuIGJlIGVtdWxhdGVkIHZpYSBVU0IgZ2FkZ2V0IGluIHN5emthbGxlcikgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJvYnVzdG5lc3MgYWdhaW5zdCBtYWxmb3JtZWQgVExWcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVQ3OTI1VSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5JiMzNDssCiAgICAmIzM0O210NzkyNV9jb2V4X2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGRlYnVnZnMgaW50ZXJmYWNlIHRoYXQgdHJpZ2dlcnMgYW4gTUNVIGNvbW1hbmQgYW5kIHBhcnNlcyB0aGUgcmVzcG9uc2UuIFRoZSByZXNwb25zZSBwYXJzaW5nIGxvZ2ljIGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBwcm9jZXNzZXMgdW50cnVzdGVkIGRhdGEgZnJvbSB0aGUgaGFyZHdhcmUgKHdoaWNoIGNhbiBiZSBlbXVsYXRlZCB2aWEgVVNCIGdhZGdldCBpbiBzeXprYWxsZXIpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSByb2J1c3RuZXNzIGFnYWluc3QgbWFsZm9ybWVkIFRMVnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGVudHJ5IGBjb2V4X2luZm9gIGFuZCBhIGZ1bmN0aW9uIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCB0byBxdWVyeSB0aGUgTUNVLiBUaGUgbG9jYWwgYHJlcWAgc3RydWN0dXJlIHVzZWQgdG8gc2VuZCB0aGUgcXVlcnkgaXMgcGFydGlhbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJ1Y3QgaW5pdGlhbGl6ZXIsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgY29tcGlsZXIgemVyby1pbml0aWFsaXplcyBhbGwgcmVtYWluaW5nIGZpZWxkcyBhbmQgcGFkZGluZy4gVGhlIGByZXNwYCBidWZmZXIgYW5kIGByZXNwX3R5cGVgIHZhcmlhYmxlIGFyZSBwb3B1bGF0ZWQgYnkgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBUaGUgZnVuY3Rpb24gY29ycmVjdGx5IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgaW50byBgcmVzcGAsIGFuZCB0aGUgY2FsbGVyIGBtdDc5MjVfY29leF9pbmZvYCBvbmx5IHJlYWRzIGV4YWN0bHkgdGhhdCBtYW55IGJ5dGVzLiBgcmVzcF90eXBlYCBpcyBhbHNvIG9ubHkgYWNjZXNzZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvc2l0aXZlIGxlbmd0aCwgbWVhbmluZyBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LCBzZW50IHRvIHRoZSBkZXZpY2UsIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb25zLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNDgyYTg5YTVkZTFlMWYxM2I1YzliNmZhZjcxZWY2MDViZWZjZGM2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMDI6MjI6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMKaW5kZXggZDAxZmY0OWRlNDdhZi4uOWE1ZWExMmI3NmM3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuYwpAQCAtMjg2LDYgJiM0MzsyODYsMzQgQEAgc3RhdGljIGludCBtdDc5MjVfY2hpcF9yZXNldCh2b2lkICpkYXRhLCB1NjQgdmFsKQogCiBERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoZm9wc19yZXNldCwgTlVMTCwgbXQ3OTI1X2NoaXBfcmVzZXQsICYjMzQ7JWxsZFxuJiMzNDspOwogCiYjNDM7c3RhdGljIGludAomIzQzO210NzkyNV9jb2V4X2luZm8oc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsjZGVmaW5lIE1UNzkyNV9DSElQX0NPTkZJR19SRVNQX1NJWkUJMzIwCiYjNDM7CXN0cnVjdCBtdDc5MnhfZGV2ICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocy0mZ3Q7cHJpdmF0ZSk7CiYjNDM7CXU4IHJlc3BbTVQ3OTI1X0NISVBfQ09ORklHX1JFU1BfU0laRV0sIHJlc3BfdHlwZTsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJbXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTsKJiM0MzsJcmV0ID0gbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShkZXYsICYjMzQ7Y29leEJ3Y0dldE1vZGVJbmZvIDAmIzM0OywKJiM0MzsJCQkJCSAgICZhbXA7cmVzcF90eXBlLCByZXNwLCBzaXplb2YocmVzcCkpOwomIzQzOwltdDc5MnhfbXV0ZXhfcmVsZWFzZShkZXYpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJc2VxX3B1dHMocywgJiMzNDtubyByZXBseVxuJiMzNDspOwomIzQzOwllbHNlIGlmIChyZXNwX3R5cGUgPT0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSkKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDslLipzXG4mIzM0OywgcmV0LCByZXNwKTsKJiM0MzsJZWxzZQomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHJldDsgaSAmIzQzOz0gMTYpCiYjNDM7CQkJc2VxX3ByaW50ZihzLCAmIzM0OyUwNHg6ICUqcGhcbiYjMzQ7LCBpLAomIzQzOwkJCQkgICBtaW5fdChpbnQsIDE2LCByZXQgLSBpKSwgcmVzcCAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IG10NzkyNV9pbml0X2RlYnVnZnMoc3RydWN0IG10NzkyeF9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkaXI7CkBAIC0zMDksNiAmIzQzOzMzNyw4IEBAIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpCiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O2lkbGUtdGltZW91dCYjMzQ7LCAwNjAwLCBkaXIsIGRldiwKIAkJCSAgICAmYW1wO2ZvcHNfcG1faWRsZV90aW1lb3V0KTsKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7Y2hpcF9yZXNldCYjMzQ7LCAwNjAwLCBkaXIsIGRldiwgJmFtcDtmb3BzX3Jlc2V0KTsKJiM0MzsJZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi0mZ3Q7bXQ3Ni5kZXYsICYjMzQ7Y29leF9pbmZvJiMzNDssIGRpciwKJiM0MzsJCQkJICAgIG10NzkyNV9jb2V4X2luZm8pOwogCWRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtJmd0O210NzYuZGV2LCAmIzM0O3J1bnRpbWVfcG1fc3RhdHMmIzM0OywgZGlyLAogCQkJCSAgICBtdDc5MnhfcG1fc3RhdHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtkZWVwLXNsZWVwJiMzNDssIDA2MDAsIGRpciwgZGV2LCAmYW1wO2ZvcHNfZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYwppbmRleCBmYTI5YzQ4NmE0NTUzLi5lNjMxNmNlYTE4NjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYwpAQCAtMTE2MCw2ICYjNDM7MTE2MCw4MSBAQCBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpCiAJCQkJICZhbXA7cmVxLCBzaXplb2YocmVxKSwgZmFsc2UpOwogfQogCiYjNDM7aW50IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kLAomIzQzOwkJCQkgdTggKnJlc3BfdHlwZSwgdm9pZCAqcmVzcCwgdTE2IHJlc3Bfc2l6ZSkKJiM0Mzt7CiYjNDM7CXUxNiBsZW4gPSBzdHJsZW4oY21kKTsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXU4IF9yc3ZbNF07CiYjNDM7CQlfX2xlMTYgdGFnOwomIzQzOwkJX19sZTE2IGxlbjsKJiM0MzsJCXN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgY29uZmlnOwomIzQzOwl9IF9fcGFja2VkIHJlcSA9IHsKJiM0MzsJCS50YWcgPSBjcHVfdG9fbGUxNihVTklfQ0hJUF9DT05GSUdfQ0hJUF9DRkcpLAomIzQzOwkJLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihyZXEpIC0gNCksCiYjNDM7CQkuY29uZmlnID0gewomIzQzOwkJCS5yZXNwX3R5cGUgPSAwLAomIzQzOwkJCS50eXBlID0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSwKJiM0MzsJCQkuZGF0YV9zaXplID0gY3B1X3RvX2xlMTYobGVuKSwKJiM0MzsJCX0sCiYjNDM7CX07CiYjNDM7CWNvbnN0IHUxNiBoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB0bHYpICYjNDM7CiYjNDM7CQkJICAgIG9mZnNldG9mKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcsIGRhdGEpOwomIzQzOwlzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICpjZmc7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghbGVuIHx8IGxlbiAmZ3Q7PSBzaXplb2YocmVxLmNvbmZpZy5kYXRhKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltZW1jcHkocmVxLmNvbmZpZy5kYXRhLCBjbWQsIGxlbik7CiYjNDM7CiYjNDM7CXJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coJmFtcDtkZXYtJmd0O210NzYsIE1DVV9VTklfUVVFUlkoQ0hJUF9DT05GSUcpLAomIzQzOwkJCQkJJmFtcDtyZXEsIHNpemVvZihyZXEpLCB0cnVlLCAmYW1wO3NrYik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBza2lwIHRoZSBmaXhlZCBmaWVsZCBvZiB0aGUgZXZlbnQsIHRoZSBUTFZzIGZvbGxvdyBpdCAqLwomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0OyA0KSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJc2tiX3B1bGwoc2tiLCA0KTsKJiM0MzsKJiM0MzsJcmV0ID0gLUVOT0VOVDsKJiM0MzsJd2hpbGUgKHNrYi0mZ3Q7bGVuICZndDs9IHNpemVvZihzdHJ1Y3QgdGx2KSkgewomIzQzOwkJc3RydWN0IHRsdiAqdGx2ID0gKHN0cnVjdCB0bHYgKilza2ItJmd0O2RhdGE7CiYjNDM7CQl1MTYgdGx2X2xlbiA9IGxlMTZfdG9fY3B1KHRsdi0mZ3Q7bGVuKTsKJiM0MzsJCXUxNiBkYXRhX3NpemU7CiYjNDM7CiYjNDM7CQlpZiAodGx2X2xlbiAmbHQ7IHNpemVvZigqdGx2KSB8fCB0bHZfbGVuICZndDsgc2tiLSZndDtsZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAobGUxNl90b19jcHUodGx2LSZndDt0YWcpICE9IFVOSV9DSElQX0NPTkZJR19DSElQX0NGRykgewomIzQzOwkJCXNrYl9wdWxsKHNrYiwgdGx2X2xlbik7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAodGx2X2xlbiAmbHQ7IGhkcl9sZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQljZmcgPSAoc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqKXRsdi0mZ3Q7ZGF0YTsKJiM0MzsJCWRhdGFfc2l6ZSA9IGxlMTZfdG9fY3B1KGNmZy0mZ3Q7ZGF0YV9zaXplKTsKJiM0MzsJCWlmIChkYXRhX3NpemUgJmd0OyB0bHZfbGVuIC0gaGRyX2xlbikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCSpyZXNwX3R5cGUgPSBjZmctJmd0O3Jlc3BfdHlwZTsKJiM0MzsJCXJldCA9IG1pbl90KHUxNiwgZGF0YV9zaXplLCByZXNwX3NpemUpOwomIzQzOwkJbWVtY3B5KHJlc3AsIGNmZy0mZ3Q7ZGF0YSwgcmV0KTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlkZXZfa2ZyZWVfc2tiKHNrYik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogaW50IG10NzkyNV9tY3Vfc2V0X2RlZXBfc2xlZXAoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgYm9vbCBlbmFibGUpCiB7CiAJY2hhciBjbWRbMTZdOwpAQCAtMzc3Miw3ICYjNDM7Mzg0Nyw4IEBAIGludCBtdDc5MjVfbWN1X2ZpbGxfbWVzc2FnZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQl1bmlfdHhkLSZndDtvcHRpb24gPSBNQ1VfQ01EX1VOSV9FWFRfQUNLOwogCiAJCWlmIChjbWQgPT0gTUNVX1VOSV9DTUQoSElGX0NUUkwpIHx8Ci0JCSAgICBjbWQgPT0gTUNVX1VOSV9DTUQoQ0hJUF9DT05GSUcpKQomIzQzOwkJICAgIGNtZCA9PSBNQ1VfVU5JX0NNRChDSElQX0NPTkZJRykgfHwKJiM0MzsJCSAgICBjbWQgPT0gTUNVX1VOSV9RVUVSWShDSElQX0NPTkZJRykpCiAJCQl1bmlfdHhkLSZndDtvcHRpb24gJmFtcDs9IH5NQ1VfQ01EX0FDSzsKIAogCQlpZiAobWN1X2NtZCA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oCmluZGV4IDExZjllYWMxM2ZmYzYuLjJjZjM5NzFkOTg1M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oCkBAIC0xMTksNiAmIzQzOzExOSwxNSBAQCBlbnVtIHsKIAlVTklfQ0hJUF9DT05GSUdfTklDX0NBUEEgPSAweDMsCiB9OwogCiYjNDM7LyogdHlwZS9yZXNwX3R5cGUgb2Ygc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqLwomIzQzO2VudW0gewomIzQzOwlDSElQX0NPTkZJR19UWVBFX1dPX1JFU1BPTlNFLAomIzQzOwlDSElQX0NPTkZJR19UWVBFX01FTTgsCiYjNDM7CUNISVBfQ09ORklHX1RZUEVfTUVNMzIsCiYjNDM7CUNISVBfQ09ORklHX1RZUEVfQVNDSUksCiYjNDM7CUNISVBfQ09ORklHX1RZUEVfQklOQVJZLAomIzQzO307CiYjNDM7CiBlbnVtIHsKIAlVTklfQkFORF9DT05GSUdfUkFESU9fRU5BQkxFLAogCVVOSV9CQU5EX0NPTkZJR19SVFNfVEhSRVNIT0xEID0gMHgwOCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmgKaW5kZXggMzIxZTczMjM0N2YyZi4uZDBkYjVkOGRhZTQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmgKQEAgLTI5NSw2ICYjNDM7Mjk1LDggQEAgaW50IG10NzkyNV9tY3VfZ2V0X3J4X3JhdGUoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIGludCBtdDc5MjVfbWN1X2Z3X2xvZ18yX2hvc3Qoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggY3RybCk7CiB2b2lkIG10NzkyNV9tY3VfcnhfZXZlbnQoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpOwomIzQzO2ludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCwKJiM0MzsJCQkJIHU4ICpyZXNwX3R5cGUsIHZvaWQgKnJlc3AsIHUxNiByZXNwX3NpemUpOwogaW50IG10NzkyNV9tY3Vfc2V0X3J4ZmlsdGVyKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHUzMiBmaWYsCiAJCQkgICAgdTggYml0X29wLCB1MzIgYml0X21hcCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2V4aXN0ZW5jZSBJbmZvcm1hdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBgZGVidWdmc2AgZmlsZSwgYGNvZXhfaW5mb2AsIHdpdGhpbiB0aGUgbXQ3OTI1IHdpcmVsZXNzIGRyaXZlci4gVGhlIHB1cnBvc2Ugc2VlbXMgdG8gYmUgcHJvdmlkaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIE1DVSwgZmV0Y2hlZCB2aWEgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBMZXQmIzM5O3MgZGlnIGluLgoKVGhlIGBtdDc5MjVfY29leF9pbmZvYCBmdW5jdGlvbiBpcyB0aGUgY29yZSBvZiB0aGlzLiBJdCBncmFicyBhIGBtdDc5MnhfZGV2YCBzdHJ1Y3QsIGNhbGxzIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCwgYW5kIHRoZW4gZGlzcGxheXMgdGhlIHJlc3VsdCwgaGFuZGxpbmcgQVNDSUkgb3IgcmF3IGJ5dGVzIGRlcGVuZGluZyBvbiBgcmVzcF90eXBlYC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGJ1ZmZlciBgcmVzcGAsIGEgMzIwLWJ5dGUgc3RhY2sgYWxsb2NhdGlvbi4gSXQmIzM5O3MgdW5pbml0aWFsaXplZCwgd2hpY2ggaXMgaW1tZWRpYXRlbHkgYSBwb2ludCBvZiBjb25jZXJuIGZvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGRlcGVuZGluZyBvbiBob3cgdGhlIHJlc3BvbnNlIGlzIGhhbmRsZWQgYW5kIGhvdyBpdCBpcyBsYXRlciBhY2Nlc3NlZC4KCmBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpcyB3aGF0IGZlZWRzIHRoaXMgYnVmZmVyLiBJdCBjb25zdHJ1Y3RzIGEgcmVxdWVzdCBhbmQgc2VuZHMgaXQgdG8gdGhlIE1DVS4gTm93LCB0aGlzIGByZXFgIHN0cnVjdCBoYXMgY2F1Z2h0IG15IGV5ZS4gSXQmIzM5O3MgaW5pdGlhbGl6ZWQgd2l0aCBhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIgbGlzdCAoYD0geyAuLi4gfWApLiBUaGUgYF9yc3ZbNF1gIG1lbWJlciwgYW4gdW5uYW1lZCBhcnJheSBvZiA0IGJ5dGVzLCBpc24mIzM5O3QgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB0aGUgbGlzdC4gVGhpcyByYWlzZXMgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgdGhpcyBpcyBwcm9wZXJseSB6ZXJvZWQgYXMgZXhwZWN0ZWQuIFNpbmNlIHRoZXJlIGlzIHBhZGRpbmcsIGl0IG1heSBub3QgYmUuIEFsc28sIHRoZSBzdHJ1Y3QgaXMgbWFya2VkIGFzIGBfX3BhY2tlZGAuIFNvLCB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIHBhZGRpbmcsIGJ1dCBpcyB0aGF0IGhhbmRsZWQgc2FmZWx5PwoKQWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBwYXJ0aWFsIGluaXRpYWxpemF0aW9uIG9mIGEgc3RydWN0IG1lYW5zIHRoZSB1bmluaXRpYWxpemVkIG1lbWJlcnMgYXJlIHplcm9lZC4gSG93ZXZlciwgYmVjYXVzZSBgcmVxYCBpcyBgX19wYWNrZWRgIHRoaXMgbmVlZHMgZG91YmxlLWNoZWNraW5nLiBOb3csIGByZXEuY29uZmlnLmRhdGFgIGlzIGFuIGFycmF5IHRoYXQgd2lsbCBiZSBjb3BpZWQgaW50bywgYW5kIHRoZSByZXN0IGlzIHplcm9lZCBieSB0aGUgc3RydWN0IGluaXRpYWxpemVyLCBpZiBpdCYjMzk7cyBub3QgcGFja2VkLgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWdgLiBJdCBtdXN0IGJlIGRlZmluZWQgaW4gYSBoZWFkZXIsIGFuZCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGF0IHN0cnVjdHVyZS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZm9ybWF0IG9mIHRoZSByZXF1ZXN0IGFuZCByZXNwb25zZSwgc3BlY2lmaWNhbGx5IGhvdyBgZGF0YV9zaXplYCwgYHJlc3BfdHlwZWAgYW5kIGB0eXBlYCBhcmUgaGFuZGxlZCwgd2hpY2ggbWF5IGNvbnRhaW4gY3JpdGljYWwgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuYz0yMDQ3PWludCBtdDc2X2Nvbm5hY19tY3VfY2hpcF9jb25maWcoc3RydWN0IG10NzZfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5jLTIwNDgte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuYzoyMDQ5Olx0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyByZXEgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5jLTIwNTAtXHRcdC5yZXNwX3R5cGUgPSAwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmM9MjA2MD1pbnQgbXQ3Nl9jb25uYWNfbWN1X3NldF9kZWVwX3NsZWVwKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBib29sIGVuYWJsZSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmMtMjA2MS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5jOjIwNjI6XHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIHJlcSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmMtMjA2My1cdFx0LnJlc3BfdHlwZSA9IDAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaD0xODUwPXN0cnVjdCBtdDc2X2Nvbm5hY190eF9wb3dlcl9saW1pdF90bHYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgtMTg2NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1Lmg6MTg2NTpzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgtMTg2Ni1cdF9fbGUxNiBpZDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0xMTM5PWludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMTQ1LVx0XHRfX2xlMTYgbGVuO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MTE0NjpcdFx0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyBjb25maWc7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMTQ3LVx0fSBfX3BhY2tlZCByZXEgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM9MTE2Mz1pbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTE3MC1cdFx0X19sZTE2IGxlbjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjExNzE6XHRcdHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgY29uZmlnO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTE3Mi1cdH0gX19wYWNrZWQgcmVxID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTExODEtXHRjb25zdCB1MTYgaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdGx2KSAmIzQzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MTE4MjpcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZywgZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoxMTgzOlx0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqY2ZnO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTE4NC1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTIyMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjEyMjE6XHRcdGNmZyA9IChzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICopdGx2LVx1MDAzZWRhdGE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMjIyLVx0XHRkYXRhX3NpemUgPSBsZTE2X3RvX2NwdShjZmctXHUwMDNlZGF0YV9zaXplKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaD0xMTc9ZW51bSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmgtMTIxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1Lmg6MTIyOi8qIHR5cGUvcmVzcF90eXBlIG9mIHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oLTEyMy1lbnVtIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRGl2aW5nIGludG8gdGhlIE1UNzYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgTVQ3NiBDb25uYWMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIGEga2V5IHN0cnVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBmaW5kIGEgbG90IG9mIHRoZSBpbml0aWFsIHNldHVwIHBhcmFtZXRlcnMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWdgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBsb3ctZG93biBvbiBob3cgdGhlIENvbm5hYyBoYXJkd2FyZSBpcyBpbml0aWFsaXplZCBhbmQgd2hhdCBzZXR0aW5ncyBhcmUgYmVpbmcgdXNlZC4gSSBleHBlY3QgdG8gc2VlIGFsbCB0aGUgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbnMgb2YgaGFyZHdhcmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaD0xODUwPXN0cnVjdCBtdDc2X2Nvbm5hY190eF9wb3dlcl9saW1pdF90bHYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgtMTg2NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1Lmg6MTg2NTpzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgtMTg2Ni1cdF9fbGUxNiBpZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1MQoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIE1UNzYgQ29ubmVjdGlvbiBNYW5hZ2VyKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIE1lZGlhVGVrIHdpcmVsZXNzIGRyaXZlci4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaGAgLSBzcGVjaWZpY2FsbHksIGxldCYjMzk7cyB6b29tIGluIGFyb3VuZCBsaW5lIDE4NjUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBkZWZpbml0aW9ucyBvciBzdHJ1Y3R1cmVzIGluIHRoaXMgYXJlYS4gUHJvYmFibHkgcmVsYXRlZCB0byB0aGUgQ29ubmFjIE1DVSwgd2hpY2ggaGFuZGxlcyBhIGxvdCBvZiB0aGUgbG93LWxldmVsIHdpcmVsZXNzIGludGVyYWN0aW9uIG9uIHRoZXNlIGNoaXBzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgY29ubmVjdGlvbnMsIGRpc2Nvbm5lY3Rpb25zLCByb2FtaW5nLCBhbmQgbWF5YmUgZXZlbiBmaXJtd2FyZS1yZWxhdGVkIGludGVyYWN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYXdhaXQgdXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg2MDpcdFx0LyogRFczICovXG4xODYxOlx0XHR1OCBhbHBoYTJbNF07IC8qIHJlZ3VsYXRvcnlfcmVxdWVzdC5hbHBoYTIgKi9cbjE4NjI6XHRcdHU4IHBhZDJbMzJdO1xuMTg2MzpcdH0gX19wYWNrZWQ7XG4xODY0Olx0XG4xODY1Olx0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyB7XG4xODY2Olx0XHRfX2xlMTYgaWQ7XG4xODY3Olx0XHR1OCB0eXBlO1xuMTg2ODpcdFx0dTggcmVzcF90eXBlO1xuMTg2OTpcdFx0X19sZTE2IGRhdGFfc2l6ZTtcbjE4NzA6XHRcdF9fbGUxNiByZXN2O1xuMTg3MTpcdFx0dTggZGF0YVszMjBdO1xuMTg3MjpcdH0gX19wYWNrZWQ7XG4xODczOlx0XG4xODc0Olx0c3RydWN0IG10NzZfY29ubmFjX21jdV91bmlfZXZlbnQge1xuMTg3NTpcdFx0dTggY2lkO1xuMTg3NjpcdFx0dTggcGFkWzNdO1xuMTg3NzpcdFx0X19sZTMyIHN0YXR1czsgLyogMDogc3VjY2Vzcywgb3RoZXJzOiBmYWlsICovXG4xODc4Olx0fSBfX3BhY2tlZDtcbjE4Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI5MAoJCQkJCQkJb3V0cHV0OiAyMzcKCQkJCQkJCXRob3VnaHRzOiAyNzc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBhbmQgUmVsYXRlZCBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBzZW5kcyB0byB0aGUgTUNVLCBwYXJ0aWN1bGFybHkgZ2l2ZW4gdGhlIG5ldyBjb2RlIGludHJvZHVjZWQgaW4gdGhpcyBwYXRjaC4KCkkgc2VlIHRoYXQgYHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWdgIGhhcyBhIGBkYXRhWzMyMF1gIG1lbWJlci4gVGhlIGNvcmUgb2YgdGhlIGNvbmNlcm4gcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGlzIGlzIGhhbmRsZWQsIGFsb25nIHdpdGggdGhlIHN0YWNrIHZhcmlhYmxlIGByZXNwYCBhbmQgYHJlc3BfdHlwZWAuCgpJbiBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAsIHRoZSBgcmVxYCBzdHJ1Y3R1cmUgaXMgdGhlIGtleSB0byBzZW5kaW5nIGRhdGEgdG8gdGhlIE1DVS4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGF0IHRoZSBjb21waWxlciYjMzk7cyBiZWhhdmlvciB3aGVuIHVzaW5nIHRoZSBgeyAuLi4gfWAgaW5pdGlhbGl6ZXIgaXMgdG8gemVyby1pbml0aWFsaXplIGFueSBmaWVsZHMgbm90IGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoaXMgbWVhbnMgYF9yc3ZgLCBgY29uZmlnLmlkYCwgYGNvbmZpZy5yZXN2YCBhbmQgY3JpdGljYWxseSwgYGNvbmZpZy5kYXRhYCwgd2lsbCBiZSB6ZXJvZWQuIFRoZW4sIGBtZW1jcHlgIHBvcHVsYXRlcyB0aGUgKmJlZ2lubmluZyogb2YgYGNvbmZpZy5kYXRhYC4gVGhlIGVudGlyZSBgcmVxYCBzdHJ1Y3R1cmUgaXMgdGhlbiBzZW50LiBUaGlzIG1lYW5zIHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHNlbnQgdG8gdGhlIE1DVS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYG10NzkyNV9jb2V4X2luZm9gLCB3aGVyZSB0aGUgYHJlc3BgIGFuZCBgcmVzcF90eXBlYCBhcmUgdXNlZC4gYHJlc3BgIGlzIHVuaW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrLiBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgdGhlbiBwb3B1bGF0ZXMgYHJlc3BgIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcG9wdWxhdGVkIGluIGByZXRgLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB0aGUgc3Vic2VxdWVudCBgc2VxX3ByaW50ZmAgY2FsbHMgb25seSBwcmludCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIGNvcGllZCBpbnRvIGByZXNwYC4gVGhlIGNvZGUgKm9ubHkqIHJlYWRzIHRoZSBpbml0aWFsaXplZCBwYXJ0cyBvZiBgcmVzcGAuCgpUaGUgY3J1Y2lhbCBiaXQsIHRoZXJlZm9yZSwgaXMgdGhlIGNvZGUgaW4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBJZiB0aGUgcm91dGluZSBmaW5kcyB0aGUgYXBwcm9wcmlhdGUgdGFnIHdpdGhpbiB0aGUgcmVjZWl2ZWQgZGF0YSwgaXQgY29waWVzIGRhdGEgaW50byBgcmVzcGAgKHVwIHRvIGByZXNwX3NpemVgKSBhbmQgc2V0cyBgcmV0YCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4gSWYgdGhlIHJvdXRpbmUgZG9lcyBub3QgZmluZCB0aGUgdGFnLCBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIHBhdGggKmVuc3VyZXMqIGByZXRgIHJlcHJlc2VudHMgdGhlIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gdG8gYHJlc3BgLiBUaGVyZSYjMzk7cyBubyBzY2VuYXJpbyB3aGVyZSBgcmV0ICZndDsgMGAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGJ5dGVzIHdlcmVuJiMzOTt0IGluaXRpYWxpemVkLgoKSSB0aGVuIHdlbnQgYmFjayB0byBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ2AgdG8gcmUtZXZhbHVhdGUgaXQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5ldyBwYXRjaC4gSXQgc3RpbGwgc2VlbXMgZmluZSwgYmVjYXVzZSB0aGUgc3RydWN0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgcmVzdCBpcyB6ZXJvZWQuCgpTbywgbGV0JiMzOTtzIGRvdWJsZSBjaGVjay4gYHJlcWAgaXMgY29tcGxldGVseSBpbml0aWFsaXplZC4gTm90aGluZyBpcyBzZW50IHVuaW5pdGlhbGl6ZWQgdG8gdGhlIE1DVS4gVGhlIHJldHVybmVkIGByZXRgIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2YgaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gYHJlc3BgLiBgcmVzcF90eXBlYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdGhlIHVzZS4gVGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlIGlzIGNoZWNrZWQgZm9yIHNpemVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLgoKRmluYWxseSwgcmVnYXJkaW5nIHRoZSBLTVNBTiBydWxlczoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZTogTm8sIHdlIGFyZW4mIzM5O3QgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YTogTm8sIGFsbCB2YXJpYWJsZXMgdXNlZCBpbiBjb250cm9sIGZsb3cgYXJlIGluaXRpYWxpemVkIGNvcnJlY3RseS4KMy4gIEFsbG9jYXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQ6IE5vLCB0aGUgc3RhY2sgYnVmZmVyIGByZXNwYCBpcyBvbmx5IHJlYWQgdXAgdG8gdGhlIGluaXRpYWxpemVkIGJ5dGVzLgo0LiAgQm91bmRzIGNoZWNrcyB0aGF0IGFsbG93IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzczogVGhlIGxvZ2ljIGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCB2ZXJpZmllcyB0aGUgc2l6ZXMuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYCBiZWNhdXNlIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGVudHJ5IGBjb2V4X2luZm9gIGFuZCBhIGZ1bmN0aW9uIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCB0byBxdWVyeSB0aGUgTUNVLiBUaGUgbG9jYWwgYHJlcWAgc3RydWN0dXJlIHVzZWQgdG8gc2VuZCB0aGUgcXVlcnkgaXMgcGFydGlhbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJ1Y3QgaW5pdGlhbGl6ZXIsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgY29tcGlsZXIgemVyby1pbml0aWFsaXplcyBhbGwgcmVtYWluaW5nIGZpZWxkcyBhbmQgcGFkZGluZy4gVGhlIGByZXNwYCBidWZmZXIgYW5kIGByZXNwX3R5cGVgIHZhcmlhYmxlIGFyZSBwb3B1bGF0ZWQgYnkgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBUaGUgZnVuY3Rpb24gY29ycmVjdGx5IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgaW50byBgcmVzcGAsIGFuZCB0aGUgY2FsbGVyIGBtdDc5MjVfY29leF9pbmZvYCBvbmx5IHJlYWRzIGV4YWN0bHkgdGhhdCBtYW55IGJ5dGVzLiBgcmVzcF90eXBlYCBpcyBhbHNvIG9ubHkgYWNjZXNzZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvc2l0aXZlIGxlbmd0aCwgbWVhbmluZyBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LCBzZW50IHRvIHRoZSBkZXZpY2UsIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb25zLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGVudHJ5IGBjb2V4X2luZm9gIGFuZCBhIGZ1bmN0aW9uIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCB0byBxdWVyeSB0aGUgTUNVLiBUaGUgbG9jYWwgYHJlcWAgc3RydWN0dXJlIHVzZWQgdG8gc2VuZCB0aGUgcXVlcnkgaXMgcGFydGlhbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJ1Y3QgaW5pdGlhbGl6ZXIsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB0aGUgY29tcGlsZXIgemVyby1pbml0aWFsaXplcyBhbGwgcmVtYWluaW5nIGZpZWxkcyBhbmQgcGFkZGluZy4gVGhlIGByZXNwYCBidWZmZXIgYW5kIGByZXNwX3R5cGVgIHZhcmlhYmxlIGFyZSBwb3B1bGF0ZWQgYnkgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBUaGUgZnVuY3Rpb24gY29ycmVjdGx5IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQgaW50byBgcmVzcGAsIGFuZCB0aGUgY2FsbGVyIGBtdDc5MjVfY29leF9pbmZvYCBvbmx5IHJlYWRzIGV4YWN0bHkgdGhhdCBtYW55IGJ5dGVzLiBgcmVzcF90eXBlYCBpcyBhbHNvIG9ubHkgYWNjZXNzZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvc2l0aXZlIGxlbmd0aCwgbWVhbmluZyBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93LCBzZW50IHRvIHRoZSBkZXZpY2UsIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb25zLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMjozMi4wNjY3ODcwNDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkwNDE5NTAzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVQ3OTI1VVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiREVCVUdfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5XCIsXG4gICAgXCJtdDc5MjVfY29leF9pbmZvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRlYnVnZnMgZW50cnkgYGNvZXhfaW5mb2AgYW5kIGEgZnVuY3Rpb24gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIHRvIHF1ZXJ5IHRoZSBNQ1UuIFRoZSBsb2NhbCBgcmVxYCBzdHJ1Y3R1cmUgdXNlZCB0byBzZW5kIHRoZSBxdWVyeSBpcyBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHN0cnVjdCBpbml0aWFsaXplciwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjb21waWxlciB6ZXJvLWluaXRpYWxpemVzIGFsbCByZW1haW5pbmcgZmllbGRzIGFuZCBwYWRkaW5nLiBUaGUgYHJlc3BgIGJ1ZmZlciBhbmQgYHJlc3BfdHlwZWAgdmFyaWFibGUgYXJlIHBvcHVsYXRlZCBieSBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAuIFRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBpbnRvIGByZXNwYCwgYW5kIHRoZSBjYWxsZXIgYG10NzkyNV9jb2V4X2luZm9gIG9ubHkgcmVhZHMgZXhhY3RseSB0aGF0IG1hbnkgYnl0ZXMuIGByZXNwX3R5cGVgIGlzIGFsc28gb25seSBhY2Nlc3NlZCB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9zaXRpdmUgbGVuZ3RoLCBtZWFuaW5nIGl0IHdhcyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3csIHNlbnQgdG8gdGhlIGRldmljZSwgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBtZW1vcnkgY29ycnVwdGlvbnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGRlYnVnZnMgaW50ZXJmYWNlIHRoYXQgdHJpZ2dlcnMgYW4gTUNVIGNvbW1hbmQgYW5kIHBhcnNlcyB0aGUgcmVzcG9uc2UuIFRoZSByZXNwb25zZSBwYXJzaW5nIGxvZ2ljIGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBwcm9jZXNzZXMgdW50cnVzdGVkIGRhdGEgZnJvbSB0aGUgaGFyZHdhcmUgKHdoaWNoIGNhbiBiZSBlbXVsYXRlZCB2aWEgVVNCIGdhZGdldCBpbiBzeXprYWxsZXIpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSByb2J1c3RuZXNzIGFnYWluc3QgbWFsZm9ybWVkIFRMVnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIyOjMyLjA2Njc5MjY2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwMDk1NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzQ4MmE4OWE1ZGUxZTFmMTNiNWM5YjZmYWY3MWVmNjA1YmVmY2RjNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMjoyMjozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcXG5pbmRleCBkMDFmZjQ5ZGU0N2FmLi45YTVlYTEyYjc2Yzc4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xcbkBAIC0yODYsNiArMjg2LDM0IEBAIHN0YXRpYyBpbnQgbXQ3OTI1X2NoaXBfcmVzZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcXG4gXFxuIERFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX3Jlc2V0LCBOVUxMLCBtdDc5MjVfY2hpcF9yZXNldCwgXFxcIiVsbGRcXFxcblxcXCIpO1xcbiBcXG4rc3RhdGljIGludFxcbittdDc5MjVfY29leF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG4re1xcbisjZGVmaW5lIE1UNzkyNV9DSElQX0NPTkZJR19SRVNQX1NJWkVcXHQzMjBcXG4rXFx0c3RydWN0IG10NzkyeF9kZXYgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShzLVxcdTAwM2Vwcml2YXRlKTtcXG4rXFx0dTggcmVzcFtNVDc5MjVfQ0hJUF9DT05GSUdfUkVTUF9TSVpFXSwgcmVzcF90eXBlO1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4rXFx0bXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTtcXG4rXFx0cmV0ID0gbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShkZXYsIFxcXCJjb2V4QndjR2V0TW9kZUluZm8gMFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZyZXNwX3R5cGUsIHJlc3AsIHNpemVvZihyZXNwKSk7XFxuK1xcdG10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRzZXFfcHV0cyhzLCBcXFwibm8gcmVwbHlcXFxcblxcXCIpO1xcbitcXHRlbHNlIGlmIChyZXNwX3R5cGUgPT0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSlcXG4rXFx0XFx0c2VxX3ByaW50ZihzLCBcXFwiJS4qc1xcXFxuXFxcIiwgcmV0LCByZXNwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmV0OyBpICs9IDE2KVxcbitcXHRcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIlMDR4OiAlKnBoXFxcXG5cXFwiLCBpLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fdChpbnQsIDE2LCByZXQgLSBpKSwgcmVzcCArIGkpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGlyO1xcbkBAIC0zMDksNiArMzM3LDggQEAgaW50IG10NzkyNV9pbml0X2RlYnVnZnMoc3RydWN0IG10NzkyeF9kZXYgKmRldilcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiaWRsZS10aW1lb3V0XFxcIiwgMDYwMCwgZGlyLCBkZXYsXFxuIFxcdFxcdFxcdCAgICBcXHUwMDI2Zm9wc19wbV9pZGxlX3RpbWVvdXQpO1xcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJjaGlwX3Jlc2V0XFxcIiwgMDYwMCwgZGlyLCBkZXYsIFxcdTAwMjZmb3BzX3Jlc2V0KTtcXG4rXFx0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi1cXHUwMDNlbXQ3Ni5kZXYsIFxcXCJjb2V4X2luZm9cXFwiLCBkaXIsXFxuK1xcdFxcdFxcdFxcdCAgICBtdDc5MjVfY29leF9pbmZvKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi1cXHUwMDNlbXQ3Ni5kZXYsIFxcXCJydW50aW1lX3BtX3N0YXRzXFxcIiwgZGlyLFxcbiBcXHRcXHRcXHRcXHQgICAgbXQ3OTJ4X3BtX3N0YXRzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiZGVlcC1zbGVlcFxcXCIsIDA2MDAsIGRpciwgZGV2LCBcXHUwMDI2Zm9wc19kcyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmNcXG5pbmRleCBmYTI5YzQ4NmE0NTUzLi5lNjMxNmNlYTE4NjUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmNcXG5AQCAtMTE2MCw2ICsxMTYwLDgxIEBAIGludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZClcXG4gXFx0XFx0XFx0XFx0IFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCBmYWxzZSk7XFxuIH1cXG4gXFxuK2ludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCxcXG4rXFx0XFx0XFx0XFx0IHU4ICpyZXNwX3R5cGUsIHZvaWQgKnJlc3AsIHUxNiByZXNwX3NpemUpXFxuK3tcXG4rXFx0dTE2IGxlbiA9IHN0cmxlbihjbWQpO1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHR1OCBfcnN2WzRdO1xcbitcXHRcXHRfX2xlMTYgdGFnO1xcbitcXHRcXHRfX2xlMTYgbGVuO1xcbitcXHRcXHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIGNvbmZpZztcXG4rXFx0fSBfX3BhY2tlZCByZXEgPSB7XFxuK1xcdFxcdC50YWcgPSBjcHVfdG9fbGUxNihVTklfQ0hJUF9DT05GSUdfQ0hJUF9DRkcpLFxcbitcXHRcXHQubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJlcSkgLSA0KSxcXG4rXFx0XFx0LmNvbmZpZyA9IHtcXG4rXFx0XFx0XFx0LnJlc3BfdHlwZSA9IDAsXFxuK1xcdFxcdFxcdC50eXBlID0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSxcXG4rXFx0XFx0XFx0LmRhdGFfc2l6ZSA9IGNwdV90b19sZTE2KGxlbiksXFxuK1xcdFxcdH0sXFxuK1xcdH07XFxuK1xcdGNvbnN0IHUxNiBoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB0bHYpICtcXG4rXFx0XFx0XFx0ICAgIG9mZnNldG9mKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcsIGRhdGEpO1xcbitcXHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICpjZmc7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWxlbiB8fCBsZW4gXFx1MDAzZT0gc2l6ZW9mKHJlcS5jb25maWcuZGF0YSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bWVtY3B5KHJlcS5jb25maWcuZGF0YSwgY21kLCBsZW4pO1xcbitcXG4rXFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKENISVBfQ09ORklHKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIHRydWUsIFxcdTAwMjZza2IpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Lyogc2tpcCB0aGUgZml4ZWQgZmllbGQgb2YgdGhlIGV2ZW50LCB0aGUgVExWcyBmb2xsb3cgaXQgKi9cXG4rXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgNCkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRza2JfcHVsbChza2IsIDQpO1xcbitcXG4rXFx0cmV0ID0gLUVOT0VOVDtcXG4rXFx0d2hpbGUgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgdGx2KSkge1xcbitcXHRcXHRzdHJ1Y3QgdGx2ICp0bHYgPSAoc3RydWN0IHRsdiAqKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0XFx0dTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdSh0bHYtXFx1MDAzZWxlbik7XFxuK1xcdFxcdHUxNiBkYXRhX3NpemU7XFxuK1xcbitcXHRcXHRpZiAodGx2X2xlbiBcXHUwMDNjIHNpemVvZigqdGx2KSB8fCB0bHZfbGVuIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aWYgKGxlMTZfdG9fY3B1KHRsdi1cXHUwMDNldGFnKSAhPSBVTklfQ0hJUF9DT05GSUdfQ0hJUF9DRkcpIHtcXG4rXFx0XFx0XFx0c2tiX3B1bGwoc2tiLCB0bHZfbGVuKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICh0bHZfbGVuIFxcdTAwM2MgaGRyX2xlbilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRjZmcgPSAoc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqKXRsdi1cXHUwMDNlZGF0YTtcXG4rXFx0XFx0ZGF0YV9zaXplID0gbGUxNl90b19jcHUoY2ZnLVxcdTAwM2VkYXRhX3NpemUpO1xcbitcXHRcXHRpZiAoZGF0YV9zaXplIFxcdTAwM2UgdGx2X2xlbiAtIGhkcl9sZW4pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0KnJlc3BfdHlwZSA9IGNmZy1cXHUwMDNlcmVzcF90eXBlO1xcbitcXHRcXHRyZXQgPSBtaW5fdCh1MTYsIGRhdGFfc2l6ZSwgcmVzcF9zaXplKTtcXG4rXFx0XFx0bWVtY3B5KHJlc3AsIGNmZy1cXHUwMDNlZGF0YSwgcmV0KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK291dDpcXG4rXFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gaW50IG10NzkyNV9tY3Vfc2V0X2RlZXBfc2xlZXAoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgYm9vbCBlbmFibGUpXFxuIHtcXG4gXFx0Y2hhciBjbWRbMTZdO1xcbkBAIC0zNzcyLDcgKzM4NDcsOCBAQCBpbnQgbXQ3OTI1X21jdV9maWxsX21lc3NhZ2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHR1bmlfdHhkLVxcdTAwM2VvcHRpb24gPSBNQ1VfQ01EX1VOSV9FWFRfQUNLO1xcbiBcXG4gXFx0XFx0aWYgKGNtZCA9PSBNQ1VfVU5JX0NNRChISUZfQ1RSTCkgfHxcXG4tXFx0XFx0ICAgIGNtZCA9PSBNQ1VfVU5JX0NNRChDSElQX0NPTkZJRykpXFxuK1xcdFxcdCAgICBjbWQgPT0gTUNVX1VOSV9DTUQoQ0hJUF9DT05GSUcpIHx8XFxuK1xcdFxcdCAgICBjbWQgPT0gTUNVX1VOSV9RVUVSWShDSElQX0NPTkZJRykpXFxuIFxcdFxcdFxcdHVuaV90eGQtXFx1MDAzZW9wdGlvbiBcXHUwMDI2PSB+TUNVX0NNRF9BQ0s7XFxuIFxcbiBcXHRcXHRpZiAobWN1X2NtZCA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMIHx8XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmhcXG5pbmRleCAxMWY5ZWFjMTNmZmM2Li4yY2YzOTcxZDk4NTNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmhcXG5AQCAtMTE5LDYgKzExOSwxNSBAQCBlbnVtIHtcXG4gXFx0VU5JX0NISVBfQ09ORklHX05JQ19DQVBBID0gMHgzLFxcbiB9O1xcbiBcXG4rLyogdHlwZS9yZXNwX3R5cGUgb2Ygc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqL1xcbitlbnVtIHtcXG4rXFx0Q0hJUF9DT05GSUdfVFlQRV9XT19SRVNQT05TRSxcXG4rXFx0Q0hJUF9DT05GSUdfVFlQRV9NRU04LFxcbitcXHRDSElQX0NPTkZJR19UWVBFX01FTTMyLFxcbitcXHRDSElQX0NPTkZJR19UWVBFX0FTQ0lJLFxcbitcXHRDSElQX0NPTkZJR19UWVBFX0JJTkFSWSxcXG4rfTtcXG4rXFxuIGVudW0ge1xcbiBcXHRVTklfQkFORF9DT05GSUdfUkFESU9fRU5BQkxFLFxcbiBcXHRVTklfQkFORF9DT05GSUdfUlRTX1RIUkVTSE9MRCA9IDB4MDgsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmhcXG5pbmRleCAzMjFlNzMyMzQ3ZjJmLi5kMGRiNWQ4ZGFlNDgzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmhcXG5AQCAtMjk1LDYgKzI5NSw4IEBAIGludCBtdDc5MjVfbWN1X2dldF9yeF9yYXRlKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuIGludCBtdDc5MjVfbWN1X2Z3X2xvZ18yX2hvc3Qoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggY3RybCk7XFxuIHZvaWQgbXQ3OTI1X21jdV9yeF9ldmVudChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gaW50IG10NzkyNV9tY3VfY2hpcF9jb25maWcoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kKTtcXG4raW50IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kLFxcbitcXHRcXHRcXHRcXHQgdTggKnJlc3BfdHlwZSwgdm9pZCAqcmVzcCwgdTE2IHJlc3Bfc2l6ZSk7XFxuIGludCBtdDc5MjVfbWN1X3NldF9yeGZpbHRlcihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MzIgZmlmLFxcbiBcXHRcXHRcXHQgICAgdTggYml0X29wLCB1MzIgYml0X21hcCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMjozMi40ODc1NTQzNDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzEzMDU5NDgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc5MjVVXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJERUJVR19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlcIixcbiAgICBcIm10NzkyNV9jb2V4X2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZGVidWdmcyBpbnRlcmZhY2UgdGhhdCB0cmlnZ2VycyBhbiBNQ1UgY29tbWFuZCBhbmQgcGFyc2VzIHRoZSByZXNwb25zZS4gVGhlIHJlc3BvbnNlIHBhcnNpbmcgbG9naWMgaW4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIHByb2Nlc3NlcyB1bnRydXN0ZWQgZGF0YSBmcm9tIHRoZSBoYXJkd2FyZSAod2hpY2ggY2FuIGJlIGVtdWxhdGVkIHZpYSBVU0IgZ2FkZ2V0IGluIHN5emthbGxlcikgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHJvYnVzdG5lc3MgYWdhaW5zdCBtYWxmb3JtZWQgVExWcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzQ4MmE4OWE1ZGUxZTFmMTNiNWM5YjZmYWY3MWVmNjA1YmVmY2RjNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDAyOjIyOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jXG5pbmRleCBkMDFmZjQ5ZGU0N2FmLi45YTVlYTEyYjc2Yzc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvZGVidWdmcy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcbkBAIC0yODYsNiArMjg2LDM0IEBAIHN0YXRpYyBpbnQgbXQ3OTI1X2NoaXBfcmVzZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiBcbiBERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoZm9wc19yZXNldCwgTlVMTCwgbXQ3OTI1X2NoaXBfcmVzZXQsIFwiJWxsZFxcblwiKTtcbiBcbitzdGF0aWMgaW50XG4rbXQ3OTI1X2NvZXhfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4re1xuKyNkZWZpbmUgTVQ3OTI1X0NISVBfQ09ORklHX1JFU1BfU0laRVx0MzIwXG4rXHRzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKHMtXHUwMDNlcHJpdmF0ZSk7XG4rXHR1OCByZXNwW01UNzkyNV9DSElQX0NPTkZJR19SRVNQX1NJWkVdLCByZXNwX3R5cGU7XG4rXHRpbnQgaSwgcmV0O1xuK1xuK1x0bXQ3OTJ4X211dGV4X2FjcXVpcmUoZGV2KTtcbitcdHJldCA9IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoZGV2LCBcImNvZXhCd2NHZXRNb2RlSW5mbyAwXCIsXG4rXHRcdFx0XHRcdCAgIFx1MDAyNnJlc3BfdHlwZSwgcmVzcCwgc2l6ZW9mKHJlc3ApKTtcbitcdG10NzkyeF9tdXRleF9yZWxlYXNlKGRldik7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKCFyZXQpXG4rXHRcdHNlcV9wdXRzKHMsIFwibm8gcmVwbHlcXG5cIik7XG4rXHRlbHNlIGlmIChyZXNwX3R5cGUgPT0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSlcbitcdFx0c2VxX3ByaW50ZihzLCBcIiUuKnNcXG5cIiwgcmV0LCByZXNwKTtcbitcdGVsc2VcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmV0OyBpICs9IDE2KVxuK1x0XHRcdHNlcV9wcmludGYocywgXCIlMDR4OiAlKnBoXFxuXCIsIGksXG4rXHRcdFx0XHQgICBtaW5fdChpbnQsIDE2LCByZXQgLSBpKSwgcmVzcCArIGkpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqZGlyO1xuQEAgLTMwOSw2ICszMzcsOCBAQCBpbnQgbXQ3OTI1X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcImlkbGUtdGltZW91dFwiLCAwNjAwLCBkaXIsIGRldixcbiBcdFx0XHQgICAgXHUwMDI2Zm9wc19wbV9pZGxlX3RpbWVvdXQpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcImNoaXBfcmVzZXRcIiwgMDYwMCwgZGlyLCBkZXYsIFx1MDAyNmZvcHNfcmVzZXQpO1xuK1x0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi1cdTAwM2VtdDc2LmRldiwgXCJjb2V4X2luZm9cIiwgZGlyLFxuK1x0XHRcdFx0ICAgIG10NzkyNV9jb2V4X2luZm8pO1xuIFx0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi1cdTAwM2VtdDc2LmRldiwgXCJydW50aW1lX3BtX3N0YXRzXCIsIGRpcixcbiBcdFx0XHRcdCAgICBtdDc5MnhfcG1fc3RhdHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcImRlZXAtc2xlZXBcIiwgMDYwMCwgZGlyLCBkZXYsIFx1MDAyNmZvcHNfZHMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmNcbmluZGV4IGZhMjljNDg2YTQ1NTMuLmU2MzE2Y2VhMTg2NTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmNcbkBAIC0xMTYwLDYgKzExNjAsODEgQEAgaW50IG10NzkyNV9tY3VfY2hpcF9jb25maWcoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kKVxuIFx0XHRcdFx0IFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIGZhbHNlKTtcbiB9XG4gXG4raW50IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kLFxuK1x0XHRcdFx0IHU4ICpyZXNwX3R5cGUsIHZvaWQgKnJlc3AsIHUxNiByZXNwX3NpemUpXG4re1xuK1x0dTE2IGxlbiA9IHN0cmxlbihjbWQpO1xuK1x0c3RydWN0IHtcbitcdFx0dTggX3Jzdls0XTtcbitcdFx0X19sZTE2IHRhZztcbitcdFx0X19sZTE2IGxlbjtcbitcdFx0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyBjb25maWc7XG4rXHR9IF9fcGFja2VkIHJlcSA9IHtcbitcdFx0LnRhZyA9IGNwdV90b19sZTE2KFVOSV9DSElQX0NPTkZJR19DSElQX0NGRyksXG4rXHRcdC5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocmVxKSAtIDQpLFxuK1x0XHQuY29uZmlnID0ge1xuK1x0XHRcdC5yZXNwX3R5cGUgPSAwLFxuK1x0XHRcdC50eXBlID0gQ0hJUF9DT05GSUdfVFlQRV9BU0NJSSxcbitcdFx0XHQuZGF0YV9zaXplID0gY3B1X3RvX2xlMTYobGVuKSxcbitcdFx0fSxcbitcdH07XG4rXHRjb25zdCB1MTYgaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdGx2KSArXG4rXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcsIGRhdGEpO1xuK1x0c3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqY2ZnO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWxlbiB8fCBsZW4gXHUwMDNlPSBzaXplb2YocmVxLmNvbmZpZy5kYXRhKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtZW1jcHkocmVxLmNvbmZpZy5kYXRhLCBjbWQsIGxlbik7XG4rXG4rXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKENISVBfQ09ORklHKSxcbitcdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBza2lwIHRoZSBmaXhlZCBmaWVsZCBvZiB0aGUgZXZlbnQsIHRoZSBUTFZzIGZvbGxvdyBpdCAqL1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIDQpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRza2JfcHVsbChza2IsIDQpO1xuK1xuK1x0cmV0ID0gLUVOT0VOVDtcbitcdHdoaWxlIChza2ItXHUwMDNlbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCB0bHYpKSB7XG4rXHRcdHN0cnVjdCB0bHYgKnRsdiA9IChzdHJ1Y3QgdGx2ICopc2tiLVx1MDAzZWRhdGE7XG4rXHRcdHUxNiB0bHZfbGVuID0gbGUxNl90b19jcHUodGx2LVx1MDAzZWxlbik7XG4rXHRcdHUxNiBkYXRhX3NpemU7XG4rXG4rXHRcdGlmICh0bHZfbGVuIFx1MDAzYyBzaXplb2YoKnRsdikgfHwgdGx2X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbitcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKGxlMTZfdG9fY3B1KHRsdi1cdTAwM2V0YWcpICE9IFVOSV9DSElQX0NPTkZJR19DSElQX0NGRykge1xuK1x0XHRcdHNrYl9wdWxsKHNrYiwgdGx2X2xlbik7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0aWYgKHRsdl9sZW4gXHUwMDNjIGhkcl9sZW4pXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGNmZyA9IChzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICopdGx2LVx1MDAzZWRhdGE7XG4rXHRcdGRhdGFfc2l6ZSA9IGxlMTZfdG9fY3B1KGNmZy1cdTAwM2VkYXRhX3NpemUpO1xuK1x0XHRpZiAoZGF0YV9zaXplIFx1MDAzZSB0bHZfbGVuIC0gaGRyX2xlbilcbitcdFx0XHRicmVhaztcbitcbitcdFx0KnJlc3BfdHlwZSA9IGNmZy1cdTAwM2VyZXNwX3R5cGU7XG4rXHRcdHJldCA9IG1pbl90KHUxNiwgZGF0YV9zaXplLCByZXNwX3NpemUpO1xuK1x0XHRtZW1jcHkocmVzcCwgY2ZnLVx1MDAzZWRhdGEsIHJldCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK291dDpcbitcdGRldl9rZnJlZV9za2Ioc2tiKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIGludCBtdDc5MjVfbWN1X3NldF9kZWVwX3NsZWVwKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKVxuIHtcbiBcdGNoYXIgY21kWzE2XTtcbkBAIC0zNzcyLDcgKzM4NDcsOCBAQCBpbnQgbXQ3OTI1X21jdV9maWxsX21lc3NhZ2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdHVuaV90eGQtXHUwMDNlb3B0aW9uID0gTUNVX0NNRF9VTklfRVhUX0FDSztcbiBcbiBcdFx0aWYgKGNtZCA9PSBNQ1VfVU5JX0NNRChISUZfQ1RSTCkgfHxcbi1cdFx0ICAgIGNtZCA9PSBNQ1VfVU5JX0NNRChDSElQX0NPTkZJRykpXG4rXHRcdCAgICBjbWQgPT0gTUNVX1VOSV9DTUQoQ0hJUF9DT05GSUcpIHx8XG4rXHRcdCAgICBjbWQgPT0gTUNVX1VOSV9RVUVSWShDSElQX0NPTkZJRykpXG4gXHRcdFx0dW5pX3R4ZC1cdTAwM2VvcHRpb24gXHUwMDI2PSB+TUNVX0NNRF9BQ0s7XG4gXG4gXHRcdGlmIChtY3VfY21kID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX0NUUkwgfHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oXG5pbmRleCAxMWY5ZWFjMTNmZmM2Li4yY2YzOTcxZDk4NTNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oXG5AQCAtMTE5LDYgKzExOSwxNSBAQCBlbnVtIHtcbiBcdFVOSV9DSElQX0NPTkZJR19OSUNfQ0FQQSA9IDB4MyxcbiB9O1xuIFxuKy8qIHR5cGUvcmVzcF90eXBlIG9mIHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKi9cbitlbnVtIHtcbitcdENISVBfQ09ORklHX1RZUEVfV09fUkVTUE9OU0UsXG4rXHRDSElQX0NPTkZJR19UWVBFX01FTTgsXG4rXHRDSElQX0NPTkZJR19UWVBFX01FTTMyLFxuK1x0Q0hJUF9DT05GSUdfVFlQRV9BU0NJSSxcbitcdENISVBfQ09ORklHX1RZUEVfQklOQVJZLFxuK307XG4rXG4gZW51bSB7XG4gXHRVTklfQkFORF9DT05GSUdfUkFESU9fRU5BQkxFLFxuIFx0VU5JX0JBTkRfQ09ORklHX1JUU19USFJFU0hPTEQgPSAweDA4LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmhcbmluZGV4IDMyMWU3MzIzNDdmMmYuLmQwZGI1ZDhkYWU0ODMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmhcbkBAIC0yOTUsNiArMjk1LDggQEAgaW50IG10NzkyNV9tY3VfZ2V0X3J4X3JhdGUoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbiBpbnQgbXQ3OTI1X21jdV9md19sb2dfMl9ob3N0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGN0cmwpO1xuIHZvaWQgbXQ3OTI1X21jdV9yeF9ldmVudChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpO1xuK2ludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCxcbitcdFx0XHRcdCB1OCAqcmVzcF90eXBlLCB2b2lkICpyZXNwLCB1MTYgcmVzcF9zaXplKTtcbiBpbnQgbXQ3OTI1X21jdV9zZXRfcnhmaWx0ZXIoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTMyIGZpZixcbiBcdFx0XHQgICAgdTggYml0X29wLCB1MzIgYml0X21hcCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMjozMi40ODc1NTU4MzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODc0MDAzMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVQ3OTI1IENvZXhpc3RlbmNlIEluZm9ybWF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbml0aWFsbHkuIEl0IGFkZHMgYSBgY29leF9pbmZvYCBkZWJ1Z2ZzIGZpbGUgd2l0aGluIHRoZSBtdDc5MjUgd2lyZWxlc3MgZHJpdmVyLCBjcmVhdGVkIHVzaW5nIGBkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGVgLiBUaGUgYWN0dWFsIGRhdGEgaXMgZ2VuZXJhdGVkIGJ5IGBtdDc5MjVfY29leF9pbmZvYCwgd2hpY2ggY2FsbHMgdGhpcyBuZXcgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uJ3MgdGhlIGtleSwgaXQncyB0aGUgb25lIHNlbmRpbmcgYW4gTUNVIGNvbW1hbmQsIHNwZWNpZmljYWxseSBgTUNVX1VOSV9RVUVSWShDSElQX0NPTkZJRylgLCBhbmQgdGhlbiBwYXJzaW5nIHRoZSByZXNwb25zZS4gSXQgYWxsIGxvb2tzIGNsZWFuIGF0IGZpcnN0IGdsYW5jZSwgd2VsbC1zdHJ1Y3R1cmVkLlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uIHBvcHMgaW50byBteSBtaW5kOiBDYW4gSSBhY3R1YWxseSB0ZXN0IHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIE1UNzkyNSBkcml2ZXIgaXMgdXN1YWxseSBmb3IgUENJZSBvciBVU0Igd2lyZWxlc3MgY2FyZHMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyeSBwcm9iaW5nIGl0IGluIFFFTVUuIEJ1dCB0aGVuIEkgcXVpY2tseSByZW1lbWJlciwgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhhdCBzcGVjaWZpYyBNVDc5MjUgaGFyZHdhcmUuIFNvLCB0aGF0J3MgYSBkZWFkIGVuZC5cblxuV2FpdCBhIG1pbnV0ZSwgZG9lcyB0aGUgZHJpdmVyIGV2ZW4gc3VwcG9ydCBVU0I/IEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkndmUgd29ya2VkIG9uIE1UNzYsIEkgbmVlZCB0byBjaGVjayB0aGUgVVNCLXNwZWNpZmljIGNvZGUgd2l0aGluIHRoZSBkcml2ZXIuIExldCBtZSBzZWFyY2ggdGhyb3VnaCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdXNiLmNgIG9yIGFueSBvdGhlciByZWxldmFudCBmaWxlcy4gSSdsbCB1c2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCBvciBzaW1pbGFyIHRvIHF1aWNrbHkgY29uZmlybSBpZiBhIFVTQiBkcml2ZXIgaW1wbGVtZW50YXRpb24gZXhpc3RzLiBUaGF0J3MgdGhlIHJvdXRlIEknbSBnb2luZyB0byB0YWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTkzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6MjI6MzguMzYxNTYxMTgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImRlYnVnZnMuY1wiLFxuICAgIFwiaW5pdC5jXCIsXG4gICAgXCJtYWMuY1wiLFxuICAgIFwibWFjLmhcIixcbiAgICBcIm1haW4uY1wiLFxuICAgIFwibWN1LmNcIixcbiAgICBcIm1jdS5oXCIsXG4gICAgXCJtdDc5MjUuaFwiLFxuICAgIFwibmFuLmNcIixcbiAgICBcIm5hbi5oXCIsXG4gICAgXCJwY2kuY1wiLFxuICAgIFwicGNpX21hYy5jXCIsXG4gICAgXCJwY2lfbWN1LmNcIixcbiAgICBcInJlZ2QuY1wiLFxuICAgIFwicmVnZC5oXCIsXG4gICAgXCJyZWdzLmhcIixcbiAgICBcInRlc3Rtb2RlLmNcIixcbiAgICBcInVzYi5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIyOjM4LjM2MTYyNTM0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTI0Mjg0MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgV29ydGhpbmVzcyBBc3Nlc3NtZW50IGZvciBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIGZvciB0aGUgYG10NzkyNWAgZHJpdmVyLCBhbmQgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgd2hldGhlciB3ZSBjYW4gcmVhY2ggdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cbkZpcnN0LCBJIHNlZSB0aGUgZHJpdmVyJ3MgVVNCIHByb2JlIGNhbiBiZSB0cmlnZ2VyZWQgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMgdmlhIGBzeXpfdXNiX2Nvbm5lY3RgLiBTbyBmYXIsIHNvIGdvb2QuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb3IgYXJlIHB1cmVseSBkZWNvcmF0aXZlLlxuXG5Ob3csIHRoZSBwYXRjaCBhZGRzIGEgZGVidWdmcyBmaWxlIChgY29leF9pbmZvYCkgYW5kIGEgcmVhZCBoYW5kbGVyIChgbXQ3OTI1X2NvZXhfaW5mb2ApIGFzIHdlbGwgYXMgYSBoZWxwZXIgZnVuY3Rpb24gKGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCkuIEluaXRpYWxseSwgZGVidWdmcyBmaWxlcyBzZWVtIGxpa2UgYSBiaXQgb2YgYSBncmV5IGFyZWEuIFRoZXkncmUgb2Z0ZW4gY29uc2lkZXJlZCBkZWNvcmF0aXZlLCBidXQgdGhleSAqY2FuKiBiZSBmdXp6ZWQuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXNlICpvbmx5KiBkZWJ1Z2ZzIG1vZGlmaWNhdGlvbnM/XG5cbkxldCdzIGxvb2sgbW9yZSBjbG9zZWx5LiBUaGUgcGF0Y2ggdG91Y2hlcyBgZGVidWdmcy5jYCwgYG1jdS5jYCwgYW5kIGBtY3UuY2AuIEkgc2VlIHRoYXQgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIGlzIGludm9sdmVkLCBhbmQgaXQgYXBwZWFycyB0byBzZW5kIGEgc3BlY2lmaWMgTUNVIGNvbW1hbmQgKGBjb2V4QndjR2V0TW9kZUluZm8gMGApIGFuZCBwYXJzZXMgdGhlIHJlc3BvbnNlLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSEgSXQncyBub3QgKmp1c3QqIGRlYnVnIG91dHB1dC5cblxuRGlnZ2luZyBkZWVwZXIsIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBwYXJzZXMgYSBUTFYgKFR5cGUtTGVuZ3RoLVZhbHVlKSBmcm9tIHRoZSBTS0IuIENydWNpYWxseSwgdGhpcyBkYXRhIG9yaWdpbmF0ZXMgZnJvbSB0aGUgaGFyZHdhcmUgdGhyb3VnaCB0aGUgZW11bGF0ZWQgVVNCIGRldmljZS4gQW5kLCB0aGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IFN5emthbGxlciBjYW4gcHJvdmlkZSBhcmJpdHJhcnkgcmVzcG9uc2VzIHRvIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgc2VuZGluZyB0aGlzIHJlc3BvbnNlLiBUaGlzIG1lYW5zIHdlIGNhbiBjcmFmdCBtYWxpY2lvdXMgVVNCIHJlc3BvbnNlcyB0byBleHBsb2l0IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgVExWIHBhcnNpbmcgY29kZS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgVVNCIHJlc3BvbnNlIGlzIGVtdWxhdGVkLCB3ZSBjYW4gZGVmaW5pdGVseSByZWFjaCBhbmQgZnV6eiB0aGUgVExWIHBhcnNpbmcgbG9naWMgaW4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLCB3aGljaCBwcm9jZXNzZXMgdW50cnVzdGVkIGlucHV0LiBJdOKAmXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIGJlY2F1c2Ugd2UgY2FuIHRyaWdnZXIgaXQgYW5kIHByb3ZpZGUgYSByYW5nZSBvZiBtYWxpY2lvdXMgaW5wdXRzLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYE1UNzkyNV9VU0JgIGNvbmZpZ3VyYXRpb24gc28gdGhhdCBpdCBjYW4gYmUgdGVzdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDIwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk4LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMjo1MC44ODU5MTI2MDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwOTE2MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1UNzkyNVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnOjI6Y29uZmlnIE1UNzkyNV9DT01NT05cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWctNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnOjc6Y29uZmlnIE1UNzkyNUVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTgtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzkyNUUgKFBDSWUpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTE4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWc6MTk6Y29uZmlnIE1UNzkyNVVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc5MjVVIChVU0IpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIyOjUwLjkzMTAxMDQ1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MTIwNzg4NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYE1UNzkyNVVgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBNVDc5MjVVYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgcmVsZXZhbnQga2VybmVsIGRvY3VtZW50YXRpb24sIHNwZWNpZmljYWxseSBhbnl0aGluZyBzdXJyb3VuZGluZyB0aGUgTWVkaWFUZWsgd2lyZWxlc3MgZHJpdmVycy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSB1c3VhbCBzdXNwZWN0czogdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzLCB0aGUgZHJpdmVyIGNvZGUgaXRzZWxmLCBhbmQgYW55IHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUgKGxpa2UgZmlybXdhcmUgYmxvYnMgb3IgcmVndWxhdG9yeSBkYXRhYmFzZSBpbnRlcmFjdGlvbnMpLlxuXG5NeSBicmFpbidzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBhcmVhcyB0byBwcm9iZS4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBtb2R1bGVzIHRoYXQgYXJlICprbm93biogdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIHBhcnRpY3VsYXIgY2hpcCwgZXZlbiBpbmRpcmVjdGx5PyBUaGluayBhYm91dCB0aGUgdHlwaWNhbCBXaUZpIHN0YWNrIGxheWVyczogTUFDLCBQSFksIHJlZ3VsYXRvcnksIG5ldHdvcmtpbmcuIEFyZSB0aGVyZSBhbnkgaW50ZXItbW9kdWxlIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBpbXBvcnRhbnQgdG8gY29uc2lkZXI/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGdyZXAgc2VhcmNoIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciBgTVQ3OTI1VWAgb3IgcmVsYXRlZCBzdHJpbmdzLCBwYXlpbmcgYXR0ZW50aW9uIHRvIGhlYWRlcnMgYW5kIEtjb25maWcgZmlsZXMgdG8gZ2V0IGEgcHJlbGltaW5hcnkgZGVwZW5kZW5jeSBtYXAuXG5cbkJleW9uZCB0aGUgZGlyZWN0IGtlcm5lbCBtb2R1bGVzLCBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJ1aWxkIGVudmlyb25tZW50LiBXaGF0IGtlcm5lbCB2ZXJzaW9ucyBpcyB0aGlzIGRyaXZlciBrbm93biB0byBzdXBwb3J0PyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gc2V0IHRvIGVuYWJsZSBpdD8gSSBzaG91bGQgY2hlY2sgdGhlIG1ha2VmaWxlcyBmb3IgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzLiBJdCdzIGFsc28gaW1wb3J0YW50IHRvIHRoaW5rIGFib3V0IHRoZSB1c2VyLXNwYWNlIHRvb2xzIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgZHJpdmVyIHRocm91Z2ggYG5sODAyMTFgIG9yIG90aGVyIGludGVyZmFjZXMuIFRob3NlIGluZGlyZWN0IGRlcGVuZGVuY2llcyBhcmUgY3JpdGljYWwuXG5cblVsdGltYXRlbHksIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgaG93IHRoaXMgdGhpbmcgZml0cyBpbnRvIHRoZSBzeXN0ZW0uIEl0J3Mgbm90IGp1c3QgYWJvdXQgbGlzdGluZyBtb2R1bGVzOyBpdCdzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgZXhjaGFuZ2UsIGFuZCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIGNvbmZsaWN0LiBMZXQncyBzZWUgaWYgSSBjYW4gbWFwIG91dCB0aGlzIGxhbmRzY2FwZSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMxNiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIzOjA3LjA1MTgwMjM2NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTk6XFx0Y29uZmlnIE1UNzkyNVVcXG4gIDIwOlxcdFxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc5MjVVIChVU0IpIHN1cHBvcnRcXFwiXFxuICAyMTpcXHRcXHRzZWxlY3QgTVQ3OTJ4X1VTQlxcbiAgMjI6XFx0XFx0c2VsZWN0IE1UNzkyNV9DT01NT05cXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gVVNCXFxuICAyNTpcXHRcXHRoZWxwXFxuICAyNjpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc5MjUtYmFzZWQgd2lyZWxlc3MgVVNCIGRldmljZXMsXFxuICAyNzpcXHRcXHQgIHdoaWNoIHN1cHBvcnQgb3BlcmF0aW9uIGF0IDZHSHosIDVHSHosIGFuZCAyLjRHSHogSUVFRSA4MDIuMTFiZVxcbiAgMjg6XFx0XFx0ICAyeDI6MlNTIDQwOTYtUUFNLCAxNjBNSHogY2hhbm5lbHMuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6MjM6MDcuMDUxODcwNzQ0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MzQ1MjYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1UNzkyNVUgRHJpdmVyIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoZSBgTVQ3OTI1VWAgZHJpdmVyLCB3aGljaCBJIGtub3cgcHJldHR5IHdlbGwsIGlzIGJ1aWx0IG9uIHRvcCBvZiBgTUFDODAyMTFgIGFuZCByZWxpZXMgb24gdGhlIGBVU0JgIHN1YnN5c3RlbS4gTWFrZXMgc2Vuc2UsIHRoYXQncyB0aGUgY29tbW9uIGFyY2hpdGVjdHVyZSBmb3IgVVNCLWJhc2VkIHdpcmVsZXNzIGRldmljZXMuIEkgYWxzbyBzZWUgdGhhdCBgTVQ3OTI1X0NPTU1PTmAgaXMgc2VsZWN0ZWQsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIGEgc2xpZ2h0IHBhdXNlLi4uIEknbSBqdXN0IHF1aWNrbHkgY29uZmlybWluZyBpZiBgTVQ3OTI1VWAgZGlyZWN0bHkgZGVwZW5kcyBvbiBgTVQ3Nl9VU0JgLCBvciBpZiBpdCdzIHNlbGVjdGVkIGltcGxpY2l0bHkgdmlhIHNvbWV0aGluZyBlbHNlLiBNeSBpbnR1aXRpb24gaXMgdGhhdCBgTVQ3OTJ4X1VTQmAgcHJvYmFibHkgaGFuZGxlcyB0aGUgc2VsZWN0aW9uLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MngvS2NvbmZpZ2AgZGlyZWN0b3J5IG9yIGEgc2ltaWxhcmx5IHN0cnVjdHVyZWQgbG9jYXRpb24gZm9yIHRoZSBkZXBlbmRlbmNpZXMuIEdvdHRhIGJlIHN1cmUgYWJvdXQgdGhpcyB0byBnZXQgdGhlIG1vZHVsZSBsb2FkaW5nIG9yZGVyIGNvcnJlY3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NjQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzoxMS4zOTUzMjU5MjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODA2MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNVDc5MnhfVVNCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZz0zMj1jb25maWcgTVQ3OTJ4X0xJQlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnLTM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZzozNjpjb25maWcgTVQ3OTJ4X1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZy0zNy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzoxMS40NDQxMzkxNDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA5OTc3NjAwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gY2hlY2tpbmcgdGhlIGBNVDc5MnhfVVNCYCBkZXBlbmRlbmNpZXMsIHByZXNlbnRlZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBgTVQ3OTJ4X1VTQmAgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoaXMgYE1UNzkyeF9VU0JgIG1vZHVsZSByZWxpZXMgb24uIEJlZm9yZSBJIGV2ZW4gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSB0eXBpY2FsIGFyZWFzOlxuXG4qICAgKipVbmRlcmx5aW5nIEhhcmR3YXJlOioqIEZpcnN0IGFuZCBmb3JlbW9zdCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSB0aGlzIGlzIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoLiBEb2VzIGl0IGFzc3VtZSBhIHBhcnRpY3VsYXIgVVNCIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbj8gV2hhdCBhYm91dCB0aGUgb3ZlcmFsbCBzeXN0ZW0tb24tYS1jaGlwIChTb0MpIGFyY2hpdGVjdHVyZT8gQW55IHNwZWNpYWxpemVkIHJlZ2lzdGVycyBvciBtZW1vcnkgbWFwcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgaGFyZHdhcmUgY29uZmxpY3RzIG9yIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMuXG5cbiogICAqKlVTQiBTdGFjayBJbnRlZ3JhdGlvbjoqKiBOb3csIGl0J3MgYWJvdXQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGhvc3QgVVNCIHN0YWNrLiBJcyBpdCB1c2luZyBhIHN0YW5kYXJkIFVTQiBjbGFzcyBkcml2ZXIsIG9yIGlzIHRoaXMgYSBjdXN0b20gaW1wbGVtZW50YXRpb24/IEFyZSB0aGVyZSBzcGVjaWZpYyBVU0IgdHJhbnNmZXIgdHlwZXMgKGJ1bGssIGludGVycnVwdCwgY29udHJvbCwgaXNvY2hyb25vdXMpIGl0J3MgbGV2ZXJhZ2luZywgYW5kIHRoZXJlZm9yZSBkZXBlbmRlbnQgb24gdGhlIGNvcnJlc3BvbmRpbmcgc3RhY2sgY2FwYWJpbGl0aWVzPyBJIG5lZWQgdG8ga25vdyBob3cgZGVlcGx5IGludGVncmF0ZWQgaXQgaXMgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbS5cblxuKiAgICoqS2VybmVsIERlcGVuZGVuY2llczoqKiBXaGF0IGtlcm5lbCBtb2R1bGVzIGRvZXMgYE1UNzkyeF9VU0JgIGRlcGVuZCBvbj8gQXJlIHRoZXJlIGFueSBjb3JlIGtlcm5lbCBpbnRlcmZhY2VzIGl0J3MgdXNpbmcgKGxpa2UgRE1BIGVuZ2luZXMsIGludGVycnVwdCBoYW5kbGluZyBtZWNoYW5pc21zLCBvciBzcGVjaWZpYyBkZXZpY2UgdHJlZSBiaW5kaW5ncyk/IEknbGwgbmVlZCB0byBpZGVudGlmeSB0aG9zZSBtb2R1bGVzIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGxvYWRlZCBhbmQgY29uZmlndXJlZCwgYW5kIGxvb2sgZm9yIGFueSB2ZXJzaW9uaW5nIGRlcGVuZGVuY2llcy5cblxuKiAgICoqRmlybXdhcmUvQ29uZmlndXJhdGlvbiBGaWxlczoqKiBPZnRlbiwgdGhlc2UgdHlwZXMgb2YgZHJpdmVycyByZWx5IG9uIGZpcm13YXJlIGJsb2JzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBpZGVudGlmeSB0aG9zZSBmaWxlIGxvY2F0aW9ucyBhbmQgZW5zdXJlIHRoYXQgdGhlIGFwcHJvcHJpYXRlIHZlcnNpb25zIGFyZSBpbmNsdWRlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBsb2FkaW5nIGRlcGVuZGVuY2llcy5cblxuKiAgICoqQnVpbGQgU3lzdGVtOioqIEZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgc3lzdGVtIOKAkyB3aGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzIHRoZXJlPyBJcyBpdCBhIHN0YW5kYXJkIGBNYWtlZmlsZWAgc2V0dXAsIG9yIGlzIGl0IHVzaW5nIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggbGlrZSBga2J1aWxkYCBvciBzb21ldGhpbmcgZWxzZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb2R1bGUgaXMgY29tcGlsZWQgYW5kIGxpbmtlZC4gVW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgc3lzdGVtIGlzIGNyaXRpY2FsIHRvIGJlIHN1cmUgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBwcm9wZXJseSBpbmNsdWRlZC5cblxuTXkgaW1tZWRpYXRlIGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBsaXN0IG9mIGV2ZXJ5dGhpbmcgYE1UNzkyeF9VU0JgIGlzICpyZWxpYW50KiB1cG9uLCBib3RoIGF0IHRoZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgbGV2ZWxzLiBUaGF0IHdheSwgSSdtIGVxdWlwcGVkIHRvIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzLCBvcHRpbWl6ZSB0aGUgbW9kdWxlJ3MgcGVyZm9ybWFuY2UsIG9yIGludGVncmF0ZSBpdCB3aXRoIGEgbmV3IHN5c3RlbSB3aXRoIGNvbmZpZGVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzoxOS41NDM5MTkzNzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM2OlxcdGNvbmZpZyBNVDc5MnhfVVNCXFxuICAzNzpcXHRcXHR0cmlzdGF0ZVxcbiAgMzg6XFx0XFx0c2VsZWN0IE1UNzZfVVNCXFxuICAzOTpcXHRcXG4gIDQwOlxcdGNvbmZpZyBNVDc2X05QVVxcbiAgNDE6XFx0XFx0dHJpc3RhdGVcXG4gIDQyOlxcdFxcdGRlcGVuZHMgb24gTkVUX0FJUk9IQV9OUFU9eSB8fCBNVDc2X0NPUkU9TkVUX0FJUk9IQV9OUFVcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4MC9LY29uZmlnXFxcIlxcbiAgNDU6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4Mi9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzoxOS41NDM5OTA0MzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1NjkwOTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciB0aGUgTVQ3OTI1VSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBlbmFibGluZyB0aGUgYE1UNzkyNVVgIGRyaXZlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyB3aXRoIGBNVDc5MjVVYCBhcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbmF0dXJhbGx5LiBBbG9uZ3NpZGUgdGhhdCwgSSBuZWVkIHRvIGJyaW5nIGluIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXM6IGBNQUM4MDIxMWAsIGBVU0JgLCBgV0xBTmAsIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AsIGBNVDc2X0NPUkVgLCBgTVQ3Nl9VU0JgLCBgTVQ3OTJ4X1VTQmAsIGFuZCBgTVQ3OTI1X0NPTU1PTmAuIEEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AgYW5kIGBNQUM4MDIxMWAgaXMgd2FycmFudGVkOyBnb3R0YSBiZSB0aG9yb3VnaC5cblxuUmlnaHQgbm93LCBJJ20gbGVhbmluZyB0b3dhcmQgZXhwbGljaXRseSBpbmNsdWRpbmcgYE1UNzkyNVVgLCBgTUFDODAyMTFgLCBgV0xBTmAsIGFuZCBgV0xBTl9WRU5ET1JfTUVESUFURUtgLiBIb3dldmVyLCBJIGp1c3QgY2F1Z2h0IHNvbWV0aGluZyDigJMgdGhpcyBwYXRjaCBtZW50aW9ucyBhIGRlYnVnZnMgZmlsZS4gVGhhdCB0aHJvd3MgYSBwb3RlbnRpYWwgd3JlbmNoIGludG8gdGhlIHdvcmtzLiBTbywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGlmIGVuYWJsaW5nIGBERUJVR19GU2AgaXMgYSByZXF1aXJlbWVudCBvciBqdXN0IGFuIG9wdGlvbmFsIGZlYXR1cmUuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3Mgc2V0IHVwIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxNiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIzOjI0LjIwMDkwMzI4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MDM3Nzg4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERUJVR19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIzOjI0LjMxODk0OTE5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM3Mjk5NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGRlYnVnZnMuY2AqKlxuXG5Pa2F5LCBzbyBgZGVidWdmcy5jYCBzZWVtcyB0byBiZSBjb21waWxlZCBjb25kaXRpb25hbGx5LiBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIFNwZWNpZmljYWxseSwgdGhlIGBNYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIG1hZ2ljIGhhcHBlbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZmxhZ3MsIGRlZmluZXMsIG9yIG90aGVyIGZhY3RvcnMgYXJlIGRldGVybWluaW5nIHdoZXRoZXIgdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlIGdldHMgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGJ1aWxkIG9yIG5vdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGBNYWtlZmlsZWAgaGFzIHRvIHNheS4gR290dGEgdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGZpbGUuIFRoaXMgc21lbGxzIGxpa2UgYSBmZWF0dXJlIGZsYWcgb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBhdCBwbGF5LiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY5NiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIzOjI4LjI1NjI1MTgzNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmotJChDT05GSUdfTVQ3OTI1X0NPTU1PTikgKz0gbXQ3OTI1LWNvbW1vbi5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfTVQ3OTI1RSkgKz0gbXQ3OTI1ZS5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfTVQ3OTI1VSkgKz0gbXQ3OTI1dS5vXFxuICAgNjpcXHRcXG4gICA3OlxcdG10NzkyNS1jb21tb24teSA6PSBtYWMubyBtY3UubyByZWdkLm8gbWFpbi5vIGluaXQubyBkZWJ1Z2ZzLm8gbmFuLm9cXG4gICA4OlxcdG10NzkyNS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgKz0gdGVzdG1vZGUub1xcbiAgIDk6XFx0bXQ3OTI1ZS15IDo9IHBjaS5vIHBjaV9tYWMubyBwY2lfbWN1Lm9cXG4gIDEwOlxcdG10NzkyNXUteSA6PSB1c2Iub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzoyOC4yNTYzMDkwNDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMTM5MTcyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIGZvciBTZWxlY3RpbmcgdGhlIFJlbGV2YW50IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBgZGVidWdmcy5vYCBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiAgSSBzZWUgdGhhdCBgZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlYCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2RlYnVnZnMuaGAuICBJbXBvcnRhbnQgcG9pbnQ6IHRoaXMgaXMgYSBuby1vcCBpZiBgREVCVUdfRlNgIGlzbid0IGVuYWJsZWQuIFNvLCB0byBhY3R1YWxseSB0ZXN0IHRoaXMsIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgREVCVUdfRlNgIGlzIHNldC5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgb25lcz8gSSd2ZSBnb3QgYG10NzkyNV9jb2V4X2luZm9gIGFuZCBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgaGlnaGxpZ2h0ZWQuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgYXJlIHN0YXRpYy4gYG10NzkyNV9jb2V4X2luZm9gICppcyogc3RhdGljLiBCdXQsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBpdCdzIHVzZWQgYXMgYSBjYWxsYmFjayB0byBgZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlYC4gIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpcyBub24tc3RhdGljLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gY29uZmlybSB0aGlzLlxuXG5ZZXMsIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpcyBkZWZpbmVkIGluIGBtY3UuY2AgYXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLlxuXG5Ob3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBBbHRob3VnaCBgbXQ3OTI1X2NvZXhfaW5mb2AgaXMgc3RhdGljLCBpdCAqaXMqIGFuIEFQSSBlbnRyeSBwb2ludCAoZm9yIGRlYnVnZnMgcmVhZCksIHNvIGl0IGdldHMgYW4gYWRkcmVzcy4gQnV0IHNpbmNlIGl0J3Mgc3RhdGljLCBpdCAqbWlnaHQqIGJlIGlubGluZWQuIEJ1dCBzaW5jZSBpdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZWAsIGl0IGNhbm5vdCBiZSBpbmxpbmVkLiBJdCBnZXRzIGEgZGlzdGluY3Qgc3ltYm9sLiAgU3RpbGwsIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBsb29rcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIEknbSBhZnRlciwgYW5kIGl0J3Mgbm9uLXN0YXRpYy5cblxuT2theSwgbGV0J3MgY2hlY2sgaWYgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIGlzIGV4cG9ydGVkLiBOb3BlLCBpdCdzIG5vdCBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYCwgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIsIHNpbmNlIGl0J3Mgbm9uLXN0YXRpYy4gU28gSSdsbCBkZWZpbml0ZWx5IGxpc3QgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIGFuZCBhbHNvIGluY2x1ZGUgYG10NzkyNV9jb2V4X2luZm9gIHNpbmNlIHRoZSBkZWJ1Z2ZzIHJlYWQgZ29lcyB0aHJvdWdoIGl0LlxuXG5PbmUgbGFzdCB0aG91Z2h0OiB0aGUgcHJvbXB0IG1lbnRpb25zIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJcyBgbXQ3OTI1YCBhY2Nlc3NpYmxlPyBZZXMsIEkgY2FuIHJlYWNoIGl0IHRocm91Z2ggYHVzYiBnYWRnZXRgIHZpYSBgc3l6X3VzYl9jb25uZWN0YC5cblxuU28sIHRoZSBrZXkgY29uZmlncyBmb3IgbXkgdGVzdGluZyBhcmU6IGBNVDc5MjVVYCwgYE1BQzgwMjExYCwgYFdMQU5gLCBgV0xBTl9WRU5ET1JfTUVESUFURUtgLCBhbmQsIGNyaXRpY2FsbHksIGBERUJVR19GU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgYXJlIGFsbCBzZXQuIEFuZCBub3csIEknbGwgY2hlY2sgdG8gc2VlIGlmIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AgaGFzIGFueSBmdXJ0aGVyIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzozOC4yNzAyMjk1MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjQ4OTU4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgV0xBTl9WRU5ET1JfTUVESUFURUtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvS2NvbmZpZzoyOmNvbmZpZyBXTEFOX1ZFTkRPUl9NRURJQVRFS1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWctMy1cXHRib29sIFxcXCJNZWRpYVRlayBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzozOC41NTY3MjU4NTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMTE2MTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNZWRpYXRlayBXaXJlbGVzcyBEcml2ZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWdgIGZpbGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSB3YW50IHRvIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyB0aGUga2V5c3RvbmUgdG8gdGhlIE1lZGlhdGVrIHdpcmVsZXNzIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24sIHNvIHVuZGVyc3RhbmRpbmcgd2hhdCBrZXlzIHRyaWdnZXIgaXRzIGluY2x1c2lvbiAob3IgZXhjbHVzaW9uKSBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHJlbGV2YW50IGJ1aWxkIG9wdGlvbnMsIHRoZSBjb25kaXRpb25zIHdoaWNoIGVuYWJsZSB0aGVtIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEJhc2ljYWxseSwgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIG5lZWQgdG8gYmUgYWN0aXZlIGZvciB0aGVzZSBNZWRpYXRlayB3aXJlbGVzcyBkcml2ZXJzIHRvIGV2ZW4gYmUgY29uc2lkZXJlZD8gSSBleHBlY3QgdGhlcmUgdG8gYmUgZGVwZW5kZW5jaWVzIG9uIHBsYXRmb3JtIHN1cHBvcnQsIHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9ucywgYW5kIHBvdGVudGlhbGx5IG9uIG90aGVyIHdpcmVsZXNzIHJlbGF0ZWQgc3ViLXN5c3RlbXMuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLiBJIG5lZWQgdG8gc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZXNlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzo0Mi44Njc4OTA1MjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdMQU5fVkVORE9SX01FRElBVEVLXFxuICAgMzpcXHRcXHRib29sIFxcXCJNZWRpYVRlayBkZXZpY2VzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIElmIHlvdSBoYXZlIGEgd2lyZWxlc3MgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAgNzpcXHRcXG4gICA4OlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gICA5OlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcXG4gIDEwOlxcdFxcdCAgcXVlc3Rpb25zIGFib3V0IHRoZXNlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzo0Mi44Njc5NTU5MDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY2NjYzMTg1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1UNzkyNVUgTUNVIENvbW1hbmQgUmVzcG9uc2UgUGFyc2luZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBrZXkgYXR0YWNrIHN1cmZhY2UgdG8gZnV6ei4gTGV0J3Mgc2VlLi4uIGBXTEFOX1ZFTkRPUl9NRURJQVRFS2AgaXMgc2V0IHRvICd5JyBieSBkZWZhdWx0LCB0aGF0J3MgZ29vZCB0byBrbm93LCBidXQgbm90IHRoZSBmb2N1cyBoZXJlLiBUaGUgY3J1eCBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBgTVQ3OTI1VWAgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IGRlcGVuZHMgb24gYE1BQzgwMjExYCwgYFVTQmAsIGFuZCwgY3J1Y2lhbGx5IGZvciBkZWJ1ZyBhbmQgZnV6emluZywgYERFQlVHX0ZTYC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSwgcmlnaHQsIGBNVDc5MjVVYCwgYE1BQzgwMjExYCwgYFVTQmAsIGFuZCBgREVCVUdfRlNgIGFyZSB0aGUgY29uZmlncyBJJ2xsIGJlIGVuYWJsaW5nLiBBbmQgYE1UNzkyNV9DT01NT05gIGlzIHNlbGVjdGVkIGJ5IGBNVDc5MjVVYCwgbm8gbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGF0LlxuXG5Ob3csIHRoZSBqdWljeSBiaXQ6IGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpbiBgbWN1LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCdzIHBhcnNpbmcgdGhlIHJlc3BvbnNlIGZyb20gdGhlIE1DVS4gVGhlIHJlc3BvbnNlLCB2aWEgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2dgLCBpcyBiYXNpY2FsbHkgYSBVU0IgVVJCIGZyb20gdGhlIHN5emthbGxlciBVU0IgZnV6emVyLiBBbmQgdGhhdCByZXNwb25zZSBnZXRzIHBhcnNlZCBhcyBhIFRMVi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBwYXJzaW5nIGxvZ2ljLCB0aG9yb3VnaGx5LlxuXG5JJ20gc2VlaW5nIGEgYHdoaWxlYCBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgVExWcy4gSXQncyBkb2luZyBzb21lIGxlbmd0aCBjaGVja3M6IGB0bHZfbGVuYCBhZ2FpbnN0IGBzaXplb2YoKnRsdilgIGFuZCBgc2tiLVx1MDAzZWxlbmAuIFRoZW4sIGl0IGNoZWNrcyB0aGUgYHRsdi1cdTAwM2V0YWdgLiBJZiBpdCdzIHRoZSByaWdodCB0YWcgKGBVTklfQ0hJUF9DT05GSUdfQ0hJUF9DRkdgKSwgaXQgZ2V0cyBldmVuIG1vcmUgY29tcGxpY2F0ZWQuIEl0IGV4dHJhY3RzIGBjZmctXHUwMDNlZGF0YV9zaXplYCwgY29tcGFyZXMgdGhhdCB0byBgdGx2X2xlbiAtIGhkcl9sZW5gIHdoaWNoIHNlZW1zIHJlYXNvbmFibGUuICBUaGVuLCBpdCdzIGNvcHlpbmcgZGF0YSBpbnRvIHRoZSBgcmVzcGAgYnVmZmVyIHVzaW5nIGBtZW1jcHlgLiAgYHNrYl9wdWxsYCBpcyB1c2VkIGZvciBhZHZhbmNpbmcgdGhlIGJ1ZmZlciwgYnV0IHRoZSBjaGVja3MgYmVmb3JlIGl0IG1ha2UgaXQgc2FmZSAtIHRoYXQncyBnb29kLlxuXG5Pa2F5LCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIFRoaXMgKlRMViogcGFyc2luZywgZXNwZWNpYWxseSB0aG9zZSBsZW5ndGggYW5kIHNpemUgY2hlY2tzLCB0aGlzIGlzIHByaW1lIGZ1enppbmcgbWF0ZXJpYWwuIEl0IGhhcyBhbGwgdGhlIGhhbGxtYXJrcyBvZiBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eTogdW50cnVzdGVkIGRhdGEgY29taW5nIGluLCBzb21lIChob3BlZnVsbHkgcm9idXN0KSBwYXJzaW5nIGFuZCBkYXRhIG1hbmlwdWxhdGlvbi4gVGhpcyBpcyBleGFjdGx5IHdoYXQgZnV6emVycyBhcmUgKmRlc2lnbmVkKiB0byBicmVhayEgVGhlIGNvZGUgc2VlbXMgcmVsYXRpdmVseSBjYXJlZnVsLCBidXQgdGhlIGNvbXBsZXhpdHkgbWFrZXMgaXQgYSBoaWdoIHZhbHVlIHRhcmdldC5cblxuU28sIHRvIHN1bW1hcml6ZSB3aGF0IEkgaGF2ZSBoZXJlOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseS4gVGhpcyBuZWVkcyBmdXp6aW5nLlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCwgYW5kIEkgc2hvdWxkIGFsc28gYWRkIGBtdDc5MjVfY29leF9pbmZvYCBhcyB3ZWxsIHNpbmNlIGl0IGludGVyYWN0cyB3aXRoIHRoZSBNQ1UuXG4qICAgKipFbmFibGVDb25maWdzKio6IGBNVDc5MjVVYCwgYE1BQzgwMjExYCwgYFVTQmAsIGBERUJVR19GU2Ag4oCTIHRoZXNlIGFyZSBteSBiYXNlIHNldHVwLlxuKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggYWRkcyBhIGRlYnVnZnMgaW50ZXJmYWNlIHRoYXQgdHJpZ2dlcnMgYW4gTUNVIGNvbW1hbmQuIFRoZSBjb3JlIHZ1bG5lcmFiaWxpdHkgaXMgcmVzcG9uc2UgcGFyc2luZyAtIHdoaWNoIGlzIHVudHJ1c3RlZCBkYXRhIGZyb20gdGhlIGhhcmR3YXJlICh3aGljaCBjYW4gYmUgZW11bGF0ZWQgdmlhIFVTQiBnYWRnZXQgaW4gc3l6a2FsbGVyKSBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGZ1enogdGhlIHJvYnVzdG5lc3MgYWdhaW5zdCBtYWxmb3JtZWQgVExWcy4gVGhlIGtleSBoZXJlIGlzIHRvIGZpbmQgb3V0IGlmIHRoZSBNQ1UgaGFzIHRoZSBzYW1lIGNoZWNrcyB0aGF0IHRoZSBkcml2ZXIgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxOTAsIk91dHB1dFRva2VucyI6MTYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6MjM6NTkuNTM0Mjc2OTA0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4Njk1MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1UNzkyNVVcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeVwiLFxuICAgIFwibXQ3OTI1X2NvZXhfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBkZWJ1Z2ZzIGludGVyZmFjZSB0aGF0IHRyaWdnZXJzIGFuIE1DVSBjb21tYW5kIGFuZCBwYXJzZXMgdGhlIHJlc3BvbnNlLiBUaGUgcmVzcG9uc2UgcGFyc2luZyBsb2dpYyBpbiBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgcHJvY2Vzc2VzIHVudHJ1c3RlZCBkYXRhIGZyb20gdGhlIGhhcmR3YXJlICh3aGljaCBjYW4gYmUgZW11bGF0ZWQgdmlhIFVTQiBnYWRnZXQgaW4gc3l6a2FsbGVyKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcm9idXN0bmVzcyBhZ2FpbnN0IG1hbGZvcm1lZCBUTFZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1UNzkyNVVcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeVwiLFxuICAgIFwibXQ3OTI1X2NvZXhfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBkZWJ1Z2ZzIGludGVyZmFjZSB0aGF0IHRyaWdnZXJzIGFuIE1DVSBjb21tYW5kIGFuZCBwYXJzZXMgdGhlIHJlc3BvbnNlLiBUaGUgcmVzcG9uc2UgcGFyc2luZyBsb2dpYyBpbiBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgcHJvY2Vzc2VzIHVudHJ1c3RlZCBkYXRhIGZyb20gdGhlIGhhcmR3YXJlICh3aGljaCBjYW4gYmUgZW11bGF0ZWQgdmlhIFVTQiBnYWRnZXQgaW4gc3l6a2FsbGVyKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcm9idXN0bmVzcyBhZ2FpbnN0IG1hbGZvcm1lZCBUTFZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyMzo1OS42MTgxNTMxMTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTQ5MDU3MDczNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIzOjU5LjYxODgyMTEzNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjE0ODk4OTczODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGVidWdmcyBlbnRyeSBgY29leF9pbmZvYCBhbmQgYSBmdW5jdGlvbiBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgdG8gcXVlcnkgdGhlIE1DVS4gVGhlIGxvY2FsIGByZXFgIHN0cnVjdHVyZSB1c2VkIHRvIHNlbmQgdGhlIHF1ZXJ5IGlzIHBhcnRpYWxseSBpbml0aWFsaXplZCB3aXRoIGEgc3RydWN0IGluaXRpYWxpemVyLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGNvbXBpbGVyIHplcm8taW5pdGlhbGl6ZXMgYWxsIHJlbWFpbmluZyBmaWVsZHMgYW5kIHBhZGRpbmcuIFRoZSBgcmVzcGAgYnVmZmVyIGFuZCBgcmVzcF90eXBlYCB2YXJpYWJsZSBhcmUgcG9wdWxhdGVkIGJ5IGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YC4gVGhlIGZ1bmN0aW9uIGNvcnJlY3RseSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGludG8gYHJlc3BgLCBhbmQgdGhlIGNhbGxlciBgbXQ3OTI1X2NvZXhfaW5mb2Agb25seSByZWFkcyBleGFjdGx5IHRoYXQgbWFueSBieXRlcy4gYHJlc3BfdHlwZWAgaXMgYWxzbyBvbmx5IGFjY2Vzc2VkIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBwb3NpdGl2ZSBsZW5ndGgsIG1lYW5pbmcgaXQgd2FzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdywgc2VudCB0byB0aGUgZGV2aWNlLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIG1lbW9yeSBjb3JydXB0aW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNDgyYTg5YTVkZTFlMWYxM2I1YzliNmZhZjcxZWY2MDViZWZjZGM2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDI6MjI6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcbmluZGV4IGQwMWZmNDlkZTQ3YWYuLjlhNWVhMTJiNzZjNzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9kZWJ1Z2ZzLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2RlYnVnZnMuY1xuQEAgLTI4Niw2ICsyODYsMzQgQEAgc3RhdGljIGludCBtdDc5MjVfY2hpcF9yZXNldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxuIFxuIERFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX3Jlc2V0LCBOVUxMLCBtdDc5MjVfY2hpcF9yZXNldCwgXCIlbGxkXFxuXCIpO1xuIFxuK3N0YXRpYyBpbnRcbittdDc5MjVfY29leF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcbit7XG4rI2RlZmluZSBNVDc5MjVfQ0hJUF9DT05GSUdfUkVTUF9TSVpFXHQzMjBcbitcdHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocy1cdTAwM2Vwcml2YXRlKTtcbitcdHU4IHJlc3BbTVQ3OTI1X0NISVBfQ09ORklHX1JFU1BfU0laRV0sIHJlc3BfdHlwZTtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRtdDc5MnhfbXV0ZXhfYWNxdWlyZShkZXYpO1xuK1x0cmV0ID0gbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShkZXYsIFwiY29leEJ3Y0dldE1vZGVJbmZvIDBcIixcbitcdFx0XHRcdFx0ICAgXHUwMDI2cmVzcF90eXBlLCByZXNwLCBzaXplb2YocmVzcCkpO1xuK1x0bXQ3OTJ4X211dGV4X3JlbGVhc2UoZGV2KTtcbitcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoIXJldClcbitcdFx0c2VxX3B1dHMocywgXCJubyByZXBseVxcblwiKTtcbitcdGVsc2UgaWYgKHJlc3BfdHlwZSA9PSBDSElQX0NPTkZJR19UWVBFX0FTQ0lJKVxuK1x0XHRzZXFfcHJpbnRmKHMsIFwiJS4qc1xcblwiLCByZXQsIHJlc3ApO1xuK1x0ZWxzZVxuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXQ7IGkgKz0gMTYpXG4rXHRcdFx0c2VxX3ByaW50ZihzLCBcIiUwNHg6ICUqcGhcXG5cIiwgaSxcbitcdFx0XHRcdCAgIG1pbl90KGludCwgMTYsIHJldCAtIGkpLCByZXNwICsgaSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IG10NzkyNV9pbml0X2RlYnVnZnMoc3RydWN0IG10NzkyeF9kZXYgKmRldilcbiB7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkaXI7XG5AQCAtMzA5LDYgKzMzNyw4IEBAIGludCBtdDc5MjVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiaWRsZS10aW1lb3V0XCIsIDA2MDAsIGRpciwgZGV2LFxuIFx0XHRcdCAgICBcdTAwMjZmb3BzX3BtX2lkbGVfdGltZW91dCk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiY2hpcF9yZXNldFwiLCAwNjAwLCBkaXIsIGRldiwgXHUwMDI2Zm9wc19yZXNldCk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LVx1MDAzZW10NzYuZGV2LCBcImNvZXhfaW5mb1wiLCBkaXIsXG4rXHRcdFx0XHQgICAgbXQ3OTI1X2NvZXhfaW5mbyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LVx1MDAzZW10NzYuZGV2LCBcInJ1bnRpbWVfcG1fc3RhdHNcIiwgZGlyLFxuIFx0XHRcdFx0ICAgIG10NzkyeF9wbV9zdGF0cyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiZGVlcC1zbGVlcFwiLCAwNjAwLCBkaXIsIGRldiwgXHUwMDI2Zm9wc19kcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuY1xuaW5kZXggZmEyOWM0ODZhNDU1My4uZTYzMTZjZWExODY1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuY1xuQEAgLTExNjAsNiArMTE2MCw4MSBAQCBpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQpXG4gXHRcdFx0XHQgXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgZmFsc2UpO1xuIH1cbiBcbitpbnQgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBjb25zdCBjaGFyICpjbWQsXG4rXHRcdFx0XHQgdTggKnJlc3BfdHlwZSwgdm9pZCAqcmVzcCwgdTE2IHJlc3Bfc2l6ZSlcbit7XG4rXHR1MTYgbGVuID0gc3RybGVuKGNtZCk7XG4rXHRzdHJ1Y3Qge1xuK1x0XHR1OCBfcnN2WzRdO1xuK1x0XHRfX2xlMTYgdGFnO1xuK1x0XHRfX2xlMTYgbGVuO1xuK1x0XHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIGNvbmZpZztcbitcdH0gX19wYWNrZWQgcmVxID0ge1xuK1x0XHQudGFnID0gY3B1X3RvX2xlMTYoVU5JX0NISVBfQ09ORklHX0NISVBfQ0ZHKSxcbitcdFx0LmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihyZXEpIC0gNCksXG4rXHRcdC5jb25maWcgPSB7XG4rXHRcdFx0LnJlc3BfdHlwZSA9IDAsXG4rXHRcdFx0LnR5cGUgPSBDSElQX0NPTkZJR19UWVBFX0FTQ0lJLFxuK1x0XHRcdC5kYXRhX3NpemUgPSBjcHVfdG9fbGUxNihsZW4pLFxuK1x0XHR9LFxuK1x0fTtcbitcdGNvbnN0IHUxNiBoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB0bHYpICtcbitcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZywgZGF0YSk7XG4rXHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnICpjZmc7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghbGVuIHx8IGxlbiBcdTAwM2U9IHNpemVvZihyZXEuY29uZmlnLmRhdGEpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG1lbWNweShyZXEuY29uZmlnLmRhdGEsIGNtZCwgbGVuKTtcbitcbitcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoQ0hJUF9DT05GSUcpLFxuK1x0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIHNraXAgdGhlIGZpeGVkIGZpZWxkIG9mIHRoZSBldmVudCwgdGhlIFRMVnMgZm9sbG93IGl0ICovXG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgNCkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdHNrYl9wdWxsKHNrYiwgNCk7XG4rXG4rXHRyZXQgPSAtRU5PRU5UO1xuK1x0d2hpbGUgKHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IHRsdikpIHtcbitcdFx0c3RydWN0IHRsdiAqdGx2ID0gKHN0cnVjdCB0bHYgKilza2ItXHUwMDNlZGF0YTtcbitcdFx0dTE2IHRsdl9sZW4gPSBsZTE2X3RvX2NwdSh0bHYtXHUwMDNlbGVuKTtcbitcdFx0dTE2IGRhdGFfc2l6ZTtcbitcbitcdFx0aWYgKHRsdl9sZW4gXHUwMDNjIHNpemVvZigqdGx2KSB8fCB0bHZfbGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAobGUxNl90b19jcHUodGx2LVx1MDAzZXRhZykgIT0gVU5JX0NISVBfQ09ORklHX0NISVBfQ0ZHKSB7XG4rXHRcdFx0c2tiX3B1bGwoc2tiLCB0bHZfbGVuKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAodGx2X2xlbiBcdTAwM2MgaGRyX2xlbilcbitcdFx0XHRicmVhaztcbitcbitcdFx0Y2ZnID0gKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKil0bHYtXHUwMDNlZGF0YTtcbitcdFx0ZGF0YV9zaXplID0gbGUxNl90b19jcHUoY2ZnLVx1MDAzZWRhdGFfc2l6ZSk7XG4rXHRcdGlmIChkYXRhX3NpemUgXHUwMDNlIHRsdl9sZW4gLSBoZHJfbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQqcmVzcF90eXBlID0gY2ZnLVx1MDAzZXJlc3BfdHlwZTtcbitcdFx0cmV0ID0gbWluX3QodTE2LCBkYXRhX3NpemUsIHJlc3Bfc2l6ZSk7XG4rXHRcdG1lbWNweShyZXNwLCBjZmctXHUwMDNlZGF0YSwgcmV0KTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rb3V0OlxuK1x0ZGV2X2tmcmVlX3NrYihza2IpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gaW50IG10NzkyNV9tY3Vfc2V0X2RlZXBfc2xlZXAoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgYm9vbCBlbmFibGUpXG4ge1xuIFx0Y2hhciBjbWRbMTZdO1xuQEAgLTM3NzIsNyArMzg0Nyw4IEBAIGludCBtdDc5MjVfbWN1X2ZpbGxfbWVzc2FnZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0dW5pX3R4ZC1cdTAwM2VvcHRpb24gPSBNQ1VfQ01EX1VOSV9FWFRfQUNLO1xuIFxuIFx0XHRpZiAoY21kID09IE1DVV9VTklfQ01EKEhJRl9DVFJMKSB8fFxuLVx0XHQgICAgY21kID09IE1DVV9VTklfQ01EKENISVBfQ09ORklHKSlcbitcdFx0ICAgIGNtZCA9PSBNQ1VfVU5JX0NNRChDSElQX0NPTkZJRykgfHxcbitcdFx0ICAgIGNtZCA9PSBNQ1VfVU5JX1FVRVJZKENISVBfQ09ORklHKSlcbiBcdFx0XHR1bmlfdHhkLVx1MDAzZW9wdGlvbiBcdTAwMjY9IH5NQ1VfQ01EX0FDSztcbiBcbiBcdFx0aWYgKG1jdV9jbWQgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfQ1RSTCB8fFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmhcbmluZGV4IDExZjllYWMxM2ZmYzYuLjJjZjM5NzFkOTg1M2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmhcbkBAIC0xMTksNiArMTE5LDE1IEBAIGVudW0ge1xuIFx0VU5JX0NISVBfQ09ORklHX05JQ19DQVBBID0gMHgzLFxuIH07XG4gXG4rLyogdHlwZS9yZXNwX3R5cGUgb2Ygc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyAqL1xuK2VudW0ge1xuK1x0Q0hJUF9DT05GSUdfVFlQRV9XT19SRVNQT05TRSxcbitcdENISVBfQ09ORklHX1RZUEVfTUVNOCxcbitcdENISVBfQ09ORklHX1RZUEVfTUVNMzIsXG4rXHRDSElQX0NPTkZJR19UWVBFX0FTQ0lJLFxuK1x0Q0hJUF9DT05GSUdfVFlQRV9CSU5BUlksXG4rfTtcbitcbiBlbnVtIHtcbiBcdFVOSV9CQU5EX0NPTkZJR19SQURJT19FTkFCTEUsXG4gXHRVTklfQkFORF9DT05GSUdfUlRTX1RIUkVTSE9MRCA9IDB4MDgsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaFxuaW5kZXggMzIxZTczMjM0N2YyZi4uZDBkYjVkOGRhZTQ4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaFxuQEAgLTI5NSw2ICsyOTUsOCBAQCBpbnQgbXQ3OTI1X21jdV9nZXRfcnhfcmF0ZShzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxuIGludCBtdDc5MjVfbWN1X2Z3X2xvZ18yX2hvc3Qoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggY3RybCk7XG4gdm9pZCBtdDc5MjVfbWN1X3J4X2V2ZW50KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCk7XG4raW50IG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgY29uc3QgY2hhciAqY21kLFxuK1x0XHRcdFx0IHU4ICpyZXNwX3R5cGUsIHZvaWQgKnJlc3AsIHUxNiByZXNwX3NpemUpO1xuIGludCBtdDc5MjVfbWN1X3NldF9yeGZpbHRlcihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MzIgZmlmLFxuIFx0XHRcdCAgICB1OCBiaXRfb3AsIHUzMiBiaXRfbWFwKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjIzOjU5LjYxODgyMjQwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjcyMDMxNjY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZXhpc3RlbmNlIEluZm9ybWF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgYGRlYnVnZnNgIGZpbGUsIGBjb2V4X2luZm9gLCB3aXRoaW4gdGhlIG10NzkyNSB3aXJlbGVzcyBkcml2ZXIuIFRoZSBwdXJwb3NlIHNlZW1zIHRvIGJlIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBNQ1UsIGZldGNoZWQgdmlhIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YC4gTGV0J3MgZGlnIGluLlxuXG5UaGUgYG10NzkyNV9jb2V4X2luZm9gIGZ1bmN0aW9uIGlzIHRoZSBjb3JlIG9mIHRoaXMuIEl0IGdyYWJzIGEgYG10NzkyeF9kZXZgIHN0cnVjdCwgY2FsbHMgYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLCBhbmQgdGhlbiBkaXNwbGF5cyB0aGUgcmVzdWx0LCBoYW5kbGluZyBBU0NJSSBvciByYXcgYnl0ZXMgZGVwZW5kaW5nIG9uIGByZXNwX3R5cGVgLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgYnVmZmVyIGByZXNwYCwgYSAzMjAtYnl0ZSBzdGFjayBhbGxvY2F0aW9uLiBJdCdzIHVuaW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGEgcG9pbnQgb2YgY29uY2VybiBmb3IgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBkZXBlbmRpbmcgb24gaG93IHRoZSByZXNwb25zZSBpcyBoYW5kbGVkIGFuZCBob3cgaXQgaXMgbGF0ZXIgYWNjZXNzZWQuXG5cbmBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBpcyB3aGF0IGZlZWRzIHRoaXMgYnVmZmVyLiBJdCBjb25zdHJ1Y3RzIGEgcmVxdWVzdCBhbmQgc2VuZHMgaXQgdG8gdGhlIE1DVS4gTm93LCB0aGlzIGByZXFgIHN0cnVjdCBoYXMgY2F1Z2h0IG15IGV5ZS4gSXQncyBpbml0aWFsaXplZCB3aXRoIGEgZGVzaWduYXRlZCBpbml0aWFsaXplciBsaXN0IChgPSB7IC4uLiB9YCkuIFRoZSBgX3Jzdls0XWAgbWVtYmVyLCBhbiB1bm5hbWVkIGFycmF5IG9mIDQgYnl0ZXMsIGlzbid0IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gdGhlIGxpc3QuIFRoaXMgcmFpc2VzIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIHRoaXMgaXMgcHJvcGVybHkgemVyb2VkIGFzIGV4cGVjdGVkLiBTaW5jZSB0aGVyZSBpcyBwYWRkaW5nLCBpdCBtYXkgbm90IGJlLiBBbHNvLCB0aGUgc3RydWN0IGlzIG1hcmtlZCBhcyBgX19wYWNrZWRgLiBTbywgdGhlcmUgc2hvdWxkbid0IGJlIHBhZGRpbmcsIGJ1dCBpcyB0aGF0IGhhbmRsZWQgc2FmZWx5P1xuXG5BY2NvcmRpbmcgdG8gdGhlIEMgc3RhbmRhcmQsIHBhcnRpYWwgaW5pdGlhbGl6YXRpb24gb2YgYSBzdHJ1Y3QgbWVhbnMgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtYmVycyBhcmUgemVyb2VkLiBIb3dldmVyLCBiZWNhdXNlIGByZXFgIGlzIGBfX3BhY2tlZGAgdGhpcyBuZWVkcyBkb3VibGUtY2hlY2tpbmcuIE5vdywgYHJlcS5jb25maWcuZGF0YWAgaXMgYW4gYXJyYXkgdGhhdCB3aWxsIGJlIGNvcGllZCBpbnRvLCBhbmQgdGhlIHJlc3QgaXMgemVyb2VkIGJ5IHRoZSBzdHJ1Y3QgaW5pdGlhbGl6ZXIsIGlmIGl0J3Mgbm90IHBhY2tlZC5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWdgLiBJdCBtdXN0IGJlIGRlZmluZWQgaW4gYSBoZWFkZXIsIGFuZCBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gbG9jYXRlIHRoYXQgc3RydWN0dXJlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmb3JtYXQgb2YgdGhlIHJlcXVlc3QgYW5kIHJlc3BvbnNlLCBzcGVjaWZpY2FsbHkgaG93IGBkYXRhX3NpemVgLCBgcmVzcF90eXBlYCBhbmQgYHR5cGVgIGFyZSBoYW5kbGVkLCB3aGljaCBtYXkgY29udGFpbiBjcml0aWNhbCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU5MCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjI1OjIyLjMzOTE0MzM3OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1ODQ0NjEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmM9MjA0Nz1pbnQgbXQ3Nl9jb25uYWNfbWN1X2NoaXBfY29uZmlnKHN0cnVjdCBtdDc2X2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmMtMjA0OC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuYzoyMDQ5OlxcdHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgcmVxID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmMtMjA1MC1cXHRcXHQucmVzcF90eXBlID0gMCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmM9MjA2MD1pbnQgbXQ3Nl9jb25uYWNfbWN1X3NldF9kZWVwX3NsZWVwKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBib29sIGVuYWJsZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5jLTIwNjEte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmM6MjA2MjpcXHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIHJlcSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5jLTIwNjMtXFx0XFx0LnJlc3BfdHlwZSA9IDAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oPTE4NTA9c3RydWN0IG10NzZfY29ubmFjX3R4X3Bvd2VyX2xpbWl0X3RsdiB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oLTE4NjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaDoxODY1OnN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgtMTg2Ni1cXHRfX2xlMTYgaWQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0xMTM5PWludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTExNDUtXFx0XFx0X19sZTE2IGxlbjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoxMTQ2OlxcdFxcdHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgY29uZmlnO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTExNDctXFx0fSBfX3BhY2tlZCByZXEgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0xMTYzPWludCBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKmNtZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTExNzAtXFx0XFx0X19sZTE2IGxlbjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoxMTcxOlxcdFxcdHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgY29uZmlnO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTExNzItXFx0fSBfX3BhY2tlZCByZXEgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMTgxLVxcdGNvbnN0IHUxNiBoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB0bHYpICtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoxMTgyOlxcdFxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnLCBkYXRhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoxMTgzOlxcdHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKmNmZztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMTg0LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMjIwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjEyMjE6XFx0XFx0Y2ZnID0gKHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKil0bHYtXFx1MDAzZWRhdGE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTIyMi1cXHRcXHRkYXRhX3NpemUgPSBsZTE2X3RvX2NwdShjZmctXFx1MDAzZWRhdGFfc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaD0xMTc9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaC0xMjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1Lmg6MTIyOi8qIHR5cGUvcmVzcF90eXBlIG9mIHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaC0xMjMtZW51bSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjI1OjI0LjU5NzYwMjA4N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTMyNDI0MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNVDc2IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgTVQ3NiBDb25uYWMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQuIExldCdzIHN0YXJ0IHdpdGggYSBrZXkgc3RydWN0dXJlLiBJJ20gdGhpbmtpbmcgSSdsbCBmaW5kIGEgbG90IG9mIHRoZSBpbml0aWFsIHNldHVwIHBhcmFtZXRlcnMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmhgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgc3RydWN0IG10NzZfY29ubmFjX2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGxvdy1kb3duIG9uIGhvdyB0aGUgQ29ubmFjIGhhcmR3YXJlIGlzIGluaXRpYWxpemVkIGFuZCB3aGF0IHNldHRpbmdzIGFyZSBiZWluZyB1c2VkLiBJIGV4cGVjdCB0byBzZWUgYWxsIHRoZSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9ucyBvZiBoYXJkd2FyZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNDgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyNToyOC4xMzAwMzQxMDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjkwNjYxNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG10NzZfY29ubmFjX2NvbmZpZyBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oPTE4NTA9c3RydWN0IG10NzZfY29ubmFjX3R4X3Bvd2VyX2xpbWl0X3RsdiB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oLTE4NjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2X2Nvbm5hY19tY3UuaDoxODY1OnN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWcge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmgtMTg2Ni1cXHRfX2xlMTYgaWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjI1OjMwLjc5OTEwNjg3N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA3NTY0NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNVDc2IENvbm5lY3Rpb24gTWFuYWdlcioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIE1lZGlhVGVrIHdpcmVsZXNzIGRyaXZlci4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZfY29ubmFjX21jdS5oYCAtIHNwZWNpZmljYWxseSwgbGV0J3Mgem9vbSBpbiBhcm91bmQgbGluZSAxODY1LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBkZWZpbml0aW9ucyBvciBzdHJ1Y3R1cmVzIGluIHRoaXMgYXJlYS4gUHJvYmFibHkgcmVsYXRlZCB0byB0aGUgQ29ubmFjIE1DVSwgd2hpY2ggaGFuZGxlcyBhIGxvdCBvZiB0aGUgbG93LWxldmVsIHdpcmVsZXNzIGludGVyYWN0aW9uIG9uIHRoZXNlIGNoaXBzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBjb25uZWN0aW9ucywgZGlzY29ubmVjdGlvbnMsIHJvYW1pbmcsIGFuZCBtYXliZSBldmVuIGZpcm13YXJlLXJlbGF0ZWQgaW50ZXJhY3Rpb25zLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGF3YWl0IHVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzUxLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6MjU6MzUuMDA2Njc0MzNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Nl9jb25uYWNfbWN1LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MDpcXHRcXHQvKiBEVzMgKi9cXG4xODYxOlxcdFxcdHU4IGFscGhhMls0XTsgLyogcmVndWxhdG9yeV9yZXF1ZXN0LmFscGhhMiAqL1xcbjE4NjI6XFx0XFx0dTggcGFkMlszMl07XFxuMTg2MzpcXHR9IF9fcGFja2VkO1xcbjE4NjQ6XFx0XFxuMTg2NTpcXHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfY29uZmlnIHtcXG4xODY2OlxcdFxcdF9fbGUxNiBpZDtcXG4xODY3OlxcdFxcdHU4IHR5cGU7XFxuMTg2ODpcXHRcXHR1OCByZXNwX3R5cGU7XFxuMTg2OTpcXHRcXHRfX2xlMTYgZGF0YV9zaXplO1xcbjE4NzA6XFx0XFx0X19sZTE2IHJlc3Y7XFxuMTg3MTpcXHRcXHR1OCBkYXRhWzMyMF07XFxuMTg3MjpcXHR9IF9fcGFja2VkO1xcbjE4NzM6XFx0XFxuMTg3NDpcXHRzdHJ1Y3QgbXQ3Nl9jb25uYWNfbWN1X3VuaV9ldmVudCB7XFxuMTg3NTpcXHRcXHR1OCBjaWQ7XFxuMTg3NjpcXHRcXHR1OCBwYWRbM107XFxuMTg3NzpcXHRcXHRfX2xlMzIgc3RhdHVzOyAvKiAwOiBzdWNjZXNzLCBvdGhlcnM6IGZhaWwgKi9cXG4xODc4OlxcdH0gX19wYWNrZWQ7XFxuMTg3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6MjU6MzUuMDA2ODQxMTgxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MTAxODUyNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCBhbmQgUmVsYXRlZCBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiBpZGVudGlmeWluZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igc2VuZHMgdG8gdGhlIE1DVSwgcGFydGljdWxhcmx5IGdpdmVuIHRoZSBuZXcgY29kZSBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2guXG5cbkkgc2VlIHRoYXQgYHN0cnVjdCBtdDc2X2Nvbm5hY19jb25maWdgIGhhcyBhIGBkYXRhWzMyMF1gIG1lbWJlci4gVGhlIGNvcmUgb2YgdGhlIGNvbmNlcm4gcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGlzIGlzIGhhbmRsZWQsIGFsb25nIHdpdGggdGhlIHN0YWNrIHZhcmlhYmxlIGByZXNwYCBhbmQgYHJlc3BfdHlwZWAuXG5cbkluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCwgdGhlIGByZXFgIHN0cnVjdHVyZSBpcyB0aGUga2V5IHRvIHNlbmRpbmcgZGF0YSB0byB0aGUgTUNVLiBUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgdGhlIGNvbXBpbGVyJ3MgYmVoYXZpb3Igd2hlbiB1c2luZyB0aGUgYHsgLi4uIH1gIGluaXRpYWxpemVyIGlzIHRvIHplcm8taW5pdGlhbGl6ZSBhbnkgZmllbGRzIG5vdCBleHBsaWNpdGx5IGFzc2lnbmVkLiBUaGlzIG1lYW5zIGBfcnN2YCwgYGNvbmZpZy5pZGAsIGBjb25maWcucmVzdmAgYW5kIGNyaXRpY2FsbHksIGBjb25maWcuZGF0YWAsIHdpbGwgYmUgemVyb2VkLiBUaGVuLCBgbWVtY3B5YCBwb3B1bGF0ZXMgdGhlICpiZWdpbm5pbmcqIG9mIGBjb25maWcuZGF0YWAuIFRoZSBlbnRpcmUgYHJlcWAgc3RydWN0dXJlIGlzIHRoZW4gc2VudC4gVGhpcyBtZWFucyB0aGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHNlbnQgdG8gdGhlIE1DVS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBtdDc5MjVfY29leF9pbmZvYCwgd2hlcmUgdGhlIGByZXNwYCBhbmQgYHJlc3BfdHlwZWAgYXJlIHVzZWQuIGByZXNwYCBpcyB1bmluaXRpYWxpemVkIG9uIHRoZSBzdGFjay4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIHRoZW4gcG9wdWxhdGVzIGByZXNwYCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBvcHVsYXRlZCBpbiBgcmV0YC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhlIHN1YnNlcXVlbnQgYHNlcV9wcmludGZgIGNhbGxzIG9ubHkgcHJpbnQgYmFzZWQgb24gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiBjb3BpZWQgaW50byBgcmVzcGAuIFRoZSBjb2RlICpvbmx5KiByZWFkcyB0aGUgaW5pdGlhbGl6ZWQgcGFydHMgb2YgYHJlc3BgLlxuXG5UaGUgY3J1Y2lhbCBiaXQsIHRoZXJlZm9yZSwgaXMgdGhlIGNvZGUgaW4gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgLiBJZiB0aGUgcm91dGluZSBmaW5kcyB0aGUgYXBwcm9wcmlhdGUgdGFnIHdpdGhpbiB0aGUgcmVjZWl2ZWQgZGF0YSwgaXQgY29waWVzIGRhdGEgaW50byBgcmVzcGAgKHVwIHRvIGByZXNwX3NpemVgKSBhbmQgc2V0cyBgcmV0YCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4gSWYgdGhlIHJvdXRpbmUgZG9lcyBub3QgZmluZCB0aGUgdGFnLCBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIHBhdGggKmVuc3VyZXMqIGByZXRgIHJlcHJlc2VudHMgdGhlIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gdG8gYHJlc3BgLiBUaGVyZSdzIG5vIHNjZW5hcmlvIHdoZXJlIGByZXQgXHUwMDNlIDBgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBieXRlcyB3ZXJlbid0IGluaXRpYWxpemVkLlxuXG5JIHRoZW4gd2VudCBiYWNrIHRvIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnYCB0byByZS1ldmFsdWF0ZSBpdCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbmV3IHBhdGNoLiBJdCBzdGlsbCBzZWVtcyBmaW5lLCBiZWNhdXNlIHRoZSBzdHJ1Y3QgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZXN0IGlzIHplcm9lZC5cblxuU28sIGxldCdzIGRvdWJsZSBjaGVjay4gYHJlcWAgaXMgY29tcGxldGVseSBpbml0aWFsaXplZC4gTm90aGluZyBpcyBzZW50IHVuaW5pdGlhbGl6ZWQgdG8gdGhlIE1DVS4gVGhlIHJldHVybmVkIGByZXRgIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2YgaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gYHJlc3BgLiBgcmVzcF90eXBlYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdGhlIHVzZS4gVGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlIGlzIGNoZWNrZWQgZm9yIHNpemVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgdGhlIEtNU0FOIHJ1bGVzOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6IE5vLCB3ZSBhcmVuJ3QgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE6IE5vLCBhbGwgdmFyaWFibGVzIHVzZWQgaW4gY29udHJvbCBmbG93IGFyZSBpbml0aWFsaXplZCBjb3JyZWN0bHkuXG4zLiAgQWxsb2NhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZDogTm8sIHRoZSBzdGFjayBidWZmZXIgYHJlc3BgIGlzIG9ubHkgcmVhZCB1cCB0byB0aGUgaW5pdGlhbGl6ZWQgYnl0ZXMuXG40LiAgQm91bmRzIGNoZWNrcyB0aGF0IGFsbG93IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzczogVGhlIGxvZ2ljIGluIGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YCB2ZXJpZmllcyB0aGUgc2l6ZXMuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU49ZmFsc2VgIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjkwLCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjoyNjowMS4xMDg2OTY4NDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGVidWdmcyBlbnRyeSBgY29leF9pbmZvYCBhbmQgYSBmdW5jdGlvbiBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAgdG8gcXVlcnkgdGhlIE1DVS4gVGhlIGxvY2FsIGByZXFgIHN0cnVjdHVyZSB1c2VkIHRvIHNlbmQgdGhlIHF1ZXJ5IGlzIHBhcnRpYWxseSBpbml0aWFsaXplZCB3aXRoIGEgc3RydWN0IGluaXRpYWxpemVyLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGNvbXBpbGVyIHplcm8taW5pdGlhbGl6ZXMgYWxsIHJlbWFpbmluZyBmaWVsZHMgYW5kIHBhZGRpbmcuIFRoZSBgcmVzcGAgYnVmZmVyIGFuZCBgcmVzcF90eXBlYCB2YXJpYWJsZSBhcmUgcG9wdWxhdGVkIGJ5IGBtdDc5MjVfbWN1X2NoaXBfY29uZmlnX3F1ZXJ5YC4gVGhlIGZ1bmN0aW9uIGNvcnJlY3RseSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGludG8gYHJlc3BgLCBhbmQgdGhlIGNhbGxlciBgbXQ3OTI1X2NvZXhfaW5mb2Agb25seSByZWFkcyBleGFjdGx5IHRoYXQgbWFueSBieXRlcy4gYHJlc3BfdHlwZWAgaXMgYWxzbyBvbmx5IGFjY2Vzc2VkIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBwb3NpdGl2ZSBsZW5ndGgsIG1lYW5pbmcgaXQgd2FzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdywgc2VudCB0byB0aGUgZGV2aWNlLCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIG1lbW9yeSBjb3JydXB0aW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRlYnVnZnMgZW50cnkgYGNvZXhfaW5mb2AgYW5kIGEgZnVuY3Rpb24gYG10NzkyNV9tY3VfY2hpcF9jb25maWdfcXVlcnlgIHRvIHF1ZXJ5IHRoZSBNQ1UuIFRoZSBsb2NhbCBgcmVxYCBzdHJ1Y3R1cmUgdXNlZCB0byBzZW5kIHRoZSBxdWVyeSBpcyBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHN0cnVjdCBpbml0aWFsaXplciwgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjb21waWxlciB6ZXJvLWluaXRpYWxpemVzIGFsbCByZW1haW5pbmcgZmllbGRzIGFuZCBwYWRkaW5nLiBUaGUgYHJlc3BgIGJ1ZmZlciBhbmQgYHJlc3BfdHlwZWAgdmFyaWFibGUgYXJlIHBvcHVsYXRlZCBieSBgbXQ3OTI1X21jdV9jaGlwX2NvbmZpZ19xdWVyeWAuIFRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBpbnRvIGByZXNwYCwgYW5kIHRoZSBjYWxsZXIgYG10NzkyNV9jb2V4X2luZm9gIG9ubHkgcmVhZHMgZXhhY3RseSB0aGF0IG1hbnkgYnl0ZXMuIGByZXNwX3R5cGVgIGlzIGFsc28gb25seSBhY2Nlc3NlZCB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9zaXRpdmUgbGVuZ3RoLCBtZWFuaW5nIGl0IHdhcyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3csIHNlbnQgdG8gdGhlIGRldmljZSwgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBtZW1vcnkgY29ycnVwdGlvbnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowldxt4[1] Phase: Succeeded StartedAt: 2026-08-10 02:26:13 +0000 UTC FinishedAt: 2026-08-10 02:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 02:26:13 +0000 UTC FinishedAt: 2026-08-10 02:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2] Phase: Succeeded StartedAt: 2026-08-10 02:26:13 +0000 UTC FinishedAt: 2026-08-10 03:06:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:26:13 +0000 UTC FinishedAt: 2026-08-10 03:06:23 +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":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:26:13 +0000 UTC FinishedAt: 2026-08-10 02:26:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:26:13 +0000 UTC FinishedAt: 2026-08-10 02:26:18 +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":["MT7925U","MAC80211","USB","DEBUG_FS"],"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-workflowldxt4/series-workflowldxt4-convert-artifact-24230531/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:26:23 +0000 UTC FinishedAt: 2026-08-10 02:42:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:26:23 +0000 UTC FinishedAt: 2026-08-10 02:42:47 +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:*11abef4e-9ea1-4dcf-be2f-0a5a6a01ab9f,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-workflowldxt4/series-workflowldxt4-convert-artifact-24230531/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": "9deacae7-8c89-4633-9116-c761fed63632", "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-workflowldxt4/series-workflowldxt4-build-action-2409917169/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:26:23 +0000 UTC FinishedAt: 2026-08-10 02:42:37 +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:*11abef4e-9ea1-4dcf-be2f-0a5a6a01ab9f,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-workflowldxt4/series-workflowldxt4-convert-artifact-24230531/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": "9deacae7-8c89-4633-9116-c761fed63632", "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-workflowldxt4/series-workflowldxt4-build-action-2409917169/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:42:47 +0000 UTC FinishedAt: 2026-08-10 02:42:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:42:47 +0000 UTC FinishedAt: 2026-08-10 02:42:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:42:47 +0000 UTC FinishedAt: 2026-08-10 02:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:42:47 +0000 UTC FinishedAt: 2026-08-10 02:42:52 +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":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-workflowldxt4/series-workflowldxt4-convert-artifact-3722767930/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:42:57 +0000 UTC FinishedAt: 2026-08-10 02:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:42:57 +0000 UTC FinishedAt: 2026-08-10 02:44:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9deacae7-8c89-4633-9116-c761fed63632,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-workflowldxt4/series-workflowldxt4-build-action-2409917169/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-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:44:58 +0000 UTC FinishedAt: 2026-08-10 02:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:44:58 +0000 UTC FinishedAt: 2026-08-10 02:44:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:44:58 +0000 UTC FinishedAt: 2026-08-10 03:01:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:44:58 +0000 UTC FinishedAt: 2026-08-10 03:01:32 +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:*11abef4e-9ea1-4dcf-be2f-0a5a6a01ab9f,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-workflowldxt4/series-workflowldxt4-convert-artifact-3722767930/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": "6d0fc3cf-bd03-43a1-8e9f-16960b177205", "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-workflowldxt4/series-workflowldxt4-build-action-1897110686/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 02:44:58 +0000 UTC FinishedAt: 2026-08-10 03:01:22 +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:*11abef4e-9ea1-4dcf-be2f-0a5a6a01ab9f,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-workflowldxt4/series-workflowldxt4-convert-artifact-3722767930/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": "6d0fc3cf-bd03-43a1-8e9f-16960b177205", "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-workflowldxt4/series-workflowldxt4-build-action-1897110686/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:01:32 +0000 UTC FinishedAt: 2026-08-10 03:01:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:01:32 +0000 UTC FinishedAt: 2026-08-10 03:01:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:01:32 +0000 UTC FinishedAt: 2026-08-10 03:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:01:32 +0000 UTC FinishedAt: 2026-08-10 03:03:15 +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:*6d0fc3cf-bd03-43a1-8e9f-16960b177205,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-workflowldxt4/series-workflowldxt4-build-action-1897110686/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-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:03:25 +0000 UTC FinishedAt: 2026-08-10 03:06:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:03:25 +0000 UTC FinishedAt: 2026-08-10 03:06:23 +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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"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:*9deacae7-8c89-4633-9116-c761fed63632,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d0fc3cf-bd03-43a1-8e9f-16960b177205,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-workflowldxt4/series-workflowldxt4-build-action-2409917169/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-workflowldxt4/series-workflowldxt4-build-action-1897110686/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:03:25 +0000 UTC FinishedAt: 2026-08-10 03:03:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:03:25 +0000 UTC FinishedAt: 2026-08-10 03:03:29 +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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"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-workflowldxt4/series-workflowldxt4-convert-artifact-1773185903/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:03:25 +0000 UTC FinishedAt: 2026-08-10 03:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:03:25 +0000 UTC FinishedAt: 2026-08-10 03:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:03:25 +0000 UTC FinishedAt: 2026-08-10 03:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:03:35 +0000 UTC FinishedAt: 2026-08-10 03:06:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowldxt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"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":["mt7925_mcu_chip_config_query","mt7925_coex_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","MAC80211","USB","DEBUG_FS"],"series_id":"b4657700-aa69-472b-a5ed-bd2a9c0d5811","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-10 03:03:35 +0000 UTC FinishedAt: 2026-08-10 03:06:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9deacae7-8c89-4633-9116-c761fed63632,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d0fc3cf-bd03-43a1-8e9f-16960b177205,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-workflowldxt4/series-workflowldxt4-build-action-2409917169/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-workflowldxt4/series-workflowldxt4-build-action-1897110686/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-workflowldxt4/series-workflowldxt4-convert-artifact-1773185903/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,}