Name: series-workflowppjjg Phase: Succeeded StartedAt: 2026-08-22 20:07:13 +0000 UTC FinishedAt: 2026-08-23 00:27:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[0] Phase: Succeeded StartedAt: 2026-08-22 20:07:13 +0000 UTC FinishedAt: 2026-08-22 20:46:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 20:07:13 +0000 UTC FinishedAt: 2026-08-22 20:46:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FTRACE", "FUNCTION_TRACER", "FUNCTION_GRAPH_TRACER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FTRACE", "FUNCTION_TRACER", "FUNCTION_GRAPH_TRACER" ], "series_id": "e9abe883-ce50-4623-9ce3-435a48f5fbe1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kernel_clone" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9UUkFDRVImIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fR1JBUEhfVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2VybmVsX2Nsb25lJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socClgIGVhcmxpZXIgaW4gYGNvcHlfcHJvY2VzcygpYCB0byBwcmV2ZW50IGEgYnVnIHdoZXJlIGFuIGVycm9yIHBhdGggaW5jb3JyZWN0bHkgZnJlZXMgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYC4gU3BlY2lmaWNhbGx5LCBgZHVwX3Rhc2tfc3RydWN0KClgIGNvcGllcyB0aGUgcGFyZW50JiMzOTtzIGB0YXNrX3N0cnVjdGAsIGluY2x1ZGluZyB0aGUgYHJldF9zdGFja2AgcG9pbnRlci4gYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIHRoaXMgcG9pbnRlciAoYHQtXHUwMDNlcmV0X3N0YWNrID0gTlVMTGApIGFuZCBhbGxvY2F0aW5nIGEgbmV3IG9uZSBpZiB0cmFjaW5nIGlzIGFjdGl2ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGluIGBjb3B5X3Byb2Nlc3MoKWAgYmVmb3JlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKClgIGlzIGNhbGxlZCwgdGhlIGVycm9yIHBhdGggd2lsbCBldmVudHVhbGx5IGNhbGwgYGZyZWVfdGFzaygpYCwgd2hpY2ggY2FsbHMgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAuIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKClgIHdpbGwgdGhlbiBmcmVlIGB0LVx1MDAzZXJldF9zdGFja2AuIFNpbmNlIGl0IHdhcyBuZXZlciBjbGVhcmVkLCBpdCBmcmVlcyB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLiBUaGlzIHJlc3VsdHMgaW4gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBwYXJlbnQgY29udGludWVzIHRvIHVzZSBpdHMgYHJldF9zdGFja2AsIG9yIGEgZG91YmxlIGZyZWUgd2hlbiB0aGUgcGFyZW50IGV4aXRzLlxuXG5Cb3RoIHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUgZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrIGludm9sdmVkIGluIHRoaXMgYnVnLCBhcyB0aGUgcG9pbnRlciBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgKGNvcGllZCBmcm9tIHRoZSBwYXJlbnQpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aCBvZiBjb3B5X3Byb2Nlc3MoKSB3aGVuIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgaXMgZW5hYmxlZC4gSXQgbW92ZXMgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpIGVhcmxpZXIgc28gdGhhdCBpZiBjb3B5X3Byb2Nlc3MoKSBmYWlscywgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2sgaXMgbm90IGluY29ycmVjdGx5IGZyZWVkIGJ5IGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKHByb2Nlc3MgY3JlYXRpb24pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzYxOTQxZjkzZGIzZTIzNzQwODE5YjAxODViZjA0N2M5OTkyMGViOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDIwOjQwOjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCAxZTY4NDA0YmQ3NzNlLi4wZDFhZDkyZTJkMzM3IDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuY1xuQEAgLTIxMzksNiAmIzQzOzIxMzksMTEgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcdHAgPSBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7XG4gXHRpZiAoIXApXG4gXHRcdGdvdG8gZm9ya19vdXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IGZhbGxpYmxlIG9wLCBzbyBlcnJvciBwYXRocyBuZXZlclxuJiM0MztcdCAqIGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbiBcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4gXHRpZiAocmV0dmFsKVxuIFx0XHRnb3RvIGJhZF9mb3JrX2ZyZWU7XG5AQCAtMjE2NSw4ICYjNDM7MjE3MCw2IEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4gXHQgKi9cbiBcdHAtXHUwMDNlY2xlYXJfY2hpbGRfdGlkID0gKGNsb25lX2ZsYWdzIFx1MDAyNiBDTE9ORV9DSElMRF9DTEVBUlRJRCkgPyBhcmdzLVx1MDAzZWNoaWxkX3RpZCA6IE5VTEw7XG4gXG4tXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xuLVxuIFx0cnRfbXV0ZXhfaW5pdF90YXNrKHApO1xuIFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnAtXHUwMDNlYmxvY2tlZF9sb2NrKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9HUkFQSF9UUkFDRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrZXJuZWxfY2xvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgYnVnIGluIHRoZSBlcnJvciBwYXRoIG9mIGNvcHlfcHJvY2VzcygpIHdoZW4gdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBpcyBlbmFibGVkLiBJdCBtb3ZlcyBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgZWFybGllciBzbyB0aGF0IGlmIGNvcHlfcHJvY2VzcygpIGZhaWxzLCB0aGUgcGFyZW50JiMzOTtzIHJldF9zdGFjayBpcyBub3QgaW5jb3JyZWN0bHkgZnJlZWQgYnkgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAocHJvY2VzcyBjcmVhdGlvbikgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NjE5NDFmOTNkYjNlMjM3NDA4MTliMDE4NWJmMDQ3Yzk5OTIwZWI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMjA6NDA6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCAxZTY4NDA0YmQ3NzNlLi4wZDFhZDkyZTJkMzM3IDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mb3JrLmMKQEAgLTIxMzksNiAmIzQzOzIxMzksMTEgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcygKIAlwID0gZHVwX3Rhc2tfc3RydWN0KGN1cnJlbnQsIG5vZGUpOwogCWlmICghcCkKIAkJZ290byBmb3JrX291dDsKJiM0MzsJLyoKJiM0MzsJICogTXVzdCBydW4gYmVmb3JlIHRoZSBmaXJzdCBmYWxsaWJsZSBvcCwgc28gZXJyb3IgcGF0aHMgbmV2ZXIKJiM0MzsJICogZnJlZSB0aGUgcGFyZW50JiMzOTtzIHJldF9zdGFjay4KJiM0MzsJICovCiYjNDM7CWZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7CiAJcmV0dmFsID0gY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGJhZF9mb3JrX2ZyZWU7CkBAIC0yMTY1LDggJiM0MzsyMTcwLDYgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcygKIAkgKi8KIAlwLSZndDtjbGVhcl9jaGlsZF90aWQgPSAoY2xvbmVfZmxhZ3MgJmFtcDsgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQpID8gYXJncy0mZ3Q7Y2hpbGRfdGlkIDogTlVMTDsKIAotCWZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7Ci0KIAlydF9tdXRleF9pbml0X3Rhc2socCk7CiAJcmF3X3NwaW5fbG9ja19pbml0KCZhbXA7cC0mZ3Q7YmxvY2tlZF9sb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBrZXJuZWwvZm9yay5jYC4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIGl0IGludm9sdmVzIHJlcG9zaXRpb25pbmcgdGhlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO2AgY2FsbCB3aXRoaW4gdGhlIGBjb3B5X3Byb2Nlc3NgIGZ1bmN0aW9uLiBDdXJyZW50bHksIGl0JiMzOTtzIGJlaW5nIG1vdmVkIHVwIHRoZSBjYWxsIHN0YWNrLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGdvaW5nIHRvIGJlIGV4ZWN1dGVkIHJpZ2h0IGFmdGVyIGBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7YCBhbmQgYmVmb3JlIGBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO2AuCgpUaGUgcHJvdmlkZWQgY29tbWVudCBpcyBjbGVhciDigJMgdGhlIGdvYWwgaXMgdG8gZXhlY3V0ZSB0aGlzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBvcGVyYXRpb24gKmJlZm9yZSogYW55IHBvdGVudGlhbGx5IGVycm9yLXByb25lIHN0ZXBzIGFyZSB0YWtlbi4gVGhlIGltcGxpY2F0aW9uLCBvZiBjb3Vyc2UsIGlzIHRoYXQgd2Ugd2FudCB0byBlbnN1cmUgZXJyb3IgcGF0aHMgZG9uJiMzOTt0IHByZW1hdHVyZWx5IHJlbGVhc2UgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBBdm9pZGluZyByZXNvdXJjZSBsZWFrcywgZXNwZWNpYWxseSBpbiBjcml0aWNhbCBwYXRoIGZ1bmN0aW9ucyBsaWtlIGBjb3B5X3Byb2Nlc3NgLCBpcyBwYXJhbW91bnQgdG8gc3lzdGVtIHN0YWJpbGl0eS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgYWN0dWFsbHkgKmRvZXMqLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiB0byBmdWxseSBncmFzcCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNoYW5nZSBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gdHJhY2luZywgcHJvY2VzcyBjcmVhdGlvbiwgYW5kIGVycm9yIGhhbmRsaW5nLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnRyYWNlX2dyYXBoX2luaXRfdGFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2ZvcmsuYz0yMDE4PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4tLVxua2VybmVsL2ZvcmsuYy0yMTQ1LVx0ICovXG5rZXJuZWwvZm9yay5jOjIxNDY6XHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xua2VybmVsL2ZvcmsuYy0yMTQ3LVx0cmV0dmFsID0gY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBUYXNrIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGtlcm5lbCYjMzk7cyB0cmFjaW5nIG1lY2hhbmlzbXMgYWdhaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBpcyBhY3R1YWxseSBzZXQgdXAuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLiBLbm93aW5nIHRoZSBleGFjdCBsb2NhdGlvbiB3aWxsIGluZm9ybSB0aGUgc3Vic2VxdWVudCBpbnZlc3RpZ2F0aW9uLiBJIG1pZ2h0IGJlIGxvb2tpbmcgZm9yIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gYSBjcnVjaWFsIGhvb2sgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCB0byBsb2NhdGUgaXRzIGRlZmluaXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB0cmFjaW5nIHRoZSBjb250ZXh0IGluIHdoaWNoIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBpcyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnRyYWNlX2dyYXBoX2luaXRfdGFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDI9ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQzLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0NS1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjMtXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2NS1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuLS1cbmtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjE0NS1cdCAqL1xua2VybmVsL2ZvcmsuYzoyMTQ2Olx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExMzE9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTU5LS8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTYwOnZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipEaXZpbmcgaW50byB0aGUgRnVuY3Rpb24gR3JhcGggVHJhY2VyKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGluaXRpYWxpemVzIGl0c2VsZiwgc3BlY2lmaWNhbGx5IGF0IHRoZSB0YXNrIGxldmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gSSBrbm93IHRoYXQgdGhlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgYSBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQgdGhlIGBrZXJuZWwvdHJhY2UvYCBkaXJlY3Rvcnkgd2lsbCBjb250YWluIHRoZSByZWxldmFudCBjb2RlLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gb2YgZnRyYWNlLXJlbGF0ZWQgZnVuY3Rpb25zLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBsb29rIGZvciBzb21ldGhpbmcgbGlrZSBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AuIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGEgZnVuY3Rpb24gZGVkaWNhdGVkIHRvIHBlci10YXNrIGluaXRpYWxpemF0aW9uIHdpdGhpbiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LCBsZXQmIzM5O3MgZ28gY2hlY2sgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AuIEkmIzM5O2xsIGxvb2sgZm9yIHRoYXQgZnVuY3Rpb24gZGVmaW5pdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvZmdyYXBoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTU5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTk6XHQvKiBBbGxvY2F0ZSBhIHJldHVybiBzdGFjayBmb3IgbmV3bHkgY3JlYXRlZCB0YXNrICovXG4xMTYwOlx0dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbjExNjE6XHR7XG4xMTYyOlx0XHQvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHVzZSB0aGUgcGFyZW50IHJldF9zdGFjayAqL1xuMTE2MzpcdFx0dC1cdTAwM2VyZXRfc3RhY2sgPSBOVUxMO1xuMTE2NDpcdFx0dC1cdTAwM2VjdXJyX3JldF9zdGFjayA9IDA7XG4xMTY1Olx0XHR0LVx1MDAzZWN1cnJfcmV0X2RlcHRoID0gLTE7XG4xMTY2Olx0XG4xMTY3Olx0XHRpZiAoZnRyYWNlX2dyYXBoX2FjdGl2ZSkge1xuMTE2ODpcdFx0XHR1bnNpZ25lZCBsb25nICpyZXRfc3RhY2s7XG4xMTY5Olx0XG4xMTcwOlx0XHRcdGlmIChXQVJOX09OX09OQ0UoIWZncmFwaF9zdGFja19jYWNoZXApKVxuMTE3MTpcdFx0XHRcdHJldHVybjtcbjExNzI6XHRcbjExNzM6XHRcdFx0cmV0X3N0YWNrID0ga21lbV9jYWNoZV9hbGxvYyhmZ3JhcGhfc3RhY2tfY2FjaGVwLCBHRlBfS0VSTkVMKTtcbjExNzQ6XHRcdFx0aWYgKCFyZXRfc3RhY2spXG4xMTc1Olx0XHRcdFx0cmV0dXJuO1xuMTE3NjpcdFx0XHRncmFwaF9pbml0X3Rhc2sodCwgcmV0X3N0YWNrKTtcbjExNzc6XHRcdH1cbjExNzg6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGNvcHlfcHJvY2Vzc2AgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBuYXN0eSByYWNlIGNvbmRpdGlvbiBpbiBgY29weV9wcm9jZXNzYC4gSXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIHdpbmRvdyB3aGVyZSBgY29weV9wcm9jZXNzYCBjb3VsZCBmYWlsICpiZWZvcmUqIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBnZXRzIGNhbGxlZC4gVGhhdCYjMzk7cyBhIHByb2JsZW0gYmVjYXVzZSBgZHVwX3Rhc2tfc3RydWN0YCBpcyBnb2luZyB0byBjb3B5IHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AgaW50byB0aGUgY2hpbGQmIzM5O3MgYHRhc2tfc3RydWN0YC4gSWYgdGhlIGNvcHkgZmFpbHMgZWFybHksIHRoZSBjaGlsZCYjMzk7cyBgdC0mZ3Q7cmV0X3N0YWNrYCBlbmRzIHVwIHBvaW50aW5nIHRvIHRoZSAqcGFyZW50JiMzOTtzKiBgcmV0X3N0YWNrYCDigJMgYSBwb3RlbnRpYWwgZGFuZ2xpbmcgcG9pbnRlciBzaXR1YXRpb24uCgpUaGUgZXJyb3IgaGFuZGxpbmcgaXMgd2hhdCYjMzk7cyBjcnVjaWFsIGhlcmUuIFRoZXkgYXJlIGZyZWVpbmcgdGhlIGNoaWxkJiMzOTtzIGB0YXNrX3N0cnVjdGAsIGJ1dCB3aGF0IGFib3V0IHRoZSBgcmV0X3N0YWNrYD8gSXMgaXQgZXhwbGljaXRseSBmcmVlZCwgb3IgZG9lcyB0aGUgY29kZSBsZWF2ZSBpdCBiZT8gSXQgaXMgdW5jbGVhciB3aGV0aGVyIGl0IGlzIGZyZWVkLCBvciBwb3RlbnRpYWxseSBmcmVlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcy4gTXkgY29uY2VybiBpcywgYGZyZWVfdGFza2AgaXMgaW52b2x2ZWQsIGFuZCBgZnJlZV90YXNrYCAqZG9lcyogY2FsbCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0KWAuIFNvLCBJJiMzOTt2ZSBnb3QgdG8gY2hlY2sgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoIHRoYXQgYHJldF9zdGFja2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z0cmFjZV9ncmFwaF9leGl0X3Rhc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvZmdyYXBoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNjA9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE3OS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTgwOnZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgLCBzdW1tYXJpemVkIGluIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gaXQuIFRoZSBuYW1lIGFsb25lIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGNydWNpYWwgZm9yIGhhbmRsaW5nIHRhc2sgZXhpdHMgd2l0aGluIHRoZSBgZnRyYWNlYCBncmFwaCB0cmFjZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgdHJhY2UgZXZlbnRzIHJlbGF0ZWQgdG8gYSB0YXNrJiMzOTtzIHRlcm1pbmF0aW9uLiBUaGlzIGZ1bmN0aW9uIHByb2JhYmx5IGludGVyYWN0cyB3aXRoIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiBgZnRyYWNlYCB0aGF0IHRyYWNrIHRhc2tzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHRyYWNpbmcgaW5mb3JtYXRpb24sIGFuZCB0aGF0IGluZm9ybWF0aW9uIG5lZWRzIGNsZWFuaW5nIHVwIHRvIGtlZXAgdGhlIHRyYWNlciBpbiBhIGdvb2Qgc3RhdGUuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCBleGFjdGx5IGlzIGJlaW5nIGNsZWFuZWQgdXA/IElzIHRoaXMgdGhyZWFkIHNhZmUsIGFuZCBob3c/IEhvdyBkb2VzIHRoaXMgaW50ZXJhY3Qgd2l0aCBvdGhlciB0cmFjaW5nIG1lY2hhbmlzbXMsIGxpa2UgdGhlIHBlci1DUFUgYnVmZmVycz8gSXMgaXQgY2FsbGVkIGZyb20gYSBjb250ZXh0IHRoYXQgY2FuIGJsb2NrLCBvciBpcyBpdCBkZXNpZ25lZCB0byBiZSBub24tYmxvY2tpbmcgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyB0YXNrIGV4aXQ/IEFyZSB0aGVyZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBsb29raW5nIG91dCBmb3IsIGNvbnNpZGVyaW5nIGEgdGFzayBpcywgYnkgZGVmaW5pdGlvbiwgZXhpdGluZz8gVGhpcyBraW5kIG9mIGZ1bmN0aW9uIGlzIHVzdWFsbHkgZnJhdWdodCB3aXRoIGVkZ2UgY2FzZXMhCgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyBsaWtlOgoqICAgVW5yZWdpc3RlcmluZyB0aGUgdGFzayBmcm9tIHRoZSBgZnRyYWNlYCBncmFwaCB0cmFjaW5nIHN5c3RlbS4KKiAgIFJlbGVhc2luZyBhbnkgYXNzb2NpYXRlZCBtZW1vcnkgYWxsb2NhdGVkIHNwZWNpZmljYWxseSBmb3IgdGhhdCB0YXNrLgoqICAgUG90ZW50aWFsbHkgd3JpdGluZyBmaW5hbCB0cmFjZSBldmVudHMgcmVsYXRlZCB0byB0aGUgdGFzayYjMzk7cyBsYXN0IGFjdGl2aXRpZXMuCiogICBQZXJoYXBzIHNvbWUgY291bnRlciBhZGp1c3RtZW50cywgdG8ga2VlcCB0cmFjayBvZiBhY3RpdmUgdGFza3Mgd2l0aGluIHRoZSB0cmFjZXIuCgpMZXQmIzM5O3MgcmVhZCB0aGUgY29kZSBhbmQgY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucywgYW5kIGNoZWNrIGZvciBhbnkgdW5leHBlY3RlZCBjb21wbGV4aXR5IG9yIGNsZXZlciBvcHRpbWl6YXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGNvcnJlY3RuZXNzIGJ1Z3MgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRhc2tzIGFyZSBjb25zdGFudGx5IGJlaW5nIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvZmdyYXBoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExODA6XHR2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuMTE4MTpcdHtcbjExODI6XHRcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjayA9IHQtXHUwMDNlcmV0X3N0YWNrO1xuMTE4MzpcdFxuMTE4NDpcdFx0dC1cdTAwM2VyZXRfc3RhY2sgPSBOVUxMO1xuMTE4NTpcdFx0LyogTlVMTCBtdXN0IGJlY29tZSB2aXNpYmxlIHRvIElSUXMgYmVmb3JlIHdlIGZyZWUgaXQ6ICovXG4xMTg2Olx0XHRiYXJyaWVyKCk7XG4xMTg3Olx0XG4xMTg4Olx0XHRpZiAocmV0X3N0YWNrKSB7XG4xMTg5Olx0XHRcdGlmIChXQVJOX09OX09OQ0UoIWZncmFwaF9zdGFja19jYWNoZXApKVxuMTE5MDpcdFx0XHRcdHJldHVybjtcbjExOTE6XHRcdFx0a21lbV9jYWNoZV9mcmVlKGZncmFwaF9zdGFja19jYWNoZXAsIHJldF9zdGFjayk7XG4xMTkyOlx0XHR9XG4xMTkzOlx0fVxuMTE5NDpcdFxuMTE5NTpcdCNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VcbjExOTY6XHRzdGF0aWMgaW50IGZncmFwaF9waWRfZnVuYyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG4xMTk3Olx0XHRcdFx0ICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG4xMTk4Olx0XHRcdFx0ICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbjExOTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgS2VybmVsIEJ1ZyBhbmQgaXRzIEZ1enppbmcgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCAqZG9lcyogaW5kZWVkIGZyZWUgYHQtJmd0O3JldF9zdGFja2AuIFRoZSBwb3RlbnRpYWwgaXNzdWUgaXMgaWYgYGNvcHlfcHJvY2Vzc2AgZmFpbHMgYmVmb3JlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBnZXRzIGNhbGxlZC4gSW4gdGhhdCBzY2VuYXJpbywgdGhlIG5ldyB0YXNrJiMzOTtzIGB0LSZndDtyZXRfc3RhY2tgIHdpbGwgaW5pdGlhbGx5IGJlIGEgY29weSBvZiB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgICh0aGFua3MgdG8gYGR1cF90YXNrX3N0cnVjdGApLiBUaGVuLCBpZiBgZnJlZV90YXNrYCBpcyBjYWxsZWQgKmJlZm9yZSogYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLCAgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIHdpbGwgbWlzdGFrZW5seSBmcmVlIHRoZSAqcGFyZW50JiMzOTtzKiBgcmV0X3N0YWNrYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUsIG9yIHdvcnNlLCBhIGRvdWJsZSBmcmVlLCBvciBhIGZyZWUgb2YgYW4gaW4tdXNlIG9iamVjdCwgd2FpdGluZyB0byBoYXBwZW4uCgpTaG91bGQgSSBib3RoZXIgZnV6emluZyB0aGlzPyBUaGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDoganVzdCBtb3ZlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3NgLiBJdCYjMzk7cyBhIGJ1ZyBmaXggZm9yIGFuIGVycm9yL3JhY2UgY29uZGl0aW9uIHdpdGhpbiBgY29weV9wcm9jZXNzYCwgYW5kIGl0IHNob3VsZG4mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBjaGFuZ2VzLiBJdCYjMzk7cyBqdXN0IGEgbWF0dGVyIG9mIHRoZSBvcmRlciBvZiBpbml0aWFsaXphdGlvbi4KCldhaXQsIGlzIGl0IGEgcHVyZSBidWcgZml4PyBUaGUgcHJvbXB0IHRlbGxzIG1lIHRvIGNvbnNpZGVyIGlmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gIFNpbmNlIGl04oCZcyBhIG1vZGlmaWNhdGlvbiB0byBgY29weV9wcm9jZXNzYCBpbiBga2VybmVsL2ZvcmsuY2AsIHRoYXQmIzM5O3MgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gIFRoZXJlZm9yZSwgaXQmIzM5O3Mgd29ydGggZnV6emluZyEgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgd2hlcmUgZG8gSSBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnRzPyAgYGNvcHlfcHJvY2Vzc2AgaXRzZWxmIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBrZXJuZWxfY2xvbmVgLCB3aGljaCBpbiB0dXJuIGdldHMgY2FsbGVkIGJ5IGBzeXNfY2xvbmVgLCBgc3lzX2ZvcmtgLCBgc3lzX3Zmb3JrYCwgZXRjLiBUaGUgcHJvbXB0IHdhcm5zIGFnYWluc3QgbGlzdGluZyBob3QtcGF0aCBnZW5lcmljIGZ1bmN0aW9ucywgc28gSSB3YW50IHRvIGJlIG1vcmUgc3BlY2lmaWMuIGBzeXNfY2xvbmVgLCBgc3lzX2ZvcmtgLCBhbmQgYHN5c19jbG9uZTNgICphcmUqIGVudHJ5IHBvaW50cywgYnV0IHRoZXkgYXJlIHByZXR0eSBob3QtcGF0aC4gIEJ1dCwgSSBoYXZlIHRvIGZpbmQgYSB3YXkgdG8gbWFrZSBgY29weV9wcm9jZXNzYCAqZmFpbCogdG8gdHJpZ2dlciB0aGUgYnVnLiAgSSB0aGluayBJIGNhbiB0cmlnZ2VyIHRoaXMgYnkgcGFzc2luZyBpbnZhbGlkIGFyZ3VtZW50cyB0byBzb21ldGhpbmcgbGlrZSBgY2xvbmUzYCBvciBieSBoaXR0aW5nIGEgcmVzb3VyY2UgbGltaXQuICBgc3lzX2Nsb25lM2AgbWlnaHQgYmUgYSBnb29kIGNhbmRpZGF0ZSB0byBmb2N1cyBvbi4KCkNydWNpYWxseSwgdGhpcyBidWcgKm9ubHkqIG1hdGVyaWFsaXplcyBpZiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgYWN0aXZlICpvciogaWYgYHQtJmd0O3JldF9zdGFja2AgaXMgbm90IE5VTEwuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJgIGlzIGVuYWJsZWQsIGJlY2F1c2UgYHQtJmd0O3JldF9zdGFja2AgaXMgb25seSB1dGlsaXplZCB3aXRoIHRoYXQgY29uZmlnIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGVU5DVElPTl9HUkFQSF9UUkFDRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MjM1PWNvbmZpZyBGVU5DVElPTl9UUkFDRVJcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yNTMtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyNTQ6Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1RSQUNFUlxua2VybmVsL3RyYWNlL0tjb25maWctMjU1LVx0Ym9vbCBcJiMzNDtLZXJuZWwgRnVuY3Rpb24gR3JhcGggVHJhY2VyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgRnVuY3Rpb24gR3JhcGggVHJhY2VyKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBmaW5kIGl0LCBnaXZlbiB0aGlzIGlzIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyBzdWJzeXN0ZW0uIE5vIG5lZWQgdG8gb3ZlcnRoaW5rIGl0OyBsZXQmIzM5O3MganVzdCBnbyBzdHJhaWdodCB0aGVyZSBhbmQgdGFrZSBhIGxvb2suIFNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTQ6XHRjb25maWcgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4gMjU1Olx0XHRib29sIFwmIzM0O0tlcm5lbCBGdW5jdGlvbiBHcmFwaCBUcmFjZXJcJiMzNDtcbiAyNTY6XHRcdGRlcGVuZHMgb24gSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVJcbiAyNTc6XHRcdGRlcGVuZHMgb24gRlVOQ1RJT05fVFJBQ0VSXG4gMjU4Olx0XHRkZXBlbmRzIG9uICFYODZfMzIgfHwgIUNDX09QVElNSVpFX0ZPUl9TSVpFXG4gMjU5Olx0XHRkZWZhdWx0IHlcbiAyNjA6XHRcdGhlbHBcbiAyNjE6XHRcdCAgRW5hYmxlIHRoZSBrZXJuZWwgdG8gdHJhY2UgYSBmdW5jdGlvbiBhdCBib3RoIGl0cyByZXR1cm5cbiAyNjI6XHRcdCAgYW5kIGl0cyBlbnRyeS5cbiAyNjM6XHRcdCAgSXRzIGZpcnN0IHB1cnBvc2UgaXMgdG8gdHJhY2UgdGhlIGR1cmF0aW9uIG9mIGZ1bmN0aW9ucyBhbmRcbiAyNjQ6XHRcdCAgZHJhdyBhIGNhbGwgZ3JhcGggZm9yIGVhY2ggdGhyZWFkIHdpdGggc29tZSBpbmZvcm1hdGlvbiBsaWtlXG4gMjY1Olx0XHQgIHRoZSByZXR1cm4gdmFsdWUuIFRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBjdXJyZW50IHJldHVyblxuIDI2NjpcdFx0ICBhZGRyZXNzIG9uIHRoZSBjdXJyZW50IHRhc2sgc3RydWN0dXJlIGludG8gYSBzdGFjayBvZiBjYWxscy5cbiAyNjc6XHRcbiAyNjg6XHRjb25maWcgRlVOQ1RJT05fR1JBUEhfUkVUVkFMXG4gMjY5Olx0XHRib29sIFwmIzM0O0tlcm5lbCBGdW5jdGlvbiBHcmFwaCBSZXR1cm4gVmFsdWVcJiMzNDtcbiAyNzA6XHRcdGRlcGVuZHMgb24gSEFWRV9GVU5DVElPTl9HUkFQSF9GUkVHU1xuIDI3MTpcdFx0ZGVwZW5kcyBvbiBGVU5DVElPTl9HUkFQSF9UUkFDRVJcbiAyNzI6XHRcdGRlZmF1bHQgblxuIDI3MzpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTM0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEZ1bmN0aW9uIEdyYXBoIFRyYWNlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIGFzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBpdHMgaW50ZXJwbGF5IHdpdGggdGhlIG92ZXJhbGwgc3lzdGVtPyBBaCwgaGFuZyBvbuKApiBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLiBOb3csIEkgcmVjYWxsIHRoYXQgYmVpbmcgY2FsbGVkIHVuY29uZGl0aW9uYWxseSBkdXJpbmcgYGNvcHlfcHJvY2Vzc2AuIElzIHRoYXQgcmlnaHQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRvIGRyaWxsIGludG8gYGtlcm5lbC9mb3JrLmNgLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiBwcm9jZXNzIGNyZWF0aW9uIGxpdmVzLiBMZXQgbWUgY29uZmlybSB0aGF0IGFzc3VtcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z0cmFjZV9ncmFwaF9pbml0X3Rhc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjE0NS1cdCAqL1xua2VybmVsL2ZvcmsuYzoyMTQ2Olx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBOdWFuY2VzIG9mIENvbmRpdGlvbmFsIEJlaGF2aW9yKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBzb21ldGhpbmcgdGhhdCAqY2xhaW1zKiB0byBiZSB1bmNvbmRpdGlvbmFsLCBidXQgdGhhdCYjMzk7cyBpbW1lZGlhdGVseSBzdXNwZWN0LiBUaGUgdGVybSAmIzM0O3VuY29uZGl0aW9uYWwmIzM0OyBpbiB0aGlzIGNvbnRleHQgZmVlbHMgbGlrZSBpdCYjMzk7cyBwcmVzZW50aW5nIGEgc3VyZmFjZS1sZXZlbCBiZWhhdmlvci4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRydWUgdW5jb25kaXRpb25hbCBjb2RlIGlzIHJhcmUsIGVzcGVjaWFsbHkgaW4ga2VybmVsIGVudmlyb25tZW50cy4gQW5kIHRoZSBkZWZpbmluZyBjb25kaXRpb24/IEl0IGhpbmdlcyBvbiBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAuIFRoYXQgcmluZ3MgYSBiZWxsLi4uIEkmIzM5O3ZlIHNlZW4gdGhhdCBtYWNybyBhZmZlY3QgYSBsb3Qgb2YgdHJhY2luZyBhbmQgcHJvZmlsaW5nIGZ1bmN0aW9uYWxpdHkuIAoKTGV0IG1lIGRvdWJsZSBjaGVjayB0aGlzIGh5cG90aGVzaXMuIFRpbWUgdG8gZ28gZGlnIHRocm91Z2ggdGhlIHJlbGV2YW50IGhlYWRlci4gVGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGBpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgZnRyYWNlLCBhbmQgYnkgZXh0ZW5zaW9uLCB0aGlzICYjMzQ7dW5jb25kaXRpb25hbCYjMzQ7IGJlaGF2aW9yLCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBhbmQgcG90ZW50aWFsbHkgZ2F0ZWQuIFRoaXMgZmVlbHMgbGlrZSBpdCYjMzk7cyBnb2luZyB0byBiZSBhIGNhc2Ugb2YgdW5kZXJzdGFuZGluZyB0aGUgKnJlYWwqIGNvbmRpdGlvbnMgYmVmb3JlIEkgY2FuIGFjdHVhbGx5IHJlbHkgb24gdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdHJhY2VfZ3JhcGhfaW5pdF90YXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdHJhY2UuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDI9ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQzLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0NS1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjMtXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2NS1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGZ0cmFjZS5oJiMzOTtzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gbGluZSAxMzQ0IGFuZCB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlcyBzdXJyb3VuZGluZyBpdC4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSBzb21lIGZlYXR1cmUgb3Igb3B0aW1pemF0aW9uIGlzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIElzIGl0IGEgY29tcGlsZS10aW1lIGZlYXR1cmUgZmxhZz8gQSBjb25maWd1cmF0aW9uIG9wdGlvbj8gQmFzZWQgb24gdGhlIGNvbnRleHQsIHdoYXQmIzM5O3MgZW5hYmxlZCBvciBkaXNhYmxlZD8gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGljaCBwYXJ0cyBvZiBmdHJhY2UgYXJlIGFjdGl2ZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCB3aHkgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIG1hZGUgdGhvc2UgZGVzaWduIGRlY2lzaW9ucy4gTGV04oCZcyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnRyYWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMzU6XHRcdHJldHVybiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmtpbGxfZnRyYWNlX2dyYXBoKTtcbjEzMzY6XHR9XG4xMzM3Olx0XG4xMzM4Olx0ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX3N0b3Aodm9pZCk7XG4xMzM5Olx0XG4xMzQwOlx0LyogVGhlIGN1cnJlbnQgaGFuZGxlcnMgaW4gdXNlICovXG4xMzQxOlx0ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfcmV0X3QgZnRyYWNlX2dyYXBoX3JldHVybjtcbjEzNDI6XHRleHRlcm4gdHJhY2VfZnVuY19ncmFwaF9lbnRfdCBmdHJhY2VfZ3JhcGhfZW50cnk7XG4xMzQzOlx0XG4xMzQ0Olx0ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xuMTM0NTpcdGV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcbjEzNDY6XHRleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KTtcbjEzNDc6XHRcbjEzNDg6XHQvKiBVc2VkIGJ5IGFzc2VtYmx5LCBidXQgdG8gcXVpZXQgc3BhcnNlIHdhcm5pbmdzICovXG4xMzQ5Olx0ZXh0ZXJuIHN0cnVjdCBmdHJhY2Vfb3BzICpmdW5jdGlvbl90cmFjZV9vcDtcbjEzNTA6XHRcbjEzNTE6XHRzdGF0aWMgaW5saW5lIHZvaWQgcGF1c2VfZ3JhcGhfdHJhY2luZyh2b2lkKVxuMTM1MjpcdHtcbjEzNTM6XHRcdGF0b21pY19pbmMoXHUwMDI2Y3VycmVudC1cdTAwM2V0cmFjaW5nX2dyYXBoX3BhdXNlKTtcbjEzNTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGZ0cmFjZS5oKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYXNwZWN0IG9mIHRyYWNpbmcuIFRpbWUgdG8gcmV2aXNpdCB0aGUgY29yZSBkZWZpbml0aW9uLCBhbmQgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBlbnRyeSBwb2ludDogYGluY2x1ZGUvbGludXgvZnRyYWNlLmhgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmcm9tIHRoZSB0b3AsIGxpa2VseSB0byB6ZXJvIGluIG9uIGFueSBtYWNyb3MsIGRhdGEgc3RydWN0dXJlcywgb3IgZnVuZGFtZW50YWwgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IGFyZSByZWxldmFudCB0byB0aGUgc3BlY2lmaWMgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjZW50cmFsIGNvbnRyb2wgc3RydWN0dXJlcywgcG90ZW50aWFsbHkgc29tZSBkZXRhaWxzIG9uIHRoZSBldmVudHMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLCBvciBkZWZpbml0aW9ucyBmb3IgdGhlIHByb2JlIHBvaW50cy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnl0aGluZyB0aGF0IGRpY3RhdGVzIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaW50ZXJhY3Rpb25zLiBNeSBleHBlcnRpc2UgYWxsb3dzIG1lIHRvIHJlYWQgdGhyb3VnaCBpdCBxdWlja2x5LCB3aXRoIGZvY3VzIG9uIHRoZSBhcmNoaXRlY3R1cmUuIE5vIG5lZWQgdG8gZ2V0IGJvZ2dlZCBkb3duIGluIGRldGFpbHMgSSBhbHJlYWR5IGtub3c7IEkmIzM5O2xsIHpvb20gaW4gb24gYW55dGhpbmcgdGhhdCBzZWVtcyBub3ZlbCBvciB0aGF0IHBlcnRhaW5zIGRpcmVjdGx5IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnRyYWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMTU6XHQgKi9cbjEzMTY6XHQjZGVmaW5lIF9fbm90cmFjZV9mdW5jZ3JhcGhcdFx0bm90cmFjZVxuMTMxNzpcdFxuMTMxODpcdCNkZWZpbmUgRlRSQUNFX1JFVEZVTkNfREVQVEggNTBcbjEzMTk6XHQjZGVmaW5lIEZUUkFDRV9SRVRTVEFDS19BTExPQ19TSVpFIDMyXG4xMzIwOlx0XG4xMzIxOlx0ZXh0ZXJuIGludCByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKm9wcyk7XG4xMzIyOlx0ZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKm9wcyk7XG4xMzIzOlx0XG4xMzI0Olx0LyoqXG4xMzI1Olx0ICogZnRyYWNlX2dyYXBoX2lzX2RlYWQgLSByZXR1cm5zIHRydWUgaWYgZnRyYWNlX2dyYXBoX3N0b3AoKSB3YXMgY2FsbGVkXG4xMzI2Olx0ICpcbjEzMjc6XHQgKiBmdHJhY2VfZ3JhcGhfc3RvcCgpIGlzIGNhbGxlZCB3aGVuIGEgc2V2ZXJlIGVycm9yIGlzIGRldGVjdGVkIGluXG4xMzI4Olx0ICogdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNpbmcuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBjcml0aWNhbFxuMTMyOTpcdCAqIHBhdGhzIG9mIGZ1bmN0aW9uIGdyYXBoIHRvIGtlZXAgdGhvc2UgcGF0aHMgZnJvbSBkb2luZyBhbnkgbW9yZSBoYXJtLlxuMTMzMDpcdCAqL1xuMTMzMTpcdERFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShraWxsX2Z0cmFjZV9ncmFwaCk7XG4xMzMyOlx0XG4xMzMzOlx0c3RhdGljIGlubGluZSBib29sIGZ0cmFjZV9ncmFwaF9pc19kZWFkKHZvaWQpXG4xMzM0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTUyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2Ygc29tZW9uZSBpbW1lcnNlZCBpbiB0aGVpciBmaWVsZDoKCioqRGlnZ2luZyBEZWVwZXI6IEEgTGluZS1ieS1MaW5lIFJlZmluZW1lbnQqKgoKQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIFRoaXMgaW5pdGlhbCBhbmFseXNpcyBpcyBmaW5lLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIEkmIzM5O20gbm90IHNlZWluZyB0aGUgZW50aXJlIHBpY3R1cmUuIFRvIHRydWx5IHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIHN0YXJ0IGV2ZW4gZWFybGllciBpbiB0aGUgbWF0ZXJpYWwsIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSBkYXRhLCB0aGUgb3JpZ2luYWwgb2JzZXJ2YXRpb25zLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGluc3RpbmN0IOKAkyBuZXZlciB0YWtlIHRoZSBzdXJmYWNlIGxldmVsIGZvciBncmFudGVkLiBUaGVyZSYjMzk7cyBhbHdheXMgdGhlIGNoYW5jZSB0aGF0IHRoZSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGlzIGhpZGluZyBpbiB0aGUgc2VlbWluZ2x5IGluc2lnbmlmaWNhbnQgZWFybHkgcGFydHMuIFRoYXQgaW5pdGlhbCByZWFkIG1pZ2h0IGhhdmUgYmVlbiB0b28gZm9jdXNlZCwgdG9vIGJpYXNlZCBieSB3aGF0IEkgd2FzIGV4cGVjdGluZyB0byBmaW5kLiBJdCYjMzk7cyB0aW1lIHRvIHJlLWV4YW1pbmUgdGhlIGZvdW5kYXRpb24uIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLCBhbmQgbGVhdmUgbm8gc3RvbmUgdW50dXJuZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdHJhY2UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5NTpcdFx0XHRcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XG4xMjk2Olx0XG4xMjk3Olx0c3RhdGljIGlubGluZSBpbnQgZnVuY3Rpb25fZ3JhcGhfZW50ZXIodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgZnVuYyxcbjEyOTg6XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZwLCB1bnNpZ25lZCBsb25nICpyZXRwKVxuMTI5OTpcdHtcbjEzMDA6XHRcdHJldHVybiBmdW5jdGlvbl9ncmFwaF9lbnRlcl9yZWdzKHJldCwgZnVuYywgZnAsIHJldHAsIE5VTEwpO1xuMTMwMTpcdH1cbjEzMDI6XHRcbjEzMDM6XHRzdHJ1Y3QgZnRyYWNlX3JldF9zdGFjayAqXG4xMzA0Olx0ZnRyYWNlX2dyYXBoX2dldF9yZXRfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc2tpcCk7XG4xMzA1Olx0dW5zaWduZWQgbG9uZyBmdHJhY2VfZ3JhcGhfdG9wX3JldF9hZGRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7XG4xMzA2Olx0XG4xMzA3Olx0dW5zaWduZWQgbG9uZyBmdHJhY2VfZ3JhcGhfcmV0X2FkZHIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgKmlkeCxcbjEzMDg6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyAqcmV0cCk7XG4xMzA5Olx0dW5zaWduZWQgbG9uZyAqZmdyYXBoX2dldF90YXNrX3ZhcihzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyk7XG4xMzEwOlx0XG4xMzExOlx0LypcbjEzMTI6XHQgKiBTb21ldGltZXMgd2UgZG9uJiMzOTt0IHdhbnQgdG8gdHJhY2UgYSBmdW5jdGlvbiB3aXRoIHRoZSBmdW5jdGlvblxuMTMxMzpcdCAqIGdyYXBoIHRyYWNlciBidXQgd2Ugd2FudCB0aGVtIHRvIGtlZXAgdHJhY2VkIGJ5IHRoZSB1c3VhbCBmdW5jdGlvblxuMTMxNDpcdCAqIHRyYWNlciBpZiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGlzIG5vdCBjb25maWd1cmVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2Ygc29tZW9uZSBpbW1lcnNlZCBpbiB0aGVpciBmaWVsZDoKCioqRGlnZ2luZyBEZWVwZXI6IEEgTGluZS1ieS1MaW5lIFJlZmluZW1lbnQqKgoKQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIFRoaXMgaW5pdGlhbCBhbmFseXNpcyBpcyBmaW5lLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIEkmIzM5O20gbm90IHNlZWluZyB0aGUgZW50aXJlIHBpY3R1cmUuIFRvIHRydWx5IHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIHN0YXJ0IGV2ZW4gZWFybGllciBpbiB0aGUgbWF0ZXJpYWwsIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSBkYXRhLCB0aGUgb3JpZ2luYWwgb2JzZXJ2YXRpb25zLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGluc3RpbmN0IOKAkyBuZXZlciB0YWtlIHRoZSBzdXJmYWNlIGxldmVsIGZvciBncmFudGVkLiBUaGVyZSYjMzk7cyBhbHdheXMgdGhlIGNoYW5jZSB0aGF0IHRoZSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGlzIGhpZGluZyBpbiB0aGUgc2VlbWluZ2x5IGluc2lnbmlmaWNhbnQgZWFybHkgcGFydHMuIFRoYXQgaW5pdGlhbCByZWFkIG1pZ2h0IGhhdmUgYmVlbiB0b28gZm9jdXNlZCwgdG9vIGJpYXNlZCBieSB3aGF0IEkgd2FzIGV4cGVjdGluZyB0byBmaW5kLiBJdCYjMzk7cyB0aW1lIHRvIHJlLWV4YW1pbmUgdGhlIGZvdW5kYXRpb24uIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLCBhbmQgbGVhdmUgbm8gc3RvbmUgdW50dXJuZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdHJhY2UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI3NTpcdCAqL1xuMTI3NjpcdHN0cnVjdCBmdHJhY2VfcmV0X3N0YWNrIHtcbjEyNzc6XHRcdHVuc2lnbmVkIGxvbmcgcmV0O1xuMTI3ODpcdFx0dW5zaWduZWQgbG9uZyBmdW5jO1xuMTI3OTpcdCNpZmRlZiBIQVZFX0ZVTkNUSU9OX0dSQVBIX0ZQX1RFU1RcbjEyODA6XHRcdHVuc2lnbmVkIGxvbmcgZnA7XG4xMjgxOlx0I2VuZGlmXG4xMjgyOlx0XHR1bnNpZ25lZCBsb25nICpyZXRwO1xuMTI4MzpcdH07XG4xMjg0Olx0XG4xMjg1Olx0LypcbjEyODY6XHQgKiBQcmltYXJ5IGhhbmRsZXIgb2YgYSBmdW5jdGlvbiByZXR1cm4uXG4xMjg3Olx0ICogSXQgcmVsYXlzIG9uIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlci5cbjEyODg6XHQgKiBEZWZpbmVkIGluIGVudHJ5XzMyLzY0LlNcbjEyODk6XHQgKi9cbjEyOTA6XHRleHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTtcbjEyOTE6XHRcbjEyOTI6XHRleHRlcm4gaW50XG4xMjkzOlx0ZnVuY3Rpb25fZ3JhcGhfZW50ZXJfcmVncyh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBmdW5jLFxuMTI5NDpcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmcmFtZV9wb2ludGVyLCB1bnNpZ25lZCBsb25nICpyZXRwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAzMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoaXMuIExldCYjMzk7cyBzZWUuLi4gSSBuZWVkIHRvIHN1bW1hcml6ZSB0aGVzZSAmIzM0O3Rob3VnaHRzJiMzNDsgYXMgaWYgdGhleSB3ZXJlIG15IG93bi4gQW5kLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2UsIEkgc2hvdWxkIGFpbSBmb3IgYSBjb25jaXNlIHlldCBpbnNpZ2h0ZnVsIGV4cGxhbmF0aW9uLiBIZXJlIGdvZXM6CgoqKk15IEltbWVkaWF0ZSBUaG91Z2h0IFByb2Nlc3Mgb24gQW5hbHl6aW5nIFRoaXMgVGV4dCoqCgpBbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZ28gYmFjayB0byB0aGUgc291cmNlIHRleHQuIFNlZW1zIGxpa2UgdGhlIGFuYWx5c2lzIHdhbnRzIHRvIGxvb2sgYXQgKmV2ZW4gZWFybGllciBsaW5lcyouIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQgcG9pbnQgaXMgbm90IHRoZSBiZWdpbm5pbmcsIGJ1dCBhIGNvbnRpbnVhdGlvbiBvZiBhIGxpbmUgb2YgdGhvdWdodCwgaW4gYSBkb2N1bWVudCBvciBjb252ZXJzYXRpb24uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgdG9waWMsIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGluIHRoZXNlICYjMzQ7ZWFybGllciBsaW5lcyYjMzQ7CgpBbHJpZ2h0LCBJIGNhbiB3b3JrIHdpdGggdGhhdC4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjU1Olx0XG4xMjU2Olx0I2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJcbjEyNTc6XHRcbjEyNTg6XHRzdHJ1Y3QgZmdyYXBoX29wcyB7XG4xMjU5Olx0XHR0cmFjZV9mdW5jX2dyYXBoX2VudF90XHRcdGVudHJ5ZnVuYztcbjEyNjA6XHRcdHRyYWNlX2Z1bmNfZ3JhcGhfcmV0X3RcdFx0cmV0ZnVuYztcbjEyNjE6XHRcdHN0cnVjdCBmdHJhY2Vfb3BzXHRcdG9wczsgLyogZm9yIHRoZSBoYXNoIGxpc3RzICovXG4xMjYyOlx0XHR2b2lkXHRcdFx0XHQqcHJpdmF0ZTtcbjEyNjM6XHRcdHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3RcdFx0c2F2ZWRfZnVuYztcbjEyNjQ6XHRcdGludFx0XHRcdFx0aWR4O1xuMTI2NTpcdH07XG4xMjY2Olx0XG4xMjY3Olx0dm9pZCAqZmdyYXBoX3Jlc2VydmVfZGF0YShpbnQgaWR4LCBpbnQgc2l6ZV9ieXRlcyk7XG4xMjY4Olx0dm9pZCAqZmdyYXBoX3JldHJpZXZlX2RhdGEoaW50IGlkeCwgaW50ICpzaXplX2J5dGVzKTtcbjEyNjk6XHR2b2lkICpmZ3JhcGhfcmV0cmlldmVfcGFyZW50X2RhdGEoaW50IGlkeCwgaW50ICpzaXplX2J5dGVzLCBpbnQgZGVwdGgpO1xuMTI3MDpcdFxuMTI3MTpcdC8qXG4xMjcyOlx0ICogU3RhY2sgb2YgcmV0dXJuIGFkZHJlc3NlcyBmb3IgZnVuY3Rpb25zXG4xMjczOlx0ICogb2YgYSB0aHJlYWQuXG4xMjc0Olx0ICogVXNlZCBpbiBzdHJ1Y3QgdGhyZWFkX2luZm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NDcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqVHJhY2luZyBgY29weV9wcm9jZXNzYCBhbmQgaXRzIGNhbGxlcnMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdGhhdCBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgY29uZmlnIG9wdGlvbi4gSSB0aGluayB0aGF0JiMzOTtzIHRoZSBvbmUgd2UgbmVlZC4gU28sIHRoYXQgbWVhbnMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBpcyBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gR290IGl0LgoKTm93LCB3aGljaCBmdW5jdGlvbiBhcmUgd2UgaW50ZXJlc3RlZCBpbj8gQWgsIGl0JiMzOTtzIGBjb3B5X3Byb2Nlc3NgLCBvZiBjb3Vyc2UuIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGBjb3B5X3Byb2Nlc3NgIGlzIGRlY2xhcmVkIHN0YXRpYywgaXNuJiMzOTt0IGl0PyBUaGF0JiMzOTtzIGdvaW5nIHRvIG1ha2UgZGlyZWN0IHRyYWNpbmcgYSBiaXQgdHJpY2t5LiBXZSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxzIHRvIHRoZSBmdW5jdGlvbiByYXRoZXIgdGhhbiB0aGUgZnVuY3Rpb24gaXRzZWxmLgoKSG1tLi4uIFdoZXJlIGRvZXMgdGhpcyBoYXBwZW4/IFRoZSBzeXN0ZW0gY2FsbCBsZXZlbC4gSXQmIzM5O3MgZWl0aGVyIGdvaW5nIHRvIGJlIGBzeXNfY2xvbmVgLCBvciBgc3lzX2Nsb25lM2AsIG9yIHBlcmhhcHMgYGtlcm5lbF9jbG9uZWA/IFRoYXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuCgpPa2F5LCB0aW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGtlcm5lbC9mb3JrLmNgIGFuZCBzZWFyY2ggZm9yIHRoYXQgYGtlcm5lbF9jbG9uZWAgZnVuY3Rpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cywgYW5kIGhvcGVmdWxseSwgZnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgYmFjayB0byBgY29weV9wcm9jZXNzYCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZXJuZWxfY2xvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjAyMS1cdFx0XHRcdFx0aW50IG5vZGUsXG5rZXJuZWwvZm9yay5jOjIwMjI6XHRcdFx0XHRcdHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbmtlcm5lbC9mb3JrLmMtMjAyMy17XG4tLVxua2VybmVsL2ZvcmsuYz0yNjc0PXN0cnVjdCB0YXNrX3N0cnVjdCAqIF9faW5pdCBmb3JrX2lkbGUoaW50IGNwdSlcbi0tXG5rZXJuZWwvZm9yay5jLTI2NzYtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG5rZXJuZWwvZm9yay5jOjI2Nzc6XHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcbmtlcm5lbC9mb3JrLmMtMjY3OC1cdFx0LmZsYWdzXHRcdD0gQ0xPTkVfVk0sXG4tLVxua2VybmVsL2ZvcmsuYy0yNjk0LS8qXG5rZXJuZWwvZm9yay5jOjI2OTU6ICogVGhpcyBpcyBsaWtlIGtlcm5lbF9jbG9uZSgpLCBidXQgc2hhdmVkIGRvd24gYW5kIHRhaWxvcmVkIHRvIGp1c3Rcbmtlcm5lbC9mb3JrLmMtMjY5Ni0gKiBjcmVhdGluZyBpb191cmluZyB3b3JrZXJzLiBJdCByZXR1cm5zIGEgY3JlYXRlZCB0YXNrLCBvciBhbiBlcnJvciBwb2ludGVyLlxuLS1cbmtlcm5lbC9mb3JrLmM9MjcwMD1zdHJ1Y3QgdGFza19zdHJ1Y3QgKmNyZWF0ZV9pb190aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgaW50IG5vZGUpXG4tLVxua2VybmVsL2ZvcmsuYy0yNzAzLVx0XHRcdCAgICAgIENMT05FX0lPfENMT05FX1ZNfENMT05FX1VOVFJBQ0VEO1xua2VybmVsL2ZvcmsuYzoyNzA0Olx0c3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzIGFyZ3MgPSB7XG5rZXJuZWwvZm9yay5jLTI3MDUtXHRcdC5mbGFnc1x0XHQ9IGZsYWdzLFxuLS1cbmtlcm5lbC9mb3JrLmMtMjcyMC0gKi9cbmtlcm5lbC9mb3JrLmM6MjcyMTpwaWRfdCBrZXJuZWxfY2xvbmUoc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxua2VybmVsL2ZvcmsuYy0yNzIyLXtcbi0tXG5rZXJuZWwvZm9yay5jPTI4MjQ9cGlkX3Qga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmtlcm5lbC9mb3JrLmMtMjgyNi17XG5rZXJuZWwvZm9yay5jOjI4Mjc6XHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcbmtlcm5lbC9mb3JrLmMtMjgyOC1cdFx0LmZsYWdzXHRcdD0gKChmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQpIFx1MDAyNiB+Q1NJR05BTCksXG4tLVxua2VybmVsL2ZvcmsuYy0yODM1LVxua2VybmVsL2ZvcmsuYzoyODM2Olx0cmV0dXJuIGtlcm5lbF9jbG9uZShcdTAwMjZhcmdzKTtcbmtlcm5lbC9mb3JrLmMtMjgzNy19XG4tLVxua2VybmVsL2ZvcmsuYz0yODQyPXBpZF90IHVzZXJfbW9kZV90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBmbGFncylcbmtlcm5lbC9mb3JrLmMtMjg0My17XG5rZXJuZWwvZm9yay5jOjI4NDQ6XHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcbmtlcm5lbC9mb3JrLmMtMjg0NS1cdFx0LmZsYWdzXHRcdD0gKChmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQpIFx1MDAyNiB+Q1NJR05BTCksXG4tLVxua2VybmVsL2ZvcmsuYy0yODUxLVxua2VybmVsL2ZvcmsuYzoyODUyOlx0cmV0dXJuIGtlcm5lbF9jbG9uZShcdTAwMjZhcmdzKTtcbmtlcm5lbC9mb3JrLmMtMjg1My19XG4tLVxua2VybmVsL2ZvcmsuYz0yODU2PVNZU0NBTExfREVGSU5FMChmb3JrKVxuLS1cbmtlcm5lbC9mb3JrLmMtMjg1OC0jaWZkZWYgQ09ORklHX01NVVxua2VybmVsL2ZvcmsuYzoyODU5Olx0c3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzIGFyZ3MgPSB7XG5rZXJuZWwvZm9yay5jLTI4NjAtXHRcdC5leGl0X3NpZ25hbCA9IFNJR0NITEQsXG4tLVxua2VybmVsL2ZvcmsuYy0yODYyLVxua2VybmVsL2ZvcmsuYzoyODYzOlx0cmV0dXJuIGtlcm5lbF9jbG9uZShcdTAwMjZhcmdzKTtcbmtlcm5lbC9mb3JrLmMtMjg2NC0jZWxzZVxuLS1cbmtlcm5lbC9mb3JrLmM9Mjg3Mj1TWVNDQUxMX0RFRklORTAodmZvcmspXG5rZXJuZWwvZm9yay5jLTI4NzMte1xua2VybmVsL2ZvcmsuYzoyODc0Olx0c3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzIGFyZ3MgPSB7XG5rZXJuZWwvZm9yay5jLTI4NzUtXHRcdC5mbGFnc1x0XHQ9IENMT05FX1ZGT1JLIHwgQ0xPTkVfVk0sXG4tLVxua2VybmVsL2ZvcmsuYy0yODc4LVxua2VybmVsL2ZvcmsuYzoyODc5Olx0cmV0dXJuIGtlcm5lbF9jbG9uZShcdTAwMjZhcmdzKTtcbmtlcm5lbC9mb3JrLmMtMjg4MC19XG4tLVxua2VybmVsL2ZvcmsuYz0yOTAxPVNZU0NBTExfREVGSU5FNShjbG9uZSwgdW5zaWduZWQgbG9uZywgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcsIG5ld3NwLFxuLS1cbmtlcm5lbC9mb3JrLmMtMjkwNi17XG5rZXJuZWwvZm9yay5jOjI5MDc6XHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcbmtlcm5lbC9mb3JrLmMtMjkwOC1cdFx0LmZsYWdzXHRcdD0gKGxvd2VyXzMyX2JpdHMoY2xvbmVfZmxhZ3MpIFx1MDAyNiB+Q1NJR05BTCksXG4tLVxua2VybmVsL2ZvcmsuYy0yOTE2LVxua2VybmVsL2ZvcmsuYzoyOTE3Olx0cmV0dXJuIGtlcm5lbF9jbG9uZShcdTAwMjZhcmdzKTtcbmtlcm5lbC9mb3JrLmMtMjkxOC19XG4tLVxua2VybmVsL2ZvcmsuYy0yOTIwLVxua2VybmVsL2ZvcmsuYzoyOTIxOnN0YXRpYyBub2lubGluZSBpbnQgY29weV9jbG9uZV9hcmdzX2Zyb21fdXNlcihzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmthcmdzLFxua2VybmVsL2ZvcmsuYy0yOTIyLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgY2xvbmVfYXJncyBfX3VzZXIgKnVhcmdzLFxuLS1cbmtlcm5lbC9mb3JrLmMtMjk2NC1cbmtlcm5lbC9mb3JrLmM6Mjk2NTpcdCprYXJncyA9IChzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3Mpe1xua2VybmVsL2ZvcmsuYy0yOTY2LVx0XHQuZmxhZ3NcdFx0PSBhcmdzLmZsYWdzLFxuLS1cbmtlcm5lbC9mb3JrLmMtMjk5NS0gKi9cbmtlcm5lbC9mb3JrLmM6Mjk5NjpzdGF0aWMgaW5saW5lIGJvb2wgY2xvbmUzX3N0YWNrX3ZhbGlkKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqa2FyZ3MpXG5rZXJuZWwvZm9yay5jLTI5OTcte1xuLS1cbmtlcm5lbC9mb3JrLmMtMzAxNS1cbmtlcm5lbC9mb3JrLmM6MzAxNjpzdGF0aWMgYm9vbCBjbG9uZTNfYXJnc192YWxpZChzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmthcmdzKVxua2VybmVsL2ZvcmsuYy0zMDE3LXtcbi0tXG5rZXJuZWwvZm9yay5jPTMwNTc9U1lTQ0FMTF9ERUZJTkUyKGNsb25lMywgc3RydWN0IGNsb25lX2FyZ3MgX191c2VyICosIHVhcmdzLCBzaXplX3QsIHNpemUpXG4tLVxua2VybmVsL2ZvcmsuYy0zMDYwLVxua2VybmVsL2ZvcmsuYzozMDYxOlx0c3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzIGthcmdzO1xua2VybmVsL2ZvcmsuYy0zMDYyLVx0cGlkX3Qgc2V0X3RpZFtNQVhfUElEX05TX0xFVkVMXTtcbi0tXG5rZXJuZWwvZm9yay5jLTMwNzctXG5rZXJuZWwvZm9yay5jOjMwNzg6XHRyZXR1cm4ga2VybmVsX2Nsb25lKFx1MDAyNmthcmdzKTtcbmtlcm5lbC9mb3JrLmMtMzA3OS19XG4tLVxua2VybmVsL2ZvcmsuYz0zMjIyPXN0YXRpYyBpbnQgdW5zaGFyZV9mZCh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MsIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKipuZXdfZmRwKVxuLS1cbmtlcm5lbC9mb3JrLmMtMzIzOS0gKiBjb250ZXh0IHdoaWNoIHdhcyBvcmlnaW5hbGx5IHNoYXJlZCB1c2luZyBjbG9uZS4gIGNvcHlfKlxua2VybmVsL2ZvcmsuYzozMjQwOiAqIGZ1bmN0aW9ucyB1c2VkIGJ5IGtlcm5lbF9jbG9uZSgpIGNhbm5vdCBiZSB1c2VkIGhlcmUgZGlyZWN0bHlcbmtlcm5lbC9mb3JrLmMtMzI0MS0gKiBiZWNhdXNlIHRoZXkgbW9kaWZ5IGFuIGluYWN0aXZlIHRhc2tfc3RydWN0IHRoYXQgaXMgYmVpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENsb25pbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIGZpZWxkIGNvbnNpZGVyYWJseSB3aGVuIGxvb2tpbmcgYXQgdGhlc2UgY2xvbmluZyBmdW5jdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBrZXJuZWxfY2xvbmVgIGFuZCBgc3lzX2Nsb25lM2AgYXJlIHRoZSBtYWluIHBsYXllcnMuIE5vdywgSSBrbm93IGBzeXNfY2xvbmUzYCBpcyBhIHN5c2NhbGw7IEnigJltIHByZXR0eSBmYW1pbGlhciB3aXRoIHRoYXQgb25lLiBCdXQsIGBrZXJuZWxfY2xvbmVgIOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlIGVudHJ5IHBvaW50LCB0aGUgb25lIHRoYXQga2lja3MgZXZlcnl0aGluZyBvZmYuIExldCYjMzk7cyBzZWUuLi4geWVwLCBgcGlkX3Qga2VybmVsX2Nsb25lKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylgLiBOb3Qgc3RhdGljLiBQZXJmZWN0LiBUaGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLgoKSSBkaWQgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGNvcHlfcHJvY2Vzc2AsIGFuZCB3aGlsZSB0aGF0JiMzOTtzIHRoZSBvbmUgdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBpdCYjMzk7cyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBuby1nbyBiYXNlZCBvbiB0aGUgcHJlZmVyZW5jZSBvdXRsaW5lZC4gYGtlcm5lbF9jbG9uZWAgaXQgaXMuCgpOb3csIHRvIG1ha2Ugc3VyZSBJIGdldCBhIGdvb2QgdHJhY2UsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gTGV0IG1lIHB1bGwgdXAgdGhlIEtjb25maWcgZmlsZeKApiBSaWdodC4gSXQgZGVwZW5kcyBvbiBgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVJgLCBgRlVOQ1RJT05fVFJBQ0VSYCwgYW5kLCBpbXBvcnRhbnRseSwgaXQgaGFzIGFuIGFyY2gtc3BlY2lmaWMgZGVwZW5kZW5jeTogaXQgbmVlZHMgdG8gYmUgKiFYODZfMzIgfHwgIUNDX09QVElNSVpFX0ZPUl9TSVpFKgoKU28sIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBGVU5DVElPTl9UUkFDRVJgIGFsb25nc2lkZSBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCB0byBnZXQgYSBwcm9wZXIgdHJhY2UuIEdvb2QgdG8ga25vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVTkNUSU9OX1RSQUNFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTIyNj1jb25maWcgQk9PVFRJTUVfVFJBQ0lOR1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTIzNC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjIzNTpjb25maWcgRlVOQ1RJT05fVFJBQ0VSXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O0tlcm5lbCBGdW5jdGlvbiBUcmFjZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgRlVOQ1RJT05fVFJBQ0VSYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhpcyBgRlVOQ1RJT05fVFJBQ0VSYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGxpYnJhcmllcyByZWx5IG9uIGl0LCBhbmQgY29udmVyc2VseSwgd2hhdCBpdCByZWxpZXMgb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgb3IgdXBkYXRlcywgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBoaWRkZW4gJiMzNDtnb3RjaGFzJiMzNDsgbHVya2luZyB3aXRoaW4gaXRzIGRlcGVuZGVuY3kgdHJlZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUsIGlzb2xhdGVkIG1vZHVsZSwgb3Igc29tZXRoaW5nIGRlZXBseSBpbnRlcndvdmVuIGludG8gdGhlIHN5c3RlbSYjMzk7cyBjb3JlPyBUaGUgY29tcGxleGl0eSBoZXJlIGlzIGdvaW5nIHRvIGRpY3RhdGUgYSBsb3Qgb2YgbXkgYXBwcm9hY2ggdG8gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjM1Olx0Y29uZmlnIEZVTkNUSU9OX1RSQUNFUlxuIDIzNjpcdFx0Ym9vbCBcJiMzNDtLZXJuZWwgRnVuY3Rpb24gVHJhY2VyXCYjMzQ7XG4gMjM3Olx0XHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fVFJBQ0VSXG4gMjM4Olx0XHRzZWxlY3QgS0FMTFNZTVNcbiAyMzk6XHRcdHNlbGVjdCBHRU5FUklDX1RSQUNFUlxuIDI0MDpcdFx0c2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUlxuIDI0MTpcdFx0c2VsZWN0IEdMT0JcbiAyNDI6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuIDI0MzpcdFx0c2VsZWN0IFRBU0tTX1JVREVfUkNVXG4gMjQ0Olx0XHRoZWxwXG4gMjQ1Olx0XHQgIEVuYWJsZSB0aGUga2VybmVsIHRvIHRyYWNlIGV2ZXJ5IGtlcm5lbCBmdW5jdGlvbi4gVGhpcyBpcyBkb25lXG4gMjQ2Olx0XHQgIGJ5IHVzaW5nIGEgY29tcGlsZXIgZmVhdHVyZSB0byBpbnNlcnQgYSBzbWFsbCwgNS1ieXRlIE5vLU9wZXJhdGlvblxuIDI0NzpcdFx0ICBpbnN0cnVjdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IGtlcm5lbCBmdW5jdGlvbiwgd2hpY2ggTk9QXG4gMjQ4Olx0XHQgIHNlcXVlbmNlIGlzIHRoZW4gZHluYW1pY2FsbHkgcGF0Y2hlZCBpbnRvIGEgdHJhY2VyIGNhbGwgd2hlblxuIDI0OTpcdFx0ICB0cmFjaW5nIGlzIGVuYWJsZWQgYnkgdGhlIGFkbWluaXN0cmF0b3IuIElmIGl0JiMzOTtzIHJ1bnRpbWUgZGlzYWJsZWRcbiAyNTA6XHRcdCAgKHRoZSBib290dXAgZGVmYXVsdCksIHRoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBpbnN0cnVjdGlvbnMgaXMgdmVyeVxuIDI1MTpcdFx0ICBzbWFsbCBhbmQgbm90IG1lYXN1cmFibGUgZXZlbiBpbiBtaWNyby1iZW5jaG1hcmtzIChhdCBsZWFzdCBvblxuIDI1MjpcdFx0ICB4ODYsIGJ1dCBtYXkgaGF2ZSBpbXBhY3Qgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcykuXG4gMjUzOlx0XG4gMjU0Olx0Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1RSQUNFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byB0cmFjaW5nLiBTbywgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgYXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIGluIHF1ZXN0aW9uLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLml0IGZlZWxzIGxpa2UgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIG1pc3NpbmcsIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gQWgsIHJpZ2h0ISBgRlRSQUNFYCBpcyB0eXBpY2FsbHkgdGhlIG92ZXJhcmNoaW5nLCB0b3AtbGV2ZWwgY29uZmlnIHRoYXQgZ292ZXJucyB0aGUgZW50aXJlIHRyYWNpbmcgc3Vic3lzdGVtLiBJdCYjMzk7cyB0aGUgYmlnIHBpY3R1cmUuIFRoYXQgbWVhbnMgYEZVTkNUSU9OX1RSQUNFUmAgYW5kIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIGFyZSBwcm9iYWJseSBtb3JlIHNwZWNpZmljIGZlYXR1cmVzIG9yIG1vZHVsZXMgKndpdGhpbiogdGhlIGJyb2FkZXIgYEZUUkFDRWAgZnJhbWV3b3JrLiBOZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhhdCBoaWVyYXJjaHkgc3RyYWlnaHQsIG9yIEkmIzM5O2xsIGdldCBsb3N0IGluIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlRSQUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MTk4PWNvbmZpZyBUUkFDSU5HX1NVUFBPUlRcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDMtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyMDQ6bWVudWNvbmZpZyBGVFJBQ0Vcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIwNS1cdGJvb2wgXCYjMzQ7VHJhY2Vyc1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTU4OD1jb25maWcgRU5BQkxFX0RFRkFVTFRfVFJBQ0VSU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjU5Nzpjb25maWcgRlRSQUNFX1NZU0NBTExTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01OTgtXHRib29sIFwmIzM0O1RyYWNlIHN5c2NhbGxzXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9ODY4PWNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODc2LVxua2VybmVsL3RyYWNlL0tjb25maWc6ODc3OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg3OC1cdGJvb2xcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODAtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4ODE6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX0NDXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODItXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODg2LVxua2VybmVsL3RyYWNlL0tjb25maWc6ODg3OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9PQkpUT09MXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODgtXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODk0LVxua2VybmVsL3RyYWNlL0tjb25maWc6ODk1OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9SRUNPUkRNQ09VTlRcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5Ni1cdGRlZl9ib29sIHlcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMDIxPWNvbmZpZyBUUkFDRV9FVkFMX01BUF9GSUxFXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTA0OC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNDk6Y29uZmlnIEZUUkFDRV9SRUNPUkRfUkVDVVJTSU9OXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDUwLVx0Ym9vbCBcJiMzNDtSZWNvcmQgZnVuY3Rpb25zIHRoYXQgcmVjdXJzZSBpbiBmdW5jdGlvbiB0cmFjaW5nXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTA2Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNjM6Y29uZmlnIEZUUkFDRV9SRUNPUkRfUkVDVVJTSU9OX1NJWkVcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjQtXHRpbnQgXCYjMzQ7TWF4IG51bWJlciBvZiByZWN1cnNlZCBmdW5jdGlvbnMgdG8gcmVjb3JkXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTA3My1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNzQ6Y29uZmlnIEZUUkFDRV9WQUxJREFURV9SQ1VfSVNfV0FUQ0hJTkdcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNzUtXHRib29sIFwmIzM0O1ZhbGlkYXRlIFJDVSBpcyBvbiBkdXJpbmcgZnRyYWNlIGV4ZWN1dGlvblwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMDE9Y29uZmlnIEdDT1ZfUFJPRklMRV9GVFJBQ0Vcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTEyLVxua2VybmVsL3RyYWNlL0tjb25maWc6MTExMzpjb25maWcgRlRSQUNFX1NFTEZURVNUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE0LVx0Ym9vbFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNS1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjExMTY6Y29uZmlnIEZUUkFDRV9TVEFSVFVQX1RFU1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTctXHRib29sIFwmIzM0O1BlcmZvcm0gYSBzdGFydHVwIHRlc3Qgb24gZnRyYWNlXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTEzNj1jb25maWcgRVZFTlRfVFJBQ0VfVEVTVF9TWVNDQUxMU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNDctXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTQ4OmNvbmZpZyBGVFJBQ0VfU09SVF9TVEFSVFVQX1RFU1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNDktICAgICAgIGJvb2wgXCYjMzQ7VmVyaWZ5IGNvbXBpbGUgdGltZSBzb3J0aW5nIG9mIGZ0cmFjZSBmdW5jdGlvbnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgRlRSQUNFYCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEZUUkFDRWAuIEl0JiMzOTtzIGNydWNpYWwsIHdoZW4gZGVhbGluZyB3aXRoIGEgc3lzdGVtIGFzIHBvd2VyZnVsIGFuZCBjb21wbGV4IGFzIHRoaXMsIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25zIGFuZCB3aGF0IGl0IHJlbGllcyB1cG9uLiBJIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGxpYnJhcmllcywgb3Igc3lzdGVtIGNhbGxzIGBGVFJBQ0VgIGlzIHRldGhlcmVkIHRvLiBUaGlzIGlzIHRoZSBiZWRyb2NrIG9mIG15IGludmVzdGlnYXRpb24uIEFyZSB0aGVyZSBhbnkgbGlicmFyaWVzIGJlaW5nIHVzZWQ/IE1heWJlIHNvbWUgbW9kdWxlIGRlcGVuZGVuY2llcz8gSXQgaXMgaW1wb3J0YW50IHRoYXQgSSBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIHNvIEkgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbSwgYW5kIGhvdyBtb2RpZmljYXRpb25zIGNvdWxkIHJpcHBsZSBvdXR3YXJkcy4gR290dGEgY2hhcnQgdGhpcyBvdXQgdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgaGljY3VwcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDQ6XHRtZW51Y29uZmlnIEZUUkFDRVxuIDIwNTpcdFx0Ym9vbCBcJiMzNDtUcmFjZXJzXCYjMzQ7XG4gMjA2Olx0XHRkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVFxuIDIwNzpcdFx0ZGVmYXVsdCB5IGlmIERFQlVHX0tFUk5FTFxuIDIwODpcdFx0aGVscFxuIDIwOTpcdFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxuIDIxMDpcdFxuIDIxMTpcdGlmIEZUUkFDRVxuIDIxMjpcdFxuIDIxMzpcdGNvbmZpZyBUUkFDRUZTX0FVVE9NT1VOVF9ERVBSRUNBVEVEXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzAwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZUUkFDRSBJbnZlc3RpZ2F0aW9uIGZvciBLZXJuZWwgRnV6emluZyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgY3JpdGljYWwgYnVnIGZpeCBpbnZvbHZpbmcgYEZUUkFDRWAgdGhhdCB3ZSBuZWVkIHRvIGZ1enouIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGNvcHlfcHJvY2Vzc2Agd2hlbiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgYWN0aXZlLiBUaGUgZml4IGNsZXZlcmx5IHJlYXJyYW5nZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGB0LSZndDtyZXRfc3RhY2tgIHRvIHByZXZlbnQgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYCBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGZyZWVkIGJ5IGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCBpZiBgY29weV9wcm9jZXNzYCBmYWlscy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQsIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBidWcgdGhhdCBkZXNlcnZlcyBvdXIgYXR0ZW50aW9uLgoKV2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB0aGlzIGFuZCB0aHVzLCBzaG91bGQgYmUgZnV6emVkIQoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHdoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHdlIHNob3VsZCBmb2N1cyBvbj8gSXQgc2VlbXMgdGhlIHBhdGNoIGZvY3VzZXMgb24gYGtlcm5lbF9jbG9uZWAsIGJ1dCBkb2VzIGl0IGNvbnNpZGVyIGFsbCBwYXRocz8gV2hhdCBhYm91dCB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlczogYHN5c19jbG9uZWAsIGBzeXNfY2xvbmUzYCwgYHN5c19mb3JrYCwgYW5kIGBzeXNfdmZvcmtgPyBBaCwgcmlnaHQhIGBrZXJuZWxfY2xvbmVgIGlzIHRoZSBjb21tb24gZnVuY3Rpb24gdGhhdCBhbGwgb2YgdGhvc2UgdWx0aW1hdGVseSBpbnZva2UuIFNvLCBga2VybmVsX2Nsb25lYCBpcyBhIHNtYXJ0IGFuZCBjb21wcmVoZW5zaXZlIGZvY3VzIHN5bWJvbC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGNoZWNrIHRvIGVuc3VyZSB3ZSBoYXZlIGFsbCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYEZUUkFDRWAsIHNwZWNpZmljYWxseSBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAuIGBUUkFDSU5HX1NVUFBPUlRgIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBpcyBnb29kLiBXZSBzaG91bGQgZG91YmxlLWNoZWNrIG91ciBidWlsZCBjb25maWd1cmF0aW9uIHRvIGVuc3VyZSBgRlRSQUNFYCBhbmQgdGhlIG90aGVycyBhcmUgZW5hYmxlZCwgZXNwZWNpYWxseSBzaW5jZSBgRlRSQUNFYCBpcyBjb25kaXRpb25hbGx5IGBkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMYC4KCk9uZSBmaW5hbCB0aG91Z2h0Li4uIHdlIHNob3VsZCBzY2FuIHRoZSBjb2RlIGFuZCBtYWtlIHN1cmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGlzbiYjMzk7dCBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlLiBXZSB3YW50IHRvIGJlIHN1cmUgb3VyIGZ1enppbmcgZWZmb3J0cyBhcmVuJiMzOTt0IGJlaW5nIGxpbWl0ZWQgYnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnRyYWNlX2dyYXBoX2luaXRfdGFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDI9ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQzLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0NS1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjMtXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2NS1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuLS1cbmtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjE0NS1cdCAqL1xua2VybmVsL2ZvcmsuYzoyMTQ2Olx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExMzE9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTU5LS8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTYwOnZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTA4CgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipBbmFseXNpcyBDb25jbHVzaW9uOiBTZXR0aW5nIFJlc3VsdHMqKgoKQWxyaWdodCwgdGhlIHB1enpsZSYjMzk7cyBzb2x2ZWQuIEl0IGFwcGVhcnMgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCB3aGF0ZXZlciBpdCYjMzk7cyBkb2luZywgaXMgb25seSBldmVyIGNhbGxlZCB3aXRoaW4gYGNvcHlfcHJvY2Vzc2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBteSBhbmFseXNpcyBpcywgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcywgY29tcGxldGUuIEJhc2VkIG9uIHRoaXMgb2JzZXJ2YXRpb24sIEkmIzM5O20gbm93IGdvaW5nIHRvIGNvbmZpZGVudGx5IHByb2NlZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCYjMzk7cyB0aW1lIHRvIGNvbW11bmljYXRlIHdoYXQgSSYjMzk7dmUgZGlzY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9UUkFDRVImIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fR1JBUEhfVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2VybmVsX2Nsb25lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aCBvZiBjb3B5X3Byb2Nlc3MoKSB3aGVuIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgaXMgZW5hYmxlZC4gSXQgbW92ZXMgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpIGVhcmxpZXIgc28gdGhhdCBpZiBjb3B5X3Byb2Nlc3MoKSBmYWlscywgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2sgaXMgbm90IGluY29ycmVjdGx5IGZyZWVkIGJ5IGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKHByb2Nlc3MgY3JlYXRpb24pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVFJBQ0UmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tlcm5lbF9jbG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBidWcgaW4gdGhlIGVycm9yIHBhdGggb2YgY29weV9wcm9jZXNzKCkgd2hlbiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGlzIGVuYWJsZWQuIEl0IG1vdmVzIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKSBlYXJsaWVyIHNvIHRoYXQgaWYgY29weV9wcm9jZXNzKCkgZmFpbHMsIHRoZSBwYXJlbnQmIzM5O3MgcmV0X3N0YWNrIGlzIG5vdCBpbmNvcnJlY3RseSBmcmVlZCBieSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChwcm9jZXNzIGNyZWF0aW9uKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIHByZXZlbnQgYSBidWcgd2hlcmUgYW4gZXJyb3IgcGF0aCBpbmNvcnJlY3RseSBmcmVlcyB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLiBTcGVjaWZpY2FsbHksIGBkdXBfdGFza19zdHJ1Y3QoKWAgY29waWVzIHRoZSBwYXJlbnQmIzM5O3MgYHRhc2tfc3RydWN0YCwgaW5jbHVkaW5nIHRoZSBgcmV0X3N0YWNrYCBwb2ludGVyLiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhpcyBwb2ludGVyIChgdC1cdTAwM2VyZXRfc3RhY2sgPSBOVUxMYCkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlmIHRyYWNpbmcgaXMgYWN0aXZlLiBJZiBhbiBlcnJvciBvY2N1cnMgaW4gYGNvcHlfcHJvY2VzcygpYCBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV90YXNrKClgLCB3aGljaCBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAgd2lsbCB0aGVuIGZyZWUgYHQtXHUwMDNlcmV0X3N0YWNrYC4gU2luY2UgaXQgd2FzIG5ldmVyIGNsZWFyZWQsIGl0IGZyZWVzIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AuIFRoaXMgcmVzdWx0cyBpbiBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCBjb250aW51ZXMgdG8gdXNlIGl0cyBgcmV0X3N0YWNrYCwgb3IgYSBkb3VibGUgZnJlZSB3aGVuIHRoZSBwYXJlbnQgZXhpdHMuXG5cbkJvdGggdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZSBmcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaW4gdGhpcyBidWcsIGFzIHRoZSBwb2ludGVyIGl0c2VsZiBpcyBpbml0aWFsaXplZCAoY29waWVkIGZyb20gdGhlIHBhcmVudCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzYxOTQxZjkzZGIzZTIzNzQwODE5YjAxODViZjA0N2M5OTkyMGViOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDIwOjQwOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggMWU2ODQwNGJkNzczZS4uMGQxYWQ5MmUyZDMzNyAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZm9yay5jCkBAIC0yMTM5LDYgJiM0MzsyMTM5LDExIEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoCiAJcCA9IGR1cF90YXNrX3N0cnVjdChjdXJyZW50LCBub2RlKTsKIAlpZiAoIXApCiAJCWdvdG8gZm9ya19vdXQ7CiYjNDM7CS8qCiYjNDM7CSAqIE11c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgZmFsbGlibGUgb3AsIHNvIGVycm9yIHBhdGhzIG5ldmVyCiYjNDM7CSAqIGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2suCiYjNDM7CSAqLwomIzQzOwlmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApOwogCXJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBiYWRfZm9ya19mcmVlOwpAQCAtMjE2NSw4ICYjNDM7MjE3MCw2IEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoCiAJICovCiAJcC0mZ3Q7Y2xlYXJfY2hpbGRfdGlkID0gKGNsb25lX2ZsYWdzICZhbXA7IENMT05FX0NISUxEX0NMRUFSVElEKSA/IGFyZ3MtJmd0O2NoaWxkX3RpZCA6IE5VTEw7CiAKLQlmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApOwotCiAJcnRfbXV0ZXhfaW5pdF90YXNrKHApOwogCXJhd19zcGluX2xvY2tfaW5pdCgmYW1wO3AtJmd0O2Jsb2NrZWRfbG9jayk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrIFBsYWNlbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vdmluZyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciB3aXRoaW4gYGNvcHlfcHJvY2VzcygpYCBpbiBga2VybmVsL2ZvcmsuY2AuIEludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGJlaW5nIG1vdmVkICpiZWZvcmUqIGBjb3B5X2V4ZWNfc3RhdGUoKWAgYW5kIG90aGVyIG9wZXJhdGlvbnMgdGhhdCBjYW4gcG90ZW50aWFsbHkgZmFpbC4gVGhlIGNvbW1lbnQgaXMgcHJldHR5IGV4cGxpY2l0OiAmIzM0O011c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgZmFsbGlibGUgb3AsIHNvIGVycm9yIHBhdGhzIG5ldmVyIGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2suJiMzNDsgVGhhdCBzb3VuZHMgbGlrZSBhIGJ1ZyBmaXgsIGFuZCBnaXZlbiB0aGUgY29udGV4dCBJJiMzOTttIGltbWVkaWF0ZWx5IHN1c3BpY2lvdXMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLgoKTGV0JiMzOTtzIGRpdmUgaW50byB3aGF0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBhY3R1YWxseSAqZG9lcyouIE15IGd1ZXNzIGlzIHRoYXQgaXQmIzM5O3MgaW5pdGlhbGl6aW5nIHNvbWUgc3BlY2lmaWMgZmllbGRzIHdpdGhpbiB0aGUgYHRhc2tfc3RydWN0YC4gSWYgc28sIG1vdmluZyBpdCBlYXJsaWVyIG1lYW5zIHRob3NlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgZXZlbiBpZiBhbiBlcnJvciBvY2N1cnMgbGF0ZXIgaW4gdGhlIGBjb3B5X3Byb2Nlc3MoKWAgc2VxdWVuY2UuIEhtbS4uLiBpZiB0aGUgZXJyb3IgcGF0aHMgZnJlZSBgcGAgKHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIHRoZSByZXN1bHQgb2YgYGR1cF90YXNrX3N0cnVjdChjdXJyZW50LCBub2RlKWAg4oCTIHRoZSBjb3B5IG9mIHRoZSBwYXJlbnQgdGFzayksIHRoZW4gbWF5YmUgdGhvc2UgZXJyb3IgcGF0aHMgd2VyZSwgaW4gdGhlIHByZXZpb3VzIGNvZGUsIGZyZWVpbmcgdW5pbml0aWFsaXplZCBwb2ludGVycyBvciwgbW9yZSBsaWtlbHksIHBvaW50ZXJzICpjb3BpZWQqIGZyb20gdGhlIHBhcmVudC4KCkFoLCB3YWl0LCB0aGF0JiMzOTtzIGl0ISBgZHVwX3Rhc2tfc3RydWN0YCAqY29waWVzKiB0aGUgcGFyZW50JiMzOTtzIGB0YXNrX3N0cnVjdGAuIFNvLCBgcC0mZ3Q7cmV0X3N0YWNrYCB3b3VsZCBiZSBhICpjb3B5KiBvZiB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLiBUaGUgY3J1eCBvZiBpdCBpcyB0aGF0IGlmIGFuIGVycm9yIG9jY3VycyAqYmVmb3JlKiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCAobGlrZSBgYmFkX2ZvcmtfZnJlZWApIG1pZ2h0IGNhbGwgYGZyZWVfdGFzayhwKWAsIHdoaWNoIGluIHR1cm4gY291bGQgY2FsbCBgZnJlZV90YXNrX3N0YWNrKHApYC4gSWYgYGZyZWVfdGFza19zdGFjayhwKWAgd2VyZSBjYWxsZWQsIGl0IG1pZ2h0IGZyZWUgYHAtJmd0O3JldF9zdGFja2AuIEJ1dCB0aGF0IGByZXRfc3RhY2tgIGlzIGEgKmNvcHkqIG9mIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AhIFRoZXJlZm9yZSwgdGhhdCBtZWFucyB3ZSBhcmUgZnJlZWluZyB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLCBwb3RlbnRpYWxseSBjYXVzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2l0dWF0aW9uLgoKVGhhdCYjMzk7cyBpdCwgdGhpcyBpcyBhIHRleHRib29rIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGJ1Zy4gS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaCB0aGlzLCBpZiBpdCB3YXMgZW5hYmxlZC4gTXkgc3VzcGljaW9uIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHRoZSByb290IG9mIGl0IHdhcyB3cm9uZyB0aG91Z2guIEl0JiMzOTtzIG1vcmUgc3VidGxlIHRoYW4gdGhhdDogaXQgaW52b2x2ZXMgYSAqY29waWVkKiBwb2ludGVyIGZyb20gdGhlIHBhcmVudCBiZWluZyBmcmVlZCBpbmNvcnJlY3RseSBkdWUgdG8gYW4gb3JkZXIgb2Ygb3BlcmF0aW9ucyBpc3N1ZS4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGlzLCBpbiBmYWN0LCB0aGUgY3J1Y2lhbCBpbml0aWFsaXphdGlvbiB0aGF0IHJlc29sdmVzIHRoaXMgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z0cmFjZV9ncmFwaF9pbml0X3Rhc2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQyPWV4dGVybiB0cmFjZV9mdW5jX2dyYXBoX2VudF90IGZ0cmFjZV9ncmFwaF9lbnRyeTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0My1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM0NDpleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDUtZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM1Nj1zdGF0aWMgaW5saW5lIHZvaWQgdW5wYXVzZV9ncmFwaF90cmFjaW5nKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzYzLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY0OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjUtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cbi0tXG5rZXJuZWwvZm9yay5jPTIwMTg9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2Vzcyhcbi0tXG5rZXJuZWwvZm9yay5jLTIxNDUtXHQgKi9cbmtlcm5lbC9mb3JrLmM6MjE0NjpcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XG5rZXJuZWwvZm9yay5jLTIxNDctXHRyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTMxPXZvaWQgZnRyYWNlX2dyYXBoX2luaXRfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNwdSlcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE1OS0vKiBBbGxvY2F0ZSBhIHJldHVybiBzdGFjayBmb3IgbmV3bHkgY3JlYXRlZCB0YXNrICovXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE2MDp2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExNjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlci4gTXkgaW5pdGlhbCBwb2ludCBvZiBpbnRlcmVzdCBpcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AsIHdoaWNoIEkgYmVsaWV2ZSByZXNpZGVzIGluIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgaG93IHRoZSBpbml0aWFsIHNldHVwIG9mIGEgdGFzayBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2luZyBmcmFtZXdvcmsuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIG1haW4gdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZWFjaCB0YXNrIGlzIHNldCB1cC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGV4YW1pbmUgaG93IHRoYXQgaW5pdGlhbGl6YXRpb24gdGllcyBpbnRvIHRoZSBicm9hZGVyIHRyYWNpbmcgY29udGV4dCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSB0cmFjZXImIzM5O3MgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaG93IHRhc2tzIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIG1haW4gdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gSSBhbHNvIGV4cGVjdCB0byBzZWUgaG93IGl0IHBvdGVudGlhbGx5IG1hbmFnZXMgYW55IHNwZWNpZmljIHBlci10YXNrIHRyYWNpbmcgZmxhZ3Mgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSXQmIzM5O3MgdGltZSB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBpdHMgZXhlY3V0aW9uIGZsb3cgd2l0aGluIHRoZSBsYXJnZXIgdHJhY2luZyBzY2hlbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2ZncmFwaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTU5Olx0LyogQWxsb2NhdGUgYSByZXR1cm4gc3RhY2sgZm9yIG5ld2x5IGNyZWF0ZWQgdGFzayAqL1xuMTE2MDpcdHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4xMTYxOlx0e1xuMTE2MjpcdFx0LyogTWFrZSBzdXJlIHdlIGRvIG5vdCB1c2UgdGhlIHBhcmVudCByZXRfc3RhY2sgKi9cbjExNjM6XHRcdHQtXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcbjExNjQ6XHRcdHQtXHUwMDNlY3Vycl9yZXRfc3RhY2sgPSAwO1xuMTE2NTpcdFx0dC1cdTAwM2VjdXJyX3JldF9kZXB0aCA9IC0xO1xuMTE2NjpcdFxuMTE2NzpcdFx0aWYgKGZ0cmFjZV9ncmFwaF9hY3RpdmUpIHtcbjExNjg6XHRcdFx0dW5zaWduZWQgbG9uZyAqcmV0X3N0YWNrO1xuMTE2OTpcdFxuMTE3MDpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFmZ3JhcGhfc3RhY2tfY2FjaGVwKSlcbjExNzE6XHRcdFx0XHRyZXR1cm47XG4xMTcyOlx0XG4xMTczOlx0XHRcdHJldF9zdGFjayA9IGttZW1fY2FjaGVfYWxsb2MoZmdyYXBoX3N0YWNrX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG4xMTc0Olx0XHRcdGlmICghcmV0X3N0YWNrKVxuMTE3NTpcdFx0XHRcdHJldHVybjtcbjExNzY6XHRcdFx0Z3JhcGhfaW5pdF90YXNrKHQsIHJldF9zdGFjayk7XG4xMTc3Olx0XHR9XG4xMTc4Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDkxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IENvcnJ1cHRpb24gaW4gVGFzayBDcmVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgYW5kIGltbWVkaWF0ZWx5LCBgdC0mZ3Q7cmV0X3N0YWNrID0gTlVMTDtgIGp1bXBzIG91dCBhdCBtZS4gSSBrbm93IGBkdXBfdGFza19zdHJ1Y3RgIG1ha2VzIGEgY29tcGxldGUgY29weSBvZiB0aGUgcGFyZW50JiMzOTtzIGB0YXNrX3N0cnVjdGAsIG1lYW5pbmcgdGhlIG5ldyB0YXNrJiMzOTtzIGBwLSZndDtyZXRfc3RhY2tgIHN0YXJ0cyBvdXQgcG9pbnRpbmcgdG8gdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uIGFzIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AuIFRoYXQmIzM5O3Mgbm9ybWFsLCBleHBlY3RlZCBiZWhhdmlvciBpbiBhIGZvcmsgc2NlbmFyaW8uCgpUaGUgaXNzdWUgYXJpc2VzIGlmIHNvbWV0aGluZyBnb2VzIHNpZGV3YXlzIGJlZm9yZSBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgZ2V0cyBhIGNoYW5jZSB0byBydW4uIFNwZWNpZmljYWxseSwgaWYgYW4gZXJyb3IgcG9wcyB1cCAqYmVmb3JlKiB0aGF0IGluaXRpYWxpemF0aW9uLCB0aGUgY2hpbGQgdGFzayYjMzk7cyBgcC0mZ3Q7cmV0X3N0YWNrYCBkb2VzbiYjMzk7dCBnZXQgcHJvcGVybHkgc2V0IHRvIGBOVUxMYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBub3csIHdlJiMzOTtyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSBvbiB0aGUgZXJyb3IgcGF0aCwgZWl0aGVyIGBmcmVlX3Rhc2socClgIG9yIGBwdXRfdGFza19zdHJ1Y3QocClgIChvciBwb3RlbnRpYWxseSBldmVuIGBiYWRfZm9ya19mcmVlYCkgbWlnaHQgdHJ5IHRvIGZyZWUgdGhhdCB2ZXJ5IHNhbWUgYHAtJmd0O3JldF9zdGFja2AgbWVtb3J5IHRoYXQgd2FzIHNoYXJlZCB3aXRoIHRoZSBwYXJlbnQuCgpUaGlzIHNlZW1zIGxpa2UgYSBjbGFzc2ljIGRvdWJsZS1mcmVlIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHksIGRlcGVuZGluZyBvbiB0aGUgZXhhY3QgdGltaW5nIGFuZCB3aGljaCBwcm9jZXNzIGdldHMgdG8gaXQgZmlyc3QuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBmcmVlX3Rhc2tgLCBgcHV0X3Rhc2tfc3RydWN0YCwgYW5kIGBiYWRfZm9ya19mcmVlYCBpbW1lZGlhdGVseSB0byBjb25maXJtIGlmIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGV5IGhhbmRsZSBgcmV0X3N0YWNrYCBhbmQgYW55IGFzc29jaWF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgbmVlZHMgdG8gYmUgY2hlY2tlZCBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZyZWVfdGFzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jPTIxOT1zdGF0aWMgaW50IGJlaXNjc2lfZWhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc2MpXG4tLVxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYy0yNDMtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNlc3Npb24tXHUwMDNlYmFja19sb2NrKTtcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmM6MjQ0Olx0XHQvKiBXZSBhcmUganVzdCBhYm91dCB0byBjYWxsIGlzY3NpX2ZyZWVfdGFzayBzbyB3YWl0IGZvciBpdC4gKi9cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMtMjQ1LVx0XHR1ZGVsYXkoNSk7XG4tLVxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmMuaD01MTY9aW50IGJueDJmY19zZXR1cF90YXNrX2N0eChzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhKTtcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjLmg6NTE3OnZvaWQgYm54MmZjX2ZyZWVfdGFza19jdHgoc3RydWN0IGJueDJmY19oYmEgKmhiYSk7XG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmYy5oLTUxOC1pbnQgYm54MmZjX3NldHVwX2Z3X3Jlc2Moc3RydWN0IGJueDJmY19oYmEgKmhiYSk7XG4tLVxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jPTE2OTc9c3RhdGljIHZvaWQgYm54MmZjX3VuYmluZF9hZGFwdGVyX2RldmljZXMoc3RydWN0IGJueDJmY19oYmEgKmhiYSlcbi0tXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19mY29lLmMtMTY5OS1cdGJueDJmY19mcmVlX2Z3X3Jlc2MoaGJhKTtcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYzoxNzAwOlx0Ym54MmZjX2ZyZWVfdGFza19jdHgoaGJhKTtcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYy0xNzAxLX1cbi0tXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYz0xODY3PWludCBibngyZmNfc2V0dXBfdGFza19jdHgoc3RydWN0IGJueDJmY19oYmEgKmhiYSlcbi0tXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYy0xOTU2LVxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmM6MTk1Nzp2b2lkIGJueDJmY19mcmVlX3Rhc2tfY3R4KHN0cnVjdCBibngyZmNfaGJhICpoYmEpXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYy0xOTU4LXtcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz0zMTQ9c3RhdGljIGludCBpc2NzaV9wcmVwX3Njc2lfY21kX3BkdShzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaylcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy00NDYtLyoqXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYzo0NDc6ICogaXNjc2lfZnJlZV90YXNrIC0gZnJlZSBhIHRhc2tcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTQ0OC0gKiBAdGFzazogaXNjc2kgY21kIHRhc2tcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy00NTMtICovXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYzo0NTQ6c3RhdGljIHZvaWQgaXNjc2lfZnJlZV90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKVxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNDU1LXtcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz00OTk9dm9pZCBfX2lzY3NpX3B1dF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKVxuLS1cbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTUwMS1cdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dGFzay1cdTAwM2VyZWZjb3VudCkpXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYzo1MDI6XHRcdGlzY3NpX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTUwMy19XG4tLVxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmM9NTA2PXZvaWQgaXNjc2lfcHV0X3Rhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spXG4tLVxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNTExLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2c2Vzc2lvbi1cdTAwM2ViYWNrX2xvY2spO1xuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmM6NTEyOlx0XHRpc2NzaV9mcmVlX3Rhc2sodGFzayk7XG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy01MTMtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNlc3Npb24tXHUwMDNlYmFja19sb2NrKTtcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz03MDY9aXNjc2lfYWxsb2NfbWdtdF90YXNrKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIsXG4tLVxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNzczLVx0XHRcdFx0XHQgXCYjMzQ7cGR1IGZvciBtZ210IHRhc2suXFxuXCYjMzQ7KTtcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOjc3NDpcdFx0XHRnb3RvIGZyZWVfdGFzaztcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTc3NS1cdFx0fVxuLS1cbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTc5MS1cbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOjc5MjpmcmVlX3Rhc2s6XG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy03OTMtXHRpc2NzaV9wdXRfdGFzayh0YXNrKTtcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz0yMzQ2PWludCBpc2NzaV9laF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzYylcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy0yNDAzLVx0XHRtdXRleF91bmxvY2soXHUwMDI2c2Vzc2lvbi1cdTAwM2VlaF9tdXRleCk7XG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYzoyNDA0Olx0XHQvKiBXZSBhcmUganVzdCBhYm91dCB0byBjYWxsIGlzY3NpX2ZyZWVfdGFzayBzbyB3YWl0IGZvciBpdC4gKi9cbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTI0MDUtXHRcdHVkZWxheShJU0NTSV9DTURfQ09NUExfV0FJVCk7XG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmM9NzM9c3RhdGljIHZvaWQgc2FzX2F0YV90YXNrX2RvbmUoc3RydWN0IHNhc190YXNrICp0YXNrKVxuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2F0YS5jLTE1MS1xY19hbHJlYWR5X2dvbmU6XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYzoxNTI6XHRzYXNfZnJlZV90YXNrKHRhc2spO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtMTUzLX1cbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYz0xNTU9c3RhdGljIHVuc2lnbmVkIGludCBzYXNfYXRhX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpXG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtMjIwLVx0XHRcdEFTU0lHTl9TQVNfVEFTSyhxYy1cdTAwM2VzY3NpY21kLCBOVUxMKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2F0YS5jOjIyMTpcdFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2F0YS5jLTIyMi1cdFx0cWMtXHUwMDNlbGxkZF90YXNrID0gTlVMTDtcbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYz00NDc9c3RhdGljIHZvaWQgc2FzX2F0YV9pbnRlcm5hbF9hYm9ydChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spXG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtNDg0LSBvdXQ6XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYzo0ODU6XHRzYXNfZnJlZV90YXNrKHRhc2spO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtNDg2LX1cbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jPTU2PXN0YXRpYyBpbnQgc21wX2V4ZWN1dGVfdGFza19zZyhzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMtMTMyLVx0XHRcdFx0ICB0YXNrLVx1MDAzZXRhc2tfc3RhdHVzLnN0YXQpO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYzoxMzM6XHRcdFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMtMTM0LVx0XHRcdHRhc2sgPSBOVUxMO1xuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMtMTQwLVx0QlVHX09OKHJldHJ5ID09IDMgXHUwMDI2XHUwMDI2IHRhc2sgIT0gTlVMTCk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jOjE0MTpcdHNhc19mcmVlX3Rhc2sodGFzayk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jLTE0Mi1cdHJldHVybiByZXM7XG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jPTM5PXN0cnVjdCBzYXNfdGFzayAqc2FzX2FsbG9jX3Nsb3dfdGFzayhnZnBfdCBmbGFncylcbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmMtNTgtXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmM6NTk6dm9pZCBzYXNfZnJlZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaylcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYy02MC17XG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jPTY4Mj1zdGF0aWMgaW50IF9faW5pdCBzYXNfY2xhc3NfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYy02ODktXHRpZiAoIXNhc19ldmVudF9jYWNoZSlcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYzo2OTA6XHRcdGdvdG8gZnJlZV90YXNrX2ttZW07XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmMtNjkxLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jLTY5Mi1cdHJldHVybiAwO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jOjY5MzpmcmVlX3Rhc2tfa21lbTpcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYy02OTQtXHRrbWVtX2NhY2hlX2Rlc3Ryb3koc2FzX3Rhc2tfY2FjaGUpO1xuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmg9NjM9c3RydWN0IHNhc190YXNrICpzYXNfYWxsb2Nfc2xvd190YXNrKGdmcF90IGZsYWdzKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmg6NjQ6dm9pZCBzYXNfZnJlZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzayk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbnRlcm5hbC5oLTY1LVxuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jPTM4PXN0YXRpYyB2b2lkIHNhc19lbmRfdGFzayhzdHJ1Y3Qgc2NzaV9jbW5kICpzYywgc3RydWN0IHNhc190YXNrICp0YXNrKVxuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTk2LVx0QVNTSUdOX1NBU19UQVNLKHNjLCBOVUxMKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jOjk3Olx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTk4LX1cbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYz0xMDA9c3RhdGljIHZvaWQgc2FzX3Njc2lfdGFza19kb25lKHN0cnVjdCBzYXNfdGFzayAqdGFzaylcbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xMjEtXHRcdHByX2RlYnVnKFwmIzM0O3Rhc2tfZG9uZSBjYWxsZWQgd2l0aCBub24gZXhpc3RpbmcgU0NTSSBjbW5kIVxcblwmIzM0Oyk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzoxMjI6XHRcdHNhc19mcmVlX3Rhc2sodGFzayk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xMjMtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYz0xNjE9ZW51bSBzY3NpX3FjX3N0YXR1cyBzYXNfcXVldWVjb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsXG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtMTg3LVx0aWYgKHJlcylcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jOjE4ODpcdFx0Z290byBvdXRfZnJlZV90YXNrO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtMTg5LVx0cmV0dXJuIDA7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xOTAtXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzoxOTE6b3V0X2ZyZWVfdGFzazpcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTE5Mi1cdHByX2RlYnVnKFwmIzM0O2xsZGRfZXhlY3V0ZV90YXNrIHJldHVybmVkOiAlZFxcblwmIzM0OywgcmVzKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTE5My1cdEFTU0lHTl9TQVNfVEFTSyhjbWQsIE5VTEwpO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmM6MTk0Olx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTE5NS1cdGlmIChyZXMgPT0gLVNBU19RVUVVRV9GVUxMKVxuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jPTkwND1zdGF0aWMgaW50IHNhc19leGVjdXRlX2ludGVybmFsX2Fib3J0KHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtOTY4LVx0XHQgICAgICAgdGFzay1cdTAwM2V0YXNrX3N0YXR1cy5zdGF0KTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jOjk2OTpcdFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTk3MC1cdFx0dGFzayA9IE5VTEw7XG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtOTcyLVx0QlVHX09OKHJldHJ5ID09IFRBU0tfUkVUUlkgXHUwMDI2XHUwMDI2IHRhc2sgIT0gTlVMTCk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzo5NzM6XHRzYXNfZnJlZV90YXNrKHRhc2spO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtOTc0LVx0cmV0dXJuIHJlcztcbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYz05OTM9aW50IHNhc19leGVjdXRlX3RtZihzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2aWNlLCB2b2lkICpwYXJhbWV0ZXIsXG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtMTA5OC1cdFx0fVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmM6MTA5OTpcdFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTExMDAtXHRcdHRhc2sgPSBOVUxMO1xuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTExMDUtXHRcdFx0U0FTX0FERFIoZGV2aWNlLVx1MDAzZXNhc19hZGRyKSwgVEFTS19SRVRSWSk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzoxMTA2Olx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTExMDctXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0yNzI2PXZvaWQgYnBmX29ial9mcmVlX3dvcmtxdWV1ZShjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCB2b2lkICpvYmopO1xuaW5jbHVkZS9saW51eC9icGYuaDoyNzI3OnZvaWQgYnBmX29ial9mcmVlX3Rhc2tfd29yayhjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCB2b2lkICpvYmopO1xuaW5jbHVkZS9saW51eC9icGYuaC0yNzI4LXZvaWQgYnBmX29ial9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKm9iaik7XG4tLVxuaW5jbHVkZS9saW51eC9idGYuaC01Ny0gKlxuaW5jbHVkZS9saW51eC9idGYuaDo1ODogKiBTRUMoXCYjMzQ7a3JldHByb2JlL2ZyZWVfdGFza1wmIzM0OylcbmluY2x1ZGUvbGludXgvYnRmLmg6NTk6ICogaW50IEJQRl9QUk9HKGZyZWVfdGFza19wcm9iZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pbmNsdWRlL2xpbnV4L2J0Zi5oLTYwLSAqIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD00MzM9c3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfaW52YXJpYW50X3N0YXRlKGJvb2wgZm9yY2UpIHt9XG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo0MzQ6c3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykge31cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQzNS1cbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaD0xMjMwPWV4dGVybiB2b2lkIHBlcmZfZXZlbnRfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpO1xuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50Lmg6MTIzMTpleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgtMTIzMi1leHRlcm4gdm9pZCBwZXJmX2V2ZW50X2RlbGF5ZWRfcHV0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7XG4tLVxuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50Lmg9MTk2Mz1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZClcdHsgfVxuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50Lmg6MTk2NDpzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVx0eyB9XG5pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaC0xOTY1LXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2RlbGF5ZWRfcHV0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcdHsgfVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oPTEwOD1pbnQga2VybmVsX3dhaXQocGlkX3QgcGlkLCBpbnQgKnN0YXQpO1xuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtMTA5LVxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg6MTEwOmV4dGVybiB2b2lkIGZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC0xMTEtXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg9MTI5PXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oLTE1NS1cdCAqXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaDoxNTY6XHQgKiBkZWxheWVkX2ZyZWVfdGFzaygpIGFsc28gdXNlcyAtXHUwMDNlcmN1LCBidXQgaXQgaXMgb25seSBjYWxsZWRcbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oLTE1Ny1cdCAqIHdoZW4gaXQgZmFpbHMgdG8gZm9yayBhIHByb2Nlc3MuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm9cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz01MDMzPXZvaWQgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzktXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVx1MDAzZXJlY29yZCwgQlBGX1RBU0tfV09SSykpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDQwOlx0XHRicGZfb2JqX2ZyZWVfdGFza193b3JrKG1hcC1cdTAwM2VyZWNvcmQsIHZhbCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDQxLX1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz03OTU9dm9pZCBicGZfb2JqX2ZyZWVfd29ya3F1ZXVlKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MDEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4MDI6dm9pZCBicGZfb2JqX2ZyZWVfdGFza193b3JrKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgwMy17XG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9NTc1Mz1zdGF0aWMgdm9pZCBfX2ZyZWVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTU3OTItXHQvKlxua2VybmVsL2V2ZW50cy9jb3JlLmM6NTc5MzpcdCAqIHBlcmZfZXZlbnRfZnJlZV90YXNrKCkgcmVsaWVzIG9uIHB1dF9jdHgoKSBiZWluZyAmIzM5O2xhc3QmIzM5OywgaW5cbmtlcm5lbC9ldmVudHMvY29yZS5jLTU3OTQtXHQgKiBwYXJ0aWN1bGFyIGFsbCB0YXNrIHJlZmVyZW5jZXMgbXVzdCBiZSBjbGVhbmVkIHVwLlxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jPTE0NzE2PXZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTE0NzYyLSAqL1xua2VybmVsL2V2ZW50cy9jb3JlLmM6MTQ3NjM6dm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xNDc2NC17XG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTUxMjQ9aW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHU2NCBjbG9uZV9mbGFncylcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xNTEzNS1cdGlmIChyZXQpIHtcbmtlcm5lbC9ldmVudHMvY29yZS5jOjE1MTM2Olx0XHRwZXJmX2V2ZW50X2ZyZWVfdGFzayhjaGlsZCk7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xNTEzNy1cdFx0cmV0dXJuIHJldDtcbi0tXG5rZXJuZWwvZXhlY19zdGF0ZS5jPTEzPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza19leGVjX3N0YXRlX2NhY2hlcDtcbmtlcm5lbC9leGVjX3N0YXRlLmMtMTQtXG5rZXJuZWwvZXhlY19zdGF0ZS5jOjE1OnN0YXRpYyB2b2lkIF9fZnJlZV90YXNrX2V4ZWNfc3RhdGUoc3RydWN0IHJjdV9oZWFkICpyY3UpXG5rZXJuZWwvZXhlY19zdGF0ZS5jLTE2LXtcbi0tXG5rZXJuZWwvZXhlY19zdGF0ZS5jPTIzPXZvaWQgcHV0X3Rhc2tfZXhlY19zdGF0ZShzdHJ1Y3QgdGFza19leGVjX3N0YXRlICpleGVjX3N0YXRlKVxuLS1cbmtlcm5lbC9leGVjX3N0YXRlLmMtMjUtXHRpZiAoZXhlY19zdGF0ZSBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmV4ZWNfc3RhdGUtXHUwMDNlY291bnQpKVxua2VybmVsL2V4ZWNfc3RhdGUuYzoyNjpcdFx0Y2FsbF9yY3UoXHUwMDI2ZXhlY19zdGF0ZS1cdTAwM2VyY3UsIF9fZnJlZV90YXNrX2V4ZWNfc3RhdGUpO1xua2VybmVsL2V4ZWNfc3RhdGUuYy0yNy19XG4tLVxua2VybmVsL2V4aXQuYz05Mjg9dm9pZCBfX25vcmV0dXJuIGRvX2V4aXQobG9uZyBjb2RlKVxuLS1cbmtlcm5lbC9leGl0LmMtMTA0OS1cbmtlcm5lbC9leGl0LmM6MTA1MDpcdGxvY2tkZXBfZnJlZV90YXNrKHRzayk7XG5rZXJuZWwvZXhpdC5jLTEwNTEtXHRkb190YXNrX2RlYWQoKTtcbi0tXG5rZXJuZWwvZm9yay5jPTE4Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqYWxsb2NfdGFza19zdHJ1Y3Rfbm9kZShpbnQgbm9kZSlcbi0tXG5rZXJuZWwvZm9yay5jLTE5MC1cbmtlcm5lbC9mb3JrLmM6MTkxOnN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxua2VybmVsL2ZvcmsuYy0xOTIte1xuLS1cbmtlcm5lbC9mb3JrLmM9NTI2PXZvaWQgcHV0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL2ZvcmsuYy01MzItXG5rZXJuZWwvZm9yay5jOjUzMzp2b2lkIGZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmtlcm5lbC9mb3JrLmMtNTM0LXtcbi0tXG5rZXJuZWwvZm9yay5jLTU2MS1cdHB1dF90YXNrX2V4ZWNfc3RhdGUocmN1X2FjY2Vzc19wb2ludGVyKHRzay1cdTAwM2VleGVjX3N0YXRlKSk7XG5rZXJuZWwvZm9yay5jOjU2MjpcdGZyZWVfdGFza19zdHJ1Y3QodHNrKTtcbmtlcm5lbC9mb3JrLmMtNTYzLX1cbmtlcm5lbC9mb3JrLmM6NTY0OkVYUE9SVF9TWU1CT0woZnJlZV90YXNrKTtcbmtlcm5lbC9mb3JrLmMtNTY1LVxuLS1cbmtlcm5lbC9mb3JrLmM9NzgyPXZvaWQgX19wdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL2ZvcmsuYy03OTYtXHRzY2hlZF9jb3JlX2ZyZWUodHNrKTtcbmtlcm5lbC9mb3JrLmM6Nzk3Olx0ZnJlZV90YXNrKHRzayk7XG5rZXJuZWwvZm9yay5jLTc5OC19XG4tLVxua2VybmVsL2ZvcmsuYz05MTU9c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqb3JpZywgaW50IG5vZGUpXG4tLVxua2VybmVsL2ZvcmsuYy05NTEtXHQgKiB0aGVuLiBVbnRpbCB0aGVuLCBmaWx0ZXIgbXVzdCBiZSBOVUxMIHRvIGF2b2lkIG1lc3NpbmcgdXBcbmtlcm5lbC9mb3JrLmM6OTUyOlx0ICogdGhlIHVzYWdlIGNvdW50cyBvbiB0aGUgZXJyb3IgcGF0aCBjYWxsaW5nIGZyZWVfdGFzay5cbmtlcm5lbC9mb3JrLmMtOTUzLVx0ICovXG4tLVxua2VybmVsL2ZvcmsuYy0xMDI5LWZyZWVfdHNrOlxua2VybmVsL2ZvcmsuYzoxMDMwOlx0ZnJlZV90YXNrX3N0cnVjdCh0c2spO1xua2VybmVsL2ZvcmsuYy0xMDMxLVx0cmV0dXJuIE5VTEw7XG4tLVxua2VybmVsL2ZvcmsuYz0xOTE0PWludCBwaWRmZF9wcmVwYXJlKHN0cnVjdCBwaWQgKnBpZCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgZmlsZSAqKnJldF9maWxlKVxuLS1cbmtlcm5lbC9mb3JrLmMtMTk1Ny1cbmtlcm5lbC9mb3JrLmM6MTk1ODpzdGF0aWMgdm9pZCBfX2RlbGF5ZWRfZnJlZV90YXNrKHN0cnVjdCByY3VfaGVhZCAqcmhwKVxua2VybmVsL2ZvcmsuYy0xOTU5LXtcbi0tXG5rZXJuZWwvZm9yay5jLTE5NjEtXG5rZXJuZWwvZm9yay5jOjE5NjI6XHRmcmVlX3Rhc2sodHNrKTtcbmtlcm5lbC9mb3JrLmMtMTk2My19XG5rZXJuZWwvZm9yay5jLTE5NjQtXG5rZXJuZWwvZm9yay5jOjE5NjU6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGRlbGF5ZWRfZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxua2VybmVsL2ZvcmsuYy0xOTY2LXtcbmtlcm5lbC9mb3JrLmMtMTk2Ny1cdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1DRykpXG5rZXJuZWwvZm9yay5jOjE5Njg6XHRcdGNhbGxfcmN1KFx1MDAyNnRzay1cdTAwM2VyY3UsIF9fZGVsYXllZF9mcmVlX3Rhc2spO1xua2VybmVsL2ZvcmsuYy0xOTY5LVx0ZWxzZVxua2VybmVsL2ZvcmsuYzoxOTcwOlx0XHRmcmVlX3Rhc2sodHNrKTtcbmtlcm5lbC9mb3JrLmMtMTk3MS19XG4tLVxua2VybmVsL2ZvcmsuYz0yMDE4PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4tLVxua2VybmVsL2ZvcmsuYy0yNjMwLWJhZF9mb3JrX2NsZWFudXBfcGVyZjpcbmtlcm5lbC9mb3JrLmM6MjYzMTpcdHBlcmZfZXZlbnRfZnJlZV90YXNrKHApO1xua2VybmVsL2ZvcmsuYy0yNjMyLWJhZF9mb3JrX3NjaGVkX2NhbmNlbF9mb3JrOlxuLS1cbmtlcm5lbC9mb3JrLmMtMjYzNC1iYWRfZm9ya19jbGVhbnVwX3BvbGljeTpcbmtlcm5lbC9mb3JrLmM6MjYzNTpcdGxvY2tkZXBfZnJlZV90YXNrKHApO1xua2VybmVsL2ZvcmsuYy0yNjM2LSNpZmRlZiBDT05GSUdfTlVNQVxuLS1cbmtlcm5lbC9mb3JrLmMtMjY0OS1cdHB1dF90YXNrX3N0YWNrKHApO1xua2VybmVsL2ZvcmsuYzoyNjUwOlx0ZGVsYXllZF9mcmVlX3Rhc2socCk7XG5rZXJuZWwvZm9yay5jLTI2NTEtZm9ya19vdXQ6XG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jPTExNDA9c3RydWN0IHJwY190YXNrICpycGNfbmV3X3Rhc2soY29uc3Qgc3RydWN0IHJwY190YXNrX3NldHVwICpzZXR1cF9kYXRhKVxuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYy0xMTYwLS8qXG5uZXQvc3VucnBjL3NjaGVkLmM6MTE2MTogKiBycGNfZnJlZV90YXNrIC0gcmVsZWFzZSBycGMgdGFzayBhbmQgcGVyZm9ybSBjbGVhbnVwc1xubmV0L3N1bnJwYy9zY2hlZC5jLTExNjItICpcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtMTE3OC0gKi9cbm5ldC9zdW5ycGMvc2NoZWQuYzoxMTc5OnN0YXRpYyB2b2lkIHJwY19mcmVlX3Rhc2soc3RydWN0IHJwY190YXNrICp0YXNrKVxubmV0L3N1bnJwYy9zY2hlZC5jLTExODAte1xuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYz0xMTkwPXN0YXRpYyB2b2lkIHJwY19hc3luY19yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtMTE5My1cbm5ldC9zdW5ycGMvc2NoZWQuYzoxMTk0Olx0cnBjX2ZyZWVfdGFzayhjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dvcmspKTtcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMTk1LVx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKHBmbGFncyk7XG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jPTEyMDk9c3RhdGljIHZvaWQgcnBjX2ZpbmFsX3B1dF90YXNrKHN0cnVjdCBycGNfdGFzayAqdGFzayxcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtMTIxNS1cdH0gZWxzZVxubmV0L3N1bnJwYy9zY2hlZC5jOjEyMTY6XHRcdHJwY19mcmVlX3Rhc2sodGFzayk7XG5uZXQvc3VucnBjL3NjaGVkLmMtMTIxNy19XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmg9MzY9c3RydWN0IGFhX2xhYmVsICphYV9nZXRfdGFza19sYWJlbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvdGFzay5oLTM4LS8qKlxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmg6Mzk6ICogYWFfZnJlZV90YXNrX2N0eCAtIGZyZWUgYSB0YXNrX2N0eFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmgtNDAtICogQGN0eDogdGFza19jdHggdG8gZnJlZSAoTUFZQkUgTlVMTClcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvdGFzay5oLTQxLSAqL1xuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmg6NDI6c3RhdGljIGlubGluZSB2b2lkIGFhX2ZyZWVfdGFza19jdHgoc3RydWN0IGFhX3Rhc2tfY3R4ICpjdHgpXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3Rhc2suaC00My17XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9MTEwPXN0YXRpYyB2b2lkIGFwcGFybW9yX3Rhc2tfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTEyLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTEzOlx0YWFfZnJlZV90YXNrX2N0eCh0YXNrX2N0eCh0YXNrKSk7XG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xMTQtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuYz01ND1pbnQgQlBGX1BST0codGFza19rZnVuY19hY3F1aXJlX2ZwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mbGFncylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMtNjctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmM6Njg6U0VDKFwmIzM0O2tyZXRwcm9iZS9mcmVlX3Rhc2tcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMtNjktX19mYWlsdXJlIF9fbXNnKFwmIzM0O2NhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl90YXNrX2FjcXVpcmUgaXMgbm90IGFsbG93ZWRcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmM9NzA9aW50IEJQRl9QUk9HKHRhc2tfa2Z1bmNfYWNxdWlyZV91bnNhZmVfa3JldHByb2JlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mbGFncylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMtODItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmM6ODM6U0VDKFwmIzM0O2tyZXRwcm9iZS9mcmVlX3Rhc2tcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMtODQtX19mYWlsdXJlIF9fbXNnKFwmIzM0O2NhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl90YXNrX2FjcXVpcmUgaXMgbm90IGFsbG93ZWRcJiMzNDspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDk5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYGZyZWVfdGFza2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBga2VybmVsL2ZvcmsuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgb2YgYGZyZWVfdGFza2AuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHRlcm1pbmF0ZWQgcHJvY2VzcyBhcmUgcmVsZWFzZWQuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCBtZW1vcnkgZGVhbGxvY2F0aW9uLCBwb3RlbnRpYWxseSBzaWduYWwgaGFuZGxpbmcgY2xlYW51cCwgYW5kIG1heWJlIHNvbWUgcmVsYXRlZCB0YXNrIHN0cnVjdHVyZSB0aWR5aW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGRvIGl0LiBJJiMzOTttIGFudGljaXBhdGluZyBhIHdlbGwtd3JpdHRlbiBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MzM6XHR2b2lkIGZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiA1MzQ6XHR7XG4gNTM1Olx0I2lmZGVmIENPTkZJR19TRUNDT01QXG4gNTM2Olx0XHRXQVJOX09OX09OQ0UodHNrLVx1MDAzZXNlY2NvbXAuZmlsdGVyKTtcbiA1Mzc6XHQjZW5kaWZcbiA1Mzg6XHRcdHJlbGVhc2VfdXNlcl9jcHVzX3B0cih0c2spO1xuIDUzOTpcdFx0c2NzX3JlbGVhc2UodHNrKTtcbiA1NDA6XHRcdHNtcF90YXNrX2lwaV9tYXNrX2ZyZWUodHNrKTtcbiA1NDE6XHRcbiA1NDI6XHQjaWZuZGVmIENPTkZJR19USFJFQURfSU5GT19JTl9UQVNLXG4gNTQzOlx0XHQvKlxuIDU0NDpcdFx0ICogVGhlIHRhc2sgaXMgZmluYWxseSBkb25lIHdpdGggYm90aCB0aGUgc3RhY2sgYW5kIHRocmVhZF9pbmZvLFxuIDU0NTpcdFx0ICogc28gZnJlZSBib3RoLlxuIDU0NjpcdFx0ICovXG4gNTQ3Olx0XHRyZWxlYXNlX3Rhc2tfc3RhY2sodHNrKTtcbiA1NDg6XHQjZWxzZVxuIDU0OTpcdFx0LypcbiA1NTA6XHRcdCAqIElmIHRoZSB0YXNrIGhhZCBhIHNlcGFyYXRlIHN0YWNrIGFsbG9jYXRpb24sIGl0IHNob3VsZCBiZSBnb25lXG4gNTUxOlx0XHQgKiBieSBub3cuXG4gNTUyOlx0XHQgKi9cbiA1NTM6XHRcdFdBUk5fT05fT05DRShyZWZjb3VudF9yZWFkKFx1MDAyNnRzay1cdTAwM2VzdGFja19yZWZjb3VudCkgIT0gMCk7XG4gNTU0Olx0I2VuZGlmXG4gNTU1Olx0XHRydF9tdXRleF9kZWJ1Z190YXNrX2ZyZWUodHNrKTtcbiA1NTY6XHRcdGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2sodHNrKTtcbiA1NTc6XHRcdGFyY2hfcmVsZWFzZV90YXNrX3N0cnVjdCh0c2spO1xuIDU1ODpcdFx0aWYgKHRzay1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRClcbiA1NTk6XHRcdFx0ZnJlZV9rdGhyZWFkX3N0cnVjdCh0c2spO1xuIDU2MDpcdFx0YnBmX3Rhc2tfc3RvcmFnZV9mcmVlKHRzayk7XG4gNTYxOlx0XHRwdXRfdGFza19leGVjX3N0YXRlKHJjdV9hY2Nlc3NfcG9pbnRlcih0c2stXHUwMDNlZXhlY19zdGF0ZSkpO1xuIDU2MjpcdFx0ZnJlZV90YXNrX3N0cnVjdCh0c2spO1xuIDU2MzpcdH1cbiA1NjQ6XHRFWFBPUlRfU1lNQk9MKGZyZWVfdGFzayk7XG4gNTY1Olx0XG4gNTY2Olx0dm9pZCBkdXBfbW1fZXhlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIDU2NzpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipUcmFjaW5nIFRhc2sgRXhpdDogQSBRdWljayBDaGVjay1pbioqCgpPa2F5LCBzbyBgZnJlZV90YXNrYCBqdXN0IGhpdCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0c2spYC4gIFRoYXQmIzM5O3MgbXkgY3VlIHRvIHF1aWNrbHkgYW5hbHl6ZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgaXMgZG9pbmcgd2hhdCBpdCBzaG91bGQgYmUgZG9pbmcgYXQgdGhpcyBwb2ludCBpbiB0aGUgcHJvY2Vzcy4gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSYjMzk7cmUgcHJvcGVybHkgZXhpdGluZyB0aGUgdHJhY2luZyBncmFwaCBjb250ZXh0IGZvciB0aGUgdGFzayBgdHNrYCBhcyB0aGUgdGFzayBpcyBiZWluZyBmcmVlZC4gTm8gc3VycHJpc2VzLCBubyBtaXNzZWQgY2xlYW4tdXAg4oCTIGp1c3QgYSByb3V0aW5lIGNoZWNrIHRvIGVuc3VyZSB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCBvbiB0YXNrIGV4aXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdHJhY2VfZ3JhcGhfZXhpdF90YXNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM0ND1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNDU6ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQ2LWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpO1xuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM2ND1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY1OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjYtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpIHsgfVxuLS1cbmtlcm5lbC9mb3JrLmM9NTMzPXZvaWQgZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmtlcm5lbC9mb3JrLmMtNTU1LVx0cnRfbXV0ZXhfZGVidWdfdGFza19mcmVlKHRzayk7XG5rZXJuZWwvZm9yay5jOjU1NjpcdGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2sodHNrKTtcbmtlcm5lbC9mb3JrLmMtNTU3LVx0YXJjaF9yZWxlYXNlX3Rhc2tfc3RydWN0KHRzayk7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNjA9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE3OS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTgwOnZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODU3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGhhbmRsZXMgdGhlIGV4aXRpbmcgb2YgdGFza3Mgd2l0aGluIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBkeW5hbWljIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBob3cgaXQgYXZvaWRzIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgcGFydGljdWxhcmx5IGluIGhpZ2gtZnJlcXVlbmN5IHRyYWNpbmcgc2NlbmFyaW9zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRhc2sgdGVhcmRvd24gYW5kIHRyYWNpbmcgZGF0YSBmbHVzaCBvcGVyYXRpb25zLiBJJiMzOTttIGFsc28gY3VyaW91cyBpZiBhbnkgcmVjZW50IGNoYW5nZXMgaW4gdGhlIHNjaGVkdWxlciBvciB0YXNrIHN0YXRlIG1hbmFnZW1lbnQgaGF2ZSBpbXBhY3RlZCB0aGlzIGZ1bmN0aW9uIGFuZCBpZiBhbnkgb3B0aW1pemF0aW9ucyBjYW4gYmUgZGVyaXZlZC4gSSYjMzk7bGwgYmUgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHBheWluZyBhdHRlbnRpb24gdG8gZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzaWRlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2ZncmFwaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTgwOlx0dm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbjExODE6XHR7XG4xMTgyOlx0XHR1bnNpZ25lZCBsb25nICpyZXRfc3RhY2sgPSB0LVx1MDAzZXJldF9zdGFjaztcbjExODM6XHRcbjExODQ6XHRcdHQtXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcbjExODU6XHRcdC8qIE5VTEwgbXVzdCBiZWNvbWUgdmlzaWJsZSB0byBJUlFzIGJlZm9yZSB3ZSBmcmVlIGl0OiAqL1xuMTE4NjpcdFx0YmFycmllcigpO1xuMTE4NzpcdFxuMTE4ODpcdFx0aWYgKHJldF9zdGFjaykge1xuMTE4OTpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFmZ3JhcGhfc3RhY2tfY2FjaGVwKSlcbjExOTA6XHRcdFx0XHRyZXR1cm47XG4xMTkxOlx0XHRcdGttZW1fY2FjaGVfZnJlZShmZ3JhcGhfc3RhY2tfY2FjaGVwLCByZXRfc3RhY2spO1xuMTE5MjpcdFx0fVxuMTE5MzpcdH1cbjExOTQ6XHRcbjExOTU6XHQjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFXG4xMTk2Olx0c3RhdGljIGludCBmZ3JhcGhfcGlkX2Z1bmMoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxuMTE5NzpcdFx0XHRcdCAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxuMTE5ODpcdFx0XHRcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4xMTk5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQxNQoJCQkJCQkJb3V0cHV0OiAzMDUKCQkJCQkJCXRob3VnaHRzOiA3ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ2xhc3NpYyBLZXJuZWwgQnVnKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGRlYWwuIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCBmcmVlcyB0aGUgYHQtJmd0O3JldF9zdGFja2AgdXNpbmcgYGttZW1fY2FjaGVfZnJlZWAuIE5vdywgaWYgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGhhc24mIzM5O3QgYmVlbiBjYWxsZWQgeWV0LCB0aGUgYHQtJmd0O3JldF9zdGFja2AgaXMgc3RpbGwgcG9pbnRpbmcgdG8gdGhlICpwYXJlbnQmIzM5O3MqIGByZXRfc3RhY2tgLiBTbywgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGlzIGVmZmVjdGl2ZWx5IGZyZWVpbmcgdGhlIHBhcmVudCYjMzk7cyBzdGFjayEgQm9vbSwgY2xhc3NpYyBkb3VibGUgZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBidWcuCgpUaGUgcGFyZW50IHRhc2ssIG9ibGl2aW91c2x5LCBpcyBnb2luZyB0byBrZWVwIHVzaW5nIGl0cyBgcmV0X3N0YWNrYCwgd2hpY2ggaXMgbm93IGZyZWVkLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBLQVNBTiBleGNlbHMgYXQgZGV0ZWN0aW5nIOKAkyBhIHVzZS1hZnRlci1mcmVlIG9yIGEgZG91YmxlLWZyZWUgc2l0dWF0aW9uLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgdGhlcmUgYWxzbyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBlbGVtZW50IGhlcmU/IE5vLCBub3QgcmVhbGx5LiBUaGlzIGludm9sdmVzIGEgKmNvcGllZCogcG9pbnRlciB0aGF0IHNob3VsZCYjMzk7dmUgYmVlbiBzZXQgdG8gYE5VTExgIGJ1dCB3YXNuJiMzOTt0LCB3aGljaCBsZWFkcyB0byB0aGUgZG91YmxlIGZyZWUgb3IgVUFGLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJbiB0aGlzIGNhc2UsIHRoZSBtZW1vcnkgKmlzKiBpbml0aWFsaXplZCwgaXQmIzM5O3MgdGhlIHBhcmVudCYjMzk7cyBwb2ludGVyLiBUaGUgcHJvYmxlbSBpcyBmdW5kYW1lbnRhbGx5IGluY29ycmVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgaGVyZS4KClRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gYGR1cF90YXNrX3N0cnVjdGAgY29waWVzIHRoZSAqZW50aXJlKiBgdGFza19zdHJ1Y3RgIGZyb20gdGhlIHBhcmVudC4gU28sIGFsbCB0aGUgZmllbGRzIGFyZSBpbml0aWFsaXplZCB3aXRoIHRoZSBwYXJlbnQmIzM5O3MgdmFsdWVzLiBUaGVuLCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgY29tZXMgYWxvbmcgYW5kIHNldHMgYHQtJmd0O3JldF9zdGFjayA9IE5VTExgIGFuZCBzbyBvbi4gQnV0IGlmIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCAqaXNuJiMzOTt0KiBjYWxsZWQsIGB0LSZndDtyZXRfc3RhY2tgIHN0YXlzIGFzIHRoZSBwYXJlbnQmIzM5O3MgcG9pbnRlci4gV2hlbiBgZnJlZV90YXNrYCBnZXRzIGNhbGxlZCBvbiB0aGUgY2hpbGQgKGR1ZSB0byBhbiBlcnJvciBpbiBgY29weV9wcm9jZXNzYCksIGl0IGVuZHMgdXAgZnJlZWluZyBgdC0mZ3Q7cmV0X3N0YWNrYC4gVGhpcyBmcmVlcyB0aGUgKnBhcmVudCYjMzk7cyogYHJldF9zdGFja2AuIFRoZSBwYXJlbnQgaXMgc3RpbGwgcnVubmluZyBhbmQgd2lsbCBhY2Nlc3MgaXRzIG5vdy1mcmVlZCBgcmV0X3N0YWNrYC4gVXNlLWFmdGVyLWZyZWUsIEtBU0FOIGNhdGNoZXMgaXQgaW1tZWRpYXRlbHkuIEFsc28sIGlmIHRoZSBwYXJlbnQgZXhpdHMsIGl0IHdpbGwgdHJ5IHRvIGZyZWUgaXRzIGByZXRfc3RhY2tgIGFnYWluLCBjYXVzaW5nIGEgZG91YmxlIGZyZWUuIEtBU0FOIHdpbGwgZGV0ZWN0IHRoaXMgYXMgd2VsbC4KClRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayBoYXBwZW5pbmcgaGVyZS4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4KCkxldCBtZSBsYXkgb3V0IHRoZSByZWFzb25pbmcgaW4gYSBzdHJ1Y3R1cmVkIHdheTogVGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gcHJldmVudCBhIGJ1ZyB3aGVyZSBhbiBlcnJvciBwYXRoIGZyZWVzIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AuIFNwZWNpZmljYWxseSwgYGR1cF90YXNrX3N0cnVjdCgpYCBjb3BpZXMgdGhlIHBhcmVudCYjMzk7cyBgdGFza19zdHJ1Y3RgLCBpbmNsdWRpbmcgdGhlIGByZXRfc3RhY2tgIHBvaW50ZXIuIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKClgIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyB0aGlzIHBvaW50ZXIgKGB0LSZndDtyZXRfc3RhY2sgPSBOVUxMYCkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlmIHRyYWNpbmcgaXMgYWN0aXZlLiBJZiBhbiBlcnJvciBvY2N1cnMgaW4gYGNvcHlfcHJvY2VzcygpYCBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCAoZS5nLiwgYGJhZF9mb3JrX2ZyZWVgKSB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV90YXNrKClgLCB3aGljaCBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAgd2lsbCBmcmVlIGB0LSZndDtyZXRfc3RhY2tgLiBTaW5jZSBpdCB3YXMgbmV2ZXIgY2xlYXJlZCwgaXQgZnJlZXMgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYC4gVGhpcyByZXN1bHRzIGluIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGUgcGFyZW50IGNvbnRpbnVlcyB0byB1c2UgaXRzIGByZXRfc3RhY2tgLCBvciBhIGRvdWJsZSBmcmVlIHdoZW4gdGhlIHBhcmVudCBleGl0cy4gQm90aCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlIGZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIHByZXZlbnQgYSBidWcgd2hlcmUgYW4gZXJyb3IgcGF0aCBpbmNvcnJlY3RseSBmcmVlcyB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLiBTcGVjaWZpY2FsbHksIGBkdXBfdGFza19zdHJ1Y3QoKWAgY29waWVzIHRoZSBwYXJlbnQmIzM5O3MgYHRhc2tfc3RydWN0YCwgaW5jbHVkaW5nIHRoZSBgcmV0X3N0YWNrYCBwb2ludGVyLiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhpcyBwb2ludGVyIChgdC1cdTAwM2VyZXRfc3RhY2sgPSBOVUxMYCkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlmIHRyYWNpbmcgaXMgYWN0aXZlLiBJZiBhbiBlcnJvciBvY2N1cnMgaW4gYGNvcHlfcHJvY2VzcygpYCBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV90YXNrKClgLCB3aGljaCBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAgd2lsbCB0aGVuIGZyZWUgYHQtXHUwMDNlcmV0X3N0YWNrYC4gU2luY2UgaXQgd2FzIG5ldmVyIGNsZWFyZWQsIGl0IGZyZWVzIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AuIFRoaXMgcmVzdWx0cyBpbiBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCBjb250aW51ZXMgdG8gdXNlIGl0cyBgcmV0X3N0YWNrYCwgb3IgYSBkb3VibGUgZnJlZSB3aGVuIHRoZSBwYXJlbnQgZXhpdHMuXG5cbkJvdGggdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZSBmcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaW4gdGhpcyBidWcsIGFzIHRoZSBwb2ludGVyIGl0c2VsZiBpcyBpbml0aWFsaXplZCAoY29waWVkIGZyb20gdGhlIHBhcmVudCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gcHJldmVudCBhIGJ1ZyB3aGVyZSBhbiBlcnJvciBwYXRoIGluY29ycmVjdGx5IGZyZWVzIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AuIFNwZWNpZmljYWxseSwgYGR1cF90YXNrX3N0cnVjdCgpYCBjb3BpZXMgdGhlIHBhcmVudCYjMzk7cyBgdGFza19zdHJ1Y3RgLCBpbmNsdWRpbmcgdGhlIGByZXRfc3RhY2tgIHBvaW50ZXIuIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKClgIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyB0aGlzIHBvaW50ZXIgKGB0LVx1MDAzZXJldF9zdGFjayA9IE5VTExgKSBhbmQgYWxsb2NhdGluZyBhIG5ldyBvbmUgaWYgdHJhY2luZyBpcyBhY3RpdmUuIElmIGFuIGVycm9yIG9jY3VycyBpbiBgY29weV9wcm9jZXNzKClgIGJlZm9yZSBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCBpcyBjYWxsZWQsIHRoZSBlcnJvciBwYXRoIHdpbGwgZXZlbnR1YWxseSBjYWxsIGBmcmVlX3Rhc2soKWAsIHdoaWNoIGNhbGxzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKClgLiBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYCB3aWxsIHRoZW4gZnJlZSBgdC1cdTAwM2VyZXRfc3RhY2tgLiBTaW5jZSBpdCB3YXMgbmV2ZXIgY2xlYXJlZCwgaXQgZnJlZXMgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYC4gVGhpcyByZXN1bHRzIGluIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGUgcGFyZW50IGNvbnRpbnVlcyB0byB1c2UgaXRzIGByZXRfc3RhY2tgLCBvciBhIGRvdWJsZSBmcmVlIHdoZW4gdGhlIHBhcmVudCBleGl0cy5cblxuQm90aCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlIGZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayBpbnZvbHZlZCBpbiB0aGlzIGJ1ZywgYXMgdGhlIHBvaW50ZXIgaXRzZWxmIGlzIGluaXRpYWxpemVkIChjb3BpZWQgZnJvbSB0aGUgcGFyZW50KS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0MDo0Ny44MDE1ODMyOTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTAwNzQyNzEzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIixcbiAgICBcIkZVTkNUSU9OX0dSQVBIX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtlcm5lbF9jbG9uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socClgIGVhcmxpZXIgaW4gYGNvcHlfcHJvY2VzcygpYCB0byBwcmV2ZW50IGEgYnVnIHdoZXJlIGFuIGVycm9yIHBhdGggaW5jb3JyZWN0bHkgZnJlZXMgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLiBTcGVjaWZpY2FsbHksIGBkdXBfdGFza19zdHJ1Y3QoKWAgY29waWVzIHRoZSBwYXJlbnQncyBgdGFza19zdHJ1Y3RgLCBpbmNsdWRpbmcgdGhlIGByZXRfc3RhY2tgIHBvaW50ZXIuIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKClgIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyB0aGlzIHBvaW50ZXIgKGB0LVxcdTAwM2VyZXRfc3RhY2sgPSBOVUxMYCkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlmIHRyYWNpbmcgaXMgYWN0aXZlLiBJZiBhbiBlcnJvciBvY2N1cnMgaW4gYGNvcHlfcHJvY2VzcygpYCBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV90YXNrKClgLCB3aGljaCBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAgd2lsbCB0aGVuIGZyZWUgYHQtXFx1MDAzZXJldF9zdGFja2AuIFNpbmNlIGl0IHdhcyBuZXZlciBjbGVhcmVkLCBpdCBmcmVlcyB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AuIFRoaXMgcmVzdWx0cyBpbiBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCBjb250aW51ZXMgdG8gdXNlIGl0cyBgcmV0X3N0YWNrYCwgb3IgYSBkb3VibGUgZnJlZSB3aGVuIHRoZSBwYXJlbnQgZXhpdHMuXFxuXFxuQm90aCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlIGZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayBpbnZvbHZlZCBpbiB0aGlzIGJ1ZywgYXMgdGhlIHBvaW50ZXIgaXRzZWxmIGlzIGluaXRpYWxpemVkIChjb3BpZWQgZnJvbSB0aGUgcGFyZW50KS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aCBvZiBjb3B5X3Byb2Nlc3MoKSB3aGVuIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgaXMgZW5hYmxlZC4gSXQgbW92ZXMgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpIGVhcmxpZXIgc28gdGhhdCBpZiBjb3B5X3Byb2Nlc3MoKSBmYWlscywgdGhlIHBhcmVudCdzIHJldF9zdGFjayBpcyBub3QgaW5jb3JyZWN0bHkgZnJlZWQgYnkgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAocHJvY2VzcyBjcmVhdGlvbikgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQwOjQ3LjgwMTU4OTMxM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyNTUxMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzYxOTQxZjkzZGIzZTIzNzQwODE5YjAxODViZjA0N2M5OTkyMGViOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyMiAyMDo0MDo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xcbmluZGV4IDFlNjg0MDRiZDc3M2UuLjBkMWFkOTJlMmQzMzcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2ZvcmsuY1xcbisrKyBiL2tlcm5lbC9mb3JrLmNcXG5AQCAtMjEzOSw2ICsyMTM5LDExIEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuIFxcdHAgPSBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7XFxuIFxcdGlmICghcClcXG4gXFx0XFx0Z290byBmb3JrX291dDtcXG4rXFx0LypcXG4rXFx0ICogTXVzdCBydW4gYmVmb3JlIHRoZSBmaXJzdCBmYWxsaWJsZSBvcCwgc28gZXJyb3IgcGF0aHMgbmV2ZXJcXG4rXFx0ICogZnJlZSB0aGUgcGFyZW50J3MgcmV0X3N0YWNrLlxcbitcXHQgKi9cXG4rXFx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcXG4gXFx0cmV0dmFsID0gY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTtcXG4gXFx0aWYgKHJldHZhbClcXG4gXFx0XFx0Z290byBiYWRfZm9ya19mcmVlO1xcbkBAIC0yMTY1LDggKzIxNzAsNiBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbiBcXHQgKi9cXG4gXFx0cC1cXHUwMDNlY2xlYXJfY2hpbGRfdGlkID0gKGNsb25lX2ZsYWdzIFxcdTAwMjYgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQpID8gYXJncy1cXHUwMDNlY2hpbGRfdGlkIDogTlVMTDtcXG4gXFxuLVxcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XFxuLVxcbiBcXHRydF9tdXRleF9pbml0X3Rhc2socCk7XFxuIFxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2cC1cXHUwMDNlYmxvY2tlZF9sb2NrKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQwOjQ4LjIzNDk4OTgwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2NTc5OTE1MTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiLFxuICAgIFwiRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2VybmVsX2Nsb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgYnVnIGluIHRoZSBlcnJvciBwYXRoIG9mIGNvcHlfcHJvY2VzcygpIHdoZW4gdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBpcyBlbmFibGVkLiBJdCBtb3ZlcyBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgZWFybGllciBzbyB0aGF0IGlmIGNvcHlfcHJvY2VzcygpIGZhaWxzLCB0aGUgcGFyZW50J3MgcmV0X3N0YWNrIGlzIG5vdCBpbmNvcnJlY3RseSBmcmVlZCBieSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChwcm9jZXNzIGNyZWF0aW9uKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzYxOTQxZjkzZGIzZTIzNzQwODE5YjAxODViZjA0N2M5OTkyMGViOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDIwOjQwOjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcbmluZGV4IDFlNjg0MDRiZDc3M2UuLjBkMWFkOTJlMmQzMzcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZm9yay5jXG4rKysgYi9rZXJuZWwvZm9yay5jXG5AQCAtMjEzOSw2ICsyMTM5LDExIEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4gXHRwID0gZHVwX3Rhc2tfc3RydWN0KGN1cnJlbnQsIG5vZGUpO1xuIFx0aWYgKCFwKVxuIFx0XHRnb3RvIGZvcmtfb3V0O1xuK1x0LypcbitcdCAqIE11c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgZmFsbGlibGUgb3AsIHNvIGVycm9yIHBhdGhzIG5ldmVyXG4rXHQgKiBmcmVlIHRoZSBwYXJlbnQncyByZXRfc3RhY2suXG4rXHQgKi9cbitcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XG4gXHRyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO1xuIFx0aWYgKHJldHZhbClcbiBcdFx0Z290byBiYWRfZm9ya19mcmVlO1xuQEAgLTIxNjUsOCArMjE3MCw2IEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4gXHQgKi9cbiBcdHAtXHUwMDNlY2xlYXJfY2hpbGRfdGlkID0gKGNsb25lX2ZsYWdzIFx1MDAyNiBDTE9ORV9DSElMRF9DTEVBUlRJRCkgPyBhcmdzLVx1MDAzZWNoaWxkX3RpZCA6IE5VTEw7XG4gXG4tXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xuLVxuIFx0cnRfbXV0ZXhfaW5pdF90YXNrKHApO1xuIFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnAtXHUwMDNlYmxvY2tlZF9sb2NrKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQwOjQ4LjIzNDk5MTQzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NjQ3ODg1NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBrZXJuZWwvZm9yay5jYC4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIGl0IGludm9sdmVzIHJlcG9zaXRpb25pbmcgdGhlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO2AgY2FsbCB3aXRoaW4gdGhlIGBjb3B5X3Byb2Nlc3NgIGZ1bmN0aW9uLiBDdXJyZW50bHksIGl0J3MgYmVpbmcgbW92ZWQgdXAgdGhlIGNhbGwgc3RhY2suIFNwZWNpZmljYWxseSwgaXQncyBnb2luZyB0byBiZSBleGVjdXRlZCByaWdodCBhZnRlciBgZHVwX3Rhc2tfc3RydWN0KGN1cnJlbnQsIG5vZGUpO2AgYW5kIGJlZm9yZSBgY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTtgLlxuXG5UaGUgcHJvdmlkZWQgY29tbWVudCBpcyBjbGVhciDigJMgdGhlIGdvYWwgaXMgdG8gZXhlY3V0ZSB0aGlzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBvcGVyYXRpb24gKmJlZm9yZSogYW55IHBvdGVudGlhbGx5IGVycm9yLXByb25lIHN0ZXBzIGFyZSB0YWtlbi4gVGhlIGltcGxpY2F0aW9uLCBvZiBjb3Vyc2UsIGlzIHRoYXQgd2Ugd2FudCB0byBlbnN1cmUgZXJyb3IgcGF0aHMgZG9uJ3QgcHJlbWF0dXJlbHkgcmVsZWFzZSB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gQXZvaWRpbmcgcmVzb3VyY2UgbGVha3MsIGVzcGVjaWFsbHkgaW4gY3JpdGljYWwgcGF0aCBmdW5jdGlvbnMgbGlrZSBgY29weV9wcm9jZXNzYCwgaXMgcGFyYW1vdW50IHRvIHN5c3RlbSBzdGFiaWxpdHkuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgYWN0dWFsbHkgKmRvZXMqLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gaXRzIGltcGxlbWVudGF0aW9uIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2hhbmdlIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiB0cmFjaW5nLCBwcm9jZXNzIGNyZWF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDI6MjIuODgyODgwMDk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTMzMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2ZvcmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZm9yay5jPTIwMTg9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjE0NS1cXHQgKi9cXG5rZXJuZWwvZm9yay5jOjIxNDY6XFx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcXG5rZXJuZWwvZm9yay5jLTIxNDctXFx0cmV0dmFsID0gY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDI6MjIuOTMwMDIwNzU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkxNzY5NDk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBUYXNrIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwncyB0cmFjaW5nIG1lY2hhbmlzbXMgYWdhaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBpcyBhY3R1YWxseSBzZXQgdXAuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLiBLbm93aW5nIHRoZSBleGFjdCBsb2NhdGlvbiB3aWxsIGluZm9ybSB0aGUgc3Vic2VxdWVudCBpbnZlc3RpZ2F0aW9uLiBJIG1pZ2h0IGJlIGxvb2tpbmcgZm9yIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gYSBjcnVjaWFsIGhvb2sgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQncyBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoIHRvIGxvY2F0ZSBpdHMgZGVmaW5pdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHRyYWNpbmcgdGhlIGNvbnRleHQgaW4gd2hpY2ggYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGlzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQyOjI3Ljg0NzcxODg0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA5Nzc5MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM0Mj1leHRlcm4gdHJhY2VfZnVuY19ncmFwaF9lbnRfdCBmdHJhY2VfZ3JhcGhfZW50cnk7XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQzLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM0NDpleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQ1LWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM1Nj1zdGF0aWMgaW5saW5lIHZvaWQgdW5wYXVzZV9ncmFwaF90cmFjaW5nKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjMtXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY0OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzY1LXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XFxuLS1cXG5rZXJuZWwvZm9yay5jPTIwMTg9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjE0NS1cXHQgKi9cXG5rZXJuZWwvZm9yay5jOjIxNDY6XFx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcXG5rZXJuZWwvZm9yay5jLTIxNDctXFx0cmV0dmFsID0gY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTMxPXZvaWQgZnRyYWNlX2dyYXBoX2luaXRfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTU5LS8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE2MDp2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDI6MjkuNjU3NTA0ODRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc4ODQ3NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqRGl2aW5nIGludG8gdGhlIEZ1bmN0aW9uIEdyYXBoIFRyYWNlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGluaXRpYWxpemVzIGl0c2VsZiwgc3BlY2lmaWNhbGx5IGF0IHRoZSB0YXNrIGxldmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gSSBrbm93IHRoYXQgdGhlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgYSBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBJJ20gcHJldHR5IGNlcnRhaW4gdGhhdCB0aGUgYGtlcm5lbC90cmFjZS9gIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gdGhlIHJlbGV2YW50IGNvZGUuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiBvZiBmdHJhY2UtcmVsYXRlZCBmdW5jdGlvbnMsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGxvb2sgZm9yIHNvbWV0aGluZyBsaWtlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYC4gVGhpcyBzdWdnZXN0cyBpdCdzIGxpa2VseSBhIGZ1bmN0aW9uIGRlZGljYXRlZCB0byBwZXItdGFzayBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlci4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LCBsZXQncyBnbyBjaGVjayBga2VybmVsL3RyYWNlL2ZncmFwaC5jYC4gSSdsbCBsb29rIGZvciB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgaXRzIHJvbGUgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjk0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDI6MzIuOTM2MzU1MTc5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9mZ3JhcGguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTU5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTU5OlxcdC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cXG4xMTYwOlxcdHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuMTE2MTpcXHR7XFxuMTE2MjpcXHRcXHQvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHVzZSB0aGUgcGFyZW50IHJldF9zdGFjayAqL1xcbjExNjM6XFx0XFx0dC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcXG4xMTY0OlxcdFxcdHQtXFx1MDAzZWN1cnJfcmV0X3N0YWNrID0gMDtcXG4xMTY1OlxcdFxcdHQtXFx1MDAzZWN1cnJfcmV0X2RlcHRoID0gLTE7XFxuMTE2NjpcXHRcXG4xMTY3OlxcdFxcdGlmIChmdHJhY2VfZ3JhcGhfYWN0aXZlKSB7XFxuMTE2ODpcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpyZXRfc3RhY2s7XFxuMTE2OTpcXHRcXG4xMTcwOlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWZncmFwaF9zdGFja19jYWNoZXApKVxcbjExNzE6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRcXHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xcbjExNzQ6XFx0XFx0XFx0aWYgKCFyZXRfc3RhY2spXFxuMTE3NTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTE3NjpcXHRcXHRcXHRncmFwaF9pbml0X3Rhc2sodCwgcmV0X3N0YWNrKTtcXG4xMTc3OlxcdFxcdH1cXG4xMTc4OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDI6MzIuOTM2NDY1ODk5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4NzA3ODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGNvcHlfcHJvY2Vzc2AgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IG5hc3R5IHJhY2UgY29uZGl0aW9uIGluIGBjb3B5X3Byb2Nlc3NgLiBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSB3aW5kb3cgd2hlcmUgYGNvcHlfcHJvY2Vzc2AgY291bGQgZmFpbCAqYmVmb3JlKiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgZ2V0cyBjYWxsZWQuIFRoYXQncyBhIHByb2JsZW0gYmVjYXVzZSBgZHVwX3Rhc2tfc3RydWN0YCBpcyBnb2luZyB0byBjb3B5IHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCBpbnRvIHRoZSBjaGlsZCdzIGB0YXNrX3N0cnVjdGAuIElmIHRoZSBjb3B5IGZhaWxzIGVhcmx5LCB0aGUgY2hpbGQncyBgdC1cdTAwM2VyZXRfc3RhY2tgIGVuZHMgdXAgcG9pbnRpbmcgdG8gdGhlICpwYXJlbnQncyogYHJldF9zdGFja2Ag4oCTIGEgcG90ZW50aWFsIGRhbmdsaW5nIHBvaW50ZXIgc2l0dWF0aW9uLlxuXG5UaGUgZXJyb3IgaGFuZGxpbmcgaXMgd2hhdCdzIGNydWNpYWwgaGVyZS4gVGhleSBhcmUgZnJlZWluZyB0aGUgY2hpbGQncyBgdGFza19zdHJ1Y3RgLCBidXQgd2hhdCBhYm91dCB0aGUgYHJldF9zdGFja2A/IElzIGl0IGV4cGxpY2l0bHkgZnJlZWQsIG9yIGRvZXMgdGhlIGNvZGUgbGVhdmUgaXQgYmU/IEl0IGlzIHVuY2xlYXIgd2hldGhlciBpdCBpcyBmcmVlZCwgb3IgcG90ZW50aWFsbHkgZnJlZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMuIE15IGNvbmNlcm4gaXMsIGBmcmVlX3Rhc2tgIGlzIGludm9sdmVkLCBhbmQgYGZyZWVfdGFza2AgKmRvZXMqIGNhbGwgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2sodClgLiBTbywgSSd2ZSBnb3QgdG8gY2hlY2sgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGFuZCBzZWUgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhhdCBgcmV0X3N0YWNrYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQyOjM3LjAyMzU0NzcxOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MzkzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnRyYWNlX2dyYXBoX2V4aXRfdGFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvZmdyYXBoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNjA9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTc5LVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTgwOnZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0MjozNy4wNzIzOTQyMzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2MjM0MTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCwgc3VtbWFyaXplZCBpbiBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIGl0LiBUaGUgbmFtZSBhbG9uZSB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBjcnVjaWFsIGZvciBoYW5kbGluZyB0YXNrIGV4aXRzIHdpdGhpbiB0aGUgYGZ0cmFjZWAgZ3JhcGggdHJhY2VyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHRyYWNlIGV2ZW50cyByZWxhdGVkIHRvIGEgdGFzaydzIHRlcm1pbmF0aW9uLiBUaGlzIGZ1bmN0aW9uIHByb2JhYmx5IGludGVyYWN0cyB3aXRoIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiBgZnRyYWNlYCB0aGF0IHRyYWNrIHRhc2tzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHRyYWNpbmcgaW5mb3JtYXRpb24sIGFuZCB0aGF0IGluZm9ybWF0aW9uIG5lZWRzIGNsZWFuaW5nIHVwIHRvIGtlZXAgdGhlIHRyYWNlciBpbiBhIGdvb2Qgc3RhdGUuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IGV4YWN0bHkgaXMgYmVpbmcgY2xlYW5lZCB1cD8gSXMgdGhpcyB0aHJlYWQgc2FmZSwgYW5kIGhvdz8gSG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIG90aGVyIHRyYWNpbmcgbWVjaGFuaXNtcywgbGlrZSB0aGUgcGVyLUNQVSBidWZmZXJzPyBJcyBpdCBjYWxsZWQgZnJvbSBhIGNvbnRleHQgdGhhdCBjYW4gYmxvY2ssIG9yIGlzIGl0IGRlc2lnbmVkIHRvIGJlIG5vbi1ibG9ja2luZyB0byBhdm9pZCBkZWFkbG9ja3MgZHVyaW5nIHRhc2sgZXhpdD8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIGxvb2tpbmcgb3V0IGZvciwgY29uc2lkZXJpbmcgYSB0YXNrIGlzLCBieSBkZWZpbml0aW9uLCBleGl0aW5nPyBUaGlzIGtpbmQgb2YgZnVuY3Rpb24gaXMgdXN1YWxseSBmcmF1Z2h0IHdpdGggZWRnZSBjYXNlcyFcblxuSSdtIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyBsaWtlOlxuKiAgIFVucmVnaXN0ZXJpbmcgdGhlIHRhc2sgZnJvbSB0aGUgYGZ0cmFjZWAgZ3JhcGggdHJhY2luZyBzeXN0ZW0uXG4qICAgUmVsZWFzaW5nIGFueSBhc3NvY2lhdGVkIG1lbW9yeSBhbGxvY2F0ZWQgc3BlY2lmaWNhbGx5IGZvciB0aGF0IHRhc2suXG4qICAgUG90ZW50aWFsbHkgd3JpdGluZyBmaW5hbCB0cmFjZSBldmVudHMgcmVsYXRlZCB0byB0aGUgdGFzaydzIGxhc3QgYWN0aXZpdGllcy5cbiogICBQZXJoYXBzIHNvbWUgY291bnRlciBhZGp1c3RtZW50cywgdG8ga2VlcCB0cmFjayBvZiBhY3RpdmUgdGFza3Mgd2l0aGluIHRoZSB0cmFjZXIuXG5cbkxldCdzIHJlYWQgdGhlIGNvZGUgYW5kIGNvbmZpcm0gdGhlc2UgYXNzdW1wdGlvbnMsIGFuZCBjaGVjayBmb3IgYW55IHVuZXhwZWN0ZWQgY29tcGxleGl0eSBvciBjbGV2ZXIgb3B0aW1pemF0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGNvcnJlY3RuZXNzIGJ1Z3MgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRhc2tzIGFyZSBjb25zdGFudGx5IGJlaW5nIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQyOjQxLjMzNDc0MDE0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2ZncmFwaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExODA6XFx0dm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4xMTgxOlxcdHtcXG4xMTgyOlxcdFxcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjayA9IHQtXFx1MDAzZXJldF9zdGFjaztcXG4xMTgzOlxcdFxcbjExODQ6XFx0XFx0dC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcXG4xMTg1OlxcdFxcdC8qIE5VTEwgbXVzdCBiZWNvbWUgdmlzaWJsZSB0byBJUlFzIGJlZm9yZSB3ZSBmcmVlIGl0OiAqL1xcbjExODY6XFx0XFx0YmFycmllcigpO1xcbjExODc6XFx0XFxuMTE4ODpcXHRcXHRpZiAocmV0X3N0YWNrKSB7XFxuMTE4OTpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFmZ3JhcGhfc3RhY2tfY2FjaGVwKSlcXG4xMTkwOlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMTkxOlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShmZ3JhcGhfc3RhY2tfY2FjaGVwLCByZXRfc3RhY2spO1xcbjExOTI6XFx0XFx0fVxcbjExOTM6XFx0fVxcbjExOTQ6XFx0XFxuMTE5NTpcXHQjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFXFxuMTE5NjpcXHRzdGF0aWMgaW50IGZncmFwaF9waWRfZnVuYyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxuMTE5NzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG4xMTk4OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuMTE5OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQyOjQxLjMzNDg2MTMzNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTgzMTM5NDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBLZXJuZWwgQnVnIGFuZCBpdHMgRnV6emluZyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgKmRvZXMqIGluZGVlZCBmcmVlIGB0LVx1MDAzZXJldF9zdGFja2AuIFRoZSBwb3RlbnRpYWwgaXNzdWUgaXMgaWYgYGNvcHlfcHJvY2Vzc2AgZmFpbHMgYmVmb3JlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBnZXRzIGNhbGxlZC4gSW4gdGhhdCBzY2VuYXJpbywgdGhlIG5ldyB0YXNrJ3MgYHQtXHUwMDNlcmV0X3N0YWNrYCB3aWxsIGluaXRpYWxseSBiZSBhIGNvcHkgb2YgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgICh0aGFua3MgdG8gYGR1cF90YXNrX3N0cnVjdGApLiBUaGVuLCBpZiBgZnJlZV90YXNrYCBpcyBjYWxsZWQgKmJlZm9yZSogYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLCAgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIHdpbGwgbWlzdGFrZW5seSBmcmVlIHRoZSAqcGFyZW50J3MqIGByZXRfc3RhY2tgLiBUaGF0J3MgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlLCBvciB3b3JzZSwgYSBkb3VibGUgZnJlZSwgb3IgYSBmcmVlIG9mIGFuIGluLXVzZSBvYmplY3QsIHdhaXRpbmcgdG8gaGFwcGVuLlxuXG5TaG91bGQgSSBib3RoZXIgZnV6emluZyB0aGlzPyBUaGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDoganVzdCBtb3ZlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3NgLiBJdCdzIGEgYnVnIGZpeCBmb3IgYW4gZXJyb3IvcmFjZSBjb25kaXRpb24gd2l0aGluIGBjb3B5X3Byb2Nlc3NgLCBhbmQgaXQgc2hvdWxkbid0IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgY2hhbmdlcy4gSXQncyBqdXN0IGEgbWF0dGVyIG9mIHRoZSBvcmRlciBvZiBpbml0aWFsaXphdGlvbi5cblxuV2FpdCwgaXMgaXQgYSBwdXJlIGJ1ZyBmaXg/IFRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gY29uc2lkZXIgaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiAgU2luY2UgaXTigJlzIGEgbW9kaWZpY2F0aW9uIHRvIGBjb3B5X3Byb2Nlc3NgIGluIGBrZXJuZWwvZm9yay5jYCwgdGhhdCdzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuICBUaGVyZWZvcmUsIGl0J3Mgd29ydGggZnV6emluZyEgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTm93LCB3aGVyZSBkbyBJIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydHM/ICBgY29weV9wcm9jZXNzYCBpdHNlbGYgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCdzIGNhbGxlZCBieSBga2VybmVsX2Nsb25lYCwgd2hpY2ggaW4gdHVybiBnZXRzIGNhbGxlZCBieSBgc3lzX2Nsb25lYCwgYHN5c19mb3JrYCwgYHN5c192Zm9ya2AsIGV0Yy4gVGhlIHByb21wdCB3YXJucyBhZ2FpbnN0IGxpc3RpbmcgaG90LXBhdGggZ2VuZXJpYyBmdW5jdGlvbnMsIHNvIEkgd2FudCB0byBiZSBtb3JlIHNwZWNpZmljLiBgc3lzX2Nsb25lYCwgYHN5c19mb3JrYCwgYW5kIGBzeXNfY2xvbmUzYCAqYXJlKiBlbnRyeSBwb2ludHMsIGJ1dCB0aGV5IGFyZSBwcmV0dHkgaG90LXBhdGguICBCdXQsIEkgaGF2ZSB0byBmaW5kIGEgd2F5IHRvIG1ha2UgYGNvcHlfcHJvY2Vzc2AgKmZhaWwqIHRvIHRyaWdnZXIgdGhlIGJ1Zy4gIEkgdGhpbmsgSSBjYW4gdHJpZ2dlciB0aGlzIGJ5IHBhc3NpbmcgaW52YWxpZCBhcmd1bWVudHMgdG8gc29tZXRoaW5nIGxpa2UgYGNsb25lM2Agb3IgYnkgaGl0dGluZyBhIHJlc291cmNlIGxpbWl0LiAgYHN5c19jbG9uZTNgIG1pZ2h0IGJlIGEgZ29vZCBjYW5kaWRhdGUgdG8gZm9jdXMgb24uXG5cbkNydWNpYWxseSwgdGhpcyBidWcgKm9ubHkqIG1hdGVyaWFsaXplcyBpZiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgYWN0aXZlICpvciogaWYgYHQtXHUwMDNlcmV0X3N0YWNrYCBpcyBub3QgTlVMTC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgaXMgZW5hYmxlZCwgYmVjYXVzZSBgdC1cdTAwM2VyZXRfc3RhY2tgIGlzIG9ubHkgdXRpbGl6ZWQgd2l0aCB0aGF0IGNvbmZpZyBzZXR0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDM6NTcuMTY2MjYxNDAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU0NjY2Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVU5DVElPTl9HUkFQSF9UUkFDRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTIzNT1jb25maWcgRlVOQ1RJT05fVFJBQ0VSXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yNTMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MjU0OmNvbmZpZyBGVU5DVElPTl9HUkFQSF9UUkFDRVJcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yNTUtXFx0Ym9vbCBcXFwiS2VybmVsIEZ1bmN0aW9uIEdyYXBoIFRyYWNlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDM6NTkuMTIwOTMyOTU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTQwNTIxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBGdW5jdGlvbiBHcmFwaCBUcmFjZXIqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byBga2VybmVsL3RyYWNlL0tjb25maWdgLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBmaW5kIGl0LCBnaXZlbiB0aGlzIGlzIHRoZSBrZXJuZWwncyB0cmFjaW5nIHN1YnN5c3RlbS4gTm8gbmVlZCB0byBvdmVydGhpbmsgaXQ7IGxldCdzIGp1c3QgZ28gc3RyYWlnaHQgdGhlcmUgYW5kIHRha2UgYSBsb29rLiBTaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjAyLjAzNDk4ODgwMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjU0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU0OlxcdGNvbmZpZyBGVU5DVElPTl9HUkFQSF9UUkFDRVJcXG4gMjU1OlxcdFxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBHcmFwaCBUcmFjZXJcXFwiXFxuIDI1NjpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxuIDI1NzpcXHRcXHRkZXBlbmRzIG9uIEZVTkNUSU9OX1RSQUNFUlxcbiAyNTg6XFx0XFx0ZGVwZW5kcyBvbiAhWDg2XzMyIHx8ICFDQ19PUFRJTUlaRV9GT1JfU0laRVxcbiAyNTk6XFx0XFx0ZGVmYXVsdCB5XFxuIDI2MDpcXHRcXHRoZWxwXFxuIDI2MTpcXHRcXHQgIEVuYWJsZSB0aGUga2VybmVsIHRvIHRyYWNlIGEgZnVuY3Rpb24gYXQgYm90aCBpdHMgcmV0dXJuXFxuIDI2MjpcXHRcXHQgIGFuZCBpdHMgZW50cnkuXFxuIDI2MzpcXHRcXHQgIEl0cyBmaXJzdCBwdXJwb3NlIGlzIHRvIHRyYWNlIHRoZSBkdXJhdGlvbiBvZiBmdW5jdGlvbnMgYW5kXFxuIDI2NDpcXHRcXHQgIGRyYXcgYSBjYWxsIGdyYXBoIGZvciBlYWNoIHRocmVhZCB3aXRoIHNvbWUgaW5mb3JtYXRpb24gbGlrZVxcbiAyNjU6XFx0XFx0ICB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIGlzIGRvbmUgYnkgc2V0dGluZyB0aGUgY3VycmVudCByZXR1cm5cXG4gMjY2OlxcdFxcdCAgYWRkcmVzcyBvbiB0aGUgY3VycmVudCB0YXNrIHN0cnVjdHVyZSBpbnRvIGEgc3RhY2sgb2YgY2FsbHMuXFxuIDI2NzpcXHRcXG4gMjY4OlxcdGNvbmZpZyBGVU5DVElPTl9HUkFQSF9SRVRWQUxcXG4gMjY5OlxcdFxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBHcmFwaCBSZXR1cm4gVmFsdWVcXFwiXFxuIDI3MDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fR1JBUEhfRlJFR1NcXG4gMjcxOlxcdFxcdGRlcGVuZHMgb24gRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxuIDI3MjpcXHRcXHRkZWZhdWx0IG5cXG4gMjczOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6MDIuMDM1MTAwNDExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjUyNTE4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGdW5jdGlvbiBHcmFwaCBUcmFjZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgYXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgaXRzIGludGVycGxheSB3aXRoIHRoZSBvdmVyYWxsIHN5c3RlbT8gQWgsIGhhbmcgb27igKYgSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYC4gTm93LCBJIHJlY2FsbCB0aGF0IGJlaW5nIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkgZHVyaW5nIGBjb3B5X3Byb2Nlc3NgLiBJcyB0aGF0IHJpZ2h0PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBkcmlsbCBpbnRvIGBrZXJuZWwvZm9yay5jYCwgdGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiBwcm9jZXNzIGNyZWF0aW9uIGxpdmVzLiBMZXQgbWUgY29uZmlybSB0aGF0IGFzc3VtcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjA1LjAwMDM1NTE0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4OTM4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnRyYWNlX2dyYXBoX2luaXRfdGFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yMTQ1LVxcdCAqL1xcbmtlcm5lbC9mb3JrLmM6MjE0NjpcXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cXHRyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDowNS4wNDkyNTYwMjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5NTk3Njg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOdWFuY2VzIG9mIENvbmRpdGlvbmFsIEJlaGF2aW9yKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQgKmNsYWltcyogdG8gYmUgdW5jb25kaXRpb25hbCwgYnV0IHRoYXQncyBpbW1lZGlhdGVseSBzdXNwZWN0LiBUaGUgdGVybSBcInVuY29uZGl0aW9uYWxcIiBpbiB0aGlzIGNvbnRleHQgZmVlbHMgbGlrZSBpdCdzIHByZXNlbnRpbmcgYSBzdXJmYWNlLWxldmVsIGJlaGF2aW9yLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdHJ1ZSB1bmNvbmRpdGlvbmFsIGNvZGUgaXMgcmFyZSwgZXNwZWNpYWxseSBpbiBrZXJuZWwgZW52aXJvbm1lbnRzLiBBbmQgdGhlIGRlZmluaW5nIGNvbmRpdGlvbj8gSXQgaGluZ2VzIG9uIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gVGhhdCByaW5ncyBhIGJlbGwuLi4gSSd2ZSBzZWVuIHRoYXQgbWFjcm8gYWZmZWN0IGEgbG90IG9mIHRyYWNpbmcgYW5kIHByb2ZpbGluZyBmdW5jdGlvbmFsaXR5LiBcblxuTGV0IG1lIGRvdWJsZSBjaGVjayB0aGlzIGh5cG90aGVzaXMuIFRpbWUgdG8gZ28gZGlnIHRocm91Z2ggdGhlIHJlbGV2YW50IGhlYWRlci4gVGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGBpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IGZ0cmFjZSwgYW5kIGJ5IGV4dGVuc2lvbiwgdGhpcyBcInVuY29uZGl0aW9uYWxcIiBiZWhhdmlvciwgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgYW5kIHBvdGVudGlhbGx5IGdhdGVkLiBUaGlzIGZlZWxzIGxpa2UgaXQncyBnb2luZyB0byBiZSBhIGNhc2Ugb2YgdW5kZXJzdGFuZGluZyB0aGUgKnJlYWwqIGNvbmRpdGlvbnMgYmVmb3JlIEkgY2FuIGFjdHVhbGx5IHJlbHkgb24gdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjY0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6MTAuMzQ1MjM1ODA3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ0OTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdHJhY2VfZ3JhcGhfaW5pdF90YXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZnRyYWNlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQyPWV4dGVybiB0cmFjZV9mdW5jX2dyYXBoX2VudF90IGZ0cmFjZV9ncmFwaF9lbnRyeTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDMtXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDUtZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2My1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjUtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6MTAuMzkyNjg5NDU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODQ3NjI5MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBmdHJhY2UuaCdzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9saW51eC9mdHJhY2UuaGAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGxpbmUgMTM0NCBhbmQgdGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgaXQuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgc29tZSBmZWF0dXJlIG9yIG9wdGltaXphdGlvbiBpcyBiZWluZyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBJcyBpdCBhIGNvbXBpbGUtdGltZSBmZWF0dXJlIGZsYWc/IEEgY29uZmlndXJhdGlvbiBvcHRpb24/IEJhc2VkIG9uIHRoZSBjb250ZXh0LCB3aGF0J3MgZW5hYmxlZCBvciBkaXNhYmxlZD8gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGljaCBwYXJ0cyBvZiBmdHJhY2UgYXJlIGFjdGl2ZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCB3aHkgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIG1hZGUgdGhvc2UgZGVzaWduIGRlY2lzaW9ucy4gTGV04oCZcyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDozMC4yNDAzMjIyMTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZnRyYWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTMzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMzNTpcXHRcXHRyZXR1cm4gc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2a2lsbF9mdHJhY2VfZ3JhcGgpO1xcbjEzMzY6XFx0fVxcbjEzMzc6XFx0XFxuMTMzODpcXHRleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfc3RvcCh2b2lkKTtcXG4xMzM5OlxcdFxcbjEzNDA6XFx0LyogVGhlIGN1cnJlbnQgaGFuZGxlcnMgaW4gdXNlICovXFxuMTM0MTpcXHRleHRlcm4gdHJhY2VfZnVuY19ncmFwaF9yZXRfdCBmdHJhY2VfZ3JhcGhfcmV0dXJuO1xcbjEzNDI6XFx0ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xcbjEzNDM6XFx0XFxuMTM0NDpcXHRleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XFxuMTM0NTpcXHRleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XFxuMTM0NjpcXHRleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KTtcXG4xMzQ3OlxcdFxcbjEzNDg6XFx0LyogVXNlZCBieSBhc3NlbWJseSwgYnV0IHRvIHF1aWV0IHNwYXJzZSB3YXJuaW5ncyAqL1xcbjEzNDk6XFx0ZXh0ZXJuIHN0cnVjdCBmdHJhY2Vfb3BzICpmdW5jdGlvbl90cmFjZV9vcDtcXG4xMzUwOlxcdFxcbjEzNTE6XFx0c3RhdGljIGlubGluZSB2b2lkIHBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcXG4xMzUyOlxcdHtcXG4xMzUzOlxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXRyYWNpbmdfZ3JhcGhfcGF1c2UpO1xcbjEzNTQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDozMC4yNDA0NjU0NjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MDkyNjU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBmdHJhY2UuaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYXNwZWN0IG9mIHRyYWNpbmcuIFRpbWUgdG8gcmV2aXNpdCB0aGUgY29yZSBkZWZpbml0aW9uLCBhbmQgSSdsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50OiBgaW5jbHVkZS9saW51eC9mdHJhY2UuaGAuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gZnJvbSB0aGUgdG9wLCBsaWtlbHkgdG8gemVybyBpbiBvbiBhbnkgbWFjcm9zLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGZ1bmRhbWVudGFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhlIHNwZWNpZmljIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNlbnRyYWwgY29udHJvbCBzdHJ1Y3R1cmVzLCBwb3RlbnRpYWxseSBzb21lIGRldGFpbHMgb24gdGhlIGV2ZW50cyBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQsIG9yIGRlZmluaXRpb25zIGZvciB0aGUgcHJvYmUgcG9pbnRzLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55dGhpbmcgdGhhdCBkaWN0YXRlcyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGludGVyYWN0aW9ucy4gTXkgZXhwZXJ0aXNlIGFsbG93cyBtZSB0byByZWFkIHRocm91Z2ggaXQgcXVpY2tseSwgd2l0aCBmb2N1cyBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBObyBuZWVkIHRvIGdldCBib2dnZWQgZG93biBpbiBkZXRhaWxzIEkgYWxyZWFkeSBrbm93OyBJJ2xsIHpvb20gaW4gb24gYW55dGhpbmcgdGhhdCBzZWVtcyBub3ZlbCBvciB0aGF0IHBlcnRhaW5zIGRpcmVjdGx5IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzcwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDozMy40OTEzOTUzODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZnRyYWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTMxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMxNTpcXHQgKi9cXG4xMzE2OlxcdCNkZWZpbmUgX19ub3RyYWNlX2Z1bmNncmFwaFxcdFxcdG5vdHJhY2VcXG4xMzE3OlxcdFxcbjEzMTg6XFx0I2RlZmluZSBGVFJBQ0VfUkVURlVOQ19ERVBUSCA1MFxcbjEzMTk6XFx0I2RlZmluZSBGVFJBQ0VfUkVUU1RBQ0tfQUxMT0NfU0laRSAzMlxcbjEzMjA6XFx0XFxuMTMyMTpcXHRleHRlcm4gaW50IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChzdHJ1Y3QgZmdyYXBoX29wcyAqb3BzKTtcXG4xMzIyOlxcdGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfZnRyYWNlX2dyYXBoKHN0cnVjdCBmZ3JhcGhfb3BzICpvcHMpO1xcbjEzMjM6XFx0XFxuMTMyNDpcXHQvKipcXG4xMzI1OlxcdCAqIGZ0cmFjZV9ncmFwaF9pc19kZWFkIC0gcmV0dXJucyB0cnVlIGlmIGZ0cmFjZV9ncmFwaF9zdG9wKCkgd2FzIGNhbGxlZFxcbjEzMjY6XFx0ICpcXG4xMzI3OlxcdCAqIGZ0cmFjZV9ncmFwaF9zdG9wKCkgaXMgY2FsbGVkIHdoZW4gYSBzZXZlcmUgZXJyb3IgaXMgZGV0ZWN0ZWQgaW5cXG4xMzI4OlxcdCAqIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgY3JpdGljYWxcXG4xMzI5OlxcdCAqIHBhdGhzIG9mIGZ1bmN0aW9uIGdyYXBoIHRvIGtlZXAgdGhvc2UgcGF0aHMgZnJvbSBkb2luZyBhbnkgbW9yZSBoYXJtLlxcbjEzMzA6XFx0ICovXFxuMTMzMTpcXHRERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0Uoa2lsbF9mdHJhY2VfZ3JhcGgpO1xcbjEzMzI6XFx0XFxuMTMzMzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgZnRyYWNlX2dyYXBoX2lzX2RlYWQodm9pZClcXG4xMzM0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6MzMuNDkxNTM0NDQ0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDc3NzU0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeS4gSGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiBzb21lb25lIGltbWVyc2VkIGluIHRoZWlyIGZpZWxkOlxuXG4qKkRpZ2dpbmcgRGVlcGVyOiBBIExpbmUtYnktTGluZSBSZWZpbmVtZW50KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gVGhpcyBpbml0aWFsIGFuYWx5c2lzIGlzIGZpbmUsIGJ1dCBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcgSSdtIG5vdCBzZWVpbmcgdGhlIGVudGlyZSBwaWN0dXJlLiBUbyB0cnVseSB1bmRlcnN0YW5kIHRoaXMsIEkgbmVlZCB0byBzdGFydCBldmVuIGVhcmxpZXIgaW4gdGhlIG1hdGVyaWFsLCBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgZGF0YSwgdGhlIG9yaWdpbmFsIG9ic2VydmF0aW9ucy4gSXQncyBhIGZ1bmRhbWVudGFsIGluc3RpbmN0IOKAkyBuZXZlciB0YWtlIHRoZSBzdXJmYWNlIGxldmVsIGZvciBncmFudGVkLiBUaGVyZSdzIGFsd2F5cyB0aGUgY2hhbmNlIHRoYXQgdGhlIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gaXMgaGlkaW5nIGluIHRoZSBzZWVtaW5nbHkgaW5zaWduaWZpY2FudCBlYXJseSBwYXJ0cy4gVGhhdCBpbml0aWFsIHJlYWQgbWlnaHQgaGF2ZSBiZWVuIHRvbyBmb2N1c2VkLCB0b28gYmlhc2VkIGJ5IHdoYXQgSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQuIEl0J3MgdGltZSB0byByZS1leGFtaW5lIHRoZSBmb3VuZGF0aW9uLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCwgYW5kIGxlYXZlIG5vIHN0b25lIHVudHVybmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTUyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjM2LjUzOTMxMzA2NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjk1OlxcdFxcdFxcdFxcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XFxuMTI5NjpcXHRcXG4xMjk3OlxcdHN0YXRpYyBpbmxpbmUgaW50IGZ1bmN0aW9uX2dyYXBoX2VudGVyKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGZ1bmMsXFxuMTI5ODpcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBmcCwgdW5zaWduZWQgbG9uZyAqcmV0cClcXG4xMjk5OlxcdHtcXG4xMzAwOlxcdFxcdHJldHVybiBmdW5jdGlvbl9ncmFwaF9lbnRlcl9yZWdzKHJldCwgZnVuYywgZnAsIHJldHAsIE5VTEwpO1xcbjEzMDE6XFx0fVxcbjEzMDI6XFx0XFxuMTMwMzpcXHRzdHJ1Y3QgZnRyYWNlX3JldF9zdGFjayAqXFxuMTMwNDpcXHRmdHJhY2VfZ3JhcGhfZ2V0X3JldF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBza2lwKTtcXG4xMzA1OlxcdHVuc2lnbmVkIGxvbmcgZnRyYWNlX2dyYXBoX3RvcF9yZXRfYWRkcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbjEzMDY6XFx0XFxuMTMwNzpcXHR1bnNpZ25lZCBsb25nIGZ0cmFjZV9ncmFwaF9yZXRfYWRkcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCAqaWR4LFxcbjEzMDg6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nICpyZXRwKTtcXG4xMzA5OlxcdHVuc2lnbmVkIGxvbmcgKmZncmFwaF9nZXRfdGFza192YXIoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpO1xcbjEzMTA6XFx0XFxuMTMxMTpcXHQvKlxcbjEzMTI6XFx0ICogU29tZXRpbWVzIHdlIGRvbid0IHdhbnQgdG8gdHJhY2UgYSBmdW5jdGlvbiB3aXRoIHRoZSBmdW5jdGlvblxcbjEzMTM6XFx0ICogZ3JhcGggdHJhY2VyIGJ1dCB3ZSB3YW50IHRoZW0gdG8ga2VlcCB0cmFjZWQgYnkgdGhlIHVzdWFsIGZ1bmN0aW9uXFxuMTMxNDpcXHQgKiB0cmFjZXIgaWYgdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBpcyBub3QgY29uZmlndXJlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6MzYuNTM5NDY1OTI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzYyOTE2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeS4gSGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiBzb21lb25lIGltbWVyc2VkIGluIHRoZWlyIGZpZWxkOlxuXG4qKkRpZ2dpbmcgRGVlcGVyOiBBIExpbmUtYnktTGluZSBSZWZpbmVtZW50KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gVGhpcyBpbml0aWFsIGFuYWx5c2lzIGlzIGZpbmUsIGJ1dCBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcgSSdtIG5vdCBzZWVpbmcgdGhlIGVudGlyZSBwaWN0dXJlLiBUbyB0cnVseSB1bmRlcnN0YW5kIHRoaXMsIEkgbmVlZCB0byBzdGFydCBldmVuIGVhcmxpZXIgaW4gdGhlIG1hdGVyaWFsLCBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgZGF0YSwgdGhlIG9yaWdpbmFsIG9ic2VydmF0aW9ucy4gSXQncyBhIGZ1bmRhbWVudGFsIGluc3RpbmN0IOKAkyBuZXZlciB0YWtlIHRoZSBzdXJmYWNlIGxldmVsIGZvciBncmFudGVkLiBUaGVyZSdzIGFsd2F5cyB0aGUgY2hhbmNlIHRoYXQgdGhlIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gaXMgaGlkaW5nIGluIHRoZSBzZWVtaW5nbHkgaW5zaWduaWZpY2FudCBlYXJseSBwYXJ0cy4gVGhhdCBpbml0aWFsIHJlYWQgbWlnaHQgaGF2ZSBiZWVuIHRvbyBmb2N1c2VkLCB0b28gYmlhc2VkIGJ5IHdoYXQgSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQuIEl0J3MgdGltZSB0byByZS1leGFtaW5lIHRoZSBmb3VuZGF0aW9uLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCwgYW5kIGxlYXZlIG5vIHN0b25lIHVudHVybmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTM1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjM5LjgxNTc2MDg1MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjc1OlxcdCAqL1xcbjEyNzY6XFx0c3RydWN0IGZ0cmFjZV9yZXRfc3RhY2sge1xcbjEyNzc6XFx0XFx0dW5zaWduZWQgbG9uZyByZXQ7XFxuMTI3ODpcXHRcXHR1bnNpZ25lZCBsb25nIGZ1bmM7XFxuMTI3OTpcXHQjaWZkZWYgSEFWRV9GVU5DVElPTl9HUkFQSF9GUF9URVNUXFxuMTI4MDpcXHRcXHR1bnNpZ25lZCBsb25nIGZwO1xcbjEyODE6XFx0I2VuZGlmXFxuMTI4MjpcXHRcXHR1bnNpZ25lZCBsb25nICpyZXRwO1xcbjEyODM6XFx0fTtcXG4xMjg0OlxcdFxcbjEyODU6XFx0LypcXG4xMjg2OlxcdCAqIFByaW1hcnkgaGFuZGxlciBvZiBhIGZ1bmN0aW9uIHJldHVybi5cXG4xMjg3OlxcdCAqIEl0IHJlbGF5cyBvbiBmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIuXFxuMTI4ODpcXHQgKiBEZWZpbmVkIGluIGVudHJ5XzMyLzY0LlNcXG4xMjg5OlxcdCAqL1xcbjEyOTA6XFx0ZXh0ZXJuIHZvaWQgcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7XFxuMTI5MTpcXHRcXG4xMjkyOlxcdGV4dGVybiBpbnRcXG4xMjkzOlxcdGZ1bmN0aW9uX2dyYXBoX2VudGVyX3JlZ3ModW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgZnVuYyxcXG4xMjk0OlxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBmcmFtZV9wb2ludGVyLCB1bnNpZ25lZCBsb25nICpyZXRwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDozOS44MTU4ODQ1MTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMTEyOTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGlzLiBMZXQncyBzZWUuLi4gSSBuZWVkIHRvIHN1bW1hcml6ZSB0aGVzZSBcInRob3VnaHRzXCIgYXMgaWYgdGhleSB3ZXJlIG15IG93bi4gQW5kLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2UsIEkgc2hvdWxkIGFpbSBmb3IgYSBjb25jaXNlIHlldCBpbnNpZ2h0ZnVsIGV4cGxhbmF0aW9uLiBIZXJlIGdvZXM6XG5cbioqTXkgSW1tZWRpYXRlIFRob3VnaHQgUHJvY2VzcyBvbiBBbmFseXppbmcgVGhpcyBUZXh0KipcblxuQWxyaWdodCwgdGhlIGluc3RydWN0aW9uIGlzIHRvIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSB0ZXh0LiBTZWVtcyBsaWtlIHRoZSBhbmFseXNpcyB3YW50cyB0byBsb29rIGF0ICpldmVuIGVhcmxpZXIgbGluZXMqLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBjdXJyZW50IHBvaW50IGlzIG5vdCB0aGUgYmVnaW5uaW5nLCBidXQgYSBjb250aW51YXRpb24gb2YgYSBsaW5lIG9mIHRob3VnaHQsIGluIGEgZG9jdW1lbnQgb3IgY29udmVyc2F0aW9uLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGlzIHRvcGljLCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGluIHRoZXNlIFwiZWFybGllciBsaW5lc1wiXG5cbkFscmlnaHQsIEkgY2FuIHdvcmsgd2l0aCB0aGF0LiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDMyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjQzLjA0NzAxNzA0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNTU6XFx0XFxuMTI1NjpcXHQjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcbjEyNTc6XFx0XFxuMTI1ODpcXHRzdHJ1Y3QgZmdyYXBoX29wcyB7XFxuMTI1OTpcXHRcXHR0cmFjZV9mdW5jX2dyYXBoX2VudF90XFx0XFx0ZW50cnlmdW5jO1xcbjEyNjA6XFx0XFx0dHJhY2VfZnVuY19ncmFwaF9yZXRfdFxcdFxcdHJldGZ1bmM7XFxuMTI2MTpcXHRcXHRzdHJ1Y3QgZnRyYWNlX29wc1xcdFxcdG9wczsgLyogZm9yIHRoZSBoYXNoIGxpc3RzICovXFxuMTI2MjpcXHRcXHR2b2lkXFx0XFx0XFx0XFx0KnByaXZhdGU7XFxuMTI2MzpcXHRcXHR0cmFjZV9mdW5jX2dyYXBoX2VudF90XFx0XFx0c2F2ZWRfZnVuYztcXG4xMjY0OlxcdFxcdGludFxcdFxcdFxcdFxcdGlkeDtcXG4xMjY1OlxcdH07XFxuMTI2NjpcXHRcXG4xMjY3OlxcdHZvaWQgKmZncmFwaF9yZXNlcnZlX2RhdGEoaW50IGlkeCwgaW50IHNpemVfYnl0ZXMpO1xcbjEyNjg6XFx0dm9pZCAqZmdyYXBoX3JldHJpZXZlX2RhdGEoaW50IGlkeCwgaW50ICpzaXplX2J5dGVzKTtcXG4xMjY5OlxcdHZvaWQgKmZncmFwaF9yZXRyaWV2ZV9wYXJlbnRfZGF0YShpbnQgaWR4LCBpbnQgKnNpemVfYnl0ZXMsIGludCBkZXB0aCk7XFxuMTI3MDpcXHRcXG4xMjcxOlxcdC8qXFxuMTI3MjpcXHQgKiBTdGFjayBvZiByZXR1cm4gYWRkcmVzc2VzIGZvciBmdW5jdGlvbnNcXG4xMjczOlxcdCAqIG9mIGEgdGhyZWFkLlxcbjEyNzQ6XFx0ICogVXNlZCBpbiBzdHJ1Y3QgdGhyZWFkX2luZm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6NDMuMDQ3MTQzOTExWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDM1NzIwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIGBjb3B5X3Byb2Nlc3NgIGFuZCBpdHMgY2FsbGVycyoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdGhhdCBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgY29uZmlnIG9wdGlvbi4gSSB0aGluayB0aGF0J3MgdGhlIG9uZSB3ZSBuZWVkLiBTbywgdGhhdCBtZWFucyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIGlzIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgLiBHb3QgaXQuXG5cbk5vdywgd2hpY2ggZnVuY3Rpb24gYXJlIHdlIGludGVyZXN0ZWQgaW4/IEFoLCBpdCdzIGBjb3B5X3Byb2Nlc3NgLCBvZiBjb3Vyc2UuIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGBjb3B5X3Byb2Nlc3NgIGlzIGRlY2xhcmVkIHN0YXRpYywgaXNuJ3QgaXQ/IFRoYXQncyBnb2luZyB0byBtYWtlIGRpcmVjdCB0cmFjaW5nIGEgYml0IHRyaWNreS4gV2UgbmVlZCB0byBmaW5kIHRoZSBjYWxscyB0byB0aGUgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi5cblxuSG1tLi4uIFdoZXJlIGRvZXMgdGhpcyBoYXBwZW4/IFRoZSBzeXN0ZW0gY2FsbCBsZXZlbC4gSXQncyBlaXRoZXIgZ29pbmcgdG8gYmUgYHN5c19jbG9uZWAsIG9yIGBzeXNfY2xvbmUzYCwgb3IgcGVyaGFwcyBga2VybmVsX2Nsb25lYD8gVGhhdCBtYWtlcyB0aGUgbW9zdCBzZW5zZS5cblxuT2theSwgdGltZSB0byBjaGVjayB0aGUgc291cmNlLiBMZXQncyBoZWFkIG92ZXIgdG8gYGtlcm5lbC9mb3JrLmNgIGFuZCBzZWFyY2ggZm9yIHRoYXQgYGtlcm5lbF9jbG9uZWAgZnVuY3Rpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cywgYW5kIGhvcGVmdWxseSwgZnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgYmFjayB0byBgY29weV9wcm9jZXNzYCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQ3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDo0Ny4yNTA3MjA1NTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjgwNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtlcm5lbF9jbG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yMDIxLVxcdFxcdFxcdFxcdFxcdGludCBub2RlLFxcbmtlcm5lbC9mb3JrLmM6MjAyMjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxua2VybmVsL2ZvcmsuYy0yMDIzLXtcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MjY3ND1zdHJ1Y3QgdGFza19zdHJ1Y3QgKiBfX2luaXQgZm9ya19pZGxlKGludCBjcHUpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI2NzYtXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbmtlcm5lbC9mb3JrLmM6MjY3NzpcXHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcXG5rZXJuZWwvZm9yay5jLTI2NzgtXFx0XFx0LmZsYWdzXFx0XFx0PSBDTE9ORV9WTSxcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjY5NC0vKlxcbmtlcm5lbC9mb3JrLmM6MjY5NTogKiBUaGlzIGlzIGxpa2Uga2VybmVsX2Nsb25lKCksIGJ1dCBzaGF2ZWQgZG93biBhbmQgdGFpbG9yZWQgdG8ganVzdFxcbmtlcm5lbC9mb3JrLmMtMjY5Ni0gKiBjcmVhdGluZyBpb191cmluZyB3b3JrZXJzLiBJdCByZXR1cm5zIGEgY3JlYXRlZCB0YXNrLCBvciBhbiBlcnJvciBwb2ludGVyLlxcbi0tXFxua2VybmVsL2ZvcmsuYz0yNzAwPXN0cnVjdCB0YXNrX3N0cnVjdCAqY3JlYXRlX2lvX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCBpbnQgbm9kZSlcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjcwMy1cXHRcXHRcXHQgICAgICBDTE9ORV9JT3xDTE9ORV9WTXxDTE9ORV9VTlRSQUNFRDtcXG5rZXJuZWwvZm9yay5jOjI3MDQ6XFx0c3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzIGFyZ3MgPSB7XFxua2VybmVsL2ZvcmsuYy0yNzA1LVxcdFxcdC5mbGFnc1xcdFxcdD0gZmxhZ3MsXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI3MjAtICovXFxua2VybmVsL2ZvcmsuYzoyNzIxOnBpZF90IGtlcm5lbF9jbG9uZShzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxua2VybmVsL2ZvcmsuYy0yNzIyLXtcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MjgyND1waWRfdCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI4MjYte1xcbmtlcm5lbC9mb3JrLmM6MjgyNzpcXHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcXG5rZXJuZWwvZm9yay5jLTI4MjgtXFx0XFx0LmZsYWdzXFx0XFx0PSAoKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCkgXFx1MDAyNiB+Q1NJR05BTCksXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI4MzUtXFxua2VybmVsL2ZvcmsuYzoyODM2OlxcdHJldHVybiBrZXJuZWxfY2xvbmUoXFx1MDAyNmFyZ3MpO1xcbmtlcm5lbC9mb3JrLmMtMjgzNy19XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI4NDI9cGlkX3QgdXNlcl9tb2RlX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbmtlcm5lbC9mb3JrLmMtMjg0My17XFxua2VybmVsL2ZvcmsuYzoyODQ0OlxcdHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyBhcmdzID0ge1xcbmtlcm5lbC9mb3JrLmMtMjg0NS1cXHRcXHQuZmxhZ3NcXHRcXHQ9ICgoZmxhZ3MgfCBDTE9ORV9WTSB8IENMT05FX1VOVFJBQ0VEKSBcXHUwMDI2IH5DU0lHTkFMKSxcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjg1MS1cXG5rZXJuZWwvZm9yay5jOjI4NTI6XFx0cmV0dXJuIGtlcm5lbF9jbG9uZShcXHUwMDI2YXJncyk7XFxua2VybmVsL2ZvcmsuYy0yODUzLX1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9Mjg1Nj1TWVNDQUxMX0RFRklORTAoZm9yaylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjg1OC0jaWZkZWYgQ09ORklHX01NVVxcbmtlcm5lbC9mb3JrLmM6Mjg1OTpcXHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcXG5rZXJuZWwvZm9yay5jLTI4NjAtXFx0XFx0LmV4aXRfc2lnbmFsID0gU0lHQ0hMRCxcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjg2Mi1cXG5rZXJuZWwvZm9yay5jOjI4NjM6XFx0cmV0dXJuIGtlcm5lbF9jbG9uZShcXHUwMDI2YXJncyk7XFxua2VybmVsL2ZvcmsuYy0yODY0LSNlbHNlXFxuLS1cXG5rZXJuZWwvZm9yay5jPTI4NzI9U1lTQ0FMTF9ERUZJTkUwKHZmb3JrKVxcbmtlcm5lbC9mb3JrLmMtMjg3My17XFxua2VybmVsL2ZvcmsuYzoyODc0OlxcdHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyBhcmdzID0ge1xcbmtlcm5lbC9mb3JrLmMtMjg3NS1cXHRcXHQuZmxhZ3NcXHRcXHQ9IENMT05FX1ZGT1JLIHwgQ0xPTkVfVk0sXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI4NzgtXFxua2VybmVsL2ZvcmsuYzoyODc5OlxcdHJldHVybiBrZXJuZWxfY2xvbmUoXFx1MDAyNmFyZ3MpO1xcbmtlcm5lbC9mb3JrLmMtMjg4MC19XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI5MDE9U1lTQ0FMTF9ERUZJTkU1KGNsb25lLCB1bnNpZ25lZCBsb25nLCBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZywgbmV3c3AsXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI5MDYte1xcbmtlcm5lbC9mb3JrLmM6MjkwNzpcXHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcXG5rZXJuZWwvZm9yay5jLTI5MDgtXFx0XFx0LmZsYWdzXFx0XFx0PSAobG93ZXJfMzJfYml0cyhjbG9uZV9mbGFncykgXFx1MDAyNiB+Q1NJR05BTCksXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI5MTYtXFxua2VybmVsL2ZvcmsuYzoyOTE3OlxcdHJldHVybiBrZXJuZWxfY2xvbmUoXFx1MDAyNmFyZ3MpO1xcbmtlcm5lbC9mb3JrLmMtMjkxOC19XFxuLS1cXG5rZXJuZWwvZm9yay5jLTI5MjAtXFxua2VybmVsL2ZvcmsuYzoyOTIxOnN0YXRpYyBub2lubGluZSBpbnQgY29weV9jbG9uZV9hcmdzX2Zyb21fdXNlcihzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmthcmdzLFxcbmtlcm5lbC9mb3JrLmMtMjkyMi1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgY2xvbmVfYXJncyBfX3VzZXIgKnVhcmdzLFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yOTY0LVxcbmtlcm5lbC9mb3JrLmM6Mjk2NTpcXHQqa2FyZ3MgPSAoc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzKXtcXG5rZXJuZWwvZm9yay5jLTI5NjYtXFx0XFx0LmZsYWdzXFx0XFx0PSBhcmdzLmZsYWdzLFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yOTk1LSAqL1xcbmtlcm5lbC9mb3JrLmM6Mjk5NjpzdGF0aWMgaW5saW5lIGJvb2wgY2xvbmUzX3N0YWNrX3ZhbGlkKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqa2FyZ3MpXFxua2VybmVsL2ZvcmsuYy0yOTk3LXtcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMzAxNS1cXG5rZXJuZWwvZm9yay5jOjMwMTY6c3RhdGljIGJvb2wgY2xvbmUzX2FyZ3NfdmFsaWQoc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICprYXJncylcXG5rZXJuZWwvZm9yay5jLTMwMTcte1xcbi0tXFxua2VybmVsL2ZvcmsuYz0zMDU3PVNZU0NBTExfREVGSU5FMihjbG9uZTMsIHN0cnVjdCBjbG9uZV9hcmdzIF9fdXNlciAqLCB1YXJncywgc2l6ZV90LCBzaXplKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0zMDYwLVxcbmtlcm5lbC9mb3JrLmM6MzA2MTpcXHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3Mga2FyZ3M7XFxua2VybmVsL2ZvcmsuYy0zMDYyLVxcdHBpZF90IHNldF90aWRbTUFYX1BJRF9OU19MRVZFTF07XFxuLS1cXG5rZXJuZWwvZm9yay5jLTMwNzctXFxua2VybmVsL2ZvcmsuYzozMDc4OlxcdHJldHVybiBrZXJuZWxfY2xvbmUoXFx1MDAyNmthcmdzKTtcXG5rZXJuZWwvZm9yay5jLTMwNzktfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0zMjIyPXN0YXRpYyBpbnQgdW5zaGFyZV9mZCh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MsIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKipuZXdfZmRwKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0zMjM5LSAqIGNvbnRleHQgd2hpY2ggd2FzIG9yaWdpbmFsbHkgc2hhcmVkIHVzaW5nIGNsb25lLiAgY29weV8qXFxua2VybmVsL2ZvcmsuYzozMjQwOiAqIGZ1bmN0aW9ucyB1c2VkIGJ5IGtlcm5lbF9jbG9uZSgpIGNhbm5vdCBiZSB1c2VkIGhlcmUgZGlyZWN0bHlcXG5rZXJuZWwvZm9yay5jLTMyNDEtICogYmVjYXVzZSB0aGV5IG1vZGlmeSBhbiBpbmFjdGl2ZSB0YXNrX3N0cnVjdCB0aGF0IGlzIGJlaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjQ3LjMwMDQwNjY5NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjkxNjQwMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDbG9uaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIGZpZWxkIGNvbnNpZGVyYWJseSB3aGVuIGxvb2tpbmcgYXQgdGhlc2UgY2xvbmluZyBmdW5jdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBrZXJuZWxfY2xvbmVgIGFuZCBgc3lzX2Nsb25lM2AgYXJlIHRoZSBtYWluIHBsYXllcnMuIE5vdywgSSBrbm93IGBzeXNfY2xvbmUzYCBpcyBhIHN5c2NhbGw7IEnigJltIHByZXR0eSBmYW1pbGlhciB3aXRoIHRoYXQgb25lLiBCdXQsIGBrZXJuZWxfY2xvbmVgIOKAkyB0aGF0J3MgdGhlIGNvcmUgZW50cnkgcG9pbnQsIHRoZSBvbmUgdGhhdCBraWNrcyBldmVyeXRoaW5nIG9mZi4gTGV0J3Mgc2VlLi4uIHllcCwgYHBpZF90IGtlcm5lbF9jbG9uZShzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpYC4gTm90IHN0YXRpYy4gUGVyZmVjdC4gVGhhdCdzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbkkgZGlkIHRha2UgYSBxdWljayBsb29rIGF0IGBjb3B5X3Byb2Nlc3NgLCBhbmQgd2hpbGUgdGhhdCdzIHRoZSBvbmUgdGhhdCdzIGJlZW4gbW9kaWZpZWQsIGl0J3Mgc3RhdGljLiBUaGF0J3MgYSBuby1nbyBiYXNlZCBvbiB0aGUgcHJlZmVyZW5jZSBvdXRsaW5lZC4gYGtlcm5lbF9jbG9uZWAgaXQgaXMuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEkgZ2V0IGEgZ29vZCB0cmFjZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgLiBMZXQgbWUgcHVsbCB1cCB0aGUgS2NvbmZpZyBmaWxl4oCmIFJpZ2h0LiBJdCBkZXBlbmRzIG9uIGBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQsIGltcG9ydGFudGx5LCBpdCBoYXMgYW4gYXJjaC1zcGVjaWZpYyBkZXBlbmRlbmN5OiBpdCBuZWVkcyB0byBiZSAqIVg4Nl8zMiB8fCAhQ0NfT1BUSU1JWkVfRk9SX1NJWkUqXG5cblNvLCBJJ2xsIG5lZWQgdG8gZW5hYmxlIGBGVU5DVElPTl9UUkFDRVJgIGFsb25nc2lkZSBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCB0byBnZXQgYSBwcm9wZXIgdHJhY2UuIEdvb2QgdG8ga25vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6NTIuOTkyMDUwMDYyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUxNzE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlVOQ1RJT05fVFJBQ0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTIyNj1jb25maWcgQk9PVFRJTUVfVFJBQ0lOR1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMjM0LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjIzNTpjb25maWcgRlVOQ1RJT05fVFJBQ0VSXFxua2VybmVsL3RyYWNlL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBUcmFjZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjUzLjAzOTU3NjEyMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTEwMzM5MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgRlVOQ1RJT05fVFJBQ0VSYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgYEZVTkNUSU9OX1RSQUNFUmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBsaWJyYXJpZXMgcmVseSBvbiBpdCwgYW5kIGNvbnZlcnNlbHksIHdoYXQgaXQgcmVsaWVzIG9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgb3IgdXBkYXRlcywgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBoaWRkZW4gXCJnb3RjaGFzXCIgbHVya2luZyB3aXRoaW4gaXRzIGRlcGVuZGVuY3kgdHJlZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUsIGlzb2xhdGVkIG1vZHVsZSwgb3Igc29tZXRoaW5nIGRlZXBseSBpbnRlcndvdmVuIGludG8gdGhlIHN5c3RlbSdzIGNvcmU/IFRoZSBjb21wbGV4aXR5IGhlcmUgaXMgZ29pbmcgdG8gZGljdGF0ZSBhIGxvdCBvZiBteSBhcHByb2FjaCB0byB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjU1Ljk0OTkxOTA4NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdGNvbmZpZyBGVU5DVElPTl9UUkFDRVJcXG4gMjM2OlxcdFxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBUcmFjZXJcXFwiXFxuIDIzNzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fVFJBQ0VSXFxuIDIzODpcXHRcXHRzZWxlY3QgS0FMTFNZTVNcXG4gMjM5OlxcdFxcdHNlbGVjdCBHRU5FUklDX1RSQUNFUlxcbiAyNDA6XFx0XFx0c2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUlxcbiAyNDE6XFx0XFx0c2VsZWN0IEdMT0JcXG4gMjQyOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAyNDM6XFx0XFx0c2VsZWN0IFRBU0tTX1JVREVfUkNVXFxuIDI0NDpcXHRcXHRoZWxwXFxuIDI0NTpcXHRcXHQgIEVuYWJsZSB0aGUga2VybmVsIHRvIHRyYWNlIGV2ZXJ5IGtlcm5lbCBmdW5jdGlvbi4gVGhpcyBpcyBkb25lXFxuIDI0NjpcXHRcXHQgIGJ5IHVzaW5nIGEgY29tcGlsZXIgZmVhdHVyZSB0byBpbnNlcnQgYSBzbWFsbCwgNS1ieXRlIE5vLU9wZXJhdGlvblxcbiAyNDc6XFx0XFx0ICBpbnN0cnVjdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IGtlcm5lbCBmdW5jdGlvbiwgd2hpY2ggTk9QXFxuIDI0ODpcXHRcXHQgIHNlcXVlbmNlIGlzIHRoZW4gZHluYW1pY2FsbHkgcGF0Y2hlZCBpbnRvIGEgdHJhY2VyIGNhbGwgd2hlblxcbiAyNDk6XFx0XFx0ICB0cmFjaW5nIGlzIGVuYWJsZWQgYnkgdGhlIGFkbWluaXN0cmF0b3IuIElmIGl0J3MgcnVudGltZSBkaXNhYmxlZFxcbiAyNTA6XFx0XFx0ICAodGhlIGJvb3R1cCBkZWZhdWx0KSwgdGhlbiB0aGUgb3ZlcmhlYWQgb2YgdGhlIGluc3RydWN0aW9ucyBpcyB2ZXJ5XFxuIDI1MTpcXHRcXHQgIHNtYWxsIGFuZCBub3QgbWVhc3VyYWJsZSBldmVuIGluIG1pY3JvLWJlbmNobWFya3MgKGF0IGxlYXN0IG9uXFxuIDI1MjpcXHRcXHQgIHg4NiwgYnV0IG1heSBoYXZlIGltcGFjdCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzKS5cXG4gMjUzOlxcdFxcbiAyNTQ6XFx0Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDo1NS45NTAwMjU0MzNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3OTQwMzYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdHJhY2luZy4gU28sIGZyb20gd2hhdCBJJ20gc2VlaW5nLCBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgYXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIGluIHF1ZXN0aW9uLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLml0IGZlZWxzIGxpa2UgdGhlcmUncyBzb21ldGhpbmcgbWlzc2luZywgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBBaCwgcmlnaHQhIGBGVFJBQ0VgIGlzIHR5cGljYWxseSB0aGUgb3ZlcmFyY2hpbmcsIHRvcC1sZXZlbCBjb25maWcgdGhhdCBnb3Zlcm5zIHRoZSBlbnRpcmUgdHJhY2luZyBzdWJzeXN0ZW0uIEl0J3MgdGhlIGJpZyBwaWN0dXJlLiBUaGF0IG1lYW5zIGBGVU5DVElPTl9UUkFDRVJgIGFuZCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBhcmUgcHJvYmFibHkgbW9yZSBzcGVjaWZpYyBmZWF0dXJlcyBvciBtb2R1bGVzICp3aXRoaW4qIHRoZSBicm9hZGVyIGBGVFJBQ0VgIGZyYW1ld29yay4gTmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhhdCBoaWVyYXJjaHkgc3RyYWlnaHQsIG9yIEknbGwgZ2V0IGxvc3QgaW4gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODYzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDo1OS4wMjk0MzE5MTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjA2OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVFJBQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MTk4PWNvbmZpZyBUUkFDSU5HX1NVUFBPUlRcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIwMy1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyMDQ6bWVudWNvbmZpZyBGVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDUtXFx0Ym9vbCBcXFwiVHJhY2Vyc1xcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTU4OD1jb25maWcgRU5BQkxFX0RFRkFVTFRfVFJBQ0VSU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctNTk2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjU5Nzpjb25maWcgRlRSQUNFX1NZU0NBTExTXFxua2VybmVsL3RyYWNlL0tjb25maWctNTk4LVxcdGJvb2wgXFxcIlRyYWNlIHN5c2NhbGxzXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9ODY4PWNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzYtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODc3OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzgtXFx0Ym9vbFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODgwLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4MTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfQ0NcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODItXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODg2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfT0JKVE9PTFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4OC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTQtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODk1OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9SRUNPUkRNQ09VTlRcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTYtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MTAyMT1jb25maWcgVFJBQ0VfRVZBTF9NQVBfRklMRVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA0OC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDQ5OmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTlxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNTAtXFx0Ym9vbCBcXFwiUmVjb3JkIGZ1bmN0aW9ucyB0aGF0IHJlY3Vyc2UgaW4gZnVuY3Rpb24gdHJhY2luZ1xcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjItXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTA2Mzpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05fU0laRVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjQtXFx0aW50IFxcXCJNYXggbnVtYmVyIG9mIHJlY3Vyc2VkIGZ1bmN0aW9ucyB0byByZWNvcmRcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDczLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNzQ6Y29uZmlnIEZUUkFDRV9WQUxJREFURV9SQ1VfSVNfV0FUQ0hJTkdcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc1LVxcdGJvb2wgXFxcIlZhbGlkYXRlIFJDVSBpcyBvbiBkdXJpbmcgZnRyYWNlIGV4ZWN1dGlvblxcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMDE9Y29uZmlnIEdDT1ZfUFJPRklMRV9GVFJBQ0VcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTItXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTExMzpjb25maWcgRlRSQUNFX1NFTEZURVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNC1cXHRib29sXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTE2OmNvbmZpZyBGVFJBQ0VfU1RBUlRVUF9URVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNy1cXHRib29sIFxcXCJQZXJmb3JtIGEgc3RhcnR1cCB0ZXN0IG9uIGZ0cmFjZVxcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMzY9Y29uZmlnIEVWRU5UX1RSQUNFX1RFU1RfU1lTQ0FMTFNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNDctXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTE0ODpjb25maWcgRlRSQUNFX1NPUlRfU1RBUlRVUF9URVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE0OS0gICAgICAgYm9vbCBcXFwiVmVyaWZ5IGNvbXBpbGUgdGltZSBzb3J0aW5nIG9mIGZ0cmFjZSBmdW5jdGlvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjU5LjA3OTA0NDk0M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY4NzE0NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcywgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYEZUUkFDRWAgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEZUUkFDRWAuIEl0J3MgY3J1Y2lhbCwgd2hlbiBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gYXMgcG93ZXJmdWwgYW5kIGNvbXBsZXggYXMgdGhpcywgdG8gdW5kZXJzdGFuZCBpdHMgZm91bmRhdGlvbnMgYW5kIHdoYXQgaXQgcmVsaWVzIHVwb24uIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgd2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cywgbGlicmFyaWVzLCBvciBzeXN0ZW0gY2FsbHMgYEZUUkFDRWAgaXMgdGV0aGVyZWQgdG8uIFRoaXMgaXMgdGhlIGJlZHJvY2sgb2YgbXkgaW52ZXN0aWdhdGlvbi4gQXJlIHRoZXJlIGFueSBsaWJyYXJpZXMgYmVpbmcgdXNlZD8gTWF5YmUgc29tZSBtb2R1bGUgZGVwZW5kZW5jaWVzPyBJdCBpcyBpbXBvcnRhbnQgdGhhdCBJIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMgc28gSSB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLCBhbmQgaG93IG1vZGlmaWNhdGlvbnMgY291bGQgcmlwcGxlIG91dHdhcmRzLiBHb3R0YSBjaGFydCB0aGlzIG91dCB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBoaWNjdXBzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6MDIuNTQ3NzYzMTM4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDQsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDQ6XFx0bWVudWNvbmZpZyBGVFJBQ0VcXG4gMjA1OlxcdFxcdGJvb2wgXFxcIlRyYWNlcnNcXFwiXFxuIDIwNjpcXHRcXHRkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVFxcbiAyMDc6XFx0XFx0ZGVmYXVsdCB5IGlmIERFQlVHX0tFUk5FTFxcbiAyMDg6XFx0XFx0aGVscFxcbiAyMDk6XFx0XFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxcbiAyMTA6XFx0XFxuIDIxMTpcXHRpZiBGVFJBQ0VcXG4gMjEyOlxcdFxcbiAyMTM6XFx0Y29uZmlnIFRSQUNFRlNfQVVUT01PVU5UX0RFUFJFQ0FURURcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6MDIuNTQ3OTE5MDk4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MDg4OTQ0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRlRSQUNFIEludmVzdGlnYXRpb24gZm9yIEtlcm5lbCBGdXp6aW5nKipcblxuT2theSwgc28gd2UndmUgZ290IGEgY3JpdGljYWwgYnVnIGZpeCBpbnZvbHZpbmcgYEZUUkFDRWAgdGhhdCB3ZSBuZWVkIHRvIGZ1enouIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgY29weV9wcm9jZXNzYCB3aGVuIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBpcyBhY3RpdmUuIFRoZSBmaXggY2xldmVybHkgcmVhcnJhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHQtXHUwMDNlcmV0X3N0YWNrYCB0byBwcmV2ZW50IHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGZyZWVkIGJ5IGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCBpZiBgY29weV9wcm9jZXNzYCBmYWlscy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQsIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBidWcgdGhhdCBkZXNlcnZlcyBvdXIgYXR0ZW50aW9uLlxuXG5XZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIHRoaXMgYW5kIHRodXMsIHNob3VsZCBiZSBmdXp6ZWQhXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB3aGF0J3MgdGhlIGVudHJ5IHBvaW50IHdlIHNob3VsZCBmb2N1cyBvbj8gSXQgc2VlbXMgdGhlIHBhdGNoIGZvY3VzZXMgb24gYGtlcm5lbF9jbG9uZWAsIGJ1dCBkb2VzIGl0IGNvbnNpZGVyIGFsbCBwYXRocz8gV2hhdCBhYm91dCB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlczogYHN5c19jbG9uZWAsIGBzeXNfY2xvbmUzYCwgYHN5c19mb3JrYCwgYW5kIGBzeXNfdmZvcmtgPyBBaCwgcmlnaHQhIGBrZXJuZWxfY2xvbmVgIGlzIHRoZSBjb21tb24gZnVuY3Rpb24gdGhhdCBhbGwgb2YgdGhvc2UgdWx0aW1hdGVseSBpbnZva2UuIFNvLCBga2VybmVsX2Nsb25lYCBpcyBhIHNtYXJ0IGFuZCBjb21wcmVoZW5zaXZlIGZvY3VzIHN5bWJvbC5cblxuTGV0J3MgZG8gYSBxdWljayBjaGVjayB0byBlbnN1cmUgd2UgaGF2ZSBhbGwgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuIFdlJ3JlIGxvb2tpbmcgYXQgYEZUUkFDRWAsIHNwZWNpZmljYWxseSBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAuIGBUUkFDSU5HX1NVUFBPUlRgIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBpcyBnb29kLiBXZSBzaG91bGQgZG91YmxlLWNoZWNrIG91ciBidWlsZCBjb25maWd1cmF0aW9uIHRvIGVuc3VyZSBgRlRSQUNFYCBhbmQgdGhlIG90aGVycyBhcmUgZW5hYmxlZCwgZXNwZWNpYWxseSBzaW5jZSBgRlRSQUNFYCBpcyBjb25kaXRpb25hbGx5IGBkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMYC5cblxuT25lIGZpbmFsIHRob3VnaHQuLi4gd2Ugc2hvdWxkIHNjYW4gdGhlIGNvZGUgYW5kIG1ha2Ugc3VyZSBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXNuJ3QgY2FsbGVkIGZyb20gYW55d2hlcmUgZWxzZS4gV2Ugd2FudCB0byBiZSBzdXJlIG91ciBmdXp6aW5nIGVmZm9ydHMgYXJlbid0IGJlaW5nIGxpbWl0ZWQgYnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMDAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NTowOC40NTY4MTc5ODJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzMwNjYwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnRyYWNlX2dyYXBoX2luaXRfdGFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQyPWV4dGVybiB0cmFjZV9mdW5jX2dyYXBoX2VudF90IGZ0cmFjZV9ncmFwaF9lbnRyeTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDMtXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDUtZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2My1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjUtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yMTQ1LVxcdCAqL1xcbmtlcm5lbC9mb3JrLmM6MjE0NjpcXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cXHRyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExMzE9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExNTktLyogQWxsb2NhdGUgYSByZXR1cm4gc3RhY2sgZm9yIG5ld2x5IGNyZWF0ZWQgdGFzayAqL1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTYwOnZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExNjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NToxMC4xMjk4OTAxOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODIyODkzMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqQW5hbHlzaXMgQ29uY2x1c2lvbjogU2V0dGluZyBSZXN1bHRzKipcblxuQWxyaWdodCwgdGhlIHB1enpsZSdzIHNvbHZlZC4gSXQgYXBwZWFycyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIHdoYXRldmVyIGl0J3MgZG9pbmcsIGlzIG9ubHkgZXZlciBjYWxsZWQgd2l0aGluIGBjb3B5X3Byb2Nlc3NgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgbXkgYW5hbHlzaXMgaXMsIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMsIGNvbXBsZXRlLiBCYXNlZCBvbiB0aGlzIG9ic2VydmF0aW9uLCBJJ20gbm93IGdvaW5nIHRvIGNvbmZpZGVudGx5IHByb2NlZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCdzIHRpbWUgdG8gY29tbXVuaWNhdGUgd2hhdCBJJ3ZlIGRpc2NvdmVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTA4LCJPdXRwdXRUb2tlbnMiOjE0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ1OjEzLjk1Mjc4ODA2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzNDk3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZUUkFDRVwiLFxuICAgIFwiRlVOQ1RJT05fVFJBQ0VSXCIsXG4gICAgXCJGVU5DVElPTl9HUkFQSF9UUkFDRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZXJuZWxfY2xvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBidWcgaW4gdGhlIGVycm9yIHBhdGggb2YgY29weV9wcm9jZXNzKCkgd2hlbiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGlzIGVuYWJsZWQuIEl0IG1vdmVzIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKSBlYXJsaWVyIHNvIHRoYXQgaWYgY29weV9wcm9jZXNzKCkgZmFpbHMsIHRoZSBwYXJlbnQncyByZXRfc3RhY2sgaXMgbm90IGluY29ycmVjdGx5IGZyZWVkIGJ5IGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKHByb2Nlc3MgY3JlYXRpb24pIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZUUkFDRVwiLFxuICAgIFwiRlVOQ1RJT05fVFJBQ0VSXCIsXG4gICAgXCJGVU5DVElPTl9HUkFQSF9UUkFDRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZXJuZWxfY2xvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBidWcgaW4gdGhlIGVycm9yIHBhdGggb2YgY29weV9wcm9jZXNzKCkgd2hlbiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGlzIGVuYWJsZWQuIEl0IG1vdmVzIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKSBlYXJsaWVyIHNvIHRoYXQgaWYgY29weV9wcm9jZXNzKCkgZmFpbHMsIHRoZSBwYXJlbnQncyByZXRfc3RhY2sgaXMgbm90IGluY29ycmVjdGx5IGZyZWVkIGJ5IGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKHByb2Nlc3MgY3JlYXRpb24pIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NToxNC4wMzQxNDUzM1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NDE2OTcyNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NToxNC4wMzQ3MjkxNTlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDM4NDExMDkwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gcHJldmVudCBhIGJ1ZyB3aGVyZSBhbiBlcnJvciBwYXRoIGluY29ycmVjdGx5IGZyZWVzIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYC4gU3BlY2lmaWNhbGx5LCBgZHVwX3Rhc2tfc3RydWN0KClgIGNvcGllcyB0aGUgcGFyZW50J3MgYHRhc2tfc3RydWN0YCwgaW5jbHVkaW5nIHRoZSBgcmV0X3N0YWNrYCBwb2ludGVyLiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhpcyBwb2ludGVyIChgdC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTGApIGFuZCBhbGxvY2F0aW5nIGEgbmV3IG9uZSBpZiB0cmFjaW5nIGlzIGFjdGl2ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGluIGBjb3B5X3Byb2Nlc3MoKWAgYmVmb3JlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKClgIGlzIGNhbGxlZCwgdGhlIGVycm9yIHBhdGggd2lsbCBldmVudHVhbGx5IGNhbGwgYGZyZWVfdGFzaygpYCwgd2hpY2ggY2FsbHMgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAuIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKClgIHdpbGwgdGhlbiBmcmVlIGB0LVxcdTAwM2VyZXRfc3RhY2tgLiBTaW5jZSBpdCB3YXMgbmV2ZXIgY2xlYXJlZCwgaXQgZnJlZXMgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLiBUaGlzIHJlc3VsdHMgaW4gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBwYXJlbnQgY29udGludWVzIHRvIHVzZSBpdHMgYHJldF9zdGFja2AsIG9yIGEgZG91YmxlIGZyZWUgd2hlbiB0aGUgcGFyZW50IGV4aXRzLlxcblxcbkJvdGggdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZSBmcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaW4gdGhpcyBidWcsIGFzIHRoZSBwb2ludGVyIGl0c2VsZiBpcyBpbml0aWFsaXplZCAoY29waWVkIGZyb20gdGhlIHBhcmVudCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NjE5NDFmOTNkYjNlMjM3NDA4MTliMDE4NWJmMDQ3Yzk5OTIwZWI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMjA6NDA6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xuaW5kZXggMWU2ODQwNGJkNzczZS4uMGQxYWQ5MmUyZDMzNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mb3JrLmNcbisrKyBiL2tlcm5lbC9mb3JrLmNcbkBAIC0yMTM5LDYgKzIxMzksMTEgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcdHAgPSBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7XG4gXHRpZiAoIXApXG4gXHRcdGdvdG8gZm9ya19vdXQ7XG4rXHQvKlxuK1x0ICogTXVzdCBydW4gYmVmb3JlIHRoZSBmaXJzdCBmYWxsaWJsZSBvcCwgc28gZXJyb3IgcGF0aHMgbmV2ZXJcbitcdCAqIGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjay5cbitcdCAqL1xuK1x0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbiBcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4gXHRpZiAocmV0dmFsKVxuIFx0XHRnb3RvIGJhZF9mb3JrX2ZyZWU7XG5AQCAtMjE2NSw4ICsyMTcwLDYgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcdCAqL1xuIFx0cC1cdTAwM2VjbGVhcl9jaGlsZF90aWQgPSAoY2xvbmVfZmxhZ3MgXHUwMDI2IENMT05FX0NISUxEX0NMRUFSVElEKSA/IGFyZ3MtXHUwMDNlY2hpbGRfdGlkIDogTlVMTDtcbiBcbi1cdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XG4tXG4gXHRydF9tdXRleF9pbml0X3Rhc2socCk7XG4gXHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2cC1cdTAwM2VibG9ja2VkX2xvY2spO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6MTQuMDM0NzI5ODM5WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzODc2NTU0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrIFBsYWNlbWVudCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW92aW5nIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIHdpdGhpbiBgY29weV9wcm9jZXNzKClgIGluIGBrZXJuZWwvZm9yay5jYC4gSW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaXQncyBiZWluZyBtb3ZlZCAqYmVmb3JlKiBgY29weV9leGVjX3N0YXRlKClgIGFuZCBvdGhlciBvcGVyYXRpb25zIHRoYXQgY2FuIHBvdGVudGlhbGx5IGZhaWwuIFRoZSBjb21tZW50IGlzIHByZXR0eSBleHBsaWNpdDogXCJNdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IGZhbGxpYmxlIG9wLCBzbyBlcnJvciBwYXRocyBuZXZlciBmcmVlIHRoZSBwYXJlbnQncyByZXRfc3RhY2suXCIgVGhhdCBzb3VuZHMgbGlrZSBhIGJ1ZyBmaXgsIGFuZCBnaXZlbiB0aGUgY29udGV4dCBJJ20gaW1tZWRpYXRlbHkgc3VzcGljaW91cyBvZiBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuXG5cbkxldCdzIGRpdmUgaW50byB3aGF0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBhY3R1YWxseSAqZG9lcyouIE15IGd1ZXNzIGlzIHRoYXQgaXQncyBpbml0aWFsaXppbmcgc29tZSBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIHRoZSBgdGFza19zdHJ1Y3RgLiBJZiBzbywgbW92aW5nIGl0IGVhcmxpZXIgbWVhbnMgdGhvc2UgZmllbGRzIGFyZSBpbml0aWFsaXplZCBldmVuIGlmIGFuIGVycm9yIG9jY3VycyBsYXRlciBpbiB0aGUgYGNvcHlfcHJvY2VzcygpYCBzZXF1ZW5jZS4gSG1tLi4uIGlmIHRoZSBlcnJvciBwYXRocyBmcmVlIGBwYCAod2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgdGhlIHJlc3VsdCBvZiBgZHVwX3Rhc2tfc3RydWN0KGN1cnJlbnQsIG5vZGUpYCDigJMgdGhlIGNvcHkgb2YgdGhlIHBhcmVudCB0YXNrKSwgdGhlbiBtYXliZSB0aG9zZSBlcnJvciBwYXRocyB3ZXJlLCBpbiB0aGUgcHJldmlvdXMgY29kZSwgZnJlZWluZyB1bmluaXRpYWxpemVkIHBvaW50ZXJzIG9yLCBtb3JlIGxpa2VseSwgcG9pbnRlcnMgKmNvcGllZCogZnJvbSB0aGUgcGFyZW50LlxuXG5BaCwgd2FpdCwgdGhhdCdzIGl0ISBgZHVwX3Rhc2tfc3RydWN0YCAqY29waWVzKiB0aGUgcGFyZW50J3MgYHRhc2tfc3RydWN0YC4gU28sIGBwLVx1MDAzZXJldF9zdGFja2Agd291bGQgYmUgYSAqY29weSogb2YgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLiBUaGUgY3J1eCBvZiBpdCBpcyB0aGF0IGlmIGFuIGVycm9yIG9jY3VycyAqYmVmb3JlKiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCAobGlrZSBgYmFkX2ZvcmtfZnJlZWApIG1pZ2h0IGNhbGwgYGZyZWVfdGFzayhwKWAsIHdoaWNoIGluIHR1cm4gY291bGQgY2FsbCBgZnJlZV90YXNrX3N0YWNrKHApYC4gSWYgYGZyZWVfdGFza19zdGFjayhwKWAgd2VyZSBjYWxsZWQsIGl0IG1pZ2h0IGZyZWUgYHAtXHUwMDNlcmV0X3N0YWNrYC4gQnV0IHRoYXQgYHJldF9zdGFja2AgaXMgYSAqY29weSogb2YgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgISBUaGVyZWZvcmUsIHRoYXQgbWVhbnMgd2UgYXJlIGZyZWVpbmcgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLCBwb3RlbnRpYWxseSBjYXVzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2l0dWF0aW9uLlxuXG5UaGF0J3MgaXQsIHRoaXMgaXMgYSB0ZXh0Ym9vayB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBidWcuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhpcywgaWYgaXQgd2FzIGVuYWJsZWQuIE15IHN1c3BpY2lvbiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB0aGUgcm9vdCBvZiBpdCB3YXMgd3JvbmcgdGhvdWdoLiBJdCdzIG1vcmUgc3VidGxlIHRoYW4gdGhhdDogaXQgaW52b2x2ZXMgYSAqY29waWVkKiBwb2ludGVyIGZyb20gdGhlIHBhcmVudCBiZWluZyBmcmVlZCBpbmNvcnJlY3RseSBkdWUgdG8gYW4gb3JkZXIgb2Ygb3BlcmF0aW9ucyBpc3N1ZS4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGlzLCBpbiBmYWN0LCB0aGUgY3J1Y2lhbCBpbml0aWFsaXphdGlvbiB0aGF0IHJlc29sdmVzIHRoaXMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NToyMi40MjIzODkxNzFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTgzNzUzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnRyYWNlX2dyYXBoX2luaXRfdGFza1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDI9ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0My1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNDQ6ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0NS1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNTY9c3RhdGljIGlubGluZSB2b2lkIHVucGF1c2VfZ3JhcGhfdHJhY2luZyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzYzLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM2NDpzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2NS1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0yMDE4PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuLS1cXG5rZXJuZWwvZm9yay5jLTIxNDUtXFx0ICovXFxua2VybmVsL2ZvcmsuYzoyMTQ2OlxcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XFxua2VybmVsL2ZvcmsuYy0yMTQ3LVxcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTEzMT12b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE1OS0vKiBBbGxvY2F0ZSBhIHJldHVybiBzdGFjayBmb3IgbmV3bHkgY3JlYXRlZCB0YXNrICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjExNjA6dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE2MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ1OjI0LjE0MDc3MDY4OVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgwMDEwMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2sqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIuIE15IGluaXRpYWwgcG9pbnQgb2YgaW50ZXJlc3QgaXMgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLCB3aGljaCBJIGJlbGlldmUgcmVzaWRlcyBpbiBga2VybmVsL3RyYWNlL2ZncmFwaC5jYC4gSSdtIGN1cmlvdXMgYWJvdXQgaG93IHRoZSBpbml0aWFsIHNldHVwIG9mIGEgdGFzayBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2luZyBmcmFtZXdvcmsuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgbWFpbiB0cmFjaW5nIGluZnJhc3RydWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBlYWNoIHRhc2sgaXMgc2V0IHVwLiBJJ20gZ29pbmcgdG8gd2FudCB0byBleGFtaW5lIGhvdyB0aGF0IGluaXRpYWxpemF0aW9uIHRpZXMgaW50byB0aGUgYnJvYWRlciB0cmFjaW5nIGNvbnRleHQgYW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgdHJhY2VyJ3MgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaG93IHRhc2tzIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIG1haW4gdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gSSBhbHNvIGV4cGVjdCB0byBzZWUgaG93IGl0IHBvdGVudGlhbGx5IG1hbmFnZXMgYW55IHNwZWNpZmljIHBlci10YXNrIHRyYWNpbmcgZmxhZ3Mgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSXQncyB0aW1lIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBleGVjdXRpb24gZmxvdyB3aXRoaW4gdGhlIGxhcmdlciB0cmFjaW5nIHNjaGVtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ1OjI3LjIyMDc4ODYzOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2ZncmFwaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTk6XFx0LyogQWxsb2NhdGUgYSByZXR1cm4gc3RhY2sgZm9yIG5ld2x5IGNyZWF0ZWQgdGFzayAqL1xcbjExNjA6XFx0dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4xMTYxOlxcdHtcXG4xMTYyOlxcdFxcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdXNlIHRoZSBwYXJlbnQgcmV0X3N0YWNrICovXFxuMTE2MzpcXHRcXHR0LVxcdTAwM2VyZXRfc3RhY2sgPSBOVUxMO1xcbjExNjQ6XFx0XFx0dC1cXHUwMDNlY3Vycl9yZXRfc3RhY2sgPSAwO1xcbjExNjU6XFx0XFx0dC1cXHUwMDNlY3Vycl9yZXRfZGVwdGggPSAtMTtcXG4xMTY2OlxcdFxcbjExNjc6XFx0XFx0aWYgKGZ0cmFjZV9ncmFwaF9hY3RpdmUpIHtcXG4xMTY4OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjaztcXG4xMTY5OlxcdFxcbjExNzA6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRSghZmdyYXBoX3N0YWNrX2NhY2hlcCkpXFxuMTE3MTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTE3MjpcXHRcXG4xMTczOlxcdFxcdFxcdHJldF9zdGFjayA9IGttZW1fY2FjaGVfYWxsb2MoZmdyYXBoX3N0YWNrX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuMTE3NDpcXHRcXHRcXHRpZiAoIXJldF9zdGFjaylcXG4xMTc1OlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMTc2OlxcdFxcdFxcdGdyYXBoX2luaXRfdGFzayh0LCByZXRfc3RhY2spO1xcbjExNzc6XFx0XFx0fVxcbjExNzg6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NToyNy4yMjA5MzY3NzlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4OTc3ODY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBDb3JydXB0aW9uIGluIFRhc2sgQ3JlYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBhbmQgaW1tZWRpYXRlbHksIGB0LVx1MDAzZXJldF9zdGFjayA9IE5VTEw7YCBqdW1wcyBvdXQgYXQgbWUuIEkga25vdyBgZHVwX3Rhc2tfc3RydWN0YCBtYWtlcyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHBhcmVudCdzIGB0YXNrX3N0cnVjdGAsIG1lYW5pbmcgdGhlIG5ldyB0YXNrJ3MgYHAtXHUwMDNlcmV0X3N0YWNrYCBzdGFydHMgb3V0IHBvaW50aW5nIHRvIHRoZSBzYW1lIG1lbW9yeSBsb2NhdGlvbiBhcyB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AuIFRoYXQncyBub3JtYWwsIGV4cGVjdGVkIGJlaGF2aW9yIGluIGEgZm9yayBzY2VuYXJpby5cblxuVGhlIGlzc3VlIGFyaXNlcyBpZiBzb21ldGhpbmcgZ29lcyBzaWRld2F5cyBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGdldHMgYSBjaGFuY2UgdG8gcnVuLiBTcGVjaWZpY2FsbHksIGlmIGFuIGVycm9yIHBvcHMgdXAgKmJlZm9yZSogdGhhdCBpbml0aWFsaXphdGlvbiwgdGhlIGNoaWxkIHRhc2sncyBgcC1cdTAwM2VyZXRfc3RhY2tgIGRvZXNuJ3QgZ2V0IHByb3Blcmx5IHNldCB0byBgTlVMTGAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugbm93LCB3ZSdyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSBvbiB0aGUgZXJyb3IgcGF0aCwgZWl0aGVyIGBmcmVlX3Rhc2socClgIG9yIGBwdXRfdGFza19zdHJ1Y3QocClgIChvciBwb3RlbnRpYWxseSBldmVuIGBiYWRfZm9ya19mcmVlYCkgbWlnaHQgdHJ5IHRvIGZyZWUgdGhhdCB2ZXJ5IHNhbWUgYHAtXHUwMDNlcmV0X3N0YWNrYCBtZW1vcnkgdGhhdCB3YXMgc2hhcmVkIHdpdGggdGhlIHBhcmVudC5cblxuVGhpcyBzZWVtcyBsaWtlIGEgY2xhc3NpYyBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCBkZXBlbmRpbmcgb24gdGhlIGV4YWN0IHRpbWluZyBhbmQgd2hpY2ggcHJvY2VzcyBnZXRzIHRvIGl0IGZpcnN0LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgZnJlZV90YXNrYCwgYHB1dF90YXNrX3N0cnVjdGAsIGFuZCBgYmFkX2ZvcmtfZnJlZWAgaW1tZWRpYXRlbHkgdG8gY29uZmlybSBpZiB0aGF0J3Mgd2hhdCdzIGhhcHBlbmluZy4gSSdsbCBmb2N1cyBvbiBob3cgdGhleSBoYW5kbGUgYHJldF9zdGFja2AgYW5kIGFueSBhc3NvY2lhdGVkIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgY2FyZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDkxLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6MzEuNTEwNzE4ODYzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyNTYzNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZyZWVfdGFza1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jPTIxOT1zdGF0aWMgaW50IGJlaXNjc2lfZWhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc2MpXFxuLS1cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jLTI0My1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2Vzc2lvbi1cXHUwMDNlYmFja19sb2NrKTtcXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jOjI0NDpcXHRcXHQvKiBXZSBhcmUganVzdCBhYm91dCB0byBjYWxsIGlzY3NpX2ZyZWVfdGFzayBzbyB3YWl0IGZvciBpdC4gKi9cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jLTI0NS1cXHRcXHR1ZGVsYXkoNSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmYy5oPTUxNj1pbnQgYm54MmZjX3NldHVwX3Rhc2tfY3R4KHN0cnVjdCBibngyZmNfaGJhICpoYmEpO1xcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjLmg6NTE3OnZvaWQgYm54MmZjX2ZyZWVfdGFza19jdHgoc3RydWN0IGJueDJmY19oYmEgKmhiYSk7XFxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmMuaC01MTgtaW50IGJueDJmY19zZXR1cF9md19yZXNjKHN0cnVjdCBibngyZmNfaGJhICpoYmEpO1xcbi0tXFxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jPTE2OTc9c3RhdGljIHZvaWQgYm54MmZjX3VuYmluZF9hZGFwdGVyX2RldmljZXMoc3RydWN0IGJueDJmY19oYmEgKmhiYSlcXG4tLVxcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYy0xNjk5LVxcdGJueDJmY19mcmVlX2Z3X3Jlc2MoaGJhKTtcXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19mY29lLmM6MTcwMDpcXHRibngyZmNfZnJlZV90YXNrX2N0eChoYmEpO1xcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYy0xNzAxLX1cXG4tLVxcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jPTE4Njc9aW50IGJueDJmY19zZXR1cF90YXNrX2N0eChzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhKVxcbi0tXFxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmMtMTk1Ni1cXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYzoxOTU3OnZvaWQgYm54MmZjX2ZyZWVfdGFza19jdHgoc3RydWN0IGJueDJmY19oYmEgKmhiYSlcXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYy0xOTU4LXtcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jPTMxND1zdGF0aWMgaW50IGlzY3NpX3ByZXBfc2NzaV9jbWRfcGR1KHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNDQ2LS8qKlxcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOjQ0NzogKiBpc2NzaV9mcmVlX3Rhc2sgLSBmcmVlIGEgdGFza1xcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTQ0OC0gKiBAdGFzazogaXNjc2kgY21kIHRhc2tcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTQ1My0gKi9cXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYzo0NTQ6c3RhdGljIHZvaWQgaXNjc2lfZnJlZV90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKVxcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTQ1NS17XFxuLS1cXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz00OTk9dm9pZCBfX2lzY3NpX3B1dF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNTAxLVxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnRhc2stXFx1MDAzZXJlZmNvdW50KSlcXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYzo1MDI6XFx0XFx0aXNjc2lfZnJlZV90YXNrKHRhc2spO1xcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTUwMy19XFxuLS1cXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz01MDY9dm9pZCBpc2NzaV9wdXRfdGFzayhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaylcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTUxMS1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNlc3Npb24tXFx1MDAzZWJhY2tfbG9jayk7XFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmM6NTEyOlxcdFxcdGlzY3NpX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy01MTMtXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNlc3Npb24tXFx1MDAzZWJhY2tfbG9jayk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz03MDY9aXNjc2lfYWxsb2NfbWdtdF90YXNrKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIsXFxuLS1cXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy03NzMtXFx0XFx0XFx0XFx0XFx0IFxcXCJwZHUgZm9yIG1nbXQgdGFzay5cXFxcblxcXCIpO1xcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOjc3NDpcXHRcXHRcXHRnb3RvIGZyZWVfdGFzaztcXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy03NzUtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNzkxLVxcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOjc5MjpmcmVlX3Rhc2s6XFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNzkzLVxcdGlzY3NpX3B1dF90YXNrKHRhc2spO1xcbi0tXFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmM9MjM0Nj1pbnQgaXNjc2lfZWhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc2MpXFxuLS1cXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy0yNDAzLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2Vzc2lvbi1cXHUwMDNlZWhfbXV0ZXgpO1xcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOjI0MDQ6XFx0XFx0LyogV2UgYXJlIGp1c3QgYWJvdXQgdG8gY2FsbCBpc2NzaV9mcmVlX3Rhc2sgc28gd2FpdCBmb3IgaXQuICovXFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtMjQwNS1cXHRcXHR1ZGVsYXkoSVNDU0lfQ01EX0NPTVBMX1dBSVQpO1xcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmM9NzM9c3RhdGljIHZvaWQgc2FzX2F0YV90YXNrX2RvbmUoc3RydWN0IHNhc190YXNrICp0YXNrKVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtMTUxLXFjX2FscmVhZHlfZ29uZTpcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYzoxNTI6XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYy0xNTMtfVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmM9MTU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2FzX2F0YV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtMjIwLVxcdFxcdFxcdEFTU0lHTl9TQVNfVEFTSyhxYy1cXHUwMDNlc2NzaWNtZCwgTlVMTCk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmM6MjIxOlxcdFxcdHNhc19mcmVlX3Rhc2sodGFzayk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtMjIyLVxcdFxcdHFjLVxcdTAwM2VsbGRkX3Rhc2sgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmM9NDQ3PXN0YXRpYyB2b2lkIHNhc19hdGFfaW50ZXJuYWxfYWJvcnQoc3RydWN0IHNhc190YXNrICp0YXNrKVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtNDg0LSBvdXQ6XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmM6NDg1OlxcdHNhc19mcmVlX3Rhc2sodGFzayk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtNDg2LX1cXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmM9NTY9c3RhdGljIGludCBzbXBfZXhlY3V0ZV90YXNrX3NnKHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jLTEzMi1cXHRcXHRcXHRcXHQgIHRhc2stXFx1MDAzZXRhc2tfc3RhdHVzLnN0YXQpO1xcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmM6MTMzOlxcdFxcdFxcdHNhc19mcmVlX3Rhc2sodGFzayk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYy0xMzQtXFx0XFx0XFx0dGFzayA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jLTE0MC1cXHRCVUdfT04ocmV0cnkgPT0gMyBcXHUwMDI2XFx1MDAyNiB0YXNrICE9IE5VTEwpO1xcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmM6MTQxOlxcdHNhc19mcmVlX3Rhc2sodGFzayk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYy0xNDItXFx0cmV0dXJuIHJlcztcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYz0zOT1zdHJ1Y3Qgc2FzX3Rhc2sgKnNhc19hbGxvY19zbG93X3Rhc2soZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmMtNTgtXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jOjU5OnZvaWQgc2FzX2ZyZWVfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jLTYwLXtcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYz02ODI9c3RhdGljIGludCBfX2luaXQgc2FzX2NsYXNzX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYy02ODktXFx0aWYgKCFzYXNfZXZlbnRfY2FjaGUpXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jOjY5MDpcXHRcXHRnb3RvIGZyZWVfdGFza19rbWVtO1xcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYy02OTEtXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jLTY5Mi1cXHRyZXR1cm4gMDtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmM6NjkzOmZyZWVfdGFza19rbWVtOlxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYy02OTQtXFx0a21lbV9jYWNoZV9kZXN0cm95KHNhc190YXNrX2NhY2hlKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmg9NjM9c3RydWN0IHNhc190YXNrICpzYXNfYWxsb2Nfc2xvd190YXNrKGdmcF90IGZsYWdzKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbnRlcm5hbC5oOjY0OnZvaWQgc2FzX2ZyZWVfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spO1xcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmgtNjUtXFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYz0zOD1zdGF0aWMgdm9pZCBzYXNfZW5kX3Rhc2soc3RydWN0IHNjc2lfY21uZCAqc2MsIHN0cnVjdCBzYXNfdGFzayAqdGFzaylcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTk2LVxcdEFTU0lHTl9TQVNfVEFTSyhzYywgTlVMTCk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmM6OTc6XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy05OC19XFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYz0xMDA9c3RhdGljIHZvaWQgc2FzX3Njc2lfdGFza19kb25lKHN0cnVjdCBzYXNfdGFzayAqdGFzaylcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTEyMS1cXHRcXHRwcl9kZWJ1ZyhcXFwidGFza19kb25lIGNhbGxlZCB3aXRoIG5vbiBleGlzdGluZyBTQ1NJIGNtbmQhXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzoxMjI6XFx0XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xMjMtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmM9MTYxPWVudW0gc2NzaV9xY19zdGF0dXMgc2FzX3F1ZXVlY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LFxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtMTg3LVxcdGlmIChyZXMpXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmM6MTg4OlxcdFxcdGdvdG8gb3V0X2ZyZWVfdGFzaztcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xODktXFx0cmV0dXJuIDA7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtMTkwLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jOjE5MTpvdXRfZnJlZV90YXNrOlxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTE5Mi1cXHRwcl9kZWJ1ZyhcXFwibGxkZF9leGVjdXRlX3Rhc2sgcmV0dXJuZWQ6ICVkXFxcXG5cXFwiLCByZXMpO1xcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTE5My1cXHRBU1NJR05fU0FTX1RBU0soY21kLCBOVUxMKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzoxOTQ6XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xOTUtXFx0aWYgKHJlcyA9PSAtU0FTX1FVRVVFX0ZVTEwpXFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYz05MDQ9c3RhdGljIGludCBzYXNfZXhlY3V0ZV9pbnRlcm5hbF9hYm9ydChzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtOTY4LVxcdFxcdCAgICAgICB0YXNrLVxcdTAwM2V0YXNrX3N0YXR1cy5zdGF0KTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzo5Njk6XFx0XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy05NzAtXFx0XFx0dGFzayA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy05NzItXFx0QlVHX09OKHJldHJ5ID09IFRBU0tfUkVUUlkgXFx1MDAyNlxcdTAwMjYgdGFzayAhPSBOVUxMKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzo5NzM6XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy05NzQtXFx0cmV0dXJuIHJlcztcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jPTk5Mz1pbnQgc2FzX2V4ZWN1dGVfdG1mKHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXZpY2UsIHZvaWQgKnBhcmFtZXRlcixcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTEwOTgtXFx0XFx0fVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jOjEwOTk6XFx0XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xMTAwLVxcdFxcdHRhc2sgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtMTEwNS1cXHRcXHRcXHRTQVNfQUREUihkZXZpY2UtXFx1MDAzZXNhc19hZGRyKSwgVEFTS19SRVRSWSk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmM6MTEwNjpcXHRzYXNfZnJlZV90YXNrKHRhc2spO1xcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTExMDctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTI3MjY9dm9pZCBicGZfb2JqX2ZyZWVfd29ya3F1ZXVlKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iaik7XFxuaW5jbHVkZS9saW51eC9icGYuaDoyNzI3OnZvaWQgYnBmX29ial9mcmVlX3Rhc2tfd29yayhjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCB2b2lkICpvYmopO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMjcyOC12b2lkIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopO1xcbi0tXFxuaW5jbHVkZS9saW51eC9idGYuaC01Ny0gKlxcbmluY2x1ZGUvbGludXgvYnRmLmg6NTg6ICogU0VDKFxcXCJrcmV0cHJvYmUvZnJlZV90YXNrXFxcIilcXG5pbmNsdWRlL2xpbnV4L2J0Zi5oOjU5OiAqIGludCBCUEZfUFJPRyhmcmVlX3Rhc2tfcHJvYmUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmluY2x1ZGUvbGludXgvYnRmLmgtNjAtICoge1xcbi0tXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg9NDMzPXN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX2ludmFyaWFudF9zdGF0ZShib29sIGZvcmNlKSB7fVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjQzNDpzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKSB7fVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQzNS1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oPTEyMzA9ZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7XFxuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50Lmg6MTIzMTpleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbmluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oLTEyMzItZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9kZWxheWVkX3B1dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50Lmg9MTk2Mz1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZClcXHR7IH1cXG5pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaDoxOTY0OnN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFx0eyB9XFxuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgtMTk2NS1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9kZWxheWVkX3B1dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFx0eyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaD0xMDg9aW50IGtlcm5lbF93YWl0KHBpZF90IHBpZCwgaW50ICpzdGF0KTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC0xMDktXFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg6MTEwOmV4dGVybiB2b2lkIGZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtMTExLVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg9MTI5PXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtMTU1LVxcdCAqXFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg6MTU2OlxcdCAqIGRlbGF5ZWRfZnJlZV90YXNrKCkgYWxzbyB1c2VzIC1cXHUwMDNlcmN1LCBidXQgaXQgaXMgb25seSBjYWxsZWRcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC0xNTctXFx0ICogd2hlbiBpdCBmYWlscyB0byBmb3JrIGEgcHJvY2Vzcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBub1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NTAzMz12b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbClcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzktXFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC1cXHUwMDNlcmVjb3JkLCBCUEZfVEFTS19XT1JLKSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDQwOlxcdFxcdGJwZl9vYmpfZnJlZV90YXNrX3dvcmsobWFwLVxcdTAwM2VyZWNvcmQsIHZhbCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTA0MS19XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz03OTU9dm9pZCBicGZfb2JqX2ZyZWVfd29ya3F1ZXVlKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgwMS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4MDI6dm9pZCBicGZfb2JqX2ZyZWVfdGFza193b3JrKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MDMte1xcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmM9NTc1Mz1zdGF0aWMgdm9pZCBfX2ZyZWVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtNTc5Mi1cXHQvKlxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjU3OTM6XFx0ICogcGVyZl9ldmVudF9mcmVlX3Rhc2soKSByZWxpZXMgb24gcHV0X2N0eCgpIGJlaW5nICdsYXN0JywgaW5cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy01Nzk0LVxcdCAqIHBhcnRpY3VsYXIgYWxsIHRhc2sgcmVmZXJlbmNlcyBtdXN0IGJlIGNsZWFuZWQgdXAuXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xNDcxNj12b2lkIHBlcmZfZXZlbnRfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTE0NzYyLSAqL1xcbmtlcm5lbC9ldmVudHMvY29yZS5jOjE0NzYzOnZvaWQgcGVyZl9ldmVudF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTE0NzY0LXtcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jPTE1MTI0PWludCBwZXJmX2V2ZW50X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1NjQgY2xvbmVfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xNTEzNS1cXHRpZiAocmV0KSB7XFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTUxMzY6XFx0XFx0cGVyZl9ldmVudF9mcmVlX3Rhc2soY2hpbGQpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTE1MTM3LVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5rZXJuZWwvZXhlY19zdGF0ZS5jPTEzPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza19leGVjX3N0YXRlX2NhY2hlcDtcXG5rZXJuZWwvZXhlY19zdGF0ZS5jLTE0LVxcbmtlcm5lbC9leGVjX3N0YXRlLmM6MTU6c3RhdGljIHZvaWQgX19mcmVlX3Rhc2tfZXhlY19zdGF0ZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG5rZXJuZWwvZXhlY19zdGF0ZS5jLTE2LXtcXG4tLVxcbmtlcm5lbC9leGVjX3N0YXRlLmM9MjM9dm9pZCBwdXRfdGFza19leGVjX3N0YXRlKHN0cnVjdCB0YXNrX2V4ZWNfc3RhdGUgKmV4ZWNfc3RhdGUpXFxuLS1cXG5rZXJuZWwvZXhlY19zdGF0ZS5jLTI1LVxcdGlmIChleGVjX3N0YXRlIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2ZXhlY19zdGF0ZS1cXHUwMDNlY291bnQpKVxcbmtlcm5lbC9leGVjX3N0YXRlLmM6MjY6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNmV4ZWNfc3RhdGUtXFx1MDAzZXJjdSwgX19mcmVlX3Rhc2tfZXhlY19zdGF0ZSk7XFxua2VybmVsL2V4ZWNfc3RhdGUuYy0yNy19XFxuLS1cXG5rZXJuZWwvZXhpdC5jPTkyOD12b2lkIF9fbm9yZXR1cm4gZG9fZXhpdChsb25nIGNvZGUpXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTEwNDktXFxua2VybmVsL2V4aXQuYzoxMDUwOlxcdGxvY2tkZXBfZnJlZV90YXNrKHRzayk7XFxua2VybmVsL2V4aXQuYy0xMDUxLVxcdGRvX3Rhc2tfZGVhZCgpO1xcbi0tXFxua2VybmVsL2ZvcmsuYz0xODY9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFsbG9jX3Rhc2tfc3RydWN0X25vZGUoaW50IG5vZGUpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTE5MC1cXG5rZXJuZWwvZm9yay5jOjE5MTpzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5rZXJuZWwvZm9yay5jLTE5Mi17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTUyNj12b2lkIHB1dF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxua2VybmVsL2ZvcmsuYy01MzItXFxua2VybmVsL2ZvcmsuYzo1MzM6dm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxua2VybmVsL2ZvcmsuYy01MzQte1xcbi0tXFxua2VybmVsL2ZvcmsuYy01NjEtXFx0cHV0X3Rhc2tfZXhlY19zdGF0ZShyY3VfYWNjZXNzX3BvaW50ZXIodHNrLVxcdTAwM2VleGVjX3N0YXRlKSk7XFxua2VybmVsL2ZvcmsuYzo1NjI6XFx0ZnJlZV90YXNrX3N0cnVjdCh0c2spO1xcbmtlcm5lbC9mb3JrLmMtNTYzLX1cXG5rZXJuZWwvZm9yay5jOjU2NDpFWFBPUlRfU1lNQk9MKGZyZWVfdGFzayk7XFxua2VybmVsL2ZvcmsuYy01NjUtXFxuLS1cXG5rZXJuZWwvZm9yay5jPTc4Mj12b2lkIF9fcHV0X3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxua2VybmVsL2ZvcmsuYy03OTYtXFx0c2NoZWRfY29yZV9mcmVlKHRzayk7XFxua2VybmVsL2ZvcmsuYzo3OTc6XFx0ZnJlZV90YXNrKHRzayk7XFxua2VybmVsL2ZvcmsuYy03OTgtfVxcbi0tXFxua2VybmVsL2ZvcmsuYz05MTU9c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqb3JpZywgaW50IG5vZGUpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTk1MS1cXHQgKiB0aGVuLiBVbnRpbCB0aGVuLCBmaWx0ZXIgbXVzdCBiZSBOVUxMIHRvIGF2b2lkIG1lc3NpbmcgdXBcXG5rZXJuZWwvZm9yay5jOjk1MjpcXHQgKiB0aGUgdXNhZ2UgY291bnRzIG9uIHRoZSBlcnJvciBwYXRoIGNhbGxpbmcgZnJlZV90YXNrLlxcbmtlcm5lbC9mb3JrLmMtOTUzLVxcdCAqL1xcbi0tXFxua2VybmVsL2ZvcmsuYy0xMDI5LWZyZWVfdHNrOlxcbmtlcm5lbC9mb3JrLmM6MTAzMDpcXHRmcmVlX3Rhc2tfc3RydWN0KHRzayk7XFxua2VybmVsL2ZvcmsuYy0xMDMxLVxcdHJldHVybiBOVUxMO1xcbi0tXFxua2VybmVsL2ZvcmsuYz0xOTE0PWludCBwaWRmZF9wcmVwYXJlKHN0cnVjdCBwaWQgKnBpZCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgZmlsZSAqKnJldF9maWxlKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0xOTU3LVxcbmtlcm5lbC9mb3JrLmM6MTk1ODpzdGF0aWMgdm9pZCBfX2RlbGF5ZWRfZnJlZV90YXNrKHN0cnVjdCByY3VfaGVhZCAqcmhwKVxcbmtlcm5lbC9mb3JrLmMtMTk1OS17XFxuLS1cXG5rZXJuZWwvZm9yay5jLTE5NjEtXFxua2VybmVsL2ZvcmsuYzoxOTYyOlxcdGZyZWVfdGFzayh0c2spO1xcbmtlcm5lbC9mb3JrLmMtMTk2My19XFxua2VybmVsL2ZvcmsuYy0xOTY0LVxcbmtlcm5lbC9mb3JrLmM6MTk2NTpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZGVsYXllZF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxua2VybmVsL2ZvcmsuYy0xOTY2LXtcXG5rZXJuZWwvZm9yay5jLTE5NjctXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSlcXG5rZXJuZWwvZm9yay5jOjE5Njg6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnRzay1cXHUwMDNlcmN1LCBfX2RlbGF5ZWRfZnJlZV90YXNrKTtcXG5rZXJuZWwvZm9yay5jLTE5NjktXFx0ZWxzZVxcbmtlcm5lbC9mb3JrLmM6MTk3MDpcXHRcXHRmcmVlX3Rhc2sodHNrKTtcXG5rZXJuZWwvZm9yay5jLTE5NzEtfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0yMDE4PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI2MzAtYmFkX2ZvcmtfY2xlYW51cF9wZXJmOlxcbmtlcm5lbC9mb3JrLmM6MjYzMTpcXHRwZXJmX2V2ZW50X2ZyZWVfdGFzayhwKTtcXG5rZXJuZWwvZm9yay5jLTI2MzItYmFkX2Zvcmtfc2NoZWRfY2FuY2VsX2Zvcms6XFxuLS1cXG5rZXJuZWwvZm9yay5jLTI2MzQtYmFkX2ZvcmtfY2xlYW51cF9wb2xpY3k6XFxua2VybmVsL2ZvcmsuYzoyNjM1OlxcdGxvY2tkZXBfZnJlZV90YXNrKHApO1xcbmtlcm5lbC9mb3JrLmMtMjYzNi0jaWZkZWYgQ09ORklHX05VTUFcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjY0OS1cXHRwdXRfdGFza19zdGFjayhwKTtcXG5rZXJuZWwvZm9yay5jOjI2NTA6XFx0ZGVsYXllZF9mcmVlX3Rhc2socCk7XFxua2VybmVsL2ZvcmsuYy0yNjUxLWZvcmtfb3V0Olxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jPTExNDA9c3RydWN0IHJwY190YXNrICpycGNfbmV3X3Rhc2soY29uc3Qgc3RydWN0IHJwY190YXNrX3NldHVwICpzZXR1cF9kYXRhKVxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jLTExNjAtLypcXG5uZXQvc3VucnBjL3NjaGVkLmM6MTE2MTogKiBycGNfZnJlZV90YXNrIC0gcmVsZWFzZSBycGMgdGFzayBhbmQgcGVyZm9ybSBjbGVhbnVwc1xcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMTYyLSAqXFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmMtMTE3OC0gKi9cXG5uZXQvc3VucnBjL3NjaGVkLmM6MTE3OTpzdGF0aWMgdm9pZCBycGNfZnJlZV90YXNrKHN0cnVjdCBycGNfdGFzayAqdGFzaylcXG5uZXQvc3VucnBjL3NjaGVkLmMtMTE4MC17XFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmM9MTE5MD1zdGF0aWMgdm9pZCBycGNfYXN5bmNfcmVsZWFzZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmMtMTE5My1cXG5uZXQvc3VucnBjL3NjaGVkLmM6MTE5NDpcXHRycGNfZnJlZV90YXNrKGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnBjX3Rhc2ssIHUudGtfd29yaykpO1xcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMTk1LVxcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShwZmxhZ3MpO1xcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jPTEyMDk9c3RhdGljIHZvaWQgcnBjX2ZpbmFsX3B1dF90YXNrKHN0cnVjdCBycGNfdGFzayAqdGFzayxcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMjE1LVxcdH0gZWxzZVxcbm5ldC9zdW5ycGMvc2NoZWQuYzoxMjE2OlxcdFxcdHJwY19mcmVlX3Rhc2sodGFzayk7XFxubmV0L3N1bnJwYy9zY2hlZC5jLTEyMTctfVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmg9MzY9c3RydWN0IGFhX2xhYmVsICphYV9nZXRfdGFza19sYWJlbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmgtMzgtLyoqXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmg6Mzk6ICogYWFfZnJlZV90YXNrX2N0eCAtIGZyZWUgYSB0YXNrX2N0eFxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvdGFzay5oLTQwLSAqIEBjdHg6IHRhc2tfY3R4IHRvIGZyZWUgKE1BWUJFIE5VTEwpXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmgtNDEtICovXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmg6NDI6c3RhdGljIGlubGluZSB2b2lkIGFhX2ZyZWVfdGFza19jdHgoc3RydWN0IGFhX3Rhc2tfY3R4ICpjdHgpXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmgtNDMte1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9MTEwPXN0YXRpYyB2b2lkIGFwcGFybW9yX3Rhc2tfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xMTItXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTEzOlxcdGFhX2ZyZWVfdGFza19jdHgodGFza19jdHgodGFzaykpO1xcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTExNC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmM9NTQ9aW50IEJQRl9QUk9HKHRhc2tfa2Z1bmNfYWNxdWlyZV9mcCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgY2xvbmVfZmxhZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMtNjctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jOjY4OlNFQyhcXFwia3JldHByb2JlL2ZyZWVfdGFza1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jLTY5LV9fZmFpbHVyZSBfX21zZyhcXFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX3Rhc2tfYWNxdWlyZSBpcyBub3QgYWxsb3dlZFxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jPTcwPWludCBCUEZfUFJPRyh0YXNrX2tmdW5jX2FjcXVpcmVfdW5zYWZlX2tyZXRwcm9iZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgY2xvbmVfZmxhZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMtODItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jOjgzOlNFQyhcXFwia3JldHByb2JlL2ZyZWVfdGFza1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jLTg0LV9fZmFpbHVyZSBfX21zZyhcXFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX3Rhc2tfYWNxdWlyZSBpcyBub3QgYWxsb3dlZFxcXCIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ1OjMzLjIyMzI4ODU4MVoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUzODc2OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgZnJlZV90YXNrYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBga2VybmVsL2ZvcmsuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgb2YgYGZyZWVfdGFza2AuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHRlcm1pbmF0ZWQgcHJvY2VzcyBhcmUgcmVsZWFzZWQuIEknbSBwcm9iYWJseSBsb29raW5nIGF0IG1lbW9yeSBkZWFsbG9jYXRpb24sIHBvdGVudGlhbGx5IHNpZ25hbCBoYW5kbGluZyBjbGVhbnVwLCBhbmQgbWF5YmUgc29tZSByZWxhdGVkIHRhc2sgc3RydWN0dXJlIHRpZHlpbmcuIExldCdzIHNlZSBob3cgdGhleSBkbyBpdC4gSSdtIGFudGljaXBhdGluZyBhIHdlbGwtd3JpdHRlbiBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0OTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NTozNi4yNzcxNjgzMzJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9mb3JrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTMzLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTMzOlxcdHZvaWQgZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbiA1MzQ6XFx0e1xcbiA1MzU6XFx0I2lmZGVmIENPTkZJR19TRUNDT01QXFxuIDUzNjpcXHRcXHRXQVJOX09OX09OQ0UodHNrLVxcdTAwM2VzZWNjb21wLmZpbHRlcik7XFxuIDUzNzpcXHQjZW5kaWZcXG4gNTM4OlxcdFxcdHJlbGVhc2VfdXNlcl9jcHVzX3B0cih0c2spO1xcbiA1Mzk6XFx0XFx0c2NzX3JlbGVhc2UodHNrKTtcXG4gNTQwOlxcdFxcdHNtcF90YXNrX2lwaV9tYXNrX2ZyZWUodHNrKTtcXG4gNTQxOlxcdFxcbiA1NDI6XFx0I2lmbmRlZiBDT05GSUdfVEhSRUFEX0lORk9fSU5fVEFTS1xcbiA1NDM6XFx0XFx0LypcXG4gNTQ0OlxcdFxcdCAqIFRoZSB0YXNrIGlzIGZpbmFsbHkgZG9uZSB3aXRoIGJvdGggdGhlIHN0YWNrIGFuZCB0aHJlYWRfaW5mbyxcXG4gNTQ1OlxcdFxcdCAqIHNvIGZyZWUgYm90aC5cXG4gNTQ2OlxcdFxcdCAqL1xcbiA1NDc6XFx0XFx0cmVsZWFzZV90YXNrX3N0YWNrKHRzayk7XFxuIDU0ODpcXHQjZWxzZVxcbiA1NDk6XFx0XFx0LypcXG4gNTUwOlxcdFxcdCAqIElmIHRoZSB0YXNrIGhhZCBhIHNlcGFyYXRlIHN0YWNrIGFsbG9jYXRpb24sIGl0IHNob3VsZCBiZSBnb25lXFxuIDU1MTpcXHRcXHQgKiBieSBub3cuXFxuIDU1MjpcXHRcXHQgKi9cXG4gNTUzOlxcdFxcdFdBUk5fT05fT05DRShyZWZjb3VudF9yZWFkKFxcdTAwMjZ0c2stXFx1MDAzZXN0YWNrX3JlZmNvdW50KSAhPSAwKTtcXG4gNTU0OlxcdCNlbmRpZlxcbiA1NTU6XFx0XFx0cnRfbXV0ZXhfZGVidWdfdGFza19mcmVlKHRzayk7XFxuIDU1NjpcXHRcXHRmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHRzayk7XFxuIDU1NzpcXHRcXHRhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3QodHNrKTtcXG4gNTU4OlxcdFxcdGlmICh0c2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfS1RIUkVBRClcXG4gNTU5OlxcdFxcdFxcdGZyZWVfa3RocmVhZF9zdHJ1Y3QodHNrKTtcXG4gNTYwOlxcdFxcdGJwZl90YXNrX3N0b3JhZ2VfZnJlZSh0c2spO1xcbiA1NjE6XFx0XFx0cHV0X3Rhc2tfZXhlY19zdGF0ZShyY3VfYWNjZXNzX3BvaW50ZXIodHNrLVxcdTAwM2VleGVjX3N0YXRlKSk7XFxuIDU2MjpcXHRcXHRmcmVlX3Rhc2tfc3RydWN0KHRzayk7XFxuIDU2MzpcXHR9XFxuIDU2NDpcXHRFWFBPUlRfU1lNQk9MKGZyZWVfdGFzayk7XFxuIDU2NTpcXHRcXG4gNTY2OlxcdHZvaWQgZHVwX21tX2V4ZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG4gNTY3OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6MzYuMjc3MzkzODUyWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTMwNzgwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgVGFzayBFeGl0OiBBIFF1aWNrIENoZWNrLWluKipcblxuT2theSwgc28gYGZyZWVfdGFza2AganVzdCBoaXQgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2sodHNrKWAuICBUaGF0J3MgbXkgY3VlIHRvIHF1aWNrbHkgYW5hbHl6ZSB3aGF0J3MgaGFwcGVuaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MganVzdCBtYWtlIHN1cmUgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGlzIGRvaW5nIHdoYXQgaXQgc2hvdWxkIGJlIGRvaW5nIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByb2Nlc3MuIFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UncmUgcHJvcGVybHkgZXhpdGluZyB0aGUgdHJhY2luZyBncmFwaCBjb250ZXh0IGZvciB0aGUgdGFzayBgdHNrYCBhcyB0aGUgdGFzayBpcyBiZWluZyBmcmVlZC4gTm8gc3VycHJpc2VzLCBubyBtaXNzZWQgY2xlYW4tdXAg4oCTIGp1c3QgYSByb3V0aW5lIGNoZWNrIHRvIGVuc3VyZSB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCBvbiB0YXNrIGV4aXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyMSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6MzkuMjMwNDc1NjA0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkyMzk0ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQ0PWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNDU6ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0Ni1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM2ND1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM2NTpzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2Ni1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNwdSkgeyB9XFxuLS1cXG5rZXJuZWwvZm9yay5jPTUzMz12b2lkIGZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtNTU1LVxcdHJ0X211dGV4X2RlYnVnX3Rhc2tfZnJlZSh0c2spO1xcbmtlcm5lbC9mb3JrLmM6NTU2OlxcdGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2sodHNrKTtcXG5rZXJuZWwvZm9yay5jLTU1Ny1cXHRhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3QodHNrKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTYwPXZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE3OS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE4MDp2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTgxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6NDAuOTIyODc1NjExWiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTk5NjYyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gZnRyYWNlX2dyYXBoX2V4aXRfdGFzayoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBmdW5jdGlvbi4gTGV0J3MgaGVhZCBzdHJhaWdodCB0byBga2VybmVsL3RyYWNlL2ZncmFwaC5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgaGFuZGxlcyB0aGUgZXhpdGluZyBvZiB0YXNrcyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlci4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZHluYW1pYyB0cmFjaW5nIGluZnJhc3RydWN0dXJlLCBhbmQgaG93IGl0IGF2b2lkcyBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHBhcnRpY3VsYXJseSBpbiBoaWdoLWZyZXF1ZW5jeSB0cmFjaW5nIHNjZW5hcmlvcy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRhc2sgdGVhcmRvd24gYW5kIHRyYWNpbmcgZGF0YSBmbHVzaCBvcGVyYXRpb25zLiBJJ20gYWxzbyBjdXJpb3VzIGlmIGFueSByZWNlbnQgY2hhbmdlcyBpbiB0aGUgc2NoZWR1bGVyIG9yIHRhc2sgc3RhdGUgbWFuYWdlbWVudCBoYXZlIGltcGFjdGVkIHRoaXMgZnVuY3Rpb24gYW5kIGlmIGFueSBvcHRpbWl6YXRpb25zIGNhbiBiZSBkZXJpdmVkLiBJJ2xsIGJlIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBwYXlpbmcgYXR0ZW50aW9uIHRvIGRhdGEgc3RydWN0dXJlcyBhbmQgc2lkZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg1NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ1OjQ0LjI4Mjg0NDk1OFoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2ZncmFwaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExODA6XFx0dm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4xMTgxOlxcdHtcXG4xMTgyOlxcdFxcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjayA9IHQtXFx1MDAzZXJldF9zdGFjaztcXG4xMTgzOlxcdFxcbjExODQ6XFx0XFx0dC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcXG4xMTg1OlxcdFxcdC8qIE5VTEwgbXVzdCBiZWNvbWUgdmlzaWJsZSB0byBJUlFzIGJlZm9yZSB3ZSBmcmVlIGl0OiAqL1xcbjExODY6XFx0XFx0YmFycmllcigpO1xcbjExODc6XFx0XFxuMTE4ODpcXHRcXHRpZiAocmV0X3N0YWNrKSB7XFxuMTE4OTpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFmZ3JhcGhfc3RhY2tfY2FjaGVwKSlcXG4xMTkwOlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMTkxOlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShmZ3JhcGhfc3RhY2tfY2FjaGVwLCByZXRfc3RhY2spO1xcbjExOTI6XFx0XFx0fVxcbjExOTM6XFx0fVxcbjExOTQ6XFx0XFxuMTE5NTpcXHQjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFXFxuMTE5NjpcXHRzdGF0aWMgaW50IGZncmFwaF9waWRfZnVuYyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxuMTE5NzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG4xMTk4OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuMTE5OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ1OjQ0LjI4Mjk3NjgwOFoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzU5MjgzMzI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDbGFzc2ljIEtlcm5lbCBCdWcqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGRlYWwuIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHdoYXQncyBoYXBwZW5pbmcuIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCBmcmVlcyB0aGUgYHQtXHUwMDNlcmV0X3N0YWNrYCB1c2luZyBga21lbV9jYWNoZV9mcmVlYC4gTm93LCBpZiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaGFzbid0IGJlZW4gY2FsbGVkIHlldCwgdGhlIGB0LVx1MDAzZXJldF9zdGFja2AgaXMgc3RpbGwgcG9pbnRpbmcgdG8gdGhlICpwYXJlbnQncyogYHJldF9zdGFja2AuIFNvLCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgaXMgZWZmZWN0aXZlbHkgZnJlZWluZyB0aGUgcGFyZW50J3Mgc3RhY2shIEJvb20sIGNsYXNzaWMgZG91YmxlIGZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgYnVnLlxuXG5UaGUgcGFyZW50IHRhc2ssIG9ibGl2aW91c2x5LCBpcyBnb2luZyB0byBrZWVwIHVzaW5nIGl0cyBgcmV0X3N0YWNrYCwgd2hpY2ggaXMgbm93IGZyZWVkLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBLQVNBTiBleGNlbHMgYXQgZGV0ZWN0aW5nIOKAkyBhIHVzZS1hZnRlci1mcmVlIG9yIGEgZG91YmxlLWZyZWUgc2l0dWF0aW9uLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpcyB0aGVyZSBhbHNvIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGVsZW1lbnQgaGVyZT8gTm8sIG5vdCByZWFsbHkuIFRoaXMgaW52b2x2ZXMgYSAqY29waWVkKiBwb2ludGVyIHRoYXQgc2hvdWxkJ3ZlIGJlZW4gc2V0IHRvIGBOVUxMYCBidXQgd2Fzbid0LCB3aGljaCBsZWFkcyB0byB0aGUgZG91YmxlIGZyZWUgb3IgVUFGLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJbiB0aGlzIGNhc2UsIHRoZSBtZW1vcnkgKmlzKiBpbml0aWFsaXplZCwgaXQncyB0aGUgcGFyZW50J3MgcG9pbnRlci4gVGhlIHByb2JsZW0gaXMgZnVuZGFtZW50YWxseSBpbmNvcnJlY3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGhlcmUuXG5cblRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgbGV0J3MgZG91YmxlLWNoZWNrLiBgZHVwX3Rhc2tfc3RydWN0YCBjb3BpZXMgdGhlICplbnRpcmUqIGB0YXNrX3N0cnVjdGAgZnJvbSB0aGUgcGFyZW50LiBTbywgYWxsIHRoZSBmaWVsZHMgYXJlIGluaXRpYWxpemVkIHdpdGggdGhlIHBhcmVudCdzIHZhbHVlcy4gVGhlbiwgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGNvbWVzIGFsb25nIGFuZCBzZXRzIGB0LVx1MDAzZXJldF9zdGFjayA9IE5VTExgIGFuZCBzbyBvbi4gQnV0IGlmIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCAqaXNuJ3QqIGNhbGxlZCwgYHQtXHUwMDNlcmV0X3N0YWNrYCBzdGF5cyBhcyB0aGUgcGFyZW50J3MgcG9pbnRlci4gV2hlbiBgZnJlZV90YXNrYCBnZXRzIGNhbGxlZCBvbiB0aGUgY2hpbGQgKGR1ZSB0byBhbiBlcnJvciBpbiBgY29weV9wcm9jZXNzYCksIGl0IGVuZHMgdXAgZnJlZWluZyBgdC1cdTAwM2VyZXRfc3RhY2tgLiBUaGlzIGZyZWVzIHRoZSAqcGFyZW50J3MqIGByZXRfc3RhY2tgLiBUaGUgcGFyZW50IGlzIHN0aWxsIHJ1bm5pbmcgYW5kIHdpbGwgYWNjZXNzIGl0cyBub3ctZnJlZWQgYHJldF9zdGFja2AuIFVzZS1hZnRlci1mcmVlLCBLQVNBTiBjYXRjaGVzIGl0IGltbWVkaWF0ZWx5LiBBbHNvLCBpZiB0aGUgcGFyZW50IGV4aXRzLCBpdCB3aWxsIHRyeSB0byBmcmVlIGl0cyBgcmV0X3N0YWNrYCBhZ2FpbiwgY2F1c2luZyBhIGRvdWJsZSBmcmVlLiBLQVNBTiB3aWxsIGRldGVjdCB0aGlzIGFzIHdlbGwuXG5cblRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrIGhhcHBlbmluZyBoZXJlLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UuXG5cbkxldCBtZSBsYXkgb3V0IHRoZSByZWFzb25pbmcgaW4gYSBzdHJ1Y3R1cmVkIHdheTogVGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gcHJldmVudCBhIGJ1ZyB3aGVyZSBhbiBlcnJvciBwYXRoIGZyZWVzIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYC4gU3BlY2lmaWNhbGx5LCBgZHVwX3Rhc2tfc3RydWN0KClgIGNvcGllcyB0aGUgcGFyZW50J3MgYHRhc2tfc3RydWN0YCwgaW5jbHVkaW5nIHRoZSBgcmV0X3N0YWNrYCBwb2ludGVyLiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhpcyBwb2ludGVyIChgdC1cdTAwM2VyZXRfc3RhY2sgPSBOVUxMYCkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlmIHRyYWNpbmcgaXMgYWN0aXZlLiBJZiBhbiBlcnJvciBvY2N1cnMgaW4gYGNvcHlfcHJvY2VzcygpYCBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCAoZS5nLiwgYGJhZF9mb3JrX2ZyZWVgKSB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV90YXNrKClgLCB3aGljaCBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAgd2lsbCBmcmVlIGB0LVx1MDAzZXJldF9zdGFja2AuIFNpbmNlIGl0IHdhcyBuZXZlciBjbGVhcmVkLCBpdCBmcmVlcyB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AuIFRoaXMgcmVzdWx0cyBpbiBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCBjb250aW51ZXMgdG8gdXNlIGl0cyBgcmV0X3N0YWNrYCwgb3IgYSBkb3VibGUgZnJlZSB3aGVuIHRoZSBwYXJlbnQgZXhpdHMuIEJvdGggdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZSBmcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MTUsIk91dHB1dFRva2VucyI6MzA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6NTcuODc1ODE0MjUyWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIHByZXZlbnQgYSBidWcgd2hlcmUgYW4gZXJyb3IgcGF0aCBpbmNvcnJlY3RseSBmcmVlcyB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AuIFNwZWNpZmljYWxseSwgYGR1cF90YXNrX3N0cnVjdCgpYCBjb3BpZXMgdGhlIHBhcmVudCdzIGB0YXNrX3N0cnVjdGAsIGluY2x1ZGluZyB0aGUgYHJldF9zdGFja2AgcG9pbnRlci4gYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIHRoaXMgcG9pbnRlciAoYHQtXFx1MDAzZXJldF9zdGFjayA9IE5VTExgKSBhbmQgYWxsb2NhdGluZyBhIG5ldyBvbmUgaWYgdHJhY2luZyBpcyBhY3RpdmUuIElmIGFuIGVycm9yIG9jY3VycyBpbiBgY29weV9wcm9jZXNzKClgIGJlZm9yZSBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCBpcyBjYWxsZWQsIHRoZSBlcnJvciBwYXRoIHdpbGwgZXZlbnR1YWxseSBjYWxsIGBmcmVlX3Rhc2soKWAsIHdoaWNoIGNhbGxzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKClgLiBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYCB3aWxsIHRoZW4gZnJlZSBgdC1cXHUwMDNlcmV0X3N0YWNrYC4gU2luY2UgaXQgd2FzIG5ldmVyIGNsZWFyZWQsIGl0IGZyZWVzIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYC4gVGhpcyByZXN1bHRzIGluIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGUgcGFyZW50IGNvbnRpbnVlcyB0byB1c2UgaXRzIGByZXRfc3RhY2tgLCBvciBhIGRvdWJsZSBmcmVlIHdoZW4gdGhlIHBhcmVudCBleGl0cy5cXG5cXG5Cb3RoIHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUgZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrIGludm9sdmVkIGluIHRoaXMgYnVnLCBhcyB0aGUgcG9pbnRlciBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgKGNvcGllZCBmcm9tIHRoZSBwYXJlbnQpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socClgIGVhcmxpZXIgaW4gYGNvcHlfcHJvY2VzcygpYCB0byBwcmV2ZW50IGEgYnVnIHdoZXJlIGFuIGVycm9yIHBhdGggaW5jb3JyZWN0bHkgZnJlZXMgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLiBTcGVjaWZpY2FsbHksIGBkdXBfdGFza19zdHJ1Y3QoKWAgY29waWVzIHRoZSBwYXJlbnQncyBgdGFza19zdHJ1Y3RgLCBpbmNsdWRpbmcgdGhlIGByZXRfc3RhY2tgIHBvaW50ZXIuIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKClgIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyB0aGlzIHBvaW50ZXIgKGB0LVxcdTAwM2VyZXRfc3RhY2sgPSBOVUxMYCkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlmIHRyYWNpbmcgaXMgYWN0aXZlLiBJZiBhbiBlcnJvciBvY2N1cnMgaW4gYGNvcHlfcHJvY2VzcygpYCBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV90YXNrKClgLCB3aGljaCBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAgd2lsbCB0aGVuIGZyZWUgYHQtXFx1MDAzZXJldF9zdGFja2AuIFNpbmNlIGl0IHdhcyBuZXZlciBjbGVhcmVkLCBpdCBmcmVlcyB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AuIFRoaXMgcmVzdWx0cyBpbiBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCBjb250aW51ZXMgdG8gdXNlIGl0cyBgcmV0X3N0YWNrYCwgb3IgYSBkb3VibGUgZnJlZSB3aGVuIHRoZSBwYXJlbnQgZXhpdHMuXFxuXFxuQm90aCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlIGZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayBpbnZvbHZlZCBpbiB0aGlzIGJ1ZywgYXMgdGhlIHBvaW50ZXIgaXRzZWxmIGlzIGluaXRpYWxpemVkIChjb3BpZWQgZnJvbSB0aGUgcGFyZW50KS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowppjjg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 20:07:13 +0000 UTC FinishedAt: 2026-08-22 20:45:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FTRACE", "FUNCTION_TRACER", "FUNCTION_GRAPH_TRACER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FTRACE", "FUNCTION_TRACER", "FUNCTION_GRAPH_TRACER" ], "series_id": "e9abe883-ce50-4623-9ce3-435a48f5fbe1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kernel_clone" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9UUkFDRVImIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fR1JBUEhfVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2VybmVsX2Nsb25lJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socClgIGVhcmxpZXIgaW4gYGNvcHlfcHJvY2VzcygpYCB0byBwcmV2ZW50IGEgYnVnIHdoZXJlIGFuIGVycm9yIHBhdGggaW5jb3JyZWN0bHkgZnJlZXMgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYC4gU3BlY2lmaWNhbGx5LCBgZHVwX3Rhc2tfc3RydWN0KClgIGNvcGllcyB0aGUgcGFyZW50JiMzOTtzIGB0YXNrX3N0cnVjdGAsIGluY2x1ZGluZyB0aGUgYHJldF9zdGFja2AgcG9pbnRlci4gYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIHRoaXMgcG9pbnRlciAoYHQtXHUwMDNlcmV0X3N0YWNrID0gTlVMTGApIGFuZCBhbGxvY2F0aW5nIGEgbmV3IG9uZSBpZiB0cmFjaW5nIGlzIGFjdGl2ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGluIGBjb3B5X3Byb2Nlc3MoKWAgYmVmb3JlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKClgIGlzIGNhbGxlZCwgdGhlIGVycm9yIHBhdGggd2lsbCBldmVudHVhbGx5IGNhbGwgYGZyZWVfdGFzaygpYCwgd2hpY2ggY2FsbHMgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAuIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKClgIHdpbGwgdGhlbiBmcmVlIGB0LVx1MDAzZXJldF9zdGFja2AuIFNpbmNlIGl0IHdhcyBuZXZlciBjbGVhcmVkLCBpdCBmcmVlcyB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLiBUaGlzIHJlc3VsdHMgaW4gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBwYXJlbnQgY29udGludWVzIHRvIHVzZSBpdHMgYHJldF9zdGFja2AsIG9yIGEgZG91YmxlIGZyZWUgd2hlbiB0aGUgcGFyZW50IGV4aXRzLlxuXG5Cb3RoIHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUgZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrIGludm9sdmVkIGluIHRoaXMgYnVnLCBhcyB0aGUgcG9pbnRlciBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgKGNvcGllZCBmcm9tIHRoZSBwYXJlbnQpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aCBvZiBjb3B5X3Byb2Nlc3MoKSB3aGVuIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgaXMgZW5hYmxlZC4gSXQgbW92ZXMgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpIGVhcmxpZXIgc28gdGhhdCBpZiBjb3B5X3Byb2Nlc3MoKSBmYWlscywgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2sgaXMgbm90IGluY29ycmVjdGx5IGZyZWVkIGJ5IGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKHByb2Nlc3MgY3JlYXRpb24pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzYxOTQxZjkzZGIzZTIzNzQwODE5YjAxODViZjA0N2M5OTkyMGViOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDIwOjQwOjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCAxZTY4NDA0YmQ3NzNlLi4wZDFhZDkyZTJkMzM3IDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuY1xuQEAgLTIxMzksNiAmIzQzOzIxMzksMTEgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcdHAgPSBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7XG4gXHRpZiAoIXApXG4gXHRcdGdvdG8gZm9ya19vdXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IGZhbGxpYmxlIG9wLCBzbyBlcnJvciBwYXRocyBuZXZlclxuJiM0MztcdCAqIGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbiBcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4gXHRpZiAocmV0dmFsKVxuIFx0XHRnb3RvIGJhZF9mb3JrX2ZyZWU7XG5AQCAtMjE2NSw4ICYjNDM7MjE3MCw2IEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4gXHQgKi9cbiBcdHAtXHUwMDNlY2xlYXJfY2hpbGRfdGlkID0gKGNsb25lX2ZsYWdzIFx1MDAyNiBDTE9ORV9DSElMRF9DTEVBUlRJRCkgPyBhcmdzLVx1MDAzZWNoaWxkX3RpZCA6IE5VTEw7XG4gXG4tXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xuLVxuIFx0cnRfbXV0ZXhfaW5pdF90YXNrKHApO1xuIFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnAtXHUwMDNlYmxvY2tlZF9sb2NrKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX1RSQUNFUiYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9HUkFQSF9UUkFDRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrZXJuZWxfY2xvbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgYnVnIGluIHRoZSBlcnJvciBwYXRoIG9mIGNvcHlfcHJvY2VzcygpIHdoZW4gdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBpcyBlbmFibGVkLiBJdCBtb3ZlcyBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgZWFybGllciBzbyB0aGF0IGlmIGNvcHlfcHJvY2VzcygpIGZhaWxzLCB0aGUgcGFyZW50JiMzOTtzIHJldF9zdGFjayBpcyBub3QgaW5jb3JyZWN0bHkgZnJlZWQgYnkgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAocHJvY2VzcyBjcmVhdGlvbikgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NjE5NDFmOTNkYjNlMjM3NDA4MTliMDE4NWJmMDQ3Yzk5OTIwZWI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMjA6NDA6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCAxZTY4NDA0YmQ3NzNlLi4wZDFhZDkyZTJkMzM3IDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mb3JrLmMKQEAgLTIxMzksNiAmIzQzOzIxMzksMTEgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcygKIAlwID0gZHVwX3Rhc2tfc3RydWN0KGN1cnJlbnQsIG5vZGUpOwogCWlmICghcCkKIAkJZ290byBmb3JrX291dDsKJiM0MzsJLyoKJiM0MzsJICogTXVzdCBydW4gYmVmb3JlIHRoZSBmaXJzdCBmYWxsaWJsZSBvcCwgc28gZXJyb3IgcGF0aHMgbmV2ZXIKJiM0MzsJICogZnJlZSB0aGUgcGFyZW50JiMzOTtzIHJldF9zdGFjay4KJiM0MzsJICovCiYjNDM7CWZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7CiAJcmV0dmFsID0gY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGJhZF9mb3JrX2ZyZWU7CkBAIC0yMTY1LDggJiM0MzsyMTcwLDYgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcygKIAkgKi8KIAlwLSZndDtjbGVhcl9jaGlsZF90aWQgPSAoY2xvbmVfZmxhZ3MgJmFtcDsgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQpID8gYXJncy0mZ3Q7Y2hpbGRfdGlkIDogTlVMTDsKIAotCWZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7Ci0KIAlydF9tdXRleF9pbml0X3Rhc2socCk7CiAJcmF3X3NwaW5fbG9ja19pbml0KCZhbXA7cC0mZ3Q7YmxvY2tlZF9sb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBrZXJuZWwvZm9yay5jYC4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIGl0IGludm9sdmVzIHJlcG9zaXRpb25pbmcgdGhlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO2AgY2FsbCB3aXRoaW4gdGhlIGBjb3B5X3Byb2Nlc3NgIGZ1bmN0aW9uLiBDdXJyZW50bHksIGl0JiMzOTtzIGJlaW5nIG1vdmVkIHVwIHRoZSBjYWxsIHN0YWNrLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGdvaW5nIHRvIGJlIGV4ZWN1dGVkIHJpZ2h0IGFmdGVyIGBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7YCBhbmQgYmVmb3JlIGBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO2AuCgpUaGUgcHJvdmlkZWQgY29tbWVudCBpcyBjbGVhciDigJMgdGhlIGdvYWwgaXMgdG8gZXhlY3V0ZSB0aGlzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBvcGVyYXRpb24gKmJlZm9yZSogYW55IHBvdGVudGlhbGx5IGVycm9yLXByb25lIHN0ZXBzIGFyZSB0YWtlbi4gVGhlIGltcGxpY2F0aW9uLCBvZiBjb3Vyc2UsIGlzIHRoYXQgd2Ugd2FudCB0byBlbnN1cmUgZXJyb3IgcGF0aHMgZG9uJiMzOTt0IHByZW1hdHVyZWx5IHJlbGVhc2UgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBBdm9pZGluZyByZXNvdXJjZSBsZWFrcywgZXNwZWNpYWxseSBpbiBjcml0aWNhbCBwYXRoIGZ1bmN0aW9ucyBsaWtlIGBjb3B5X3Byb2Nlc3NgLCBpcyBwYXJhbW91bnQgdG8gc3lzdGVtIHN0YWJpbGl0eS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgYWN0dWFsbHkgKmRvZXMqLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiB0byBmdWxseSBncmFzcCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNoYW5nZSBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gdHJhY2luZywgcHJvY2VzcyBjcmVhdGlvbiwgYW5kIGVycm9yIGhhbmRsaW5nLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnRyYWNlX2dyYXBoX2luaXRfdGFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2ZvcmsuYz0yMDE4PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4tLVxua2VybmVsL2ZvcmsuYy0yMTQ1LVx0ICovXG5rZXJuZWwvZm9yay5jOjIxNDY6XHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xua2VybmVsL2ZvcmsuYy0yMTQ3LVx0cmV0dmFsID0gY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBUYXNrIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGtlcm5lbCYjMzk7cyB0cmFjaW5nIG1lY2hhbmlzbXMgYWdhaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBpcyBhY3R1YWxseSBzZXQgdXAuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLiBLbm93aW5nIHRoZSBleGFjdCBsb2NhdGlvbiB3aWxsIGluZm9ybSB0aGUgc3Vic2VxdWVudCBpbnZlc3RpZ2F0aW9uLiBJIG1pZ2h0IGJlIGxvb2tpbmcgZm9yIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gYSBjcnVjaWFsIGhvb2sgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCB0byBsb2NhdGUgaXRzIGRlZmluaXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB0cmFjaW5nIHRoZSBjb250ZXh0IGluIHdoaWNoIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBpcyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnRyYWNlX2dyYXBoX2luaXRfdGFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDI9ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQzLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0NS1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjMtXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2NS1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuLS1cbmtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjE0NS1cdCAqL1xua2VybmVsL2ZvcmsuYzoyMTQ2Olx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExMzE9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTU5LS8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTYwOnZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipEaXZpbmcgaW50byB0aGUgRnVuY3Rpb24gR3JhcGggVHJhY2VyKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGluaXRpYWxpemVzIGl0c2VsZiwgc3BlY2lmaWNhbGx5IGF0IHRoZSB0YXNrIGxldmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gSSBrbm93IHRoYXQgdGhlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgYSBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQgdGhlIGBrZXJuZWwvdHJhY2UvYCBkaXJlY3Rvcnkgd2lsbCBjb250YWluIHRoZSByZWxldmFudCBjb2RlLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gb2YgZnRyYWNlLXJlbGF0ZWQgZnVuY3Rpb25zLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBsb29rIGZvciBzb21ldGhpbmcgbGlrZSBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AuIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGEgZnVuY3Rpb24gZGVkaWNhdGVkIHRvIHBlci10YXNrIGluaXRpYWxpemF0aW9uIHdpdGhpbiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LCBsZXQmIzM5O3MgZ28gY2hlY2sgYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AuIEkmIzM5O2xsIGxvb2sgZm9yIHRoYXQgZnVuY3Rpb24gZGVmaW5pdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvZmdyYXBoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTU5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTk6XHQvKiBBbGxvY2F0ZSBhIHJldHVybiBzdGFjayBmb3IgbmV3bHkgY3JlYXRlZCB0YXNrICovXG4xMTYwOlx0dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbjExNjE6XHR7XG4xMTYyOlx0XHQvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHVzZSB0aGUgcGFyZW50IHJldF9zdGFjayAqL1xuMTE2MzpcdFx0dC1cdTAwM2VyZXRfc3RhY2sgPSBOVUxMO1xuMTE2NDpcdFx0dC1cdTAwM2VjdXJyX3JldF9zdGFjayA9IDA7XG4xMTY1Olx0XHR0LVx1MDAzZWN1cnJfcmV0X2RlcHRoID0gLTE7XG4xMTY2Olx0XG4xMTY3Olx0XHRpZiAoZnRyYWNlX2dyYXBoX2FjdGl2ZSkge1xuMTE2ODpcdFx0XHR1bnNpZ25lZCBsb25nICpyZXRfc3RhY2s7XG4xMTY5Olx0XG4xMTcwOlx0XHRcdGlmIChXQVJOX09OX09OQ0UoIWZncmFwaF9zdGFja19jYWNoZXApKVxuMTE3MTpcdFx0XHRcdHJldHVybjtcbjExNzI6XHRcbjExNzM6XHRcdFx0cmV0X3N0YWNrID0ga21lbV9jYWNoZV9hbGxvYyhmZ3JhcGhfc3RhY2tfY2FjaGVwLCBHRlBfS0VSTkVMKTtcbjExNzQ6XHRcdFx0aWYgKCFyZXRfc3RhY2spXG4xMTc1Olx0XHRcdFx0cmV0dXJuO1xuMTE3NjpcdFx0XHRncmFwaF9pbml0X3Rhc2sodCwgcmV0X3N0YWNrKTtcbjExNzc6XHRcdH1cbjExNzg6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGNvcHlfcHJvY2Vzc2AgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBuYXN0eSByYWNlIGNvbmRpdGlvbiBpbiBgY29weV9wcm9jZXNzYC4gSXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIHdpbmRvdyB3aGVyZSBgY29weV9wcm9jZXNzYCBjb3VsZCBmYWlsICpiZWZvcmUqIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBnZXRzIGNhbGxlZC4gVGhhdCYjMzk7cyBhIHByb2JsZW0gYmVjYXVzZSBgZHVwX3Rhc2tfc3RydWN0YCBpcyBnb2luZyB0byBjb3B5IHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AgaW50byB0aGUgY2hpbGQmIzM5O3MgYHRhc2tfc3RydWN0YC4gSWYgdGhlIGNvcHkgZmFpbHMgZWFybHksIHRoZSBjaGlsZCYjMzk7cyBgdC0mZ3Q7cmV0X3N0YWNrYCBlbmRzIHVwIHBvaW50aW5nIHRvIHRoZSAqcGFyZW50JiMzOTtzKiBgcmV0X3N0YWNrYCDigJMgYSBwb3RlbnRpYWwgZGFuZ2xpbmcgcG9pbnRlciBzaXR1YXRpb24uCgpUaGUgZXJyb3IgaGFuZGxpbmcgaXMgd2hhdCYjMzk7cyBjcnVjaWFsIGhlcmUuIFRoZXkgYXJlIGZyZWVpbmcgdGhlIGNoaWxkJiMzOTtzIGB0YXNrX3N0cnVjdGAsIGJ1dCB3aGF0IGFib3V0IHRoZSBgcmV0X3N0YWNrYD8gSXMgaXQgZXhwbGljaXRseSBmcmVlZCwgb3IgZG9lcyB0aGUgY29kZSBsZWF2ZSBpdCBiZT8gSXQgaXMgdW5jbGVhciB3aGV0aGVyIGl0IGlzIGZyZWVkLCBvciBwb3RlbnRpYWxseSBmcmVlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcy4gTXkgY29uY2VybiBpcywgYGZyZWVfdGFza2AgaXMgaW52b2x2ZWQsIGFuZCBgZnJlZV90YXNrYCAqZG9lcyogY2FsbCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0KWAuIFNvLCBJJiMzOTt2ZSBnb3QgdG8gY2hlY2sgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoIHRoYXQgYHJldF9zdGFja2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z0cmFjZV9ncmFwaF9leGl0X3Rhc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvZmdyYXBoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNjA9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE3OS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTgwOnZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgLCBzdW1tYXJpemVkIGluIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gaXQuIFRoZSBuYW1lIGFsb25lIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGNydWNpYWwgZm9yIGhhbmRsaW5nIHRhc2sgZXhpdHMgd2l0aGluIHRoZSBgZnRyYWNlYCBncmFwaCB0cmFjZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgdHJhY2UgZXZlbnRzIHJlbGF0ZWQgdG8gYSB0YXNrJiMzOTtzIHRlcm1pbmF0aW9uLiBUaGlzIGZ1bmN0aW9uIHByb2JhYmx5IGludGVyYWN0cyB3aXRoIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiBgZnRyYWNlYCB0aGF0IHRyYWNrIHRhc2tzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHRyYWNpbmcgaW5mb3JtYXRpb24sIGFuZCB0aGF0IGluZm9ybWF0aW9uIG5lZWRzIGNsZWFuaW5nIHVwIHRvIGtlZXAgdGhlIHRyYWNlciBpbiBhIGdvb2Qgc3RhdGUuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCBleGFjdGx5IGlzIGJlaW5nIGNsZWFuZWQgdXA/IElzIHRoaXMgdGhyZWFkIHNhZmUsIGFuZCBob3c/IEhvdyBkb2VzIHRoaXMgaW50ZXJhY3Qgd2l0aCBvdGhlciB0cmFjaW5nIG1lY2hhbmlzbXMsIGxpa2UgdGhlIHBlci1DUFUgYnVmZmVycz8gSXMgaXQgY2FsbGVkIGZyb20gYSBjb250ZXh0IHRoYXQgY2FuIGJsb2NrLCBvciBpcyBpdCBkZXNpZ25lZCB0byBiZSBub24tYmxvY2tpbmcgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyB0YXNrIGV4aXQ/IEFyZSB0aGVyZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBsb29raW5nIG91dCBmb3IsIGNvbnNpZGVyaW5nIGEgdGFzayBpcywgYnkgZGVmaW5pdGlvbiwgZXhpdGluZz8gVGhpcyBraW5kIG9mIGZ1bmN0aW9uIGlzIHVzdWFsbHkgZnJhdWdodCB3aXRoIGVkZ2UgY2FzZXMhCgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyBsaWtlOgoqICAgVW5yZWdpc3RlcmluZyB0aGUgdGFzayBmcm9tIHRoZSBgZnRyYWNlYCBncmFwaCB0cmFjaW5nIHN5c3RlbS4KKiAgIFJlbGVhc2luZyBhbnkgYXNzb2NpYXRlZCBtZW1vcnkgYWxsb2NhdGVkIHNwZWNpZmljYWxseSBmb3IgdGhhdCB0YXNrLgoqICAgUG90ZW50aWFsbHkgd3JpdGluZyBmaW5hbCB0cmFjZSBldmVudHMgcmVsYXRlZCB0byB0aGUgdGFzayYjMzk7cyBsYXN0IGFjdGl2aXRpZXMuCiogICBQZXJoYXBzIHNvbWUgY291bnRlciBhZGp1c3RtZW50cywgdG8ga2VlcCB0cmFjayBvZiBhY3RpdmUgdGFza3Mgd2l0aGluIHRoZSB0cmFjZXIuCgpMZXQmIzM5O3MgcmVhZCB0aGUgY29kZSBhbmQgY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucywgYW5kIGNoZWNrIGZvciBhbnkgdW5leHBlY3RlZCBjb21wbGV4aXR5IG9yIGNsZXZlciBvcHRpbWl6YXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGNvcnJlY3RuZXNzIGJ1Z3MgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRhc2tzIGFyZSBjb25zdGFudGx5IGJlaW5nIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvZmdyYXBoLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExODA6XHR2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuMTE4MTpcdHtcbjExODI6XHRcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjayA9IHQtXHUwMDNlcmV0X3N0YWNrO1xuMTE4MzpcdFxuMTE4NDpcdFx0dC1cdTAwM2VyZXRfc3RhY2sgPSBOVUxMO1xuMTE4NTpcdFx0LyogTlVMTCBtdXN0IGJlY29tZSB2aXNpYmxlIHRvIElSUXMgYmVmb3JlIHdlIGZyZWUgaXQ6ICovXG4xMTg2Olx0XHRiYXJyaWVyKCk7XG4xMTg3Olx0XG4xMTg4Olx0XHRpZiAocmV0X3N0YWNrKSB7XG4xMTg5Olx0XHRcdGlmIChXQVJOX09OX09OQ0UoIWZncmFwaF9zdGFja19jYWNoZXApKVxuMTE5MDpcdFx0XHRcdHJldHVybjtcbjExOTE6XHRcdFx0a21lbV9jYWNoZV9mcmVlKGZncmFwaF9zdGFja19jYWNoZXAsIHJldF9zdGFjayk7XG4xMTkyOlx0XHR9XG4xMTkzOlx0fVxuMTE5NDpcdFxuMTE5NTpcdCNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VcbjExOTY6XHRzdGF0aWMgaW50IGZncmFwaF9waWRfZnVuYyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXG4xMTk3Olx0XHRcdFx0ICAgc3RydWN0IGZncmFwaF9vcHMgKmdvcHMsXG4xMTk4Olx0XHRcdFx0ICAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncylcbjExOTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgS2VybmVsIEJ1ZyBhbmQgaXRzIEZ1enppbmcgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCAqZG9lcyogaW5kZWVkIGZyZWUgYHQtJmd0O3JldF9zdGFja2AuIFRoZSBwb3RlbnRpYWwgaXNzdWUgaXMgaWYgYGNvcHlfcHJvY2Vzc2AgZmFpbHMgYmVmb3JlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBnZXRzIGNhbGxlZC4gSW4gdGhhdCBzY2VuYXJpbywgdGhlIG5ldyB0YXNrJiMzOTtzIGB0LSZndDtyZXRfc3RhY2tgIHdpbGwgaW5pdGlhbGx5IGJlIGEgY29weSBvZiB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgICh0aGFua3MgdG8gYGR1cF90YXNrX3N0cnVjdGApLiBUaGVuLCBpZiBgZnJlZV90YXNrYCBpcyBjYWxsZWQgKmJlZm9yZSogYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLCAgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIHdpbGwgbWlzdGFrZW5seSBmcmVlIHRoZSAqcGFyZW50JiMzOTtzKiBgcmV0X3N0YWNrYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUsIG9yIHdvcnNlLCBhIGRvdWJsZSBmcmVlLCBvciBhIGZyZWUgb2YgYW4gaW4tdXNlIG9iamVjdCwgd2FpdGluZyB0byBoYXBwZW4uCgpTaG91bGQgSSBib3RoZXIgZnV6emluZyB0aGlzPyBUaGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDoganVzdCBtb3ZlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3NgLiBJdCYjMzk7cyBhIGJ1ZyBmaXggZm9yIGFuIGVycm9yL3JhY2UgY29uZGl0aW9uIHdpdGhpbiBgY29weV9wcm9jZXNzYCwgYW5kIGl0IHNob3VsZG4mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBjaGFuZ2VzLiBJdCYjMzk7cyBqdXN0IGEgbWF0dGVyIG9mIHRoZSBvcmRlciBvZiBpbml0aWFsaXphdGlvbi4KCldhaXQsIGlzIGl0IGEgcHVyZSBidWcgZml4PyBUaGUgcHJvbXB0IHRlbGxzIG1lIHRvIGNvbnNpZGVyIGlmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gIFNpbmNlIGl04oCZcyBhIG1vZGlmaWNhdGlvbiB0byBgY29weV9wcm9jZXNzYCBpbiBga2VybmVsL2ZvcmsuY2AsIHRoYXQmIzM5O3MgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gIFRoZXJlZm9yZSwgaXQmIzM5O3Mgd29ydGggZnV6emluZyEgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgd2hlcmUgZG8gSSBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnRzPyAgYGNvcHlfcHJvY2Vzc2AgaXRzZWxmIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBrZXJuZWxfY2xvbmVgLCB3aGljaCBpbiB0dXJuIGdldHMgY2FsbGVkIGJ5IGBzeXNfY2xvbmVgLCBgc3lzX2ZvcmtgLCBgc3lzX3Zmb3JrYCwgZXRjLiBUaGUgcHJvbXB0IHdhcm5zIGFnYWluc3QgbGlzdGluZyBob3QtcGF0aCBnZW5lcmljIGZ1bmN0aW9ucywgc28gSSB3YW50IHRvIGJlIG1vcmUgc3BlY2lmaWMuIGBzeXNfY2xvbmVgLCBgc3lzX2ZvcmtgLCBhbmQgYHN5c19jbG9uZTNgICphcmUqIGVudHJ5IHBvaW50cywgYnV0IHRoZXkgYXJlIHByZXR0eSBob3QtcGF0aC4gIEJ1dCwgSSBoYXZlIHRvIGZpbmQgYSB3YXkgdG8gbWFrZSBgY29weV9wcm9jZXNzYCAqZmFpbCogdG8gdHJpZ2dlciB0aGUgYnVnLiAgSSB0aGluayBJIGNhbiB0cmlnZ2VyIHRoaXMgYnkgcGFzc2luZyBpbnZhbGlkIGFyZ3VtZW50cyB0byBzb21ldGhpbmcgbGlrZSBgY2xvbmUzYCBvciBieSBoaXR0aW5nIGEgcmVzb3VyY2UgbGltaXQuICBgc3lzX2Nsb25lM2AgbWlnaHQgYmUgYSBnb29kIGNhbmRpZGF0ZSB0byBmb2N1cyBvbi4KCkNydWNpYWxseSwgdGhpcyBidWcgKm9ubHkqIG1hdGVyaWFsaXplcyBpZiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgYWN0aXZlICpvciogaWYgYHQtJmd0O3JldF9zdGFja2AgaXMgbm90IE5VTEwuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJgIGlzIGVuYWJsZWQsIGJlY2F1c2UgYHQtJmd0O3JldF9zdGFja2AgaXMgb25seSB1dGlsaXplZCB3aXRoIHRoYXQgY29uZmlnIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGVU5DVElPTl9HUkFQSF9UUkFDRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MjM1PWNvbmZpZyBGVU5DVElPTl9UUkFDRVJcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yNTMtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyNTQ6Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1RSQUNFUlxua2VybmVsL3RyYWNlL0tjb25maWctMjU1LVx0Ym9vbCBcJiMzNDtLZXJuZWwgRnVuY3Rpb24gR3JhcGggVHJhY2VyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgRnVuY3Rpb24gR3JhcGggVHJhY2VyKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBmaW5kIGl0LCBnaXZlbiB0aGlzIGlzIHRoZSBrZXJuZWwmIzM5O3MgdHJhY2luZyBzdWJzeXN0ZW0uIE5vIG5lZWQgdG8gb3ZlcnRoaW5rIGl0OyBsZXQmIzM5O3MganVzdCBnbyBzdHJhaWdodCB0aGVyZSBhbmQgdGFrZSBhIGxvb2suIFNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTQ6XHRjb25maWcgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4gMjU1Olx0XHRib29sIFwmIzM0O0tlcm5lbCBGdW5jdGlvbiBHcmFwaCBUcmFjZXJcJiMzNDtcbiAyNTY6XHRcdGRlcGVuZHMgb24gSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVJcbiAyNTc6XHRcdGRlcGVuZHMgb24gRlVOQ1RJT05fVFJBQ0VSXG4gMjU4Olx0XHRkZXBlbmRzIG9uICFYODZfMzIgfHwgIUNDX09QVElNSVpFX0ZPUl9TSVpFXG4gMjU5Olx0XHRkZWZhdWx0IHlcbiAyNjA6XHRcdGhlbHBcbiAyNjE6XHRcdCAgRW5hYmxlIHRoZSBrZXJuZWwgdG8gdHJhY2UgYSBmdW5jdGlvbiBhdCBib3RoIGl0cyByZXR1cm5cbiAyNjI6XHRcdCAgYW5kIGl0cyBlbnRyeS5cbiAyNjM6XHRcdCAgSXRzIGZpcnN0IHB1cnBvc2UgaXMgdG8gdHJhY2UgdGhlIGR1cmF0aW9uIG9mIGZ1bmN0aW9ucyBhbmRcbiAyNjQ6XHRcdCAgZHJhdyBhIGNhbGwgZ3JhcGggZm9yIGVhY2ggdGhyZWFkIHdpdGggc29tZSBpbmZvcm1hdGlvbiBsaWtlXG4gMjY1Olx0XHQgIHRoZSByZXR1cm4gdmFsdWUuIFRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBjdXJyZW50IHJldHVyblxuIDI2NjpcdFx0ICBhZGRyZXNzIG9uIHRoZSBjdXJyZW50IHRhc2sgc3RydWN0dXJlIGludG8gYSBzdGFjayBvZiBjYWxscy5cbiAyNjc6XHRcbiAyNjg6XHRjb25maWcgRlVOQ1RJT05fR1JBUEhfUkVUVkFMXG4gMjY5Olx0XHRib29sIFwmIzM0O0tlcm5lbCBGdW5jdGlvbiBHcmFwaCBSZXR1cm4gVmFsdWVcJiMzNDtcbiAyNzA6XHRcdGRlcGVuZHMgb24gSEFWRV9GVU5DVElPTl9HUkFQSF9GUkVHU1xuIDI3MTpcdFx0ZGVwZW5kcyBvbiBGVU5DVElPTl9HUkFQSF9UUkFDRVJcbiAyNzI6XHRcdGRlZmF1bHQgblxuIDI3MzpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTM0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEZ1bmN0aW9uIEdyYXBoIFRyYWNlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIGFzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBpdHMgaW50ZXJwbGF5IHdpdGggdGhlIG92ZXJhbGwgc3lzdGVtPyBBaCwgaGFuZyBvbuKApiBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLiBOb3csIEkgcmVjYWxsIHRoYXQgYmVpbmcgY2FsbGVkIHVuY29uZGl0aW9uYWxseSBkdXJpbmcgYGNvcHlfcHJvY2Vzc2AuIElzIHRoYXQgcmlnaHQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRvIGRyaWxsIGludG8gYGtlcm5lbC9mb3JrLmNgLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiBwcm9jZXNzIGNyZWF0aW9uIGxpdmVzLiBMZXQgbWUgY29uZmlybSB0aGF0IGFzc3VtcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z0cmFjZV9ncmFwaF9pbml0X3Rhc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjE0NS1cdCAqL1xua2VybmVsL2ZvcmsuYzoyMTQ2Olx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBOdWFuY2VzIG9mIENvbmRpdGlvbmFsIEJlaGF2aW9yKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBzb21ldGhpbmcgdGhhdCAqY2xhaW1zKiB0byBiZSB1bmNvbmRpdGlvbmFsLCBidXQgdGhhdCYjMzk7cyBpbW1lZGlhdGVseSBzdXNwZWN0LiBUaGUgdGVybSAmIzM0O3VuY29uZGl0aW9uYWwmIzM0OyBpbiB0aGlzIGNvbnRleHQgZmVlbHMgbGlrZSBpdCYjMzk7cyBwcmVzZW50aW5nIGEgc3VyZmFjZS1sZXZlbCBiZWhhdmlvci4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRydWUgdW5jb25kaXRpb25hbCBjb2RlIGlzIHJhcmUsIGVzcGVjaWFsbHkgaW4ga2VybmVsIGVudmlyb25tZW50cy4gQW5kIHRoZSBkZWZpbmluZyBjb25kaXRpb24/IEl0IGhpbmdlcyBvbiBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAuIFRoYXQgcmluZ3MgYSBiZWxsLi4uIEkmIzM5O3ZlIHNlZW4gdGhhdCBtYWNybyBhZmZlY3QgYSBsb3Qgb2YgdHJhY2luZyBhbmQgcHJvZmlsaW5nIGZ1bmN0aW9uYWxpdHkuIAoKTGV0IG1lIGRvdWJsZSBjaGVjayB0aGlzIGh5cG90aGVzaXMuIFRpbWUgdG8gZ28gZGlnIHRocm91Z2ggdGhlIHJlbGV2YW50IGhlYWRlci4gVGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGBpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgZnRyYWNlLCBhbmQgYnkgZXh0ZW5zaW9uLCB0aGlzICYjMzQ7dW5jb25kaXRpb25hbCYjMzQ7IGJlaGF2aW9yLCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBhbmQgcG90ZW50aWFsbHkgZ2F0ZWQuIFRoaXMgZmVlbHMgbGlrZSBpdCYjMzk7cyBnb2luZyB0byBiZSBhIGNhc2Ugb2YgdW5kZXJzdGFuZGluZyB0aGUgKnJlYWwqIGNvbmRpdGlvbnMgYmVmb3JlIEkgY2FuIGFjdHVhbGx5IHJlbHkgb24gdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdHJhY2VfZ3JhcGhfaW5pdF90YXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdHJhY2UuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDI9ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQzLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0NS1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjMtXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2NS1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGZ0cmFjZS5oJiMzOTtzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gbGluZSAxMzQ0IGFuZCB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlcyBzdXJyb3VuZGluZyBpdC4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSBzb21lIGZlYXR1cmUgb3Igb3B0aW1pemF0aW9uIGlzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIElzIGl0IGEgY29tcGlsZS10aW1lIGZlYXR1cmUgZmxhZz8gQSBjb25maWd1cmF0aW9uIG9wdGlvbj8gQmFzZWQgb24gdGhlIGNvbnRleHQsIHdoYXQmIzM5O3MgZW5hYmxlZCBvciBkaXNhYmxlZD8gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGljaCBwYXJ0cyBvZiBmdHJhY2UgYXJlIGFjdGl2ZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCB3aHkgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIG1hZGUgdGhvc2UgZGVzaWduIGRlY2lzaW9ucy4gTGV04oCZcyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnRyYWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMzU6XHRcdHJldHVybiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmtpbGxfZnRyYWNlX2dyYXBoKTtcbjEzMzY6XHR9XG4xMzM3Olx0XG4xMzM4Olx0ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX3N0b3Aodm9pZCk7XG4xMzM5Olx0XG4xMzQwOlx0LyogVGhlIGN1cnJlbnQgaGFuZGxlcnMgaW4gdXNlICovXG4xMzQxOlx0ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfcmV0X3QgZnRyYWNlX2dyYXBoX3JldHVybjtcbjEzNDI6XHRleHRlcm4gdHJhY2VfZnVuY19ncmFwaF9lbnRfdCBmdHJhY2VfZ3JhcGhfZW50cnk7XG4xMzQzOlx0XG4xMzQ0Olx0ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xuMTM0NTpcdGV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcbjEzNDY6XHRleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KTtcbjEzNDc6XHRcbjEzNDg6XHQvKiBVc2VkIGJ5IGFzc2VtYmx5LCBidXQgdG8gcXVpZXQgc3BhcnNlIHdhcm5pbmdzICovXG4xMzQ5Olx0ZXh0ZXJuIHN0cnVjdCBmdHJhY2Vfb3BzICpmdW5jdGlvbl90cmFjZV9vcDtcbjEzNTA6XHRcbjEzNTE6XHRzdGF0aWMgaW5saW5lIHZvaWQgcGF1c2VfZ3JhcGhfdHJhY2luZyh2b2lkKVxuMTM1MjpcdHtcbjEzNTM6XHRcdGF0b21pY19pbmMoXHUwMDI2Y3VycmVudC1cdTAwM2V0cmFjaW5nX2dyYXBoX3BhdXNlKTtcbjEzNTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGZ0cmFjZS5oKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYXNwZWN0IG9mIHRyYWNpbmcuIFRpbWUgdG8gcmV2aXNpdCB0aGUgY29yZSBkZWZpbml0aW9uLCBhbmQgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBlbnRyeSBwb2ludDogYGluY2x1ZGUvbGludXgvZnRyYWNlLmhgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmcm9tIHRoZSB0b3AsIGxpa2VseSB0byB6ZXJvIGluIG9uIGFueSBtYWNyb3MsIGRhdGEgc3RydWN0dXJlcywgb3IgZnVuZGFtZW50YWwgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IGFyZSByZWxldmFudCB0byB0aGUgc3BlY2lmaWMgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjZW50cmFsIGNvbnRyb2wgc3RydWN0dXJlcywgcG90ZW50aWFsbHkgc29tZSBkZXRhaWxzIG9uIHRoZSBldmVudHMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLCBvciBkZWZpbml0aW9ucyBmb3IgdGhlIHByb2JlIHBvaW50cy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnl0aGluZyB0aGF0IGRpY3RhdGVzIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaW50ZXJhY3Rpb25zLiBNeSBleHBlcnRpc2UgYWxsb3dzIG1lIHRvIHJlYWQgdGhyb3VnaCBpdCBxdWlja2x5LCB3aXRoIGZvY3VzIG9uIHRoZSBhcmNoaXRlY3R1cmUuIE5vIG5lZWQgdG8gZ2V0IGJvZ2dlZCBkb3duIGluIGRldGFpbHMgSSBhbHJlYWR5IGtub3c7IEkmIzM5O2xsIHpvb20gaW4gb24gYW55dGhpbmcgdGhhdCBzZWVtcyBub3ZlbCBvciB0aGF0IHBlcnRhaW5zIGRpcmVjdGx5IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnRyYWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMTU6XHQgKi9cbjEzMTY6XHQjZGVmaW5lIF9fbm90cmFjZV9mdW5jZ3JhcGhcdFx0bm90cmFjZVxuMTMxNzpcdFxuMTMxODpcdCNkZWZpbmUgRlRSQUNFX1JFVEZVTkNfREVQVEggNTBcbjEzMTk6XHQjZGVmaW5lIEZUUkFDRV9SRVRTVEFDS19BTExPQ19TSVpFIDMyXG4xMzIwOlx0XG4xMzIxOlx0ZXh0ZXJuIGludCByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKm9wcyk7XG4xMzIyOlx0ZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoc3RydWN0IGZncmFwaF9vcHMgKm9wcyk7XG4xMzIzOlx0XG4xMzI0Olx0LyoqXG4xMzI1Olx0ICogZnRyYWNlX2dyYXBoX2lzX2RlYWQgLSByZXR1cm5zIHRydWUgaWYgZnRyYWNlX2dyYXBoX3N0b3AoKSB3YXMgY2FsbGVkXG4xMzI2Olx0ICpcbjEzMjc6XHQgKiBmdHJhY2VfZ3JhcGhfc3RvcCgpIGlzIGNhbGxlZCB3aGVuIGEgc2V2ZXJlIGVycm9yIGlzIGRldGVjdGVkIGluXG4xMzI4Olx0ICogdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNpbmcuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBjcml0aWNhbFxuMTMyOTpcdCAqIHBhdGhzIG9mIGZ1bmN0aW9uIGdyYXBoIHRvIGtlZXAgdGhvc2UgcGF0aHMgZnJvbSBkb2luZyBhbnkgbW9yZSBoYXJtLlxuMTMzMDpcdCAqL1xuMTMzMTpcdERFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShraWxsX2Z0cmFjZV9ncmFwaCk7XG4xMzMyOlx0XG4xMzMzOlx0c3RhdGljIGlubGluZSBib29sIGZ0cmFjZV9ncmFwaF9pc19kZWFkKHZvaWQpXG4xMzM0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTUyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2Ygc29tZW9uZSBpbW1lcnNlZCBpbiB0aGVpciBmaWVsZDoKCioqRGlnZ2luZyBEZWVwZXI6IEEgTGluZS1ieS1MaW5lIFJlZmluZW1lbnQqKgoKQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIFRoaXMgaW5pdGlhbCBhbmFseXNpcyBpcyBmaW5lLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIEkmIzM5O20gbm90IHNlZWluZyB0aGUgZW50aXJlIHBpY3R1cmUuIFRvIHRydWx5IHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIHN0YXJ0IGV2ZW4gZWFybGllciBpbiB0aGUgbWF0ZXJpYWwsIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSBkYXRhLCB0aGUgb3JpZ2luYWwgb2JzZXJ2YXRpb25zLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGluc3RpbmN0IOKAkyBuZXZlciB0YWtlIHRoZSBzdXJmYWNlIGxldmVsIGZvciBncmFudGVkLiBUaGVyZSYjMzk7cyBhbHdheXMgdGhlIGNoYW5jZSB0aGF0IHRoZSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGlzIGhpZGluZyBpbiB0aGUgc2VlbWluZ2x5IGluc2lnbmlmaWNhbnQgZWFybHkgcGFydHMuIFRoYXQgaW5pdGlhbCByZWFkIG1pZ2h0IGhhdmUgYmVlbiB0b28gZm9jdXNlZCwgdG9vIGJpYXNlZCBieSB3aGF0IEkgd2FzIGV4cGVjdGluZyB0byBmaW5kLiBJdCYjMzk7cyB0aW1lIHRvIHJlLWV4YW1pbmUgdGhlIGZvdW5kYXRpb24uIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLCBhbmQgbGVhdmUgbm8gc3RvbmUgdW50dXJuZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdHJhY2UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5NTpcdFx0XHRcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XG4xMjk2Olx0XG4xMjk3Olx0c3RhdGljIGlubGluZSBpbnQgZnVuY3Rpb25fZ3JhcGhfZW50ZXIodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgZnVuYyxcbjEyOTg6XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZwLCB1bnNpZ25lZCBsb25nICpyZXRwKVxuMTI5OTpcdHtcbjEzMDA6XHRcdHJldHVybiBmdW5jdGlvbl9ncmFwaF9lbnRlcl9yZWdzKHJldCwgZnVuYywgZnAsIHJldHAsIE5VTEwpO1xuMTMwMTpcdH1cbjEzMDI6XHRcbjEzMDM6XHRzdHJ1Y3QgZnRyYWNlX3JldF9zdGFjayAqXG4xMzA0Olx0ZnRyYWNlX2dyYXBoX2dldF9yZXRfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgc2tpcCk7XG4xMzA1Olx0dW5zaWduZWQgbG9uZyBmdHJhY2VfZ3JhcGhfdG9wX3JldF9hZGRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7XG4xMzA2Olx0XG4xMzA3Olx0dW5zaWduZWQgbG9uZyBmdHJhY2VfZ3JhcGhfcmV0X2FkZHIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgKmlkeCxcbjEzMDg6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyAqcmV0cCk7XG4xMzA5Olx0dW5zaWduZWQgbG9uZyAqZmdyYXBoX2dldF90YXNrX3ZhcihzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyk7XG4xMzEwOlx0XG4xMzExOlx0LypcbjEzMTI6XHQgKiBTb21ldGltZXMgd2UgZG9uJiMzOTt0IHdhbnQgdG8gdHJhY2UgYSBmdW5jdGlvbiB3aXRoIHRoZSBmdW5jdGlvblxuMTMxMzpcdCAqIGdyYXBoIHRyYWNlciBidXQgd2Ugd2FudCB0aGVtIHRvIGtlZXAgdHJhY2VkIGJ5IHRoZSB1c3VhbCBmdW5jdGlvblxuMTMxNDpcdCAqIHRyYWNlciBpZiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGlzIG5vdCBjb25maWd1cmVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2Ygc29tZW9uZSBpbW1lcnNlZCBpbiB0aGVpciBmaWVsZDoKCioqRGlnZ2luZyBEZWVwZXI6IEEgTGluZS1ieS1MaW5lIFJlZmluZW1lbnQqKgoKQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIFRoaXMgaW5pdGlhbCBhbmFseXNpcyBpcyBmaW5lLCBidXQgSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIEkmIzM5O20gbm90IHNlZWluZyB0aGUgZW50aXJlIHBpY3R1cmUuIFRvIHRydWx5IHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIHN0YXJ0IGV2ZW4gZWFybGllciBpbiB0aGUgbWF0ZXJpYWwsIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSBkYXRhLCB0aGUgb3JpZ2luYWwgb2JzZXJ2YXRpb25zLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGluc3RpbmN0IOKAkyBuZXZlciB0YWtlIHRoZSBzdXJmYWNlIGxldmVsIGZvciBncmFudGVkLiBUaGVyZSYjMzk7cyBhbHdheXMgdGhlIGNoYW5jZSB0aGF0IHRoZSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIGlzIGhpZGluZyBpbiB0aGUgc2VlbWluZ2x5IGluc2lnbmlmaWNhbnQgZWFybHkgcGFydHMuIFRoYXQgaW5pdGlhbCByZWFkIG1pZ2h0IGhhdmUgYmVlbiB0b28gZm9jdXNlZCwgdG9vIGJpYXNlZCBieSB3aGF0IEkgd2FzIGV4cGVjdGluZyB0byBmaW5kLiBJdCYjMzk7cyB0aW1lIHRvIHJlLWV4YW1pbmUgdGhlIGZvdW5kYXRpb24uIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLCBhbmQgbGVhdmUgbm8gc3RvbmUgdW50dXJuZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdHJhY2UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI3NTpcdCAqL1xuMTI3NjpcdHN0cnVjdCBmdHJhY2VfcmV0X3N0YWNrIHtcbjEyNzc6XHRcdHVuc2lnbmVkIGxvbmcgcmV0O1xuMTI3ODpcdFx0dW5zaWduZWQgbG9uZyBmdW5jO1xuMTI3OTpcdCNpZmRlZiBIQVZFX0ZVTkNUSU9OX0dSQVBIX0ZQX1RFU1RcbjEyODA6XHRcdHVuc2lnbmVkIGxvbmcgZnA7XG4xMjgxOlx0I2VuZGlmXG4xMjgyOlx0XHR1bnNpZ25lZCBsb25nICpyZXRwO1xuMTI4MzpcdH07XG4xMjg0Olx0XG4xMjg1Olx0LypcbjEyODY6XHQgKiBQcmltYXJ5IGhhbmRsZXIgb2YgYSBmdW5jdGlvbiByZXR1cm4uXG4xMjg3Olx0ICogSXQgcmVsYXlzIG9uIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlci5cbjEyODg6XHQgKiBEZWZpbmVkIGluIGVudHJ5XzMyLzY0LlNcbjEyODk6XHQgKi9cbjEyOTA6XHRleHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTtcbjEyOTE6XHRcbjEyOTI6XHRleHRlcm4gaW50XG4xMjkzOlx0ZnVuY3Rpb25fZ3JhcGhfZW50ZXJfcmVncyh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBmdW5jLFxuMTI5NDpcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmcmFtZV9wb2ludGVyLCB1bnNpZ25lZCBsb25nICpyZXRwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAzMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoaXMuIExldCYjMzk7cyBzZWUuLi4gSSBuZWVkIHRvIHN1bW1hcml6ZSB0aGVzZSAmIzM0O3Rob3VnaHRzJiMzNDsgYXMgaWYgdGhleSB3ZXJlIG15IG93bi4gQW5kLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2UsIEkgc2hvdWxkIGFpbSBmb3IgYSBjb25jaXNlIHlldCBpbnNpZ2h0ZnVsIGV4cGxhbmF0aW9uLiBIZXJlIGdvZXM6CgoqKk15IEltbWVkaWF0ZSBUaG91Z2h0IFByb2Nlc3Mgb24gQW5hbHl6aW5nIFRoaXMgVGV4dCoqCgpBbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZ28gYmFjayB0byB0aGUgc291cmNlIHRleHQuIFNlZW1zIGxpa2UgdGhlIGFuYWx5c2lzIHdhbnRzIHRvIGxvb2sgYXQgKmV2ZW4gZWFybGllciBsaW5lcyouIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQgcG9pbnQgaXMgbm90IHRoZSBiZWdpbm5pbmcsIGJ1dCBhIGNvbnRpbnVhdGlvbiBvZiBhIGxpbmUgb2YgdGhvdWdodCwgaW4gYSBkb2N1bWVudCBvciBjb252ZXJzYXRpb24uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgdG9waWMsIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGluIHRoZXNlICYjMzQ7ZWFybGllciBsaW5lcyYjMzQ7CgpBbHJpZ2h0LCBJIGNhbiB3b3JrIHdpdGggdGhhdC4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjU1Olx0XG4xMjU2Olx0I2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVJcbjEyNTc6XHRcbjEyNTg6XHRzdHJ1Y3QgZmdyYXBoX29wcyB7XG4xMjU5Olx0XHR0cmFjZV9mdW5jX2dyYXBoX2VudF90XHRcdGVudHJ5ZnVuYztcbjEyNjA6XHRcdHRyYWNlX2Z1bmNfZ3JhcGhfcmV0X3RcdFx0cmV0ZnVuYztcbjEyNjE6XHRcdHN0cnVjdCBmdHJhY2Vfb3BzXHRcdG9wczsgLyogZm9yIHRoZSBoYXNoIGxpc3RzICovXG4xMjYyOlx0XHR2b2lkXHRcdFx0XHQqcHJpdmF0ZTtcbjEyNjM6XHRcdHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3RcdFx0c2F2ZWRfZnVuYztcbjEyNjQ6XHRcdGludFx0XHRcdFx0aWR4O1xuMTI2NTpcdH07XG4xMjY2Olx0XG4xMjY3Olx0dm9pZCAqZmdyYXBoX3Jlc2VydmVfZGF0YShpbnQgaWR4LCBpbnQgc2l6ZV9ieXRlcyk7XG4xMjY4Olx0dm9pZCAqZmdyYXBoX3JldHJpZXZlX2RhdGEoaW50IGlkeCwgaW50ICpzaXplX2J5dGVzKTtcbjEyNjk6XHR2b2lkICpmZ3JhcGhfcmV0cmlldmVfcGFyZW50X2RhdGEoaW50IGlkeCwgaW50ICpzaXplX2J5dGVzLCBpbnQgZGVwdGgpO1xuMTI3MDpcdFxuMTI3MTpcdC8qXG4xMjcyOlx0ICogU3RhY2sgb2YgcmV0dXJuIGFkZHJlc3NlcyBmb3IgZnVuY3Rpb25zXG4xMjczOlx0ICogb2YgYSB0aHJlYWQuXG4xMjc0Olx0ICogVXNlZCBpbiBzdHJ1Y3QgdGhyZWFkX2luZm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NDcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqVHJhY2luZyBgY29weV9wcm9jZXNzYCBhbmQgaXRzIGNhbGxlcnMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdGhhdCBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgY29uZmlnIG9wdGlvbi4gSSB0aGluayB0aGF0JiMzOTtzIHRoZSBvbmUgd2UgbmVlZC4gU28sIHRoYXQgbWVhbnMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBpcyBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gR290IGl0LgoKTm93LCB3aGljaCBmdW5jdGlvbiBhcmUgd2UgaW50ZXJlc3RlZCBpbj8gQWgsIGl0JiMzOTtzIGBjb3B5X3Byb2Nlc3NgLCBvZiBjb3Vyc2UuIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGBjb3B5X3Byb2Nlc3NgIGlzIGRlY2xhcmVkIHN0YXRpYywgaXNuJiMzOTt0IGl0PyBUaGF0JiMzOTtzIGdvaW5nIHRvIG1ha2UgZGlyZWN0IHRyYWNpbmcgYSBiaXQgdHJpY2t5LiBXZSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxzIHRvIHRoZSBmdW5jdGlvbiByYXRoZXIgdGhhbiB0aGUgZnVuY3Rpb24gaXRzZWxmLgoKSG1tLi4uIFdoZXJlIGRvZXMgdGhpcyBoYXBwZW4/IFRoZSBzeXN0ZW0gY2FsbCBsZXZlbC4gSXQmIzM5O3MgZWl0aGVyIGdvaW5nIHRvIGJlIGBzeXNfY2xvbmVgLCBvciBgc3lzX2Nsb25lM2AsIG9yIHBlcmhhcHMgYGtlcm5lbF9jbG9uZWA/IFRoYXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuCgpPa2F5LCB0aW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGtlcm5lbC9mb3JrLmNgIGFuZCBzZWFyY2ggZm9yIHRoYXQgYGtlcm5lbF9jbG9uZWAgZnVuY3Rpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cywgYW5kIGhvcGVmdWxseSwgZnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgYmFjayB0byBgY29weV9wcm9jZXNzYCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZXJuZWxfY2xvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjAyMS1cdFx0XHRcdFx0aW50IG5vZGUsXG5rZXJuZWwvZm9yay5jOjIwMjI6XHRcdFx0XHRcdHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbmtlcm5lbC9mb3JrLmMtMjAyMy17XG4tLVxua2VybmVsL2ZvcmsuYz0yNjc0PXN0cnVjdCB0YXNrX3N0cnVjdCAqIF9faW5pdCBmb3JrX2lkbGUoaW50IGNwdSlcbi0tXG5rZXJuZWwvZm9yay5jLTI2NzYtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG5rZXJuZWwvZm9yay5jOjI2Nzc6XHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcbmtlcm5lbC9mb3JrLmMtMjY3OC1cdFx0LmZsYWdzXHRcdD0gQ0xPTkVfVk0sXG4tLVxua2VybmVsL2ZvcmsuYy0yNjk0LS8qXG5rZXJuZWwvZm9yay5jOjI2OTU6ICogVGhpcyBpcyBsaWtlIGtlcm5lbF9jbG9uZSgpLCBidXQgc2hhdmVkIGRvd24gYW5kIHRhaWxvcmVkIHRvIGp1c3Rcbmtlcm5lbC9mb3JrLmMtMjY5Ni0gKiBjcmVhdGluZyBpb191cmluZyB3b3JrZXJzLiBJdCByZXR1cm5zIGEgY3JlYXRlZCB0YXNrLCBvciBhbiBlcnJvciBwb2ludGVyLlxuLS1cbmtlcm5lbC9mb3JrLmM9MjcwMD1zdHJ1Y3QgdGFza19zdHJ1Y3QgKmNyZWF0ZV9pb190aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgaW50IG5vZGUpXG4tLVxua2VybmVsL2ZvcmsuYy0yNzAzLVx0XHRcdCAgICAgIENMT05FX0lPfENMT05FX1ZNfENMT05FX1VOVFJBQ0VEO1xua2VybmVsL2ZvcmsuYzoyNzA0Olx0c3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzIGFyZ3MgPSB7XG5rZXJuZWwvZm9yay5jLTI3MDUtXHRcdC5mbGFnc1x0XHQ9IGZsYWdzLFxuLS1cbmtlcm5lbC9mb3JrLmMtMjcyMC0gKi9cbmtlcm5lbC9mb3JrLmM6MjcyMTpwaWRfdCBrZXJuZWxfY2xvbmUoc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxua2VybmVsL2ZvcmsuYy0yNzIyLXtcbi0tXG5rZXJuZWwvZm9yay5jPTI4MjQ9cGlkX3Qga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmtlcm5lbC9mb3JrLmMtMjgyNi17XG5rZXJuZWwvZm9yay5jOjI4Mjc6XHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcbmtlcm5lbC9mb3JrLmMtMjgyOC1cdFx0LmZsYWdzXHRcdD0gKChmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQpIFx1MDAyNiB+Q1NJR05BTCksXG4tLVxua2VybmVsL2ZvcmsuYy0yODM1LVxua2VybmVsL2ZvcmsuYzoyODM2Olx0cmV0dXJuIGtlcm5lbF9jbG9uZShcdTAwMjZhcmdzKTtcbmtlcm5lbC9mb3JrLmMtMjgzNy19XG4tLVxua2VybmVsL2ZvcmsuYz0yODQyPXBpZF90IHVzZXJfbW9kZV90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBmbGFncylcbmtlcm5lbC9mb3JrLmMtMjg0My17XG5rZXJuZWwvZm9yay5jOjI4NDQ6XHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcbmtlcm5lbC9mb3JrLmMtMjg0NS1cdFx0LmZsYWdzXHRcdD0gKChmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQpIFx1MDAyNiB+Q1NJR05BTCksXG4tLVxua2VybmVsL2ZvcmsuYy0yODUxLVxua2VybmVsL2ZvcmsuYzoyODUyOlx0cmV0dXJuIGtlcm5lbF9jbG9uZShcdTAwMjZhcmdzKTtcbmtlcm5lbC9mb3JrLmMtMjg1My19XG4tLVxua2VybmVsL2ZvcmsuYz0yODU2PVNZU0NBTExfREVGSU5FMChmb3JrKVxuLS1cbmtlcm5lbC9mb3JrLmMtMjg1OC0jaWZkZWYgQ09ORklHX01NVVxua2VybmVsL2ZvcmsuYzoyODU5Olx0c3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzIGFyZ3MgPSB7XG5rZXJuZWwvZm9yay5jLTI4NjAtXHRcdC5leGl0X3NpZ25hbCA9IFNJR0NITEQsXG4tLVxua2VybmVsL2ZvcmsuYy0yODYyLVxua2VybmVsL2ZvcmsuYzoyODYzOlx0cmV0dXJuIGtlcm5lbF9jbG9uZShcdTAwMjZhcmdzKTtcbmtlcm5lbC9mb3JrLmMtMjg2NC0jZWxzZVxuLS1cbmtlcm5lbC9mb3JrLmM9Mjg3Mj1TWVNDQUxMX0RFRklORTAodmZvcmspXG5rZXJuZWwvZm9yay5jLTI4NzMte1xua2VybmVsL2ZvcmsuYzoyODc0Olx0c3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzIGFyZ3MgPSB7XG5rZXJuZWwvZm9yay5jLTI4NzUtXHRcdC5mbGFnc1x0XHQ9IENMT05FX1ZGT1JLIHwgQ0xPTkVfVk0sXG4tLVxua2VybmVsL2ZvcmsuYy0yODc4LVxua2VybmVsL2ZvcmsuYzoyODc5Olx0cmV0dXJuIGtlcm5lbF9jbG9uZShcdTAwMjZhcmdzKTtcbmtlcm5lbC9mb3JrLmMtMjg4MC19XG4tLVxua2VybmVsL2ZvcmsuYz0yOTAxPVNZU0NBTExfREVGSU5FNShjbG9uZSwgdW5zaWduZWQgbG9uZywgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcsIG5ld3NwLFxuLS1cbmtlcm5lbC9mb3JrLmMtMjkwNi17XG5rZXJuZWwvZm9yay5jOjI5MDc6XHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcbmtlcm5lbC9mb3JrLmMtMjkwOC1cdFx0LmZsYWdzXHRcdD0gKGxvd2VyXzMyX2JpdHMoY2xvbmVfZmxhZ3MpIFx1MDAyNiB+Q1NJR05BTCksXG4tLVxua2VybmVsL2ZvcmsuYy0yOTE2LVxua2VybmVsL2ZvcmsuYzoyOTE3Olx0cmV0dXJuIGtlcm5lbF9jbG9uZShcdTAwMjZhcmdzKTtcbmtlcm5lbC9mb3JrLmMtMjkxOC19XG4tLVxua2VybmVsL2ZvcmsuYy0yOTIwLVxua2VybmVsL2ZvcmsuYzoyOTIxOnN0YXRpYyBub2lubGluZSBpbnQgY29weV9jbG9uZV9hcmdzX2Zyb21fdXNlcihzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmthcmdzLFxua2VybmVsL2ZvcmsuYy0yOTIyLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgY2xvbmVfYXJncyBfX3VzZXIgKnVhcmdzLFxuLS1cbmtlcm5lbC9mb3JrLmMtMjk2NC1cbmtlcm5lbC9mb3JrLmM6Mjk2NTpcdCprYXJncyA9IChzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3Mpe1xua2VybmVsL2ZvcmsuYy0yOTY2LVx0XHQuZmxhZ3NcdFx0PSBhcmdzLmZsYWdzLFxuLS1cbmtlcm5lbC9mb3JrLmMtMjk5NS0gKi9cbmtlcm5lbC9mb3JrLmM6Mjk5NjpzdGF0aWMgaW5saW5lIGJvb2wgY2xvbmUzX3N0YWNrX3ZhbGlkKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqa2FyZ3MpXG5rZXJuZWwvZm9yay5jLTI5OTcte1xuLS1cbmtlcm5lbC9mb3JrLmMtMzAxNS1cbmtlcm5lbC9mb3JrLmM6MzAxNjpzdGF0aWMgYm9vbCBjbG9uZTNfYXJnc192YWxpZChzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmthcmdzKVxua2VybmVsL2ZvcmsuYy0zMDE3LXtcbi0tXG5rZXJuZWwvZm9yay5jPTMwNTc9U1lTQ0FMTF9ERUZJTkUyKGNsb25lMywgc3RydWN0IGNsb25lX2FyZ3MgX191c2VyICosIHVhcmdzLCBzaXplX3QsIHNpemUpXG4tLVxua2VybmVsL2ZvcmsuYy0zMDYwLVxua2VybmVsL2ZvcmsuYzozMDYxOlx0c3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzIGthcmdzO1xua2VybmVsL2ZvcmsuYy0zMDYyLVx0cGlkX3Qgc2V0X3RpZFtNQVhfUElEX05TX0xFVkVMXTtcbi0tXG5rZXJuZWwvZm9yay5jLTMwNzctXG5rZXJuZWwvZm9yay5jOjMwNzg6XHRyZXR1cm4ga2VybmVsX2Nsb25lKFx1MDAyNmthcmdzKTtcbmtlcm5lbC9mb3JrLmMtMzA3OS19XG4tLVxua2VybmVsL2ZvcmsuYz0zMjIyPXN0YXRpYyBpbnQgdW5zaGFyZV9mZCh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MsIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKipuZXdfZmRwKVxuLS1cbmtlcm5lbC9mb3JrLmMtMzIzOS0gKiBjb250ZXh0IHdoaWNoIHdhcyBvcmlnaW5hbGx5IHNoYXJlZCB1c2luZyBjbG9uZS4gIGNvcHlfKlxua2VybmVsL2ZvcmsuYzozMjQwOiAqIGZ1bmN0aW9ucyB1c2VkIGJ5IGtlcm5lbF9jbG9uZSgpIGNhbm5vdCBiZSB1c2VkIGhlcmUgZGlyZWN0bHlcbmtlcm5lbC9mb3JrLmMtMzI0MS0gKiBiZWNhdXNlIHRoZXkgbW9kaWZ5IGFuIGluYWN0aXZlIHRhc2tfc3RydWN0IHRoYXQgaXMgYmVpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENsb25pbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIGZpZWxkIGNvbnNpZGVyYWJseSB3aGVuIGxvb2tpbmcgYXQgdGhlc2UgY2xvbmluZyBmdW5jdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBrZXJuZWxfY2xvbmVgIGFuZCBgc3lzX2Nsb25lM2AgYXJlIHRoZSBtYWluIHBsYXllcnMuIE5vdywgSSBrbm93IGBzeXNfY2xvbmUzYCBpcyBhIHN5c2NhbGw7IEnigJltIHByZXR0eSBmYW1pbGlhciB3aXRoIHRoYXQgb25lLiBCdXQsIGBrZXJuZWxfY2xvbmVgIOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlIGVudHJ5IHBvaW50LCB0aGUgb25lIHRoYXQga2lja3MgZXZlcnl0aGluZyBvZmYuIExldCYjMzk7cyBzZWUuLi4geWVwLCBgcGlkX3Qga2VybmVsX2Nsb25lKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylgLiBOb3Qgc3RhdGljLiBQZXJmZWN0LiBUaGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLgoKSSBkaWQgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGNvcHlfcHJvY2Vzc2AsIGFuZCB3aGlsZSB0aGF0JiMzOTtzIHRoZSBvbmUgdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBpdCYjMzk7cyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBuby1nbyBiYXNlZCBvbiB0aGUgcHJlZmVyZW5jZSBvdXRsaW5lZC4gYGtlcm5lbF9jbG9uZWAgaXQgaXMuCgpOb3csIHRvIG1ha2Ugc3VyZSBJIGdldCBhIGdvb2QgdHJhY2UsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gTGV0IG1lIHB1bGwgdXAgdGhlIEtjb25maWcgZmlsZeKApiBSaWdodC4gSXQgZGVwZW5kcyBvbiBgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVJgLCBgRlVOQ1RJT05fVFJBQ0VSYCwgYW5kLCBpbXBvcnRhbnRseSwgaXQgaGFzIGFuIGFyY2gtc3BlY2lmaWMgZGVwZW5kZW5jeTogaXQgbmVlZHMgdG8gYmUgKiFYODZfMzIgfHwgIUNDX09QVElNSVpFX0ZPUl9TSVpFKgoKU28sIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBGVU5DVElPTl9UUkFDRVJgIGFsb25nc2lkZSBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCB0byBnZXQgYSBwcm9wZXIgdHJhY2UuIEdvb2QgdG8ga25vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVTkNUSU9OX1RSQUNFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTIyNj1jb25maWcgQk9PVFRJTUVfVFJBQ0lOR1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTIzNC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjIzNTpjb25maWcgRlVOQ1RJT05fVFJBQ0VSXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O0tlcm5lbCBGdW5jdGlvbiBUcmFjZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgRlVOQ1RJT05fVFJBQ0VSYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhpcyBgRlVOQ1RJT05fVFJBQ0VSYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGxpYnJhcmllcyByZWx5IG9uIGl0LCBhbmQgY29udmVyc2VseSwgd2hhdCBpdCByZWxpZXMgb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgb3IgdXBkYXRlcywgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBoaWRkZW4gJiMzNDtnb3RjaGFzJiMzNDsgbHVya2luZyB3aXRoaW4gaXRzIGRlcGVuZGVuY3kgdHJlZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUsIGlzb2xhdGVkIG1vZHVsZSwgb3Igc29tZXRoaW5nIGRlZXBseSBpbnRlcndvdmVuIGludG8gdGhlIHN5c3RlbSYjMzk7cyBjb3JlPyBUaGUgY29tcGxleGl0eSBoZXJlIGlzIGdvaW5nIHRvIGRpY3RhdGUgYSBsb3Qgb2YgbXkgYXBwcm9hY2ggdG8gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjM1Olx0Y29uZmlnIEZVTkNUSU9OX1RSQUNFUlxuIDIzNjpcdFx0Ym9vbCBcJiMzNDtLZXJuZWwgRnVuY3Rpb24gVHJhY2VyXCYjMzQ7XG4gMjM3Olx0XHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fVFJBQ0VSXG4gMjM4Olx0XHRzZWxlY3QgS0FMTFNZTVNcbiAyMzk6XHRcdHNlbGVjdCBHRU5FUklDX1RSQUNFUlxuIDI0MDpcdFx0c2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUlxuIDI0MTpcdFx0c2VsZWN0IEdMT0JcbiAyNDI6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuIDI0MzpcdFx0c2VsZWN0IFRBU0tTX1JVREVfUkNVXG4gMjQ0Olx0XHRoZWxwXG4gMjQ1Olx0XHQgIEVuYWJsZSB0aGUga2VybmVsIHRvIHRyYWNlIGV2ZXJ5IGtlcm5lbCBmdW5jdGlvbi4gVGhpcyBpcyBkb25lXG4gMjQ2Olx0XHQgIGJ5IHVzaW5nIGEgY29tcGlsZXIgZmVhdHVyZSB0byBpbnNlcnQgYSBzbWFsbCwgNS1ieXRlIE5vLU9wZXJhdGlvblxuIDI0NzpcdFx0ICBpbnN0cnVjdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IGtlcm5lbCBmdW5jdGlvbiwgd2hpY2ggTk9QXG4gMjQ4Olx0XHQgIHNlcXVlbmNlIGlzIHRoZW4gZHluYW1pY2FsbHkgcGF0Y2hlZCBpbnRvIGEgdHJhY2VyIGNhbGwgd2hlblxuIDI0OTpcdFx0ICB0cmFjaW5nIGlzIGVuYWJsZWQgYnkgdGhlIGFkbWluaXN0cmF0b3IuIElmIGl0JiMzOTtzIHJ1bnRpbWUgZGlzYWJsZWRcbiAyNTA6XHRcdCAgKHRoZSBib290dXAgZGVmYXVsdCksIHRoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBpbnN0cnVjdGlvbnMgaXMgdmVyeVxuIDI1MTpcdFx0ICBzbWFsbCBhbmQgbm90IG1lYXN1cmFibGUgZXZlbiBpbiBtaWNyby1iZW5jaG1hcmtzIChhdCBsZWFzdCBvblxuIDI1MjpcdFx0ICB4ODYsIGJ1dCBtYXkgaGF2ZSBpbXBhY3Qgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcykuXG4gMjUzOlx0XG4gMjU0Olx0Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1RSQUNFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byB0cmFjaW5nLiBTbywgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgYXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIGluIHF1ZXN0aW9uLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLml0IGZlZWxzIGxpa2UgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIG1pc3NpbmcsIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gQWgsIHJpZ2h0ISBgRlRSQUNFYCBpcyB0eXBpY2FsbHkgdGhlIG92ZXJhcmNoaW5nLCB0b3AtbGV2ZWwgY29uZmlnIHRoYXQgZ292ZXJucyB0aGUgZW50aXJlIHRyYWNpbmcgc3Vic3lzdGVtLiBJdCYjMzk7cyB0aGUgYmlnIHBpY3R1cmUuIFRoYXQgbWVhbnMgYEZVTkNUSU9OX1RSQUNFUmAgYW5kIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgIGFyZSBwcm9iYWJseSBtb3JlIHNwZWNpZmljIGZlYXR1cmVzIG9yIG1vZHVsZXMgKndpdGhpbiogdGhlIGJyb2FkZXIgYEZUUkFDRWAgZnJhbWV3b3JrLiBOZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhhdCBoaWVyYXJjaHkgc3RyYWlnaHQsIG9yIEkmIzM5O2xsIGdldCBsb3N0IGluIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlRSQUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9MTk4PWNvbmZpZyBUUkFDSU5HX1NVUFBPUlRcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDMtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyMDQ6bWVudWNvbmZpZyBGVFJBQ0Vcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIwNS1cdGJvb2wgXCYjMzQ7VHJhY2Vyc1wmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTU4OD1jb25maWcgRU5BQkxFX0RFRkFVTFRfVFJBQ0VSU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTU5Ni1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjU5Nzpjb25maWcgRlRSQUNFX1NZU0NBTExTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01OTgtXHRib29sIFwmIzM0O1RyYWNlIHN5c2NhbGxzXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9ODY4PWNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODc2LVxua2VybmVsL3RyYWNlL0tjb25maWc6ODc3OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg3OC1cdGJvb2xcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODAtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4ODE6Y29uZmlnIEZUUkFDRV9NQ09VTlRfVVNFX0NDXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODItXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODg2LVxua2VybmVsL3RyYWNlL0tjb25maWc6ODg3OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9PQkpUT09MXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODgtXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODk0LVxua2VybmVsL3RyYWNlL0tjb25maWc6ODk1OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9SRUNPUkRNQ09VTlRcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg5Ni1cdGRlZl9ib29sIHlcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xMDIxPWNvbmZpZyBUUkFDRV9FVkFMX01BUF9GSUxFXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTA0OC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNDk6Y29uZmlnIEZUUkFDRV9SRUNPUkRfUkVDVVJTSU9OXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDUwLVx0Ym9vbCBcJiMzNDtSZWNvcmQgZnVuY3Rpb25zIHRoYXQgcmVjdXJzZSBpbiBmdW5jdGlvbiB0cmFjaW5nXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTA2Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNjM6Y29uZmlnIEZUUkFDRV9SRUNPUkRfUkVDVVJTSU9OX1NJWkVcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjQtXHRpbnQgXCYjMzQ7TWF4IG51bWJlciBvZiByZWN1cnNlZCBmdW5jdGlvbnMgdG8gcmVjb3JkXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTA3My1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNzQ6Y29uZmlnIEZUUkFDRV9WQUxJREFURV9SQ1VfSVNfV0FUQ0hJTkdcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNzUtXHRib29sIFwmIzM0O1ZhbGlkYXRlIFJDVSBpcyBvbiBkdXJpbmcgZnRyYWNlIGV4ZWN1dGlvblwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMDE9Y29uZmlnIEdDT1ZfUFJPRklMRV9GVFJBQ0Vcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTEyLVxua2VybmVsL3RyYWNlL0tjb25maWc6MTExMzpjb25maWcgRlRSQUNFX1NFTEZURVNUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMTE0LVx0Ym9vbFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNS1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjExMTY6Y29uZmlnIEZUUkFDRV9TVEFSVFVQX1RFU1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTctXHRib29sIFwmIzM0O1BlcmZvcm0gYSBzdGFydHVwIHRlc3Qgb24gZnRyYWNlXCYjMzQ7XG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9MTEzNj1jb25maWcgRVZFTlRfVFJBQ0VfVEVTVF9TWVNDQUxMU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNDctXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTQ4OmNvbmZpZyBGVFJBQ0VfU09SVF9TVEFSVFVQX1RFU1Rcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNDktICAgICAgIGJvb2wgXCYjMzQ7VmVyaWZ5IGNvbXBpbGUgdGltZSBzb3J0aW5nIG9mIGZ0cmFjZSBmdW5jdGlvbnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgRlRSQUNFYCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEZUUkFDRWAuIEl0JiMzOTtzIGNydWNpYWwsIHdoZW4gZGVhbGluZyB3aXRoIGEgc3lzdGVtIGFzIHBvd2VyZnVsIGFuZCBjb21wbGV4IGFzIHRoaXMsIHRvIHVuZGVyc3RhbmQgaXRzIGZvdW5kYXRpb25zIGFuZCB3aGF0IGl0IHJlbGllcyB1cG9uLiBJIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGxpYnJhcmllcywgb3Igc3lzdGVtIGNhbGxzIGBGVFJBQ0VgIGlzIHRldGhlcmVkIHRvLiBUaGlzIGlzIHRoZSBiZWRyb2NrIG9mIG15IGludmVzdGlnYXRpb24uIEFyZSB0aGVyZSBhbnkgbGlicmFyaWVzIGJlaW5nIHVzZWQ/IE1heWJlIHNvbWUgbW9kdWxlIGRlcGVuZGVuY2llcz8gSXQgaXMgaW1wb3J0YW50IHRoYXQgSSBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIHNvIEkgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbSwgYW5kIGhvdyBtb2RpZmljYXRpb25zIGNvdWxkIHJpcHBsZSBvdXR3YXJkcy4gR290dGEgY2hhcnQgdGhpcyBvdXQgdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgaGljY3VwcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDQ6XHRtZW51Y29uZmlnIEZUUkFDRVxuIDIwNTpcdFx0Ym9vbCBcJiMzNDtUcmFjZXJzXCYjMzQ7XG4gMjA2Olx0XHRkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVFxuIDIwNzpcdFx0ZGVmYXVsdCB5IGlmIERFQlVHX0tFUk5FTFxuIDIwODpcdFx0aGVscFxuIDIwOTpcdFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxuIDIxMDpcdFxuIDIxMTpcdGlmIEZUUkFDRVxuIDIxMjpcdFxuIDIxMzpcdGNvbmZpZyBUUkFDRUZTX0FVVE9NT1VOVF9ERVBSRUNBVEVEXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzAwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZUUkFDRSBJbnZlc3RpZ2F0aW9uIGZvciBLZXJuZWwgRnV6emluZyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgY3JpdGljYWwgYnVnIGZpeCBpbnZvbHZpbmcgYEZUUkFDRWAgdGhhdCB3ZSBuZWVkIHRvIGZ1enouIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGNvcHlfcHJvY2Vzc2Agd2hlbiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgYWN0aXZlLiBUaGUgZml4IGNsZXZlcmx5IHJlYXJyYW5nZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGB0LSZndDtyZXRfc3RhY2tgIHRvIHByZXZlbnQgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYCBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGZyZWVkIGJ5IGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCBpZiBgY29weV9wcm9jZXNzYCBmYWlscy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQsIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBidWcgdGhhdCBkZXNlcnZlcyBvdXIgYXR0ZW50aW9uLgoKV2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB0aGlzIGFuZCB0aHVzLCBzaG91bGQgYmUgZnV6emVkIQoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHdoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHdlIHNob3VsZCBmb2N1cyBvbj8gSXQgc2VlbXMgdGhlIHBhdGNoIGZvY3VzZXMgb24gYGtlcm5lbF9jbG9uZWAsIGJ1dCBkb2VzIGl0IGNvbnNpZGVyIGFsbCBwYXRocz8gV2hhdCBhYm91dCB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlczogYHN5c19jbG9uZWAsIGBzeXNfY2xvbmUzYCwgYHN5c19mb3JrYCwgYW5kIGBzeXNfdmZvcmtgPyBBaCwgcmlnaHQhIGBrZXJuZWxfY2xvbmVgIGlzIHRoZSBjb21tb24gZnVuY3Rpb24gdGhhdCBhbGwgb2YgdGhvc2UgdWx0aW1hdGVseSBpbnZva2UuIFNvLCBga2VybmVsX2Nsb25lYCBpcyBhIHNtYXJ0IGFuZCBjb21wcmVoZW5zaXZlIGZvY3VzIHN5bWJvbC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGNoZWNrIHRvIGVuc3VyZSB3ZSBoYXZlIGFsbCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYEZUUkFDRWAsIHNwZWNpZmljYWxseSBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAuIGBUUkFDSU5HX1NVUFBPUlRgIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBpcyBnb29kLiBXZSBzaG91bGQgZG91YmxlLWNoZWNrIG91ciBidWlsZCBjb25maWd1cmF0aW9uIHRvIGVuc3VyZSBgRlRSQUNFYCBhbmQgdGhlIG90aGVycyBhcmUgZW5hYmxlZCwgZXNwZWNpYWxseSBzaW5jZSBgRlRSQUNFYCBpcyBjb25kaXRpb25hbGx5IGBkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMYC4KCk9uZSBmaW5hbCB0aG91Z2h0Li4uIHdlIHNob3VsZCBzY2FuIHRoZSBjb2RlIGFuZCBtYWtlIHN1cmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGlzbiYjMzk7dCBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlLiBXZSB3YW50IHRvIGJlIHN1cmUgb3VyIGZ1enppbmcgZWZmb3J0cyBhcmVuJiMzOTt0IGJlaW5nIGxpbWl0ZWQgYnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnRyYWNlX2dyYXBoX2luaXRfdGFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDI9ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQzLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0NS1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjMtXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2NS1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuLS1cbmtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjE0NS1cdCAqL1xua2VybmVsL2ZvcmsuYzoyMTQ2Olx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExMzE9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KVxuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTU5LS8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTYwOnZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTA4CgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipBbmFseXNpcyBDb25jbHVzaW9uOiBTZXR0aW5nIFJlc3VsdHMqKgoKQWxyaWdodCwgdGhlIHB1enpsZSYjMzk7cyBzb2x2ZWQuIEl0IGFwcGVhcnMgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCB3aGF0ZXZlciBpdCYjMzk7cyBkb2luZywgaXMgb25seSBldmVyIGNhbGxlZCB3aXRoaW4gYGNvcHlfcHJvY2Vzc2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBteSBhbmFseXNpcyBpcywgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcywgY29tcGxldGUuIEJhc2VkIG9uIHRoaXMgb2JzZXJ2YXRpb24sIEkmIzM5O20gbm93IGdvaW5nIHRvIGNvbmZpZGVudGx5IHByb2NlZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCYjMzk7cyB0aW1lIHRvIGNvbW11bmljYXRlIHdoYXQgSSYjMzk7dmUgZGlzY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtGVU5DVElPTl9UUkFDRVImIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fR1JBUEhfVFJBQ0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2VybmVsX2Nsb25lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aCBvZiBjb3B5X3Byb2Nlc3MoKSB3aGVuIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgaXMgZW5hYmxlZC4gSXQgbW92ZXMgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpIGVhcmxpZXIgc28gdGhhdCBpZiBjb3B5X3Byb2Nlc3MoKSBmYWlscywgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2sgaXMgbm90IGluY29ycmVjdGx5IGZyZWVkIGJ5IGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKHByb2Nlc3MgY3JlYXRpb24pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVFJBQ0UmIzM0OywKICAgICYjMzQ7RlVOQ1RJT05fVFJBQ0VSJiMzNDssCiAgICAmIzM0O0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tlcm5lbF9jbG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBidWcgaW4gdGhlIGVycm9yIHBhdGggb2YgY29weV9wcm9jZXNzKCkgd2hlbiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGlzIGVuYWJsZWQuIEl0IG1vdmVzIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKSBlYXJsaWVyIHNvIHRoYXQgaWYgY29weV9wcm9jZXNzKCkgZmFpbHMsIHRoZSBwYXJlbnQmIzM5O3MgcmV0X3N0YWNrIGlzIG5vdCBpbmNvcnJlY3RseSBmcmVlZCBieSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChwcm9jZXNzIGNyZWF0aW9uKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIHByZXZlbnQgYSBidWcgd2hlcmUgYW4gZXJyb3IgcGF0aCBpbmNvcnJlY3RseSBmcmVlcyB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLiBTcGVjaWZpY2FsbHksIGBkdXBfdGFza19zdHJ1Y3QoKWAgY29waWVzIHRoZSBwYXJlbnQmIzM5O3MgYHRhc2tfc3RydWN0YCwgaW5jbHVkaW5nIHRoZSBgcmV0X3N0YWNrYCBwb2ludGVyLiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhpcyBwb2ludGVyIChgdC1cdTAwM2VyZXRfc3RhY2sgPSBOVUxMYCkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlmIHRyYWNpbmcgaXMgYWN0aXZlLiBJZiBhbiBlcnJvciBvY2N1cnMgaW4gYGNvcHlfcHJvY2VzcygpYCBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV90YXNrKClgLCB3aGljaCBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAgd2lsbCB0aGVuIGZyZWUgYHQtXHUwMDNlcmV0X3N0YWNrYC4gU2luY2UgaXQgd2FzIG5ldmVyIGNsZWFyZWQsIGl0IGZyZWVzIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AuIFRoaXMgcmVzdWx0cyBpbiBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCBjb250aW51ZXMgdG8gdXNlIGl0cyBgcmV0X3N0YWNrYCwgb3IgYSBkb3VibGUgZnJlZSB3aGVuIHRoZSBwYXJlbnQgZXhpdHMuXG5cbkJvdGggdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZSBmcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaW4gdGhpcyBidWcsIGFzIHRoZSBwb2ludGVyIGl0c2VsZiBpcyBpbml0aWFsaXplZCAoY29waWVkIGZyb20gdGhlIHBhcmVudCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzYxOTQxZjkzZGIzZTIzNzQwODE5YjAxODViZjA0N2M5OTkyMGViOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDIwOjQwOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggMWU2ODQwNGJkNzczZS4uMGQxYWQ5MmUyZDMzNyAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZm9yay5jCkBAIC0yMTM5LDYgJiM0MzsyMTM5LDExIEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoCiAJcCA9IGR1cF90YXNrX3N0cnVjdChjdXJyZW50LCBub2RlKTsKIAlpZiAoIXApCiAJCWdvdG8gZm9ya19vdXQ7CiYjNDM7CS8qCiYjNDM7CSAqIE11c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgZmFsbGlibGUgb3AsIHNvIGVycm9yIHBhdGhzIG5ldmVyCiYjNDM7CSAqIGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2suCiYjNDM7CSAqLwomIzQzOwlmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApOwogCXJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBiYWRfZm9ya19mcmVlOwpAQCAtMjE2NSw4ICYjNDM7MjE3MCw2IEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoCiAJICovCiAJcC0mZ3Q7Y2xlYXJfY2hpbGRfdGlkID0gKGNsb25lX2ZsYWdzICZhbXA7IENMT05FX0NISUxEX0NMRUFSVElEKSA/IGFyZ3MtJmd0O2NoaWxkX3RpZCA6IE5VTEw7CiAKLQlmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApOwotCiAJcnRfbXV0ZXhfaW5pdF90YXNrKHApOwogCXJhd19zcGluX2xvY2tfaW5pdCgmYW1wO3AtJmd0O2Jsb2NrZWRfbG9jayk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrIFBsYWNlbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vdmluZyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciB3aXRoaW4gYGNvcHlfcHJvY2VzcygpYCBpbiBga2VybmVsL2ZvcmsuY2AuIEludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGJlaW5nIG1vdmVkICpiZWZvcmUqIGBjb3B5X2V4ZWNfc3RhdGUoKWAgYW5kIG90aGVyIG9wZXJhdGlvbnMgdGhhdCBjYW4gcG90ZW50aWFsbHkgZmFpbC4gVGhlIGNvbW1lbnQgaXMgcHJldHR5IGV4cGxpY2l0OiAmIzM0O011c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgZmFsbGlibGUgb3AsIHNvIGVycm9yIHBhdGhzIG5ldmVyIGZyZWUgdGhlIHBhcmVudCYjMzk7cyByZXRfc3RhY2suJiMzNDsgVGhhdCBzb3VuZHMgbGlrZSBhIGJ1ZyBmaXgsIGFuZCBnaXZlbiB0aGUgY29udGV4dCBJJiMzOTttIGltbWVkaWF0ZWx5IHN1c3BpY2lvdXMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLgoKTGV0JiMzOTtzIGRpdmUgaW50byB3aGF0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBhY3R1YWxseSAqZG9lcyouIE15IGd1ZXNzIGlzIHRoYXQgaXQmIzM5O3MgaW5pdGlhbGl6aW5nIHNvbWUgc3BlY2lmaWMgZmllbGRzIHdpdGhpbiB0aGUgYHRhc2tfc3RydWN0YC4gSWYgc28sIG1vdmluZyBpdCBlYXJsaWVyIG1lYW5zIHRob3NlIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgZXZlbiBpZiBhbiBlcnJvciBvY2N1cnMgbGF0ZXIgaW4gdGhlIGBjb3B5X3Byb2Nlc3MoKWAgc2VxdWVuY2UuIEhtbS4uLiBpZiB0aGUgZXJyb3IgcGF0aHMgZnJlZSBgcGAgKHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIHRoZSByZXN1bHQgb2YgYGR1cF90YXNrX3N0cnVjdChjdXJyZW50LCBub2RlKWAg4oCTIHRoZSBjb3B5IG9mIHRoZSBwYXJlbnQgdGFzayksIHRoZW4gbWF5YmUgdGhvc2UgZXJyb3IgcGF0aHMgd2VyZSwgaW4gdGhlIHByZXZpb3VzIGNvZGUsIGZyZWVpbmcgdW5pbml0aWFsaXplZCBwb2ludGVycyBvciwgbW9yZSBsaWtlbHksIHBvaW50ZXJzICpjb3BpZWQqIGZyb20gdGhlIHBhcmVudC4KCkFoLCB3YWl0LCB0aGF0JiMzOTtzIGl0ISBgZHVwX3Rhc2tfc3RydWN0YCAqY29waWVzKiB0aGUgcGFyZW50JiMzOTtzIGB0YXNrX3N0cnVjdGAuIFNvLCBgcC0mZ3Q7cmV0X3N0YWNrYCB3b3VsZCBiZSBhICpjb3B5KiBvZiB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLiBUaGUgY3J1eCBvZiBpdCBpcyB0aGF0IGlmIGFuIGVycm9yIG9jY3VycyAqYmVmb3JlKiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCAobGlrZSBgYmFkX2ZvcmtfZnJlZWApIG1pZ2h0IGNhbGwgYGZyZWVfdGFzayhwKWAsIHdoaWNoIGluIHR1cm4gY291bGQgY2FsbCBgZnJlZV90YXNrX3N0YWNrKHApYC4gSWYgYGZyZWVfdGFza19zdGFjayhwKWAgd2VyZSBjYWxsZWQsIGl0IG1pZ2h0IGZyZWUgYHAtJmd0O3JldF9zdGFja2AuIEJ1dCB0aGF0IGByZXRfc3RhY2tgIGlzIGEgKmNvcHkqIG9mIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AhIFRoZXJlZm9yZSwgdGhhdCBtZWFucyB3ZSBhcmUgZnJlZWluZyB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLCBwb3RlbnRpYWxseSBjYXVzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2l0dWF0aW9uLgoKVGhhdCYjMzk7cyBpdCwgdGhpcyBpcyBhIHRleHRib29rIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIGJ1Zy4gS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaCB0aGlzLCBpZiBpdCB3YXMgZW5hYmxlZC4gTXkgc3VzcGljaW9uIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHRoZSByb290IG9mIGl0IHdhcyB3cm9uZyB0aG91Z2guIEl0JiMzOTtzIG1vcmUgc3VidGxlIHRoYW4gdGhhdDogaXQgaW52b2x2ZXMgYSAqY29waWVkKiBwb2ludGVyIGZyb20gdGhlIHBhcmVudCBiZWluZyBmcmVlZCBpbmNvcnJlY3RseSBkdWUgdG8gYW4gb3JkZXIgb2Ygb3BlcmF0aW9ucyBpc3N1ZS4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGlzLCBpbiBmYWN0LCB0aGUgY3J1Y2lhbCBpbml0aWFsaXphdGlvbiB0aGF0IHJlc29sdmVzIHRoaXMgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z0cmFjZV9ncmFwaF9pbml0X3Rhc2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQyPWV4dGVybiB0cmFjZV9mdW5jX2dyYXBoX2VudF90IGZ0cmFjZV9ncmFwaF9lbnRyeTtcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0My1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM0NDpleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDUtZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM1Nj1zdGF0aWMgaW5saW5lIHZvaWQgdW5wYXVzZV9ncmFwaF90cmFjaW5nKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzYzLVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY0OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjUtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cbi0tXG5rZXJuZWwvZm9yay5jPTIwMTg9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2Vzcyhcbi0tXG5rZXJuZWwvZm9yay5jLTIxNDUtXHQgKi9cbmtlcm5lbC9mb3JrLmM6MjE0NjpcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XG5rZXJuZWwvZm9yay5jLTIxNDctXHRyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO1xuLS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTMxPXZvaWQgZnRyYWNlX2dyYXBoX2luaXRfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNwdSlcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE1OS0vKiBBbGxvY2F0ZSBhIHJldHVybiBzdGFjayBmb3IgbmV3bHkgY3JlYXRlZCB0YXNrICovXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE2MDp2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExNjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlci4gTXkgaW5pdGlhbCBwb2ludCBvZiBpbnRlcmVzdCBpcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AsIHdoaWNoIEkgYmVsaWV2ZSByZXNpZGVzIGluIGBrZXJuZWwvdHJhY2UvZmdyYXBoLmNgLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgaG93IHRoZSBpbml0aWFsIHNldHVwIG9mIGEgdGFzayBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2luZyBmcmFtZXdvcmsuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIG1haW4gdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZWFjaCB0YXNrIGlzIHNldCB1cC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGV4YW1pbmUgaG93IHRoYXQgaW5pdGlhbGl6YXRpb24gdGllcyBpbnRvIHRoZSBicm9hZGVyIHRyYWNpbmcgY29udGV4dCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSB0cmFjZXImIzM5O3MgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaG93IHRhc2tzIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIG1haW4gdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gSSBhbHNvIGV4cGVjdCB0byBzZWUgaG93IGl0IHBvdGVudGlhbGx5IG1hbmFnZXMgYW55IHNwZWNpZmljIHBlci10YXNrIHRyYWNpbmcgZmxhZ3Mgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSXQmIzM5O3MgdGltZSB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBpdHMgZXhlY3V0aW9uIGZsb3cgd2l0aGluIHRoZSBsYXJnZXIgdHJhY2luZyBzY2hlbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2ZncmFwaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTU5Olx0LyogQWxsb2NhdGUgYSByZXR1cm4gc3RhY2sgZm9yIG5ld2x5IGNyZWF0ZWQgdGFzayAqL1xuMTE2MDpcdHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG4xMTYxOlx0e1xuMTE2MjpcdFx0LyogTWFrZSBzdXJlIHdlIGRvIG5vdCB1c2UgdGhlIHBhcmVudCByZXRfc3RhY2sgKi9cbjExNjM6XHRcdHQtXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcbjExNjQ6XHRcdHQtXHUwMDNlY3Vycl9yZXRfc3RhY2sgPSAwO1xuMTE2NTpcdFx0dC1cdTAwM2VjdXJyX3JldF9kZXB0aCA9IC0xO1xuMTE2NjpcdFxuMTE2NzpcdFx0aWYgKGZ0cmFjZV9ncmFwaF9hY3RpdmUpIHtcbjExNjg6XHRcdFx0dW5zaWduZWQgbG9uZyAqcmV0X3N0YWNrO1xuMTE2OTpcdFxuMTE3MDpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFmZ3JhcGhfc3RhY2tfY2FjaGVwKSlcbjExNzE6XHRcdFx0XHRyZXR1cm47XG4xMTcyOlx0XG4xMTczOlx0XHRcdHJldF9zdGFjayA9IGttZW1fY2FjaGVfYWxsb2MoZmdyYXBoX3N0YWNrX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG4xMTc0Olx0XHRcdGlmICghcmV0X3N0YWNrKVxuMTE3NTpcdFx0XHRcdHJldHVybjtcbjExNzY6XHRcdFx0Z3JhcGhfaW5pdF90YXNrKHQsIHJldF9zdGFjayk7XG4xMTc3Olx0XHR9XG4xMTc4Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDkxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IENvcnJ1cHRpb24gaW4gVGFzayBDcmVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgYW5kIGltbWVkaWF0ZWx5LCBgdC0mZ3Q7cmV0X3N0YWNrID0gTlVMTDtgIGp1bXBzIG91dCBhdCBtZS4gSSBrbm93IGBkdXBfdGFza19zdHJ1Y3RgIG1ha2VzIGEgY29tcGxldGUgY29weSBvZiB0aGUgcGFyZW50JiMzOTtzIGB0YXNrX3N0cnVjdGAsIG1lYW5pbmcgdGhlIG5ldyB0YXNrJiMzOTtzIGBwLSZndDtyZXRfc3RhY2tgIHN0YXJ0cyBvdXQgcG9pbnRpbmcgdG8gdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uIGFzIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AuIFRoYXQmIzM5O3Mgbm9ybWFsLCBleHBlY3RlZCBiZWhhdmlvciBpbiBhIGZvcmsgc2NlbmFyaW8uCgpUaGUgaXNzdWUgYXJpc2VzIGlmIHNvbWV0aGluZyBnb2VzIHNpZGV3YXlzIGJlZm9yZSBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgZ2V0cyBhIGNoYW5jZSB0byBydW4uIFNwZWNpZmljYWxseSwgaWYgYW4gZXJyb3IgcG9wcyB1cCAqYmVmb3JlKiB0aGF0IGluaXRpYWxpemF0aW9uLCB0aGUgY2hpbGQgdGFzayYjMzk7cyBgcC0mZ3Q7cmV0X3N0YWNrYCBkb2VzbiYjMzk7dCBnZXQgcHJvcGVybHkgc2V0IHRvIGBOVUxMYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBub3csIHdlJiMzOTtyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSBvbiB0aGUgZXJyb3IgcGF0aCwgZWl0aGVyIGBmcmVlX3Rhc2socClgIG9yIGBwdXRfdGFza19zdHJ1Y3QocClgIChvciBwb3RlbnRpYWxseSBldmVuIGBiYWRfZm9ya19mcmVlYCkgbWlnaHQgdHJ5IHRvIGZyZWUgdGhhdCB2ZXJ5IHNhbWUgYHAtJmd0O3JldF9zdGFja2AgbWVtb3J5IHRoYXQgd2FzIHNoYXJlZCB3aXRoIHRoZSBwYXJlbnQuCgpUaGlzIHNlZW1zIGxpa2UgYSBjbGFzc2ljIGRvdWJsZS1mcmVlIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHksIGRlcGVuZGluZyBvbiB0aGUgZXhhY3QgdGltaW5nIGFuZCB3aGljaCBwcm9jZXNzIGdldHMgdG8gaXQgZmlyc3QuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBmcmVlX3Rhc2tgLCBgcHV0X3Rhc2tfc3RydWN0YCwgYW5kIGBiYWRfZm9ya19mcmVlYCBpbW1lZGlhdGVseSB0byBjb25maXJtIGlmIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGV5IGhhbmRsZSBgcmV0X3N0YWNrYCBhbmQgYW55IGFzc29jaWF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgbmVlZHMgdG8gYmUgY2hlY2tlZCBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZyZWVfdGFzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jPTIxOT1zdGF0aWMgaW50IGJlaXNjc2lfZWhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc2MpXG4tLVxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYy0yNDMtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNlc3Npb24tXHUwMDNlYmFja19sb2NrKTtcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmM6MjQ0Olx0XHQvKiBXZSBhcmUganVzdCBhYm91dCB0byBjYWxsIGlzY3NpX2ZyZWVfdGFzayBzbyB3YWl0IGZvciBpdC4gKi9cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMtMjQ1LVx0XHR1ZGVsYXkoNSk7XG4tLVxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmMuaD01MTY9aW50IGJueDJmY19zZXR1cF90YXNrX2N0eChzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhKTtcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjLmg6NTE3OnZvaWQgYm54MmZjX2ZyZWVfdGFza19jdHgoc3RydWN0IGJueDJmY19oYmEgKmhiYSk7XG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmYy5oLTUxOC1pbnQgYm54MmZjX3NldHVwX2Z3X3Jlc2Moc3RydWN0IGJueDJmY19oYmEgKmhiYSk7XG4tLVxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jPTE2OTc9c3RhdGljIHZvaWQgYm54MmZjX3VuYmluZF9hZGFwdGVyX2RldmljZXMoc3RydWN0IGJueDJmY19oYmEgKmhiYSlcbi0tXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19mY29lLmMtMTY5OS1cdGJueDJmY19mcmVlX2Z3X3Jlc2MoaGJhKTtcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYzoxNzAwOlx0Ym54MmZjX2ZyZWVfdGFza19jdHgoaGJhKTtcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYy0xNzAxLX1cbi0tXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYz0xODY3PWludCBibngyZmNfc2V0dXBfdGFza19jdHgoc3RydWN0IGJueDJmY19oYmEgKmhiYSlcbi0tXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYy0xOTU2LVxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmM6MTk1Nzp2b2lkIGJueDJmY19mcmVlX3Rhc2tfY3R4KHN0cnVjdCBibngyZmNfaGJhICpoYmEpXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYy0xOTU4LXtcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz0zMTQ9c3RhdGljIGludCBpc2NzaV9wcmVwX3Njc2lfY21kX3BkdShzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaylcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy00NDYtLyoqXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYzo0NDc6ICogaXNjc2lfZnJlZV90YXNrIC0gZnJlZSBhIHRhc2tcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTQ0OC0gKiBAdGFzazogaXNjc2kgY21kIHRhc2tcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy00NTMtICovXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYzo0NTQ6c3RhdGljIHZvaWQgaXNjc2lfZnJlZV90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKVxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNDU1LXtcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz00OTk9dm9pZCBfX2lzY3NpX3B1dF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKVxuLS1cbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTUwMS1cdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dGFzay1cdTAwM2VyZWZjb3VudCkpXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYzo1MDI6XHRcdGlzY3NpX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTUwMy19XG4tLVxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmM9NTA2PXZvaWQgaXNjc2lfcHV0X3Rhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spXG4tLVxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNTExLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2c2Vzc2lvbi1cdTAwM2ViYWNrX2xvY2spO1xuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmM6NTEyOlx0XHRpc2NzaV9mcmVlX3Rhc2sodGFzayk7XG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy01MTMtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNlc3Npb24tXHUwMDNlYmFja19sb2NrKTtcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz03MDY9aXNjc2lfYWxsb2NfbWdtdF90YXNrKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIsXG4tLVxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNzczLVx0XHRcdFx0XHQgXCYjMzQ7cGR1IGZvciBtZ210IHRhc2suXFxuXCYjMzQ7KTtcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOjc3NDpcdFx0XHRnb3RvIGZyZWVfdGFzaztcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTc3NS1cdFx0fVxuLS1cbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTc5MS1cbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOjc5MjpmcmVlX3Rhc2s6XG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy03OTMtXHRpc2NzaV9wdXRfdGFzayh0YXNrKTtcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz0yMzQ2PWludCBpc2NzaV9laF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzYylcbi0tXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy0yNDAzLVx0XHRtdXRleF91bmxvY2soXHUwMDI2c2Vzc2lvbi1cdTAwM2VlaF9tdXRleCk7XG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYzoyNDA0Olx0XHQvKiBXZSBhcmUganVzdCBhYm91dCB0byBjYWxsIGlzY3NpX2ZyZWVfdGFzayBzbyB3YWl0IGZvciBpdC4gKi9cbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTI0MDUtXHRcdHVkZWxheShJU0NTSV9DTURfQ09NUExfV0FJVCk7XG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmM9NzM9c3RhdGljIHZvaWQgc2FzX2F0YV90YXNrX2RvbmUoc3RydWN0IHNhc190YXNrICp0YXNrKVxuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2F0YS5jLTE1MS1xY19hbHJlYWR5X2dvbmU6XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYzoxNTI6XHRzYXNfZnJlZV90YXNrKHRhc2spO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtMTUzLX1cbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYz0xNTU9c3RhdGljIHVuc2lnbmVkIGludCBzYXNfYXRhX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpXG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtMjIwLVx0XHRcdEFTU0lHTl9TQVNfVEFTSyhxYy1cdTAwM2VzY3NpY21kLCBOVUxMKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2F0YS5jOjIyMTpcdFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2F0YS5jLTIyMi1cdFx0cWMtXHUwMDNlbGxkZF90YXNrID0gTlVMTDtcbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYz00NDc9c3RhdGljIHZvaWQgc2FzX2F0YV9pbnRlcm5hbF9hYm9ydChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spXG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtNDg0LSBvdXQ6XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYzo0ODU6XHRzYXNfZnJlZV90YXNrKHRhc2spO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtNDg2LX1cbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jPTU2PXN0YXRpYyBpbnQgc21wX2V4ZWN1dGVfdGFza19zZyhzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMtMTMyLVx0XHRcdFx0ICB0YXNrLVx1MDAzZXRhc2tfc3RhdHVzLnN0YXQpO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYzoxMzM6XHRcdFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMtMTM0LVx0XHRcdHRhc2sgPSBOVUxMO1xuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMtMTQwLVx0QlVHX09OKHJldHJ5ID09IDMgXHUwMDI2XHUwMDI2IHRhc2sgIT0gTlVMTCk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jOjE0MTpcdHNhc19mcmVlX3Rhc2sodGFzayk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jLTE0Mi1cdHJldHVybiByZXM7XG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jPTM5PXN0cnVjdCBzYXNfdGFzayAqc2FzX2FsbG9jX3Nsb3dfdGFzayhnZnBfdCBmbGFncylcbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmMtNTgtXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmM6NTk6dm9pZCBzYXNfZnJlZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzaylcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYy02MC17XG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jPTY4Mj1zdGF0aWMgaW50IF9faW5pdCBzYXNfY2xhc3NfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYy02ODktXHRpZiAoIXNhc19ldmVudF9jYWNoZSlcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYzo2OTA6XHRcdGdvdG8gZnJlZV90YXNrX2ttZW07XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmMtNjkxLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jLTY5Mi1cdHJldHVybiAwO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jOjY5MzpmcmVlX3Rhc2tfa21lbTpcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYy02OTQtXHRrbWVtX2NhY2hlX2Rlc3Ryb3koc2FzX3Rhc2tfY2FjaGUpO1xuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmg9NjM9c3RydWN0IHNhc190YXNrICpzYXNfYWxsb2Nfc2xvd190YXNrKGdmcF90IGZsYWdzKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmg6NjQ6dm9pZCBzYXNfZnJlZV90YXNrKHN0cnVjdCBzYXNfdGFzayAqdGFzayk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbnRlcm5hbC5oLTY1LVxuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jPTM4PXN0YXRpYyB2b2lkIHNhc19lbmRfdGFzayhzdHJ1Y3Qgc2NzaV9jbW5kICpzYywgc3RydWN0IHNhc190YXNrICp0YXNrKVxuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTk2LVx0QVNTSUdOX1NBU19UQVNLKHNjLCBOVUxMKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jOjk3Olx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTk4LX1cbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYz0xMDA9c3RhdGljIHZvaWQgc2FzX3Njc2lfdGFza19kb25lKHN0cnVjdCBzYXNfdGFzayAqdGFzaylcbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xMjEtXHRcdHByX2RlYnVnKFwmIzM0O3Rhc2tfZG9uZSBjYWxsZWQgd2l0aCBub24gZXhpc3RpbmcgU0NTSSBjbW5kIVxcblwmIzM0Oyk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzoxMjI6XHRcdHNhc19mcmVlX3Rhc2sodGFzayk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xMjMtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYz0xNjE9ZW51bSBzY3NpX3FjX3N0YXR1cyBzYXNfcXVldWVjb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsXG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtMTg3LVx0aWYgKHJlcylcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jOjE4ODpcdFx0Z290byBvdXRfZnJlZV90YXNrO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtMTg5LVx0cmV0dXJuIDA7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xOTAtXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzoxOTE6b3V0X2ZyZWVfdGFzazpcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTE5Mi1cdHByX2RlYnVnKFwmIzM0O2xsZGRfZXhlY3V0ZV90YXNrIHJldHVybmVkOiAlZFxcblwmIzM0OywgcmVzKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTE5My1cdEFTU0lHTl9TQVNfVEFTSyhjbWQsIE5VTEwpO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmM6MTk0Olx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTE5NS1cdGlmIChyZXMgPT0gLVNBU19RVUVVRV9GVUxMKVxuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jPTkwND1zdGF0aWMgaW50IHNhc19leGVjdXRlX2ludGVybmFsX2Fib3J0KHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtOTY4LVx0XHQgICAgICAgdGFzay1cdTAwM2V0YXNrX3N0YXR1cy5zdGF0KTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jOjk2OTpcdFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTk3MC1cdFx0dGFzayA9IE5VTEw7XG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtOTcyLVx0QlVHX09OKHJldHJ5ID09IFRBU0tfUkVUUlkgXHUwMDI2XHUwMDI2IHRhc2sgIT0gTlVMTCk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzo5NzM6XHRzYXNfZnJlZV90YXNrKHRhc2spO1xuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtOTc0LVx0cmV0dXJuIHJlcztcbi0tXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYz05OTM9aW50IHNhc19leGVjdXRlX3RtZihzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2aWNlLCB2b2lkICpwYXJhbWV0ZXIsXG4tLVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtMTA5OC1cdFx0fVxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmM6MTA5OTpcdFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTExMDAtXHRcdHRhc2sgPSBOVUxMO1xuLS1cbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTExMDUtXHRcdFx0U0FTX0FERFIoZGV2aWNlLVx1MDAzZXNhc19hZGRyKSwgVEFTS19SRVRSWSk7XG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzoxMTA2Olx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTExMDctXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0yNzI2PXZvaWQgYnBmX29ial9mcmVlX3dvcmtxdWV1ZShjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCB2b2lkICpvYmopO1xuaW5jbHVkZS9saW51eC9icGYuaDoyNzI3OnZvaWQgYnBmX29ial9mcmVlX3Rhc2tfd29yayhjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCB2b2lkICpvYmopO1xuaW5jbHVkZS9saW51eC9icGYuaC0yNzI4LXZvaWQgYnBmX29ial9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKm9iaik7XG4tLVxuaW5jbHVkZS9saW51eC9idGYuaC01Ny0gKlxuaW5jbHVkZS9saW51eC9idGYuaDo1ODogKiBTRUMoXCYjMzQ7a3JldHByb2JlL2ZyZWVfdGFza1wmIzM0OylcbmluY2x1ZGUvbGludXgvYnRmLmg6NTk6ICogaW50IEJQRl9QUk9HKGZyZWVfdGFza19wcm9iZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5pbmNsdWRlL2xpbnV4L2J0Zi5oLTYwLSAqIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD00MzM9c3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfaW52YXJpYW50X3N0YXRlKGJvb2wgZm9yY2UpIHt9XG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo0MzQ6c3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykge31cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQzNS1cbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaD0xMjMwPWV4dGVybiB2b2lkIHBlcmZfZXZlbnRfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpO1xuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50Lmg6MTIzMTpleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgtMTIzMi1leHRlcm4gdm9pZCBwZXJmX2V2ZW50X2RlbGF5ZWRfcHV0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7XG4tLVxuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50Lmg9MTk2Mz1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZClcdHsgfVxuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50Lmg6MTk2NDpzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVx0eyB9XG5pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaC0xOTY1LXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2RlbGF5ZWRfcHV0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcdHsgfVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oPTEwOD1pbnQga2VybmVsX3dhaXQocGlkX3QgcGlkLCBpbnQgKnN0YXQpO1xuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtMTA5LVxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg6MTEwOmV4dGVybiB2b2lkIGZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC0xMTEtXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg9MTI5PXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oLTE1NS1cdCAqXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaDoxNTY6XHQgKiBkZWxheWVkX2ZyZWVfdGFzaygpIGFsc28gdXNlcyAtXHUwMDNlcmN1LCBidXQgaXQgaXMgb25seSBjYWxsZWRcbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oLTE1Ny1cdCAqIHdoZW4gaXQgZmFpbHMgdG8gZm9yayBhIHByb2Nlc3MuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm9cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz01MDMzPXZvaWQgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzktXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVx1MDAzZXJlY29yZCwgQlBGX1RBU0tfV09SSykpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDQwOlx0XHRicGZfb2JqX2ZyZWVfdGFza193b3JrKG1hcC1cdTAwM2VyZWNvcmQsIHZhbCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDQxLX1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz03OTU9dm9pZCBicGZfb2JqX2ZyZWVfd29ya3F1ZXVlKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MDEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4MDI6dm9pZCBicGZfb2JqX2ZyZWVfdGFza193b3JrKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgwMy17XG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9NTc1Mz1zdGF0aWMgdm9pZCBfX2ZyZWVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTU3OTItXHQvKlxua2VybmVsL2V2ZW50cy9jb3JlLmM6NTc5MzpcdCAqIHBlcmZfZXZlbnRfZnJlZV90YXNrKCkgcmVsaWVzIG9uIHB1dF9jdHgoKSBiZWluZyAmIzM5O2xhc3QmIzM5OywgaW5cbmtlcm5lbC9ldmVudHMvY29yZS5jLTU3OTQtXHQgKiBwYXJ0aWN1bGFyIGFsbCB0YXNrIHJlZmVyZW5jZXMgbXVzdCBiZSBjbGVhbmVkIHVwLlxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jPTE0NzE2PXZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbmtlcm5lbC9ldmVudHMvY29yZS5jLTE0NzYyLSAqL1xua2VybmVsL2V2ZW50cy9jb3JlLmM6MTQ3NjM6dm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xNDc2NC17XG4tLVxua2VybmVsL2V2ZW50cy9jb3JlLmM9MTUxMjQ9aW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHU2NCBjbG9uZV9mbGFncylcbi0tXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xNTEzNS1cdGlmIChyZXQpIHtcbmtlcm5lbC9ldmVudHMvY29yZS5jOjE1MTM2Olx0XHRwZXJmX2V2ZW50X2ZyZWVfdGFzayhjaGlsZCk7XG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xNTEzNy1cdFx0cmV0dXJuIHJldDtcbi0tXG5rZXJuZWwvZXhlY19zdGF0ZS5jPTEzPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza19leGVjX3N0YXRlX2NhY2hlcDtcbmtlcm5lbC9leGVjX3N0YXRlLmMtMTQtXG5rZXJuZWwvZXhlY19zdGF0ZS5jOjE1OnN0YXRpYyB2b2lkIF9fZnJlZV90YXNrX2V4ZWNfc3RhdGUoc3RydWN0IHJjdV9oZWFkICpyY3UpXG5rZXJuZWwvZXhlY19zdGF0ZS5jLTE2LXtcbi0tXG5rZXJuZWwvZXhlY19zdGF0ZS5jPTIzPXZvaWQgcHV0X3Rhc2tfZXhlY19zdGF0ZShzdHJ1Y3QgdGFza19leGVjX3N0YXRlICpleGVjX3N0YXRlKVxuLS1cbmtlcm5lbC9leGVjX3N0YXRlLmMtMjUtXHRpZiAoZXhlY19zdGF0ZSBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmV4ZWNfc3RhdGUtXHUwMDNlY291bnQpKVxua2VybmVsL2V4ZWNfc3RhdGUuYzoyNjpcdFx0Y2FsbF9yY3UoXHUwMDI2ZXhlY19zdGF0ZS1cdTAwM2VyY3UsIF9fZnJlZV90YXNrX2V4ZWNfc3RhdGUpO1xua2VybmVsL2V4ZWNfc3RhdGUuYy0yNy19XG4tLVxua2VybmVsL2V4aXQuYz05Mjg9dm9pZCBfX25vcmV0dXJuIGRvX2V4aXQobG9uZyBjb2RlKVxuLS1cbmtlcm5lbC9leGl0LmMtMTA0OS1cbmtlcm5lbC9leGl0LmM6MTA1MDpcdGxvY2tkZXBfZnJlZV90YXNrKHRzayk7XG5rZXJuZWwvZXhpdC5jLTEwNTEtXHRkb190YXNrX2RlYWQoKTtcbi0tXG5rZXJuZWwvZm9yay5jPTE4Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqYWxsb2NfdGFza19zdHJ1Y3Rfbm9kZShpbnQgbm9kZSlcbi0tXG5rZXJuZWwvZm9yay5jLTE5MC1cbmtlcm5lbC9mb3JrLmM6MTkxOnN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxua2VybmVsL2ZvcmsuYy0xOTIte1xuLS1cbmtlcm5lbC9mb3JrLmM9NTI2PXZvaWQgcHV0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL2ZvcmsuYy01MzItXG5rZXJuZWwvZm9yay5jOjUzMzp2b2lkIGZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmtlcm5lbC9mb3JrLmMtNTM0LXtcbi0tXG5rZXJuZWwvZm9yay5jLTU2MS1cdHB1dF90YXNrX2V4ZWNfc3RhdGUocmN1X2FjY2Vzc19wb2ludGVyKHRzay1cdTAwM2VleGVjX3N0YXRlKSk7XG5rZXJuZWwvZm9yay5jOjU2MjpcdGZyZWVfdGFza19zdHJ1Y3QodHNrKTtcbmtlcm5lbC9mb3JrLmMtNTYzLX1cbmtlcm5lbC9mb3JrLmM6NTY0OkVYUE9SVF9TWU1CT0woZnJlZV90YXNrKTtcbmtlcm5lbC9mb3JrLmMtNTY1LVxuLS1cbmtlcm5lbC9mb3JrLmM9NzgyPXZvaWQgX19wdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL2ZvcmsuYy03OTYtXHRzY2hlZF9jb3JlX2ZyZWUodHNrKTtcbmtlcm5lbC9mb3JrLmM6Nzk3Olx0ZnJlZV90YXNrKHRzayk7XG5rZXJuZWwvZm9yay5jLTc5OC19XG4tLVxua2VybmVsL2ZvcmsuYz05MTU9c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqb3JpZywgaW50IG5vZGUpXG4tLVxua2VybmVsL2ZvcmsuYy05NTEtXHQgKiB0aGVuLiBVbnRpbCB0aGVuLCBmaWx0ZXIgbXVzdCBiZSBOVUxMIHRvIGF2b2lkIG1lc3NpbmcgdXBcbmtlcm5lbC9mb3JrLmM6OTUyOlx0ICogdGhlIHVzYWdlIGNvdW50cyBvbiB0aGUgZXJyb3IgcGF0aCBjYWxsaW5nIGZyZWVfdGFzay5cbmtlcm5lbC9mb3JrLmMtOTUzLVx0ICovXG4tLVxua2VybmVsL2ZvcmsuYy0xMDI5LWZyZWVfdHNrOlxua2VybmVsL2ZvcmsuYzoxMDMwOlx0ZnJlZV90YXNrX3N0cnVjdCh0c2spO1xua2VybmVsL2ZvcmsuYy0xMDMxLVx0cmV0dXJuIE5VTEw7XG4tLVxua2VybmVsL2ZvcmsuYz0xOTE0PWludCBwaWRmZF9wcmVwYXJlKHN0cnVjdCBwaWQgKnBpZCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgZmlsZSAqKnJldF9maWxlKVxuLS1cbmtlcm5lbC9mb3JrLmMtMTk1Ny1cbmtlcm5lbC9mb3JrLmM6MTk1ODpzdGF0aWMgdm9pZCBfX2RlbGF5ZWRfZnJlZV90YXNrKHN0cnVjdCByY3VfaGVhZCAqcmhwKVxua2VybmVsL2ZvcmsuYy0xOTU5LXtcbi0tXG5rZXJuZWwvZm9yay5jLTE5NjEtXG5rZXJuZWwvZm9yay5jOjE5NjI6XHRmcmVlX3Rhc2sodHNrKTtcbmtlcm5lbC9mb3JrLmMtMTk2My19XG5rZXJuZWwvZm9yay5jLTE5NjQtXG5rZXJuZWwvZm9yay5jOjE5NjU6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGRlbGF5ZWRfZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxua2VybmVsL2ZvcmsuYy0xOTY2LXtcbmtlcm5lbC9mb3JrLmMtMTk2Ny1cdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1DRykpXG5rZXJuZWwvZm9yay5jOjE5Njg6XHRcdGNhbGxfcmN1KFx1MDAyNnRzay1cdTAwM2VyY3UsIF9fZGVsYXllZF9mcmVlX3Rhc2spO1xua2VybmVsL2ZvcmsuYy0xOTY5LVx0ZWxzZVxua2VybmVsL2ZvcmsuYzoxOTcwOlx0XHRmcmVlX3Rhc2sodHNrKTtcbmtlcm5lbC9mb3JrLmMtMTk3MS19XG4tLVxua2VybmVsL2ZvcmsuYz0yMDE4PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4tLVxua2VybmVsL2ZvcmsuYy0yNjMwLWJhZF9mb3JrX2NsZWFudXBfcGVyZjpcbmtlcm5lbC9mb3JrLmM6MjYzMTpcdHBlcmZfZXZlbnRfZnJlZV90YXNrKHApO1xua2VybmVsL2ZvcmsuYy0yNjMyLWJhZF9mb3JrX3NjaGVkX2NhbmNlbF9mb3JrOlxuLS1cbmtlcm5lbC9mb3JrLmMtMjYzNC1iYWRfZm9ya19jbGVhbnVwX3BvbGljeTpcbmtlcm5lbC9mb3JrLmM6MjYzNTpcdGxvY2tkZXBfZnJlZV90YXNrKHApO1xua2VybmVsL2ZvcmsuYy0yNjM2LSNpZmRlZiBDT05GSUdfTlVNQVxuLS1cbmtlcm5lbC9mb3JrLmMtMjY0OS1cdHB1dF90YXNrX3N0YWNrKHApO1xua2VybmVsL2ZvcmsuYzoyNjUwOlx0ZGVsYXllZF9mcmVlX3Rhc2socCk7XG5rZXJuZWwvZm9yay5jLTI2NTEtZm9ya19vdXQ6XG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jPTExNDA9c3RydWN0IHJwY190YXNrICpycGNfbmV3X3Rhc2soY29uc3Qgc3RydWN0IHJwY190YXNrX3NldHVwICpzZXR1cF9kYXRhKVxuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYy0xMTYwLS8qXG5uZXQvc3VucnBjL3NjaGVkLmM6MTE2MTogKiBycGNfZnJlZV90YXNrIC0gcmVsZWFzZSBycGMgdGFzayBhbmQgcGVyZm9ybSBjbGVhbnVwc1xubmV0L3N1bnJwYy9zY2hlZC5jLTExNjItICpcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtMTE3OC0gKi9cbm5ldC9zdW5ycGMvc2NoZWQuYzoxMTc5OnN0YXRpYyB2b2lkIHJwY19mcmVlX3Rhc2soc3RydWN0IHJwY190YXNrICp0YXNrKVxubmV0L3N1bnJwYy9zY2hlZC5jLTExODAte1xuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYz0xMTkwPXN0YXRpYyB2b2lkIHJwY19hc3luY19yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtMTE5My1cbm5ldC9zdW5ycGMvc2NoZWQuYzoxMTk0Olx0cnBjX2ZyZWVfdGFzayhjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dvcmspKTtcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMTk1LVx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKHBmbGFncyk7XG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jPTEyMDk9c3RhdGljIHZvaWQgcnBjX2ZpbmFsX3B1dF90YXNrKHN0cnVjdCBycGNfdGFzayAqdGFzayxcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtMTIxNS1cdH0gZWxzZVxubmV0L3N1bnJwYy9zY2hlZC5jOjEyMTY6XHRcdHJwY19mcmVlX3Rhc2sodGFzayk7XG5uZXQvc3VucnBjL3NjaGVkLmMtMTIxNy19XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmg9MzY9c3RydWN0IGFhX2xhYmVsICphYV9nZXRfdGFza19sYWJlbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvdGFzay5oLTM4LS8qKlxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmg6Mzk6ICogYWFfZnJlZV90YXNrX2N0eCAtIGZyZWUgYSB0YXNrX2N0eFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmgtNDAtICogQGN0eDogdGFza19jdHggdG8gZnJlZSAoTUFZQkUgTlVMTClcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvdGFzay5oLTQxLSAqL1xuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmg6NDI6c3RhdGljIGlubGluZSB2b2lkIGFhX2ZyZWVfdGFza19jdHgoc3RydWN0IGFhX3Rhc2tfY3R4ICpjdHgpXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3Rhc2suaC00My17XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9MTEwPXN0YXRpYyB2b2lkIGFwcGFybW9yX3Rhc2tfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTEyLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTEzOlx0YWFfZnJlZV90YXNrX2N0eCh0YXNrX2N0eCh0YXNrKSk7XG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xMTQtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX2tmdW5jX2ZhaWx1cmUuYz01ND1pbnQgQlBGX1BST0codGFza19rZnVuY19hY3F1aXJlX2ZwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mbGFncylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMtNjctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmM6Njg6U0VDKFwmIzM0O2tyZXRwcm9iZS9mcmVlX3Rhc2tcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMtNjktX19mYWlsdXJlIF9fbXNnKFwmIzM0O2NhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl90YXNrX2FjcXVpcmUgaXMgbm90IGFsbG93ZWRcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmM9NzA9aW50IEJQRl9QUk9HKHRhc2tfa2Z1bmNfYWNxdWlyZV91bnNhZmVfa3JldHByb2JlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHU2NCBjbG9uZV9mbGFncylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMtODItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmM6ODM6U0VDKFwmIzM0O2tyZXRwcm9iZS9mcmVlX3Rhc2tcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMtODQtX19mYWlsdXJlIF9fbXNnKFwmIzM0O2NhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl90YXNrX2FjcXVpcmUgaXMgbm90IGFsbG93ZWRcJiMzNDspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDk5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYGZyZWVfdGFza2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBga2VybmVsL2ZvcmsuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgb2YgYGZyZWVfdGFza2AuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHRlcm1pbmF0ZWQgcHJvY2VzcyBhcmUgcmVsZWFzZWQuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCBtZW1vcnkgZGVhbGxvY2F0aW9uLCBwb3RlbnRpYWxseSBzaWduYWwgaGFuZGxpbmcgY2xlYW51cCwgYW5kIG1heWJlIHNvbWUgcmVsYXRlZCB0YXNrIHN0cnVjdHVyZSB0aWR5aW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGRvIGl0LiBJJiMzOTttIGFudGljaXBhdGluZyBhIHdlbGwtd3JpdHRlbiBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MzM6XHR2b2lkIGZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiA1MzQ6XHR7XG4gNTM1Olx0I2lmZGVmIENPTkZJR19TRUNDT01QXG4gNTM2Olx0XHRXQVJOX09OX09OQ0UodHNrLVx1MDAzZXNlY2NvbXAuZmlsdGVyKTtcbiA1Mzc6XHQjZW5kaWZcbiA1Mzg6XHRcdHJlbGVhc2VfdXNlcl9jcHVzX3B0cih0c2spO1xuIDUzOTpcdFx0c2NzX3JlbGVhc2UodHNrKTtcbiA1NDA6XHRcdHNtcF90YXNrX2lwaV9tYXNrX2ZyZWUodHNrKTtcbiA1NDE6XHRcbiA1NDI6XHQjaWZuZGVmIENPTkZJR19USFJFQURfSU5GT19JTl9UQVNLXG4gNTQzOlx0XHQvKlxuIDU0NDpcdFx0ICogVGhlIHRhc2sgaXMgZmluYWxseSBkb25lIHdpdGggYm90aCB0aGUgc3RhY2sgYW5kIHRocmVhZF9pbmZvLFxuIDU0NTpcdFx0ICogc28gZnJlZSBib3RoLlxuIDU0NjpcdFx0ICovXG4gNTQ3Olx0XHRyZWxlYXNlX3Rhc2tfc3RhY2sodHNrKTtcbiA1NDg6XHQjZWxzZVxuIDU0OTpcdFx0LypcbiA1NTA6XHRcdCAqIElmIHRoZSB0YXNrIGhhZCBhIHNlcGFyYXRlIHN0YWNrIGFsbG9jYXRpb24sIGl0IHNob3VsZCBiZSBnb25lXG4gNTUxOlx0XHQgKiBieSBub3cuXG4gNTUyOlx0XHQgKi9cbiA1NTM6XHRcdFdBUk5fT05fT05DRShyZWZjb3VudF9yZWFkKFx1MDAyNnRzay1cdTAwM2VzdGFja19yZWZjb3VudCkgIT0gMCk7XG4gNTU0Olx0I2VuZGlmXG4gNTU1Olx0XHRydF9tdXRleF9kZWJ1Z190YXNrX2ZyZWUodHNrKTtcbiA1NTY6XHRcdGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2sodHNrKTtcbiA1NTc6XHRcdGFyY2hfcmVsZWFzZV90YXNrX3N0cnVjdCh0c2spO1xuIDU1ODpcdFx0aWYgKHRzay1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRClcbiA1NTk6XHRcdFx0ZnJlZV9rdGhyZWFkX3N0cnVjdCh0c2spO1xuIDU2MDpcdFx0YnBmX3Rhc2tfc3RvcmFnZV9mcmVlKHRzayk7XG4gNTYxOlx0XHRwdXRfdGFza19leGVjX3N0YXRlKHJjdV9hY2Nlc3NfcG9pbnRlcih0c2stXHUwMDNlZXhlY19zdGF0ZSkpO1xuIDU2MjpcdFx0ZnJlZV90YXNrX3N0cnVjdCh0c2spO1xuIDU2MzpcdH1cbiA1NjQ6XHRFWFBPUlRfU1lNQk9MKGZyZWVfdGFzayk7XG4gNTY1Olx0XG4gNTY2Olx0dm9pZCBkdXBfbW1fZXhlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuIDU2NzpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipUcmFjaW5nIFRhc2sgRXhpdDogQSBRdWljayBDaGVjay1pbioqCgpPa2F5LCBzbyBgZnJlZV90YXNrYCBqdXN0IGhpdCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0c2spYC4gIFRoYXQmIzM5O3MgbXkgY3VlIHRvIHF1aWNrbHkgYW5hbHl6ZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgaXMgZG9pbmcgd2hhdCBpdCBzaG91bGQgYmUgZG9pbmcgYXQgdGhpcyBwb2ludCBpbiB0aGUgcHJvY2Vzcy4gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSYjMzk7cmUgcHJvcGVybHkgZXhpdGluZyB0aGUgdHJhY2luZyBncmFwaCBjb250ZXh0IGZvciB0aGUgdGFzayBgdHNrYCBhcyB0aGUgdGFzayBpcyBiZWluZyBmcmVlZC4gTm8gc3VycHJpc2VzLCBubyBtaXNzZWQgY2xlYW4tdXAg4oCTIGp1c3QgYSByb3V0aW5lIGNoZWNrIHRvIGVuc3VyZSB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCBvbiB0YXNrIGV4aXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdHJhY2VfZ3JhcGhfZXhpdF90YXNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM0ND1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNDU6ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQ2LWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpO1xuLS1cbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM2ND1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY1OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjYtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpIHsgfVxuLS1cbmtlcm5lbC9mb3JrLmM9NTMzPXZvaWQgZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmtlcm5lbC9mb3JrLmMtNTU1LVx0cnRfbXV0ZXhfZGVidWdfdGFza19mcmVlKHRzayk7XG5rZXJuZWwvZm9yay5jOjU1NjpcdGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2sodHNrKTtcbmtlcm5lbC9mb3JrLmMtNTU3LVx0YXJjaF9yZWxlYXNlX3Rhc2tfc3RydWN0KHRzayk7XG4tLVxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNjA9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbi0tXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE3OS1cbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTgwOnZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODU3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gYGtlcm5lbC90cmFjZS9mZ3JhcGguY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGhhbmRsZXMgdGhlIGV4aXRpbmcgb2YgdGFza3Mgd2l0aGluIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBkeW5hbWljIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBob3cgaXQgYXZvaWRzIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgcGFydGljdWxhcmx5IGluIGhpZ2gtZnJlcXVlbmN5IHRyYWNpbmcgc2NlbmFyaW9zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRhc2sgdGVhcmRvd24gYW5kIHRyYWNpbmcgZGF0YSBmbHVzaCBvcGVyYXRpb25zLiBJJiMzOTttIGFsc28gY3VyaW91cyBpZiBhbnkgcmVjZW50IGNoYW5nZXMgaW4gdGhlIHNjaGVkdWxlciBvciB0YXNrIHN0YXRlIG1hbmFnZW1lbnQgaGF2ZSBpbXBhY3RlZCB0aGlzIGZ1bmN0aW9uIGFuZCBpZiBhbnkgb3B0aW1pemF0aW9ucyBjYW4gYmUgZGVyaXZlZC4gSSYjMzk7bGwgYmUgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHBheWluZyBhdHRlbnRpb24gdG8gZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzaWRlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2ZncmFwaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTgwOlx0dm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbjExODE6XHR7XG4xMTgyOlx0XHR1bnNpZ25lZCBsb25nICpyZXRfc3RhY2sgPSB0LVx1MDAzZXJldF9zdGFjaztcbjExODM6XHRcbjExODQ6XHRcdHQtXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcbjExODU6XHRcdC8qIE5VTEwgbXVzdCBiZWNvbWUgdmlzaWJsZSB0byBJUlFzIGJlZm9yZSB3ZSBmcmVlIGl0OiAqL1xuMTE4NjpcdFx0YmFycmllcigpO1xuMTE4NzpcdFxuMTE4ODpcdFx0aWYgKHJldF9zdGFjaykge1xuMTE4OTpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFmZ3JhcGhfc3RhY2tfY2FjaGVwKSlcbjExOTA6XHRcdFx0XHRyZXR1cm47XG4xMTkxOlx0XHRcdGttZW1fY2FjaGVfZnJlZShmZ3JhcGhfc3RhY2tfY2FjaGVwLCByZXRfc3RhY2spO1xuMTE5MjpcdFx0fVxuMTE5MzpcdH1cbjExOTQ6XHRcbjExOTU6XHQjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFXG4xMTk2Olx0c3RhdGljIGludCBmZ3JhcGhfcGlkX2Z1bmMoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLFxuMTE5NzpcdFx0XHRcdCAgIHN0cnVjdCBmZ3JhcGhfb3BzICpnb3BzLFxuMTE5ODpcdFx0XHRcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXG4xMTk5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQxNQoJCQkJCQkJb3V0cHV0OiAzMDUKCQkJCQkJCXRob3VnaHRzOiA3ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ2xhc3NpYyBLZXJuZWwgQnVnKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGRlYWwuIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCBmcmVlcyB0aGUgYHQtJmd0O3JldF9zdGFja2AgdXNpbmcgYGttZW1fY2FjaGVfZnJlZWAuIE5vdywgaWYgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGhhc24mIzM5O3QgYmVlbiBjYWxsZWQgeWV0LCB0aGUgYHQtJmd0O3JldF9zdGFja2AgaXMgc3RpbGwgcG9pbnRpbmcgdG8gdGhlICpwYXJlbnQmIzM5O3MqIGByZXRfc3RhY2tgLiBTbywgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGlzIGVmZmVjdGl2ZWx5IGZyZWVpbmcgdGhlIHBhcmVudCYjMzk7cyBzdGFjayEgQm9vbSwgY2xhc3NpYyBkb3VibGUgZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBidWcuCgpUaGUgcGFyZW50IHRhc2ssIG9ibGl2aW91c2x5LCBpcyBnb2luZyB0byBrZWVwIHVzaW5nIGl0cyBgcmV0X3N0YWNrYCwgd2hpY2ggaXMgbm93IGZyZWVkLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBLQVNBTiBleGNlbHMgYXQgZGV0ZWN0aW5nIOKAkyBhIHVzZS1hZnRlci1mcmVlIG9yIGEgZG91YmxlLWZyZWUgc2l0dWF0aW9uLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgdGhlcmUgYWxzbyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBlbGVtZW50IGhlcmU/IE5vLCBub3QgcmVhbGx5LiBUaGlzIGludm9sdmVzIGEgKmNvcGllZCogcG9pbnRlciB0aGF0IHNob3VsZCYjMzk7dmUgYmVlbiBzZXQgdG8gYE5VTExgIGJ1dCB3YXNuJiMzOTt0LCB3aGljaCBsZWFkcyB0byB0aGUgZG91YmxlIGZyZWUgb3IgVUFGLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJbiB0aGlzIGNhc2UsIHRoZSBtZW1vcnkgKmlzKiBpbml0aWFsaXplZCwgaXQmIzM5O3MgdGhlIHBhcmVudCYjMzk7cyBwb2ludGVyLiBUaGUgcHJvYmxlbSBpcyBmdW5kYW1lbnRhbGx5IGluY29ycmVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgaGVyZS4KClRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gYGR1cF90YXNrX3N0cnVjdGAgY29waWVzIHRoZSAqZW50aXJlKiBgdGFza19zdHJ1Y3RgIGZyb20gdGhlIHBhcmVudC4gU28sIGFsbCB0aGUgZmllbGRzIGFyZSBpbml0aWFsaXplZCB3aXRoIHRoZSBwYXJlbnQmIzM5O3MgdmFsdWVzLiBUaGVuLCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgY29tZXMgYWxvbmcgYW5kIHNldHMgYHQtJmd0O3JldF9zdGFjayA9IE5VTExgIGFuZCBzbyBvbi4gQnV0IGlmIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCAqaXNuJiMzOTt0KiBjYWxsZWQsIGB0LSZndDtyZXRfc3RhY2tgIHN0YXlzIGFzIHRoZSBwYXJlbnQmIzM5O3MgcG9pbnRlci4gV2hlbiBgZnJlZV90YXNrYCBnZXRzIGNhbGxlZCBvbiB0aGUgY2hpbGQgKGR1ZSB0byBhbiBlcnJvciBpbiBgY29weV9wcm9jZXNzYCksIGl0IGVuZHMgdXAgZnJlZWluZyBgdC0mZ3Q7cmV0X3N0YWNrYC4gVGhpcyBmcmVlcyB0aGUgKnBhcmVudCYjMzk7cyogYHJldF9zdGFja2AuIFRoZSBwYXJlbnQgaXMgc3RpbGwgcnVubmluZyBhbmQgd2lsbCBhY2Nlc3MgaXRzIG5vdy1mcmVlZCBgcmV0X3N0YWNrYC4gVXNlLWFmdGVyLWZyZWUsIEtBU0FOIGNhdGNoZXMgaXQgaW1tZWRpYXRlbHkuIEFsc28sIGlmIHRoZSBwYXJlbnQgZXhpdHMsIGl0IHdpbGwgdHJ5IHRvIGZyZWUgaXRzIGByZXRfc3RhY2tgIGFnYWluLCBjYXVzaW5nIGEgZG91YmxlIGZyZWUuIEtBU0FOIHdpbGwgZGV0ZWN0IHRoaXMgYXMgd2VsbC4KClRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayBoYXBwZW5pbmcgaGVyZS4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4KCkxldCBtZSBsYXkgb3V0IHRoZSByZWFzb25pbmcgaW4gYSBzdHJ1Y3R1cmVkIHdheTogVGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gcHJldmVudCBhIGJ1ZyB3aGVyZSBhbiBlcnJvciBwYXRoIGZyZWVzIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AuIFNwZWNpZmljYWxseSwgYGR1cF90YXNrX3N0cnVjdCgpYCBjb3BpZXMgdGhlIHBhcmVudCYjMzk7cyBgdGFza19zdHJ1Y3RgLCBpbmNsdWRpbmcgdGhlIGByZXRfc3RhY2tgIHBvaW50ZXIuIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKClgIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyB0aGlzIHBvaW50ZXIgKGB0LSZndDtyZXRfc3RhY2sgPSBOVUxMYCkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlmIHRyYWNpbmcgaXMgYWN0aXZlLiBJZiBhbiBlcnJvciBvY2N1cnMgaW4gYGNvcHlfcHJvY2VzcygpYCBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCAoZS5nLiwgYGJhZF9mb3JrX2ZyZWVgKSB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV90YXNrKClgLCB3aGljaCBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAgd2lsbCBmcmVlIGB0LSZndDtyZXRfc3RhY2tgLiBTaW5jZSBpdCB3YXMgbmV2ZXIgY2xlYXJlZCwgaXQgZnJlZXMgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYC4gVGhpcyByZXN1bHRzIGluIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGUgcGFyZW50IGNvbnRpbnVlcyB0byB1c2UgaXRzIGByZXRfc3RhY2tgLCBvciBhIGRvdWJsZSBmcmVlIHdoZW4gdGhlIHBhcmVudCBleGl0cy4gQm90aCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlIGZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIHByZXZlbnQgYSBidWcgd2hlcmUgYW4gZXJyb3IgcGF0aCBpbmNvcnJlY3RseSBmcmVlcyB0aGUgcGFyZW50JiMzOTtzIGByZXRfc3RhY2tgLiBTcGVjaWZpY2FsbHksIGBkdXBfdGFza19zdHJ1Y3QoKWAgY29waWVzIHRoZSBwYXJlbnQmIzM5O3MgYHRhc2tfc3RydWN0YCwgaW5jbHVkaW5nIHRoZSBgcmV0X3N0YWNrYCBwb2ludGVyLiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhpcyBwb2ludGVyIChgdC1cdTAwM2VyZXRfc3RhY2sgPSBOVUxMYCkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlmIHRyYWNpbmcgaXMgYWN0aXZlLiBJZiBhbiBlcnJvciBvY2N1cnMgaW4gYGNvcHlfcHJvY2VzcygpYCBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV90YXNrKClgLCB3aGljaCBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAgd2lsbCB0aGVuIGZyZWUgYHQtXHUwMDNlcmV0X3N0YWNrYC4gU2luY2UgaXQgd2FzIG5ldmVyIGNsZWFyZWQsIGl0IGZyZWVzIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AuIFRoaXMgcmVzdWx0cyBpbiBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCBjb250aW51ZXMgdG8gdXNlIGl0cyBgcmV0X3N0YWNrYCwgb3IgYSBkb3VibGUgZnJlZSB3aGVuIHRoZSBwYXJlbnQgZXhpdHMuXG5cbkJvdGggdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZSBmcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaW4gdGhpcyBidWcsIGFzIHRoZSBwb2ludGVyIGl0c2VsZiBpcyBpbml0aWFsaXplZCAoY29waWVkIGZyb20gdGhlIHBhcmVudCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gcHJldmVudCBhIGJ1ZyB3aGVyZSBhbiBlcnJvciBwYXRoIGluY29ycmVjdGx5IGZyZWVzIHRoZSBwYXJlbnQmIzM5O3MgYHJldF9zdGFja2AuIFNwZWNpZmljYWxseSwgYGR1cF90YXNrX3N0cnVjdCgpYCBjb3BpZXMgdGhlIHBhcmVudCYjMzk7cyBgdGFza19zdHJ1Y3RgLCBpbmNsdWRpbmcgdGhlIGByZXRfc3RhY2tgIHBvaW50ZXIuIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKClgIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyB0aGlzIHBvaW50ZXIgKGB0LVx1MDAzZXJldF9zdGFjayA9IE5VTExgKSBhbmQgYWxsb2NhdGluZyBhIG5ldyBvbmUgaWYgdHJhY2luZyBpcyBhY3RpdmUuIElmIGFuIGVycm9yIG9jY3VycyBpbiBgY29weV9wcm9jZXNzKClgIGJlZm9yZSBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCBpcyBjYWxsZWQsIHRoZSBlcnJvciBwYXRoIHdpbGwgZXZlbnR1YWxseSBjYWxsIGBmcmVlX3Rhc2soKWAsIHdoaWNoIGNhbGxzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKClgLiBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYCB3aWxsIHRoZW4gZnJlZSBgdC1cdTAwM2VyZXRfc3RhY2tgLiBTaW5jZSBpdCB3YXMgbmV2ZXIgY2xlYXJlZCwgaXQgZnJlZXMgdGhlIHBhcmVudCYjMzk7cyBgcmV0X3N0YWNrYC4gVGhpcyByZXN1bHRzIGluIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGUgcGFyZW50IGNvbnRpbnVlcyB0byB1c2UgaXRzIGByZXRfc3RhY2tgLCBvciBhIGRvdWJsZSBmcmVlIHdoZW4gdGhlIHBhcmVudCBleGl0cy5cblxuQm90aCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlIGZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayBpbnZvbHZlZCBpbiB0aGlzIGJ1ZywgYXMgdGhlIHBvaW50ZXIgaXRzZWxmIGlzIGluaXRpYWxpemVkIChjb3BpZWQgZnJvbSB0aGUgcGFyZW50KS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0MDo0Ny44MDE1ODMyOTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTAwNzQyNzEzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJGVU5DVElPTl9UUkFDRVJcIixcbiAgICBcIkZVTkNUSU9OX0dSQVBIX1RSQUNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImtlcm5lbF9jbG9uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socClgIGVhcmxpZXIgaW4gYGNvcHlfcHJvY2VzcygpYCB0byBwcmV2ZW50IGEgYnVnIHdoZXJlIGFuIGVycm9yIHBhdGggaW5jb3JyZWN0bHkgZnJlZXMgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLiBTcGVjaWZpY2FsbHksIGBkdXBfdGFza19zdHJ1Y3QoKWAgY29waWVzIHRoZSBwYXJlbnQncyBgdGFza19zdHJ1Y3RgLCBpbmNsdWRpbmcgdGhlIGByZXRfc3RhY2tgIHBvaW50ZXIuIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKClgIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyB0aGlzIHBvaW50ZXIgKGB0LVxcdTAwM2VyZXRfc3RhY2sgPSBOVUxMYCkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlmIHRyYWNpbmcgaXMgYWN0aXZlLiBJZiBhbiBlcnJvciBvY2N1cnMgaW4gYGNvcHlfcHJvY2VzcygpYCBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV90YXNrKClgLCB3aGljaCBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAgd2lsbCB0aGVuIGZyZWUgYHQtXFx1MDAzZXJldF9zdGFja2AuIFNpbmNlIGl0IHdhcyBuZXZlciBjbGVhcmVkLCBpdCBmcmVlcyB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AuIFRoaXMgcmVzdWx0cyBpbiBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCBjb250aW51ZXMgdG8gdXNlIGl0cyBgcmV0X3N0YWNrYCwgb3IgYSBkb3VibGUgZnJlZSB3aGVuIHRoZSBwYXJlbnQgZXhpdHMuXFxuXFxuQm90aCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlIGZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayBpbnZvbHZlZCBpbiB0aGlzIGJ1ZywgYXMgdGhlIHBvaW50ZXIgaXRzZWxmIGlzIGluaXRpYWxpemVkIChjb3BpZWQgZnJvbSB0aGUgcGFyZW50KS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlIGJ1ZyBpbiB0aGUgZXJyb3IgcGF0aCBvZiBjb3B5X3Byb2Nlc3MoKSB3aGVuIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgaXMgZW5hYmxlZC4gSXQgbW92ZXMgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpIGVhcmxpZXIgc28gdGhhdCBpZiBjb3B5X3Byb2Nlc3MoKSBmYWlscywgdGhlIHBhcmVudCdzIHJldF9zdGFjayBpcyBub3QgaW5jb3JyZWN0bHkgZnJlZWQgYnkgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAocHJvY2VzcyBjcmVhdGlvbikgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQwOjQ3LjgwMTU4OTMxM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyNTUxMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzYxOTQxZjkzZGIzZTIzNzQwODE5YjAxODViZjA0N2M5OTkyMGViOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyMiAyMDo0MDo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xcbmluZGV4IDFlNjg0MDRiZDc3M2UuLjBkMWFkOTJlMmQzMzcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2ZvcmsuY1xcbisrKyBiL2tlcm5lbC9mb3JrLmNcXG5AQCAtMjEzOSw2ICsyMTM5LDExIEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuIFxcdHAgPSBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7XFxuIFxcdGlmICghcClcXG4gXFx0XFx0Z290byBmb3JrX291dDtcXG4rXFx0LypcXG4rXFx0ICogTXVzdCBydW4gYmVmb3JlIHRoZSBmaXJzdCBmYWxsaWJsZSBvcCwgc28gZXJyb3IgcGF0aHMgbmV2ZXJcXG4rXFx0ICogZnJlZSB0aGUgcGFyZW50J3MgcmV0X3N0YWNrLlxcbitcXHQgKi9cXG4rXFx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcXG4gXFx0cmV0dmFsID0gY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTtcXG4gXFx0aWYgKHJldHZhbClcXG4gXFx0XFx0Z290byBiYWRfZm9ya19mcmVlO1xcbkBAIC0yMTY1LDggKzIxNzAsNiBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbiBcXHQgKi9cXG4gXFx0cC1cXHUwMDNlY2xlYXJfY2hpbGRfdGlkID0gKGNsb25lX2ZsYWdzIFxcdTAwMjYgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQpID8gYXJncy1cXHUwMDNlY2hpbGRfdGlkIDogTlVMTDtcXG4gXFxuLVxcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XFxuLVxcbiBcXHRydF9tdXRleF9pbml0X3Rhc2socCk7XFxuIFxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2cC1cXHUwMDNlYmxvY2tlZF9sb2NrKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQwOjQ4LjIzNDk4OTgwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2NTc5OTE1MTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkZVTkNUSU9OX1RSQUNFUlwiLFxuICAgIFwiRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2VybmVsX2Nsb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgYnVnIGluIHRoZSBlcnJvciBwYXRoIG9mIGNvcHlfcHJvY2VzcygpIHdoZW4gdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBpcyBlbmFibGVkLiBJdCBtb3ZlcyBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKCkgZWFybGllciBzbyB0aGF0IGlmIGNvcHlfcHJvY2VzcygpIGZhaWxzLCB0aGUgcGFyZW50J3MgcmV0X3N0YWNrIGlzIG5vdCBpbmNvcnJlY3RseSBmcmVlZCBieSBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChwcm9jZXNzIGNyZWF0aW9uKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzYxOTQxZjkzZGIzZTIzNzQwODE5YjAxODViZjA0N2M5OTkyMGViOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDIwOjQwOjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcbmluZGV4IDFlNjg0MDRiZDc3M2UuLjBkMWFkOTJlMmQzMzcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZm9yay5jXG4rKysgYi9rZXJuZWwvZm9yay5jXG5AQCAtMjEzOSw2ICsyMTM5LDExIEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4gXHRwID0gZHVwX3Rhc2tfc3RydWN0KGN1cnJlbnQsIG5vZGUpO1xuIFx0aWYgKCFwKVxuIFx0XHRnb3RvIGZvcmtfb3V0O1xuK1x0LypcbitcdCAqIE11c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgZmFsbGlibGUgb3AsIHNvIGVycm9yIHBhdGhzIG5ldmVyXG4rXHQgKiBmcmVlIHRoZSBwYXJlbnQncyByZXRfc3RhY2suXG4rXHQgKi9cbitcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XG4gXHRyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO1xuIFx0aWYgKHJldHZhbClcbiBcdFx0Z290byBiYWRfZm9ya19mcmVlO1xuQEAgLTIxNjUsOCArMjE3MCw2IEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4gXHQgKi9cbiBcdHAtXHUwMDNlY2xlYXJfY2hpbGRfdGlkID0gKGNsb25lX2ZsYWdzIFx1MDAyNiBDTE9ORV9DSElMRF9DTEVBUlRJRCkgPyBhcmdzLVx1MDAzZWNoaWxkX3RpZCA6IE5VTEw7XG4gXG4tXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xuLVxuIFx0cnRfbXV0ZXhfaW5pdF90YXNrKHApO1xuIFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnAtXHUwMDNlYmxvY2tlZF9sb2NrKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQwOjQ4LjIzNDk5MTQzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NjQ3ODg1NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBrZXJuZWwvZm9yay5jYC4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIGl0IGludm9sdmVzIHJlcG9zaXRpb25pbmcgdGhlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO2AgY2FsbCB3aXRoaW4gdGhlIGBjb3B5X3Byb2Nlc3NgIGZ1bmN0aW9uLiBDdXJyZW50bHksIGl0J3MgYmVpbmcgbW92ZWQgdXAgdGhlIGNhbGwgc3RhY2suIFNwZWNpZmljYWxseSwgaXQncyBnb2luZyB0byBiZSBleGVjdXRlZCByaWdodCBhZnRlciBgZHVwX3Rhc2tfc3RydWN0KGN1cnJlbnQsIG5vZGUpO2AgYW5kIGJlZm9yZSBgY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTtgLlxuXG5UaGUgcHJvdmlkZWQgY29tbWVudCBpcyBjbGVhciDigJMgdGhlIGdvYWwgaXMgdG8gZXhlY3V0ZSB0aGlzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBvcGVyYXRpb24gKmJlZm9yZSogYW55IHBvdGVudGlhbGx5IGVycm9yLXByb25lIHN0ZXBzIGFyZSB0YWtlbi4gVGhlIGltcGxpY2F0aW9uLCBvZiBjb3Vyc2UsIGlzIHRoYXQgd2Ugd2FudCB0byBlbnN1cmUgZXJyb3IgcGF0aHMgZG9uJ3QgcHJlbWF0dXJlbHkgcmVsZWFzZSB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gQXZvaWRpbmcgcmVzb3VyY2UgbGVha3MsIGVzcGVjaWFsbHkgaW4gY3JpdGljYWwgcGF0aCBmdW5jdGlvbnMgbGlrZSBgY29weV9wcm9jZXNzYCwgaXMgcGFyYW1vdW50IHRvIHN5c3RlbSBzdGFiaWxpdHkuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgYWN0dWFsbHkgKmRvZXMqLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gaXRzIGltcGxlbWVudGF0aW9uIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2hhbmdlIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiB0cmFjaW5nLCBwcm9jZXNzIGNyZWF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDI6MjIuODgyODgwMDk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTMzMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2ZvcmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZm9yay5jPTIwMTg9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjE0NS1cXHQgKi9cXG5rZXJuZWwvZm9yay5jOjIxNDY6XFx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcXG5rZXJuZWwvZm9yay5jLTIxNDctXFx0cmV0dmFsID0gY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDI6MjIuOTMwMDIwNzU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkxNzY5NDk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBUYXNrIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwncyB0cmFjaW5nIG1lY2hhbmlzbXMgYWdhaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBpcyBhY3R1YWxseSBzZXQgdXAuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLiBLbm93aW5nIHRoZSBleGFjdCBsb2NhdGlvbiB3aWxsIGluZm9ybSB0aGUgc3Vic2VxdWVudCBpbnZlc3RpZ2F0aW9uLiBJIG1pZ2h0IGJlIGxvb2tpbmcgZm9yIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gYSBjcnVjaWFsIGhvb2sgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQncyBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoIHRvIGxvY2F0ZSBpdHMgZGVmaW5pdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHRyYWNpbmcgdGhlIGNvbnRleHQgaW4gd2hpY2ggYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGlzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQyOjI3Ljg0NzcxODg0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA5Nzc5MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM0Mj1leHRlcm4gdHJhY2VfZnVuY19ncmFwaF9lbnRfdCBmdHJhY2VfZ3JhcGhfZW50cnk7XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQzLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM0NDpleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzQ1LWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM1Nj1zdGF0aWMgaW5saW5lIHZvaWQgdW5wYXVzZV9ncmFwaF90cmFjaW5nKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjMtXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzY0OnN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzY1LXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkgeyB9XFxuLS1cXG5rZXJuZWwvZm9yay5jPTIwMTg9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjE0NS1cXHQgKi9cXG5rZXJuZWwvZm9yay5jOjIxNDY6XFx0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcXG5rZXJuZWwvZm9yay5jLTIxNDctXFx0cmV0dmFsID0gY29weV9leGVjX3N0YXRlKGNsb25lX2ZsYWdzLCBwKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTMxPXZvaWQgZnRyYWNlX2dyYXBoX2luaXRfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTU5LS8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE2MDp2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDI6MjkuNjU3NTA0ODRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc4ODQ3NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqRGl2aW5nIGludG8gdGhlIEZ1bmN0aW9uIEdyYXBoIFRyYWNlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGluaXRpYWxpemVzIGl0c2VsZiwgc3BlY2lmaWNhbGx5IGF0IHRoZSB0YXNrIGxldmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gSSBrbm93IHRoYXQgdGhlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgYSBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBJJ20gcHJldHR5IGNlcnRhaW4gdGhhdCB0aGUgYGtlcm5lbC90cmFjZS9gIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gdGhlIHJlbGV2YW50IGNvZGUuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiBvZiBmdHJhY2UtcmVsYXRlZCBmdW5jdGlvbnMsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGxvb2sgZm9yIHNvbWV0aGluZyBsaWtlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYC4gVGhpcyBzdWdnZXN0cyBpdCdzIGxpa2VseSBhIGZ1bmN0aW9uIGRlZGljYXRlZCB0byBwZXItdGFzayBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlci4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LCBsZXQncyBnbyBjaGVjayBga2VybmVsL3RyYWNlL2ZncmFwaC5jYC4gSSdsbCBsb29rIGZvciB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgaXRzIHJvbGUgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjk0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDI6MzIuOTM2MzU1MTc5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9mZ3JhcGguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTU5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTU5OlxcdC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBuZXdseSBjcmVhdGVkIHRhc2sgKi9cXG4xMTYwOlxcdHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuMTE2MTpcXHR7XFxuMTE2MjpcXHRcXHQvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHVzZSB0aGUgcGFyZW50IHJldF9zdGFjayAqL1xcbjExNjM6XFx0XFx0dC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcXG4xMTY0OlxcdFxcdHQtXFx1MDAzZWN1cnJfcmV0X3N0YWNrID0gMDtcXG4xMTY1OlxcdFxcdHQtXFx1MDAzZWN1cnJfcmV0X2RlcHRoID0gLTE7XFxuMTE2NjpcXHRcXG4xMTY3OlxcdFxcdGlmIChmdHJhY2VfZ3JhcGhfYWN0aXZlKSB7XFxuMTE2ODpcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpyZXRfc3RhY2s7XFxuMTE2OTpcXHRcXG4xMTcwOlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWZncmFwaF9zdGFja19jYWNoZXApKVxcbjExNzE6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRcXHRyZXRfc3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKGZncmFwaF9zdGFja19jYWNoZXAsIEdGUF9LRVJORUwpO1xcbjExNzQ6XFx0XFx0XFx0aWYgKCFyZXRfc3RhY2spXFxuMTE3NTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTE3NjpcXHRcXHRcXHRncmFwaF9pbml0X3Rhc2sodCwgcmV0X3N0YWNrKTtcXG4xMTc3OlxcdFxcdH1cXG4xMTc4OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDI6MzIuOTM2NDY1ODk5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4NzA3ODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGNvcHlfcHJvY2Vzc2AgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IG5hc3R5IHJhY2UgY29uZGl0aW9uIGluIGBjb3B5X3Byb2Nlc3NgLiBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSB3aW5kb3cgd2hlcmUgYGNvcHlfcHJvY2Vzc2AgY291bGQgZmFpbCAqYmVmb3JlKiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgZ2V0cyBjYWxsZWQuIFRoYXQncyBhIHByb2JsZW0gYmVjYXVzZSBgZHVwX3Rhc2tfc3RydWN0YCBpcyBnb2luZyB0byBjb3B5IHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCBpbnRvIHRoZSBjaGlsZCdzIGB0YXNrX3N0cnVjdGAuIElmIHRoZSBjb3B5IGZhaWxzIGVhcmx5LCB0aGUgY2hpbGQncyBgdC1cdTAwM2VyZXRfc3RhY2tgIGVuZHMgdXAgcG9pbnRpbmcgdG8gdGhlICpwYXJlbnQncyogYHJldF9zdGFja2Ag4oCTIGEgcG90ZW50aWFsIGRhbmdsaW5nIHBvaW50ZXIgc2l0dWF0aW9uLlxuXG5UaGUgZXJyb3IgaGFuZGxpbmcgaXMgd2hhdCdzIGNydWNpYWwgaGVyZS4gVGhleSBhcmUgZnJlZWluZyB0aGUgY2hpbGQncyBgdGFza19zdHJ1Y3RgLCBidXQgd2hhdCBhYm91dCB0aGUgYHJldF9zdGFja2A/IElzIGl0IGV4cGxpY2l0bHkgZnJlZWQsIG9yIGRvZXMgdGhlIGNvZGUgbGVhdmUgaXQgYmU/IEl0IGlzIHVuY2xlYXIgd2hldGhlciBpdCBpcyBmcmVlZCwgb3IgcG90ZW50aWFsbHkgZnJlZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMuIE15IGNvbmNlcm4gaXMsIGBmcmVlX3Rhc2tgIGlzIGludm9sdmVkLCBhbmQgYGZyZWVfdGFza2AgKmRvZXMqIGNhbGwgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2sodClgLiBTbywgSSd2ZSBnb3QgdG8gY2hlY2sgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGFuZCBzZWUgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhhdCBgcmV0X3N0YWNrYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQyOjM3LjAyMzU0NzcxOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MzkzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnRyYWNlX2dyYXBoX2V4aXRfdGFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvZmdyYXBoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2ZncmFwaC5jPTExNjA9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTc5LVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTgwOnZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0MjozNy4wNzIzOTQyMzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2MjM0MTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCwgc3VtbWFyaXplZCBpbiBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIGl0LiBUaGUgbmFtZSBhbG9uZSB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBjcnVjaWFsIGZvciBoYW5kbGluZyB0YXNrIGV4aXRzIHdpdGhpbiB0aGUgYGZ0cmFjZWAgZ3JhcGggdHJhY2VyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHRyYWNlIGV2ZW50cyByZWxhdGVkIHRvIGEgdGFzaydzIHRlcm1pbmF0aW9uLiBUaGlzIGZ1bmN0aW9uIHByb2JhYmx5IGludGVyYWN0cyB3aXRoIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiBgZnRyYWNlYCB0aGF0IHRyYWNrIHRhc2tzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHRyYWNpbmcgaW5mb3JtYXRpb24sIGFuZCB0aGF0IGluZm9ybWF0aW9uIG5lZWRzIGNsZWFuaW5nIHVwIHRvIGtlZXAgdGhlIHRyYWNlciBpbiBhIGdvb2Qgc3RhdGUuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IGV4YWN0bHkgaXMgYmVpbmcgY2xlYW5lZCB1cD8gSXMgdGhpcyB0aHJlYWQgc2FmZSwgYW5kIGhvdz8gSG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIG90aGVyIHRyYWNpbmcgbWVjaGFuaXNtcywgbGlrZSB0aGUgcGVyLUNQVSBidWZmZXJzPyBJcyBpdCBjYWxsZWQgZnJvbSBhIGNvbnRleHQgdGhhdCBjYW4gYmxvY2ssIG9yIGlzIGl0IGRlc2lnbmVkIHRvIGJlIG5vbi1ibG9ja2luZyB0byBhdm9pZCBkZWFkbG9ja3MgZHVyaW5nIHRhc2sgZXhpdD8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIGxvb2tpbmcgb3V0IGZvciwgY29uc2lkZXJpbmcgYSB0YXNrIGlzLCBieSBkZWZpbml0aW9uLCBleGl0aW5nPyBUaGlzIGtpbmQgb2YgZnVuY3Rpb24gaXMgdXN1YWxseSBmcmF1Z2h0IHdpdGggZWRnZSBjYXNlcyFcblxuSSdtIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyBsaWtlOlxuKiAgIFVucmVnaXN0ZXJpbmcgdGhlIHRhc2sgZnJvbSB0aGUgYGZ0cmFjZWAgZ3JhcGggdHJhY2luZyBzeXN0ZW0uXG4qICAgUmVsZWFzaW5nIGFueSBhc3NvY2lhdGVkIG1lbW9yeSBhbGxvY2F0ZWQgc3BlY2lmaWNhbGx5IGZvciB0aGF0IHRhc2suXG4qICAgUG90ZW50aWFsbHkgd3JpdGluZyBmaW5hbCB0cmFjZSBldmVudHMgcmVsYXRlZCB0byB0aGUgdGFzaydzIGxhc3QgYWN0aXZpdGllcy5cbiogICBQZXJoYXBzIHNvbWUgY291bnRlciBhZGp1c3RtZW50cywgdG8ga2VlcCB0cmFjayBvZiBhY3RpdmUgdGFza3Mgd2l0aGluIHRoZSB0cmFjZXIuXG5cbkxldCdzIHJlYWQgdGhlIGNvZGUgYW5kIGNvbmZpcm0gdGhlc2UgYXNzdW1wdGlvbnMsIGFuZCBjaGVjayBmb3IgYW55IHVuZXhwZWN0ZWQgY29tcGxleGl0eSBvciBjbGV2ZXIgb3B0aW1pemF0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGNvcnJlY3RuZXNzIGJ1Z3MgdGhhdCBjb3VsZCBhcmlzZSB3aGVuIHRhc2tzIGFyZSBjb25zdGFudGx5IGJlaW5nIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQyOjQxLjMzNDc0MDE0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2ZncmFwaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExODA6XFx0dm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4xMTgxOlxcdHtcXG4xMTgyOlxcdFxcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjayA9IHQtXFx1MDAzZXJldF9zdGFjaztcXG4xMTgzOlxcdFxcbjExODQ6XFx0XFx0dC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcXG4xMTg1OlxcdFxcdC8qIE5VTEwgbXVzdCBiZWNvbWUgdmlzaWJsZSB0byBJUlFzIGJlZm9yZSB3ZSBmcmVlIGl0OiAqL1xcbjExODY6XFx0XFx0YmFycmllcigpO1xcbjExODc6XFx0XFxuMTE4ODpcXHRcXHRpZiAocmV0X3N0YWNrKSB7XFxuMTE4OTpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFmZ3JhcGhfc3RhY2tfY2FjaGVwKSlcXG4xMTkwOlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMTkxOlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShmZ3JhcGhfc3RhY2tfY2FjaGVwLCByZXRfc3RhY2spO1xcbjExOTI6XFx0XFx0fVxcbjExOTM6XFx0fVxcbjExOTQ6XFx0XFxuMTE5NTpcXHQjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFXFxuMTE5NjpcXHRzdGF0aWMgaW50IGZncmFwaF9waWRfZnVuYyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxuMTE5NzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG4xMTk4OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuMTE5OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQyOjQxLjMzNDg2MTMzNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTgzMTM5NDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBLZXJuZWwgQnVnIGFuZCBpdHMgRnV6emluZyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgKmRvZXMqIGluZGVlZCBmcmVlIGB0LVx1MDAzZXJldF9zdGFja2AuIFRoZSBwb3RlbnRpYWwgaXNzdWUgaXMgaWYgYGNvcHlfcHJvY2Vzc2AgZmFpbHMgYmVmb3JlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBnZXRzIGNhbGxlZC4gSW4gdGhhdCBzY2VuYXJpbywgdGhlIG5ldyB0YXNrJ3MgYHQtXHUwMDNlcmV0X3N0YWNrYCB3aWxsIGluaXRpYWxseSBiZSBhIGNvcHkgb2YgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgICh0aGFua3MgdG8gYGR1cF90YXNrX3N0cnVjdGApLiBUaGVuLCBpZiBgZnJlZV90YXNrYCBpcyBjYWxsZWQgKmJlZm9yZSogYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLCAgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIHdpbGwgbWlzdGFrZW5seSBmcmVlIHRoZSAqcGFyZW50J3MqIGByZXRfc3RhY2tgLiBUaGF0J3MgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlLCBvciB3b3JzZSwgYSBkb3VibGUgZnJlZSwgb3IgYSBmcmVlIG9mIGFuIGluLXVzZSBvYmplY3QsIHdhaXRpbmcgdG8gaGFwcGVuLlxuXG5TaG91bGQgSSBib3RoZXIgZnV6emluZyB0aGlzPyBUaGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDoganVzdCBtb3ZlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3NgLiBJdCdzIGEgYnVnIGZpeCBmb3IgYW4gZXJyb3IvcmFjZSBjb25kaXRpb24gd2l0aGluIGBjb3B5X3Byb2Nlc3NgLCBhbmQgaXQgc2hvdWxkbid0IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgY2hhbmdlcy4gSXQncyBqdXN0IGEgbWF0dGVyIG9mIHRoZSBvcmRlciBvZiBpbml0aWFsaXphdGlvbi5cblxuV2FpdCwgaXMgaXQgYSBwdXJlIGJ1ZyBmaXg/IFRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gY29uc2lkZXIgaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiAgU2luY2UgaXTigJlzIGEgbW9kaWZpY2F0aW9uIHRvIGBjb3B5X3Byb2Nlc3NgIGluIGBrZXJuZWwvZm9yay5jYCwgdGhhdCdzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuICBUaGVyZWZvcmUsIGl0J3Mgd29ydGggZnV6emluZyEgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTm93LCB3aGVyZSBkbyBJIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydHM/ICBgY29weV9wcm9jZXNzYCBpdHNlbGYgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCdzIGNhbGxlZCBieSBga2VybmVsX2Nsb25lYCwgd2hpY2ggaW4gdHVybiBnZXRzIGNhbGxlZCBieSBgc3lzX2Nsb25lYCwgYHN5c19mb3JrYCwgYHN5c192Zm9ya2AsIGV0Yy4gVGhlIHByb21wdCB3YXJucyBhZ2FpbnN0IGxpc3RpbmcgaG90LXBhdGggZ2VuZXJpYyBmdW5jdGlvbnMsIHNvIEkgd2FudCB0byBiZSBtb3JlIHNwZWNpZmljLiBgc3lzX2Nsb25lYCwgYHN5c19mb3JrYCwgYW5kIGBzeXNfY2xvbmUzYCAqYXJlKiBlbnRyeSBwb2ludHMsIGJ1dCB0aGV5IGFyZSBwcmV0dHkgaG90LXBhdGguICBCdXQsIEkgaGF2ZSB0byBmaW5kIGEgd2F5IHRvIG1ha2UgYGNvcHlfcHJvY2Vzc2AgKmZhaWwqIHRvIHRyaWdnZXIgdGhlIGJ1Zy4gIEkgdGhpbmsgSSBjYW4gdHJpZ2dlciB0aGlzIGJ5IHBhc3NpbmcgaW52YWxpZCBhcmd1bWVudHMgdG8gc29tZXRoaW5nIGxpa2UgYGNsb25lM2Agb3IgYnkgaGl0dGluZyBhIHJlc291cmNlIGxpbWl0LiAgYHN5c19jbG9uZTNgIG1pZ2h0IGJlIGEgZ29vZCBjYW5kaWRhdGUgdG8gZm9jdXMgb24uXG5cbkNydWNpYWxseSwgdGhpcyBidWcgKm9ubHkqIG1hdGVyaWFsaXplcyBpZiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXMgYWN0aXZlICpvciogaWYgYHQtXHUwMDNlcmV0X3N0YWNrYCBpcyBub3QgTlVMTC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgaXMgZW5hYmxlZCwgYmVjYXVzZSBgdC1cdTAwM2VyZXRfc3RhY2tgIGlzIG9ubHkgdXRpbGl6ZWQgd2l0aCB0aGF0IGNvbmZpZyBzZXR0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDM6NTcuMTY2MjYxNDAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU0NjY2Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVU5DVElPTl9HUkFQSF9UUkFDRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTIzNT1jb25maWcgRlVOQ1RJT05fVFJBQ0VSXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yNTMtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MjU0OmNvbmZpZyBGVU5DVElPTl9HUkFQSF9UUkFDRVJcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yNTUtXFx0Ym9vbCBcXFwiS2VybmVsIEZ1bmN0aW9uIEdyYXBoIFRyYWNlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDM6NTkuMTIwOTMyOTU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTQwNTIxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBGdW5jdGlvbiBHcmFwaCBUcmFjZXIqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byBga2VybmVsL3RyYWNlL0tjb25maWdgLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBmaW5kIGl0LCBnaXZlbiB0aGlzIGlzIHRoZSBrZXJuZWwncyB0cmFjaW5nIHN1YnN5c3RlbS4gTm8gbmVlZCB0byBvdmVydGhpbmsgaXQ7IGxldCdzIGp1c3QgZ28gc3RyYWlnaHQgdGhlcmUgYW5kIHRha2UgYSBsb29rLiBTaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjAyLjAzNDk4ODgwMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjU0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU0OlxcdGNvbmZpZyBGVU5DVElPTl9HUkFQSF9UUkFDRVJcXG4gMjU1OlxcdFxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBHcmFwaCBUcmFjZXJcXFwiXFxuIDI1NjpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxuIDI1NzpcXHRcXHRkZXBlbmRzIG9uIEZVTkNUSU9OX1RSQUNFUlxcbiAyNTg6XFx0XFx0ZGVwZW5kcyBvbiAhWDg2XzMyIHx8ICFDQ19PUFRJTUlaRV9GT1JfU0laRVxcbiAyNTk6XFx0XFx0ZGVmYXVsdCB5XFxuIDI2MDpcXHRcXHRoZWxwXFxuIDI2MTpcXHRcXHQgIEVuYWJsZSB0aGUga2VybmVsIHRvIHRyYWNlIGEgZnVuY3Rpb24gYXQgYm90aCBpdHMgcmV0dXJuXFxuIDI2MjpcXHRcXHQgIGFuZCBpdHMgZW50cnkuXFxuIDI2MzpcXHRcXHQgIEl0cyBmaXJzdCBwdXJwb3NlIGlzIHRvIHRyYWNlIHRoZSBkdXJhdGlvbiBvZiBmdW5jdGlvbnMgYW5kXFxuIDI2NDpcXHRcXHQgIGRyYXcgYSBjYWxsIGdyYXBoIGZvciBlYWNoIHRocmVhZCB3aXRoIHNvbWUgaW5mb3JtYXRpb24gbGlrZVxcbiAyNjU6XFx0XFx0ICB0aGUgcmV0dXJuIHZhbHVlLiBUaGlzIGlzIGRvbmUgYnkgc2V0dGluZyB0aGUgY3VycmVudCByZXR1cm5cXG4gMjY2OlxcdFxcdCAgYWRkcmVzcyBvbiB0aGUgY3VycmVudCB0YXNrIHN0cnVjdHVyZSBpbnRvIGEgc3RhY2sgb2YgY2FsbHMuXFxuIDI2NzpcXHRcXG4gMjY4OlxcdGNvbmZpZyBGVU5DVElPTl9HUkFQSF9SRVRWQUxcXG4gMjY5OlxcdFxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBHcmFwaCBSZXR1cm4gVmFsdWVcXFwiXFxuIDI3MDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fR1JBUEhfRlJFR1NcXG4gMjcxOlxcdFxcdGRlcGVuZHMgb24gRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxuIDI3MjpcXHRcXHRkZWZhdWx0IG5cXG4gMjczOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6MDIuMDM1MTAwNDExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjUyNTE4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGdW5jdGlvbiBHcmFwaCBUcmFjZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgYXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgaXRzIGludGVycGxheSB3aXRoIHRoZSBvdmVyYWxsIHN5c3RlbT8gQWgsIGhhbmcgb27igKYgSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYC4gTm93LCBJIHJlY2FsbCB0aGF0IGJlaW5nIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkgZHVyaW5nIGBjb3B5X3Byb2Nlc3NgLiBJcyB0aGF0IHJpZ2h0PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBkcmlsbCBpbnRvIGBrZXJuZWwvZm9yay5jYCwgdGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiBwcm9jZXNzIGNyZWF0aW9uIGxpdmVzLiBMZXQgbWUgY29uZmlybSB0aGF0IGFzc3VtcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjA1LjAwMDM1NTE0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4OTM4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnRyYWNlX2dyYXBoX2luaXRfdGFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yMTQ1LVxcdCAqL1xcbmtlcm5lbC9mb3JrLmM6MjE0NjpcXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cXHRyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDowNS4wNDkyNTYwMjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5NTk3Njg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOdWFuY2VzIG9mIENvbmRpdGlvbmFsIEJlaGF2aW9yKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQgKmNsYWltcyogdG8gYmUgdW5jb25kaXRpb25hbCwgYnV0IHRoYXQncyBpbW1lZGlhdGVseSBzdXNwZWN0LiBUaGUgdGVybSBcInVuY29uZGl0aW9uYWxcIiBpbiB0aGlzIGNvbnRleHQgZmVlbHMgbGlrZSBpdCdzIHByZXNlbnRpbmcgYSBzdXJmYWNlLWxldmVsIGJlaGF2aW9yLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdHJ1ZSB1bmNvbmRpdGlvbmFsIGNvZGUgaXMgcmFyZSwgZXNwZWNpYWxseSBpbiBrZXJuZWwgZW52aXJvbm1lbnRzLiBBbmQgdGhlIGRlZmluaW5nIGNvbmRpdGlvbj8gSXQgaGluZ2VzIG9uIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYC4gVGhhdCByaW5ncyBhIGJlbGwuLi4gSSd2ZSBzZWVuIHRoYXQgbWFjcm8gYWZmZWN0IGEgbG90IG9mIHRyYWNpbmcgYW5kIHByb2ZpbGluZyBmdW5jdGlvbmFsaXR5LiBcblxuTGV0IG1lIGRvdWJsZSBjaGVjayB0aGlzIGh5cG90aGVzaXMuIFRpbWUgdG8gZ28gZGlnIHRocm91Z2ggdGhlIHJlbGV2YW50IGhlYWRlci4gVGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGBpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IGZ0cmFjZSwgYW5kIGJ5IGV4dGVuc2lvbiwgdGhpcyBcInVuY29uZGl0aW9uYWxcIiBiZWhhdmlvciwgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgYW5kIHBvdGVudGlhbGx5IGdhdGVkLiBUaGlzIGZlZWxzIGxpa2UgaXQncyBnb2luZyB0byBiZSBhIGNhc2Ugb2YgdW5kZXJzdGFuZGluZyB0aGUgKnJlYWwqIGNvbmRpdGlvbnMgYmVmb3JlIEkgY2FuIGFjdHVhbGx5IHJlbHkgb24gdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjY0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6MTAuMzQ1MjM1ODA3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ0OTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdHJhY2VfZ3JhcGhfaW5pdF90YXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZnRyYWNlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQyPWV4dGVybiB0cmFjZV9mdW5jX2dyYXBoX2VudF90IGZ0cmFjZV9ncmFwaF9lbnRyeTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDMtXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDUtZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2My1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjUtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6MTAuMzkyNjg5NDU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5ODQ3NjI5MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBmdHJhY2UuaCdzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9saW51eC9mdHJhY2UuaGAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGxpbmUgMTM0NCBhbmQgdGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgaXQuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgc29tZSBmZWF0dXJlIG9yIG9wdGltaXphdGlvbiBpcyBiZWluZyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBJcyBpdCBhIGNvbXBpbGUtdGltZSBmZWF0dXJlIGZsYWc/IEEgY29uZmlndXJhdGlvbiBvcHRpb24/IEJhc2VkIG9uIHRoZSBjb250ZXh0LCB3aGF0J3MgZW5hYmxlZCBvciBkaXNhYmxlZD8gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGljaCBwYXJ0cyBvZiBmdHJhY2UgYXJlIGFjdGl2ZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCB3aHkgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIG1hZGUgdGhvc2UgZGVzaWduIGRlY2lzaW9ucy4gTGV04oCZcyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDozMC4yNDAzMjIyMTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZnRyYWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTMzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMzNTpcXHRcXHRyZXR1cm4gc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2a2lsbF9mdHJhY2VfZ3JhcGgpO1xcbjEzMzY6XFx0fVxcbjEzMzc6XFx0XFxuMTMzODpcXHRleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfc3RvcCh2b2lkKTtcXG4xMzM5OlxcdFxcbjEzNDA6XFx0LyogVGhlIGN1cnJlbnQgaGFuZGxlcnMgaW4gdXNlICovXFxuMTM0MTpcXHRleHRlcm4gdHJhY2VfZnVuY19ncmFwaF9yZXRfdCBmdHJhY2VfZ3JhcGhfcmV0dXJuO1xcbjEzNDI6XFx0ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xcbjEzNDM6XFx0XFxuMTM0NDpcXHRleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XFxuMTM0NTpcXHRleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XFxuMTM0NjpcXHRleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KTtcXG4xMzQ3OlxcdFxcbjEzNDg6XFx0LyogVXNlZCBieSBhc3NlbWJseSwgYnV0IHRvIHF1aWV0IHNwYXJzZSB3YXJuaW5ncyAqL1xcbjEzNDk6XFx0ZXh0ZXJuIHN0cnVjdCBmdHJhY2Vfb3BzICpmdW5jdGlvbl90cmFjZV9vcDtcXG4xMzUwOlxcdFxcbjEzNTE6XFx0c3RhdGljIGlubGluZSB2b2lkIHBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcXG4xMzUyOlxcdHtcXG4xMzUzOlxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmN1cnJlbnQtXFx1MDAzZXRyYWNpbmdfZ3JhcGhfcGF1c2UpO1xcbjEzNTQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDozMC4yNDA0NjU0NjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MDkyNjU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBmdHJhY2UuaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYXNwZWN0IG9mIHRyYWNpbmcuIFRpbWUgdG8gcmV2aXNpdCB0aGUgY29yZSBkZWZpbml0aW9uLCBhbmQgSSdsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50OiBgaW5jbHVkZS9saW51eC9mdHJhY2UuaGAuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gZnJvbSB0aGUgdG9wLCBsaWtlbHkgdG8gemVybyBpbiBvbiBhbnkgbWFjcm9zLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGZ1bmRhbWVudGFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhlIHNwZWNpZmljIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNlbnRyYWwgY29udHJvbCBzdHJ1Y3R1cmVzLCBwb3RlbnRpYWxseSBzb21lIGRldGFpbHMgb24gdGhlIGV2ZW50cyBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQsIG9yIGRlZmluaXRpb25zIGZvciB0aGUgcHJvYmUgcG9pbnRzLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55dGhpbmcgdGhhdCBkaWN0YXRlcyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGludGVyYWN0aW9ucy4gTXkgZXhwZXJ0aXNlIGFsbG93cyBtZSB0byByZWFkIHRocm91Z2ggaXQgcXVpY2tseSwgd2l0aCBmb2N1cyBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBObyBuZWVkIHRvIGdldCBib2dnZWQgZG93biBpbiBkZXRhaWxzIEkgYWxyZWFkeSBrbm93OyBJJ2xsIHpvb20gaW4gb24gYW55dGhpbmcgdGhhdCBzZWVtcyBub3ZlbCBvciB0aGF0IHBlcnRhaW5zIGRpcmVjdGx5IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzcwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDozMy40OTEzOTUzODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZnRyYWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTMxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMxNTpcXHQgKi9cXG4xMzE2OlxcdCNkZWZpbmUgX19ub3RyYWNlX2Z1bmNncmFwaFxcdFxcdG5vdHJhY2VcXG4xMzE3OlxcdFxcbjEzMTg6XFx0I2RlZmluZSBGVFJBQ0VfUkVURlVOQ19ERVBUSCA1MFxcbjEzMTk6XFx0I2RlZmluZSBGVFJBQ0VfUkVUU1RBQ0tfQUxMT0NfU0laRSAzMlxcbjEzMjA6XFx0XFxuMTMyMTpcXHRleHRlcm4gaW50IHJlZ2lzdGVyX2Z0cmFjZV9ncmFwaChzdHJ1Y3QgZmdyYXBoX29wcyAqb3BzKTtcXG4xMzIyOlxcdGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfZnRyYWNlX2dyYXBoKHN0cnVjdCBmZ3JhcGhfb3BzICpvcHMpO1xcbjEzMjM6XFx0XFxuMTMyNDpcXHQvKipcXG4xMzI1OlxcdCAqIGZ0cmFjZV9ncmFwaF9pc19kZWFkIC0gcmV0dXJucyB0cnVlIGlmIGZ0cmFjZV9ncmFwaF9zdG9wKCkgd2FzIGNhbGxlZFxcbjEzMjY6XFx0ICpcXG4xMzI3OlxcdCAqIGZ0cmFjZV9ncmFwaF9zdG9wKCkgaXMgY2FsbGVkIHdoZW4gYSBzZXZlcmUgZXJyb3IgaXMgZGV0ZWN0ZWQgaW5cXG4xMzI4OlxcdCAqIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgY3JpdGljYWxcXG4xMzI5OlxcdCAqIHBhdGhzIG9mIGZ1bmN0aW9uIGdyYXBoIHRvIGtlZXAgdGhvc2UgcGF0aHMgZnJvbSBkb2luZyBhbnkgbW9yZSBoYXJtLlxcbjEzMzA6XFx0ICovXFxuMTMzMTpcXHRERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0Uoa2lsbF9mdHJhY2VfZ3JhcGgpO1xcbjEzMzI6XFx0XFxuMTMzMzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgZnRyYWNlX2dyYXBoX2lzX2RlYWQodm9pZClcXG4xMzM0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6MzMuNDkxNTM0NDQ0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDc3NzU0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeS4gSGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiBzb21lb25lIGltbWVyc2VkIGluIHRoZWlyIGZpZWxkOlxuXG4qKkRpZ2dpbmcgRGVlcGVyOiBBIExpbmUtYnktTGluZSBSZWZpbmVtZW50KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gVGhpcyBpbml0aWFsIGFuYWx5c2lzIGlzIGZpbmUsIGJ1dCBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcgSSdtIG5vdCBzZWVpbmcgdGhlIGVudGlyZSBwaWN0dXJlLiBUbyB0cnVseSB1bmRlcnN0YW5kIHRoaXMsIEkgbmVlZCB0byBzdGFydCBldmVuIGVhcmxpZXIgaW4gdGhlIG1hdGVyaWFsLCBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgZGF0YSwgdGhlIG9yaWdpbmFsIG9ic2VydmF0aW9ucy4gSXQncyBhIGZ1bmRhbWVudGFsIGluc3RpbmN0IOKAkyBuZXZlciB0YWtlIHRoZSBzdXJmYWNlIGxldmVsIGZvciBncmFudGVkLiBUaGVyZSdzIGFsd2F5cyB0aGUgY2hhbmNlIHRoYXQgdGhlIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gaXMgaGlkaW5nIGluIHRoZSBzZWVtaW5nbHkgaW5zaWduaWZpY2FudCBlYXJseSBwYXJ0cy4gVGhhdCBpbml0aWFsIHJlYWQgbWlnaHQgaGF2ZSBiZWVuIHRvbyBmb2N1c2VkLCB0b28gYmlhc2VkIGJ5IHdoYXQgSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQuIEl0J3MgdGltZSB0byByZS1leGFtaW5lIHRoZSBmb3VuZGF0aW9uLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCwgYW5kIGxlYXZlIG5vIHN0b25lIHVudHVybmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTUyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjM2LjUzOTMxMzA2NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjk1OlxcdFxcdFxcdFxcdCAgc3RydWN0IGZ0cmFjZV9yZWdzICpmcmVncyk7XFxuMTI5NjpcXHRcXG4xMjk3OlxcdHN0YXRpYyBpbmxpbmUgaW50IGZ1bmN0aW9uX2dyYXBoX2VudGVyKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGZ1bmMsXFxuMTI5ODpcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBmcCwgdW5zaWduZWQgbG9uZyAqcmV0cClcXG4xMjk5OlxcdHtcXG4xMzAwOlxcdFxcdHJldHVybiBmdW5jdGlvbl9ncmFwaF9lbnRlcl9yZWdzKHJldCwgZnVuYywgZnAsIHJldHAsIE5VTEwpO1xcbjEzMDE6XFx0fVxcbjEzMDI6XFx0XFxuMTMwMzpcXHRzdHJ1Y3QgZnRyYWNlX3JldF9zdGFjayAqXFxuMTMwNDpcXHRmdHJhY2VfZ3JhcGhfZ2V0X3JldF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBza2lwKTtcXG4xMzA1OlxcdHVuc2lnbmVkIGxvbmcgZnRyYWNlX2dyYXBoX3RvcF9yZXRfYWRkcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbjEzMDY6XFx0XFxuMTMwNzpcXHR1bnNpZ25lZCBsb25nIGZ0cmFjZV9ncmFwaF9yZXRfYWRkcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCAqaWR4LFxcbjEzMDg6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nICpyZXRwKTtcXG4xMzA5OlxcdHVuc2lnbmVkIGxvbmcgKmZncmFwaF9nZXRfdGFza192YXIoc3RydWN0IGZncmFwaF9vcHMgKmdvcHMpO1xcbjEzMTA6XFx0XFxuMTMxMTpcXHQvKlxcbjEzMTI6XFx0ICogU29tZXRpbWVzIHdlIGRvbid0IHdhbnQgdG8gdHJhY2UgYSBmdW5jdGlvbiB3aXRoIHRoZSBmdW5jdGlvblxcbjEzMTM6XFx0ICogZ3JhcGggdHJhY2VyIGJ1dCB3ZSB3YW50IHRoZW0gdG8ga2VlcCB0cmFjZWQgYnkgdGhlIHVzdWFsIGZ1bmN0aW9uXFxuMTMxNDpcXHQgKiB0cmFjZXIgaWYgdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBpcyBub3QgY29uZmlndXJlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6MzYuNTM5NDY1OTI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzYyOTE2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeS4gSGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiBzb21lb25lIGltbWVyc2VkIGluIHRoZWlyIGZpZWxkOlxuXG4qKkRpZ2dpbmcgRGVlcGVyOiBBIExpbmUtYnktTGluZSBSZWZpbmVtZW50KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gVGhpcyBpbml0aWFsIGFuYWx5c2lzIGlzIGZpbmUsIGJ1dCBJIGhhdmUgYSBuYWdnaW5nIGZlZWxpbmcgSSdtIG5vdCBzZWVpbmcgdGhlIGVudGlyZSBwaWN0dXJlLiBUbyB0cnVseSB1bmRlcnN0YW5kIHRoaXMsIEkgbmVlZCB0byBzdGFydCBldmVuIGVhcmxpZXIgaW4gdGhlIG1hdGVyaWFsLCBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgZGF0YSwgdGhlIG9yaWdpbmFsIG9ic2VydmF0aW9ucy4gSXQncyBhIGZ1bmRhbWVudGFsIGluc3RpbmN0IOKAkyBuZXZlciB0YWtlIHRoZSBzdXJmYWNlIGxldmVsIGZvciBncmFudGVkLiBUaGVyZSdzIGFsd2F5cyB0aGUgY2hhbmNlIHRoYXQgdGhlIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gaXMgaGlkaW5nIGluIHRoZSBzZWVtaW5nbHkgaW5zaWduaWZpY2FudCBlYXJseSBwYXJ0cy4gVGhhdCBpbml0aWFsIHJlYWQgbWlnaHQgaGF2ZSBiZWVuIHRvbyBmb2N1c2VkLCB0b28gYmlhc2VkIGJ5IHdoYXQgSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQuIEl0J3MgdGltZSB0byByZS1leGFtaW5lIHRoZSBmb3VuZGF0aW9uLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCwgYW5kIGxlYXZlIG5vIHN0b25lIHVudHVybmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTM1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjM5LjgxNTc2MDg1MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjc1OlxcdCAqL1xcbjEyNzY6XFx0c3RydWN0IGZ0cmFjZV9yZXRfc3RhY2sge1xcbjEyNzc6XFx0XFx0dW5zaWduZWQgbG9uZyByZXQ7XFxuMTI3ODpcXHRcXHR1bnNpZ25lZCBsb25nIGZ1bmM7XFxuMTI3OTpcXHQjaWZkZWYgSEFWRV9GVU5DVElPTl9HUkFQSF9GUF9URVNUXFxuMTI4MDpcXHRcXHR1bnNpZ25lZCBsb25nIGZwO1xcbjEyODE6XFx0I2VuZGlmXFxuMTI4MjpcXHRcXHR1bnNpZ25lZCBsb25nICpyZXRwO1xcbjEyODM6XFx0fTtcXG4xMjg0OlxcdFxcbjEyODU6XFx0LypcXG4xMjg2OlxcdCAqIFByaW1hcnkgaGFuZGxlciBvZiBhIGZ1bmN0aW9uIHJldHVybi5cXG4xMjg3OlxcdCAqIEl0IHJlbGF5cyBvbiBmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIuXFxuMTI4ODpcXHQgKiBEZWZpbmVkIGluIGVudHJ5XzMyLzY0LlNcXG4xMjg5OlxcdCAqL1xcbjEyOTA6XFx0ZXh0ZXJuIHZvaWQgcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7XFxuMTI5MTpcXHRcXG4xMjkyOlxcdGV4dGVybiBpbnRcXG4xMjkzOlxcdGZ1bmN0aW9uX2dyYXBoX2VudGVyX3JlZ3ModW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgZnVuYyxcXG4xMjk0OlxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBmcmFtZV9wb2ludGVyLCB1bnNpZ25lZCBsb25nICpyZXRwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDozOS44MTU4ODQ1MTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMTEyOTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGlzLiBMZXQncyBzZWUuLi4gSSBuZWVkIHRvIHN1bW1hcml6ZSB0aGVzZSBcInRob3VnaHRzXCIgYXMgaWYgdGhleSB3ZXJlIG15IG93bi4gQW5kLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2UsIEkgc2hvdWxkIGFpbSBmb3IgYSBjb25jaXNlIHlldCBpbnNpZ2h0ZnVsIGV4cGxhbmF0aW9uLiBIZXJlIGdvZXM6XG5cbioqTXkgSW1tZWRpYXRlIFRob3VnaHQgUHJvY2VzcyBvbiBBbmFseXppbmcgVGhpcyBUZXh0KipcblxuQWxyaWdodCwgdGhlIGluc3RydWN0aW9uIGlzIHRvIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSB0ZXh0LiBTZWVtcyBsaWtlIHRoZSBhbmFseXNpcyB3YW50cyB0byBsb29rIGF0ICpldmVuIGVhcmxpZXIgbGluZXMqLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBjdXJyZW50IHBvaW50IGlzIG5vdCB0aGUgYmVnaW5uaW5nLCBidXQgYSBjb250aW51YXRpb24gb2YgYSBsaW5lIG9mIHRob3VnaHQsIGluIGEgZG9jdW1lbnQgb3IgY29udmVyc2F0aW9uLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGlzIHRvcGljLCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGluIHRoZXNlIFwiZWFybGllciBsaW5lc1wiXG5cbkFscmlnaHQsIEkgY2FuIHdvcmsgd2l0aCB0aGF0LiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDMyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjQzLjA0NzAxNzA0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNTU6XFx0XFxuMTI1NjpcXHQjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcbjEyNTc6XFx0XFxuMTI1ODpcXHRzdHJ1Y3QgZmdyYXBoX29wcyB7XFxuMTI1OTpcXHRcXHR0cmFjZV9mdW5jX2dyYXBoX2VudF90XFx0XFx0ZW50cnlmdW5jO1xcbjEyNjA6XFx0XFx0dHJhY2VfZnVuY19ncmFwaF9yZXRfdFxcdFxcdHJldGZ1bmM7XFxuMTI2MTpcXHRcXHRzdHJ1Y3QgZnRyYWNlX29wc1xcdFxcdG9wczsgLyogZm9yIHRoZSBoYXNoIGxpc3RzICovXFxuMTI2MjpcXHRcXHR2b2lkXFx0XFx0XFx0XFx0KnByaXZhdGU7XFxuMTI2MzpcXHRcXHR0cmFjZV9mdW5jX2dyYXBoX2VudF90XFx0XFx0c2F2ZWRfZnVuYztcXG4xMjY0OlxcdFxcdGludFxcdFxcdFxcdFxcdGlkeDtcXG4xMjY1OlxcdH07XFxuMTI2NjpcXHRcXG4xMjY3OlxcdHZvaWQgKmZncmFwaF9yZXNlcnZlX2RhdGEoaW50IGlkeCwgaW50IHNpemVfYnl0ZXMpO1xcbjEyNjg6XFx0dm9pZCAqZmdyYXBoX3JldHJpZXZlX2RhdGEoaW50IGlkeCwgaW50ICpzaXplX2J5dGVzKTtcXG4xMjY5OlxcdHZvaWQgKmZncmFwaF9yZXRyaWV2ZV9wYXJlbnRfZGF0YShpbnQgaWR4LCBpbnQgKnNpemVfYnl0ZXMsIGludCBkZXB0aCk7XFxuMTI3MDpcXHRcXG4xMjcxOlxcdC8qXFxuMTI3MjpcXHQgKiBTdGFjayBvZiByZXR1cm4gYWRkcmVzc2VzIGZvciBmdW5jdGlvbnNcXG4xMjczOlxcdCAqIG9mIGEgdGhyZWFkLlxcbjEyNzQ6XFx0ICogVXNlZCBpbiBzdHJ1Y3QgdGhyZWFkX2luZm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6NDMuMDQ3MTQzOTExWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDM1NzIwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIGBjb3B5X3Byb2Nlc3NgIGFuZCBpdHMgY2FsbGVycyoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdGhhdCBgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgY29uZmlnIG9wdGlvbi4gSSB0aGluayB0aGF0J3MgdGhlIG9uZSB3ZSBuZWVkLiBTbywgdGhhdCBtZWFucyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIGlzIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgLiBHb3QgaXQuXG5cbk5vdywgd2hpY2ggZnVuY3Rpb24gYXJlIHdlIGludGVyZXN0ZWQgaW4/IEFoLCBpdCdzIGBjb3B5X3Byb2Nlc3NgLCBvZiBjb3Vyc2UuIEJ1dCB3YWl0IGEgc2Vjb25kLi4uIGBjb3B5X3Byb2Nlc3NgIGlzIGRlY2xhcmVkIHN0YXRpYywgaXNuJ3QgaXQ/IFRoYXQncyBnb2luZyB0byBtYWtlIGRpcmVjdCB0cmFjaW5nIGEgYml0IHRyaWNreS4gV2UgbmVlZCB0byBmaW5kIHRoZSBjYWxscyB0byB0aGUgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGZ1bmN0aW9uIGl0c2VsZi5cblxuSG1tLi4uIFdoZXJlIGRvZXMgdGhpcyBoYXBwZW4/IFRoZSBzeXN0ZW0gY2FsbCBsZXZlbC4gSXQncyBlaXRoZXIgZ29pbmcgdG8gYmUgYHN5c19jbG9uZWAsIG9yIGBzeXNfY2xvbmUzYCwgb3IgcGVyaGFwcyBga2VybmVsX2Nsb25lYD8gVGhhdCBtYWtlcyB0aGUgbW9zdCBzZW5zZS5cblxuT2theSwgdGltZSB0byBjaGVjayB0aGUgc291cmNlLiBMZXQncyBoZWFkIG92ZXIgdG8gYGtlcm5lbC9mb3JrLmNgIGFuZCBzZWFyY2ggZm9yIHRoYXQgYGtlcm5lbF9jbG9uZWAgZnVuY3Rpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cywgYW5kIGhvcGVmdWxseSwgZnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgYmFjayB0byBgY29weV9wcm9jZXNzYCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQ3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDo0Ny4yNTA3MjA1NTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjgwNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtlcm5lbF9jbG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yMDIxLVxcdFxcdFxcdFxcdFxcdGludCBub2RlLFxcbmtlcm5lbC9mb3JrLmM6MjAyMjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxua2VybmVsL2ZvcmsuYy0yMDIzLXtcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MjY3ND1zdHJ1Y3QgdGFza19zdHJ1Y3QgKiBfX2luaXQgZm9ya19pZGxlKGludCBjcHUpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI2NzYtXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbmtlcm5lbC9mb3JrLmM6MjY3NzpcXHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcXG5rZXJuZWwvZm9yay5jLTI2NzgtXFx0XFx0LmZsYWdzXFx0XFx0PSBDTE9ORV9WTSxcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjY5NC0vKlxcbmtlcm5lbC9mb3JrLmM6MjY5NTogKiBUaGlzIGlzIGxpa2Uga2VybmVsX2Nsb25lKCksIGJ1dCBzaGF2ZWQgZG93biBhbmQgdGFpbG9yZWQgdG8ganVzdFxcbmtlcm5lbC9mb3JrLmMtMjY5Ni0gKiBjcmVhdGluZyBpb191cmluZyB3b3JrZXJzLiBJdCByZXR1cm5zIGEgY3JlYXRlZCB0YXNrLCBvciBhbiBlcnJvciBwb2ludGVyLlxcbi0tXFxua2VybmVsL2ZvcmsuYz0yNzAwPXN0cnVjdCB0YXNrX3N0cnVjdCAqY3JlYXRlX2lvX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCBpbnQgbm9kZSlcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjcwMy1cXHRcXHRcXHQgICAgICBDTE9ORV9JT3xDTE9ORV9WTXxDTE9ORV9VTlRSQUNFRDtcXG5rZXJuZWwvZm9yay5jOjI3MDQ6XFx0c3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzIGFyZ3MgPSB7XFxua2VybmVsL2ZvcmsuYy0yNzA1LVxcdFxcdC5mbGFnc1xcdFxcdD0gZmxhZ3MsXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI3MjAtICovXFxua2VybmVsL2ZvcmsuYzoyNzIxOnBpZF90IGtlcm5lbF9jbG9uZShzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxua2VybmVsL2ZvcmsuYy0yNzIyLXtcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MjgyND1waWRfdCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI4MjYte1xcbmtlcm5lbC9mb3JrLmM6MjgyNzpcXHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcXG5rZXJuZWwvZm9yay5jLTI4MjgtXFx0XFx0LmZsYWdzXFx0XFx0PSAoKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCkgXFx1MDAyNiB+Q1NJR05BTCksXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI4MzUtXFxua2VybmVsL2ZvcmsuYzoyODM2OlxcdHJldHVybiBrZXJuZWxfY2xvbmUoXFx1MDAyNmFyZ3MpO1xcbmtlcm5lbC9mb3JrLmMtMjgzNy19XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI4NDI9cGlkX3QgdXNlcl9tb2RlX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbmtlcm5lbC9mb3JrLmMtMjg0My17XFxua2VybmVsL2ZvcmsuYzoyODQ0OlxcdHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyBhcmdzID0ge1xcbmtlcm5lbC9mb3JrLmMtMjg0NS1cXHRcXHQuZmxhZ3NcXHRcXHQ9ICgoZmxhZ3MgfCBDTE9ORV9WTSB8IENMT05FX1VOVFJBQ0VEKSBcXHUwMDI2IH5DU0lHTkFMKSxcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjg1MS1cXG5rZXJuZWwvZm9yay5jOjI4NTI6XFx0cmV0dXJuIGtlcm5lbF9jbG9uZShcXHUwMDI2YXJncyk7XFxua2VybmVsL2ZvcmsuYy0yODUzLX1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9Mjg1Nj1TWVNDQUxMX0RFRklORTAoZm9yaylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjg1OC0jaWZkZWYgQ09ORklHX01NVVxcbmtlcm5lbC9mb3JrLmM6Mjg1OTpcXHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcXG5rZXJuZWwvZm9yay5jLTI4NjAtXFx0XFx0LmV4aXRfc2lnbmFsID0gU0lHQ0hMRCxcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjg2Mi1cXG5rZXJuZWwvZm9yay5jOjI4NjM6XFx0cmV0dXJuIGtlcm5lbF9jbG9uZShcXHUwMDI2YXJncyk7XFxua2VybmVsL2ZvcmsuYy0yODY0LSNlbHNlXFxuLS1cXG5rZXJuZWwvZm9yay5jPTI4NzI9U1lTQ0FMTF9ERUZJTkUwKHZmb3JrKVxcbmtlcm5lbC9mb3JrLmMtMjg3My17XFxua2VybmVsL2ZvcmsuYzoyODc0OlxcdHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyBhcmdzID0ge1xcbmtlcm5lbC9mb3JrLmMtMjg3NS1cXHRcXHQuZmxhZ3NcXHRcXHQ9IENMT05FX1ZGT1JLIHwgQ0xPTkVfVk0sXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI4NzgtXFxua2VybmVsL2ZvcmsuYzoyODc5OlxcdHJldHVybiBrZXJuZWxfY2xvbmUoXFx1MDAyNmFyZ3MpO1xcbmtlcm5lbC9mb3JrLmMtMjg4MC19XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI5MDE9U1lTQ0FMTF9ERUZJTkU1KGNsb25lLCB1bnNpZ25lZCBsb25nLCBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZywgbmV3c3AsXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI5MDYte1xcbmtlcm5lbC9mb3JrLmM6MjkwNzpcXHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcXG5rZXJuZWwvZm9yay5jLTI5MDgtXFx0XFx0LmZsYWdzXFx0XFx0PSAobG93ZXJfMzJfYml0cyhjbG9uZV9mbGFncykgXFx1MDAyNiB+Q1NJR05BTCksXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI5MTYtXFxua2VybmVsL2ZvcmsuYzoyOTE3OlxcdHJldHVybiBrZXJuZWxfY2xvbmUoXFx1MDAyNmFyZ3MpO1xcbmtlcm5lbC9mb3JrLmMtMjkxOC19XFxuLS1cXG5rZXJuZWwvZm9yay5jLTI5MjAtXFxua2VybmVsL2ZvcmsuYzoyOTIxOnN0YXRpYyBub2lubGluZSBpbnQgY29weV9jbG9uZV9hcmdzX2Zyb21fdXNlcihzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmthcmdzLFxcbmtlcm5lbC9mb3JrLmMtMjkyMi1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgY2xvbmVfYXJncyBfX3VzZXIgKnVhcmdzLFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yOTY0LVxcbmtlcm5lbC9mb3JrLmM6Mjk2NTpcXHQqa2FyZ3MgPSAoc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzKXtcXG5rZXJuZWwvZm9yay5jLTI5NjYtXFx0XFx0LmZsYWdzXFx0XFx0PSBhcmdzLmZsYWdzLFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yOTk1LSAqL1xcbmtlcm5lbC9mb3JrLmM6Mjk5NjpzdGF0aWMgaW5saW5lIGJvb2wgY2xvbmUzX3N0YWNrX3ZhbGlkKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqa2FyZ3MpXFxua2VybmVsL2ZvcmsuYy0yOTk3LXtcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMzAxNS1cXG5rZXJuZWwvZm9yay5jOjMwMTY6c3RhdGljIGJvb2wgY2xvbmUzX2FyZ3NfdmFsaWQoc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICprYXJncylcXG5rZXJuZWwvZm9yay5jLTMwMTcte1xcbi0tXFxua2VybmVsL2ZvcmsuYz0zMDU3PVNZU0NBTExfREVGSU5FMihjbG9uZTMsIHN0cnVjdCBjbG9uZV9hcmdzIF9fdXNlciAqLCB1YXJncywgc2l6ZV90LCBzaXplKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0zMDYwLVxcbmtlcm5lbC9mb3JrLmM6MzA2MTpcXHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3Mga2FyZ3M7XFxua2VybmVsL2ZvcmsuYy0zMDYyLVxcdHBpZF90IHNldF90aWRbTUFYX1BJRF9OU19MRVZFTF07XFxuLS1cXG5rZXJuZWwvZm9yay5jLTMwNzctXFxua2VybmVsL2ZvcmsuYzozMDc4OlxcdHJldHVybiBrZXJuZWxfY2xvbmUoXFx1MDAyNmthcmdzKTtcXG5rZXJuZWwvZm9yay5jLTMwNzktfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0zMjIyPXN0YXRpYyBpbnQgdW5zaGFyZV9mZCh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MsIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKipuZXdfZmRwKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0zMjM5LSAqIGNvbnRleHQgd2hpY2ggd2FzIG9yaWdpbmFsbHkgc2hhcmVkIHVzaW5nIGNsb25lLiAgY29weV8qXFxua2VybmVsL2ZvcmsuYzozMjQwOiAqIGZ1bmN0aW9ucyB1c2VkIGJ5IGtlcm5lbF9jbG9uZSgpIGNhbm5vdCBiZSB1c2VkIGhlcmUgZGlyZWN0bHlcXG5rZXJuZWwvZm9yay5jLTMyNDEtICogYmVjYXVzZSB0aGV5IG1vZGlmeSBhbiBpbmFjdGl2ZSB0YXNrX3N0cnVjdCB0aGF0IGlzIGJlaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjQ3LjMwMDQwNjY5NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjkxNjQwMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDbG9uaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIGZpZWxkIGNvbnNpZGVyYWJseSB3aGVuIGxvb2tpbmcgYXQgdGhlc2UgY2xvbmluZyBmdW5jdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IGBrZXJuZWxfY2xvbmVgIGFuZCBgc3lzX2Nsb25lM2AgYXJlIHRoZSBtYWluIHBsYXllcnMuIE5vdywgSSBrbm93IGBzeXNfY2xvbmUzYCBpcyBhIHN5c2NhbGw7IEnigJltIHByZXR0eSBmYW1pbGlhciB3aXRoIHRoYXQgb25lLiBCdXQsIGBrZXJuZWxfY2xvbmVgIOKAkyB0aGF0J3MgdGhlIGNvcmUgZW50cnkgcG9pbnQsIHRoZSBvbmUgdGhhdCBraWNrcyBldmVyeXRoaW5nIG9mZi4gTGV0J3Mgc2VlLi4uIHllcCwgYHBpZF90IGtlcm5lbF9jbG9uZShzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpYC4gTm90IHN0YXRpYy4gUGVyZmVjdC4gVGhhdCdzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbkkgZGlkIHRha2UgYSBxdWljayBsb29rIGF0IGBjb3B5X3Byb2Nlc3NgLCBhbmQgd2hpbGUgdGhhdCdzIHRoZSBvbmUgdGhhdCdzIGJlZW4gbW9kaWZpZWQsIGl0J3Mgc3RhdGljLiBUaGF0J3MgYSBuby1nbyBiYXNlZCBvbiB0aGUgcHJlZmVyZW5jZSBvdXRsaW5lZC4gYGtlcm5lbF9jbG9uZWAgaXQgaXMuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEkgZ2V0IGEgZ29vZCB0cmFjZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBGVU5DVElPTl9HUkFQSF9UUkFDRVJgLiBMZXQgbWUgcHVsbCB1cCB0aGUgS2NvbmZpZyBmaWxl4oCmIFJpZ2h0LiBJdCBkZXBlbmRzIG9uIGBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUmAsIGBGVU5DVElPTl9UUkFDRVJgLCBhbmQsIGltcG9ydGFudGx5LCBpdCBoYXMgYW4gYXJjaC1zcGVjaWZpYyBkZXBlbmRlbmN5OiBpdCBuZWVkcyB0byBiZSAqIVg4Nl8zMiB8fCAhQ0NfT1BUSU1JWkVfRk9SX1NJWkUqXG5cblNvLCBJJ2xsIG5lZWQgdG8gZW5hYmxlIGBGVU5DVElPTl9UUkFDRVJgIGFsb25nc2lkZSBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCB0byBnZXQgYSBwcm9wZXIgdHJhY2UuIEdvb2QgdG8ga25vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDQ6NTIuOTkyMDUwMDYyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUxNzE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlVOQ1RJT05fVFJBQ0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTIyNj1jb25maWcgQk9PVFRJTUVfVFJBQ0lOR1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMjM0LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjIzNTpjb25maWcgRlVOQ1RJT05fVFJBQ0VSXFxua2VybmVsL3RyYWNlL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBUcmFjZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjUzLjAzOTU3NjEyMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTEwMzM5MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgRlVOQ1RJT05fVFJBQ0VSYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgYEZVTkNUSU9OX1RSQUNFUmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBsaWJyYXJpZXMgcmVseSBvbiBpdCwgYW5kIGNvbnZlcnNlbHksIHdoYXQgaXQgcmVsaWVzIG9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgb3IgdXBkYXRlcywgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBoaWRkZW4gXCJnb3RjaGFzXCIgbHVya2luZyB3aXRoaW4gaXRzIGRlcGVuZGVuY3kgdHJlZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUsIGlzb2xhdGVkIG1vZHVsZSwgb3Igc29tZXRoaW5nIGRlZXBseSBpbnRlcndvdmVuIGludG8gdGhlIHN5c3RlbSdzIGNvcmU/IFRoZSBjb21wbGV4aXR5IGhlcmUgaXMgZ29pbmcgdG8gZGljdGF0ZSBhIGxvdCBvZiBteSBhcHByb2FjaCB0byB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjU1Ljk0OTkxOTA4NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdGNvbmZpZyBGVU5DVElPTl9UUkFDRVJcXG4gMjM2OlxcdFxcdGJvb2wgXFxcIktlcm5lbCBGdW5jdGlvbiBUcmFjZXJcXFwiXFxuIDIzNzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fVFJBQ0VSXFxuIDIzODpcXHRcXHRzZWxlY3QgS0FMTFNZTVNcXG4gMjM5OlxcdFxcdHNlbGVjdCBHRU5FUklDX1RSQUNFUlxcbiAyNDA6XFx0XFx0c2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUlxcbiAyNDE6XFx0XFx0c2VsZWN0IEdMT0JcXG4gMjQyOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAyNDM6XFx0XFx0c2VsZWN0IFRBU0tTX1JVREVfUkNVXFxuIDI0NDpcXHRcXHRoZWxwXFxuIDI0NTpcXHRcXHQgIEVuYWJsZSB0aGUga2VybmVsIHRvIHRyYWNlIGV2ZXJ5IGtlcm5lbCBmdW5jdGlvbi4gVGhpcyBpcyBkb25lXFxuIDI0NjpcXHRcXHQgIGJ5IHVzaW5nIGEgY29tcGlsZXIgZmVhdHVyZSB0byBpbnNlcnQgYSBzbWFsbCwgNS1ieXRlIE5vLU9wZXJhdGlvblxcbiAyNDc6XFx0XFx0ICBpbnN0cnVjdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IGtlcm5lbCBmdW5jdGlvbiwgd2hpY2ggTk9QXFxuIDI0ODpcXHRcXHQgIHNlcXVlbmNlIGlzIHRoZW4gZHluYW1pY2FsbHkgcGF0Y2hlZCBpbnRvIGEgdHJhY2VyIGNhbGwgd2hlblxcbiAyNDk6XFx0XFx0ICB0cmFjaW5nIGlzIGVuYWJsZWQgYnkgdGhlIGFkbWluaXN0cmF0b3IuIElmIGl0J3MgcnVudGltZSBkaXNhYmxlZFxcbiAyNTA6XFx0XFx0ICAodGhlIGJvb3R1cCBkZWZhdWx0KSwgdGhlbiB0aGUgb3ZlcmhlYWQgb2YgdGhlIGluc3RydWN0aW9ucyBpcyB2ZXJ5XFxuIDI1MTpcXHRcXHQgIHNtYWxsIGFuZCBub3QgbWVhc3VyYWJsZSBldmVuIGluIG1pY3JvLWJlbmNobWFya3MgKGF0IGxlYXN0IG9uXFxuIDI1MjpcXHRcXHQgIHg4NiwgYnV0IG1heSBoYXZlIGltcGFjdCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzKS5cXG4gMjUzOlxcdFxcbiAyNTQ6XFx0Y29uZmlnIEZVTkNUSU9OX0dSQVBIX1RSQUNFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDo1NS45NTAwMjU0MzNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3OTQwMzYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdHJhY2luZy4gU28sIGZyb20gd2hhdCBJJ20gc2VlaW5nLCBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAgYXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIGluIHF1ZXN0aW9uLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLml0IGZlZWxzIGxpa2UgdGhlcmUncyBzb21ldGhpbmcgbWlzc2luZywgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBBaCwgcmlnaHQhIGBGVFJBQ0VgIGlzIHR5cGljYWxseSB0aGUgb3ZlcmFyY2hpbmcsIHRvcC1sZXZlbCBjb25maWcgdGhhdCBnb3Zlcm5zIHRoZSBlbnRpcmUgdHJhY2luZyBzdWJzeXN0ZW0uIEl0J3MgdGhlIGJpZyBwaWN0dXJlLiBUaGF0IG1lYW5zIGBGVU5DVElPTl9UUkFDRVJgIGFuZCBgRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCBhcmUgcHJvYmFibHkgbW9yZSBzcGVjaWZpYyBmZWF0dXJlcyBvciBtb2R1bGVzICp3aXRoaW4qIHRoZSBicm9hZGVyIGBGVFJBQ0VgIGZyYW1ld29yay4gTmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhhdCBoaWVyYXJjaHkgc3RyYWlnaHQsIG9yIEknbGwgZ2V0IGxvc3QgaW4gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODYzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NDo1OS4wMjk0MzE5MTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjA2OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVFJBQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MTk4PWNvbmZpZyBUUkFDSU5HX1NVUFBPUlRcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTIwMy1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoyMDQ6bWVudWNvbmZpZyBGVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0yMDUtXFx0Ym9vbCBcXFwiVHJhY2Vyc1xcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTU4OD1jb25maWcgRU5BQkxFX0RFRkFVTFRfVFJBQ0VSU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctNTk2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjU5Nzpjb25maWcgRlRSQUNFX1NZU0NBTExTXFxua2VybmVsL3RyYWNlL0tjb25maWctNTk4LVxcdGJvb2wgXFxcIlRyYWNlIHN5c2NhbGxzXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9ODY4PWNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzYtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODc3OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9QQVRDSEFCTEVfRlVOQ1RJT05fRU5UUllcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NzgtXFx0Ym9vbFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODgwLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4MTpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfQ0NcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04ODItXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODg2LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg4Nzpjb25maWcgRlRSQUNFX01DT1VOVF9VU0VfT0JKVE9PTFxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg4OC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTQtXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODk1OmNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9SRUNPUkRNQ09VTlRcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04OTYtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MTAyMT1jb25maWcgVFJBQ0VfRVZBTF9NQVBfRklMRVxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMTA0OC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMDQ5OmNvbmZpZyBGVFJBQ0VfUkVDT1JEX1JFQ1VSU0lPTlxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNTAtXFx0Ym9vbCBcXFwiUmVjb3JkIGZ1bmN0aW9ucyB0aGF0IHJlY3Vyc2UgaW4gZnVuY3Rpb24gdHJhY2luZ1xcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjItXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTA2Mzpjb25maWcgRlRSQUNFX1JFQ09SRF9SRUNVUlNJT05fU0laRVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTEwNjQtXFx0aW50IFxcXCJNYXggbnVtYmVyIG9mIHJlY3Vyc2VkIGZ1bmN0aW9ucyB0byByZWNvcmRcXFwiXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDczLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjEwNzQ6Y29uZmlnIEZUUkFDRV9WQUxJREFURV9SQ1VfSVNfV0FUQ0hJTkdcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xMDc1LVxcdGJvb2wgXFxcIlZhbGlkYXRlIFJDVSBpcyBvbiBkdXJpbmcgZnRyYWNlIGV4ZWN1dGlvblxcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMDE9Y29uZmlnIEdDT1ZfUFJPRklMRV9GVFJBQ0VcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExMTItXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTExMzpjb25maWcgRlRSQUNFX1NFTEZURVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNC1cXHRib29sXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxMTE2OmNvbmZpZyBGVFJBQ0VfU1RBUlRVUF9URVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTExNy1cXHRib29sIFxcXCJQZXJmb3JtIGEgc3RhcnR1cCB0ZXN0IG9uIGZ0cmFjZVxcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTExMzY9Y29uZmlnIEVWRU5UX1RSQUNFX1RFU1RfU1lTQ0FMTFNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTExNDctXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTE0ODpjb25maWcgRlRSQUNFX1NPUlRfU1RBUlRVUF9URVNUXFxua2VybmVsL3RyYWNlL0tjb25maWctMTE0OS0gICAgICAgYm9vbCBcXFwiVmVyaWZ5IGNvbXBpbGUgdGltZSBzb3J0aW5nIG9mIGZ0cmFjZSBmdW5jdGlvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ0OjU5LjA3OTA0NDk0M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY4NzE0NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcywgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYEZUUkFDRWAgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEZUUkFDRWAuIEl0J3MgY3J1Y2lhbCwgd2hlbiBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gYXMgcG93ZXJmdWwgYW5kIGNvbXBsZXggYXMgdGhpcywgdG8gdW5kZXJzdGFuZCBpdHMgZm91bmRhdGlvbnMgYW5kIHdoYXQgaXQgcmVsaWVzIHVwb24uIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgd2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cywgbGlicmFyaWVzLCBvciBzeXN0ZW0gY2FsbHMgYEZUUkFDRWAgaXMgdGV0aGVyZWQgdG8uIFRoaXMgaXMgdGhlIGJlZHJvY2sgb2YgbXkgaW52ZXN0aWdhdGlvbi4gQXJlIHRoZXJlIGFueSBsaWJyYXJpZXMgYmVpbmcgdXNlZD8gTWF5YmUgc29tZSBtb2R1bGUgZGVwZW5kZW5jaWVzPyBJdCBpcyBpbXBvcnRhbnQgdGhhdCBJIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMgc28gSSB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLCBhbmQgaG93IG1vZGlmaWNhdGlvbnMgY291bGQgcmlwcGxlIG91dHdhcmRzLiBHb3R0YSBjaGFydCB0aGlzIG91dCB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBoaWNjdXBzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6MDIuNTQ3NzYzMTM4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDQsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDQ6XFx0bWVudWNvbmZpZyBGVFJBQ0VcXG4gMjA1OlxcdFxcdGJvb2wgXFxcIlRyYWNlcnNcXFwiXFxuIDIwNjpcXHRcXHRkZXBlbmRzIG9uIFRSQUNJTkdfU1VQUE9SVFxcbiAyMDc6XFx0XFx0ZGVmYXVsdCB5IGlmIERFQlVHX0tFUk5FTFxcbiAyMDg6XFx0XFx0aGVscFxcbiAyMDk6XFx0XFx0ICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxcbiAyMTA6XFx0XFxuIDIxMTpcXHRpZiBGVFJBQ0VcXG4gMjEyOlxcdFxcbiAyMTM6XFx0Y29uZmlnIFRSQUNFRlNfQVVUT01PVU5UX0RFUFJFQ0FURURcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6MDIuNTQ3OTE5MDk4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MDg4OTQ0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRlRSQUNFIEludmVzdGlnYXRpb24gZm9yIEtlcm5lbCBGdXp6aW5nKipcblxuT2theSwgc28gd2UndmUgZ290IGEgY3JpdGljYWwgYnVnIGZpeCBpbnZvbHZpbmcgYEZUUkFDRWAgdGhhdCB3ZSBuZWVkIHRvIGZ1enouIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgY29weV9wcm9jZXNzYCB3aGVuIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBpcyBhY3RpdmUuIFRoZSBmaXggY2xldmVybHkgcmVhcnJhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHQtXHUwMDNlcmV0X3N0YWNrYCB0byBwcmV2ZW50IHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYCBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGZyZWVkIGJ5IGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCBpZiBgY29weV9wcm9jZXNzYCBmYWlscy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQsIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBidWcgdGhhdCBkZXNlcnZlcyBvdXIgYXR0ZW50aW9uLlxuXG5XZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIHRoaXMgYW5kIHRodXMsIHNob3VsZCBiZSBmdXp6ZWQhXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB3aGF0J3MgdGhlIGVudHJ5IHBvaW50IHdlIHNob3VsZCBmb2N1cyBvbj8gSXQgc2VlbXMgdGhlIHBhdGNoIGZvY3VzZXMgb24gYGtlcm5lbF9jbG9uZWAsIGJ1dCBkb2VzIGl0IGNvbnNpZGVyIGFsbCBwYXRocz8gV2hhdCBhYm91dCB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlczogYHN5c19jbG9uZWAsIGBzeXNfY2xvbmUzYCwgYHN5c19mb3JrYCwgYW5kIGBzeXNfdmZvcmtgPyBBaCwgcmlnaHQhIGBrZXJuZWxfY2xvbmVgIGlzIHRoZSBjb21tb24gZnVuY3Rpb24gdGhhdCBhbGwgb2YgdGhvc2UgdWx0aW1hdGVseSBpbnZva2UuIFNvLCBga2VybmVsX2Nsb25lYCBpcyBhIHNtYXJ0IGFuZCBjb21wcmVoZW5zaXZlIGZvY3VzIHN5bWJvbC5cblxuTGV0J3MgZG8gYSBxdWljayBjaGVjayB0byBlbnN1cmUgd2UgaGF2ZSBhbGwgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuIFdlJ3JlIGxvb2tpbmcgYXQgYEZUUkFDRWAsIHNwZWNpZmljYWxseSBgRlVOQ1RJT05fVFJBQ0VSYCBhbmQgYEZVTkNUSU9OX0dSQVBIX1RSQUNFUmAuIGBUUkFDSU5HX1NVUFBPUlRgIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBpcyBnb29kLiBXZSBzaG91bGQgZG91YmxlLWNoZWNrIG91ciBidWlsZCBjb25maWd1cmF0aW9uIHRvIGVuc3VyZSBgRlRSQUNFYCBhbmQgdGhlIG90aGVycyBhcmUgZW5hYmxlZCwgZXNwZWNpYWxseSBzaW5jZSBgRlRSQUNFYCBpcyBjb25kaXRpb25hbGx5IGBkZWZhdWx0IHkgaWYgREVCVUdfS0VSTkVMYC5cblxuT25lIGZpbmFsIHRob3VnaHQuLi4gd2Ugc2hvdWxkIHNjYW4gdGhlIGNvZGUgYW5kIG1ha2Ugc3VyZSBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaXNuJ3QgY2FsbGVkIGZyb20gYW55d2hlcmUgZWxzZS4gV2Ugd2FudCB0byBiZSBzdXJlIG91ciBmdXp6aW5nIGVmZm9ydHMgYXJlbid0IGJlaW5nIGxpbWl0ZWQgYnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMDAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NTowOC40NTY4MTc5ODJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzMwNjYwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnRyYWNlX2dyYXBoX2luaXRfdGFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQyPWV4dGVybiB0cmFjZV9mdW5jX2dyYXBoX2VudF90IGZ0cmFjZV9ncmFwaF9lbnRyeTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDMtXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaDoxMzQ0OmV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNDUtZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzU2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bnBhdXNlX2dyYXBoX3RyYWNpbmcodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2My1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNjQ6c3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oLTEzNjUtc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KSB7IH1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9MjAxOD1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yMTQ1LVxcdCAqL1xcbmtlcm5lbC9mb3JrLmM6MjE0NjpcXHRmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApO1xcbmtlcm5lbC9mb3JrLmMtMjE0Ny1cXHRyZXR2YWwgPSBjb3B5X2V4ZWNfc3RhdGUoY2xvbmVfZmxhZ3MsIHApO1xcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jPTExMzE9dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExNTktLyogQWxsb2NhdGUgYSByZXR1cm4gc3RhY2sgZm9yIG5ld2x5IGNyZWF0ZWQgdGFzayAqL1xcbmtlcm5lbC90cmFjZS9mZ3JhcGguYzoxMTYwOnZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jLTExNjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NToxMC4xMjk4OTAxOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODIyODkzMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqQW5hbHlzaXMgQ29uY2x1c2lvbjogU2V0dGluZyBSZXN1bHRzKipcblxuQWxyaWdodCwgdGhlIHB1enpsZSdzIHNvbHZlZC4gSXQgYXBwZWFycyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIHdoYXRldmVyIGl0J3MgZG9pbmcsIGlzIG9ubHkgZXZlciBjYWxsZWQgd2l0aGluIGBjb3B5X3Byb2Nlc3NgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgbXkgYW5hbHlzaXMgaXMsIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMsIGNvbXBsZXRlLiBCYXNlZCBvbiB0aGlzIG9ic2VydmF0aW9uLCBJJ20gbm93IGdvaW5nIHRvIGNvbmZpZGVudGx5IHByb2NlZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCdzIHRpbWUgdG8gY29tbXVuaWNhdGUgd2hhdCBJJ3ZlIGRpc2NvdmVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTA4LCJPdXRwdXRUb2tlbnMiOjE0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ1OjEzLjk1Mjc4ODA2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzNDk3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZUUkFDRVwiLFxuICAgIFwiRlVOQ1RJT05fVFJBQ0VSXCIsXG4gICAgXCJGVU5DVElPTl9HUkFQSF9UUkFDRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZXJuZWxfY2xvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBidWcgaW4gdGhlIGVycm9yIHBhdGggb2YgY29weV9wcm9jZXNzKCkgd2hlbiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGlzIGVuYWJsZWQuIEl0IG1vdmVzIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKSBlYXJsaWVyIHNvIHRoYXQgaWYgY29weV9wcm9jZXNzKCkgZmFpbHMsIHRoZSBwYXJlbnQncyByZXRfc3RhY2sgaXMgbm90IGluY29ycmVjdGx5IGZyZWVkIGJ5IGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKHByb2Nlc3MgY3JlYXRpb24pIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZUUkFDRVwiLFxuICAgIFwiRlVOQ1RJT05fVFJBQ0VSXCIsXG4gICAgXCJGVU5DVElPTl9HUkFQSF9UUkFDRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZXJuZWxfY2xvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBidWcgaW4gdGhlIGVycm9yIHBhdGggb2YgY29weV9wcm9jZXNzKCkgd2hlbiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyIGlzIGVuYWJsZWQuIEl0IG1vdmVzIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKSBlYXJsaWVyIHNvIHRoYXQgaWYgY29weV9wcm9jZXNzKCkgZmFpbHMsIHRoZSBwYXJlbnQncyByZXRfc3RhY2sgaXMgbm90IGluY29ycmVjdGx5IGZyZWVkIGJ5IGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKHByb2Nlc3MgY3JlYXRpb24pIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NToxNC4wMzQxNDUzM1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NDE2OTcyNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NToxNC4wMzQ3MjkxNTlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDM4NDExMDkwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gcHJldmVudCBhIGJ1ZyB3aGVyZSBhbiBlcnJvciBwYXRoIGluY29ycmVjdGx5IGZyZWVzIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYC4gU3BlY2lmaWNhbGx5LCBgZHVwX3Rhc2tfc3RydWN0KClgIGNvcGllcyB0aGUgcGFyZW50J3MgYHRhc2tfc3RydWN0YCwgaW5jbHVkaW5nIHRoZSBgcmV0X3N0YWNrYCBwb2ludGVyLiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhpcyBwb2ludGVyIChgdC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTGApIGFuZCBhbGxvY2F0aW5nIGEgbmV3IG9uZSBpZiB0cmFjaW5nIGlzIGFjdGl2ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGluIGBjb3B5X3Byb2Nlc3MoKWAgYmVmb3JlIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKClgIGlzIGNhbGxlZCwgdGhlIGVycm9yIHBhdGggd2lsbCBldmVudHVhbGx5IGNhbGwgYGZyZWVfdGFzaygpYCwgd2hpY2ggY2FsbHMgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAuIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKClgIHdpbGwgdGhlbiBmcmVlIGB0LVxcdTAwM2VyZXRfc3RhY2tgLiBTaW5jZSBpdCB3YXMgbmV2ZXIgY2xlYXJlZCwgaXQgZnJlZXMgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLiBUaGlzIHJlc3VsdHMgaW4gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBwYXJlbnQgY29udGludWVzIHRvIHVzZSBpdHMgYHJldF9zdGFja2AsIG9yIGEgZG91YmxlIGZyZWUgd2hlbiB0aGUgcGFyZW50IGV4aXRzLlxcblxcbkJvdGggdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZSBmcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaW4gdGhpcyBidWcsIGFzIHRoZSBwb2ludGVyIGl0c2VsZiBpcyBpbml0aWFsaXplZCAoY29waWVkIGZyb20gdGhlIHBhcmVudCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NjE5NDFmOTNkYjNlMjM3NDA4MTliMDE4NWJmMDQ3Yzk5OTIwZWI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMjA6NDA6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xuaW5kZXggMWU2ODQwNGJkNzczZS4uMGQxYWQ5MmUyZDMzNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mb3JrLmNcbisrKyBiL2tlcm5lbC9mb3JrLmNcbkBAIC0yMTM5LDYgKzIxMzksMTEgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcdHAgPSBkdXBfdGFza19zdHJ1Y3QoY3VycmVudCwgbm9kZSk7XG4gXHRpZiAoIXApXG4gXHRcdGdvdG8gZm9ya19vdXQ7XG4rXHQvKlxuK1x0ICogTXVzdCBydW4gYmVmb3JlIHRoZSBmaXJzdCBmYWxsaWJsZSBvcCwgc28gZXJyb3IgcGF0aHMgbmV2ZXJcbitcdCAqIGZyZWUgdGhlIHBhcmVudCdzIHJldF9zdGFjay5cbitcdCAqL1xuK1x0ZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKTtcbiBcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XG4gXHRpZiAocmV0dmFsKVxuIFx0XHRnb3RvIGJhZF9mb3JrX2ZyZWU7XG5AQCAtMjE2NSw4ICsyMTcwLDYgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcdCAqL1xuIFx0cC1cdTAwM2VjbGVhcl9jaGlsZF90aWQgPSAoY2xvbmVfZmxhZ3MgXHUwMDI2IENMT05FX0NISUxEX0NMRUFSVElEKSA/IGFyZ3MtXHUwMDNlY2hpbGRfdGlkIDogTlVMTDtcbiBcbi1cdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XG4tXG4gXHRydF9tdXRleF9pbml0X3Rhc2socCk7XG4gXHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2cC1cdTAwM2VibG9ja2VkX2xvY2spO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6MTQuMDM0NzI5ODM5WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzODc2NTU0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrIFBsYWNlbWVudCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW92aW5nIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIHdpdGhpbiBgY29weV9wcm9jZXNzKClgIGluIGBrZXJuZWwvZm9yay5jYC4gSW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaXQncyBiZWluZyBtb3ZlZCAqYmVmb3JlKiBgY29weV9leGVjX3N0YXRlKClgIGFuZCBvdGhlciBvcGVyYXRpb25zIHRoYXQgY2FuIHBvdGVudGlhbGx5IGZhaWwuIFRoZSBjb21tZW50IGlzIHByZXR0eSBleHBsaWNpdDogXCJNdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IGZhbGxpYmxlIG9wLCBzbyBlcnJvciBwYXRocyBuZXZlciBmcmVlIHRoZSBwYXJlbnQncyByZXRfc3RhY2suXCIgVGhhdCBzb3VuZHMgbGlrZSBhIGJ1ZyBmaXgsIGFuZCBnaXZlbiB0aGUgY29udGV4dCBJJ20gaW1tZWRpYXRlbHkgc3VzcGljaW91cyBvZiBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuXG5cbkxldCdzIGRpdmUgaW50byB3aGF0IGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCBhY3R1YWxseSAqZG9lcyouIE15IGd1ZXNzIGlzIHRoYXQgaXQncyBpbml0aWFsaXppbmcgc29tZSBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIHRoZSBgdGFza19zdHJ1Y3RgLiBJZiBzbywgbW92aW5nIGl0IGVhcmxpZXIgbWVhbnMgdGhvc2UgZmllbGRzIGFyZSBpbml0aWFsaXplZCBldmVuIGlmIGFuIGVycm9yIG9jY3VycyBsYXRlciBpbiB0aGUgYGNvcHlfcHJvY2VzcygpYCBzZXF1ZW5jZS4gSG1tLi4uIGlmIHRoZSBlcnJvciBwYXRocyBmcmVlIGBwYCAod2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgdGhlIHJlc3VsdCBvZiBgZHVwX3Rhc2tfc3RydWN0KGN1cnJlbnQsIG5vZGUpYCDigJMgdGhlIGNvcHkgb2YgdGhlIHBhcmVudCB0YXNrKSwgdGhlbiBtYXliZSB0aG9zZSBlcnJvciBwYXRocyB3ZXJlLCBpbiB0aGUgcHJldmlvdXMgY29kZSwgZnJlZWluZyB1bmluaXRpYWxpemVkIHBvaW50ZXJzIG9yLCBtb3JlIGxpa2VseSwgcG9pbnRlcnMgKmNvcGllZCogZnJvbSB0aGUgcGFyZW50LlxuXG5BaCwgd2FpdCwgdGhhdCdzIGl0ISBgZHVwX3Rhc2tfc3RydWN0YCAqY29waWVzKiB0aGUgcGFyZW50J3MgYHRhc2tfc3RydWN0YC4gU28sIGBwLVx1MDAzZXJldF9zdGFja2Agd291bGQgYmUgYSAqY29weSogb2YgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLiBUaGUgY3J1eCBvZiBpdCBpcyB0aGF0IGlmIGFuIGVycm9yIG9jY3VycyAqYmVmb3JlKiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCAobGlrZSBgYmFkX2ZvcmtfZnJlZWApIG1pZ2h0IGNhbGwgYGZyZWVfdGFzayhwKWAsIHdoaWNoIGluIHR1cm4gY291bGQgY2FsbCBgZnJlZV90YXNrX3N0YWNrKHApYC4gSWYgYGZyZWVfdGFza19zdGFjayhwKWAgd2VyZSBjYWxsZWQsIGl0IG1pZ2h0IGZyZWUgYHAtXHUwMDNlcmV0X3N0YWNrYC4gQnV0IHRoYXQgYHJldF9zdGFja2AgaXMgYSAqY29weSogb2YgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgISBUaGVyZWZvcmUsIHRoYXQgbWVhbnMgd2UgYXJlIGZyZWVpbmcgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLCBwb3RlbnRpYWxseSBjYXVzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2l0dWF0aW9uLlxuXG5UaGF0J3MgaXQsIHRoaXMgaXMgYSB0ZXh0Ym9vayB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBidWcuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhpcywgaWYgaXQgd2FzIGVuYWJsZWQuIE15IHN1c3BpY2lvbiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB0aGUgcm9vdCBvZiBpdCB3YXMgd3JvbmcgdGhvdWdoLiBJdCdzIG1vcmUgc3VidGxlIHRoYW4gdGhhdDogaXQgaW52b2x2ZXMgYSAqY29waWVkKiBwb2ludGVyIGZyb20gdGhlIHBhcmVudCBiZWluZyBmcmVlZCBpbmNvcnJlY3RseSBkdWUgdG8gYW4gb3JkZXIgb2Ygb3BlcmF0aW9ucyBpc3N1ZS4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGlzLCBpbiBmYWN0LCB0aGUgY3J1Y2lhbCBpbml0aWFsaXphdGlvbiB0aGF0IHJlc29sdmVzIHRoaXMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NToyMi40MjIzODkxNzFaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTgzNzUzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnRyYWNlX2dyYXBoX2luaXRfdGFza1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNDI9ZXh0ZXJuIHRyYWNlX2Z1bmNfZ3JhcGhfZW50X3QgZnRyYWNlX2dyYXBoX2VudHJ5O1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0My1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNDQ6ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0NS1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oPTEzNTY9c3RhdGljIGlubGluZSB2b2lkIHVucGF1c2VfZ3JhcGhfdHJhY2luZyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdHJhY2UuaC0xMzYzLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM2NDpzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2NS1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0yMDE4PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuLS1cXG5rZXJuZWwvZm9yay5jLTIxNDUtXFx0ICovXFxua2VybmVsL2ZvcmsuYzoyMTQ2OlxcdGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socCk7XFxua2VybmVsL2ZvcmsuYy0yMTQ3LVxcdHJldHZhbCA9IGNvcHlfZXhlY19zdGF0ZShjbG9uZV9mbGFncywgcCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM9MTEzMT12b2lkIGZ0cmFjZV9ncmFwaF9pbml0X2lkbGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE1OS0vKiBBbGxvY2F0ZSBhIHJldHVybiBzdGFjayBmb3IgbmV3bHkgY3JlYXRlZCB0YXNrICovXFxua2VybmVsL3RyYWNlL2ZncmFwaC5jOjExNjA6dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE2MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ1OjI0LjE0MDc3MDY4OVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgwMDEwMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2sqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIuIE15IGluaXRpYWwgcG9pbnQgb2YgaW50ZXJlc3QgaXMgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgLCB3aGljaCBJIGJlbGlldmUgcmVzaWRlcyBpbiBga2VybmVsL3RyYWNlL2ZncmFwaC5jYC4gSSdtIGN1cmlvdXMgYWJvdXQgaG93IHRoZSBpbml0aWFsIHNldHVwIG9mIGEgdGFzayBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2luZyBmcmFtZXdvcmsuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgbWFpbiB0cmFjaW5nIGluZnJhc3RydWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBlYWNoIHRhc2sgaXMgc2V0IHVwLiBJJ20gZ29pbmcgdG8gd2FudCB0byBleGFtaW5lIGhvdyB0aGF0IGluaXRpYWxpemF0aW9uIHRpZXMgaW50byB0aGUgYnJvYWRlciB0cmFjaW5nIGNvbnRleHQgYW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgdHJhY2VyJ3MgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaG93IHRhc2tzIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIG1haW4gdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gSSBhbHNvIGV4cGVjdCB0byBzZWUgaG93IGl0IHBvdGVudGlhbGx5IG1hbmFnZXMgYW55IHNwZWNpZmljIHBlci10YXNrIHRyYWNpbmcgZmxhZ3Mgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSXQncyB0aW1lIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBleGVjdXRpb24gZmxvdyB3aXRoaW4gdGhlIGxhcmdlciB0cmFjaW5nIHNjaGVtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ1OjI3LjIyMDc4ODYzOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2ZncmFwaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTk6XFx0LyogQWxsb2NhdGUgYSByZXR1cm4gc3RhY2sgZm9yIG5ld2x5IGNyZWF0ZWQgdGFzayAqL1xcbjExNjA6XFx0dm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4xMTYxOlxcdHtcXG4xMTYyOlxcdFxcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdXNlIHRoZSBwYXJlbnQgcmV0X3N0YWNrICovXFxuMTE2MzpcXHRcXHR0LVxcdTAwM2VyZXRfc3RhY2sgPSBOVUxMO1xcbjExNjQ6XFx0XFx0dC1cXHUwMDNlY3Vycl9yZXRfc3RhY2sgPSAwO1xcbjExNjU6XFx0XFx0dC1cXHUwMDNlY3Vycl9yZXRfZGVwdGggPSAtMTtcXG4xMTY2OlxcdFxcbjExNjc6XFx0XFx0aWYgKGZ0cmFjZV9ncmFwaF9hY3RpdmUpIHtcXG4xMTY4OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjaztcXG4xMTY5OlxcdFxcbjExNzA6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRSghZmdyYXBoX3N0YWNrX2NhY2hlcCkpXFxuMTE3MTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTE3MjpcXHRcXG4xMTczOlxcdFxcdFxcdHJldF9zdGFjayA9IGttZW1fY2FjaGVfYWxsb2MoZmdyYXBoX3N0YWNrX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuMTE3NDpcXHRcXHRcXHRpZiAoIXJldF9zdGFjaylcXG4xMTc1OlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMTc2OlxcdFxcdFxcdGdyYXBoX2luaXRfdGFzayh0LCByZXRfc3RhY2spO1xcbjExNzc6XFx0XFx0fVxcbjExNzg6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NToyNy4yMjA5MzY3NzlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4OTc3ODY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBDb3JydXB0aW9uIGluIFRhc2sgQ3JlYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBhbmQgaW1tZWRpYXRlbHksIGB0LVx1MDAzZXJldF9zdGFjayA9IE5VTEw7YCBqdW1wcyBvdXQgYXQgbWUuIEkga25vdyBgZHVwX3Rhc2tfc3RydWN0YCBtYWtlcyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHBhcmVudCdzIGB0YXNrX3N0cnVjdGAsIG1lYW5pbmcgdGhlIG5ldyB0YXNrJ3MgYHAtXHUwMDNlcmV0X3N0YWNrYCBzdGFydHMgb3V0IHBvaW50aW5nIHRvIHRoZSBzYW1lIG1lbW9yeSBsb2NhdGlvbiBhcyB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AuIFRoYXQncyBub3JtYWwsIGV4cGVjdGVkIGJlaGF2aW9yIGluIGEgZm9yayBzY2VuYXJpby5cblxuVGhlIGlzc3VlIGFyaXNlcyBpZiBzb21ldGhpbmcgZ29lcyBzaWRld2F5cyBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGdldHMgYSBjaGFuY2UgdG8gcnVuLiBTcGVjaWZpY2FsbHksIGlmIGFuIGVycm9yIHBvcHMgdXAgKmJlZm9yZSogdGhhdCBpbml0aWFsaXphdGlvbiwgdGhlIGNoaWxkIHRhc2sncyBgcC1cdTAwM2VyZXRfc3RhY2tgIGRvZXNuJ3QgZ2V0IHByb3Blcmx5IHNldCB0byBgTlVMTGAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugbm93LCB3ZSdyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSBvbiB0aGUgZXJyb3IgcGF0aCwgZWl0aGVyIGBmcmVlX3Rhc2socClgIG9yIGBwdXRfdGFza19zdHJ1Y3QocClgIChvciBwb3RlbnRpYWxseSBldmVuIGBiYWRfZm9ya19mcmVlYCkgbWlnaHQgdHJ5IHRvIGZyZWUgdGhhdCB2ZXJ5IHNhbWUgYHAtXHUwMDNlcmV0X3N0YWNrYCBtZW1vcnkgdGhhdCB3YXMgc2hhcmVkIHdpdGggdGhlIHBhcmVudC5cblxuVGhpcyBzZWVtcyBsaWtlIGEgY2xhc3NpYyBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCBkZXBlbmRpbmcgb24gdGhlIGV4YWN0IHRpbWluZyBhbmQgd2hpY2ggcHJvY2VzcyBnZXRzIHRvIGl0IGZpcnN0LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgZnJlZV90YXNrYCwgYHB1dF90YXNrX3N0cnVjdGAsIGFuZCBgYmFkX2ZvcmtfZnJlZWAgaW1tZWRpYXRlbHkgdG8gY29uZmlybSBpZiB0aGF0J3Mgd2hhdCdzIGhhcHBlbmluZy4gSSdsbCBmb2N1cyBvbiBob3cgdGhleSBoYW5kbGUgYHJldF9zdGFja2AgYW5kIGFueSBhc3NvY2lhdGVkIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgY2FyZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDkxLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6MzEuNTEwNzE4ODYzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyNTYzNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZyZWVfdGFza1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jPTIxOT1zdGF0aWMgaW50IGJlaXNjc2lfZWhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc2MpXFxuLS1cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jLTI0My1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2Vzc2lvbi1cXHUwMDNlYmFja19sb2NrKTtcXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jOjI0NDpcXHRcXHQvKiBXZSBhcmUganVzdCBhYm91dCB0byBjYWxsIGlzY3NpX2ZyZWVfdGFzayBzbyB3YWl0IGZvciBpdC4gKi9cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jLTI0NS1cXHRcXHR1ZGVsYXkoNSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmYy5oPTUxNj1pbnQgYm54MmZjX3NldHVwX3Rhc2tfY3R4KHN0cnVjdCBibngyZmNfaGJhICpoYmEpO1xcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjLmg6NTE3OnZvaWQgYm54MmZjX2ZyZWVfdGFza19jdHgoc3RydWN0IGJueDJmY19oYmEgKmhiYSk7XFxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmMuaC01MTgtaW50IGJueDJmY19zZXR1cF9md19yZXNjKHN0cnVjdCBibngyZmNfaGJhICpoYmEpO1xcbi0tXFxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jPTE2OTc9c3RhdGljIHZvaWQgYm54MmZjX3VuYmluZF9hZGFwdGVyX2RldmljZXMoc3RydWN0IGJueDJmY19oYmEgKmhiYSlcXG4tLVxcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYy0xNjk5LVxcdGJueDJmY19mcmVlX2Z3X3Jlc2MoaGJhKTtcXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19mY29lLmM6MTcwMDpcXHRibngyZmNfZnJlZV90YXNrX2N0eChoYmEpO1xcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYy0xNzAxLX1cXG4tLVxcbmRyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jPTE4Njc9aW50IGJueDJmY19zZXR1cF90YXNrX2N0eChzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhKVxcbi0tXFxuZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmMtMTk1Ni1cXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYzoxOTU3OnZvaWQgYm54MmZjX2ZyZWVfdGFza19jdHgoc3RydWN0IGJueDJmY19oYmEgKmhiYSlcXG5kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYy0xOTU4LXtcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jPTMxND1zdGF0aWMgaW50IGlzY3NpX3ByZXBfc2NzaV9jbWRfcGR1KHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNDQ2LS8qKlxcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOjQ0NzogKiBpc2NzaV9mcmVlX3Rhc2sgLSBmcmVlIGEgdGFza1xcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTQ0OC0gKiBAdGFzazogaXNjc2kgY21kIHRhc2tcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTQ1My0gKi9cXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYzo0NTQ6c3RhdGljIHZvaWQgaXNjc2lfZnJlZV90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKVxcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTQ1NS17XFxuLS1cXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz00OTk9dm9pZCBfX2lzY3NpX3B1dF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNTAxLVxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnRhc2stXFx1MDAzZXJlZmNvdW50KSlcXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYzo1MDI6XFx0XFx0aXNjc2lfZnJlZV90YXNrKHRhc2spO1xcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTUwMy19XFxuLS1cXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz01MDY9dm9pZCBpc2NzaV9wdXRfdGFzayhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaylcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jLTUxMS1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNlc3Npb24tXFx1MDAzZWJhY2tfbG9jayk7XFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmM6NTEyOlxcdFxcdGlzY3NpX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy01MTMtXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNlc3Npb24tXFx1MDAzZWJhY2tfbG9jayk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYz03MDY9aXNjc2lfYWxsb2NfbWdtdF90YXNrKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIsXFxuLS1cXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy03NzMtXFx0XFx0XFx0XFx0XFx0IFxcXCJwZHUgZm9yIG1nbXQgdGFzay5cXFxcblxcXCIpO1xcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOjc3NDpcXHRcXHRcXHRnb3RvIGZyZWVfdGFzaztcXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy03NzUtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNzkxLVxcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOjc5MjpmcmVlX3Rhc2s6XFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtNzkzLVxcdGlzY3NpX3B1dF90YXNrKHRhc2spO1xcbi0tXFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmM9MjM0Nj1pbnQgaXNjc2lfZWhfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc2MpXFxuLS1cXG5kcml2ZXJzL3Njc2kvbGliaXNjc2kuYy0yNDAzLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2Vzc2lvbi1cXHUwMDNlZWhfbXV0ZXgpO1xcbmRyaXZlcnMvc2NzaS9saWJpc2NzaS5jOjI0MDQ6XFx0XFx0LyogV2UgYXJlIGp1c3QgYWJvdXQgdG8gY2FsbCBpc2NzaV9mcmVlX3Rhc2sgc28gd2FpdCBmb3IgaXQuICovXFxuZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMtMjQwNS1cXHRcXHR1ZGVsYXkoSVNDU0lfQ01EX0NPTVBMX1dBSVQpO1xcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmM9NzM9c3RhdGljIHZvaWQgc2FzX2F0YV90YXNrX2RvbmUoc3RydWN0IHNhc190YXNrICp0YXNrKVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtMTUxLXFjX2FscmVhZHlfZ29uZTpcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYzoxNTI6XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19hdGEuYy0xNTMtfVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmM9MTU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2FzX2F0YV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtMjIwLVxcdFxcdFxcdEFTU0lHTl9TQVNfVEFTSyhxYy1cXHUwMDNlc2NzaWNtZCwgTlVMTCk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmM6MjIxOlxcdFxcdHNhc19mcmVlX3Rhc2sodGFzayk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtMjIyLVxcdFxcdHFjLVxcdTAwM2VsbGRkX3Rhc2sgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmM9NDQ3PXN0YXRpYyB2b2lkIHNhc19hdGFfaW50ZXJuYWxfYWJvcnQoc3RydWN0IHNhc190YXNrICp0YXNrKVxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtNDg0LSBvdXQ6XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmM6NDg1OlxcdHNhc19mcmVlX3Rhc2sodGFzayk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfYXRhLmMtNDg2LX1cXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmM9NTY9c3RhdGljIGludCBzbXBfZXhlY3V0ZV90YXNrX3NnKHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jLTEzMi1cXHRcXHRcXHRcXHQgIHRhc2stXFx1MDAzZXRhc2tfc3RhdHVzLnN0YXQpO1xcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmM6MTMzOlxcdFxcdFxcdHNhc19mcmVlX3Rhc2sodGFzayk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYy0xMzQtXFx0XFx0XFx0dGFzayA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jLTE0MC1cXHRCVUdfT04ocmV0cnkgPT0gMyBcXHUwMDI2XFx1MDAyNiB0YXNrICE9IE5VTEwpO1xcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmM6MTQxOlxcdHNhc19mcmVlX3Rhc2sodGFzayk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYy0xNDItXFx0cmV0dXJuIHJlcztcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYz0zOT1zdHJ1Y3Qgc2FzX3Rhc2sgKnNhc19hbGxvY19zbG93X3Rhc2soZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmMtNTgtXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jOjU5OnZvaWQgc2FzX2ZyZWVfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jLTYwLXtcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYz02ODI9c3RhdGljIGludCBfX2luaXQgc2FzX2NsYXNzX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYy02ODktXFx0aWYgKCFzYXNfZXZlbnRfY2FjaGUpXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jOjY5MDpcXHRcXHRnb3RvIGZyZWVfdGFza19rbWVtO1xcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYy02OTEtXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfaW5pdC5jLTY5Mi1cXHRyZXR1cm4gMDtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbml0LmM6NjkzOmZyZWVfdGFza19rbWVtOlxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2luaXQuYy02OTQtXFx0a21lbV9jYWNoZV9kZXN0cm95KHNhc190YXNrX2NhY2hlKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmg9NjM9c3RydWN0IHNhc190YXNrICpzYXNfYWxsb2Nfc2xvd190YXNrKGdmcF90IGZsYWdzKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19pbnRlcm5hbC5oOjY0OnZvaWQgc2FzX2ZyZWVfdGFzayhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spO1xcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2ludGVybmFsLmgtNjUtXFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYz0zOD1zdGF0aWMgdm9pZCBzYXNfZW5kX3Rhc2soc3RydWN0IHNjc2lfY21uZCAqc2MsIHN0cnVjdCBzYXNfdGFzayAqdGFzaylcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTk2LVxcdEFTU0lHTl9TQVNfVEFTSyhzYywgTlVMTCk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmM6OTc6XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy05OC19XFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYz0xMDA9c3RhdGljIHZvaWQgc2FzX3Njc2lfdGFza19kb25lKHN0cnVjdCBzYXNfdGFzayAqdGFzaylcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTEyMS1cXHRcXHRwcl9kZWJ1ZyhcXFwidGFza19kb25lIGNhbGxlZCB3aXRoIG5vbiBleGlzdGluZyBTQ1NJIGNtbmQhXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzoxMjI6XFx0XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xMjMtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmM9MTYxPWVudW0gc2NzaV9xY19zdGF0dXMgc2FzX3F1ZXVlY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LFxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtMTg3LVxcdGlmIChyZXMpXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmM6MTg4OlxcdFxcdGdvdG8gb3V0X2ZyZWVfdGFzaztcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xODktXFx0cmV0dXJuIDA7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtMTkwLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jOjE5MTpvdXRfZnJlZV90YXNrOlxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTE5Mi1cXHRwcl9kZWJ1ZyhcXFwibGxkZF9leGVjdXRlX3Rhc2sgcmV0dXJuZWQ6ICVkXFxcXG5cXFwiLCByZXMpO1xcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTE5My1cXHRBU1NJR05fU0FTX1RBU0soY21kLCBOVUxMKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzoxOTQ6XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xOTUtXFx0aWYgKHJlcyA9PSAtU0FTX1FVRVVFX0ZVTEwpXFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYz05MDQ9c3RhdGljIGludCBzYXNfZXhlY3V0ZV9pbnRlcm5hbF9hYm9ydChzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtOTY4LVxcdFxcdCAgICAgICB0YXNrLVxcdTAwM2V0YXNrX3N0YXR1cy5zdGF0KTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzo5Njk6XFx0XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy05NzAtXFx0XFx0dGFzayA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy05NzItXFx0QlVHX09OKHJldHJ5ID09IFRBU0tfUkVUUlkgXFx1MDAyNlxcdTAwMjYgdGFzayAhPSBOVUxMKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYzo5NzM6XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy05NzQtXFx0cmV0dXJuIHJlcztcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jPTk5Mz1pbnQgc2FzX2V4ZWN1dGVfdG1mKHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXZpY2UsIHZvaWQgKnBhcmFtZXRlcixcXG4tLVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTEwOTgtXFx0XFx0fVxcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jOjEwOTk6XFx0XFx0c2FzX2ZyZWVfdGFzayh0YXNrKTtcXG5kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYy0xMTAwLVxcdFxcdHRhc2sgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMtMTEwNS1cXHRcXHRcXHRTQVNfQUREUihkZXZpY2UtXFx1MDAzZXNhc19hZGRyKSwgVEFTS19SRVRSWSk7XFxuZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmM6MTEwNjpcXHRzYXNfZnJlZV90YXNrKHRhc2spO1xcbmRyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jLTExMDctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTI3MjY9dm9pZCBicGZfb2JqX2ZyZWVfd29ya3F1ZXVlKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iaik7XFxuaW5jbHVkZS9saW51eC9icGYuaDoyNzI3OnZvaWQgYnBmX29ial9mcmVlX3Rhc2tfd29yayhjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCB2b2lkICpvYmopO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMjcyOC12b2lkIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopO1xcbi0tXFxuaW5jbHVkZS9saW51eC9idGYuaC01Ny0gKlxcbmluY2x1ZGUvbGludXgvYnRmLmg6NTg6ICogU0VDKFxcXCJrcmV0cHJvYmUvZnJlZV90YXNrXFxcIilcXG5pbmNsdWRlL2xpbnV4L2J0Zi5oOjU5OiAqIGludCBCUEZfUFJPRyhmcmVlX3Rhc2tfcHJvYmUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmluY2x1ZGUvbGludXgvYnRmLmgtNjAtICoge1xcbi0tXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg9NDMzPXN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX2ludmFyaWFudF9zdGF0ZShib29sIGZvcmNlKSB7fVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjQzNDpzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKSB7fVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQzNS1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oPTEyMzA9ZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7XFxuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50Lmg6MTIzMTpleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbmluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oLTEyMzItZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9kZWxheWVkX3B1dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50Lmg9MTk2Mz1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZClcXHR7IH1cXG5pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaDoxOTY0OnN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFx0eyB9XFxuaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgtMTk2NS1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9kZWxheWVkX3B1dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFx0eyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaD0xMDg9aW50IGtlcm5lbF93YWl0KHBpZF90IHBpZCwgaW50ICpzdGF0KTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC0xMDktXFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg6MTEwOmV4dGVybiB2b2lkIGZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtMTExLVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg9MTI5PXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtMTU1LVxcdCAqXFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg6MTU2OlxcdCAqIGRlbGF5ZWRfZnJlZV90YXNrKCkgYWxzbyB1c2VzIC1cXHUwMDNlcmN1LCBidXQgaXQgaXMgb25seSBjYWxsZWRcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC0xNTctXFx0ICogd2hlbiBpdCBmYWlscyB0byBmb3JrIGEgcHJvY2Vzcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBub1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NTAzMz12b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbClcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzktXFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC1cXHUwMDNlcmVjb3JkLCBCUEZfVEFTS19XT1JLKSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDQwOlxcdFxcdGJwZl9vYmpfZnJlZV90YXNrX3dvcmsobWFwLVxcdTAwM2VyZWNvcmQsIHZhbCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTA0MS19XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz03OTU9dm9pZCBicGZfb2JqX2ZyZWVfd29ya3F1ZXVlKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgwMS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4MDI6dm9pZCBicGZfb2JqX2ZyZWVfdGFza193b3JrKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MDMte1xcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmM9NTc1Mz1zdGF0aWMgdm9pZCBfX2ZyZWVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KVxcbi0tXFxua2VybmVsL2V2ZW50cy9jb3JlLmMtNTc5Mi1cXHQvKlxcbmtlcm5lbC9ldmVudHMvY29yZS5jOjU3OTM6XFx0ICogcGVyZl9ldmVudF9mcmVlX3Rhc2soKSByZWxpZXMgb24gcHV0X2N0eCgpIGJlaW5nICdsYXN0JywgaW5cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy01Nzk0LVxcdCAqIHBhcnRpY3VsYXIgYWxsIHRhc2sgcmVmZXJlbmNlcyBtdXN0IGJlIGNsZWFuZWQgdXAuXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYz0xNDcxNj12b2lkIHBlcmZfZXZlbnRfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTE0NzYyLSAqL1xcbmtlcm5lbC9ldmVudHMvY29yZS5jOjE0NzYzOnZvaWQgcGVyZl9ldmVudF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbmtlcm5lbC9ldmVudHMvY29yZS5jLTE0NzY0LXtcXG4tLVxcbmtlcm5lbC9ldmVudHMvY29yZS5jPTE1MTI0PWludCBwZXJmX2V2ZW50X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1NjQgY2xvbmVfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZXZlbnRzL2NvcmUuYy0xNTEzNS1cXHRpZiAocmV0KSB7XFxua2VybmVsL2V2ZW50cy9jb3JlLmM6MTUxMzY6XFx0XFx0cGVyZl9ldmVudF9mcmVlX3Rhc2soY2hpbGQpO1xcbmtlcm5lbC9ldmVudHMvY29yZS5jLTE1MTM3LVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5rZXJuZWwvZXhlY19zdGF0ZS5jPTEzPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza19leGVjX3N0YXRlX2NhY2hlcDtcXG5rZXJuZWwvZXhlY19zdGF0ZS5jLTE0LVxcbmtlcm5lbC9leGVjX3N0YXRlLmM6MTU6c3RhdGljIHZvaWQgX19mcmVlX3Rhc2tfZXhlY19zdGF0ZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG5rZXJuZWwvZXhlY19zdGF0ZS5jLTE2LXtcXG4tLVxcbmtlcm5lbC9leGVjX3N0YXRlLmM9MjM9dm9pZCBwdXRfdGFza19leGVjX3N0YXRlKHN0cnVjdCB0YXNrX2V4ZWNfc3RhdGUgKmV4ZWNfc3RhdGUpXFxuLS1cXG5rZXJuZWwvZXhlY19zdGF0ZS5jLTI1LVxcdGlmIChleGVjX3N0YXRlIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2ZXhlY19zdGF0ZS1cXHUwMDNlY291bnQpKVxcbmtlcm5lbC9leGVjX3N0YXRlLmM6MjY6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNmV4ZWNfc3RhdGUtXFx1MDAzZXJjdSwgX19mcmVlX3Rhc2tfZXhlY19zdGF0ZSk7XFxua2VybmVsL2V4ZWNfc3RhdGUuYy0yNy19XFxuLS1cXG5rZXJuZWwvZXhpdC5jPTkyOD12b2lkIF9fbm9yZXR1cm4gZG9fZXhpdChsb25nIGNvZGUpXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTEwNDktXFxua2VybmVsL2V4aXQuYzoxMDUwOlxcdGxvY2tkZXBfZnJlZV90YXNrKHRzayk7XFxua2VybmVsL2V4aXQuYy0xMDUxLVxcdGRvX3Rhc2tfZGVhZCgpO1xcbi0tXFxua2VybmVsL2ZvcmsuYz0xODY9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFsbG9jX3Rhc2tfc3RydWN0X25vZGUoaW50IG5vZGUpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTE5MC1cXG5rZXJuZWwvZm9yay5jOjE5MTpzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5rZXJuZWwvZm9yay5jLTE5Mi17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTUyNj12b2lkIHB1dF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxua2VybmVsL2ZvcmsuYy01MzItXFxua2VybmVsL2ZvcmsuYzo1MzM6dm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxua2VybmVsL2ZvcmsuYy01MzQte1xcbi0tXFxua2VybmVsL2ZvcmsuYy01NjEtXFx0cHV0X3Rhc2tfZXhlY19zdGF0ZShyY3VfYWNjZXNzX3BvaW50ZXIodHNrLVxcdTAwM2VleGVjX3N0YXRlKSk7XFxua2VybmVsL2ZvcmsuYzo1NjI6XFx0ZnJlZV90YXNrX3N0cnVjdCh0c2spO1xcbmtlcm5lbC9mb3JrLmMtNTYzLX1cXG5rZXJuZWwvZm9yay5jOjU2NDpFWFBPUlRfU1lNQk9MKGZyZWVfdGFzayk7XFxua2VybmVsL2ZvcmsuYy01NjUtXFxuLS1cXG5rZXJuZWwvZm9yay5jPTc4Mj12b2lkIF9fcHV0X3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxua2VybmVsL2ZvcmsuYy03OTYtXFx0c2NoZWRfY29yZV9mcmVlKHRzayk7XFxua2VybmVsL2ZvcmsuYzo3OTc6XFx0ZnJlZV90YXNrKHRzayk7XFxua2VybmVsL2ZvcmsuYy03OTgtfVxcbi0tXFxua2VybmVsL2ZvcmsuYz05MTU9c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqb3JpZywgaW50IG5vZGUpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTk1MS1cXHQgKiB0aGVuLiBVbnRpbCB0aGVuLCBmaWx0ZXIgbXVzdCBiZSBOVUxMIHRvIGF2b2lkIG1lc3NpbmcgdXBcXG5rZXJuZWwvZm9yay5jOjk1MjpcXHQgKiB0aGUgdXNhZ2UgY291bnRzIG9uIHRoZSBlcnJvciBwYXRoIGNhbGxpbmcgZnJlZV90YXNrLlxcbmtlcm5lbC9mb3JrLmMtOTUzLVxcdCAqL1xcbi0tXFxua2VybmVsL2ZvcmsuYy0xMDI5LWZyZWVfdHNrOlxcbmtlcm5lbC9mb3JrLmM6MTAzMDpcXHRmcmVlX3Rhc2tfc3RydWN0KHRzayk7XFxua2VybmVsL2ZvcmsuYy0xMDMxLVxcdHJldHVybiBOVUxMO1xcbi0tXFxua2VybmVsL2ZvcmsuYz0xOTE0PWludCBwaWRmZF9wcmVwYXJlKHN0cnVjdCBwaWQgKnBpZCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgZmlsZSAqKnJldF9maWxlKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0xOTU3LVxcbmtlcm5lbC9mb3JrLmM6MTk1ODpzdGF0aWMgdm9pZCBfX2RlbGF5ZWRfZnJlZV90YXNrKHN0cnVjdCByY3VfaGVhZCAqcmhwKVxcbmtlcm5lbC9mb3JrLmMtMTk1OS17XFxuLS1cXG5rZXJuZWwvZm9yay5jLTE5NjEtXFxua2VybmVsL2ZvcmsuYzoxOTYyOlxcdGZyZWVfdGFzayh0c2spO1xcbmtlcm5lbC9mb3JrLmMtMTk2My19XFxua2VybmVsL2ZvcmsuYy0xOTY0LVxcbmtlcm5lbC9mb3JrLmM6MTk2NTpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZGVsYXllZF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxua2VybmVsL2ZvcmsuYy0xOTY2LXtcXG5rZXJuZWwvZm9yay5jLTE5NjctXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSlcXG5rZXJuZWwvZm9yay5jOjE5Njg6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnRzay1cXHUwMDNlcmN1LCBfX2RlbGF5ZWRfZnJlZV90YXNrKTtcXG5rZXJuZWwvZm9yay5jLTE5NjktXFx0ZWxzZVxcbmtlcm5lbC9mb3JrLmM6MTk3MDpcXHRcXHRmcmVlX3Rhc2sodHNrKTtcXG5rZXJuZWwvZm9yay5jLTE5NzEtfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0yMDE4PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuLS1cXG5rZXJuZWwvZm9yay5jLTI2MzAtYmFkX2ZvcmtfY2xlYW51cF9wZXJmOlxcbmtlcm5lbC9mb3JrLmM6MjYzMTpcXHRwZXJmX2V2ZW50X2ZyZWVfdGFzayhwKTtcXG5rZXJuZWwvZm9yay5jLTI2MzItYmFkX2Zvcmtfc2NoZWRfY2FuY2VsX2Zvcms6XFxuLS1cXG5rZXJuZWwvZm9yay5jLTI2MzQtYmFkX2ZvcmtfY2xlYW51cF9wb2xpY3k6XFxua2VybmVsL2ZvcmsuYzoyNjM1OlxcdGxvY2tkZXBfZnJlZV90YXNrKHApO1xcbmtlcm5lbC9mb3JrLmMtMjYzNi0jaWZkZWYgQ09ORklHX05VTUFcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjY0OS1cXHRwdXRfdGFza19zdGFjayhwKTtcXG5rZXJuZWwvZm9yay5jOjI2NTA6XFx0ZGVsYXllZF9mcmVlX3Rhc2socCk7XFxua2VybmVsL2ZvcmsuYy0yNjUxLWZvcmtfb3V0Olxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jPTExNDA9c3RydWN0IHJwY190YXNrICpycGNfbmV3X3Rhc2soY29uc3Qgc3RydWN0IHJwY190YXNrX3NldHVwICpzZXR1cF9kYXRhKVxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jLTExNjAtLypcXG5uZXQvc3VucnBjL3NjaGVkLmM6MTE2MTogKiBycGNfZnJlZV90YXNrIC0gcmVsZWFzZSBycGMgdGFzayBhbmQgcGVyZm9ybSBjbGVhbnVwc1xcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMTYyLSAqXFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmMtMTE3OC0gKi9cXG5uZXQvc3VucnBjL3NjaGVkLmM6MTE3OTpzdGF0aWMgdm9pZCBycGNfZnJlZV90YXNrKHN0cnVjdCBycGNfdGFzayAqdGFzaylcXG5uZXQvc3VucnBjL3NjaGVkLmMtMTE4MC17XFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmM9MTE5MD1zdGF0aWMgdm9pZCBycGNfYXN5bmNfcmVsZWFzZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmMtMTE5My1cXG5uZXQvc3VucnBjL3NjaGVkLmM6MTE5NDpcXHRycGNfZnJlZV90YXNrKGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnBjX3Rhc2ssIHUudGtfd29yaykpO1xcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMTk1LVxcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShwZmxhZ3MpO1xcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jPTEyMDk9c3RhdGljIHZvaWQgcnBjX2ZpbmFsX3B1dF90YXNrKHN0cnVjdCBycGNfdGFzayAqdGFzayxcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMjE1LVxcdH0gZWxzZVxcbm5ldC9zdW5ycGMvc2NoZWQuYzoxMjE2OlxcdFxcdHJwY19mcmVlX3Rhc2sodGFzayk7XFxubmV0L3N1bnJwYy9zY2hlZC5jLTEyMTctfVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmg9MzY9c3RydWN0IGFhX2xhYmVsICphYV9nZXRfdGFza19sYWJlbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmgtMzgtLyoqXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmg6Mzk6ICogYWFfZnJlZV90YXNrX2N0eCAtIGZyZWUgYSB0YXNrX2N0eFxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvdGFzay5oLTQwLSAqIEBjdHg6IHRhc2tfY3R4IHRvIGZyZWUgKE1BWUJFIE5VTEwpXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmgtNDEtICovXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmg6NDI6c3RhdGljIGlubGluZSB2b2lkIGFhX2ZyZWVfdGFza19jdHgoc3RydWN0IGFhX3Rhc2tfY3R4ICpjdHgpXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS90YXNrLmgtNDMte1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9MTEwPXN0YXRpYyB2b2lkIGFwcGFybW9yX3Rhc2tfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xMTItXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTEzOlxcdGFhX2ZyZWVfdGFza19jdHgodGFza19jdHgodGFzaykpO1xcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTExNC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmM9NTQ9aW50IEJQRl9QUk9HKHRhc2tfa2Z1bmNfYWNxdWlyZV9mcCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgY2xvbmVfZmxhZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMtNjctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jOjY4OlNFQyhcXFwia3JldHByb2JlL2ZyZWVfdGFza1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jLTY5LV9fZmFpbHVyZSBfX21zZyhcXFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX3Rhc2tfYWNxdWlyZSBpcyBub3QgYWxsb3dlZFxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jPTcwPWludCBCUEZfUFJPRyh0YXNrX2tmdW5jX2FjcXVpcmVfdW5zYWZlX2tyZXRwcm9iZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1NjQgY2xvbmVfZmxhZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza19rZnVuY19mYWlsdXJlLmMtODItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jOjgzOlNFQyhcXFwia3JldHByb2JlL2ZyZWVfdGFza1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfa2Z1bmNfZmFpbHVyZS5jLTg0LV9fZmFpbHVyZSBfX21zZyhcXFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX3Rhc2tfYWNxdWlyZSBpcyBub3QgYWxsb3dlZFxcXCIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ1OjMzLjIyMzI4ODU4MVoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUzODc2OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgZnJlZV90YXNrYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBga2VybmVsL2ZvcmsuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgb2YgYGZyZWVfdGFza2AuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHRlcm1pbmF0ZWQgcHJvY2VzcyBhcmUgcmVsZWFzZWQuIEknbSBwcm9iYWJseSBsb29raW5nIGF0IG1lbW9yeSBkZWFsbG9jYXRpb24sIHBvdGVudGlhbGx5IHNpZ25hbCBoYW5kbGluZyBjbGVhbnVwLCBhbmQgbWF5YmUgc29tZSByZWxhdGVkIHRhc2sgc3RydWN0dXJlIHRpZHlpbmcuIExldCdzIHNlZSBob3cgdGhleSBkbyBpdC4gSSdtIGFudGljaXBhdGluZyBhIHdlbGwtd3JpdHRlbiBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0OTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQyMDo0NTozNi4yNzcxNjgzMzJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9mb3JrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTMzLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTMzOlxcdHZvaWQgZnJlZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbiA1MzQ6XFx0e1xcbiA1MzU6XFx0I2lmZGVmIENPTkZJR19TRUNDT01QXFxuIDUzNjpcXHRcXHRXQVJOX09OX09OQ0UodHNrLVxcdTAwM2VzZWNjb21wLmZpbHRlcik7XFxuIDUzNzpcXHQjZW5kaWZcXG4gNTM4OlxcdFxcdHJlbGVhc2VfdXNlcl9jcHVzX3B0cih0c2spO1xcbiA1Mzk6XFx0XFx0c2NzX3JlbGVhc2UodHNrKTtcXG4gNTQwOlxcdFxcdHNtcF90YXNrX2lwaV9tYXNrX2ZyZWUodHNrKTtcXG4gNTQxOlxcdFxcbiA1NDI6XFx0I2lmbmRlZiBDT05GSUdfVEhSRUFEX0lORk9fSU5fVEFTS1xcbiA1NDM6XFx0XFx0LypcXG4gNTQ0OlxcdFxcdCAqIFRoZSB0YXNrIGlzIGZpbmFsbHkgZG9uZSB3aXRoIGJvdGggdGhlIHN0YWNrIGFuZCB0aHJlYWRfaW5mbyxcXG4gNTQ1OlxcdFxcdCAqIHNvIGZyZWUgYm90aC5cXG4gNTQ2OlxcdFxcdCAqL1xcbiA1NDc6XFx0XFx0cmVsZWFzZV90YXNrX3N0YWNrKHRzayk7XFxuIDU0ODpcXHQjZWxzZVxcbiA1NDk6XFx0XFx0LypcXG4gNTUwOlxcdFxcdCAqIElmIHRoZSB0YXNrIGhhZCBhIHNlcGFyYXRlIHN0YWNrIGFsbG9jYXRpb24sIGl0IHNob3VsZCBiZSBnb25lXFxuIDU1MTpcXHRcXHQgKiBieSBub3cuXFxuIDU1MjpcXHRcXHQgKi9cXG4gNTUzOlxcdFxcdFdBUk5fT05fT05DRShyZWZjb3VudF9yZWFkKFxcdTAwMjZ0c2stXFx1MDAzZXN0YWNrX3JlZmNvdW50KSAhPSAwKTtcXG4gNTU0OlxcdCNlbmRpZlxcbiA1NTU6XFx0XFx0cnRfbXV0ZXhfZGVidWdfdGFza19mcmVlKHRzayk7XFxuIDU1NjpcXHRcXHRmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHRzayk7XFxuIDU1NzpcXHRcXHRhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3QodHNrKTtcXG4gNTU4OlxcdFxcdGlmICh0c2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfS1RIUkVBRClcXG4gNTU5OlxcdFxcdFxcdGZyZWVfa3RocmVhZF9zdHJ1Y3QodHNrKTtcXG4gNTYwOlxcdFxcdGJwZl90YXNrX3N0b3JhZ2VfZnJlZSh0c2spO1xcbiA1NjE6XFx0XFx0cHV0X3Rhc2tfZXhlY19zdGF0ZShyY3VfYWNjZXNzX3BvaW50ZXIodHNrLVxcdTAwM2VleGVjX3N0YXRlKSk7XFxuIDU2MjpcXHRcXHRmcmVlX3Rhc2tfc3RydWN0KHRzayk7XFxuIDU2MzpcXHR9XFxuIDU2NDpcXHRFWFBPUlRfU1lNQk9MKGZyZWVfdGFzayk7XFxuIDU2NTpcXHRcXG4gNTY2OlxcdHZvaWQgZHVwX21tX2V4ZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG4gNTY3OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6MzYuMjc3MzkzODUyWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTMwNzgwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgVGFzayBFeGl0OiBBIFF1aWNrIENoZWNrLWluKipcblxuT2theSwgc28gYGZyZWVfdGFza2AganVzdCBoaXQgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2sodHNrKWAuICBUaGF0J3MgbXkgY3VlIHRvIHF1aWNrbHkgYW5hbHl6ZSB3aGF0J3MgaGFwcGVuaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MganVzdCBtYWtlIHN1cmUgYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tgIGlzIGRvaW5nIHdoYXQgaXQgc2hvdWxkIGJlIGRvaW5nIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByb2Nlc3MuIFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UncmUgcHJvcGVybHkgZXhpdGluZyB0aGUgdHJhY2luZyBncmFwaCBjb250ZXh0IGZvciB0aGUgdGFzayBgdHNrYCBhcyB0aGUgdGFzayBpcyBiZWluZyBmcmVlZC4gTm8gc3VycHJpc2VzLCBubyBtaXNzZWQgY2xlYW4tdXAg4oCTIGp1c3QgYSByb3V0aW5lIGNoZWNrIHRvIGVuc3VyZSB0aGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCBvbiB0YXNrIGV4aXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyMSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6MzkuMjMwNDc1NjA0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkyMzk0ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ0cmFjZV9ncmFwaF9leGl0X3Rhc2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdHJhY2UuaD0xMzQ0PWV4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KTtcXG5pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oOjEzNDU6ZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpO1xcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM0Ni1leHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfaW5pdF9pZGxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY3B1KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg9MTM2ND1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmg6MTM2NTpzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgfVxcbmluY2x1ZGUvbGludXgvZnRyYWNlLmgtMTM2Ni1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2dyYXBoX2luaXRfaWRsZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IGNwdSkgeyB9XFxuLS1cXG5rZXJuZWwvZm9yay5jPTUzMz12b2lkIGZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtNTU1LVxcdHJ0X211dGV4X2RlYnVnX3Rhc2tfZnJlZSh0c2spO1xcbmtlcm5lbC9mb3JrLmM6NTU2OlxcdGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2sodHNrKTtcXG5rZXJuZWwvZm9yay5jLTU1Ny1cXHRhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3QodHNrKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYz0xMTYwPXZvaWQgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmMtMTE3OS1cXG5rZXJuZWwvdHJhY2UvZmdyYXBoLmM6MTE4MDp2b2lkIGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbmtlcm5lbC90cmFjZS9mZ3JhcGguYy0xMTgxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6NDAuOTIyODc1NjExWiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTk5NjYyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gZnRyYWNlX2dyYXBoX2V4aXRfdGFzayoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBmdW5jdGlvbi4gTGV0J3MgaGVhZCBzdHJhaWdodCB0byBga2VybmVsL3RyYWNlL2ZncmFwaC5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgaGFuZGxlcyB0aGUgZXhpdGluZyBvZiB0YXNrcyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlci4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZHluYW1pYyB0cmFjaW5nIGluZnJhc3RydWN0dXJlLCBhbmQgaG93IGl0IGF2b2lkcyBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHBhcnRpY3VsYXJseSBpbiBoaWdoLWZyZXF1ZW5jeSB0cmFjaW5nIHNjZW5hcmlvcy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRhc2sgdGVhcmRvd24gYW5kIHRyYWNpbmcgZGF0YSBmbHVzaCBvcGVyYXRpb25zLiBJJ20gYWxzbyBjdXJpb3VzIGlmIGFueSByZWNlbnQgY2hhbmdlcyBpbiB0aGUgc2NoZWR1bGVyIG9yIHRhc2sgc3RhdGUgbWFuYWdlbWVudCBoYXZlIGltcGFjdGVkIHRoaXMgZnVuY3Rpb24gYW5kIGlmIGFueSBvcHRpbWl6YXRpb25zIGNhbiBiZSBkZXJpdmVkLiBJJ2xsIGJlIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBwYXlpbmcgYXR0ZW50aW9uIHRvIGRhdGEgc3RydWN0dXJlcyBhbmQgc2lkZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg1NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ1OjQ0LjI4Mjg0NDk1OFoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2ZncmFwaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExODA6XFx0dm9pZCBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4xMTgxOlxcdHtcXG4xMTgyOlxcdFxcdHVuc2lnbmVkIGxvbmcgKnJldF9zdGFjayA9IHQtXFx1MDAzZXJldF9zdGFjaztcXG4xMTgzOlxcdFxcbjExODQ6XFx0XFx0dC1cXHUwMDNlcmV0X3N0YWNrID0gTlVMTDtcXG4xMTg1OlxcdFxcdC8qIE5VTEwgbXVzdCBiZWNvbWUgdmlzaWJsZSB0byBJUlFzIGJlZm9yZSB3ZSBmcmVlIGl0OiAqL1xcbjExODY6XFx0XFx0YmFycmllcigpO1xcbjExODc6XFx0XFxuMTE4ODpcXHRcXHRpZiAocmV0X3N0YWNrKSB7XFxuMTE4OTpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFmZ3JhcGhfc3RhY2tfY2FjaGVwKSlcXG4xMTkwOlxcdFxcdFxcdFxcdHJldHVybjtcXG4xMTkxOlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShmZ3JhcGhfc3RhY2tfY2FjaGVwLCByZXRfc3RhY2spO1xcbjExOTI6XFx0XFx0fVxcbjExOTM6XFx0fVxcbjExOTQ6XFx0XFxuMTE5NTpcXHQjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFXFxuMTE5NjpcXHRzdGF0aWMgaW50IGZncmFwaF9waWRfZnVuYyhzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsXFxuMTE5NzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmdyYXBoX29wcyAqZ29wcyxcXG4xMTk4OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmdHJhY2VfcmVncyAqZnJlZ3MpXFxuMTE5OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDIwOjQ1OjQ0LjI4Mjk3NjgwOFoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzU5MjgzMzI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDbGFzc2ljIEtlcm5lbCBCdWcqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGRlYWwuIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHdoYXQncyBoYXBwZW5pbmcuIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrYCBmcmVlcyB0aGUgYHQtXHUwMDNlcmV0X3N0YWNrYCB1c2luZyBga21lbV9jYWNoZV9mcmVlYC4gTm93LCBpZiBgZnRyYWNlX2dyYXBoX2luaXRfdGFza2AgaGFzbid0IGJlZW4gY2FsbGVkIHlldCwgdGhlIGB0LVx1MDAzZXJldF9zdGFja2AgaXMgc3RpbGwgcG9pbnRpbmcgdG8gdGhlICpwYXJlbnQncyogYHJldF9zdGFja2AuIFNvLCBgZnRyYWNlX2dyYXBoX2V4aXRfdGFza2AgaXMgZWZmZWN0aXZlbHkgZnJlZWluZyB0aGUgcGFyZW50J3Mgc3RhY2shIEJvb20sIGNsYXNzaWMgZG91YmxlIGZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgYnVnLlxuXG5UaGUgcGFyZW50IHRhc2ssIG9ibGl2aW91c2x5LCBpcyBnb2luZyB0byBrZWVwIHVzaW5nIGl0cyBgcmV0X3N0YWNrYCwgd2hpY2ggaXMgbm93IGZyZWVkLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBLQVNBTiBleGNlbHMgYXQgZGV0ZWN0aW5nIOKAkyBhIHVzZS1hZnRlci1mcmVlIG9yIGEgZG91YmxlLWZyZWUgc2l0dWF0aW9uLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBpcyB0aGVyZSBhbHNvIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGVsZW1lbnQgaGVyZT8gTm8sIG5vdCByZWFsbHkuIFRoaXMgaW52b2x2ZXMgYSAqY29waWVkKiBwb2ludGVyIHRoYXQgc2hvdWxkJ3ZlIGJlZW4gc2V0IHRvIGBOVUxMYCBidXQgd2Fzbid0LCB3aGljaCBsZWFkcyB0byB0aGUgZG91YmxlIGZyZWUgb3IgVUFGLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJbiB0aGlzIGNhc2UsIHRoZSBtZW1vcnkgKmlzKiBpbml0aWFsaXplZCwgaXQncyB0aGUgcGFyZW50J3MgcG9pbnRlci4gVGhlIHByb2JsZW0gaXMgZnVuZGFtZW50YWxseSBpbmNvcnJlY3QgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGhlcmUuXG5cblRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgbGV0J3MgZG91YmxlLWNoZWNrLiBgZHVwX3Rhc2tfc3RydWN0YCBjb3BpZXMgdGhlICplbnRpcmUqIGB0YXNrX3N0cnVjdGAgZnJvbSB0aGUgcGFyZW50LiBTbywgYWxsIHRoZSBmaWVsZHMgYXJlIGluaXRpYWxpemVkIHdpdGggdGhlIHBhcmVudCdzIHZhbHVlcy4gVGhlbiwgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2tgIGNvbWVzIGFsb25nIGFuZCBzZXRzIGB0LVx1MDAzZXJldF9zdGFjayA9IE5VTExgIGFuZCBzbyBvbi4gQnV0IGlmIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrYCAqaXNuJ3QqIGNhbGxlZCwgYHQtXHUwMDNlcmV0X3N0YWNrYCBzdGF5cyBhcyB0aGUgcGFyZW50J3MgcG9pbnRlci4gV2hlbiBgZnJlZV90YXNrYCBnZXRzIGNhbGxlZCBvbiB0aGUgY2hpbGQgKGR1ZSB0byBhbiBlcnJvciBpbiBgY29weV9wcm9jZXNzYCksIGl0IGVuZHMgdXAgZnJlZWluZyBgdC1cdTAwM2VyZXRfc3RhY2tgLiBUaGlzIGZyZWVzIHRoZSAqcGFyZW50J3MqIGByZXRfc3RhY2tgLiBUaGUgcGFyZW50IGlzIHN0aWxsIHJ1bm5pbmcgYW5kIHdpbGwgYWNjZXNzIGl0cyBub3ctZnJlZWQgYHJldF9zdGFja2AuIFVzZS1hZnRlci1mcmVlLCBLQVNBTiBjYXRjaGVzIGl0IGltbWVkaWF0ZWx5LiBBbHNvLCBpZiB0aGUgcGFyZW50IGV4aXRzLCBpdCB3aWxsIHRyeSB0byBmcmVlIGl0cyBgcmV0X3N0YWNrYCBhZ2FpbiwgY2F1c2luZyBhIGRvdWJsZSBmcmVlLiBLQVNBTiB3aWxsIGRldGVjdCB0aGlzIGFzIHdlbGwuXG5cblRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrIGhhcHBlbmluZyBoZXJlLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UuXG5cbkxldCBtZSBsYXkgb3V0IHRoZSByZWFzb25pbmcgaW4gYSBzdHJ1Y3R1cmVkIHdheTogVGhlIHBhdGNoIG1vdmVzIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKHApYCBlYXJsaWVyIGluIGBjb3B5X3Byb2Nlc3MoKWAgdG8gcHJldmVudCBhIGJ1ZyB3aGVyZSBhbiBlcnJvciBwYXRoIGZyZWVzIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYC4gU3BlY2lmaWNhbGx5LCBgZHVwX3Rhc2tfc3RydWN0KClgIGNvcGllcyB0aGUgcGFyZW50J3MgYHRhc2tfc3RydWN0YCwgaW5jbHVkaW5nIHRoZSBgcmV0X3N0YWNrYCBwb2ludGVyLiBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhpcyBwb2ludGVyIChgdC1cdTAwM2VyZXRfc3RhY2sgPSBOVUxMYCkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlmIHRyYWNpbmcgaXMgYWN0aXZlLiBJZiBhbiBlcnJvciBvY2N1cnMgaW4gYGNvcHlfcHJvY2VzcygpYCBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCAoZS5nLiwgYGJhZF9mb3JrX2ZyZWVgKSB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV90YXNrKClgLCB3aGljaCBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAgd2lsbCBmcmVlIGB0LVx1MDAzZXJldF9zdGFja2AuIFNpbmNlIGl0IHdhcyBuZXZlciBjbGVhcmVkLCBpdCBmcmVlcyB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AuIFRoaXMgcmVzdWx0cyBpbiBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCBjb250aW51ZXMgdG8gdXNlIGl0cyBgcmV0X3N0YWNrYCwgb3IgYSBkb3VibGUgZnJlZSB3aGVuIHRoZSBwYXJlbnQgZXhpdHMuIEJvdGggdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZSBmcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MTUsIk91dHB1dFRva2VucyI6MzA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMjA6NDU6NTcuODc1ODE0MjUyWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBgZnRyYWNlX2dyYXBoX2luaXRfdGFzayhwKWAgZWFybGllciBpbiBgY29weV9wcm9jZXNzKClgIHRvIHByZXZlbnQgYSBidWcgd2hlcmUgYW4gZXJyb3IgcGF0aCBpbmNvcnJlY3RseSBmcmVlcyB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AuIFNwZWNpZmljYWxseSwgYGR1cF90YXNrX3N0cnVjdCgpYCBjb3BpZXMgdGhlIHBhcmVudCdzIGB0YXNrX3N0cnVjdGAsIGluY2x1ZGluZyB0aGUgYHJldF9zdGFja2AgcG9pbnRlci4gYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIHRoaXMgcG9pbnRlciAoYHQtXFx1MDAzZXJldF9zdGFjayA9IE5VTExgKSBhbmQgYWxsb2NhdGluZyBhIG5ldyBvbmUgaWYgdHJhY2luZyBpcyBhY3RpdmUuIElmIGFuIGVycm9yIG9jY3VycyBpbiBgY29weV9wcm9jZXNzKClgIGJlZm9yZSBgZnRyYWNlX2dyYXBoX2luaXRfdGFzaygpYCBpcyBjYWxsZWQsIHRoZSBlcnJvciBwYXRoIHdpbGwgZXZlbnR1YWxseSBjYWxsIGBmcmVlX3Rhc2soKWAsIHdoaWNoIGNhbGxzIGBmdHJhY2VfZ3JhcGhfZXhpdF90YXNrKClgLiBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYCB3aWxsIHRoZW4gZnJlZSBgdC1cXHUwMDNlcmV0X3N0YWNrYC4gU2luY2UgaXQgd2FzIG5ldmVyIGNsZWFyZWQsIGl0IGZyZWVzIHRoZSBwYXJlbnQncyBgcmV0X3N0YWNrYC4gVGhpcyByZXN1bHRzIGluIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGUgcGFyZW50IGNvbnRpbnVlcyB0byB1c2UgaXRzIGByZXRfc3RhY2tgLCBvciBhIGRvdWJsZSBmcmVlIHdoZW4gdGhlIHBhcmVudCBleGl0cy5cXG5cXG5Cb3RoIHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUgZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrIGludm9sdmVkIGluIHRoaXMgYnVnLCBhcyB0aGUgcG9pbnRlciBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgKGNvcGllZCBmcm9tIHRoZSBwYXJlbnQpLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2socClgIGVhcmxpZXIgaW4gYGNvcHlfcHJvY2VzcygpYCB0byBwcmV2ZW50IGEgYnVnIHdoZXJlIGFuIGVycm9yIHBhdGggaW5jb3JyZWN0bHkgZnJlZXMgdGhlIHBhcmVudCdzIGByZXRfc3RhY2tgLiBTcGVjaWZpY2FsbHksIGBkdXBfdGFza19zdHJ1Y3QoKWAgY29waWVzIHRoZSBwYXJlbnQncyBgdGFza19zdHJ1Y3RgLCBpbmNsdWRpbmcgdGhlIGByZXRfc3RhY2tgIHBvaW50ZXIuIGBmdHJhY2VfZ3JhcGhfaW5pdF90YXNrKClgIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyB0aGlzIHBvaW50ZXIgKGB0LVxcdTAwM2VyZXRfc3RhY2sgPSBOVUxMYCkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlmIHRyYWNpbmcgaXMgYWN0aXZlLiBJZiBhbiBlcnJvciBvY2N1cnMgaW4gYGNvcHlfcHJvY2VzcygpYCBiZWZvcmUgYGZ0cmFjZV9ncmFwaF9pbml0X3Rhc2soKWAgaXMgY2FsbGVkLCB0aGUgZXJyb3IgcGF0aCB3aWxsIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV90YXNrKClgLCB3aGljaCBjYWxscyBgZnRyYWNlX2dyYXBoX2V4aXRfdGFzaygpYC4gYGZ0cmFjZV9ncmFwaF9leGl0X3Rhc2soKWAgd2lsbCB0aGVuIGZyZWUgYHQtXFx1MDAzZXJldF9zdGFja2AuIFNpbmNlIGl0IHdhcyBuZXZlciBjbGVhcmVkLCBpdCBmcmVlcyB0aGUgcGFyZW50J3MgYHJldF9zdGFja2AuIFRoaXMgcmVzdWx0cyBpbiBhIHVzZS1hZnRlci1mcmVlIHdoZW4gdGhlIHBhcmVudCBjb250aW51ZXMgdG8gdXNlIGl0cyBgcmV0X3N0YWNrYCwgb3IgYSBkb3VibGUgZnJlZSB3aGVuIHRoZSBwYXJlbnQgZXhpdHMuXFxuXFxuQm90aCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlIGZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayBpbnZvbHZlZCBpbiB0aGlzIGJ1ZywgYXMgdGhlIHBvaW50ZXIgaXRzZWxmIGlzIGluaXRpYWxpemVkIChjb3BpZWQgZnJvbSB0aGUgcGFyZW50KS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowppjjg[1] Phase: Succeeded StartedAt: 2026-08-22 20:46:09 +0000 UTC FinishedAt: 2026-08-22 20:46:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 20:46:09 +0000 UTC FinishedAt: 2026-08-22 20:46:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2] Phase: Succeeded StartedAt: 2026-08-22 20:46:09 +0000 UTC FinishedAt: 2026-08-23 00:27:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-22 20:46:09 +0000 UTC FinishedAt: 2026-08-23 00:27:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-22 20:46:09 +0000 UTC FinishedAt: 2026-08-22 20:46:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-22 20:46:09 +0000 UTC FinishedAt: 2026-08-22 20:46:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowppjjg/series-workflowppjjg-convert-artifact-1140270438/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-22 20:46:19 +0000 UTC FinishedAt: 2026-08-22 21:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-22 20:46:19 +0000 UTC FinishedAt: 2026-08-22 21:03:41 +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:*b33a0b1d-1c4d-472c-a801-3eacfbb69706,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-workflowppjjg/series-workflowppjjg-convert-artifact-1140270438/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": "8942852a-b8b6-41bb-9843-6c5db4166d18", "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-workflowppjjg/series-workflowppjjg-build-action-469222652/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-22 20:46:19 +0000 UTC FinishedAt: 2026-08-22 21:03:31 +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:*b33a0b1d-1c4d-472c-a801-3eacfbb69706,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-workflowppjjg/series-workflowppjjg-convert-artifact-1140270438/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": "8942852a-b8b6-41bb-9843-6c5db4166d18", "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-workflowppjjg/series-workflowppjjg-build-action-469222652/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-22 21:03:41 +0000 UTC FinishedAt: 2026-08-22 21:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-22 21:03:41 +0000 UTC FinishedAt: 2026-08-22 21:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-22 21:03:41 +0000 UTC FinishedAt: 2026-08-22 21:03:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-22 21:03:41 +0000 UTC FinishedAt: 2026-08-22 21:03:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowppjjg/series-workflowppjjg-convert-artifact-4045561785/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-22 21:03:51 +0000 UTC FinishedAt: 2026-08-22 21:05:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-22 21:03:51 +0000 UTC FinishedAt: 2026-08-22 21:05:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8942852a-b8b6-41bb-9843-6c5db4166d18,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-workflowppjjg/series-workflowppjjg-build-action-469222652/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-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-22 21:05:47 +0000 UTC FinishedAt: 2026-08-22 21:05:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-22 21:05:47 +0000 UTC FinishedAt: 2026-08-22 21:05:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-22 21:05:47 +0000 UTC FinishedAt: 2026-08-22 21:22:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-22 21:05:47 +0000 UTC FinishedAt: 2026-08-22 21:22:53 +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:*b33a0b1d-1c4d-472c-a801-3eacfbb69706,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-workflowppjjg/series-workflowppjjg-convert-artifact-4045561785/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": "0c09d24a-1d5f-4728-9001-b610d44313bb", "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-workflowppjjg/series-workflowppjjg-build-action-3051239573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-22 21:05:47 +0000 UTC FinishedAt: 2026-08-22 21:22:43 +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:*b33a0b1d-1c4d-472c-a801-3eacfbb69706,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-workflowppjjg/series-workflowppjjg-convert-artifact-4045561785/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": "0c09d24a-1d5f-4728-9001-b610d44313bb", "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-workflowppjjg/series-workflowppjjg-build-action-3051239573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-22 21:22:53 +0000 UTC FinishedAt: 2026-08-22 21:22:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-22 21:22:53 +0000 UTC FinishedAt: 2026-08-22 21:22:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-22 21:22:53 +0000 UTC FinishedAt: 2026-08-22 21:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-22 21:22:53 +0000 UTC FinishedAt: 2026-08-22 21:24:51 +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:*0c09d24a-1d5f-4728-9001-b610d44313bb,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-workflowppjjg/series-workflowppjjg-build-action-3051239573/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-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-22 21:25:01 +0000 UTC FinishedAt: 2026-08-23 00:27:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-22 21:25:01 +0000 UTC FinishedAt: 2026-08-23 00:27:17 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},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:*8942852a-b8b6-41bb-9843-6c5db4166d18,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c09d24a-1d5f-4728-9001-b610d44313bb,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-workflowppjjg/series-workflowppjjg-build-action-469222652/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-workflowppjjg/series-workflowppjjg-build-action-3051239573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-22 21:25:01 +0000 UTC FinishedAt: 2026-08-22 21:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-22 21:25:01 +0000 UTC FinishedAt: 2026-08-22 21:25:05 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},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-workflowppjjg/series-workflowppjjg-convert-artifact-2230747950/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-22 21:25:01 +0000 UTC FinishedAt: 2026-08-22 21:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-22 21:25:01 +0000 UTC FinishedAt: 2026-08-22 21:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-22 21:25:01 +0000 UTC FinishedAt: 2026-08-22 21:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-22 21:25:11 +0000 UTC FinishedAt: 2026-08-23 00:27:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowppjjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kernel_clone"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["FTRACE","FUNCTION_TRACER","FUNCTION_GRAPH_TRACER"],"series_id":"e9abe883-ce50-4623-9ce3-435a48f5fbe1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-22 21:25:11 +0000 UTC FinishedAt: 2026-08-23 00:27:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8942852a-b8b6-41bb-9843-6c5db4166d18,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c09d24a-1d5f-4728-9001-b610d44313bb,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-workflowppjjg/series-workflowppjjg-build-action-469222652/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-workflowppjjg/series-workflowppjjg-build-action-3051239573/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-workflowppjjg/series-workflowppjjg-convert-artifact-2230747950/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,}