Name: series-workflowq6gcl Phase: Succeeded StartedAt: 2026-09-11 07:44:34 +0000 UTC FinishedAt: 2026-09-11 08:53:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[0] Phase: Succeeded StartedAt: 2026-09-11 07:44:34 +0000 UTC FinishedAt: 2026-09-11 08:06:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 07:44:34 +0000 UTC FinishedAt: 2026-09-11 08:06:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IP_ADVANCED_ROUTER", "IP_ROUTE_MULTIPATH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IP_ADVANCED_ROUTER", "IP_ROUTE_MULTIPATH" ], "series_id": "b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fib_select_multipath", "fib_select_path", "ip_mkroute_input" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBfQURWQU5DRURfUk9VVEVSJiMzNDssCiAgICAmIzM0O0lQX1JPVVRFX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpYl9zZWxlY3RfbXVsdGlwYXRoJiMzNDssCiAgICAmIzM0O2ZpYl9zZWxlY3RfcGF0aCYjMzQ7LAogICAgJiMzNDtpcF9ta3JvdXRlX2lucHV0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggd3JhcHMgdGhlIHJlYWQgb2YgYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJgIHdpdGggYFJFQURfT05DRSgpYCBpbiBgZmliX3NlbGVjdF9tdWx0aXBhdGgoKWAgdG8gYWRkcmVzcyBjb25jdXJyZW50IGRhdGEtcmFjZSBhY2Nlc3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgbWVtb3J5IGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgc3RydWN0IHBhZGRpbmcsIG9yIGJ1ZmZlciBhbGxvY2F0aW9ucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBSRUFEX09OQ0UoKSBhbm5vdGF0aW9ucyB3aGVuIHJlYWRpbmcgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkciBpbiBmaWJfc2VsZWN0X211bHRpcGF0aCgpIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgY29tcGlsZXIgdGVhcmluZyBkdXJpbmcgY29uY3VycmVudCByb3V0ZSBzZWxlY3Rpb24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBJUHY0IG11bHRpcGF0aCByb3V0aW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDAwNmIxMjE4ZjEwNTA2ZWIyNGY3ZjMyZTQxYTQ1NDIxYWRlNzM5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjA1OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuaW5kZXggN2EzNjJmMmUyYzJiZC4uODg1YzZmYWU1MjMyNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5AQCAtMjIwNCw3ICYjNDM7MjIwNCw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4gXHRcdCAgICAodXNlX25laWdoIFx1MDAyNlx1MDAyNiAhZmliX2dvb2RfbmgobmV4dGhvcF9uaCkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2IG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHIgPT0gc2FkZHIpXG4mIzQzO1x0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2IFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcbiBcdFx0XHRuaF9zY29yZSAmIzQzOz0gMjtcbiBcdFx0aWYgKGhhc2ggXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcbiBcdFx0XHRuaF9zY29yZSYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OywKICAgICYjMzQ7SVBfUk9VVEVfTVVMVElQQVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmliX3NlbGVjdF9tdWx0aXBhdGgmIzM0OywKICAgICYjMzQ7ZmliX3NlbGVjdF9wYXRoJiMzNDssCiAgICAmIzM0O2lwX21rcm91dGVfaW5wdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBSRUFEX09OQ0UoKSBhbm5vdGF0aW9ucyB3aGVuIHJlYWRpbmcgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkciBpbiBmaWJfc2VsZWN0X211bHRpcGF0aCgpIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgY29tcGlsZXIgdGVhcmluZyBkdXJpbmcgY29uY3VycmVudCByb3V0ZSBzZWxlY3Rpb24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBJUHY0IG11bHRpcGF0aCByb3V0aW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDAwNmIxMjE4ZjEwNTA2ZWIyNGY3ZjMyZTQxYTQ1NDIxYWRlNzM5MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA4OjA1OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCmluZGV4IDdhMzYyZjJlMmMyYmQuLjg4NWM2ZmFlNTIzMjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKQEAgLTIyMDQsNyAmIzQzOzIyMDQsNyBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLAogCQkgICAgKHVzZV9uZWlnaCAmYW1wOyZhbXA7ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoc2FkZHIgJmFtcDsmYW1wOyBuZXh0aG9wX25oLSZndDtuaF9zYWRkciA9PSBzYWRkcikKJiM0MzsJCWlmIChzYWRkciAmYW1wOyZhbXA7IFJFQURfT05DRShuZXh0aG9wX25oLSZndDtuaF9zYWRkcikgPT0gc2FkZHIpCiAJCQluaF9zY29yZSAmIzQzOz0gMjsKIAkJaWYgKGhhc2ggJmx0Oz0gbmhfdXBwZXJfYm91bmQpCiAJCQluaF9zY29yZSYjNDM7JiM0Mzs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBmaWJfc2VsZWN0X211bHRpcGF0aCoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCBhIHBhdGNoIGZvciB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGFtZDY0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGRpZmYuIExldCYjMzk7cyBzZWUuLi4gQWgsIGl0JiMzOTtzIG1vZGlmeWluZyBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGZ1bmN0aW9uLgoKVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGxpbmUgMjIwNCwgd2hlcmUgdGhleSYjMzk7dmUgcmVwbGFjZWQgYSBkaXJlY3QgY29tcGFyaXNvbiB3aXRoIGBSRUFEX09OQ0VgLiBJbnR1aXRpdmVseSwgdGhpcyBzdWdnZXN0cyB0aGVyZSBtaWdodCBiZSBtZW1vcnkgc3luY2hyb25pemF0aW9uIGNvbmNlcm5zLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgY29tcGFyaW5nIGBuZXh0aG9wX25oLSZndDtuaF9zYWRkcmAgZGlyZWN0bHkgd2l0aCBgc2FkZHJgLiBOb3cgaXQmIzM5O3MgdXNpbmcgYFJFQURfT05DRWAuIFRoYXQgdGVsbHMgbWUgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIHNoYXJlZCBtZW1vcnksIHBvc3NpYmx5IG11bHRpLXRocmVhZGVkIGFjY2VzcyB0byBgbmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHJgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgdGhlIGNvbnRleHQgb2YgaG93IGBuZXh0aG9wX25oLSZndDtuaF9zYWRkcmAgaXMgYmVpbmcgd3JpdHRlbiBhbmQgcmVhZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgYFJFQURfT05DRWAgaXMgbmVjZXNzYXJ5IGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3MgcHVsbCB1cCB0aGUgY29kZSB1c2luZyBgcmVhZC1maWxlYCBhbmQgY2hlY2sgYXJvdW5kIGxpbmUgMjIwNCBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxODA6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNClcbjIxODE6XHR7XG4yMTgyOlx0XHRzdHJ1Y3QgZmliX2luZm8gKmZpID0gcmVzLVx1MDAzZWZpO1xuMjE4MzpcdFx0c3RydWN0IG5ldCAqbmV0ID0gZmktXHUwMDNlZmliX25ldDtcbjIxODQ6XHRcdGJvb2wgdXNlX25laWdoO1xuMjE4NTpcdFx0aW50IHNjb3JlID0gLTE7XG4yMTg2Olx0XHRfX2JlMzIgc2FkZHI7XG4yMTg3Olx0XG4yMTg4Olx0XHRpZiAodW5saWtlbHkocmVzLVx1MDAzZWZpLVx1MDAzZW5oKSkge1xuMjE4OTpcdFx0XHRuZXh0aG9wX3BhdGhfZmliX3Jlc3VsdChyZXMsIGhhc2gpO1xuMjE5MDpcdFx0XHRyZXR1cm47XG4yMTkxOlx0XHR9XG4yMTkyOlx0XG4yMTkzOlx0XHR1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX2ZpYl9tdWx0aXBhdGhfdXNlX25laWdoKTtcbjIxOTQ6XHRcdHNhZGRyID0gZmw0ID8gZmw0LVx1MDAzZXNhZGRyIDogMDtcbjIxOTU6XHRcbjIxOTY6XHRcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuMjE5NzpcdFx0XHRpbnQgbmhfdXBwZXJfYm91bmQsIG5oX3Njb3JlID0gMDtcbjIxOTg6XHRcbjIxOTk6XHRcdFx0LyogTmV4dGhvcHMgd2l0aG91dCBhIGNhcnJpZXIgYXJlIGFzc2lnbmVkIGFuIHVwcGVyIGJvdW5kIG9mXG4yMjAwOlx0XHRcdCAqIG1pbnVzIG9uZSB3aGVuIFwmIzM0O2lnbm9yZV9yb3V0ZXNfd2l0aF9saW5rZG93blwmIzM0OyBpcyBzZXQuXG4yMjAxOlx0XHRcdCAqL1xuMjIwMjpcdFx0XHRuaF91cHBlcl9ib3VuZCA9IGF0b21pY19yZWFkKFx1MDAyNm5leHRob3BfbmgtXHUwMDNlZmliX25oX3VwcGVyX2JvdW5kKTtcbjIyMDM6XHRcdFx0aWYgKG5oX3VwcGVyX2JvdW5kID09IC0xIHx8XG4yMjA0Olx0XHRcdCAgICAodXNlX25laWdoIFx1MDAyNlx1MDAyNiAhZmliX2dvb2RfbmgobmV4dGhvcF9uaCkpKVxuMjIwNTpcdFx0XHRcdGNvbnRpbnVlO1xuMjIwNjpcdFxuMjIwNzpcdFx0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2IFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcbjIyMDg6XHRcdFx0XHRuaF9zY29yZSAmIzQzOz0gMjtcbjIyMDk6XHRcdFx0aWYgKGhhc2ggXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcbjIyMTA6XHRcdFx0XHRuaF9zY29yZSYjNDM7JiM0Mzs7XG4yMjExOlx0XHRcdGlmIChzY29yZSBcdTAwM2Mgbmhfc2NvcmUpIHtcbjIyMTI6XHRcdFx0XHRyZXMtXHUwMDNlbmhfc2VsID0gbmhzZWw7XG4yMjEzOlx0XHRcdFx0cmVzLVx1MDAzZW5oYyA9IFx1MDAyNm5leHRob3BfbmgtXHUwMDNlbmhfY29tbW9uO1xuMjIxNDpcdFx0XHRcdGlmIChuaF9zY29yZSA9PSAzIHx8ICghc2FkZHIgXHUwMDI2XHUwMDI2IG5oX3Njb3JlID09IDEpKVxuMjIxNTpcdFx0XHRcdFx0cmV0dXJuO1xuMjIxNjpcdFx0XHRcdHNjb3JlID0gbmhfc2NvcmU7XG4yMjE3Olx0XHRcdH1cbjIyMTg6XHRcbjIyMTk6XHRcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcbjIyMjA6XHR9XG4yMjIxOlx0I2VuZGlmXG4yMjIyOlx0XG4yMjIzOlx0dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuMjIyNDpcdFx0XHQgICAgIHN0cnVjdCBmbG93aTQgKmZsNCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjIyMjU6XHR7XG4yMjI2Olx0XHRpZiAoZmw0LVx1MDAzZWZsb3dpNF9vaWYpXG4yMjI3Olx0XHRcdGdvdG8gY2hlY2tfc2FkZHI7XG4yMjI4Olx0XG4yMjI5Olx0I2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzM5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIHpvb20gaW4gb24gbGluZSAyMTgwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBzcGVjaWZpYyBwb2ludCBpbiB0aGUgY29uZmlndXJhdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSBzb21lIGNyaXRpY2FsIGxvZ2ljIHJlbGF0ZWQgdG8gYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBpcyBpbXBsZW1lbnRlZC4gSSB3YW50IHRvIHNlZSB0aGUgYnJvYWRlciBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZ3VhcmRzIGFuZCBob3cgdGhleSBhcmUgaW1wYWN0aW5nIHRoaXMgZnVuY3Rpb24uIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIGV4YW1pbmUgbGluZXMgMjE2MCB0byAyMjAwLiBUaGlzIHNob3VsZCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBkZXRlcm1pbmUgd2hhdCBjb25maWd1cmF0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGluZywgaW5mbHVlbmNpbmcsIG9yIGNvbnRyb2xsaW5nIHRoZSBleGVjdXRpb24gb2YgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBvciBtYWNyb3MgdGhhdCBtaWdodCBiZSBlbmFibGluZywgZGlzYWJsaW5nLCBvciBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIHRoaXMgZnVuY3Rpb24gYmFzZWQgb24gdGhlIHN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTYwOlx0XG4yMTYxOlx0XHRcdGlmIChsaWtlbHkobmgtXHUwMDNlZmliX25oX2d3X2ZhbWlseSA9PSBBRl9JTkVUKSlcbjIxNjI6XHRcdFx0XHRuID0gX19pcHY0X25laWdoX2xvb2t1cF9ub3JlZihuaC1cdTAwM2VmaWJfbmhfZGV2LFxuMjE2MzpcdFx0XHRcdFx0XHRcdCAgIChfX2ZvcmNlIHUzMiluaC1cdTAwM2VmaWJfbmhfZ3c0KTtcbjIxNjQ6XHRcdFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2XG4yMTY1Olx0XHRcdFx0IG5oLVx1MDAzZWZpYl9uaF9nd19mYW1pbHkgPT0gQUZfSU5FVDYpXG4yMTY2Olx0XHRcdFx0biA9IF9faXB2Nl9uZWlnaF9sb29rdXBfbm9yZWYobmgtXHUwMDNlZmliX25oX2RldixcbjIxNjc6XHRcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZuaC1cdTAwM2VmaWJfbmhfZ3c2KTtcbjIxNjg6XHRcdFx0ZWxzZVxuMjE2OTpcdFx0XHRcdG4gPSBOVUxMO1xuMjE3MDpcdFx0XHRpZiAobilcbjIxNzE6XHRcdFx0XHRzdGF0ZSA9IFJFQURfT05DRShuLVx1MDAzZW51ZF9zdGF0ZSk7XG4yMTcyOlx0XG4yMTczOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjE3NDpcdFx0fVxuMjE3NTpcdFxuMjE3NjpcdFx0cmV0dXJuICEhKHN0YXRlIFx1MDAyNiBOVURfVkFMSUQpO1xuMjE3NzpcdH1cbjIxNzg6XHRcbjIxNzk6XHR2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxuMjE4MDpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KVxuMjE4MTpcdHtcbjIxODI6XHRcdHN0cnVjdCBmaWJfaW5mbyAqZmkgPSByZXMtXHUwMDNlZmk7XG4yMTgzOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBmaS1cdTAwM2VmaWJfbmV0O1xuMjE4NDpcdFx0Ym9vbCB1c2VfbmVpZ2g7XG4yMTg1Olx0XHRpbnQgc2NvcmUgPSAtMTtcbjIxODY6XHRcdF9fYmUzMiBzYWRkcjtcbjIxODc6XHRcbjIxODg6XHRcdGlmICh1bmxpa2VseShyZXMtXHUwMDNlZmktXHUwMDNlbmgpKSB7XG4yMTg5Olx0XHRcdG5leHRob3BfcGF0aF9maWJfcmVzdWx0KHJlcywgaGFzaCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA5NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBNdWx0aXBhdGggUm91dGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAgaW4gcmVsYXRpb24gdG8gc29tZSBjb2RlIGFyb3VuZCBsaW5lIDIxNzkuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBsb2NhdGUgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaXRzZWxmIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgd2FudCB0byBzZWUgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBndWFyZGVkLCBwcm9iYWJseSB0byB1bmRlcnN0YW5kIHdoYXQgZnVuY3Rpb25hbGl0eSBpdCBlbmFibGVzIG9yIGRpc2FibGVzLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgdGhhdCByZWxhdGVzIHRvIHRoZSBjb2RlIGluIHRoYXQgdmljaW5pdHkgb2YgdGhlIGZpbGUuIEtub3dpbmcgaXRzIGxvY2F0aW9uIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHJvdXRpbmcgbG9naWMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgbXkgc3RhcnRpbmcgcG9pbnQgdG8gZGVjaXBoZXIgdGhlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMjA6XHRcdFx0XHRjb250aW51ZTtcbjIxMjE6XHRcbjIxMjI6XHRcdFx0cHJldl9maSA9IGZpO1xuMjEyMzpcdFx0XHRhbGl2ZSA9IDA7XG4yMTI0Olx0XHRcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuMjEyNTpcdFx0XHRcdGlmICghKG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNiBuaF9mbGFncykpIHtcbjIxMjY6XHRcdFx0XHRcdGFsaXZlJiM0MzsmIzQzOztcbjIxMjc6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjEyODpcdFx0XHRcdH1cbjIxMjk6XHRcdFx0XHRpZiAoIW5leHRob3BfbmgtXHUwMDNlZmliX25oX2RldiB8fFxuMjEzMDpcdFx0XHRcdCAgICAhKG5leHRob3BfbmgtXHUwMDNlZmliX25oX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSlcbjIxMzE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjEzMjpcdFx0XHRcdGlmIChuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9kZXYgIT0gZGV2IHx8XG4yMTMzOlx0XHRcdFx0ICAgICFfX2luX2Rldl9nZXRfcnRubChkZXYpKVxuMjEzNDpcdFx0XHRcdFx0Y29udGludWU7XG4yMTM1Olx0XHRcdFx0YWxpdmUmIzQzOyYjNDM7O1xuMjEzNjpcdFx0XHRcdG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNj0gfm5oX2ZsYWdzO1xuMjEzNzpcdFx0XHRcdGNhbGxfZmliX25oX25vdGlmaWVycyhuZXh0aG9wX25oLCBGSUJfRVZFTlRfTkhfQUREKTtcbjIxMzg6XHRcdFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpXG4yMTM5Olx0XG4yMTQwOlx0XHRcdGlmIChhbGl2ZSBcdTAwM2UgMCkge1xuMjE0MTpcdFx0XHRcdGZpLVx1MDAzZWZpYl9mbGFncyBcdTAwMjY9IH5uaF9mbGFncztcbjIxNDI6XHRcdFx0XHRyZXQmIzQzOyYjNDM7O1xuMjE0MzpcdFx0XHR9XG4yMTQ0Olx0XG4yMTQ1Olx0XHRcdGZpYl9yZWJhbGFuY2UoZmkpO1xuMjE0NjpcdFx0fVxuMjE0NzpcdFxuMjE0ODpcdFx0cmV0dXJuIHJldDtcbjIxNDk6XHR9XG4yMTUwOlx0XG4yMTUxOlx0I2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcbjIxNTI6XHRzdGF0aWMgYm9vbCBmaWJfZ29vZF9uaChjb25zdCBzdHJ1Y3QgZmliX25oICpuaClcbjIxNTM6XHR7XG4yMTU0Olx0XHRpbnQgc3RhdGUgPSBOVURfUkVBQ0hBQkxFO1xuMjE1NTpcdFxuMjE1NjpcdFx0aWYgKG5oLVx1MDAzZWZpYl9uaF9zY29wZSA9PSBSVF9TQ09QRV9MSU5LKSB7XG4yMTU3Olx0XHRcdHN0cnVjdCBuZWlnaGJvdXIgKm47XG4yMTU4Olx0XG4yMTU5Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjIxNjA6XHRcbjIxNjE6XHRcdFx0aWYgKGxpa2VseShuaC1cdTAwM2VmaWJfbmhfZ3dfZmFtaWx5ID09IEFGX0lORVQpKVxuMjE2MjpcdFx0XHRcdG4gPSBfX2lwdjRfbmVpZ2hfbG9va3VwX25vcmVmKG5oLVx1MDAzZWZpYl9uaF9kZXYsXG4yMTYzOlx0XHRcdFx0XHRcdFx0ICAgKF9fZm9yY2UgdTMyKW5oLVx1MDAzZWZpYl9uaF9ndzQpO1xuMjE2NDpcdFx0XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTczCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIFBhdGNoIGZvciBEYXRhIFJhY2VzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIGl0IGRvd24gcGllY2UgYnkgcGllY2UuIEZpcnN0LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogd2hhdCBleGFjdGx5IGhhcyBjaGFuZ2VkPyBBaGEsIGl0IGxvb2tzIGxpa2UgYSBtb2RpZmljYXRpb24gaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCBmdW5jdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGUgcmVhZCBvZiBgbmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHJgLCB3aGljaCBoYXMgYmVlbiBhbHRlcmVkIHRvIHVzZSBgUkVBRF9PTkNFKG5leHRob3BfbmgtJmd0O25oX3NhZGRyKWAuIFRoaXMgc2NyZWFtcyBkYXRhIHJhY2UgcHJvdGVjdGlvbiEgSXQmIzM5O3MgbGlrZWx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgY29tcGlsZXIgdGVhcmluZyBpc3N1ZSB3aGVuIGNvbmN1cnJlbnRseSByZWFkaW5nIGBuaF9zYWRkcmAuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXMgdGhpcyBldmVuIHJlYWNoYWJsZSBjb2RlPyBHaXZlbiB0aGUgZmlsZSBhbmQgZnVuY3Rpb24gbmFtZSwgdGhpcyBpcyBkZWVwIHdpdGhpbiB0aGUgSVB2NCByb3V0aW5nIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbG9uZyB3aXRoIGBmaWJfc2VsZWN0X3BhdGhgIGFuZCBvdGhlcnMsIHNvIHRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlIHllcy4gSXQmIzM5O3MgdXNlZCB3aGVuIHN0YW5kYXJkIG5ldHdvcmtpbmcsIHJvdXRpbmcgc29ja2V0cywgbmV0bGluaywgb3IgcGFja2V0cyBhcmUgaW52b2x2ZWQuIElmIGBJUF9ST1VURV9NVUxUSVBBVEhgIGlzIGVuYWJsZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBydW5uaW5nLiBTbywgSSBoYXZlIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBgSVBfUk9VVEVfTVVMVElQQVRIYCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NjM9Y29uZmlnIElQX01VTFRJUExFX1RBQkxFU1xuLS1cbm5ldC9pcHY0L0tjb25maWctNzktXG5uZXQvaXB2NC9LY29uZmlnOjgwOmNvbmZpZyBJUF9ST1VURV9NVUxUSVBBVEhcbm5ldC9pcHY0L0tjb25maWctODEtXHRib29sIFwmIzM0O0lQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTQxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIElQdjQgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBpcyBgbmV0L2lwdjQvS2NvbmZpZ2AuIEl0JiMzOTtzIGEgS2NvbmZpZyBmaWxlLCBzbyBpdCBkZWZpbmVzIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhhdCBzdWJzeXN0ZW0uIExpbmUgODAuLi4gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3BlY2lmaWMgc3RhcnRpbmcgcG9pbnQsIHdoaWNoIG1lYW5zIEkgaGF2ZSBhIGdvb2QgaWRlYSBvZiAqd2hhdCogSSYjMzk7bSBsb29raW5nIGZvci4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB1c3VhbGx5IHNpdHMsIGFuZCBJJiMzOTtsbCBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkIGFuZCB3aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJiMzOTttIHdvcmtpbmcgb24uIFRoZSBnb2FsIGlzIHRvIGVpdGhlciB1bmRlcnN0YW5kIG9yIGlkZW50aWZ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdoYXRldmVyIHByb2JsZW0vdG9waWMgSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdFx0ICBSb3V0aW5nIGFuZCBUcmFmZmljIENvbnRyb2wgZG9jdW1lbnRhdGlvbiBhdFxuICA3NjpcdFx0ICBcdTAwM2NodHRwczovL2xhcnRjLm9yZy9ob3d0by9sYXJ0Yy5ycGRiLmh0bWxcdTAwM2VcbiAgNzc6XHRcbiAgNzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzk6XHRcbiAgODA6XHRjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIXG4gIDgxOlx0XHRib29sIFwmIzM0O0lQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFwmIzM0O1xuICA4MjpcdFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcbiAgODM6XHRcdGhlbHBcbiAgODQ6XHRcdCAgTm9ybWFsbHksIHRoZSByb3V0aW5nIHRhYmxlcyBzcGVjaWZ5IGEgc2luZ2xlIGFjdGlvbiB0byBiZSB0YWtlbiBpblxuICA4NTpcdFx0ICBhIGRldGVybWluaXN0aWMgbWFubmVyIGZvciBhIGdpdmVuIHBhY2tldC4gSWYgeW91IHNheSBZIGhlcmVcbiAgODY6XHRcdCAgaG93ZXZlciwgaXQgYmVjb21lcyBwb3NzaWJsZSB0byBhdHRhY2ggc2V2ZXJhbCBhY3Rpb25zIHRvIGEgcGFja2V0XG4gIDg3Olx0XHQgIHBhdHRlcm4sIGluIGVmZmVjdCBzcGVjaWZ5aW5nIHNldmVyYWwgYWx0ZXJuYXRpdmUgcGF0aHMgdG8gdHJhdmVsXG4gIDg4Olx0XHQgIGZvciB0aG9zZSBwYWNrZXRzLiBUaGUgcm91dGVyIGNvbnNpZGVycyBhbGwgdGhlc2UgcGF0aHMgdG8gYmUgb2ZcbiAgODk6XHRcdCAgZXF1YWwgXCYjMzQ7Y29zdFwmIzM0OyBhbmQgY2hvb3NlcyBvbmUgb2YgdGhlbSBpbiBhIG5vbi1kZXRlcm1pbmlzdGljIGZhc2hpb25cbiAgOTA6XHRcdCAgaWYgYSBtYXRjaGluZyBwYWNrZXQgYXJyaXZlcy5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgSVBfUk9VVEVfVkVSQk9TRVxuICA5MzpcdFx0Ym9vbCBcJiMzNDtJUDogdmVyYm9zZSByb3V0ZSBtb25pdG9yaW5nXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxuICA5NTpcdFx0aGVscFxuICA5NjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgd2hpY2ggaXMgcmVjb21tZW5kZWQsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIHByaW50XG4gIDk3Olx0XHQgIHZlcmJvc2UgbWVzc2FnZXMgcmVnYXJkaW5nIHRoZSByb3V0aW5nLCBmb3IgZXhhbXBsZSB3YXJuaW5ncyBhYm91dFxuICA5ODpcdFx0ICByZWNlaXZlZCBwYWNrZXRzIHdoaWNoIGxvb2sgc3RyYW5nZSBhbmQgY291bGQgYmUgZXZpZGVuY2Ugb2YgYW5cbiAgOTk6XHRcdCAgYXR0YWNrIG9yIGEgbWlzY29uZmlndXJlZCBzeXN0ZW0gc29tZXdoZXJlLiBUaGUgaW5mb3JtYXRpb24gaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBJUF9ST1VURV9NVUxUSVBBVEhgIG9wdGlvbiwgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgZGVwZW5kZW50IG9uIGBJUF9BRFZBTkNFRF9ST1VURVJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBkdWUgdG8gdGhlIG1vcmUgY29tcGxleCByb3V0aW5nIGNhcGFiaWxpdGllcyByZXF1aXJlZC4gVG8gY29uZmlybSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBJUF9BRFZBTkNFRF9ST1VURVJgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYG5ldC9pcHY0L0tjb25maWdgIHRvIHJldmlldyB0aGUgZGV0YWlscyBvbiBob3cgaXQgaXMgZGVmaW5lZC4gSXQmIzM5O3MgYSBxdWljayBqdW1wIHRvIHNlZSBleGFjdGx5IHdoYXQgZmVhdHVyZXMgYXJlIHdyYXBwZWQgYnkgYElQX0FEVkFOQ0VEX1JPVVRFUmAsIHRoYXQgd2lsbCBhbGxvdyBtZSB0byBhY2N1cmF0ZWx5IHJlYXNvbiB3aHkgYElQX1JPVVRFX01VTFRJUEFUSGAgbmVlZHMgaXQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGFzc2VzcyB3aGV0aGVyIHRoYXQgZGVwZW5kZW5jeSBpcyBhcHByb3ByaWF0ZSBpbiB0aGUgY29udGV4dCBJJiMzOTttIHdvcmtpbmcgaW4sIG9yIGlmIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHJlbGF4IGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NTpcdFxuICA0NjpcdFx0ICBlY2hvIDEgXHUwMDNlIC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1x1MDAzY2RldmljZVx1MDAzZS9ycF9maWx0ZXJcbiAgNDc6XHRcdCAgIG9yXG4gIDQ4Olx0XHQgIGVjaG8gMSBcdTAwM2UgL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL3JwX2ZpbHRlclxuICA0OTpcdFxuICA1MDpcdFx0ICBOb3RlIHRoYXQgc29tZSBkaXN0cmlidXRpb25zIGVuYWJsZSBpdCBpbiBzdGFydHVwIHNjcmlwdHMuXG4gIDUxOlx0XHQgIEZvciBkZXRhaWxzIGFib3V0IHJwX2ZpbHRlciBzdHJpY3QgYW5kIGxvb3NlIG1vZGUgcmVhZFxuICA1MjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XHUwMDNlLlxuICA1MzpcdFxuICA1NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOIGhlcmUuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIElQX0ZJQl9UUklFX1NUQVRTXG4gIDU3Olx0XHRib29sIFwmIzM0O0ZJQiBUUklFIHN0YXRpc3RpY3NcJiMzNDtcbiAgNTg6XHRcdGRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSXG4gIDU5Olx0XHRoZWxwXG4gIDYwOlx0XHQgIEtlZXAgdHJhY2sgb2Ygc3RhdGlzdGljcyBvbiBzdHJ1Y3R1cmUgb2YgRklCIFRSSUUgdGFibGUuXG4gIDYxOlx0XHQgIFVzZWZ1bCBmb3IgdGVzdGluZyBhbmQgbWVhc3VyaW5nIFRSSUUgcGVyZm9ybWFuY2UuXG4gIDYyOlx0XG4gIDYzOlx0Y29uZmlnIElQX01VTFRJUExFX1RBQkxFU1xuICA2NDpcdFx0Ym9vbCBcJiMzNDtJUDogcG9saWN5IHJvdXRpbmdcJiMzNDtcbiAgNjU6XHRcdGRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSXG4gIDY2Olx0XHRzZWxlY3QgRklCX1JVTEVTXG4gIDY3Olx0XHRoZWxwXG4gIDY4Olx0XHQgIE5vcm1hbGx5LCBhIHJvdXRlciBkZWNpZGVzIHdoYXQgdG8gZG8gd2l0aCBhIHJlY2VpdmVkIHBhY2tldCBiYXNlZFxuICA2OTpcdFx0ICBzb2xlbHkgb24gdGhlIHBhY2tldCYjMzk7cyBmaW5hbCBkZXN0aW5hdGlvbiBhZGRyZXNzLiBJZiB5b3Ugc2F5IFkgaGVyZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgdGhlIERlZmluaXRpb24gb2YgYElQX0FEVkFOQ0VEX1JPVVRFUmAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSBrbm93IHRoaXMgY29uc3RhbnQgaXMgaW4gdGhlIGNvZGUgYmFzZSBzb21ld2hlcmUsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBsb2NhdGUgaXRzIGRlY2xhcmF0aW9uLiBJIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIHRpbWUgbWFudWFsbHkgc2Nhbm5pbmcgdGhyb3VnaCBmaWxlcywgc28gSSBuZWVkIHRvIHVzZSBzb21lIHRvb2xpbmcgb3IgYSBxdWljayBzZWFyY2ggdG8gcGlucG9pbnQgaXRzIGxvY2F0aW9uLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyB0YXNrLCBhbmQgdGhlIG1ldGhvZCBJIGNob29zZSB3aWxsIGRlcGVuZCBvbiB0aGUgcHJvamVjdCYjMzk7cyBzZXR1cCBhbmQgd2hhdCB0b29scyBhcmUgcmVhZGlseSBhdmFpbGFibGUuIEhvcGVmdWxseSwgaXQmIzM5O3MgZGVmaW5lZCBpbiBhIGNvbW1vbiBoZWFkZXIgb3IgY29uZmlndXJhdGlvbiBmaWxlLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBzZWFyY2ggc2ltcGxlci4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTU9Y29uZmlnIElQX01VTFRJQ0FTVFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTQtXG5uZXQvaXB2NC9LY29uZmlnOjE1OmNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcbm5ldC9pcHY0L0tjb25maWctMTYtXHRib29sIFwmIzM0O0lQOiBhZHZhbmNlZCByb3V0ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIFJvdXRpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgYWR2YW5jZWQgSVAgcm91dGluZywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBJUF9BRFZBTkNFRF9ST1VURVJgLCBgSVBfUk9VVEVfTVVMVElQQVRIYCwgYW5kIHRoZSBicm9hZGVyIGBJTkVUYCBjb250ZXh0LiBNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgdGhlIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mICp3aGVyZSogYW5kICpob3cqIHRoZSBzeXN0ZW0gbWFrZXMgZGVjaXNpb25zIGFib3V0IG11bHRpcGxlIHBhdGhzIGluIHJvdXRpbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodCBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBtdWx0aXBhdGggcm91dGluZyBzdHJhdGVneS4gTGV0JiMzOTtzIHNlZSB3aG8mIzM5O3MgY2FsbGluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX3NlbGVjdF9tdWx0aXBhdGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTUyPXN0YXRpYyBib29sIGZpYl9nb29kX25oKGNvbnN0IHN0cnVjdCBmaWJfbmggKm5oKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTc4LVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIxNzk6dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTgwLVx0XHRcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMjIzPXZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzMi1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjMzOlx0XHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIGZsNCk7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzNC1cdH1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTIxOTg9aXBfbWtyb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjIwNS1cbm5ldC9pcHY0L3JvdXRlLmM6MjIwNjpcdFx0ZmliX3NlbGVjdF9tdWx0aXBhdGgocmVzLCBoLCBOVUxMKTtcbm5ldC9pcHY0L3JvdXRlLmMtMjIwNy1cdFx0SVBDQihza2IpLVx1MDAzZWZsYWdzIHw9IElQU0tCX01VTFRJUEFUSDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzMQoJCQkJCQkJb3V0cHV0OiAxMzEKCQkJCQkJCXRob3VnaHRzOiA0MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgYSBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcuIEkmIzM5O20gbG9va2luZyBhdCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgLCB3aGljaCBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBhbG9uZyB3aXRoIGl0cyByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBmaWJfc2VsZWN0X3BhdGhgIGFuZCBgaXBfbWtyb3V0ZV9pbnB1dGAuCgpUaGUgY29yZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIG1vZGlmaWNhdGlvbiBkZXNlcnZlIGEgYFdvcnRoRnV6emluZyA9IHRydWVgIGRlc2lnbmF0aW9uPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBUaGUgZnV6emluZyBnb2FsIGlzIGNsZWFyOiBmaW5kIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGJ1Z3MsIGFuZCBuZXcgYXNzZXJ0aW9ucy4gVGhlIHByaW1hcnkgaHVyZGxlIGlzIHJlYWNoYWJpbGl0eS4gQ2FuIHRoaXMgY29kZSBhY3R1YWxseSAqZXhlY3V0ZSogaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzPwoKSW4gdGhpcyBjYXNlLCB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gSXQmIzM5O3MgYWRkaW5nIGEgYFJFQURfT05DRWAgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eSBvbiBgbmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHJgLiBUaGlzIGNvZGUgKmlzKiBleGVjdXRhYmxlIGFuZCByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBTbywgYWJzb2x1dGVseSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGB0cnVlYC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIGBJTkVUYCwgYElQX0FEVkFOQ0VEX1JPVVRFUmAsIGFuZCBgSVBfUk9VVEVfTVVMVElQQVRIYCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXQgdXAgY29ycmVjdGx5LgoKSSYjMzk7dmUgYWxyZWFkeSBjb25maXJtZWQgdGhlIGZvY3VzIHN5bWJvbHM6IGBmaWJfc2VsZWN0X211bHRpcGF0aGAsIGBmaWJfc2VsZWN0X3BhdGhgLCBhbmQgYGlwX21rcm91dGVfaW5wdXRgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0IGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaXMgbm90IHViaXF1aXRvdXMsIGJ1dCByYXRoZXIgc3BlY2lmaWMgdG8gSVB2NCBtdWx0aXBhdGggcm91dGluZy4gR29vZC4gQm90aCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGFuZCBgZmliX3NlbGVjdF9wYXRoYCBhcHBlYXIgdG8gYmUgSVB2NCByb3V0aW5nIHNwZWNpZmljLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeS4gTGV0JiMzOTtzIGdldCB0aGUgdG9vbCBjYWxsIHRvIGBzZXQtcmVzdWx0c2AgcHJlcGFyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUF9ST1VURV9NVUxUSVBBVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfc2VsZWN0X211bHRpcGF0aCYjMzQ7LAogICAgJiMzNDtmaWJfc2VsZWN0X3BhdGgmIzM0OywKICAgICYjMzQ7aXBfbWtyb3V0ZV9pbnB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFJFQURfT05DRSgpIGFubm90YXRpb25zIHdoZW4gcmVhZGluZyBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyIGluIGZpYl9zZWxlY3RfbXVsdGlwYXRoKCkgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBjb21waWxlciB0ZWFyaW5nIGR1cmluZyBjb25jdXJyZW50IHJvdXRlIHNlbGVjdGlvbi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIElQdjQgbXVsdGlwYXRoIHJvdXRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBfQURWQU5DRURfUk9VVEVSJiMzNDssCiAgICAmIzM0O0lQX1JPVVRFX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpYl9zZWxlY3RfbXVsdGlwYXRoJiMzNDssCiAgICAmIzM0O2ZpYl9zZWxlY3RfcGF0aCYjMzQ7LAogICAgJiMzNDtpcF9ta3JvdXRlX2lucHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUkVBRF9PTkNFKCkgYW5ub3RhdGlvbnMgd2hlbiByZWFkaW5nIG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHIgaW4gZmliX3NlbGVjdF9tdWx0aXBhdGgoKSB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGNvbXBpbGVyIHRlYXJpbmcgZHVyaW5nIGNvbmN1cnJlbnQgcm91dGUgc2VsZWN0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgSVB2NCBtdWx0aXBhdGggcm91dGluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHdyYXBzIHRoZSByZWFkIG9mIGBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyYCB3aXRoIGBSRUFEX09OQ0UoKWAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIGFkZHJlc3MgY29uY3VycmVudCBkYXRhLXJhY2UgYWNjZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0cnVjdCBwYWRkaW5nLCBvciBidWZmZXIgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMDA2YjEyMThmMTA1MDZlYjI0ZjdmMzJlNDFhNDU0MjFhZGU3MzkwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDg6MDU6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggN2EzNjJmMmUyYzJiZC4uODg1YzZmYWU1MjMyNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtMjIwNCw3ICYjNDM7MjIwNCw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsCiAJCSAgICAodXNlX25laWdoICZhbXA7JmFtcDsgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChzYWRkciAmYW1wOyZhbXA7IG5leHRob3BfbmgtJmd0O25oX3NhZGRyID09IHNhZGRyKQomIzQzOwkJaWYgKHNhZGRyICZhbXA7JmFtcDsgUkVBRF9PTkNFKG5leHRob3BfbmgtJmd0O25oX3NhZGRyKSA9PSBzYWRkcikKIAkJCW5oX3Njb3JlICYjNDM7PSAyOwogCQlpZiAoaGFzaCAmbHQ7PSBuaF91cHBlcl9ib3VuZCkKIAkJCW5oX3Njb3JlJiM0MzsmIzQzOzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIElQdjQgRklCIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBmdW5jdGlvbiwgYXJvdW5kIGxpbmUgMjIwNC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSAoRklCKSBzZWxlY3RzIHRoZSBiZXN0IG5leHQgaG9wIGZvciBhIHBhY2tldCB3aGVuIG11bHRpcGxlIHBhdGhzIGFyZSBhdmFpbGFibGUg4oCTIHByb2JhYmx5IG9wdGltaXppbmcgZm9yIHRoZSBjb21tb24gY2FzZSwgZ2l2ZW4gdGhlIGNvbnRleHQuCgpMb29raW5nIGF0IHRoZSBgZGlmZmAsIHRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgdGhpczogYGlmIChzYWRkciAmYW1wOyZhbXA7IFJFQURfT05DRShuZXh0aG9wX25oLSZndDtuaF9zYWRkcikgPT0gc2FkZHIpYC4gSXQgYXBwZWFycyB3ZSYjMzk7dmUgcmVwbGFjZWQgYSBkaXJlY3QgY29tcGFyaXNvbiBgbmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHIgPT0gc2FkZHJgIHdpdGggYSBgUkVBRF9PTkNFYCB2ZXJzaW9uLiBUaGUgc3Vycm91bmRpbmcgY29kZSBkZWFscyB3aXRoIGBuaF9zY29yZWAgc28gdGhlIGNvbXBhcmlzb24gaGFzIGFuIGluZmx1ZW5jZSBvbiB0aGUgbmV4dCBob3Agc2VsZWN0aW9uIHNjb3JlLiBUaGUgY29uZGl0aW9uIG9ubHkgcnVucyB3aGVuIGBzYWRkcmAgaXMgcG9wdWxhdGVkLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IHN5bmNocm9uaXphdGlvbiBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdoZW4gYWNjZXNzaW5nIHRoZSBgbmhfc2FkZHJgIGZpZWxkIG9mIHRoZSBgbmV4dGhvcF9uaGAgc3RydWN0dXJlLgoKVGhlIHVzZSBvZiBgUkVBRF9PTkNFYCBpcyBhIHN0cm9uZyBoaW50IHRoYXQgYG5oX3NhZGRyYCBtaWdodCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHkgYnkgYW5vdGhlciB0aHJlYWQgb3IgaW50ZXJydXB0IGhhbmRsZXIuIEl0JiMzOTtzIGxpa2VseSB0aGF0IHdpdGhvdXQgdGhpcywgd2UgY291bGQgaGF2ZSBzdGFsZSBkYXRhIGFuZCBhbiBpbmNvcnJlY3QgbmV4dCBob3AgYmVpbmcgc2VsZWN0ZWQgZHVlIHRvIGEgdGltaW5nIGlzc3VlIGR1cmluZyB0aGUgY29tcGFyaXNvbi4gVGhlIGRldmVsb3BlcnMgY2xlYXJseSBpZGVudGlmaWVkIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHJlZ3VsYXIgcmVhZCB3b3VsZCBiZSBpbnN1ZmZpY2llbnQuCgpXZSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBmaWJfc2VtYW50aWNzLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBjb3VsZCBsZWFkIHRvIGEgcmFjZSBjb25kaXRpb24uIEl0IGlzIG5lY2Vzc2FyeSB0byBkZXRlcm1pbmUgd2hhdCBzZXRzIHRoZSB2YWx1ZSBvZiBgbmhfc2FkZHJgIGFuZCB3aGVuIHRoZSBzY29yaW5nIGNvZGUgaXMgY2FsbGVkLiBUaGUgYFJFQURfT05DRWAgc3VnZ2VzdHMgdGhlIHZhbHVlIG9mIGBuaF9zYWRkcmAgY2FuIGNoYW5nZSBhc3luY2hyb25vdXNseS4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIGlmIHRoaXMgY29kZSBydW5zIG9uIGEgbXVsdGljb3JlIHN5c3RlbSwgdGhpcyBpcyBhIG5lY2Vzc2FyeSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLiBPdGhlcndpc2UsIGFuIG9sZCB2YWx1ZSBtYXkgYmUgcmVhZCBhbmQgYW4gaW5jb3JyZWN0IG5leHQtaG9wIG1pZ2h0IGJlIHNlbGVjdGVkLgoKU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSB2ZXJ5IGZvY3VzZWQgb3B0aW1pemF0aW9uIGZvY3VzZWQgb24gY29ycmVjdG5lc3Mgd2l0aGluIHRoZSBtdWx0aWhvcCByb3V0aW5nIHNlbGVjdGlvbiBwcm9jZXNzLiBBIGdvb2QgY2F0Y2gsIGFuZCBhIHNvbGlkIGV4YW1wbGUgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nIGluIGEga2VybmVsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTgwOlx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXG4yMTgxOlx0e1xuMjE4MjpcdFx0c3RydWN0IGZpYl9pbmZvICpmaSA9IHJlcy1cdTAwM2VmaTtcbjIxODM6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGZpLVx1MDAzZWZpYl9uZXQ7XG4yMTg0Olx0XHRib29sIHVzZV9uZWlnaDtcbjIxODU6XHRcdGludCBzY29yZSA9IC0xO1xuMjE4NjpcdFx0X19iZTMyIHNhZGRyO1xuMjE4NzpcdFxuMjE4ODpcdFx0aWYgKHVubGlrZWx5KHJlcy1cdTAwM2VmaS1cdTAwM2VuaCkpIHtcbjIxODk6XHRcdFx0bmV4dGhvcF9wYXRoX2ZpYl9yZXN1bHQocmVzLCBoYXNoKTtcbjIxOTA6XHRcdFx0cmV0dXJuO1xuMjE5MTpcdFx0fVxuMjE5MjpcdFxuMjE5MzpcdFx0dXNlX25laWdoID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7XG4yMTk0Olx0XHRzYWRkciA9IGZsNCA/IGZsNC1cdTAwM2VzYWRkciA6IDA7XG4yMTk1Olx0XG4yMTk2Olx0XHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcbjIxOTc6XHRcdFx0aW50IG5oX3VwcGVyX2JvdW5kLCBuaF9zY29yZSA9IDA7XG4yMTk4Olx0XG4yMTk5Olx0XHRcdC8qIE5leHRob3BzIHdpdGhvdXQgYSBjYXJyaWVyIGFyZSBhc3NpZ25lZCBhbiB1cHBlciBib3VuZCBvZlxuMjIwMDpcdFx0XHQgKiBtaW51cyBvbmUgd2hlbiBcJiMzNDtpZ25vcmVfcm91dGVzX3dpdGhfbGlua2Rvd25cJiMzNDsgaXMgc2V0LlxuMjIwMTpcdFx0XHQgKi9cbjIyMDI6XHRcdFx0bmhfdXBwZXJfYm91bmQgPSBhdG9taWNfcmVhZChcdTAwMjZuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF91cHBlcl9ib3VuZCk7XG4yMjAzOlx0XHRcdGlmIChuaF91cHBlcl9ib3VuZCA9PSAtMSB8fFxuMjIwNDpcdFx0XHQgICAgKHVzZV9uZWlnaCBcdTAwMjZcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcbjIyMDU6XHRcdFx0XHRjb250aW51ZTtcbjIyMDY6XHRcbjIyMDc6XHRcdFx0aWYgKHNhZGRyIFx1MDAyNlx1MDAyNiBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4yMjA4Olx0XHRcdFx0bmhfc2NvcmUgJiM0Mzs9IDI7XG4yMjA5Olx0XHRcdGlmIChoYXNoIFx1MDAzYz0gbmhfdXBwZXJfYm91bmQpXG4yMjEwOlx0XHRcdFx0bmhfc2NvcmUmIzQzOyYjNDM7O1xuMjIxMTpcdFx0XHRpZiAoc2NvcmUgXHUwMDNjIG5oX3Njb3JlKSB7XG4yMjEyOlx0XHRcdFx0cmVzLVx1MDAzZW5oX3NlbCA9IG5oc2VsO1xuMjIxMzpcdFx0XHRcdHJlcy1cdTAwM2VuaGMgPSBcdTAwMjZuZXh0aG9wX25oLVx1MDAzZW5oX2NvbW1vbjtcbjIyMTQ6XHRcdFx0XHRpZiAobmhfc2NvcmUgPT0gMyB8fCAoIXNhZGRyIFx1MDAyNlx1MDAyNiBuaF9zY29yZSA9PSAxKSlcbjIyMTU6XHRcdFx0XHRcdHJldHVybjtcbjIyMTY6XHRcdFx0XHRzY29yZSA9IG5oX3Njb3JlO1xuMjIxNzpcdFx0XHR9XG4yMjE4Olx0XG4yMjE5Olx0XHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XG4yMjIwOlx0fVxuMjIyMTpcdCNlbmRpZlxuMjIyMjpcdFxuMjIyMzpcdHZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbjIyMjQ6XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4yMjI1Olx0e1xuMjIyNjpcdFx0aWYgKGZsNC1cdTAwM2VmbG93aTRfb2lmKVxuMjIyNzpcdFx0XHRnb3RvIGNoZWNrX3NhZGRyO1xuMjIyODpcdFxuMjIyOTpcdCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTYKCQkJCQkJCW91dHB1dDogMTEyCgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBtb2RpZmllcyBhY2Nlc3MgdG8gYG5leHRob3BfbmgtJmd0O25oX3NhZGRyYCB3aXRoaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBieSBhZGRpbmcgYFJFQURfT05DRSgpYC4gVGhpcyBzY3JlYW1zIHN0YW5kYXJkIGNvbmN1cnJlbmN5IGZpeCB0byBtZSwgcHJvYmFibHkgZmxhZ2dlZCBieSBLQ1NBTiBvciBhIHRob3JvdWdoIGNvZGUgcmV2aWV3LiBJdCYjMzk7cyBhIHRleHRib29rIHJlc3BvbnNlIHRvIGEgZGF0YSByYWNlLgoKTm93LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gRG9lcyB0aGlzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYW55IHdheT8gTm8sIGBuaF9zYWRkcmAgaXMgYSBwcmUtZXhpc3RpbmcgZmllbGQgd2l0aGluIHRoZSBgZmliX25oYCBzdHJ1Y3R1cmUuIEFkZGluZyBgUkVBRF9PTkNFKClgIGlzIHNpbXBseSBhIHNhZmVndWFyZCBhZ2FpbnN0IGNvbXBpbGVyIG9wdGltaXphdGlvbnMgYW5kIHBvdGVudGlhbCBkYXRhIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgdGhhdCBmaWVsZCB3aGlsZSB3cml0ZXMgbWlnaHQgYmUgb2NjdXJyaW5nIGNvbmN1cnJlbnRseS4KCkxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgbWVudGFsIGNoZWNrbGlzdDoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZT8gTm9wZS4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5lZ2F0aXZlLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm90IGhlcmUuCjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyBhZ2Fpbi4KCktNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc3RhbmRhcmQgc2FuaXRpemVyL0tDU0FOL0tBU0FOIGlzc3VlLiBLTVNBTiBpc24mIzM5O3QgdGhlIHJpZ2h0IHRvb2wuIFNvIHRoaXMgc2VlbXMgY2xlYW4uIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHdyYXBzIHRoZSByZWFkIG9mIGBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyYCB3aXRoIGBSRUFEX09OQ0UoKWAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIGFkZHJlc3MgY29uY3VycmVudCBkYXRhLXJhY2UgYWNjZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0cnVjdCBwYWRkaW5nLCBvciBidWZmZXIgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB3cmFwcyB0aGUgcmVhZCBvZiBgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcmAgd2l0aCBgUkVBRF9PTkNFKClgIGluIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCB0byBhZGRyZXNzIGNvbmN1cnJlbnQgZGF0YS1yYWNlIGFjY2Vzcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBtZW1vcnkgY29weWluZyB0byB1c2VyIHNwYWNlLCBzdHJ1Y3QgcGFkZGluZywgb3IgYnVmZmVyIGFsbG9jYXRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNToyOC44MzIyNDMxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzEyODc5MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiLFxuICAgIFwiSVBfUk9VVEVfTVVMVElQQVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliX3NlbGVjdF9tdWx0aXBhdGhcIixcbiAgICBcImZpYl9zZWxlY3RfcGF0aFwiLFxuICAgIFwiaXBfbWtyb3V0ZV9pbnB1dFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggd3JhcHMgdGhlIHJlYWQgb2YgYG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyYCB3aXRoIGBSRUFEX09OQ0UoKWAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIGFkZHJlc3MgY29uY3VycmVudCBkYXRhLXJhY2UgYWNjZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0cnVjdCBwYWRkaW5nLCBvciBidWZmZXIgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBSRUFEX09OQ0UoKSBhbm5vdGF0aW9ucyB3aGVuIHJlYWRpbmcgbmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHIgaW4gZmliX3NlbGVjdF9tdWx0aXBhdGgoKSB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGNvbXBpbGVyIHRlYXJpbmcgZHVyaW5nIGNvbmN1cnJlbnQgcm91dGUgc2VsZWN0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgSVB2NCBtdWx0aXBhdGggcm91dGluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDU6MjguODMyMjU0MTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTQ4NDMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAwMDZiMTIxOGYxMDUwNmViMjRmN2YzMmU0MWE0NTQyMWFkZTczOTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6MDU6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXFxuaW5kZXggN2EzNjJmMmUyYzJiZC4uODg1YzZmYWU1MjMyNyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcXG4rKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcXG5AQCAtMjIwNCw3ICsyMjA0LDcgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcXG4gXFx0XFx0ICAgICh1c2VfbmVpZ2ggXFx1MDAyNlxcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoc2FkZHIgXFx1MDAyNlxcdTAwMjYgbmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHIgPT0gc2FkZHIpXFxuK1xcdFxcdGlmIChzYWRkciBcXHUwMDI2XFx1MDAyNiBSRUFEX09OQ0UobmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHIpID09IHNhZGRyKVxcbiBcXHRcXHRcXHRuaF9zY29yZSArPSAyO1xcbiBcXHRcXHRpZiAoaGFzaCBcXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcXG4gXFx0XFx0XFx0bmhfc2NvcmUrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDU6MjkuMzQ4NDc4NDAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDU4NzY0MzU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQX1JPVVRFX01VTFRJUEFUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9zZWxlY3RfbXVsdGlwYXRoXCIsXG4gICAgXCJmaWJfc2VsZWN0X3BhdGhcIixcbiAgICBcImlwX21rcm91dGVfaW5wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFJFQURfT05DRSgpIGFubm90YXRpb25zIHdoZW4gcmVhZGluZyBuZXh0aG9wX25oLVxcdTAwM2VuaF9zYWRkciBpbiBmaWJfc2VsZWN0X211bHRpcGF0aCgpIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgY29tcGlsZXIgdGVhcmluZyBkdXJpbmcgY29uY3VycmVudCByb3V0ZSBzZWxlY3Rpb24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBJUHY0IG11bHRpcGF0aCByb3V0aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAwMDZiMTIxOGYxMDUwNmViMjRmN2YzMmU0MWE0NTQyMWFkZTczOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODowNToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuaW5kZXggN2EzNjJmMmUyYzJiZC4uODg1YzZmYWU1MjMyNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuKysrIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5AQCAtMjIwNCw3ICsyMjA0LDcgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbiBcdFx0ICAgICh1c2VfbmVpZ2ggXHUwMDI2XHUwMDI2ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChzYWRkciBcdTAwMjZcdTAwMjYgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkciA9PSBzYWRkcilcbitcdFx0aWYgKHNhZGRyIFx1MDAyNlx1MDAyNiBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4gXHRcdFx0bmhfc2NvcmUgKz0gMjtcbiBcdFx0aWYgKGhhc2ggXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcbiBcdFx0XHRuaF9zY29yZSsrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDU6MjkuMzQ4NDgwNTAyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjUxNDg2NTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IGZpYl9zZWxlY3RfbXVsdGlwYXRoKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gdGFrZSBhIGxvb2sgYXQgYSBwYXRjaCBmb3IgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhbWQ2NC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBkaWZmLiBMZXQncyBzZWUuLi4gQWgsIGl0J3MgbW9kaWZ5aW5nIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgZnVuY3Rpb24uXG5cblRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBsaW5lIDIyMDQsIHdoZXJlIHRoZXkndmUgcmVwbGFjZWQgYSBkaXJlY3QgY29tcGFyaXNvbiB3aXRoIGBSRUFEX09OQ0VgLiBJbnR1aXRpdmVseSwgdGhpcyBzdWdnZXN0cyB0aGVyZSBtaWdodCBiZSBtZW1vcnkgc3luY2hyb25pemF0aW9uIGNvbmNlcm5zLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgY29tcGFyaW5nIGBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyYCBkaXJlY3RseSB3aXRoIGBzYWRkcmAuIE5vdyBpdCdzIHVzaW5nIGBSRUFEX09OQ0VgLiBUaGF0IHRlbGxzIG1lIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBzaGFyZWQgbWVtb3J5LCBwb3NzaWJseSBtdWx0aS10aHJlYWRlZCBhY2Nlc3MgdG8gYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJgLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCB0aGUgY29udGV4dCBvZiBob3cgYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJgIGlzIGJlaW5nIHdyaXR0ZW4gYW5kIHJlYWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGBSRUFEX09OQ0VgIGlzIG5lY2Vzc2FyeSBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTGV0J3MgcHVsbCB1cCB0aGUgY29kZSB1c2luZyBgcmVhZC1maWxlYCBhbmQgY2hlY2sgYXJvdW5kIGxpbmUgMjIwNCBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjM1Ljg2MzM0NzYzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE4MDpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNClcXG4yMTgxOlxcdHtcXG4yMTgyOlxcdFxcdHN0cnVjdCBmaWJfaW5mbyAqZmkgPSByZXMtXFx1MDAzZWZpO1xcbjIxODM6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZmktXFx1MDAzZWZpYl9uZXQ7XFxuMjE4NDpcXHRcXHRib29sIHVzZV9uZWlnaDtcXG4yMTg1OlxcdFxcdGludCBzY29yZSA9IC0xO1xcbjIxODY6XFx0XFx0X19iZTMyIHNhZGRyO1xcbjIxODc6XFx0XFxuMjE4ODpcXHRcXHRpZiAodW5saWtlbHkocmVzLVxcdTAwM2VmaS1cXHUwMDNlbmgpKSB7XFxuMjE4OTpcXHRcXHRcXHRuZXh0aG9wX3BhdGhfZmliX3Jlc3VsdChyZXMsIGhhc2gpO1xcbjIxOTA6XFx0XFx0XFx0cmV0dXJuO1xcbjIxOTE6XFx0XFx0fVxcbjIxOTI6XFx0XFxuMjE5MzpcXHRcXHR1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7XFxuMjE5NDpcXHRcXHRzYWRkciA9IGZsNCA/IGZsNC1cXHUwMDNlc2FkZHIgOiAwO1xcbjIxOTU6XFx0XFxuMjE5NjpcXHRcXHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcXG4yMTk3OlxcdFxcdFxcdGludCBuaF91cHBlcl9ib3VuZCwgbmhfc2NvcmUgPSAwO1xcbjIxOTg6XFx0XFxuMjE5OTpcXHRcXHRcXHQvKiBOZXh0aG9wcyB3aXRob3V0IGEgY2FycmllciBhcmUgYXNzaWduZWQgYW4gdXBwZXIgYm91bmQgb2ZcXG4yMjAwOlxcdFxcdFxcdCAqIG1pbnVzIG9uZSB3aGVuIFxcXCJpZ25vcmVfcm91dGVzX3dpdGhfbGlua2Rvd25cXFwiIGlzIHNldC5cXG4yMjAxOlxcdFxcdFxcdCAqL1xcbjIyMDI6XFx0XFx0XFx0bmhfdXBwZXJfYm91bmQgPSBhdG9taWNfcmVhZChcXHUwMDI2bmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX3VwcGVyX2JvdW5kKTtcXG4yMjAzOlxcdFxcdFxcdGlmIChuaF91cHBlcl9ib3VuZCA9PSAtMSB8fFxcbjIyMDQ6XFx0XFx0XFx0ICAgICh1c2VfbmVpZ2ggXFx1MDAyNlxcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcXG4yMjA1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIyMDY6XFx0XFxuMjIwNzpcXHRcXHRcXHRpZiAoc2FkZHIgXFx1MDAyNlxcdTAwMjYgUkVBRF9PTkNFKG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcXG4yMjA4OlxcdFxcdFxcdFxcdG5oX3Njb3JlICs9IDI7XFxuMjIwOTpcXHRcXHRcXHRpZiAoaGFzaCBcXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcXG4yMjEwOlxcdFxcdFxcdFxcdG5oX3Njb3JlKys7XFxuMjIxMTpcXHRcXHRcXHRpZiAoc2NvcmUgXFx1MDAzYyBuaF9zY29yZSkge1xcbjIyMTI6XFx0XFx0XFx0XFx0cmVzLVxcdTAwM2VuaF9zZWwgPSBuaHNlbDtcXG4yMjEzOlxcdFxcdFxcdFxcdHJlcy1cXHUwMDNlbmhjID0gXFx1MDAyNm5leHRob3BfbmgtXFx1MDAzZW5oX2NvbW1vbjtcXG4yMjE0OlxcdFxcdFxcdFxcdGlmIChuaF9zY29yZSA9PSAzIHx8ICghc2FkZHIgXFx1MDAyNlxcdTAwMjYgbmhfc2NvcmUgPT0gMSkpXFxuMjIxNTpcXHRcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjIxNjpcXHRcXHRcXHRcXHRzY29yZSA9IG5oX3Njb3JlO1xcbjIyMTc6XFx0XFx0XFx0fVxcbjIyMTg6XFx0XFxuMjIxOTpcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XFxuMjIyMDpcXHR9XFxuMjIyMTpcXHQjZW5kaWZcXG4yMjIyOlxcdFxcbjIyMjM6XFx0dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbjIyMjQ6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMjIyNTpcXHR7XFxuMjIyNjpcXHRcXHRpZiAoZmw0LVxcdTAwM2VmbG93aTRfb2lmKVxcbjIyMjc6XFx0XFx0XFx0Z290byBjaGVja19zYWRkcjtcXG4yMjI4OlxcdFxcbjIyMjk6XFx0I2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDU6MzUuODYzNDUzNDMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyOTczMjk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyB6b29tIGluIG9uIGxpbmUgMjE4MC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBzcGVjaWZpYyBwb2ludCBpbiB0aGUgY29uZmlndXJhdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSBzb21lIGNyaXRpY2FsIGxvZ2ljIHJlbGF0ZWQgdG8gYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBpcyBpbXBsZW1lbnRlZC4gSSB3YW50IHRvIHNlZSB0aGUgYnJvYWRlciBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZ3VhcmRzIGFuZCBob3cgdGhleSBhcmUgaW1wYWN0aW5nIHRoaXMgZnVuY3Rpb24uIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgbGV0J3MgZXhhbWluZSBsaW5lcyAyMTYwIHRvIDIyMDAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGRldGVybWluZSB3aGF0IGNvbmZpZ3VyYXRpb24gZWxlbWVudHMgYXJlIHdyYXBwaW5nLCBpbmZsdWVuY2luZywgb3IgY29udHJvbGxpbmcgdGhlIGV4ZWN1dGlvbiBvZiBgZmliX3NlbGVjdF9tdWx0aXBhdGhgLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgb3IgbWFjcm9zIHRoYXQgbWlnaHQgYmUgZW5hYmxpbmcsIGRpc2FibGluZywgb3IgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzM5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNTozNy43OTMxODk4MzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNjA6XFx0XFxuMjE2MTpcXHRcXHRcXHRpZiAobGlrZWx5KG5oLVxcdTAwM2VmaWJfbmhfZ3dfZmFtaWx5ID09IEFGX0lORVQpKVxcbjIxNjI6XFx0XFx0XFx0XFx0biA9IF9faXB2NF9uZWlnaF9sb29rdXBfbm9yZWYobmgtXFx1MDAzZWZpYl9uaF9kZXYsXFxuMjE2MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAoX19mb3JjZSB1MzIpbmgtXFx1MDAzZWZpYl9uaF9ndzQpO1xcbjIxNjQ6XFx0XFx0XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXFx1MDAyNlxcdTAwMjZcXG4yMTY1OlxcdFxcdFxcdFxcdCBuaC1cXHUwMDNlZmliX25oX2d3X2ZhbWlseSA9PSBBRl9JTkVUNilcXG4yMTY2OlxcdFxcdFxcdFxcdG4gPSBfX2lwdjZfbmVpZ2hfbG9va3VwX25vcmVmKG5oLVxcdTAwM2VmaWJfbmhfZGV2LFxcbjIxNjc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm5oLVxcdTAwM2VmaWJfbmhfZ3c2KTtcXG4yMTY4OlxcdFxcdFxcdGVsc2VcXG4yMTY5OlxcdFxcdFxcdFxcdG4gPSBOVUxMO1xcbjIxNzA6XFx0XFx0XFx0aWYgKG4pXFxuMjE3MTpcXHRcXHRcXHRcXHRzdGF0ZSA9IFJFQURfT05DRShuLVxcdTAwM2VudWRfc3RhdGUpO1xcbjIxNzI6XFx0XFxuMjE3MzpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yMTc0OlxcdFxcdH1cXG4yMTc1OlxcdFxcbjIxNzY6XFx0XFx0cmV0dXJuICEhKHN0YXRlIFxcdTAwMjYgTlVEX1ZBTElEKTtcXG4yMTc3OlxcdH1cXG4yMTc4OlxcdFxcbjIxNzk6XFx0dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcXG4yMTgwOlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KVxcbjIxODE6XFx0e1xcbjIxODI6XFx0XFx0c3RydWN0IGZpYl9pbmZvICpmaSA9IHJlcy1cXHUwMDNlZmk7XFxuMjE4MzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBmaS1cXHUwMDNlZmliX25ldDtcXG4yMTg0OlxcdFxcdGJvb2wgdXNlX25laWdoO1xcbjIxODU6XFx0XFx0aW50IHNjb3JlID0gLTE7XFxuMjE4NjpcXHRcXHRfX2JlMzIgc2FkZHI7XFxuMjE4NzpcXHRcXG4yMTg4OlxcdFxcdGlmICh1bmxpa2VseShyZXMtXFx1MDAzZWZpLVxcdTAwM2VuaCkpIHtcXG4yMTg5OlxcdFxcdFxcdG5leHRob3BfcGF0aF9maWJfcmVzdWx0KHJlcywgaGFzaCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjM3Ljc5MzI5NjU3M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTQyOTAwMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTXVsdGlwYXRoIFJvdXRpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAgaW4gcmVsYXRpb24gdG8gc29tZSBjb2RlIGFyb3VuZCBsaW5lIDIxNzkuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBsb2NhdGUgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaXRzZWxmIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgd2FudCB0byBzZWUgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBndWFyZGVkLCBwcm9iYWJseSB0byB1bmRlcnN0YW5kIHdoYXQgZnVuY3Rpb25hbGl0eSBpdCBlbmFibGVzIG9yIGRpc2FibGVzLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgdGhhdCByZWxhdGVzIHRvIHRoZSBjb2RlIGluIHRoYXQgdmljaW5pdHkgb2YgdGhlIGZpbGUuIEtub3dpbmcgaXRzIGxvY2F0aW9uIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHJvdXRpbmcgbG9naWMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgbXkgc3RhcnRpbmcgcG9pbnQgdG8gZGVjaXBoZXIgdGhlIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwOTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjQ4LjMzNjE5OTcwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEyMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEyMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMTIxOlxcdFxcbjIxMjI6XFx0XFx0XFx0cHJldl9maSA9IGZpO1xcbjIxMjM6XFx0XFx0XFx0YWxpdmUgPSAwO1xcbjIxMjQ6XFx0XFx0XFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XFxuMjEyNTpcXHRcXHRcXHRcXHRpZiAoIShuZXh0aG9wX25oLVxcdTAwM2VmaWJfbmhfZmxhZ3MgXFx1MDAyNiBuaF9mbGFncykpIHtcXG4yMTI2OlxcdFxcdFxcdFxcdFxcdGFsaXZlKys7XFxuMjEyNzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMTI4OlxcdFxcdFxcdFxcdH1cXG4yMTI5OlxcdFxcdFxcdFxcdGlmICghbmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2RldiB8fFxcbjIxMzA6XFx0XFx0XFx0XFx0ICAgICEobmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApKVxcbjIxMzE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjEzMjpcXHRcXHRcXHRcXHRpZiAobmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2RldiAhPSBkZXYgfHxcXG4yMTMzOlxcdFxcdFxcdFxcdCAgICAhX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSlcXG4yMTM0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIxMzU6XFx0XFx0XFx0XFx0YWxpdmUrKztcXG4yMTM2OlxcdFxcdFxcdFxcdG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2PSB+bmhfZmxhZ3M7XFxuMjEzNzpcXHRcXHRcXHRcXHRjYWxsX2ZpYl9uaF9ub3RpZmllcnMobmV4dGhvcF9uaCwgRklCX0VWRU5UX05IX0FERCk7XFxuMjEzODpcXHRcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSlcXG4yMTM5OlxcdFxcbjIxNDA6XFx0XFx0XFx0aWYgKGFsaXZlIFxcdTAwM2UgMCkge1xcbjIxNDE6XFx0XFx0XFx0XFx0ZmktXFx1MDAzZWZpYl9mbGFncyBcXHUwMDI2PSB+bmhfZmxhZ3M7XFxuMjE0MjpcXHRcXHRcXHRcXHRyZXQrKztcXG4yMTQzOlxcdFxcdFxcdH1cXG4yMTQ0OlxcdFxcbjIxNDU6XFx0XFx0XFx0ZmliX3JlYmFsYW5jZShmaSk7XFxuMjE0NjpcXHRcXHR9XFxuMjE0NzpcXHRcXG4yMTQ4OlxcdFxcdHJldHVybiByZXQ7XFxuMjE0OTpcXHR9XFxuMjE1MDpcXHRcXG4yMTUxOlxcdCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXFxuMjE1MjpcXHRzdGF0aWMgYm9vbCBmaWJfZ29vZF9uaChjb25zdCBzdHJ1Y3QgZmliX25oICpuaClcXG4yMTUzOlxcdHtcXG4yMTU0OlxcdFxcdGludCBzdGF0ZSA9IE5VRF9SRUFDSEFCTEU7XFxuMjE1NTpcXHRcXG4yMTU2OlxcdFxcdGlmIChuaC1cXHUwMDNlZmliX25oX3Njb3BlID09IFJUX1NDT1BFX0xJTkspIHtcXG4yMTU3OlxcdFxcdFxcdHN0cnVjdCBuZWlnaGJvdXIgKm47XFxuMjE1ODpcXHRcXG4yMTU5OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yMTYwOlxcdFxcbjIxNjE6XFx0XFx0XFx0aWYgKGxpa2VseShuaC1cXHUwMDNlZmliX25oX2d3X2ZhbWlseSA9PSBBRl9JTkVUKSlcXG4yMTYyOlxcdFxcdFxcdFxcdG4gPSBfX2lwdjRfbmVpZ2hfbG9va3VwX25vcmVmKG5oLVxcdTAwM2VmaWJfbmhfZGV2LFxcbjIxNjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgKF9fZm9yY2UgdTMyKW5oLVxcdTAwM2VmaWJfbmhfZ3c0KTtcXG4yMTY0OlxcdFxcdFxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjQ4LjMzNjM3MDE1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwOTE0NDgzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIERhdGEgUmFjZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIGl0IGRvd24gcGllY2UgYnkgcGllY2UuIEZpcnN0LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogd2hhdCBleGFjdGx5IGhhcyBjaGFuZ2VkPyBBaGEsIGl0IGxvb2tzIGxpa2UgYSBtb2RpZmljYXRpb24gaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCBmdW5jdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGUgcmVhZCBvZiBgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcmAsIHdoaWNoIGhhcyBiZWVuIGFsdGVyZWQgdG8gdXNlIGBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcilgLiBUaGlzIHNjcmVhbXMgZGF0YSByYWNlIHByb3RlY3Rpb24hIEl0J3MgbGlrZWx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgY29tcGlsZXIgdGVhcmluZyBpc3N1ZSB3aGVuIGNvbmN1cnJlbnRseSByZWFkaW5nIGBuaF9zYWRkcmAuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGNvZGU/IEdpdmVuIHRoZSBmaWxlIGFuZCBmdW5jdGlvbiBuYW1lLCB0aGlzIGlzIGRlZXAgd2l0aGluIHRoZSBJUHY0IHJvdXRpbmcgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaXMgYSBrZXkgZnVuY3Rpb24sIGFsb25nIHdpdGggYGZpYl9zZWxlY3RfcGF0aGAgYW5kIG90aGVycywgc28gdGhlIGFuc3dlciBpcyBhIGRlZmluaXRpdmUgeWVzLiBJdCdzIHVzZWQgd2hlbiBzdGFuZGFyZCBuZXR3b3JraW5nLCByb3V0aW5nIHNvY2tldHMsIG5ldGxpbmssIG9yIHBhY2tldHMgYXJlIGludm9sdmVkLiBJZiBgSVBfUk9VVEVfTVVMVElQQVRIYCBpcyBlbmFibGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcnVubmluZy4gU28sIEkgaGF2ZSB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYElQX1JPVVRFX01VTFRJUEFUSGAgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk3MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjUxLjQyNzgyMDgzMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNDQyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1JPVVRFX01VTFRJUEFUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz02Mz1jb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTc5LVxcbm5ldC9pcHY0L0tjb25maWc6ODA6Y29uZmlnIElQX1JPVVRFX01VTFRJUEFUSFxcbm5ldC9pcHY0L0tjb25maWctODEtXFx0Ym9vbCBcXFwiSVA6IGVxdWFsIGNvc3QgbXVsdGlwYXRoXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNTo1MS40NzUwNzUxOTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3NzY4OTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nIGlzIGBuZXQvaXB2NC9LY29uZmlnYC4gSXQncyBhIEtjb25maWcgZmlsZSwgc28gaXQgZGVmaW5lcyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQgc3Vic3lzdGVtLiBMaW5lIDgwLi4uIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCdzIGEgcmVsYXRpdmVseSBzcGVjaWZpYyBzdGFydGluZyBwb2ludCwgd2hpY2ggbWVhbnMgSSBoYXZlIGEgZ29vZCBpZGVhIG9mICp3aGF0KiBJJ20gbG9va2luZyBmb3IuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgdXN1YWxseSBzaXRzLCBhbmQgSSdsbCBzZWUgd2hhdCdzIGRlZmluZWQgYW5kIHdoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEknbSB3b3JraW5nIG9uLiBUaGUgZ29hbCBpcyB0byBlaXRoZXIgdW5kZXJzdGFuZCBvciBpZGVudGlmeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3aGF0ZXZlciBwcm9ibGVtL3RvcGljIEknbSBjdXJyZW50bHkgZm9jdXNlZCBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjU0LjQ1Mjc2NzAwNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc1OlxcdFxcdCAgUm91dGluZyBhbmQgVHJhZmZpYyBDb250cm9sIGRvY3VtZW50YXRpb24gYXRcXG4gIDc2OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vbGFydGMub3JnL2hvd3RvL2xhcnRjLnJwZGIuaHRtbFxcdTAwM2VcXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIXFxuICA4MTpcXHRcXHRib29sIFxcXCJJUDogZXF1YWwgY29zdCBtdWx0aXBhdGhcXFwiXFxuICA4MjpcXHRcXHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBOb3JtYWxseSwgdGhlIHJvdXRpbmcgdGFibGVzIHNwZWNpZnkgYSBzaW5nbGUgYWN0aW9uIHRvIGJlIHRha2VuIGluXFxuICA4NTpcXHRcXHQgIGEgZGV0ZXJtaW5pc3RpYyBtYW5uZXIgZm9yIGEgZ2l2ZW4gcGFja2V0LiBJZiB5b3Ugc2F5IFkgaGVyZVxcbiAgODY6XFx0XFx0ICBob3dldmVyLCBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIGF0dGFjaCBzZXZlcmFsIGFjdGlvbnMgdG8gYSBwYWNrZXRcXG4gIDg3OlxcdFxcdCAgcGF0dGVybiwgaW4gZWZmZWN0IHNwZWNpZnlpbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBwYXRocyB0byB0cmF2ZWxcXG4gIDg4OlxcdFxcdCAgZm9yIHRob3NlIHBhY2tldHMuIFRoZSByb3V0ZXIgY29uc2lkZXJzIGFsbCB0aGVzZSBwYXRocyB0byBiZSBvZlxcbiAgODk6XFx0XFx0ICBlcXVhbCBcXFwiY29zdFxcXCIgYW5kIGNob29zZXMgb25lIG9mIHRoZW0gaW4gYSBub24tZGV0ZXJtaW5pc3RpYyBmYXNoaW9uXFxuICA5MDpcXHRcXHQgIGlmIGEgbWF0Y2hpbmcgcGFja2V0IGFycml2ZXMuXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBJUF9ST1VURV9WRVJCT1NFXFxuICA5MzpcXHRcXHRib29sIFxcXCJJUDogdmVyYm9zZSByb3V0ZSBtb25pdG9yaW5nXFxcIlxcbiAgOTQ6XFx0XFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDk1OlxcdFxcdGhlbHBcXG4gIDk2OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHdoaWNoIGlzIHJlY29tbWVuZGVkLCB0aGVuIHRoZSBrZXJuZWwgd2lsbCBwcmludFxcbiAgOTc6XFx0XFx0ICB2ZXJib3NlIG1lc3NhZ2VzIHJlZ2FyZGluZyB0aGUgcm91dGluZywgZm9yIGV4YW1wbGUgd2FybmluZ3MgYWJvdXRcXG4gIDk4OlxcdFxcdCAgcmVjZWl2ZWQgcGFja2V0cyB3aGljaCBsb29rIHN0cmFuZ2UgYW5kIGNvdWxkIGJlIGV2aWRlbmNlIG9mIGFuXFxuICA5OTpcXHRcXHQgIGF0dGFjayBvciBhIG1pc2NvbmZpZ3VyZWQgc3lzdGVtIHNvbWV3aGVyZS4gVGhlIGluZm9ybWF0aW9uIGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjU0LjQ1Mjg0MzU0NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc4MTY2NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYElQX1JPVVRFX01VTFRJUEFUSGAgb3B0aW9uLCBhbmQgaXQncyBmbGFnZ2VkIGFzIGRlcGVuZGVudCBvbiBgSVBfQURWQU5DRURfUk9VVEVSYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgZHVlIHRvIHRoZSBtb3JlIGNvbXBsZXggcm91dGluZyBjYXBhYmlsaXRpZXMgcmVxdWlyZWQuIFRvIGNvbmZpcm0sIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgSVBfQURWQU5DRURfUk9VVEVSYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSdsbCBoZWFkIG92ZXIgdG8gYG5ldC9pcHY0L0tjb25maWdgIHRvIHJldmlldyB0aGUgZGV0YWlscyBvbiBob3cgaXQgaXMgZGVmaW5lZC4gSXQncyBhIHF1aWNrIGp1bXAgdG8gc2VlIGV4YWN0bHkgd2hhdCBmZWF0dXJlcyBhcmUgd3JhcHBlZCBieSBgSVBfQURWQU5DRURfUk9VVEVSYCwgdGhhdCB3aWxsIGFsbG93IG1lIHRvIGFjY3VyYXRlbHkgcmVhc29uIHdoeSBgSVBfUk9VVEVfTVVMVElQQVRIYCBuZWVkcyBpdC4gRnJvbSB0aGVyZSwgSSdsbCBhc3Nlc3Mgd2hldGhlciB0aGF0IGRlcGVuZGVuY3kgaXMgYXBwcm9wcmlhdGUgaW4gdGhlIGNvbnRleHQgSSdtIHdvcmtpbmcgaW4sIG9yIGlmIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHJlbGF4IGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE1NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDU6NTYuNzMxMDEzNjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgZWNobyAxIFxcdTAwM2UgL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvXFx1MDAzY2RldmljZVxcdTAwM2UvcnBfZmlsdGVyXFxuICA0NzpcXHRcXHQgICBvclxcbiAgNDg6XFx0XFx0ICBlY2hvIDEgXFx1MDAzZSAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9hbGwvcnBfZmlsdGVyXFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdCAgTm90ZSB0aGF0IHNvbWUgZGlzdHJpYnV0aW9ucyBlbmFibGUgaXQgaW4gc3RhcnR1cCBzY3JpcHRzLlxcbiAgNTE6XFx0XFx0ICBGb3IgZGV0YWlscyBhYm91dCBycF9maWx0ZXIgc3RyaWN0IGFuZCBsb29zZSBtb2RlIHJlYWRcXG4gIDUyOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcXHUwMDNlLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4gaGVyZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIElQX0ZJQl9UUklFX1NUQVRTXFxuICA1NzpcXHRcXHRib29sIFxcXCJGSUIgVFJJRSBzdGF0aXN0aWNzXFxcIlxcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDU5OlxcdFxcdGhlbHBcXG4gIDYwOlxcdFxcdCAgS2VlcCB0cmFjayBvZiBzdGF0aXN0aWNzIG9uIHN0cnVjdHVyZSBvZiBGSUIgVFJJRSB0YWJsZS5cXG4gIDYxOlxcdFxcdCAgVXNlZnVsIGZvciB0ZXN0aW5nIGFuZCBtZWFzdXJpbmcgVFJJRSBwZXJmb3JtYW5jZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0Y29uZmlnIElQX01VTFRJUExFX1RBQkxFU1xcbiAgNjQ6XFx0XFx0Ym9vbCBcXFwiSVA6IHBvbGljeSByb3V0aW5nXFxcIlxcbiAgNjU6XFx0XFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDY2OlxcdFxcdHNlbGVjdCBGSUJfUlVMRVNcXG4gIDY3OlxcdFxcdGhlbHBcXG4gIDY4OlxcdFxcdCAgTm9ybWFsbHksIGEgcm91dGVyIGRlY2lkZXMgd2hhdCB0byBkbyB3aXRoIGEgcmVjZWl2ZWQgcGFja2V0IGJhc2VkXFxuICA2OTpcXHRcXHQgIHNvbGVseSBvbiB0aGUgcGFja2V0J3MgZmluYWwgZGVzdGluYXRpb24gYWRkcmVzcy4gSWYgeW91IHNheSBZIGhlcmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjU2LjczMTEwOTE3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTMzMTk1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRyYWNpbmcgdGhlIERlZmluaXRpb24gb2YgYElQX0FEVkFOQ0VEX1JPVVRFUmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgSVBfQURWQU5DRURfUk9VVEVSYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIGtub3cgdGhpcyBjb25zdGFudCBpcyBpbiB0aGUgY29kZSBiYXNlIHNvbWV3aGVyZSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IGxvY2F0ZSBpdHMgZGVjbGFyYXRpb24uIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIG1hbnVhbGx5IHNjYW5uaW5nIHRocm91Z2ggZmlsZXMsIHNvIEkgbmVlZCB0byB1c2Ugc29tZSB0b29saW5nIG9yIGEgcXVpY2sgc2VhcmNoIHRvIHBpbnBvaW50IGl0cyBsb2NhdGlvbi4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdGFzaywgYW5kIHRoZSBtZXRob2QgSSBjaG9vc2Ugd2lsbCBkZXBlbmQgb24gdGhlIHByb2plY3QncyBzZXR1cCBhbmQgd2hhdCB0b29scyBhcmUgcmVhZGlseSBhdmFpbGFibGUuIEhvcGVmdWxseSwgaXQncyBkZWZpbmVkIGluIGEgY29tbW9uIGhlYWRlciBvciBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIHdvdWxkIG1ha2UgdGhlIHNlYXJjaCBzaW1wbGVyLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjU4Ljk0NDQzMTExNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2MzQxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz01PWNvbmZpZyBJUF9NVUxUSUNBU1RcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMTQtXFxubmV0L2lwdjQvS2NvbmZpZzoxNTpjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXFxubmV0L2lwdjQvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJJUDogYWR2YW5jZWQgcm91dGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNTo1OC45OTQwNzA1MTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTczMzg3NjMzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBSb3V0aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBhZHZhbmNlZCBJUCByb3V0aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYElQX0FEVkFOQ0VEX1JPVVRFUmAsIGBJUF9ST1VURV9NVUxUSVBBVEhgLCBhbmQgdGhlIGJyb2FkZXIgYElORVRgIGNvbnRleHQuIE15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiB0aGUgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsZXJzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgKndoZXJlKiBhbmQgKmhvdyogdGhlIHN5c3RlbSBtYWtlcyBkZWNpc2lvbnMgYWJvdXQgbXVsdGlwbGUgcGF0aHMgaW4gcm91dGluZy4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIG11bHRpcGF0aCByb3V0aW5nIHN0cmF0ZWd5LiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA4NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA2OjAwLjcyNzk0OTE3OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgyOTE0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX3NlbGVjdF9tdWx0aXBhdGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjE1Mj1zdGF0aWMgYm9vbCBmaWJfZ29vZF9uaChjb25zdCBzdHJ1Y3QgZmliX25oICpuaClcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTc4LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMTc5OnZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIxODAtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjIyMz12b2lkIGZpYl9zZWxlY3RfcGF0aChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzMi1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjIzMzpcXHRcXHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIGZsNCk7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMzQtXFx0fVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yMTk4PWlwX21rcm91dGVfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjIwNS1cXG5uZXQvaXB2NC9yb3V0ZS5jOjIyMDY6XFx0XFx0ZmliX3NlbGVjdF9tdWx0aXBhdGgocmVzLCBoLCBOVUxMKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTIyMDctXFx0XFx0SVBDQihza2IpLVxcdTAwM2VmbGFncyB8PSBJUFNLQl9NVUxUSVBBVEg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA2OjAwLjc5NjI0OTEyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDYyODEwNDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIGEgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZy4gSSdtIGxvb2tpbmcgYXQgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCwgd2hpY2ggaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkLCBhbG9uZyB3aXRoIGl0cyByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBmaWJfc2VsZWN0X3BhdGhgIGFuZCBgaXBfbWtyb3V0ZV9pbnB1dGAuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgbW9kaWZpY2F0aW9uIGRlc2VydmUgYSBgV29ydGhGdXp6aW5nID0gdHJ1ZWAgZGVzaWduYXRpb24/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gVGhlIGZ1enppbmcgZ29hbCBpcyBjbGVhcjogZmluZCBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBidWdzLCBhbmQgbmV3IGFzc2VydGlvbnMuIFRoZSBwcmltYXJ5IGh1cmRsZSBpcyByZWFjaGFiaWxpdHkuIENhbiB0aGlzIGNvZGUgYWN0dWFsbHkgKmV4ZWN1dGUqIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcz9cblxuSW4gdGhpcyBjYXNlLCB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gSXQncyBhZGRpbmcgYSBgUkVBRF9PTkNFYCBmb3IgY29uY3VycmVuY3kgc2FmZXR5IG9uIGBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyYC4gVGhpcyBjb2RlICppcyogZXhlY3V0YWJsZSBhbmQgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4gU28sIGFic29sdXRlbHksIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCBgSU5FVGAsIGBJUF9BRFZBTkNFRF9ST1VURVJgLCBhbmQgYElQX1JPVVRFX01VTFRJUEFUSGAgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseS5cblxuSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGUgZm9jdXMgc3ltYm9sczogYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCwgYGZpYl9zZWxlY3RfcGF0aGAsIGFuZCBgaXBfbWtyb3V0ZV9pbnB1dGAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGF0IGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaXMgbm90IHViaXF1aXRvdXMsIGJ1dCByYXRoZXIgc3BlY2lmaWMgdG8gSVB2NCBtdWx0aXBhdGggcm91dGluZy4gR29vZC4gQm90aCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGFuZCBgZmliX3NlbGVjdF9wYXRoYCBhcHBlYXIgdG8gYmUgSVB2NCByb3V0aW5nIHNwZWNpZmljLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkuIExldCdzIGdldCB0aGUgdG9vbCBjYWxsIHRvIGBzZXQtcmVzdWx0c2AgcHJlcGFyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MzEsIk91dHB1dFRva2VucyI6MTMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA2OjA5Ljg1OTA2MTYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwNTc3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiLFxuICAgIFwiSVBfUk9VVEVfTVVMVElQQVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliX3NlbGVjdF9tdWx0aXBhdGhcIixcbiAgICBcImZpYl9zZWxlY3RfcGF0aFwiLFxuICAgIFwiaXBfbWtyb3V0ZV9pbnB1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUkVBRF9PTkNFKCkgYW5ub3RhdGlvbnMgd2hlbiByZWFkaW5nIG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyIGluIGZpYl9zZWxlY3RfbXVsdGlwYXRoKCkgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBjb21waWxlciB0ZWFyaW5nIGR1cmluZyBjb25jdXJyZW50IHJvdXRlIHNlbGVjdGlvbi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIElQdjQgbXVsdGlwYXRoIHJvdXRpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBfQURWQU5DRURfUk9VVEVSXCIsXG4gICAgXCJJUF9ST1VURV9NVUxUSVBBVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaWJfc2VsZWN0X211bHRpcGF0aFwiLFxuICAgIFwiZmliX3NlbGVjdF9wYXRoXCIsXG4gICAgXCJpcF9ta3JvdXRlX2lucHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBSRUFEX09OQ0UoKSBhbm5vdGF0aW9ucyB3aGVuIHJlYWRpbmcgbmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHIgaW4gZmliX3NlbGVjdF9tdWx0aXBhdGgoKSB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGNvbXBpbGVyIHRlYXJpbmcgZHVyaW5nIGNvbmN1cnJlbnQgcm91dGUgc2VsZWN0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgSVB2NCBtdWx0aXBhdGggcm91dGluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDY6MDkuOTM2MTI0ODE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjA4OTg2NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDY6MDkuOTM2NTA0MzI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTIwODYwMTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggd3JhcHMgdGhlIHJlYWQgb2YgYG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyYCB3aXRoIGBSRUFEX09OQ0UoKWAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIGFkZHJlc3MgY29uY3VycmVudCBkYXRhLXJhY2UgYWNjZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0cnVjdCBwYWRkaW5nLCBvciBidWZmZXIgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDAwNmIxMjE4ZjEwNTA2ZWIyNGY3ZjMyZTQxYTQ1NDIxYWRlNzM5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjA1OjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5pbmRleCA3YTM2MmYyZTJjMmJkLi44ODVjNmZhZTUyMzI3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG4rKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbkBAIC0yMjA0LDcgKzIyMDQsNyBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxuIFx0XHQgICAgKHVzZV9uZWlnaCBcdTAwMjZcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKHNhZGRyIFx1MDAyNlx1MDAyNiBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyID09IHNhZGRyKVxuK1x0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2IFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcbiBcdFx0XHRuaF9zY29yZSArPSAyO1xuIFx0XHRpZiAoaGFzaCBcdTAwM2M9IG5oX3VwcGVyX2JvdW5kKVxuIFx0XHRcdG5oX3Njb3JlKys7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNjowOS45MzY1MDUwODlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg4NDkyMjk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJ0bGUgSVB2NCBGSUIgT3B0aW1pemF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgbW9kaWZpY2F0aW9uIHRvIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGZ1bmN0aW9uLCBhcm91bmQgbGluZSAyMjA0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIHNlbGVjdHMgdGhlIGJlc3QgbmV4dCBob3AgZm9yIGEgcGFja2V0IHdoZW4gbXVsdGlwbGUgcGF0aHMgYXJlIGF2YWlsYWJsZSDigJMgcHJvYmFibHkgb3B0aW1pemluZyBmb3IgdGhlIGNvbW1vbiBjYXNlLCBnaXZlbiB0aGUgY29udGV4dC5cblxuTG9va2luZyBhdCB0aGUgYGRpZmZgLCB0aGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoaXM6IGBpZiAoc2FkZHIgXHUwMDI2XHUwMDI2IFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilgLiBJdCBhcHBlYXJzIHdlJ3ZlIHJlcGxhY2VkIGEgZGlyZWN0IGNvbXBhcmlzb24gYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHIgPT0gc2FkZHJgIHdpdGggYSBgUkVBRF9PTkNFYCB2ZXJzaW9uLiBUaGUgc3Vycm91bmRpbmcgY29kZSBkZWFscyB3aXRoIGBuaF9zY29yZWAgc28gdGhlIGNvbXBhcmlzb24gaGFzIGFuIGluZmx1ZW5jZSBvbiB0aGUgbmV4dCBob3Agc2VsZWN0aW9uIHNjb3JlLiBUaGUgY29uZGl0aW9uIG9ubHkgcnVucyB3aGVuIGBzYWRkcmAgaXMgcG9wdWxhdGVkLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgc3luY2hyb25pemF0aW9uIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2hlbiBhY2Nlc3NpbmcgdGhlIGBuaF9zYWRkcmAgZmllbGQgb2YgdGhlIGBuZXh0aG9wX25oYCBzdHJ1Y3R1cmUuXG5cblRoZSB1c2Ugb2YgYFJFQURfT05DRWAgaXMgYSBzdHJvbmcgaGludCB0aGF0IGBuaF9zYWRkcmAgbWlnaHQgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5IGJ5IGFub3RoZXIgdGhyZWFkIG9yIGludGVycnVwdCBoYW5kbGVyLiBJdCdzIGxpa2VseSB0aGF0IHdpdGhvdXQgdGhpcywgd2UgY291bGQgaGF2ZSBzdGFsZSBkYXRhIGFuZCBhbiBpbmNvcnJlY3QgbmV4dCBob3AgYmVpbmcgc2VsZWN0ZWQgZHVlIHRvIGEgdGltaW5nIGlzc3VlIGR1cmluZyB0aGUgY29tcGFyaXNvbi4gVGhlIGRldmVsb3BlcnMgY2xlYXJseSBpZGVudGlmaWVkIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHJlZ3VsYXIgcmVhZCB3b3VsZCBiZSBpbnN1ZmZpY2llbnQuXG5cbldlJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZmliX3NlbWFudGljcy5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgY291bGQgbGVhZCB0byBhIHJhY2UgY29uZGl0aW9uLiBJdCBpcyBuZWNlc3NhcnkgdG8gZGV0ZXJtaW5lIHdoYXQgc2V0cyB0aGUgdmFsdWUgb2YgYG5oX3NhZGRyYCBhbmQgd2hlbiB0aGUgc2NvcmluZyBjb2RlIGlzIGNhbGxlZC4gVGhlIGBSRUFEX09OQ0VgIHN1Z2dlc3RzIHRoZSB2YWx1ZSBvZiBgbmhfc2FkZHJgIGNhbiBjaGFuZ2UgYXN5bmNocm9ub3VzbHkuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBpZiB0aGlzIGNvZGUgcnVucyBvbiBhIG11bHRpY29yZSBzeXN0ZW0sIHRoaXMgaXMgYSBuZWNlc3Nhcnkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZS4gT3RoZXJ3aXNlLCBhbiBvbGQgdmFsdWUgbWF5IGJlIHJlYWQgYW5kIGFuIGluY29ycmVjdCBuZXh0LWhvcCBtaWdodCBiZSBzZWxlY3RlZC5cblxuU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSB2ZXJ5IGZvY3VzZWQgb3B0aW1pemF0aW9uIGZvY3VzZWQgb24gY29ycmVjdG5lc3Mgd2l0aGluIHRoZSBtdWx0aWhvcCByb3V0aW5nIHNlbGVjdGlvbiBwcm9jZXNzLiBBIGdvb2QgY2F0Y2gsIGFuZCBhIHNvbGlkIGV4YW1wbGUgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nIGluIGEga2VybmVsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNjoxNS44MjE0MzExN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxODA6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXFxuMjE4MTpcXHR7XFxuMjE4MjpcXHRcXHRzdHJ1Y3QgZmliX2luZm8gKmZpID0gcmVzLVxcdTAwM2VmaTtcXG4yMTgzOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGZpLVxcdTAwM2VmaWJfbmV0O1xcbjIxODQ6XFx0XFx0Ym9vbCB1c2VfbmVpZ2g7XFxuMjE4NTpcXHRcXHRpbnQgc2NvcmUgPSAtMTtcXG4yMTg2OlxcdFxcdF9fYmUzMiBzYWRkcjtcXG4yMTg3OlxcdFxcbjIxODg6XFx0XFx0aWYgKHVubGlrZWx5KHJlcy1cXHUwMDNlZmktXFx1MDAzZW5oKSkge1xcbjIxODk6XFx0XFx0XFx0bmV4dGhvcF9wYXRoX2ZpYl9yZXN1bHQocmVzLCBoYXNoKTtcXG4yMTkwOlxcdFxcdFxcdHJldHVybjtcXG4yMTkxOlxcdFxcdH1cXG4yMTkyOlxcdFxcbjIxOTM6XFx0XFx0dXNlX25laWdoID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfZmliX211bHRpcGF0aF91c2VfbmVpZ2gpO1xcbjIxOTQ6XFx0XFx0c2FkZHIgPSBmbDQgPyBmbDQtXFx1MDAzZXNhZGRyIDogMDtcXG4yMTk1OlxcdFxcbjIxOTY6XFx0XFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XFxuMjE5NzpcXHRcXHRcXHRpbnQgbmhfdXBwZXJfYm91bmQsIG5oX3Njb3JlID0gMDtcXG4yMTk4OlxcdFxcbjIxOTk6XFx0XFx0XFx0LyogTmV4dGhvcHMgd2l0aG91dCBhIGNhcnJpZXIgYXJlIGFzc2lnbmVkIGFuIHVwcGVyIGJvdW5kIG9mXFxuMjIwMDpcXHRcXHRcXHQgKiBtaW51cyBvbmUgd2hlbiBcXFwiaWdub3JlX3JvdXRlc193aXRoX2xpbmtkb3duXFxcIiBpcyBzZXQuXFxuMjIwMTpcXHRcXHRcXHQgKi9cXG4yMjAyOlxcdFxcdFxcdG5oX3VwcGVyX2JvdW5kID0gYXRvbWljX3JlYWQoXFx1MDAyNm5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF91cHBlcl9ib3VuZCk7XFxuMjIwMzpcXHRcXHRcXHRpZiAobmhfdXBwZXJfYm91bmQgPT0gLTEgfHxcXG4yMjA0OlxcdFxcdFxcdCAgICAodXNlX25laWdoIFxcdTAwMjZcXHUwMDI2ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpXFxuMjIwNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMjA2OlxcdFxcbjIyMDc6XFx0XFx0XFx0aWYgKHNhZGRyIFxcdTAwMjZcXHUwMDI2IFJFQURfT05DRShuZXh0aG9wX25oLVxcdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXFxuMjIwODpcXHRcXHRcXHRcXHRuaF9zY29yZSArPSAyO1xcbjIyMDk6XFx0XFx0XFx0aWYgKGhhc2ggXFx1MDAzYz0gbmhfdXBwZXJfYm91bmQpXFxuMjIxMDpcXHRcXHRcXHRcXHRuaF9zY29yZSsrO1xcbjIyMTE6XFx0XFx0XFx0aWYgKHNjb3JlIFxcdTAwM2Mgbmhfc2NvcmUpIHtcXG4yMjEyOlxcdFxcdFxcdFxcdHJlcy1cXHUwMDNlbmhfc2VsID0gbmhzZWw7XFxuMjIxMzpcXHRcXHRcXHRcXHRyZXMtXFx1MDAzZW5oYyA9IFxcdTAwMjZuZXh0aG9wX25oLVxcdTAwM2VuaF9jb21tb247XFxuMjIxNDpcXHRcXHRcXHRcXHRpZiAobmhfc2NvcmUgPT0gMyB8fCAoIXNhZGRyIFxcdTAwMjZcXHUwMDI2IG5oX3Njb3JlID09IDEpKVxcbjIyMTU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjIyMTY6XFx0XFx0XFx0XFx0c2NvcmUgPSBuaF9zY29yZTtcXG4yMjE3OlxcdFxcdFxcdH1cXG4yMjE4OlxcdFxcbjIyMTk6XFx0XFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpO1xcbjIyMjA6XFx0fVxcbjIyMjE6XFx0I2VuZGlmXFxuMjIyMjpcXHRcXG4yMjIzOlxcdHZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4yMjI0OlxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dpNCAqZmw0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjIyMjU6XFx0e1xcbjIyMjY6XFx0XFx0aWYgKGZsNC1cXHUwMDNlZmxvd2k0X29pZilcXG4yMjI3OlxcdFxcdFxcdGdvdG8gY2hlY2tfc2FkZHI7XFxuMjIyODpcXHRcXG4yMjI5OlxcdCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA2OjE1LjgyMTU0Mzk5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMjM1Mzg3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBtb2RpZmllcyBhY2Nlc3MgdG8gYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJgIHdpdGhpbiBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGJ5IGFkZGluZyBgUkVBRF9PTkNFKClgLiBUaGlzIHNjcmVhbXMgc3RhbmRhcmQgY29uY3VycmVuY3kgZml4IHRvIG1lLCBwcm9iYWJseSBmbGFnZ2VkIGJ5IEtDU0FOIG9yIGEgdGhvcm91Z2ggY29kZSByZXZpZXcuIEl0J3MgYSB0ZXh0Ym9vayByZXNwb25zZSB0byBhIGRhdGEgcmFjZS5cblxuTm93LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gRG9lcyB0aGlzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYW55IHdheT8gTm8sIGBuaF9zYWRkcmAgaXMgYSBwcmUtZXhpc3RpbmcgZmllbGQgd2l0aGluIHRoZSBgZmliX25oYCBzdHJ1Y3R1cmUuIEFkZGluZyBgUkVBRF9PTkNFKClgIGlzIHNpbXBseSBhIHNhZmVndWFyZCBhZ2FpbnN0IGNvbXBpbGVyIG9wdGltaXphdGlvbnMgYW5kIHBvdGVudGlhbCBkYXRhIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgdGhhdCBmaWVsZCB3aGlsZSB3cml0ZXMgbWlnaHQgYmUgb2NjdXJyaW5nIGNvbmN1cnJlbnRseS5cblxuTGV0J3MgcnVuIHRocm91Z2ggdGhlIG1lbnRhbCBjaGVja2xpc3Q6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZT8gTm9wZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOZWdhdGl2ZS5cbjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyBOb3QgaGVyZS5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyBhZ2Fpbi5cblxuS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZTsgd2UncmUgZGVhbGluZyB3aXRoIGEgc3RhbmRhcmQgc2FuaXRpemVyL0tDU0FOL0tBU0FOIGlzc3VlLiBLTVNBTiBpc24ndCB0aGUgcmlnaHQgdG9vbC4gU28gdGhpcyBzZWVtcyBjbGVhbi4gSSdtIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk2LCJPdXRwdXRUb2tlbnMiOjExMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA2OjE5LjE0NTA4NjU4OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggd3JhcHMgdGhlIHJlYWQgb2YgYG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyYCB3aXRoIGBSRUFEX09OQ0UoKWAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIGFkZHJlc3MgY29uY3VycmVudCBkYXRhLXJhY2UgYWNjZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0cnVjdCBwYWRkaW5nLCBvciBidWZmZXIgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggd3JhcHMgdGhlIHJlYWQgb2YgYG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyYCB3aXRoIGBSRUFEX09OQ0UoKWAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIGFkZHJlc3MgY29uY3VycmVudCBkYXRhLXJhY2UgYWNjZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0cnVjdCBwYWRkaW5nLCBvciBidWZmZXIgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowq6gcl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 07:44:34 +0000 UTC FinishedAt: 2026-09-11 08:06:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IP_ADVANCED_ROUTER", "IP_ROUTE_MULTIPATH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IP_ADVANCED_ROUTER", "IP_ROUTE_MULTIPATH" ], "series_id": "b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fib_select_multipath", "fib_select_path", "ip_mkroute_input" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBfQURWQU5DRURfUk9VVEVSJiMzNDssCiAgICAmIzM0O0lQX1JPVVRFX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpYl9zZWxlY3RfbXVsdGlwYXRoJiMzNDssCiAgICAmIzM0O2ZpYl9zZWxlY3RfcGF0aCYjMzQ7LAogICAgJiMzNDtpcF9ta3JvdXRlX2lucHV0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggd3JhcHMgdGhlIHJlYWQgb2YgYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJgIHdpdGggYFJFQURfT05DRSgpYCBpbiBgZmliX3NlbGVjdF9tdWx0aXBhdGgoKWAgdG8gYWRkcmVzcyBjb25jdXJyZW50IGRhdGEtcmFjZSBhY2Nlc3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgbWVtb3J5IGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgc3RydWN0IHBhZGRpbmcsIG9yIGJ1ZmZlciBhbGxvY2F0aW9ucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBSRUFEX09OQ0UoKSBhbm5vdGF0aW9ucyB3aGVuIHJlYWRpbmcgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkciBpbiBmaWJfc2VsZWN0X211bHRpcGF0aCgpIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgY29tcGlsZXIgdGVhcmluZyBkdXJpbmcgY29uY3VycmVudCByb3V0ZSBzZWxlY3Rpb24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBJUHY0IG11bHRpcGF0aCByb3V0aW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDAwNmIxMjE4ZjEwNTA2ZWIyNGY3ZjMyZTQxYTQ1NDIxYWRlNzM5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjA1OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuaW5kZXggN2EzNjJmMmUyYzJiZC4uODg1YzZmYWU1MjMyNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5AQCAtMjIwNCw3ICYjNDM7MjIwNCw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXG4gXHRcdCAgICAodXNlX25laWdoIFx1MDAyNlx1MDAyNiAhZmliX2dvb2RfbmgobmV4dGhvcF9uaCkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2IG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHIgPT0gc2FkZHIpXG4mIzQzO1x0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2IFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcbiBcdFx0XHRuaF9zY29yZSAmIzQzOz0gMjtcbiBcdFx0aWYgKGhhc2ggXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcbiBcdFx0XHRuaF9zY29yZSYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OywKICAgICYjMzQ7SVBfUk9VVEVfTVVMVElQQVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmliX3NlbGVjdF9tdWx0aXBhdGgmIzM0OywKICAgICYjMzQ7ZmliX3NlbGVjdF9wYXRoJiMzNDssCiAgICAmIzM0O2lwX21rcm91dGVfaW5wdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBSRUFEX09OQ0UoKSBhbm5vdGF0aW9ucyB3aGVuIHJlYWRpbmcgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkciBpbiBmaWJfc2VsZWN0X211bHRpcGF0aCgpIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgY29tcGlsZXIgdGVhcmluZyBkdXJpbmcgY29uY3VycmVudCByb3V0ZSBzZWxlY3Rpb24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBJUHY0IG11bHRpcGF0aCByb3V0aW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDAwNmIxMjE4ZjEwNTA2ZWIyNGY3ZjMyZTQxYTQ1NDIxYWRlNzM5MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA4OjA1OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCmluZGV4IDdhMzYyZjJlMmMyYmQuLjg4NWM2ZmFlNTIzMjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKQEAgLTIyMDQsNyAmIzQzOzIyMDQsNyBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLAogCQkgICAgKHVzZV9uZWlnaCAmYW1wOyZhbXA7ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoc2FkZHIgJmFtcDsmYW1wOyBuZXh0aG9wX25oLSZndDtuaF9zYWRkciA9PSBzYWRkcikKJiM0MzsJCWlmIChzYWRkciAmYW1wOyZhbXA7IFJFQURfT05DRShuZXh0aG9wX25oLSZndDtuaF9zYWRkcikgPT0gc2FkZHIpCiAJCQluaF9zY29yZSAmIzQzOz0gMjsKIAkJaWYgKGhhc2ggJmx0Oz0gbmhfdXBwZXJfYm91bmQpCiAJCQluaF9zY29yZSYjNDM7JiM0Mzs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBmaWJfc2VsZWN0X211bHRpcGF0aCoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCBhIHBhdGNoIGZvciB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGFtZDY0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGRpZmYuIExldCYjMzk7cyBzZWUuLi4gQWgsIGl0JiMzOTtzIG1vZGlmeWluZyBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGZ1bmN0aW9uLgoKVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGxpbmUgMjIwNCwgd2hlcmUgdGhleSYjMzk7dmUgcmVwbGFjZWQgYSBkaXJlY3QgY29tcGFyaXNvbiB3aXRoIGBSRUFEX09OQ0VgLiBJbnR1aXRpdmVseSwgdGhpcyBzdWdnZXN0cyB0aGVyZSBtaWdodCBiZSBtZW1vcnkgc3luY2hyb25pemF0aW9uIGNvbmNlcm5zLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgY29tcGFyaW5nIGBuZXh0aG9wX25oLSZndDtuaF9zYWRkcmAgZGlyZWN0bHkgd2l0aCBgc2FkZHJgLiBOb3cgaXQmIzM5O3MgdXNpbmcgYFJFQURfT05DRWAuIFRoYXQgdGVsbHMgbWUgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIHNoYXJlZCBtZW1vcnksIHBvc3NpYmx5IG11bHRpLXRocmVhZGVkIGFjY2VzcyB0byBgbmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHJgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgdGhlIGNvbnRleHQgb2YgaG93IGBuZXh0aG9wX25oLSZndDtuaF9zYWRkcmAgaXMgYmVpbmcgd3JpdHRlbiBhbmQgcmVhZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgYFJFQURfT05DRWAgaXMgbmVjZXNzYXJ5IGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3MgcHVsbCB1cCB0aGUgY29kZSB1c2luZyBgcmVhZC1maWxlYCBhbmQgY2hlY2sgYXJvdW5kIGxpbmUgMjIwNCBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxODA6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNClcbjIxODE6XHR7XG4yMTgyOlx0XHRzdHJ1Y3QgZmliX2luZm8gKmZpID0gcmVzLVx1MDAzZWZpO1xuMjE4MzpcdFx0c3RydWN0IG5ldCAqbmV0ID0gZmktXHUwMDNlZmliX25ldDtcbjIxODQ6XHRcdGJvb2wgdXNlX25laWdoO1xuMjE4NTpcdFx0aW50IHNjb3JlID0gLTE7XG4yMTg2Olx0XHRfX2JlMzIgc2FkZHI7XG4yMTg3Olx0XG4yMTg4Olx0XHRpZiAodW5saWtlbHkocmVzLVx1MDAzZWZpLVx1MDAzZW5oKSkge1xuMjE4OTpcdFx0XHRuZXh0aG9wX3BhdGhfZmliX3Jlc3VsdChyZXMsIGhhc2gpO1xuMjE5MDpcdFx0XHRyZXR1cm47XG4yMTkxOlx0XHR9XG4yMTkyOlx0XG4yMTkzOlx0XHR1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX2ZpYl9tdWx0aXBhdGhfdXNlX25laWdoKTtcbjIxOTQ6XHRcdHNhZGRyID0gZmw0ID8gZmw0LVx1MDAzZXNhZGRyIDogMDtcbjIxOTU6XHRcbjIxOTY6XHRcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuMjE5NzpcdFx0XHRpbnQgbmhfdXBwZXJfYm91bmQsIG5oX3Njb3JlID0gMDtcbjIxOTg6XHRcbjIxOTk6XHRcdFx0LyogTmV4dGhvcHMgd2l0aG91dCBhIGNhcnJpZXIgYXJlIGFzc2lnbmVkIGFuIHVwcGVyIGJvdW5kIG9mXG4yMjAwOlx0XHRcdCAqIG1pbnVzIG9uZSB3aGVuIFwmIzM0O2lnbm9yZV9yb3V0ZXNfd2l0aF9saW5rZG93blwmIzM0OyBpcyBzZXQuXG4yMjAxOlx0XHRcdCAqL1xuMjIwMjpcdFx0XHRuaF91cHBlcl9ib3VuZCA9IGF0b21pY19yZWFkKFx1MDAyNm5leHRob3BfbmgtXHUwMDNlZmliX25oX3VwcGVyX2JvdW5kKTtcbjIyMDM6XHRcdFx0aWYgKG5oX3VwcGVyX2JvdW5kID09IC0xIHx8XG4yMjA0Olx0XHRcdCAgICAodXNlX25laWdoIFx1MDAyNlx1MDAyNiAhZmliX2dvb2RfbmgobmV4dGhvcF9uaCkpKVxuMjIwNTpcdFx0XHRcdGNvbnRpbnVlO1xuMjIwNjpcdFxuMjIwNzpcdFx0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2IFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcbjIyMDg6XHRcdFx0XHRuaF9zY29yZSAmIzQzOz0gMjtcbjIyMDk6XHRcdFx0aWYgKGhhc2ggXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcbjIyMTA6XHRcdFx0XHRuaF9zY29yZSYjNDM7JiM0Mzs7XG4yMjExOlx0XHRcdGlmIChzY29yZSBcdTAwM2Mgbmhfc2NvcmUpIHtcbjIyMTI6XHRcdFx0XHRyZXMtXHUwMDNlbmhfc2VsID0gbmhzZWw7XG4yMjEzOlx0XHRcdFx0cmVzLVx1MDAzZW5oYyA9IFx1MDAyNm5leHRob3BfbmgtXHUwMDNlbmhfY29tbW9uO1xuMjIxNDpcdFx0XHRcdGlmIChuaF9zY29yZSA9PSAzIHx8ICghc2FkZHIgXHUwMDI2XHUwMDI2IG5oX3Njb3JlID09IDEpKVxuMjIxNTpcdFx0XHRcdFx0cmV0dXJuO1xuMjIxNjpcdFx0XHRcdHNjb3JlID0gbmhfc2NvcmU7XG4yMjE3Olx0XHRcdH1cbjIyMTg6XHRcbjIyMTk6XHRcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcbjIyMjA6XHR9XG4yMjIxOlx0I2VuZGlmXG4yMjIyOlx0XG4yMjIzOlx0dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuMjIyNDpcdFx0XHQgICAgIHN0cnVjdCBmbG93aTQgKmZsNCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjIyMjU6XHR7XG4yMjI2Olx0XHRpZiAoZmw0LVx1MDAzZWZsb3dpNF9vaWYpXG4yMjI3Olx0XHRcdGdvdG8gY2hlY2tfc2FkZHI7XG4yMjI4Olx0XG4yMjI5Olx0I2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzM5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIHpvb20gaW4gb24gbGluZSAyMTgwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBzcGVjaWZpYyBwb2ludCBpbiB0aGUgY29uZmlndXJhdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSBzb21lIGNyaXRpY2FsIGxvZ2ljIHJlbGF0ZWQgdG8gYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBpcyBpbXBsZW1lbnRlZC4gSSB3YW50IHRvIHNlZSB0aGUgYnJvYWRlciBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZ3VhcmRzIGFuZCBob3cgdGhleSBhcmUgaW1wYWN0aW5nIHRoaXMgZnVuY3Rpb24uIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIGV4YW1pbmUgbGluZXMgMjE2MCB0byAyMjAwLiBUaGlzIHNob3VsZCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBkZXRlcm1pbmUgd2hhdCBjb25maWd1cmF0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGluZywgaW5mbHVlbmNpbmcsIG9yIGNvbnRyb2xsaW5nIHRoZSBleGVjdXRpb24gb2YgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBvciBtYWNyb3MgdGhhdCBtaWdodCBiZSBlbmFibGluZywgZGlzYWJsaW5nLCBvciBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIHRoaXMgZnVuY3Rpb24gYmFzZWQgb24gdGhlIHN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTYwOlx0XG4yMTYxOlx0XHRcdGlmIChsaWtlbHkobmgtXHUwMDNlZmliX25oX2d3X2ZhbWlseSA9PSBBRl9JTkVUKSlcbjIxNjI6XHRcdFx0XHRuID0gX19pcHY0X25laWdoX2xvb2t1cF9ub3JlZihuaC1cdTAwM2VmaWJfbmhfZGV2LFxuMjE2MzpcdFx0XHRcdFx0XHRcdCAgIChfX2ZvcmNlIHUzMiluaC1cdTAwM2VmaWJfbmhfZ3c0KTtcbjIxNjQ6XHRcdFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2XG4yMTY1Olx0XHRcdFx0IG5oLVx1MDAzZWZpYl9uaF9nd19mYW1pbHkgPT0gQUZfSU5FVDYpXG4yMTY2Olx0XHRcdFx0biA9IF9faXB2Nl9uZWlnaF9sb29rdXBfbm9yZWYobmgtXHUwMDNlZmliX25oX2RldixcbjIxNjc6XHRcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZuaC1cdTAwM2VmaWJfbmhfZ3c2KTtcbjIxNjg6XHRcdFx0ZWxzZVxuMjE2OTpcdFx0XHRcdG4gPSBOVUxMO1xuMjE3MDpcdFx0XHRpZiAobilcbjIxNzE6XHRcdFx0XHRzdGF0ZSA9IFJFQURfT05DRShuLVx1MDAzZW51ZF9zdGF0ZSk7XG4yMTcyOlx0XG4yMTczOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjE3NDpcdFx0fVxuMjE3NTpcdFxuMjE3NjpcdFx0cmV0dXJuICEhKHN0YXRlIFx1MDAyNiBOVURfVkFMSUQpO1xuMjE3NzpcdH1cbjIxNzg6XHRcbjIxNzk6XHR2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxuMjE4MDpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KVxuMjE4MTpcdHtcbjIxODI6XHRcdHN0cnVjdCBmaWJfaW5mbyAqZmkgPSByZXMtXHUwMDNlZmk7XG4yMTgzOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBmaS1cdTAwM2VmaWJfbmV0O1xuMjE4NDpcdFx0Ym9vbCB1c2VfbmVpZ2g7XG4yMTg1Olx0XHRpbnQgc2NvcmUgPSAtMTtcbjIxODY6XHRcdF9fYmUzMiBzYWRkcjtcbjIxODc6XHRcbjIxODg6XHRcdGlmICh1bmxpa2VseShyZXMtXHUwMDNlZmktXHUwMDNlbmgpKSB7XG4yMTg5Olx0XHRcdG5leHRob3BfcGF0aF9maWJfcmVzdWx0KHJlcywgaGFzaCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA5NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBNdWx0aXBhdGggUm91dGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAgaW4gcmVsYXRpb24gdG8gc29tZSBjb2RlIGFyb3VuZCBsaW5lIDIxNzkuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBsb2NhdGUgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaXRzZWxmIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgd2FudCB0byBzZWUgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBndWFyZGVkLCBwcm9iYWJseSB0byB1bmRlcnN0YW5kIHdoYXQgZnVuY3Rpb25hbGl0eSBpdCBlbmFibGVzIG9yIGRpc2FibGVzLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgdGhhdCByZWxhdGVzIHRvIHRoZSBjb2RlIGluIHRoYXQgdmljaW5pdHkgb2YgdGhlIGZpbGUuIEtub3dpbmcgaXRzIGxvY2F0aW9uIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHJvdXRpbmcgbG9naWMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgbXkgc3RhcnRpbmcgcG9pbnQgdG8gZGVjaXBoZXIgdGhlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMjA6XHRcdFx0XHRjb250aW51ZTtcbjIxMjE6XHRcbjIxMjI6XHRcdFx0cHJldl9maSA9IGZpO1xuMjEyMzpcdFx0XHRhbGl2ZSA9IDA7XG4yMTI0Olx0XHRcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuMjEyNTpcdFx0XHRcdGlmICghKG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNiBuaF9mbGFncykpIHtcbjIxMjY6XHRcdFx0XHRcdGFsaXZlJiM0MzsmIzQzOztcbjIxMjc6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjEyODpcdFx0XHRcdH1cbjIxMjk6XHRcdFx0XHRpZiAoIW5leHRob3BfbmgtXHUwMDNlZmliX25oX2RldiB8fFxuMjEzMDpcdFx0XHRcdCAgICAhKG5leHRob3BfbmgtXHUwMDNlZmliX25oX2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSlcbjIxMzE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjEzMjpcdFx0XHRcdGlmIChuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9kZXYgIT0gZGV2IHx8XG4yMTMzOlx0XHRcdFx0ICAgICFfX2luX2Rldl9nZXRfcnRubChkZXYpKVxuMjEzNDpcdFx0XHRcdFx0Y29udGludWU7XG4yMTM1Olx0XHRcdFx0YWxpdmUmIzQzOyYjNDM7O1xuMjEzNjpcdFx0XHRcdG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNj0gfm5oX2ZsYWdzO1xuMjEzNzpcdFx0XHRcdGNhbGxfZmliX25oX25vdGlmaWVycyhuZXh0aG9wX25oLCBGSUJfRVZFTlRfTkhfQUREKTtcbjIxMzg6XHRcdFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpXG4yMTM5Olx0XG4yMTQwOlx0XHRcdGlmIChhbGl2ZSBcdTAwM2UgMCkge1xuMjE0MTpcdFx0XHRcdGZpLVx1MDAzZWZpYl9mbGFncyBcdTAwMjY9IH5uaF9mbGFncztcbjIxNDI6XHRcdFx0XHRyZXQmIzQzOyYjNDM7O1xuMjE0MzpcdFx0XHR9XG4yMTQ0Olx0XG4yMTQ1Olx0XHRcdGZpYl9yZWJhbGFuY2UoZmkpO1xuMjE0NjpcdFx0fVxuMjE0NzpcdFxuMjE0ODpcdFx0cmV0dXJuIHJldDtcbjIxNDk6XHR9XG4yMTUwOlx0XG4yMTUxOlx0I2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcbjIxNTI6XHRzdGF0aWMgYm9vbCBmaWJfZ29vZF9uaChjb25zdCBzdHJ1Y3QgZmliX25oICpuaClcbjIxNTM6XHR7XG4yMTU0Olx0XHRpbnQgc3RhdGUgPSBOVURfUkVBQ0hBQkxFO1xuMjE1NTpcdFxuMjE1NjpcdFx0aWYgKG5oLVx1MDAzZWZpYl9uaF9zY29wZSA9PSBSVF9TQ09QRV9MSU5LKSB7XG4yMTU3Olx0XHRcdHN0cnVjdCBuZWlnaGJvdXIgKm47XG4yMTU4Olx0XG4yMTU5Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjIxNjA6XHRcbjIxNjE6XHRcdFx0aWYgKGxpa2VseShuaC1cdTAwM2VmaWJfbmhfZ3dfZmFtaWx5ID09IEFGX0lORVQpKVxuMjE2MjpcdFx0XHRcdG4gPSBfX2lwdjRfbmVpZ2hfbG9va3VwX25vcmVmKG5oLVx1MDAzZWZpYl9uaF9kZXYsXG4yMTYzOlx0XHRcdFx0XHRcdFx0ICAgKF9fZm9yY2UgdTMyKW5oLVx1MDAzZWZpYl9uaF9ndzQpO1xuMjE2NDpcdFx0XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTczCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIFBhdGNoIGZvciBEYXRhIFJhY2VzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIGl0IGRvd24gcGllY2UgYnkgcGllY2UuIEZpcnN0LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogd2hhdCBleGFjdGx5IGhhcyBjaGFuZ2VkPyBBaGEsIGl0IGxvb2tzIGxpa2UgYSBtb2RpZmljYXRpb24gaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCBmdW5jdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGUgcmVhZCBvZiBgbmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHJgLCB3aGljaCBoYXMgYmVlbiBhbHRlcmVkIHRvIHVzZSBgUkVBRF9PTkNFKG5leHRob3BfbmgtJmd0O25oX3NhZGRyKWAuIFRoaXMgc2NyZWFtcyBkYXRhIHJhY2UgcHJvdGVjdGlvbiEgSXQmIzM5O3MgbGlrZWx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgY29tcGlsZXIgdGVhcmluZyBpc3N1ZSB3aGVuIGNvbmN1cnJlbnRseSByZWFkaW5nIGBuaF9zYWRkcmAuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXMgdGhpcyBldmVuIHJlYWNoYWJsZSBjb2RlPyBHaXZlbiB0aGUgZmlsZSBhbmQgZnVuY3Rpb24gbmFtZSwgdGhpcyBpcyBkZWVwIHdpdGhpbiB0aGUgSVB2NCByb3V0aW5nIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbG9uZyB3aXRoIGBmaWJfc2VsZWN0X3BhdGhgIGFuZCBvdGhlcnMsIHNvIHRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlIHllcy4gSXQmIzM5O3MgdXNlZCB3aGVuIHN0YW5kYXJkIG5ldHdvcmtpbmcsIHJvdXRpbmcgc29ja2V0cywgbmV0bGluaywgb3IgcGFja2V0cyBhcmUgaW52b2x2ZWQuIElmIGBJUF9ST1VURV9NVUxUSVBBVEhgIGlzIGVuYWJsZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBydW5uaW5nLiBTbywgSSBoYXZlIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBgSVBfUk9VVEVfTVVMVElQQVRIYCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NjM9Y29uZmlnIElQX01VTFRJUExFX1RBQkxFU1xuLS1cbm5ldC9pcHY0L0tjb25maWctNzktXG5uZXQvaXB2NC9LY29uZmlnOjgwOmNvbmZpZyBJUF9ST1VURV9NVUxUSVBBVEhcbm5ldC9pcHY0L0tjb25maWctODEtXHRib29sIFwmIzM0O0lQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTQxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIElQdjQgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBpcyBgbmV0L2lwdjQvS2NvbmZpZ2AuIEl0JiMzOTtzIGEgS2NvbmZpZyBmaWxlLCBzbyBpdCBkZWZpbmVzIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhhdCBzdWJzeXN0ZW0uIExpbmUgODAuLi4gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCYjMzk7cyBhIHJlbGF0aXZlbHkgc3BlY2lmaWMgc3RhcnRpbmcgcG9pbnQsIHdoaWNoIG1lYW5zIEkgaGF2ZSBhIGdvb2QgaWRlYSBvZiAqd2hhdCogSSYjMzk7bSBsb29raW5nIGZvci4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB1c3VhbGx5IHNpdHMsIGFuZCBJJiMzOTtsbCBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkIGFuZCB3aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJiMzOTttIHdvcmtpbmcgb24uIFRoZSBnb2FsIGlzIHRvIGVpdGhlciB1bmRlcnN0YW5kIG9yIGlkZW50aWZ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdoYXRldmVyIHByb2JsZW0vdG9waWMgSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdFx0ICBSb3V0aW5nIGFuZCBUcmFmZmljIENvbnRyb2wgZG9jdW1lbnRhdGlvbiBhdFxuICA3NjpcdFx0ICBcdTAwM2NodHRwczovL2xhcnRjLm9yZy9ob3d0by9sYXJ0Yy5ycGRiLmh0bWxcdTAwM2VcbiAgNzc6XHRcbiAgNzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzk6XHRcbiAgODA6XHRjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIXG4gIDgxOlx0XHRib29sIFwmIzM0O0lQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFwmIzM0O1xuICA4MjpcdFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcbiAgODM6XHRcdGhlbHBcbiAgODQ6XHRcdCAgTm9ybWFsbHksIHRoZSByb3V0aW5nIHRhYmxlcyBzcGVjaWZ5IGEgc2luZ2xlIGFjdGlvbiB0byBiZSB0YWtlbiBpblxuICA4NTpcdFx0ICBhIGRldGVybWluaXN0aWMgbWFubmVyIGZvciBhIGdpdmVuIHBhY2tldC4gSWYgeW91IHNheSBZIGhlcmVcbiAgODY6XHRcdCAgaG93ZXZlciwgaXQgYmVjb21lcyBwb3NzaWJsZSB0byBhdHRhY2ggc2V2ZXJhbCBhY3Rpb25zIHRvIGEgcGFja2V0XG4gIDg3Olx0XHQgIHBhdHRlcm4sIGluIGVmZmVjdCBzcGVjaWZ5aW5nIHNldmVyYWwgYWx0ZXJuYXRpdmUgcGF0aHMgdG8gdHJhdmVsXG4gIDg4Olx0XHQgIGZvciB0aG9zZSBwYWNrZXRzLiBUaGUgcm91dGVyIGNvbnNpZGVycyBhbGwgdGhlc2UgcGF0aHMgdG8gYmUgb2ZcbiAgODk6XHRcdCAgZXF1YWwgXCYjMzQ7Y29zdFwmIzM0OyBhbmQgY2hvb3NlcyBvbmUgb2YgdGhlbSBpbiBhIG5vbi1kZXRlcm1pbmlzdGljIGZhc2hpb25cbiAgOTA6XHRcdCAgaWYgYSBtYXRjaGluZyBwYWNrZXQgYXJyaXZlcy5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgSVBfUk9VVEVfVkVSQk9TRVxuICA5MzpcdFx0Ym9vbCBcJiMzNDtJUDogdmVyYm9zZSByb3V0ZSBtb25pdG9yaW5nXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxuICA5NTpcdFx0aGVscFxuICA5NjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgd2hpY2ggaXMgcmVjb21tZW5kZWQsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIHByaW50XG4gIDk3Olx0XHQgIHZlcmJvc2UgbWVzc2FnZXMgcmVnYXJkaW5nIHRoZSByb3V0aW5nLCBmb3IgZXhhbXBsZSB3YXJuaW5ncyBhYm91dFxuICA5ODpcdFx0ICByZWNlaXZlZCBwYWNrZXRzIHdoaWNoIGxvb2sgc3RyYW5nZSBhbmQgY291bGQgYmUgZXZpZGVuY2Ugb2YgYW5cbiAgOTk6XHRcdCAgYXR0YWNrIG9yIGEgbWlzY29uZmlndXJlZCBzeXN0ZW0gc29tZXdoZXJlLiBUaGUgaW5mb3JtYXRpb24gaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBJUF9ST1VURV9NVUxUSVBBVEhgIG9wdGlvbiwgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgZGVwZW5kZW50IG9uIGBJUF9BRFZBTkNFRF9ST1VURVJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBkdWUgdG8gdGhlIG1vcmUgY29tcGxleCByb3V0aW5nIGNhcGFiaWxpdGllcyByZXF1aXJlZC4gVG8gY29uZmlybSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBJUF9BRFZBTkNFRF9ST1VURVJgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYG5ldC9pcHY0L0tjb25maWdgIHRvIHJldmlldyB0aGUgZGV0YWlscyBvbiBob3cgaXQgaXMgZGVmaW5lZC4gSXQmIzM5O3MgYSBxdWljayBqdW1wIHRvIHNlZSBleGFjdGx5IHdoYXQgZmVhdHVyZXMgYXJlIHdyYXBwZWQgYnkgYElQX0FEVkFOQ0VEX1JPVVRFUmAsIHRoYXQgd2lsbCBhbGxvdyBtZSB0byBhY2N1cmF0ZWx5IHJlYXNvbiB3aHkgYElQX1JPVVRFX01VTFRJUEFUSGAgbmVlZHMgaXQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGFzc2VzcyB3aGV0aGVyIHRoYXQgZGVwZW5kZW5jeSBpcyBhcHByb3ByaWF0ZSBpbiB0aGUgY29udGV4dCBJJiMzOTttIHdvcmtpbmcgaW4sIG9yIGlmIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHJlbGF4IGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NTpcdFxuICA0NjpcdFx0ICBlY2hvIDEgXHUwMDNlIC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL1x1MDAzY2RldmljZVx1MDAzZS9ycF9maWx0ZXJcbiAgNDc6XHRcdCAgIG9yXG4gIDQ4Olx0XHQgIGVjaG8gMSBcdTAwM2UgL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL3JwX2ZpbHRlclxuICA0OTpcdFxuICA1MDpcdFx0ICBOb3RlIHRoYXQgc29tZSBkaXN0cmlidXRpb25zIGVuYWJsZSBpdCBpbiBzdGFydHVwIHNjcmlwdHMuXG4gIDUxOlx0XHQgIEZvciBkZXRhaWxzIGFib3V0IHJwX2ZpbHRlciBzdHJpY3QgYW5kIGxvb3NlIG1vZGUgcmVhZFxuICA1MjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XHUwMDNlLlxuICA1MzpcdFxuICA1NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOIGhlcmUuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIElQX0ZJQl9UUklFX1NUQVRTXG4gIDU3Olx0XHRib29sIFwmIzM0O0ZJQiBUUklFIHN0YXRpc3RpY3NcJiMzNDtcbiAgNTg6XHRcdGRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSXG4gIDU5Olx0XHRoZWxwXG4gIDYwOlx0XHQgIEtlZXAgdHJhY2sgb2Ygc3RhdGlzdGljcyBvbiBzdHJ1Y3R1cmUgb2YgRklCIFRSSUUgdGFibGUuXG4gIDYxOlx0XHQgIFVzZWZ1bCBmb3IgdGVzdGluZyBhbmQgbWVhc3VyaW5nIFRSSUUgcGVyZm9ybWFuY2UuXG4gIDYyOlx0XG4gIDYzOlx0Y29uZmlnIElQX01VTFRJUExFX1RBQkxFU1xuICA2NDpcdFx0Ym9vbCBcJiMzNDtJUDogcG9saWN5IHJvdXRpbmdcJiMzNDtcbiAgNjU6XHRcdGRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSXG4gIDY2Olx0XHRzZWxlY3QgRklCX1JVTEVTXG4gIDY3Olx0XHRoZWxwXG4gIDY4Olx0XHQgIE5vcm1hbGx5LCBhIHJvdXRlciBkZWNpZGVzIHdoYXQgdG8gZG8gd2l0aCBhIHJlY2VpdmVkIHBhY2tldCBiYXNlZFxuICA2OTpcdFx0ICBzb2xlbHkgb24gdGhlIHBhY2tldCYjMzk7cyBmaW5hbCBkZXN0aW5hdGlvbiBhZGRyZXNzLiBJZiB5b3Ugc2F5IFkgaGVyZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgdGhlIERlZmluaXRpb24gb2YgYElQX0FEVkFOQ0VEX1JPVVRFUmAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSBrbm93IHRoaXMgY29uc3RhbnQgaXMgaW4gdGhlIGNvZGUgYmFzZSBzb21ld2hlcmUsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBsb2NhdGUgaXRzIGRlY2xhcmF0aW9uLiBJIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIHRpbWUgbWFudWFsbHkgc2Nhbm5pbmcgdGhyb3VnaCBmaWxlcywgc28gSSBuZWVkIHRvIHVzZSBzb21lIHRvb2xpbmcgb3IgYSBxdWljayBzZWFyY2ggdG8gcGlucG9pbnQgaXRzIGxvY2F0aW9uLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyB0YXNrLCBhbmQgdGhlIG1ldGhvZCBJIGNob29zZSB3aWxsIGRlcGVuZCBvbiB0aGUgcHJvamVjdCYjMzk7cyBzZXR1cCBhbmQgd2hhdCB0b29scyBhcmUgcmVhZGlseSBhdmFpbGFibGUuIEhvcGVmdWxseSwgaXQmIzM5O3MgZGVmaW5lZCBpbiBhIGNvbW1vbiBoZWFkZXIgb3IgY29uZmlndXJhdGlvbiBmaWxlLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBzZWFyY2ggc2ltcGxlci4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTU9Y29uZmlnIElQX01VTFRJQ0FTVFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTQtXG5uZXQvaXB2NC9LY29uZmlnOjE1OmNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcbm5ldC9pcHY0L0tjb25maWctMTYtXHRib29sIFwmIzM0O0lQOiBhZHZhbmNlZCByb3V0ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIFJvdXRpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgYWR2YW5jZWQgSVAgcm91dGluZywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBJUF9BRFZBTkNFRF9ST1VURVJgLCBgSVBfUk9VVEVfTVVMVElQQVRIYCwgYW5kIHRoZSBicm9hZGVyIGBJTkVUYCBjb250ZXh0LiBNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgdGhlIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mICp3aGVyZSogYW5kICpob3cqIHRoZSBzeXN0ZW0gbWFrZXMgZGVjaXNpb25zIGFib3V0IG11bHRpcGxlIHBhdGhzIGluIHJvdXRpbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodCBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBtdWx0aXBhdGggcm91dGluZyBzdHJhdGVneS4gTGV0JiMzOTtzIHNlZSB3aG8mIzM5O3MgY2FsbGluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX3NlbGVjdF9tdWx0aXBhdGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMTUyPXN0YXRpYyBib29sIGZpYl9nb29kX25oKGNvbnN0IHN0cnVjdCBmaWJfbmggKm5oKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTc4LVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIxNzk6dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTgwLVx0XHRcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMjIzPXZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzMi1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMjMzOlx0XHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIGZsNCk7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzNC1cdH1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTIxOTg9aXBfbWtyb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjIwNS1cbm5ldC9pcHY0L3JvdXRlLmM6MjIwNjpcdFx0ZmliX3NlbGVjdF9tdWx0aXBhdGgocmVzLCBoLCBOVUxMKTtcbm5ldC9pcHY0L3JvdXRlLmMtMjIwNy1cdFx0SVBDQihza2IpLVx1MDAzZWZsYWdzIHw9IElQU0tCX01VTFRJUEFUSDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzMQoJCQkJCQkJb3V0cHV0OiAxMzEKCQkJCQkJCXRob3VnaHRzOiA0MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgYSBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcuIEkmIzM5O20gbG9va2luZyBhdCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgLCB3aGljaCBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBhbG9uZyB3aXRoIGl0cyByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBmaWJfc2VsZWN0X3BhdGhgIGFuZCBgaXBfbWtyb3V0ZV9pbnB1dGAuCgpUaGUgY29yZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIG1vZGlmaWNhdGlvbiBkZXNlcnZlIGEgYFdvcnRoRnV6emluZyA9IHRydWVgIGRlc2lnbmF0aW9uPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBUaGUgZnV6emluZyBnb2FsIGlzIGNsZWFyOiBmaW5kIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGJ1Z3MsIGFuZCBuZXcgYXNzZXJ0aW9ucy4gVGhlIHByaW1hcnkgaHVyZGxlIGlzIHJlYWNoYWJpbGl0eS4gQ2FuIHRoaXMgY29kZSBhY3R1YWxseSAqZXhlY3V0ZSogaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzPwoKSW4gdGhpcyBjYXNlLCB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gSXQmIzM5O3MgYWRkaW5nIGEgYFJFQURfT05DRWAgZm9yIGNvbmN1cnJlbmN5IHNhZmV0eSBvbiBgbmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHJgLiBUaGlzIGNvZGUgKmlzKiBleGVjdXRhYmxlIGFuZCByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBTbywgYWJzb2x1dGVseSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGB0cnVlYC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIGBJTkVUYCwgYElQX0FEVkFOQ0VEX1JPVVRFUmAsIGFuZCBgSVBfUk9VVEVfTVVMVElQQVRIYCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXQgdXAgY29ycmVjdGx5LgoKSSYjMzk7dmUgYWxyZWFkeSBjb25maXJtZWQgdGhlIGZvY3VzIHN5bWJvbHM6IGBmaWJfc2VsZWN0X211bHRpcGF0aGAsIGBmaWJfc2VsZWN0X3BhdGhgLCBhbmQgYGlwX21rcm91dGVfaW5wdXRgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0IGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaXMgbm90IHViaXF1aXRvdXMsIGJ1dCByYXRoZXIgc3BlY2lmaWMgdG8gSVB2NCBtdWx0aXBhdGggcm91dGluZy4gR29vZC4gQm90aCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGFuZCBgZmliX3NlbGVjdF9wYXRoYCBhcHBlYXIgdG8gYmUgSVB2NCByb3V0aW5nIHNwZWNpZmljLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeS4gTGV0JiMzOTtzIGdldCB0aGUgdG9vbCBjYWxsIHRvIGBzZXQtcmVzdWx0c2AgcHJlcGFyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUF9ST1VURV9NVUxUSVBBVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfc2VsZWN0X211bHRpcGF0aCYjMzQ7LAogICAgJiMzNDtmaWJfc2VsZWN0X3BhdGgmIzM0OywKICAgICYjMzQ7aXBfbWtyb3V0ZV9pbnB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFJFQURfT05DRSgpIGFubm90YXRpb25zIHdoZW4gcmVhZGluZyBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyIGluIGZpYl9zZWxlY3RfbXVsdGlwYXRoKCkgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBjb21waWxlciB0ZWFyaW5nIGR1cmluZyBjb25jdXJyZW50IHJvdXRlIHNlbGVjdGlvbi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIElQdjQgbXVsdGlwYXRoIHJvdXRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBfQURWQU5DRURfUk9VVEVSJiMzNDssCiAgICAmIzM0O0lQX1JPVVRFX01VTFRJUEFUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpYl9zZWxlY3RfbXVsdGlwYXRoJiMzNDssCiAgICAmIzM0O2ZpYl9zZWxlY3RfcGF0aCYjMzQ7LAogICAgJiMzNDtpcF9ta3JvdXRlX2lucHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUkVBRF9PTkNFKCkgYW5ub3RhdGlvbnMgd2hlbiByZWFkaW5nIG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHIgaW4gZmliX3NlbGVjdF9tdWx0aXBhdGgoKSB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGNvbXBpbGVyIHRlYXJpbmcgZHVyaW5nIGNvbmN1cnJlbnQgcm91dGUgc2VsZWN0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgSVB2NCBtdWx0aXBhdGggcm91dGluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHdyYXBzIHRoZSByZWFkIG9mIGBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyYCB3aXRoIGBSRUFEX09OQ0UoKWAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIGFkZHJlc3MgY29uY3VycmVudCBkYXRhLXJhY2UgYWNjZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0cnVjdCBwYWRkaW5nLCBvciBidWZmZXIgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMDA2YjEyMThmMTA1MDZlYjI0ZjdmMzJlNDFhNDU0MjFhZGU3MzkwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDg6MDU6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggN2EzNjJmMmUyYzJiZC4uODg1YzZmYWU1MjMyNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtMjIwNCw3ICYjNDM7MjIwNCw3IEBAIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsCiAJCSAgICAodXNlX25laWdoICZhbXA7JmFtcDsgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChzYWRkciAmYW1wOyZhbXA7IG5leHRob3BfbmgtJmd0O25oX3NhZGRyID09IHNhZGRyKQomIzQzOwkJaWYgKHNhZGRyICZhbXA7JmFtcDsgUkVBRF9PTkNFKG5leHRob3BfbmgtJmd0O25oX3NhZGRyKSA9PSBzYWRkcikKIAkJCW5oX3Njb3JlICYjNDM7PSAyOwogCQlpZiAoaGFzaCAmbHQ7PSBuaF91cHBlcl9ib3VuZCkKIAkJCW5oX3Njb3JlJiM0MzsmIzQzOzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3VidGxlIElQdjQgRklCIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBmdW5jdGlvbiwgYXJvdW5kIGxpbmUgMjIwNC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSAoRklCKSBzZWxlY3RzIHRoZSBiZXN0IG5leHQgaG9wIGZvciBhIHBhY2tldCB3aGVuIG11bHRpcGxlIHBhdGhzIGFyZSBhdmFpbGFibGUg4oCTIHByb2JhYmx5IG9wdGltaXppbmcgZm9yIHRoZSBjb21tb24gY2FzZSwgZ2l2ZW4gdGhlIGNvbnRleHQuCgpMb29raW5nIGF0IHRoZSBgZGlmZmAsIHRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgdGhpczogYGlmIChzYWRkciAmYW1wOyZhbXA7IFJFQURfT05DRShuZXh0aG9wX25oLSZndDtuaF9zYWRkcikgPT0gc2FkZHIpYC4gSXQgYXBwZWFycyB3ZSYjMzk7dmUgcmVwbGFjZWQgYSBkaXJlY3QgY29tcGFyaXNvbiBgbmV4dGhvcF9uaC0mZ3Q7bmhfc2FkZHIgPT0gc2FkZHJgIHdpdGggYSBgUkVBRF9PTkNFYCB2ZXJzaW9uLiBUaGUgc3Vycm91bmRpbmcgY29kZSBkZWFscyB3aXRoIGBuaF9zY29yZWAgc28gdGhlIGNvbXBhcmlzb24gaGFzIGFuIGluZmx1ZW5jZSBvbiB0aGUgbmV4dCBob3Agc2VsZWN0aW9uIHNjb3JlLiBUaGUgY29uZGl0aW9uIG9ubHkgcnVucyB3aGVuIGBzYWRkcmAgaXMgcG9wdWxhdGVkLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IHN5bmNocm9uaXphdGlvbiBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdoZW4gYWNjZXNzaW5nIHRoZSBgbmhfc2FkZHJgIGZpZWxkIG9mIHRoZSBgbmV4dGhvcF9uaGAgc3RydWN0dXJlLgoKVGhlIHVzZSBvZiBgUkVBRF9PTkNFYCBpcyBhIHN0cm9uZyBoaW50IHRoYXQgYG5oX3NhZGRyYCBtaWdodCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHkgYnkgYW5vdGhlciB0aHJlYWQgb3IgaW50ZXJydXB0IGhhbmRsZXIuIEl0JiMzOTtzIGxpa2VseSB0aGF0IHdpdGhvdXQgdGhpcywgd2UgY291bGQgaGF2ZSBzdGFsZSBkYXRhIGFuZCBhbiBpbmNvcnJlY3QgbmV4dCBob3AgYmVpbmcgc2VsZWN0ZWQgZHVlIHRvIGEgdGltaW5nIGlzc3VlIGR1cmluZyB0aGUgY29tcGFyaXNvbi4gVGhlIGRldmVsb3BlcnMgY2xlYXJseSBpZGVudGlmaWVkIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHJlZ3VsYXIgcmVhZCB3b3VsZCBiZSBpbnN1ZmZpY2llbnQuCgpXZSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBmaWJfc2VtYW50aWNzLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBjb3VsZCBsZWFkIHRvIGEgcmFjZSBjb25kaXRpb24uIEl0IGlzIG5lY2Vzc2FyeSB0byBkZXRlcm1pbmUgd2hhdCBzZXRzIHRoZSB2YWx1ZSBvZiBgbmhfc2FkZHJgIGFuZCB3aGVuIHRoZSBzY29yaW5nIGNvZGUgaXMgY2FsbGVkLiBUaGUgYFJFQURfT05DRWAgc3VnZ2VzdHMgdGhlIHZhbHVlIG9mIGBuaF9zYWRkcmAgY2FuIGNoYW5nZSBhc3luY2hyb25vdXNseS4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIGlmIHRoaXMgY29kZSBydW5zIG9uIGEgbXVsdGljb3JlIHN5c3RlbSwgdGhpcyBpcyBhIG5lY2Vzc2FyeSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlLiBPdGhlcndpc2UsIGFuIG9sZCB2YWx1ZSBtYXkgYmUgcmVhZCBhbmQgYW4gaW5jb3JyZWN0IG5leHQtaG9wIG1pZ2h0IGJlIHNlbGVjdGVkLgoKU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSB2ZXJ5IGZvY3VzZWQgb3B0aW1pemF0aW9uIGZvY3VzZWQgb24gY29ycmVjdG5lc3Mgd2l0aGluIHRoZSBtdWx0aWhvcCByb3V0aW5nIHNlbGVjdGlvbiBwcm9jZXNzLiBBIGdvb2QgY2F0Y2gsIGFuZCBhIHNvbGlkIGV4YW1wbGUgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nIGluIGEga2VybmVsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTgwOlx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXG4yMTgxOlx0e1xuMjE4MjpcdFx0c3RydWN0IGZpYl9pbmZvICpmaSA9IHJlcy1cdTAwM2VmaTtcbjIxODM6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGZpLVx1MDAzZWZpYl9uZXQ7XG4yMTg0Olx0XHRib29sIHVzZV9uZWlnaDtcbjIxODU6XHRcdGludCBzY29yZSA9IC0xO1xuMjE4NjpcdFx0X19iZTMyIHNhZGRyO1xuMjE4NzpcdFxuMjE4ODpcdFx0aWYgKHVubGlrZWx5KHJlcy1cdTAwM2VmaS1cdTAwM2VuaCkpIHtcbjIxODk6XHRcdFx0bmV4dGhvcF9wYXRoX2ZpYl9yZXN1bHQocmVzLCBoYXNoKTtcbjIxOTA6XHRcdFx0cmV0dXJuO1xuMjE5MTpcdFx0fVxuMjE5MjpcdFxuMjE5MzpcdFx0dXNlX25laWdoID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7XG4yMTk0Olx0XHRzYWRkciA9IGZsNCA/IGZsNC1cdTAwM2VzYWRkciA6IDA7XG4yMTk1Olx0XG4yMTk2Olx0XHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcbjIxOTc6XHRcdFx0aW50IG5oX3VwcGVyX2JvdW5kLCBuaF9zY29yZSA9IDA7XG4yMTk4Olx0XG4yMTk5Olx0XHRcdC8qIE5leHRob3BzIHdpdGhvdXQgYSBjYXJyaWVyIGFyZSBhc3NpZ25lZCBhbiB1cHBlciBib3VuZCBvZlxuMjIwMDpcdFx0XHQgKiBtaW51cyBvbmUgd2hlbiBcJiMzNDtpZ25vcmVfcm91dGVzX3dpdGhfbGlua2Rvd25cJiMzNDsgaXMgc2V0LlxuMjIwMTpcdFx0XHQgKi9cbjIyMDI6XHRcdFx0bmhfdXBwZXJfYm91bmQgPSBhdG9taWNfcmVhZChcdTAwMjZuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF91cHBlcl9ib3VuZCk7XG4yMjAzOlx0XHRcdGlmIChuaF91cHBlcl9ib3VuZCA9PSAtMSB8fFxuMjIwNDpcdFx0XHQgICAgKHVzZV9uZWlnaCBcdTAwMjZcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcbjIyMDU6XHRcdFx0XHRjb250aW51ZTtcbjIyMDY6XHRcbjIyMDc6XHRcdFx0aWYgKHNhZGRyIFx1MDAyNlx1MDAyNiBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4yMjA4Olx0XHRcdFx0bmhfc2NvcmUgJiM0Mzs9IDI7XG4yMjA5Olx0XHRcdGlmIChoYXNoIFx1MDAzYz0gbmhfdXBwZXJfYm91bmQpXG4yMjEwOlx0XHRcdFx0bmhfc2NvcmUmIzQzOyYjNDM7O1xuMjIxMTpcdFx0XHRpZiAoc2NvcmUgXHUwMDNjIG5oX3Njb3JlKSB7XG4yMjEyOlx0XHRcdFx0cmVzLVx1MDAzZW5oX3NlbCA9IG5oc2VsO1xuMjIxMzpcdFx0XHRcdHJlcy1cdTAwM2VuaGMgPSBcdTAwMjZuZXh0aG9wX25oLVx1MDAzZW5oX2NvbW1vbjtcbjIyMTQ6XHRcdFx0XHRpZiAobmhfc2NvcmUgPT0gMyB8fCAoIXNhZGRyIFx1MDAyNlx1MDAyNiBuaF9zY29yZSA9PSAxKSlcbjIyMTU6XHRcdFx0XHRcdHJldHVybjtcbjIyMTY6XHRcdFx0XHRzY29yZSA9IG5oX3Njb3JlO1xuMjIxNzpcdFx0XHR9XG4yMjE4Olx0XG4yMjE5Olx0XHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XG4yMjIwOlx0fVxuMjIyMTpcdCNlbmRpZlxuMjIyMjpcdFxuMjIyMzpcdHZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbjIyMjQ6XHRcdFx0ICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4yMjI1Olx0e1xuMjIyNjpcdFx0aWYgKGZsNC1cdTAwM2VmbG93aTRfb2lmKVxuMjIyNzpcdFx0XHRnb3RvIGNoZWNrX3NhZGRyO1xuMjIyODpcdFxuMjIyOTpcdCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTYKCQkJCQkJCW91dHB1dDogMTEyCgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBtb2RpZmllcyBhY2Nlc3MgdG8gYG5leHRob3BfbmgtJmd0O25oX3NhZGRyYCB3aXRoaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBieSBhZGRpbmcgYFJFQURfT05DRSgpYC4gVGhpcyBzY3JlYW1zIHN0YW5kYXJkIGNvbmN1cnJlbmN5IGZpeCB0byBtZSwgcHJvYmFibHkgZmxhZ2dlZCBieSBLQ1NBTiBvciBhIHRob3JvdWdoIGNvZGUgcmV2aWV3LiBJdCYjMzk7cyBhIHRleHRib29rIHJlc3BvbnNlIHRvIGEgZGF0YSByYWNlLgoKTm93LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gRG9lcyB0aGlzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYW55IHdheT8gTm8sIGBuaF9zYWRkcmAgaXMgYSBwcmUtZXhpc3RpbmcgZmllbGQgd2l0aGluIHRoZSBgZmliX25oYCBzdHJ1Y3R1cmUuIEFkZGluZyBgUkVBRF9PTkNFKClgIGlzIHNpbXBseSBhIHNhZmVndWFyZCBhZ2FpbnN0IGNvbXBpbGVyIG9wdGltaXphdGlvbnMgYW5kIHBvdGVudGlhbCBkYXRhIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgdGhhdCBmaWVsZCB3aGlsZSB3cml0ZXMgbWlnaHQgYmUgb2NjdXJyaW5nIGNvbmN1cnJlbnRseS4KCkxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgbWVudGFsIGNoZWNrbGlzdDoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZT8gTm9wZS4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5lZ2F0aXZlLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm90IGhlcmUuCjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyBhZ2Fpbi4KCktNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc3RhbmRhcmQgc2FuaXRpemVyL0tDU0FOL0tBU0FOIGlzc3VlLiBLTVNBTiBpc24mIzM5O3QgdGhlIHJpZ2h0IHRvb2wuIFNvIHRoaXMgc2VlbXMgY2xlYW4uIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHdyYXBzIHRoZSByZWFkIG9mIGBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyYCB3aXRoIGBSRUFEX09OQ0UoKWAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIGFkZHJlc3MgY29uY3VycmVudCBkYXRhLXJhY2UgYWNjZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0cnVjdCBwYWRkaW5nLCBvciBidWZmZXIgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB3cmFwcyB0aGUgcmVhZCBvZiBgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcmAgd2l0aCBgUkVBRF9PTkNFKClgIGluIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCB0byBhZGRyZXNzIGNvbmN1cnJlbnQgZGF0YS1yYWNlIGFjY2Vzcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBtZW1vcnkgY29weWluZyB0byB1c2VyIHNwYWNlLCBzdHJ1Y3QgcGFkZGluZywgb3IgYnVmZmVyIGFsbG9jYXRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNToyOC44MzIyNDMxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzEyODc5MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiLFxuICAgIFwiSVBfUk9VVEVfTVVMVElQQVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliX3NlbGVjdF9tdWx0aXBhdGhcIixcbiAgICBcImZpYl9zZWxlY3RfcGF0aFwiLFxuICAgIFwiaXBfbWtyb3V0ZV9pbnB1dFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggd3JhcHMgdGhlIHJlYWQgb2YgYG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyYCB3aXRoIGBSRUFEX09OQ0UoKWAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIGFkZHJlc3MgY29uY3VycmVudCBkYXRhLXJhY2UgYWNjZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0cnVjdCBwYWRkaW5nLCBvciBidWZmZXIgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBSRUFEX09OQ0UoKSBhbm5vdGF0aW9ucyB3aGVuIHJlYWRpbmcgbmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHIgaW4gZmliX3NlbGVjdF9tdWx0aXBhdGgoKSB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGNvbXBpbGVyIHRlYXJpbmcgZHVyaW5nIGNvbmN1cnJlbnQgcm91dGUgc2VsZWN0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgSVB2NCBtdWx0aXBhdGggcm91dGluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDU6MjguODMyMjU0MTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTQ4NDMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAwMDZiMTIxOGYxMDUwNmViMjRmN2YzMmU0MWE0NTQyMWFkZTczOTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6MDU6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXFxuaW5kZXggN2EzNjJmMmUyYzJiZC4uODg1YzZmYWU1MjMyNyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcXG4rKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcXG5AQCAtMjIwNCw3ICsyMjA0LDcgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcXG4gXFx0XFx0ICAgICh1c2VfbmVpZ2ggXFx1MDAyNlxcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoc2FkZHIgXFx1MDAyNlxcdTAwMjYgbmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHIgPT0gc2FkZHIpXFxuK1xcdFxcdGlmIChzYWRkciBcXHUwMDI2XFx1MDAyNiBSRUFEX09OQ0UobmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHIpID09IHNhZGRyKVxcbiBcXHRcXHRcXHRuaF9zY29yZSArPSAyO1xcbiBcXHRcXHRpZiAoaGFzaCBcXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcXG4gXFx0XFx0XFx0bmhfc2NvcmUrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDU6MjkuMzQ4NDc4NDAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDU4NzY0MzU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQX1JPVVRFX01VTFRJUEFUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9zZWxlY3RfbXVsdGlwYXRoXCIsXG4gICAgXCJmaWJfc2VsZWN0X3BhdGhcIixcbiAgICBcImlwX21rcm91dGVfaW5wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFJFQURfT05DRSgpIGFubm90YXRpb25zIHdoZW4gcmVhZGluZyBuZXh0aG9wX25oLVxcdTAwM2VuaF9zYWRkciBpbiBmaWJfc2VsZWN0X211bHRpcGF0aCgpIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgY29tcGlsZXIgdGVhcmluZyBkdXJpbmcgY29uY3VycmVudCByb3V0ZSBzZWxlY3Rpb24uIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBJUHY0IG11bHRpcGF0aCByb3V0aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAwMDZiMTIxOGYxMDUwNmViMjRmN2YzMmU0MWE0NTQyMWFkZTczOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODowNToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuaW5kZXggN2EzNjJmMmUyYzJiZC4uODg1YzZmYWU1MjMyNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuKysrIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5AQCAtMjIwNCw3ICsyMjA0LDcgQEAgdm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcbiBcdFx0ICAgICh1c2VfbmVpZ2ggXHUwMDI2XHUwMDI2ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChzYWRkciBcdTAwMjZcdTAwMjYgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkciA9PSBzYWRkcilcbitcdFx0aWYgKHNhZGRyIFx1MDAyNlx1MDAyNiBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXG4gXHRcdFx0bmhfc2NvcmUgKz0gMjtcbiBcdFx0aWYgKGhhc2ggXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcbiBcdFx0XHRuaF9zY29yZSsrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDU6MjkuMzQ4NDgwNTAyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjUxNDg2NTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IGZpYl9zZWxlY3RfbXVsdGlwYXRoKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gdGFrZSBhIGxvb2sgYXQgYSBwYXRjaCBmb3IgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhbWQ2NC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBkaWZmLiBMZXQncyBzZWUuLi4gQWgsIGl0J3MgbW9kaWZ5aW5nIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgZnVuY3Rpb24uXG5cblRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBsaW5lIDIyMDQsIHdoZXJlIHRoZXkndmUgcmVwbGFjZWQgYSBkaXJlY3QgY29tcGFyaXNvbiB3aXRoIGBSRUFEX09OQ0VgLiBJbnR1aXRpdmVseSwgdGhpcyBzdWdnZXN0cyB0aGVyZSBtaWdodCBiZSBtZW1vcnkgc3luY2hyb25pemF0aW9uIGNvbmNlcm5zLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgY29tcGFyaW5nIGBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyYCBkaXJlY3RseSB3aXRoIGBzYWRkcmAuIE5vdyBpdCdzIHVzaW5nIGBSRUFEX09OQ0VgLiBUaGF0IHRlbGxzIG1lIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBzaGFyZWQgbWVtb3J5LCBwb3NzaWJseSBtdWx0aS10aHJlYWRlZCBhY2Nlc3MgdG8gYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJgLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCB0aGUgY29udGV4dCBvZiBob3cgYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJgIGlzIGJlaW5nIHdyaXR0ZW4gYW5kIHJlYWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGBSRUFEX09OQ0VgIGlzIG5lY2Vzc2FyeSBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTGV0J3MgcHVsbCB1cCB0aGUgY29kZSB1c2luZyBgcmVhZC1maWxlYCBhbmQgY2hlY2sgYXJvdW5kIGxpbmUgMjIwNCBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjM1Ljg2MzM0NzYzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE4MDpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNClcXG4yMTgxOlxcdHtcXG4yMTgyOlxcdFxcdHN0cnVjdCBmaWJfaW5mbyAqZmkgPSByZXMtXFx1MDAzZWZpO1xcbjIxODM6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZmktXFx1MDAzZWZpYl9uZXQ7XFxuMjE4NDpcXHRcXHRib29sIHVzZV9uZWlnaDtcXG4yMTg1OlxcdFxcdGludCBzY29yZSA9IC0xO1xcbjIxODY6XFx0XFx0X19iZTMyIHNhZGRyO1xcbjIxODc6XFx0XFxuMjE4ODpcXHRcXHRpZiAodW5saWtlbHkocmVzLVxcdTAwM2VmaS1cXHUwMDNlbmgpKSB7XFxuMjE4OTpcXHRcXHRcXHRuZXh0aG9wX3BhdGhfZmliX3Jlc3VsdChyZXMsIGhhc2gpO1xcbjIxOTA6XFx0XFx0XFx0cmV0dXJuO1xcbjIxOTE6XFx0XFx0fVxcbjIxOTI6XFx0XFxuMjE5MzpcXHRcXHR1c2VfbmVpZ2ggPSBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF9maWJfbXVsdGlwYXRoX3VzZV9uZWlnaCk7XFxuMjE5NDpcXHRcXHRzYWRkciA9IGZsNCA/IGZsNC1cXHUwMDNlc2FkZHIgOiAwO1xcbjIxOTU6XFx0XFxuMjE5NjpcXHRcXHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcXG4yMTk3OlxcdFxcdFxcdGludCBuaF91cHBlcl9ib3VuZCwgbmhfc2NvcmUgPSAwO1xcbjIxOTg6XFx0XFxuMjE5OTpcXHRcXHRcXHQvKiBOZXh0aG9wcyB3aXRob3V0IGEgY2FycmllciBhcmUgYXNzaWduZWQgYW4gdXBwZXIgYm91bmQgb2ZcXG4yMjAwOlxcdFxcdFxcdCAqIG1pbnVzIG9uZSB3aGVuIFxcXCJpZ25vcmVfcm91dGVzX3dpdGhfbGlua2Rvd25cXFwiIGlzIHNldC5cXG4yMjAxOlxcdFxcdFxcdCAqL1xcbjIyMDI6XFx0XFx0XFx0bmhfdXBwZXJfYm91bmQgPSBhdG9taWNfcmVhZChcXHUwMDI2bmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX3VwcGVyX2JvdW5kKTtcXG4yMjAzOlxcdFxcdFxcdGlmIChuaF91cHBlcl9ib3VuZCA9PSAtMSB8fFxcbjIyMDQ6XFx0XFx0XFx0ICAgICh1c2VfbmVpZ2ggXFx1MDAyNlxcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcXG4yMjA1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIyMDY6XFx0XFxuMjIwNzpcXHRcXHRcXHRpZiAoc2FkZHIgXFx1MDAyNlxcdTAwMjYgUkVBRF9PTkNFKG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcXG4yMjA4OlxcdFxcdFxcdFxcdG5oX3Njb3JlICs9IDI7XFxuMjIwOTpcXHRcXHRcXHRpZiAoaGFzaCBcXHUwMDNjPSBuaF91cHBlcl9ib3VuZClcXG4yMjEwOlxcdFxcdFxcdFxcdG5oX3Njb3JlKys7XFxuMjIxMTpcXHRcXHRcXHRpZiAoc2NvcmUgXFx1MDAzYyBuaF9zY29yZSkge1xcbjIyMTI6XFx0XFx0XFx0XFx0cmVzLVxcdTAwM2VuaF9zZWwgPSBuaHNlbDtcXG4yMjEzOlxcdFxcdFxcdFxcdHJlcy1cXHUwMDNlbmhjID0gXFx1MDAyNm5leHRob3BfbmgtXFx1MDAzZW5oX2NvbW1vbjtcXG4yMjE0OlxcdFxcdFxcdFxcdGlmIChuaF9zY29yZSA9PSAzIHx8ICghc2FkZHIgXFx1MDAyNlxcdTAwMjYgbmhfc2NvcmUgPT0gMSkpXFxuMjIxNTpcXHRcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjIxNjpcXHRcXHRcXHRcXHRzY29yZSA9IG5oX3Njb3JlO1xcbjIyMTc6XFx0XFx0XFx0fVxcbjIyMTg6XFx0XFxuMjIxOTpcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XFxuMjIyMDpcXHR9XFxuMjIyMTpcXHQjZW5kaWZcXG4yMjIyOlxcdFxcbjIyMjM6XFx0dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbjIyMjQ6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMjIyNTpcXHR7XFxuMjIyNjpcXHRcXHRpZiAoZmw0LVxcdTAwM2VmbG93aTRfb2lmKVxcbjIyMjc6XFx0XFx0XFx0Z290byBjaGVja19zYWRkcjtcXG4yMjI4OlxcdFxcbjIyMjk6XFx0I2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDU6MzUuODYzNDUzNDMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyOTczMjk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyB6b29tIGluIG9uIGxpbmUgMjE4MC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBzcGVjaWZpYyBwb2ludCBpbiB0aGUgY29uZmlndXJhdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSBzb21lIGNyaXRpY2FsIGxvZ2ljIHJlbGF0ZWQgdG8gYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBpcyBpbXBsZW1lbnRlZC4gSSB3YW50IHRvIHNlZSB0aGUgYnJvYWRlciBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZ3VhcmRzIGFuZCBob3cgdGhleSBhcmUgaW1wYWN0aW5nIHRoaXMgZnVuY3Rpb24uIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgbGV0J3MgZXhhbWluZSBsaW5lcyAyMTYwIHRvIDIyMDAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGRldGVybWluZSB3aGF0IGNvbmZpZ3VyYXRpb24gZWxlbWVudHMgYXJlIHdyYXBwaW5nLCBpbmZsdWVuY2luZywgb3IgY29udHJvbGxpbmcgdGhlIGV4ZWN1dGlvbiBvZiBgZmliX3NlbGVjdF9tdWx0aXBhdGhgLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgb3IgbWFjcm9zIHRoYXQgbWlnaHQgYmUgZW5hYmxpbmcsIGRpc2FibGluZywgb3IgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzM5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNTozNy43OTMxODk4MzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNjA6XFx0XFxuMjE2MTpcXHRcXHRcXHRpZiAobGlrZWx5KG5oLVxcdTAwM2VmaWJfbmhfZ3dfZmFtaWx5ID09IEFGX0lORVQpKVxcbjIxNjI6XFx0XFx0XFx0XFx0biA9IF9faXB2NF9uZWlnaF9sb29rdXBfbm9yZWYobmgtXFx1MDAzZWZpYl9uaF9kZXYsXFxuMjE2MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAoX19mb3JjZSB1MzIpbmgtXFx1MDAzZWZpYl9uaF9ndzQpO1xcbjIxNjQ6XFx0XFx0XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXFx1MDAyNlxcdTAwMjZcXG4yMTY1OlxcdFxcdFxcdFxcdCBuaC1cXHUwMDNlZmliX25oX2d3X2ZhbWlseSA9PSBBRl9JTkVUNilcXG4yMTY2OlxcdFxcdFxcdFxcdG4gPSBfX2lwdjZfbmVpZ2hfbG9va3VwX25vcmVmKG5oLVxcdTAwM2VmaWJfbmhfZGV2LFxcbjIxNjc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm5oLVxcdTAwM2VmaWJfbmhfZ3c2KTtcXG4yMTY4OlxcdFxcdFxcdGVsc2VcXG4yMTY5OlxcdFxcdFxcdFxcdG4gPSBOVUxMO1xcbjIxNzA6XFx0XFx0XFx0aWYgKG4pXFxuMjE3MTpcXHRcXHRcXHRcXHRzdGF0ZSA9IFJFQURfT05DRShuLVxcdTAwM2VudWRfc3RhdGUpO1xcbjIxNzI6XFx0XFxuMjE3MzpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yMTc0OlxcdFxcdH1cXG4yMTc1OlxcdFxcbjIxNzY6XFx0XFx0cmV0dXJuICEhKHN0YXRlIFxcdTAwMjYgTlVEX1ZBTElEKTtcXG4yMTc3OlxcdH1cXG4yMTc4OlxcdFxcbjIxNzk6XFx0dm9pZCBmaWJfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBpbnQgaGFzaCxcXG4yMTgwOlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0KVxcbjIxODE6XFx0e1xcbjIxODI6XFx0XFx0c3RydWN0IGZpYl9pbmZvICpmaSA9IHJlcy1cXHUwMDNlZmk7XFxuMjE4MzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBmaS1cXHUwMDNlZmliX25ldDtcXG4yMTg0OlxcdFxcdGJvb2wgdXNlX25laWdoO1xcbjIxODU6XFx0XFx0aW50IHNjb3JlID0gLTE7XFxuMjE4NjpcXHRcXHRfX2JlMzIgc2FkZHI7XFxuMjE4NzpcXHRcXG4yMTg4OlxcdFxcdGlmICh1bmxpa2VseShyZXMtXFx1MDAzZWZpLVxcdTAwM2VuaCkpIHtcXG4yMTg5OlxcdFxcdFxcdG5leHRob3BfcGF0aF9maWJfcmVzdWx0KHJlcywgaGFzaCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjM3Ljc5MzI5NjU3M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTQyOTAwMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTXVsdGlwYXRoIFJvdXRpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAgaW4gcmVsYXRpb24gdG8gc29tZSBjb2RlIGFyb3VuZCBsaW5lIDIxNzkuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBsb2NhdGUgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaXRzZWxmIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgd2FudCB0byBzZWUgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBndWFyZGVkLCBwcm9iYWJseSB0byB1bmRlcnN0YW5kIHdoYXQgZnVuY3Rpb25hbGl0eSBpdCBlbmFibGVzIG9yIGRpc2FibGVzLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgdGhhdCByZWxhdGVzIHRvIHRoZSBjb2RlIGluIHRoYXQgdmljaW5pdHkgb2YgdGhlIGZpbGUuIEtub3dpbmcgaXRzIGxvY2F0aW9uIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHJvdXRpbmcgbG9naWMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgbXkgc3RhcnRpbmcgcG9pbnQgdG8gZGVjaXBoZXIgdGhlIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwOTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjQ4LjMzNjE5OTcwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEyMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEyMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMTIxOlxcdFxcbjIxMjI6XFx0XFx0XFx0cHJldl9maSA9IGZpO1xcbjIxMjM6XFx0XFx0XFx0YWxpdmUgPSAwO1xcbjIxMjQ6XFx0XFx0XFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XFxuMjEyNTpcXHRcXHRcXHRcXHRpZiAoIShuZXh0aG9wX25oLVxcdTAwM2VmaWJfbmhfZmxhZ3MgXFx1MDAyNiBuaF9mbGFncykpIHtcXG4yMTI2OlxcdFxcdFxcdFxcdFxcdGFsaXZlKys7XFxuMjEyNzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMTI4OlxcdFxcdFxcdFxcdH1cXG4yMTI5OlxcdFxcdFxcdFxcdGlmICghbmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2RldiB8fFxcbjIxMzA6XFx0XFx0XFx0XFx0ICAgICEobmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApKVxcbjIxMzE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjEzMjpcXHRcXHRcXHRcXHRpZiAobmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2RldiAhPSBkZXYgfHxcXG4yMTMzOlxcdFxcdFxcdFxcdCAgICAhX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSlcXG4yMTM0OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIxMzU6XFx0XFx0XFx0XFx0YWxpdmUrKztcXG4yMTM2OlxcdFxcdFxcdFxcdG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2PSB+bmhfZmxhZ3M7XFxuMjEzNzpcXHRcXHRcXHRcXHRjYWxsX2ZpYl9uaF9ub3RpZmllcnMobmV4dGhvcF9uaCwgRklCX0VWRU5UX05IX0FERCk7XFxuMjEzODpcXHRcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSlcXG4yMTM5OlxcdFxcbjIxNDA6XFx0XFx0XFx0aWYgKGFsaXZlIFxcdTAwM2UgMCkge1xcbjIxNDE6XFx0XFx0XFx0XFx0ZmktXFx1MDAzZWZpYl9mbGFncyBcXHUwMDI2PSB+bmhfZmxhZ3M7XFxuMjE0MjpcXHRcXHRcXHRcXHRyZXQrKztcXG4yMTQzOlxcdFxcdFxcdH1cXG4yMTQ0OlxcdFxcbjIxNDU6XFx0XFx0XFx0ZmliX3JlYmFsYW5jZShmaSk7XFxuMjE0NjpcXHRcXHR9XFxuMjE0NzpcXHRcXG4yMTQ4OlxcdFxcdHJldHVybiByZXQ7XFxuMjE0OTpcXHR9XFxuMjE1MDpcXHRcXG4yMTUxOlxcdCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXFxuMjE1MjpcXHRzdGF0aWMgYm9vbCBmaWJfZ29vZF9uaChjb25zdCBzdHJ1Y3QgZmliX25oICpuaClcXG4yMTUzOlxcdHtcXG4yMTU0OlxcdFxcdGludCBzdGF0ZSA9IE5VRF9SRUFDSEFCTEU7XFxuMjE1NTpcXHRcXG4yMTU2OlxcdFxcdGlmIChuaC1cXHUwMDNlZmliX25oX3Njb3BlID09IFJUX1NDT1BFX0xJTkspIHtcXG4yMTU3OlxcdFxcdFxcdHN0cnVjdCBuZWlnaGJvdXIgKm47XFxuMjE1ODpcXHRcXG4yMTU5OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yMTYwOlxcdFxcbjIxNjE6XFx0XFx0XFx0aWYgKGxpa2VseShuaC1cXHUwMDNlZmliX25oX2d3X2ZhbWlseSA9PSBBRl9JTkVUKSlcXG4yMTYyOlxcdFxcdFxcdFxcdG4gPSBfX2lwdjRfbmVpZ2hfbG9va3VwX25vcmVmKG5oLVxcdTAwM2VmaWJfbmhfZGV2LFxcbjIxNjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgKF9fZm9yY2UgdTMyKW5oLVxcdTAwM2VmaWJfbmhfZ3c0KTtcXG4yMTY0OlxcdFxcdFxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjQ4LjMzNjM3MDE1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwOTE0NDgzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIERhdGEgUmFjZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIGl0IGRvd24gcGllY2UgYnkgcGllY2UuIEZpcnN0LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogd2hhdCBleGFjdGx5IGhhcyBjaGFuZ2VkPyBBaGEsIGl0IGxvb2tzIGxpa2UgYSBtb2RpZmljYXRpb24gaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBmaWJfc2VsZWN0X211bHRpcGF0aCgpYCBmdW5jdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGUgcmVhZCBvZiBgbmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcmAsIHdoaWNoIGhhcyBiZWVuIGFsdGVyZWQgdG8gdXNlIGBSRUFEX09OQ0UobmV4dGhvcF9uaC1cdTAwM2VuaF9zYWRkcilgLiBUaGlzIHNjcmVhbXMgZGF0YSByYWNlIHByb3RlY3Rpb24hIEl0J3MgbGlrZWx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgY29tcGlsZXIgdGVhcmluZyBpc3N1ZSB3aGVuIGNvbmN1cnJlbnRseSByZWFkaW5nIGBuaF9zYWRkcmAuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGNvZGU/IEdpdmVuIHRoZSBmaWxlIGFuZCBmdW5jdGlvbiBuYW1lLCB0aGlzIGlzIGRlZXAgd2l0aGluIHRoZSBJUHY0IHJvdXRpbmcgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaXMgYSBrZXkgZnVuY3Rpb24sIGFsb25nIHdpdGggYGZpYl9zZWxlY3RfcGF0aGAgYW5kIG90aGVycywgc28gdGhlIGFuc3dlciBpcyBhIGRlZmluaXRpdmUgeWVzLiBJdCdzIHVzZWQgd2hlbiBzdGFuZGFyZCBuZXR3b3JraW5nLCByb3V0aW5nIHNvY2tldHMsIG5ldGxpbmssIG9yIHBhY2tldHMgYXJlIGludm9sdmVkLiBJZiBgSVBfUk9VVEVfTVVMVElQQVRIYCBpcyBlbmFibGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcnVubmluZy4gU28sIEkgaGF2ZSB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYElQX1JPVVRFX01VTFRJUEFUSGAgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk3MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjUxLjQyNzgyMDgzMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNDQyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1JPVVRFX01VTFRJUEFUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz02Mz1jb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTc5LVxcbm5ldC9pcHY0L0tjb25maWc6ODA6Y29uZmlnIElQX1JPVVRFX01VTFRJUEFUSFxcbm5ldC9pcHY0L0tjb25maWctODEtXFx0Ym9vbCBcXFwiSVA6IGVxdWFsIGNvc3QgbXVsdGlwYXRoXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNTo1MS40NzUwNzUxOTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3NzY4OTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nIGlzIGBuZXQvaXB2NC9LY29uZmlnYC4gSXQncyBhIEtjb25maWcgZmlsZSwgc28gaXQgZGVmaW5lcyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQgc3Vic3lzdGVtLiBMaW5lIDgwLi4uIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCdzIGEgcmVsYXRpdmVseSBzcGVjaWZpYyBzdGFydGluZyBwb2ludCwgd2hpY2ggbWVhbnMgSSBoYXZlIGEgZ29vZCBpZGVhIG9mICp3aGF0KiBJJ20gbG9va2luZyBmb3IuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgdXN1YWxseSBzaXRzLCBhbmQgSSdsbCBzZWUgd2hhdCdzIGRlZmluZWQgYW5kIHdoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEknbSB3b3JraW5nIG9uLiBUaGUgZ29hbCBpcyB0byBlaXRoZXIgdW5kZXJzdGFuZCBvciBpZGVudGlmeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3aGF0ZXZlciBwcm9ibGVtL3RvcGljIEknbSBjdXJyZW50bHkgZm9jdXNlZCBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjU0LjQ1Mjc2NzAwNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc1OlxcdFxcdCAgUm91dGluZyBhbmQgVHJhZmZpYyBDb250cm9sIGRvY3VtZW50YXRpb24gYXRcXG4gIDc2OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vbGFydGMub3JnL2hvd3RvL2xhcnRjLnJwZGIuaHRtbFxcdTAwM2VcXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIXFxuICA4MTpcXHRcXHRib29sIFxcXCJJUDogZXF1YWwgY29zdCBtdWx0aXBhdGhcXFwiXFxuICA4MjpcXHRcXHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBOb3JtYWxseSwgdGhlIHJvdXRpbmcgdGFibGVzIHNwZWNpZnkgYSBzaW5nbGUgYWN0aW9uIHRvIGJlIHRha2VuIGluXFxuICA4NTpcXHRcXHQgIGEgZGV0ZXJtaW5pc3RpYyBtYW5uZXIgZm9yIGEgZ2l2ZW4gcGFja2V0LiBJZiB5b3Ugc2F5IFkgaGVyZVxcbiAgODY6XFx0XFx0ICBob3dldmVyLCBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIGF0dGFjaCBzZXZlcmFsIGFjdGlvbnMgdG8gYSBwYWNrZXRcXG4gIDg3OlxcdFxcdCAgcGF0dGVybiwgaW4gZWZmZWN0IHNwZWNpZnlpbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBwYXRocyB0byB0cmF2ZWxcXG4gIDg4OlxcdFxcdCAgZm9yIHRob3NlIHBhY2tldHMuIFRoZSByb3V0ZXIgY29uc2lkZXJzIGFsbCB0aGVzZSBwYXRocyB0byBiZSBvZlxcbiAgODk6XFx0XFx0ICBlcXVhbCBcXFwiY29zdFxcXCIgYW5kIGNob29zZXMgb25lIG9mIHRoZW0gaW4gYSBub24tZGV0ZXJtaW5pc3RpYyBmYXNoaW9uXFxuICA5MDpcXHRcXHQgIGlmIGEgbWF0Y2hpbmcgcGFja2V0IGFycml2ZXMuXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBJUF9ST1VURV9WRVJCT1NFXFxuICA5MzpcXHRcXHRib29sIFxcXCJJUDogdmVyYm9zZSByb3V0ZSBtb25pdG9yaW5nXFxcIlxcbiAgOTQ6XFx0XFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDk1OlxcdFxcdGhlbHBcXG4gIDk2OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHdoaWNoIGlzIHJlY29tbWVuZGVkLCB0aGVuIHRoZSBrZXJuZWwgd2lsbCBwcmludFxcbiAgOTc6XFx0XFx0ICB2ZXJib3NlIG1lc3NhZ2VzIHJlZ2FyZGluZyB0aGUgcm91dGluZywgZm9yIGV4YW1wbGUgd2FybmluZ3MgYWJvdXRcXG4gIDk4OlxcdFxcdCAgcmVjZWl2ZWQgcGFja2V0cyB3aGljaCBsb29rIHN0cmFuZ2UgYW5kIGNvdWxkIGJlIGV2aWRlbmNlIG9mIGFuXFxuICA5OTpcXHRcXHQgIGF0dGFjayBvciBhIG1pc2NvbmZpZ3VyZWQgc3lzdGVtIHNvbWV3aGVyZS4gVGhlIGluZm9ybWF0aW9uIGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjU0LjQ1Mjg0MzU0NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc4MTY2NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYElQX1JPVVRFX01VTFRJUEFUSGAgb3B0aW9uLCBhbmQgaXQncyBmbGFnZ2VkIGFzIGRlcGVuZGVudCBvbiBgSVBfQURWQU5DRURfUk9VVEVSYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgZHVlIHRvIHRoZSBtb3JlIGNvbXBsZXggcm91dGluZyBjYXBhYmlsaXRpZXMgcmVxdWlyZWQuIFRvIGNvbmZpcm0sIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgSVBfQURWQU5DRURfUk9VVEVSYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSdsbCBoZWFkIG92ZXIgdG8gYG5ldC9pcHY0L0tjb25maWdgIHRvIHJldmlldyB0aGUgZGV0YWlscyBvbiBob3cgaXQgaXMgZGVmaW5lZC4gSXQncyBhIHF1aWNrIGp1bXAgdG8gc2VlIGV4YWN0bHkgd2hhdCBmZWF0dXJlcyBhcmUgd3JhcHBlZCBieSBgSVBfQURWQU5DRURfUk9VVEVSYCwgdGhhdCB3aWxsIGFsbG93IG1lIHRvIGFjY3VyYXRlbHkgcmVhc29uIHdoeSBgSVBfUk9VVEVfTVVMVElQQVRIYCBuZWVkcyBpdC4gRnJvbSB0aGVyZSwgSSdsbCBhc3Nlc3Mgd2hldGhlciB0aGF0IGRlcGVuZGVuY3kgaXMgYXBwcm9wcmlhdGUgaW4gdGhlIGNvbnRleHQgSSdtIHdvcmtpbmcgaW4sIG9yIGlmIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHJlbGF4IGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE1NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDU6NTYuNzMxMDEzNjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgZWNobyAxIFxcdTAwM2UgL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvXFx1MDAzY2RldmljZVxcdTAwM2UvcnBfZmlsdGVyXFxuICA0NzpcXHRcXHQgICBvclxcbiAgNDg6XFx0XFx0ICBlY2hvIDEgXFx1MDAzZSAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9hbGwvcnBfZmlsdGVyXFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdCAgTm90ZSB0aGF0IHNvbWUgZGlzdHJpYnV0aW9ucyBlbmFibGUgaXQgaW4gc3RhcnR1cCBzY3JpcHRzLlxcbiAgNTE6XFx0XFx0ICBGb3IgZGV0YWlscyBhYm91dCBycF9maWx0ZXIgc3RyaWN0IGFuZCBsb29zZSBtb2RlIHJlYWRcXG4gIDUyOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcXHUwMDNlLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4gaGVyZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIElQX0ZJQl9UUklFX1NUQVRTXFxuICA1NzpcXHRcXHRib29sIFxcXCJGSUIgVFJJRSBzdGF0aXN0aWNzXFxcIlxcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDU5OlxcdFxcdGhlbHBcXG4gIDYwOlxcdFxcdCAgS2VlcCB0cmFjayBvZiBzdGF0aXN0aWNzIG9uIHN0cnVjdHVyZSBvZiBGSUIgVFJJRSB0YWJsZS5cXG4gIDYxOlxcdFxcdCAgVXNlZnVsIGZvciB0ZXN0aW5nIGFuZCBtZWFzdXJpbmcgVFJJRSBwZXJmb3JtYW5jZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0Y29uZmlnIElQX01VTFRJUExFX1RBQkxFU1xcbiAgNjQ6XFx0XFx0Ym9vbCBcXFwiSVA6IHBvbGljeSByb3V0aW5nXFxcIlxcbiAgNjU6XFx0XFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDY2OlxcdFxcdHNlbGVjdCBGSUJfUlVMRVNcXG4gIDY3OlxcdFxcdGhlbHBcXG4gIDY4OlxcdFxcdCAgTm9ybWFsbHksIGEgcm91dGVyIGRlY2lkZXMgd2hhdCB0byBkbyB3aXRoIGEgcmVjZWl2ZWQgcGFja2V0IGJhc2VkXFxuICA2OTpcXHRcXHQgIHNvbGVseSBvbiB0aGUgcGFja2V0J3MgZmluYWwgZGVzdGluYXRpb24gYWRkcmVzcy4gSWYgeW91IHNheSBZIGhlcmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjU2LjczMTEwOTE3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTMzMTk1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRyYWNpbmcgdGhlIERlZmluaXRpb24gb2YgYElQX0FEVkFOQ0VEX1JPVVRFUmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgSVBfQURWQU5DRURfUk9VVEVSYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIGtub3cgdGhpcyBjb25zdGFudCBpcyBpbiB0aGUgY29kZSBiYXNlIHNvbWV3aGVyZSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IGxvY2F0ZSBpdHMgZGVjbGFyYXRpb24uIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIG1hbnVhbGx5IHNjYW5uaW5nIHRocm91Z2ggZmlsZXMsIHNvIEkgbmVlZCB0byB1c2Ugc29tZSB0b29saW5nIG9yIGEgcXVpY2sgc2VhcmNoIHRvIHBpbnBvaW50IGl0cyBsb2NhdGlvbi4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdGFzaywgYW5kIHRoZSBtZXRob2QgSSBjaG9vc2Ugd2lsbCBkZXBlbmQgb24gdGhlIHByb2plY3QncyBzZXR1cCBhbmQgd2hhdCB0b29scyBhcmUgcmVhZGlseSBhdmFpbGFibGUuIEhvcGVmdWxseSwgaXQncyBkZWZpbmVkIGluIGEgY29tbW9uIGhlYWRlciBvciBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIHdvdWxkIG1ha2UgdGhlIHNlYXJjaCBzaW1wbGVyLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA1OjU4Ljk0NDQzMTExNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2MzQxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz01PWNvbmZpZyBJUF9NVUxUSUNBU1RcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMTQtXFxubmV0L2lwdjQvS2NvbmZpZzoxNTpjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXFxubmV0L2lwdjQvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJJUDogYWR2YW5jZWQgcm91dGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNTo1OC45OTQwNzA1MTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTczMzg3NjMzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBSb3V0aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBhZHZhbmNlZCBJUCByb3V0aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYElQX0FEVkFOQ0VEX1JPVVRFUmAsIGBJUF9ST1VURV9NVUxUSVBBVEhgLCBhbmQgdGhlIGJyb2FkZXIgYElORVRgIGNvbnRleHQuIE15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiB0aGUgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsZXJzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgKndoZXJlKiBhbmQgKmhvdyogdGhlIHN5c3RlbSBtYWtlcyBkZWNpc2lvbnMgYWJvdXQgbXVsdGlwbGUgcGF0aHMgaW4gcm91dGluZy4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIG11bHRpcGF0aCByb3V0aW5nIHN0cmF0ZWd5LiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA4NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA2OjAwLjcyNzk0OTE3OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgyOTE0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX3NlbGVjdF9tdWx0aXBhdGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjE1Mj1zdGF0aWMgYm9vbCBmaWJfZ29vZF9uaChjb25zdCBzdHJ1Y3QgZmliX25oICpuaClcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTc4LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMTc5OnZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGhhc2gsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIxODAtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjIyMz12b2lkIGZpYl9zZWxlY3RfcGF0aChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjIzMi1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjIzMzpcXHRcXHRmaWJfc2VsZWN0X211bHRpcGF0aChyZXMsIGgsIGZsNCk7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIyMzQtXFx0fVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yMTk4PWlwX21rcm91dGVfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjIwNS1cXG5uZXQvaXB2NC9yb3V0ZS5jOjIyMDY6XFx0XFx0ZmliX3NlbGVjdF9tdWx0aXBhdGgocmVzLCBoLCBOVUxMKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTIyMDctXFx0XFx0SVBDQihza2IpLVxcdTAwM2VmbGFncyB8PSBJUFNLQl9NVUxUSVBBVEg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA2OjAwLjc5NjI0OTEyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDYyODEwNDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIGEgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZy4gSSdtIGxvb2tpbmcgYXQgYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCwgd2hpY2ggaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkLCBhbG9uZyB3aXRoIGl0cyByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBmaWJfc2VsZWN0X3BhdGhgIGFuZCBgaXBfbWtyb3V0ZV9pbnB1dGAuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgbW9kaWZpY2F0aW9uIGRlc2VydmUgYSBgV29ydGhGdXp6aW5nID0gdHJ1ZWAgZGVzaWduYXRpb24/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gVGhlIGZ1enppbmcgZ29hbCBpcyBjbGVhcjogZmluZCBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBidWdzLCBhbmQgbmV3IGFzc2VydGlvbnMuIFRoZSBwcmltYXJ5IGh1cmRsZSBpcyByZWFjaGFiaWxpdHkuIENhbiB0aGlzIGNvZGUgYWN0dWFsbHkgKmV4ZWN1dGUqIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcz9cblxuSW4gdGhpcyBjYXNlLCB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gSXQncyBhZGRpbmcgYSBgUkVBRF9PTkNFYCBmb3IgY29uY3VycmVuY3kgc2FmZXR5IG9uIGBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyYC4gVGhpcyBjb2RlICppcyogZXhlY3V0YWJsZSBhbmQgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4gU28sIGFic29sdXRlbHksIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCBgSU5FVGAsIGBJUF9BRFZBTkNFRF9ST1VURVJgLCBhbmQgYElQX1JPVVRFX01VTFRJUEFUSGAgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseS5cblxuSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGUgZm9jdXMgc3ltYm9sczogYGZpYl9zZWxlY3RfbXVsdGlwYXRoYCwgYGZpYl9zZWxlY3RfcGF0aGAsIGFuZCBgaXBfbWtyb3V0ZV9pbnB1dGAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGF0IGBmaWJfc2VsZWN0X211bHRpcGF0aGAgaXMgbm90IHViaXF1aXRvdXMsIGJ1dCByYXRoZXIgc3BlY2lmaWMgdG8gSVB2NCBtdWx0aXBhdGggcm91dGluZy4gR29vZC4gQm90aCBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGFuZCBgZmliX3NlbGVjdF9wYXRoYCBhcHBlYXIgdG8gYmUgSVB2NCByb3V0aW5nIHNwZWNpZmljLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkuIExldCdzIGdldCB0aGUgdG9vbCBjYWxsIHRvIGBzZXQtcmVzdWx0c2AgcHJlcGFyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MzEsIk91dHB1dFRva2VucyI6MTMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA2OjA5Ljg1OTA2MTYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwNTc3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiLFxuICAgIFwiSVBfUk9VVEVfTVVMVElQQVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmliX3NlbGVjdF9tdWx0aXBhdGhcIixcbiAgICBcImZpYl9zZWxlY3RfcGF0aFwiLFxuICAgIFwiaXBfbWtyb3V0ZV9pbnB1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUkVBRF9PTkNFKCkgYW5ub3RhdGlvbnMgd2hlbiByZWFkaW5nIG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyIGluIGZpYl9zZWxlY3RfbXVsdGlwYXRoKCkgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBjb21waWxlciB0ZWFyaW5nIGR1cmluZyBjb25jdXJyZW50IHJvdXRlIHNlbGVjdGlvbi4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIElQdjQgbXVsdGlwYXRoIHJvdXRpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBfQURWQU5DRURfUk9VVEVSXCIsXG4gICAgXCJJUF9ST1VURV9NVUxUSVBBVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaWJfc2VsZWN0X211bHRpcGF0aFwiLFxuICAgIFwiZmliX3NlbGVjdF9wYXRoXCIsXG4gICAgXCJpcF9ta3JvdXRlX2lucHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBSRUFEX09OQ0UoKSBhbm5vdGF0aW9ucyB3aGVuIHJlYWRpbmcgbmV4dGhvcF9uaC1cXHUwMDNlbmhfc2FkZHIgaW4gZmliX3NlbGVjdF9tdWx0aXBhdGgoKSB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGNvbXBpbGVyIHRlYXJpbmcgZHVyaW5nIGNvbmN1cnJlbnQgcm91dGUgc2VsZWN0aW9uLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgSVB2NCBtdWx0aXBhdGggcm91dGluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDY6MDkuOTM2MTI0ODE5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjA4OTg2NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6MDY6MDkuOTM2NTA0MzI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTIwODYwMTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggd3JhcHMgdGhlIHJlYWQgb2YgYG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyYCB3aXRoIGBSRUFEX09OQ0UoKWAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIGFkZHJlc3MgY29uY3VycmVudCBkYXRhLXJhY2UgYWNjZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0cnVjdCBwYWRkaW5nLCBvciBidWZmZXIgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDAwNmIxMjE4ZjEwNTA2ZWIyNGY3ZjMyZTQxYTQ1NDIxYWRlNzM5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjA1OjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5pbmRleCA3YTM2MmYyZTJjMmJkLi44ODVjNmZhZTUyMzI3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG4rKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbkBAIC0yMjA0LDcgKzIyMDQsNyBAQCB2b2lkIGZpYl9zZWxlY3RfbXVsdGlwYXRoKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBoYXNoLFxuIFx0XHQgICAgKHVzZV9uZWlnaCBcdTAwMjZcdTAwMjYgIWZpYl9nb29kX25oKG5leHRob3BfbmgpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKHNhZGRyIFx1MDAyNlx1MDAyNiBuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyID09IHNhZGRyKVxuK1x0XHRpZiAoc2FkZHIgXHUwMDI2XHUwMDI2IFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilcbiBcdFx0XHRuaF9zY29yZSArPSAyO1xuIFx0XHRpZiAoaGFzaCBcdTAwM2M9IG5oX3VwcGVyX2JvdW5kKVxuIFx0XHRcdG5oX3Njb3JlKys7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNjowOS45MzY1MDUwODlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg4NDkyMjk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJ0bGUgSVB2NCBGSUIgT3B0aW1pemF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgbW9kaWZpY2F0aW9uIHRvIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGZ1bmN0aW9uLCBhcm91bmQgbGluZSAyMjA0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIHNlbGVjdHMgdGhlIGJlc3QgbmV4dCBob3AgZm9yIGEgcGFja2V0IHdoZW4gbXVsdGlwbGUgcGF0aHMgYXJlIGF2YWlsYWJsZSDigJMgcHJvYmFibHkgb3B0aW1pemluZyBmb3IgdGhlIGNvbW1vbiBjYXNlLCBnaXZlbiB0aGUgY29udGV4dC5cblxuTG9va2luZyBhdCB0aGUgYGRpZmZgLCB0aGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoaXM6IGBpZiAoc2FkZHIgXHUwMDI2XHUwMDI2IFJFQURfT05DRShuZXh0aG9wX25oLVx1MDAzZW5oX3NhZGRyKSA9PSBzYWRkcilgLiBJdCBhcHBlYXJzIHdlJ3ZlIHJlcGxhY2VkIGEgZGlyZWN0IGNvbXBhcmlzb24gYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHIgPT0gc2FkZHJgIHdpdGggYSBgUkVBRF9PTkNFYCB2ZXJzaW9uLiBUaGUgc3Vycm91bmRpbmcgY29kZSBkZWFscyB3aXRoIGBuaF9zY29yZWAgc28gdGhlIGNvbXBhcmlzb24gaGFzIGFuIGluZmx1ZW5jZSBvbiB0aGUgbmV4dCBob3Agc2VsZWN0aW9uIHNjb3JlLiBUaGUgY29uZGl0aW9uIG9ubHkgcnVucyB3aGVuIGBzYWRkcmAgaXMgcG9wdWxhdGVkLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgc3luY2hyb25pemF0aW9uIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2hlbiBhY2Nlc3NpbmcgdGhlIGBuaF9zYWRkcmAgZmllbGQgb2YgdGhlIGBuZXh0aG9wX25oYCBzdHJ1Y3R1cmUuXG5cblRoZSB1c2Ugb2YgYFJFQURfT05DRWAgaXMgYSBzdHJvbmcgaGludCB0aGF0IGBuaF9zYWRkcmAgbWlnaHQgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5IGJ5IGFub3RoZXIgdGhyZWFkIG9yIGludGVycnVwdCBoYW5kbGVyLiBJdCdzIGxpa2VseSB0aGF0IHdpdGhvdXQgdGhpcywgd2UgY291bGQgaGF2ZSBzdGFsZSBkYXRhIGFuZCBhbiBpbmNvcnJlY3QgbmV4dCBob3AgYmVpbmcgc2VsZWN0ZWQgZHVlIHRvIGEgdGltaW5nIGlzc3VlIGR1cmluZyB0aGUgY29tcGFyaXNvbi4gVGhlIGRldmVsb3BlcnMgY2xlYXJseSBpZGVudGlmaWVkIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHJlZ3VsYXIgcmVhZCB3b3VsZCBiZSBpbnN1ZmZpY2llbnQuXG5cbldlJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZmliX3NlbWFudGljcy5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgY291bGQgbGVhZCB0byBhIHJhY2UgY29uZGl0aW9uLiBJdCBpcyBuZWNlc3NhcnkgdG8gZGV0ZXJtaW5lIHdoYXQgc2V0cyB0aGUgdmFsdWUgb2YgYG5oX3NhZGRyYCBhbmQgd2hlbiB0aGUgc2NvcmluZyBjb2RlIGlzIGNhbGxlZC4gVGhlIGBSRUFEX09OQ0VgIHN1Z2dlc3RzIHRoZSB2YWx1ZSBvZiBgbmhfc2FkZHJgIGNhbiBjaGFuZ2UgYXN5bmNocm9ub3VzbHkuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBpZiB0aGlzIGNvZGUgcnVucyBvbiBhIG11bHRpY29yZSBzeXN0ZW0sIHRoaXMgaXMgYSBuZWNlc3Nhcnkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZS4gT3RoZXJ3aXNlLCBhbiBvbGQgdmFsdWUgbWF5IGJlIHJlYWQgYW5kIGFuIGluY29ycmVjdCBuZXh0LWhvcCBtaWdodCBiZSBzZWxlY3RlZC5cblxuU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSB2ZXJ5IGZvY3VzZWQgb3B0aW1pemF0aW9uIGZvY3VzZWQgb24gY29ycmVjdG5lc3Mgd2l0aGluIHRoZSBtdWx0aWhvcCByb3V0aW5nIHNlbGVjdGlvbiBwcm9jZXNzLiBBIGdvb2QgY2F0Y2gsIGFuZCBhIHNvbGlkIGV4YW1wbGUgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nIGluIGEga2VybmVsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODowNjoxNS44MjE0MzExN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxODA6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXFxuMjE4MTpcXHR7XFxuMjE4MjpcXHRcXHRzdHJ1Y3QgZmliX2luZm8gKmZpID0gcmVzLVxcdTAwM2VmaTtcXG4yMTgzOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGZpLVxcdTAwM2VmaWJfbmV0O1xcbjIxODQ6XFx0XFx0Ym9vbCB1c2VfbmVpZ2g7XFxuMjE4NTpcXHRcXHRpbnQgc2NvcmUgPSAtMTtcXG4yMTg2OlxcdFxcdF9fYmUzMiBzYWRkcjtcXG4yMTg3OlxcdFxcbjIxODg6XFx0XFx0aWYgKHVubGlrZWx5KHJlcy1cXHUwMDNlZmktXFx1MDAzZW5oKSkge1xcbjIxODk6XFx0XFx0XFx0bmV4dGhvcF9wYXRoX2ZpYl9yZXN1bHQocmVzLCBoYXNoKTtcXG4yMTkwOlxcdFxcdFxcdHJldHVybjtcXG4yMTkxOlxcdFxcdH1cXG4yMTkyOlxcdFxcbjIxOTM6XFx0XFx0dXNlX25laWdoID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfZmliX211bHRpcGF0aF91c2VfbmVpZ2gpO1xcbjIxOTQ6XFx0XFx0c2FkZHIgPSBmbDQgPyBmbDQtXFx1MDAzZXNhZGRyIDogMDtcXG4yMTk1OlxcdFxcbjIxOTY6XFx0XFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XFxuMjE5NzpcXHRcXHRcXHRpbnQgbmhfdXBwZXJfYm91bmQsIG5oX3Njb3JlID0gMDtcXG4yMTk4OlxcdFxcbjIxOTk6XFx0XFx0XFx0LyogTmV4dGhvcHMgd2l0aG91dCBhIGNhcnJpZXIgYXJlIGFzc2lnbmVkIGFuIHVwcGVyIGJvdW5kIG9mXFxuMjIwMDpcXHRcXHRcXHQgKiBtaW51cyBvbmUgd2hlbiBcXFwiaWdub3JlX3JvdXRlc193aXRoX2xpbmtkb3duXFxcIiBpcyBzZXQuXFxuMjIwMTpcXHRcXHRcXHQgKi9cXG4yMjAyOlxcdFxcdFxcdG5oX3VwcGVyX2JvdW5kID0gYXRvbWljX3JlYWQoXFx1MDAyNm5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF91cHBlcl9ib3VuZCk7XFxuMjIwMzpcXHRcXHRcXHRpZiAobmhfdXBwZXJfYm91bmQgPT0gLTEgfHxcXG4yMjA0OlxcdFxcdFxcdCAgICAodXNlX25laWdoIFxcdTAwMjZcXHUwMDI2ICFmaWJfZ29vZF9uaChuZXh0aG9wX25oKSkpXFxuMjIwNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMjA2OlxcdFxcbjIyMDc6XFx0XFx0XFx0aWYgKHNhZGRyIFxcdTAwMjZcXHUwMDI2IFJFQURfT05DRShuZXh0aG9wX25oLVxcdTAwM2VuaF9zYWRkcikgPT0gc2FkZHIpXFxuMjIwODpcXHRcXHRcXHRcXHRuaF9zY29yZSArPSAyO1xcbjIyMDk6XFx0XFx0XFx0aWYgKGhhc2ggXFx1MDAzYz0gbmhfdXBwZXJfYm91bmQpXFxuMjIxMDpcXHRcXHRcXHRcXHRuaF9zY29yZSsrO1xcbjIyMTE6XFx0XFx0XFx0aWYgKHNjb3JlIFxcdTAwM2Mgbmhfc2NvcmUpIHtcXG4yMjEyOlxcdFxcdFxcdFxcdHJlcy1cXHUwMDNlbmhfc2VsID0gbmhzZWw7XFxuMjIxMzpcXHRcXHRcXHRcXHRyZXMtXFx1MDAzZW5oYyA9IFxcdTAwMjZuZXh0aG9wX25oLVxcdTAwM2VuaF9jb21tb247XFxuMjIxNDpcXHRcXHRcXHRcXHRpZiAobmhfc2NvcmUgPT0gMyB8fCAoIXNhZGRyIFxcdTAwMjZcXHUwMDI2IG5oX3Njb3JlID09IDEpKVxcbjIyMTU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjIyMTY6XFx0XFx0XFx0XFx0c2NvcmUgPSBuaF9zY29yZTtcXG4yMjE3OlxcdFxcdFxcdH1cXG4yMjE4OlxcdFxcbjIyMTk6XFx0XFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpO1xcbjIyMjA6XFx0fVxcbjIyMjE6XFx0I2VuZGlmXFxuMjIyMjpcXHRcXG4yMjIzOlxcdHZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4yMjI0OlxcdFxcdFxcdCAgICAgc3RydWN0IGZsb3dpNCAqZmw0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjIyMjU6XFx0e1xcbjIyMjY6XFx0XFx0aWYgKGZsNC1cXHUwMDNlZmxvd2k0X29pZilcXG4yMjI3OlxcdFxcdFxcdGdvdG8gY2hlY2tfc2FkZHI7XFxuMjIyODpcXHRcXG4yMjI5OlxcdCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA2OjE1LjgyMTU0Mzk5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMjM1Mzg3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBtb2RpZmllcyBhY2Nlc3MgdG8gYG5leHRob3BfbmgtXHUwMDNlbmhfc2FkZHJgIHdpdGhpbiBgZmliX3NlbGVjdF9tdWx0aXBhdGhgIGJ5IGFkZGluZyBgUkVBRF9PTkNFKClgLiBUaGlzIHNjcmVhbXMgc3RhbmRhcmQgY29uY3VycmVuY3kgZml4IHRvIG1lLCBwcm9iYWJseSBmbGFnZ2VkIGJ5IEtDU0FOIG9yIGEgdGhvcm91Z2ggY29kZSByZXZpZXcuIEl0J3MgYSB0ZXh0Ym9vayByZXNwb25zZSB0byBhIGRhdGEgcmFjZS5cblxuTm93LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gRG9lcyB0aGlzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYW55IHdheT8gTm8sIGBuaF9zYWRkcmAgaXMgYSBwcmUtZXhpc3RpbmcgZmllbGQgd2l0aGluIHRoZSBgZmliX25oYCBzdHJ1Y3R1cmUuIEFkZGluZyBgUkVBRF9PTkNFKClgIGlzIHNpbXBseSBhIHNhZmVndWFyZCBhZ2FpbnN0IGNvbXBpbGVyIG9wdGltaXphdGlvbnMgYW5kIHBvdGVudGlhbCBkYXRhIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgdGhhdCBmaWVsZCB3aGlsZSB3cml0ZXMgbWlnaHQgYmUgb2NjdXJyaW5nIGNvbmN1cnJlbnRseS5cblxuTGV0J3MgcnVuIHRocm91Z2ggdGhlIG1lbnRhbCBjaGVja2xpc3Q6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZT8gTm9wZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOZWdhdGl2ZS5cbjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyBOb3QgaGVyZS5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyBhZ2Fpbi5cblxuS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZTsgd2UncmUgZGVhbGluZyB3aXRoIGEgc3RhbmRhcmQgc2FuaXRpemVyL0tDU0FOL0tBU0FOIGlzc3VlLiBLTVNBTiBpc24ndCB0aGUgcmlnaHQgdG9vbC4gU28gdGhpcyBzZWVtcyBjbGVhbi4gSSdtIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk2LCJPdXRwdXRUb2tlbnMiOjExMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjA2OjE5LjE0NTA4NjU4OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggd3JhcHMgdGhlIHJlYWQgb2YgYG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyYCB3aXRoIGBSRUFEX09OQ0UoKWAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIGFkZHJlc3MgY29uY3VycmVudCBkYXRhLXJhY2UgYWNjZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0cnVjdCBwYWRkaW5nLCBvciBidWZmZXIgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggd3JhcHMgdGhlIHJlYWQgb2YgYG5leHRob3BfbmgtXFx1MDAzZW5oX3NhZGRyYCB3aXRoIGBSRUFEX09OQ0UoKWAgaW4gYGZpYl9zZWxlY3RfbXVsdGlwYXRoKClgIHRvIGFkZHJlc3MgY29uY3VycmVudCBkYXRhLXJhY2UgYWNjZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHN0cnVjdCBwYWRkaW5nLCBvciBidWZmZXIgYWxsb2NhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowq6gcl[1] Phase: Succeeded StartedAt: 2026-09-11 08:06:31 +0000 UTC FinishedAt: 2026-09-11 08:06:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 08:06:31 +0000 UTC FinishedAt: 2026-09-11 08:06:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2] Phase: Succeeded StartedAt: 2026-09-11 08:06:31 +0000 UTC FinishedAt: 2026-09-11 08:53:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 08:06:31 +0000 UTC FinishedAt: 2026-09-11 08:53:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 08:06:31 +0000 UTC FinishedAt: 2026-09-11 08:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 08:06:31 +0000 UTC FinishedAt: 2026-09-11 08:06:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq6gcl/series-workflowq6gcl-convert-artifact-2179384071/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 08:06:51 +0000 UTC FinishedAt: 2026-09-11 08:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 08:06:51 +0000 UTC FinishedAt: 2026-09-11 08:27:25 +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:*0772a0ca-eac6-41db-b0fa-48e1d4338992,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-workflowq6gcl/series-workflowq6gcl-convert-artifact-2179384071/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": "8db16b21-b05f-4b97-92ee-deda0e7da247", "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-workflowq6gcl/series-workflowq6gcl-build-action-1238897053/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 08:06:51 +0000 UTC FinishedAt: 2026-09-11 08:26:49 +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:*0772a0ca-eac6-41db-b0fa-48e1d4338992,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-workflowq6gcl/series-workflowq6gcl-convert-artifact-2179384071/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": "8db16b21-b05f-4b97-92ee-deda0e7da247", "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-workflowq6gcl/series-workflowq6gcl-build-action-1238897053/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 08:27:25 +0000 UTC FinishedAt: 2026-09-11 08:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 08:27:25 +0000 UTC FinishedAt: 2026-09-11 08:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 08:27:25 +0000 UTC FinishedAt: 2026-09-11 08:27:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 08:27:25 +0000 UTC FinishedAt: 2026-09-11 08:27:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq6gcl/series-workflowq6gcl-convert-artifact-1696397110/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 08:27:35 +0000 UTC FinishedAt: 2026-09-11 08:29:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 08:27:35 +0000 UTC FinishedAt: 2026-09-11 08:29:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8db16b21-b05f-4b97-92ee-deda0e7da247,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-workflowq6gcl/series-workflowq6gcl-build-action-1238897053/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-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 08:29:43 +0000 UTC FinishedAt: 2026-09-11 08:29:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 08:29:43 +0000 UTC FinishedAt: 2026-09-11 08:29:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 08:29:43 +0000 UTC FinishedAt: 2026-09-11 08:48:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 08:29:43 +0000 UTC FinishedAt: 2026-09-11 08:48: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:*0772a0ca-eac6-41db-b0fa-48e1d4338992,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-workflowq6gcl/series-workflowq6gcl-convert-artifact-1696397110/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": "de773fe6-74c0-4fc6-a3f3-4dda348e8185", "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-workflowq6gcl/series-workflowq6gcl-build-action-3340057658/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 08:29:43 +0000 UTC FinishedAt: 2026-09-11 08:48:21 +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:*0772a0ca-eac6-41db-b0fa-48e1d4338992,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-workflowq6gcl/series-workflowq6gcl-convert-artifact-1696397110/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": "de773fe6-74c0-4fc6-a3f3-4dda348e8185", "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-workflowq6gcl/series-workflowq6gcl-build-action-3340057658/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 08:48:32 +0000 UTC FinishedAt: 2026-09-11 08:48:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 08:48:32 +0000 UTC FinishedAt: 2026-09-11 08:48:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 08:48:32 +0000 UTC FinishedAt: 2026-09-11 08:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 08:48:32 +0000 UTC FinishedAt: 2026-09-11 08:50:31 +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:*de773fe6-74c0-4fc6-a3f3-4dda348e8185,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-workflowq6gcl/series-workflowq6gcl-build-action-3340057658/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-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 08:50:41 +0000 UTC FinishedAt: 2026-09-11 08:53:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 08:50:41 +0000 UTC FinishedAt: 2026-09-11 08:53:16 +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":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"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:*8db16b21-b05f-4b97-92ee-deda0e7da247,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*de773fe6-74c0-4fc6-a3f3-4dda348e8185,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-workflowq6gcl/series-workflowq6gcl-build-action-1238897053/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-workflowq6gcl/series-workflowq6gcl-build-action-3340057658/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 08:50:41 +0000 UTC FinishedAt: 2026-09-11 08:50:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 08:50:41 +0000 UTC FinishedAt: 2026-09-11 08:50:48 +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":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"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-workflowq6gcl/series-workflowq6gcl-convert-artifact-988964187/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 08:50:41 +0000 UTC FinishedAt: 2026-09-11 08:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 08:50:41 +0000 UTC FinishedAt: 2026-09-11 08:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 08:50:42 +0000 UTC FinishedAt: 2026-09-11 08:50:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 08:50:52 +0000 UTC FinishedAt: 2026-09-11 08:53:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6gcl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_select_multipath","fib_select_path","ip_mkroute_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"b6585d8f-cf4c-42d5-8ca7-4549e1dd1d6e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 08:50:52 +0000 UTC FinishedAt: 2026-09-11 08:52:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8db16b21-b05f-4b97-92ee-deda0e7da247,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*de773fe6-74c0-4fc6-a3f3-4dda348e8185,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-workflowq6gcl/series-workflowq6gcl-build-action-1238897053/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-workflowq6gcl/series-workflowq6gcl-build-action-3340057658/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-workflowq6gcl/series-workflowq6gcl-convert-artifact-988964187/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,}