Name: series-workflow58r8x Phase: Succeeded StartedAt: 2026-06-19 21:07:40 +0000 UTC FinishedAt: 2026-06-20 01:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[0] Phase: Succeeded StartedAt: 2026-06-19 21:07:40 +0000 UTC FinishedAt: 2026-06-19 21:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[0].run-triage Phase: Succeeded StartedAt: 2026-06-19 21:07:40 +0000 UTC FinishedAt: 2026-06-19 21:15:06 +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": "cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_LRU_SORT", "DAMON_RECLAIM", "DAMON_VADDR", "DAMON_PADDR", "DAMON_STAT" ], "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": "cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_LRU_SORT", "DAMON_RECLAIM", "DAMON_VADDR", "DAMON_PADDR", "DAMON_STAT" ], "series_id": "dc17a10d-920f-489a-896c-5fe65670f292" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_set_attrs", "damon_update_region_access_rate", "damon_hot_score", "damon_lru_sort_apply_parameters", "damon_reclaim_apply_parameters" ], "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+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1RBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NldF9hdHRycyYjMzQ7LAogICAgJiMzNDtkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlJiMzNDssCiAgICAmIzM0O2RhbW9uX2hvdF9zY29yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkaXZpc2lvbiBieSB6ZXJvIGluIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgIGJ5IGVuc3VyaW5nIHRoZSBkaXZpc29yIGBzYW1wbGVfaW50ZXJ2YWxgIGlzIGF0IGxlYXN0IDEuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBjb3JlIERBTU9OIGxvZ2ljLCBzdWNoIGFzIHVwZGF0aW5nIHJlZ2lvbiBhY2Nlc3MgcmF0ZXMgYW5kIGNhbGN1bGF0aW5nIGhvdCBzY29yZXMuIEZ1enppbmcgaXMgbmVlZGVkIHRvIHZlcmlmeSB0aGF0IHRoZSBmaXggY29ycmVjdGx5IHByZXZlbnRzIGNyYXNoZXMgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBpbiBEQU1PTiYjMzk7cyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlmYTQ1OTAwYzBhM2E1NzBiYmFmMjY2MDcwYTg4ZDljMWExNWQ3YzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAxOSAyMToxMzoxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDZmN2VkYjM1OTBlZjk3Li44M2I0M2Q4ZmZlZjM4YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtMTA2NSw4ICYjNDM7MTA2NSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhbW9uX21heF9ucl9hY2Nlc3Nlcyhjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGF0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcbiYjNDM7XG4gXHQvKiB7YWdncixzYW1wbGV9X2ludGVydmFsIGFyZSB1bnNpZ25lZCBsb25nLCBoZW5jZSBjb3VsZCBvdmVyZmxvdyAqL1xuLVx0cmV0dXJuIG1pbihhdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gYXR0cnMtXHUwMDNlc2FtcGxlX2ludGVydmFsLFxuJiM0MztcdHJldHVybiBtaW4oYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbCxcbiBcdFx0XHQodW5zaWduZWQgbG9uZylVSU5UX01BWCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1RBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NldF9hdHRycyYjMzQ7LAogICAgJiMzNDtkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlJiMzNDssCiAgICAmIzM0O2RhbW9uX2hvdF9zY29yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkaXZpc2lvbiBieSB6ZXJvIGluIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgIGJ5IGVuc3VyaW5nIHRoZSBkaXZpc29yIGBzYW1wbGVfaW50ZXJ2YWxgIGlzIGF0IGxlYXN0IDEuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBjb3JlIERBTU9OIGxvZ2ljLCBzdWNoIGFzIHVwZGF0aW5nIHJlZ2lvbiBhY2Nlc3MgcmF0ZXMgYW5kIGNhbGN1bGF0aW5nIGhvdCBzY29yZXMuIEZ1enppbmcgaXMgbmVlZGVkIHRvIHZlcmlmeSB0aGF0IHRoZSBmaXggY29ycmVjdGx5IHByZXZlbnRzIGNyYXNoZXMgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBpbiBEQU1PTiYjMzk7cyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWZhNDU5MDBjMGEzYTU3MGJiYWYyNjYwNzBhODhkOWMxYTE1ZDdjNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDE5IDIxOjEzOjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDZmN2VkYjM1OTBlZjk3Li44M2I0M2Q4ZmZlZjM4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaApAQCAtMTA2NSw4ICYjNDM7MTA2NSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoY29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycykKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBhdHRycy0mZ3Q7c2FtcGxlX2ludGVydmFsID8gOiAxOwomIzQzOwogCS8qIHthZ2dyLHNhbXBsZX1faW50ZXJ2YWwgYXJlIHVuc2lnbmVkIGxvbmcsIGhlbmNlIGNvdWxkIG92ZXJmbG93ICovCi0JcmV0dXJuIG1pbihhdHRycy0mZ3Q7YWdncl9pbnRlcnZhbCAvIGF0dHJzLSZndDtzYW1wbGVfaW50ZXJ2YWwsCiYjNDM7CXJldHVybiBtaW4oYXR0cnMtJmd0O2FnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWwsCiAJCQkodW5zaWduZWQgbG9uZylVSU5UX01BWCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgbW9kaWZpZWQgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AuIEFoLCByaWdodCwgdGhlIGlzc3VlIGhlcmUgaXMgdGhlIHBvdGVudGlhbCBmb3IgYSBkaXZpc2lvbiBieSB6ZXJvIGlmIGBhdHRycy0mZ3Q7c2FtcGxlX2ludGVydmFsYCBpcyB6ZXJvLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyB0cmFwISBTbWFydCBtb3ZlIHRvIGNhdGNoIHRoYXQuCgpUaGUgc29sdXRpb24gaXMgdG8gcmVwbGFjZSB0aGUgb3JpZ2luYWwgZGl2aXNpb24gYGF0dHJzLSZndDthZ2dyX2ludGVydmFsIC8gYXR0cnMtJmd0O3NhbXBsZV9pbnRlcnZhbGAgd2l0aCBgYXR0cnMtJmd0O2FnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWxgLCB3aGVyZSBgc2FtcGxlX2ludGVydmFsYCBpcyBhIHRlcm5hcnkgZXhwcmVzc2lvbiBzZXR0aW5nIGl0IHRvIGBhdHRycy0mZ3Q7c2FtcGxlX2ludGVydmFsID8gOiAxYC4gSW4gb3RoZXIgd29yZHMsIGlmIGBhdHRycy0mZ3Q7c2FtcGxlX2ludGVydmFsYCBpcyB6ZXJvLCB3ZSYjMzk7cmUgZWZmZWN0aXZlbHkgZGVmYXVsdGluZyB0byAxLCBwcmV2ZW50aW5nIHRoZSBkaXZpc2lvbi1ieS16ZXJvIGVycm9yLiBNYWtlcyBwZXJmZWN0IHNlbnNlLgoKTm93LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgIGlzIGFjdHVhbGx5ICp1c2VkKi4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIHRoZSBpbXBhY3QgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhpcyBmaXguIEdvdHRhIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUsIHlvdSBrbm93PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX21heF9ucl9hY2Nlc3NlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2MT1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY1LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA2Ny17XG4tLVxubW0vZGFtb24vY29yZS5jPTc4Mj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy03ODQte1xubW0vZGFtb24vY29yZS5jOjc4NTpcdHJldHVybiBhY2Nlc3Nlc19icCAqIGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycykgLyAxMDAwMDtcbm1tL2RhbW9uL2NvcmUuYy03ODYtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz03OTU9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzk3LXtcbm1tL2RhbW9uL2NvcmUuYzo3OTg6XHRyZXR1cm4gbXVsdF9mcmFjKG5yX2FjY2Vzc2VzLCAxMDAwMCwgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSk7XG5tbS9kYW1vbi9jb3JlLmMtNzk5LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzc2Nz12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc3Ni1cdGlmIChhdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwpXG5tbS9kYW1vbi9jb3JlLmM6Mzc3NzpcdFx0bGVuX3dpbmRvdyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMzc3OC1cdHItXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSBkYW1vbl9tb3Zpbmdfc3VtKHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzM9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMTItXHRlcnIgPSAtRU5PTUVNO1xubW0vZGFtb24vbHJ1X3NvcnQuYzozMTM6XHRob3RfdGhyZXMgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXHUwMDI2YXR0cnMpICpcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzE0LVx0XHRob3RfdGhyZXNfYWNjZXNzX2ZyZXEgLyAxMDAwO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xMDY9aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMTYtXHRmcmVxX3N1YnNjb3JlID0gci1cdTAwM2Vucl9hY2Nlc3NlcyAqIERBTU9OX01BWF9TVUJTQ09SRSAvXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTE3Olx0XHRkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXHUwMDI2Yy1cdTAwM2VhdHRycyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AuIEludGVyZXN0aW5nLiBUaGlzIGZ1bmN0aW9uIGFwcGVhcnMgdG8gYmUgdXNlZCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlcyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW06IHNwZWNpZmljYWxseSwgYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9scnVfc29ydC5jYCwgYW5kIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLiBUaGF0IHBsYWNlcyBpdCBmaXJtbHkgd2l0aGluIERBTU9OJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCYjMzk7cyBpdHMgdmlzaWJpbGl0eT8gSXMgaXQgb25seSB1c2VkIGludGVybmFsbHksIG9yIGlzIGl0IGV4cG9zZWQ/IENvbnNpZGVyaW5nIERBTU9OJiMzOTtzIHJvbGUgYXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzIG9yIGRlYnVnZnMsIEkmIzM5O2Qgc2F5IGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gbm93IGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiBpdHMgYmVoYXZpb3Igd2l0aGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgREFNT04gQ29uZmlndXJhdGlvbjogQSBUYXJnZXRlZCBBcHByb2FjaCoqCgpPa2F5LCBzbyB0aGUgY29uZmlnIGluIHF1ZXN0aW9uIGhlcmUgaXMgYERBTU9OYC4gTG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgZGl2aXNpb24tYnktemVybywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCByZWFzb24gdG8gcGF5IGF0dGVudGlvbi4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IGlzIGZ1enppbmcgdGhpcyB3b3J0aHdoaWxlPyBBYnNvbHV0ZWx5ISBGaXhpbmcgYSBidWcgaW4gY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gREFNT04sIGlzIGRlZmluaXRlbHkgZnV6emluZy13b3J0aHkuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczogd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUgcHJpbWUgdGFyZ2V0cz8gSSBzZWUgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AsIGJ1dCB0aGF0JiMzOTtzIGlubGluZSwgc28gaXQmIzM5O3MgcHJvYmFibHkgbm90IHRoZSBkaXJlY3QgcG9pbnQgb2YgYXR0YWNrLiBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyAqY2FsbGluZyogaXQuIFNvLCB0aGF0IG5hcnJvd3MgaXQgZG93biB0byBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgLCBgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnBgLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGBkYW1vbl9ob3Rfc2NvcmVgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGxpa2VseSBjdWxwcml0cywgYXQgbGVhc3QgaW5pdGlhbGx5LgoKQnV0IEkmIzM5O20gbm90IGdvaW5nIHRvIHN0b3AgdGhlcmUuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwb3RlbnRpYWwgY2FsbCBzaXRlcy4uLiB0aG9yb3VnaG5lc3MgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX21heF9ucl9hY2Nlc3NlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2MT1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY1LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA2Ny17XG4tLVxubW0vZGFtb24vY29yZS5jPTc4Mj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy03ODQte1xubW0vZGFtb24vY29yZS5jOjc4NTpcdHJldHVybiBhY2Nlc3Nlc19icCAqIGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycykgLyAxMDAwMDtcbm1tL2RhbW9uL2NvcmUuYy03ODYtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz03OTU9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzk3LXtcbm1tL2RhbW9uL2NvcmUuYzo3OTg6XHRyZXR1cm4gbXVsdF9mcmFjKG5yX2FjY2Vzc2VzLCAxMDAwMCwgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSk7XG5tbS9kYW1vbi9jb3JlLmMtNzk5LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzc2Nz12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc3Ni1cdGlmIChhdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwpXG5tbS9kYW1vbi9jb3JlLmM6Mzc3NzpcdFx0bGVuX3dpbmRvdyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMzc3OC1cdHItXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSBkYW1vbl9tb3Zpbmdfc3VtKHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzM9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMTItXHRlcnIgPSAtRU5PTUVNO1xubW0vZGFtb24vbHJ1X3NvcnQuYzozMTM6XHRob3RfdGhyZXMgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXHUwMDI2YXR0cnMpICpcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzE0LVx0XHRob3RfdGhyZXNfYWNjZXNzX2ZyZXEgLyAxMDAwO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xMDY9aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMTYtXHRmcmVxX3N1YnNjb3JlID0gci1cdTAwM2Vucl9hY2Nlc3NlcyAqIERBTU9OX01BWF9TVUJTQ09SRSAvXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTE3Olx0XHRkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXHUwMDI2Yy1cdTAwM2VhdHRycyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBDYWxsZXJzIGFuZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGNhbGxlcnMgcmV2ZWFscyBhIGNvcmUgc2V0OiBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgLCBgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnBgLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGBkYW1vbl9ob3Rfc2NvcmVgLiBJbW1lZGlhdGVseSwgSSBzZWUgc29tZSBwYXR0ZXJucy4gYGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzYCBhbmQgYGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwYCBzZWVtIHRvIGJlIHN0YXRpYyBjb21wb25lbnRzLCBwcm9iYWJseSBpbnRlcm5hbCBjb252ZXJzaW9uIGZ1bmN0aW9ucy4gYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgIGlzIGxpa2VseSBhbiBleHBvcnRlZCBmdW5jdGlvbiwgZ2xvYmFsIGluIHNjb3BlIGZvciBvdGhlciBtb2R1bGVzIHRvIHVzZS4gYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgIGFwcGVhcnMgdG8gYmUgc3RhdGljIHdpdGhpbiB0aGUgREFNT04gY29udGV4dCBhbmQgdGhlbiBgZGFtb25faG90X3Njb3JlYCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24uIEkga25vdyBJJiMzOTtsbCBiZSBsb29raW5nIGF0IGhvdyB1c2Vyc3BhY2UgaW50ZXJhY3RzLiBJIHNlZSB0aGF0IGBEQU1PTl9MUlVfU09SVGAgaXMgaW1wb3J0YW50IGZvciBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AuIE15IGluc3RpbmN0cyBzYXkgdGhhdCBgREFNT05fU1lTRlNgIGlzIHRoZSBrZXkgZm9yIGNvbmZpZ3VyaW5nIERBTU9OIGZyb20gdXNlcnNwYWNlLCB3aGljaCB3b3VsZCBtYWtlIHNlbnNlLiBBbmQsIHRoaW5raW5nIGFib3V0IGhvdyB0aGluZ3MgYXJlIHVzZWQsIGBEQU1PTl9WQUREUmAgYW5kIGBEQU1PTl9QQUREUmAgcmVwcmVzZW50IHRoZSBvcGVyYXRpb25zIHRoZW1zZWx2ZXMuIEkgbmVlZCB0byB0YWtlIHRoZXNlIGFsbCBpbnRvIGNvbnNpZGVyYXRpb24uCgpUaGVyZWZvcmUsIGZvciB0aGlzIHBhcnRpY3VsYXIgdXNlIGNhc2UsIEkmIzM5O2xsIGRlZmluaXRlbHkgYmUgaW5jbHVkaW5nIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fTFJVX1NPUlRgIHdoZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGV0YWlscy4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgc2FtcGxlX2ludGVydmFsYCBpcyBiZWluZyBzZXQuIEkgc2hvdWxkIGxvb2sgYXQgYGRhbW9uX3NldF9hdHRyc2Agb3Igc2ltaWxhciBmdW5jdGlvbnMsIGFzIHRoYXQgd291bGQgYmUgYSBsb2dpY2FsIHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zZXRfYXR0cnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTgwND1zdHJ1Y3QgZGFtb25fYXR0cnMge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC04MTMtXHQgKiBAYWdncl9pbnRlcnZhbCB0byBAc2FtcGxlX2ludGVydmFsIHJhdGlvLlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjgxNDpcdCAqIENvcmUtZXh0ZXJuYWwgY29tcG9uZW50cyBjYWxsIGRhbW9uX3NldF9hdHRycygpIHdpdGggXHUwMDI2ZGFtb25fYXR0cnNcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MTU6XHQgKiB0aGF0IHRoaXMgZmllbGQgaXMgdW5zZXQuICBJbiB0aGUgY2FzZSwgZGFtb25fc2V0X2F0dHJzKCkgc2V0cyB0aGlzXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODE2LVx0ICogZmllbGQgb2YgcmVzdWx0aW5nIFx1MDAyNmRhbW9uX2F0dHJzLiAgQ29yZS1pbnRlcm5hbCBjb21wb25lbnRzIHN1Y2ggYXNcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MTc6XHQgKiBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKCkgY2FsbHMgZGFtb25fc2V0X2F0dHJzKCkgd2l0aCBcdTAwMjZkYW1vbl9hdHRyc1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjgxODpcdCAqIHRoYXQgdGhpcyBmaWVsZCBpcyBzZXQuICBJbiB0aGUgY2FzZSwgZGFtb25fc2V0X2F0dHJzKCkganVzdCBrZWVwXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODE5LVx0ICogaXQuXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNTE9dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNTI6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTMtdm9pZCBkYW1vbl9zZXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vY29yZS5jPTg2ND1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy04NzktLyoqXG5tbS9kYW1vbi9jb3JlLmM6ODgwOiAqIGRhbW9uX3NldF9hdHRycygpIC0gU2V0IGF0dHJpYnV0ZXMgZm9yIHRoZSBtb25pdG9yaW5nLlxubW0vZGFtb24vY29yZS5jLTg4MS0gKiBAY3R4Olx0XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODk4LSAqL1xubW0vZGFtb24vY29yZS5jOjg5OTppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbm1tL2RhbW9uL2NvcmUuYy05MDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTczPWludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjAzLVx0ICogc2NoZW1lcyBhbmQgdGFyZ2V0cyBzaG91bGQgYmUgdXBkYXRlZCBmaXJzdCwgc2luY2Vcbm1tL2RhbW9uL2NvcmUuYzoxNjA0Olx0ICogMS4gZGFtb25fc2V0X2F0dHJzKCkgdXBkYXRlcyBtb25pdG9yaW5nIHJlc3VsdHMgb2YgdGFyZ2V0cyBhbmRcbm1tL2RhbW9uL2NvcmUuYy0xNjA1LVx0ICogbmV4dF9hcHBseV9zaXMgb2Ygc2NoZW1lcywgYW5kXG4tLVxubW0vZGFtb24vY29yZS5jLTE2MDktXHRpZiAoIWRhbW9uX2F0dHJzX2VxdWFscyhcdTAwMjZkc3QtXHUwMDNlYXR0cnMsIFx1MDAyNnNyYy1cdTAwM2VhdHRycykpIHtcbm1tL2RhbW9uL2NvcmUuYzoxNjEwOlx0XHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMoZHN0LCBcdTAwMjZzcmMtXHUwMDNlYXR0cnMpO1xubW0vZGFtb24vY29yZS5jLTE2MTEtXHRcdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjA0ND1zdGF0aWMgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwNjItXHR0cmFjZV9kYW1vbl9tb25pdG9yX2ludGVydmFsc190dW5lKG5ld19hdHRycy5zYW1wbGVfaW50ZXJ2YWwpO1xubW0vZGFtb24vY29yZS5jOjIwNjM6XHRkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2bmV3X2F0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0yMDY0LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQ3OT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzUwOC1cdFx0ICogYmUgY2hhbmdlZCBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgUmVhZCB0aGUgdmFsdWVzIGhlcmUsIGFuZFxubW0vZGFtb24vY29yZS5jOjM1MDk6XHRcdCAqIHVzZSB0aG9zZSBmb3IgdGhpcyBpdGVyYXRpb24uICBUaGF0IGlzLCBkYW1vbl9zZXRfYXR0cnMoKVxubW0vZGFtb24vY29yZS5jLTM1MTAtXHRcdCAqIHVwZGF0ZWQgbmV3IHZhbHVlcyBhcmUgcmVzcGVjdGVkIGZyb20gbmV4dCBpdGVyYXRpb24uXG4tLVxubW0vZGFtb24vY29yZS5jLTM1NjktXHRcdFx0XHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXG5tbS9kYW1vbi9jb3JlLmM6MzU3MDpcdFx0XHRcdCAqIGRhbW9uX3NldF9hdHRycygpIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZyb21cbm1tL2RhbW9uL2NvcmUuYy0zNTcxLVx0XHRcdFx0ICoga2RhbW9uZF90dW5lX2ludGVydmFsKCkgbWF5IHdyb25nbHkgdGhpbmtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzc2Nz12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc3My1cdCAqIHNhbXBsZV9pbnRlcnZhbCBjYW4gYmUgemVybywgYnV0IGNhbm5vdCBiZSBsYXJnZXIgdGhhblxubW0vZGFtb24vY29yZS5jOjM3NzQ6XHQgKiBhZ2dyX2ludGVydmFsLCBvd2luZyB0byB2YWxpZGF0aW9uIG9mIGRhbW9uX3NldF9hdHRycygpLlxubW0vZGFtb24vY29yZS5jLTM3NzUtXHQgKi9cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3Mz1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTMwNy1cdH1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MzA4Olx0ZXJyID0gZGFtb25fc2V0X2F0dHJzKHBhcmFtX2N0eCwgXHUwMDI2YXR0cnMpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zMDktXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTY9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjMxLVx0fVxubW0vZGFtb24vcmVjbGFpbS5jOjIzMjpcdGVyciA9IGRhbW9uX3NldF9hdHRycyhwYXJhbV9jdHgsIFx1MDAyNmF0dHJzKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzMtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTE3NS1cdH07XG5tbS9kYW1vbi9zdGF0LmM6MTc2Olx0aWYgKGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKSlcbm1tL2RhbW9uL3N0YXQuYy0xNzctXHRcdGdvdG8gZnJlZV9vdXQ7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xODc5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE4OTgtXHR9O1xubW0vZGFtb24vc3lzZnMuYzoxODk5Olx0cmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTkwMC19XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTU4Mz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU5My1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1OTQ6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNnZhbGlkX2F0dHJzKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTk1LVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01OTctXHRpbnZhbGlkX2F0dHJzLm1pbl9ucl9yZWdpb25zID0gMTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1OTg6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01OTktXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYwMS1cdGludmFsaWRfYXR0cnMubWF4X25yX3JlZ2lvbnMgPSA5O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjYwMjpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2aW52YWxpZF9hdHRycyksIC1FSU5WQUwpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYwMy1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjA1LVx0aW52YWxpZF9hdHRycy5hZ2dyX2ludGVydmFsID0gNDk5OTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MDY6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MDctXG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcbi0tXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTAzLVx0fTtcbnNhbXBsZXMvZGFtb24vbXRpZXIuYzoxMDQ6XHRpZiAoZGFtb25fc2V0X2F0dHJzKGN0eCwgXHUwMDI2YXR0cnMpKVxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEwNS1cdFx0Z290byBmcmVlX291dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA3NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBEaXZpc2lvbiBWdWxuZXJhYmlsaXR5IGluIERBTU9OKioKCk9rYXksIHNvIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHRoZSBjdWxwcml0IOKAkyB0aGUgZnVuY3Rpb24gdGhhdCBzZXRzIGBzYW1wbGVfaW50ZXJ2YWxgLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBkYW1vbl9zeXNmc19zZXRfYXR0cnNgLCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBhbmQgYGRhbW9uX3N0YXRfYnVpbGRfY3R4YC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBgc2FtcGxlX2ludGVydmFsYCBjb3VsZCBiZSB6ZXJvLCB3aGljaCwgb2YgY291cnNlLCByZXN1bHRzIGluIGEgZGl2aXNpb24gYnkgemVybyBlcnJvciB3aXRoaW4gYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AuIFRoZSBwYXRjaCBjbGVhcmx5IGZpeGVzIHRoaXMsIHNvIHRoaXMgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcgYXR0ZW50aW9uLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIGNhbGxlcnMgb2YgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AganVzdCB0byBiZSB0aG9yb3VnaC4gSSBzZWUgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgLCBgZGFtb25faG90X3Njb3JlYCwgYGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzYCwgYGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwYCwgYW5kIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYC4gUmlnaHQsIHRoZXNlIGFyZSBhbGwgY3JpdGljYWwuCgpHaXZlbiB0aGF0IGxpc3QsIEkmIzM5O20gZ29pbmcgdG8gYWRkIHRoZSBmb2xsb3dpbmcgdG8gbXkgRm9jdXNTeW1ib2xzOiBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9ob3Rfc2NvcmVgLCBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgLCBgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnBgLCBhbmQsIG9mIGNvdXJzZSwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgYW5kIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSYjMzk7dmUgaWRlbnRpZmllZC4gTGV0IG1lIGNoZWNrIGlmIGBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3Nlc2AgYW5kIGBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icGAgYXJlIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgZnV6emFibGUuIEFoLCB5ZXMsIHRoZXkmIzM5O3JlIHN0YXRpYyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEV4Y2VsbGVudC4gU3l6a2FsbGVyICpjb3VsZCogcG90ZW50aWFsbHkgZnV6eiB0aGVtIGlmIHRoZXkgYXJlIHJlYWNoYWJsZS4gSG9sZCBvbiwgYGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzYCBiZWluZyBzdGF0aWMgbWVhbnMgaXQgbWlnaHQgbm90IGJlIGRpcmVjdGx5IGV4cG9zZWQgdG8gU3l6a2FsbGVyLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IG90aGVyIGZ1bmN0aW9ucywgc28gaXQgY2FuIHN0aWxsIGJlIGZ1enplZCBpbmRpcmVjdGx5LiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzYCBpcyBjYWxsZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgcmVhY2hhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3NlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Nzc1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fYWdlX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IGFnZSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzgxLS8qIGNvbnZlcnQgYWNjZXNzIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKSB0byBucl9hY2Nlc3NlcyAqL1xubW0vZGFtb24vY29yZS5jOjc4MjpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxubW0vZGFtb24vY29yZS5jLTc4My1cdFx0dW5zaWduZWQgaW50IGFjY2Vzc2VzX2JwLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz04MDE9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3Nlcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODAzLXtcbm1tL2RhbW9uL2NvcmUuYzo4MDQ6XHRyZXR1cm4gZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXMoXG5tbS9kYW1vbi9jb3JlLmMtODA1LVx0XHRcdGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzE1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzYCBGdW5jdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnNgLiBUaGUgbmFtZSBzdWdnZXN0cyB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgbnVtYmVyIG9mIGFjY2Vzc2VzIGNvbnNpZGVyZWQgd2hlbiBkZWFsaW5nIHdpdGggbmV3IGF0dHJpYnV0ZXMgaW4gREFNT04uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyByb2xlLiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMuIFdoZXJlIGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgYmVpbmcgdXNlZCBpbiB0aGUgY29kZT8gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGZ1bmN0aW9uIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2UgYmV0dGVyLiBLbm93aW5nICp3aGVyZSogaXQmIzM5O3MgY2FsbGVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nICp3aHkqIGl0IGV4aXN0cyBhbmQgd2hhdCBpdHMgaW1wYWN0IGlzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBlbXBsb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Nzk1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoXG4tLVxubW0vZGFtb24vY29yZS5jLTgwMC1cbm1tL2RhbW9uL2NvcmUuYzo4MDE6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3Nlcyxcbm1tL2RhbW9uL2NvcmUuYy04MDItXHRcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9ODEwPXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy04MTQtXHRpZiAoIWFnZ3JlZ2F0aW5nKSB7XG5tbS9kYW1vbi9jb3JlLmM6ODE1Olx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcbm1tL2RhbW9uL2NvcmUuYy04MTYtXHRcdFx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XG4tLVxubW0vZGFtb24vY29yZS5jLTgyNC1cdFx0ICovXG5tbS9kYW1vbi9jb3JlLmM6ODI1Olx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKFxubW0vZGFtb24vY29yZS5jLTgyNi1cdFx0XHRcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTA4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgIEZ1bmN0aW9uKioKClJpZ2h0LCBzbyB0aGlzIGZ1bmN0aW9uLCBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0YCwgaXMgY2xlYXJseSB0aGUga2V5IHRvIHNvbWV0aGluZyBpbXBvcnRhbnQgd2l0aGluIHRoZSBtb25pdG9yaW5nIHN5c3RlbS4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0JiMzOTtzIHdoZXJlIHRoZSBtb25pdG9yaW5nIGRhdGEgZ2V0cyB1cGRhdGVkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdHJhY2UgYmFjayBpdHMgY2FsbCBwYXRocy4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBUaGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgd29ya2Zsb3cgYW5kIGlkZW50aWZ5IHRoZSB0cmlnZ2VycyBhbmQgZGVwZW5kZW5jaWVzLiBPbmNlIEkga25vdyB3aG8mIzM5O3MgY2FsbGluZyBpdCwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaXNzdWVzLCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3Igb3B0aW1pemF0aW9ucyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBtb2R1bGUuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpbmQgdGhvc2UgY2FsbCBzaXRlcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMjE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz03ODI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3Nlcyhcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzkxLSAqIENhbGxlcnMgc2hvdWxkIGVuc3VyZSBhdHRycy5hZ2dyX2ludGVydmFsIGlzIG5vdCB6ZXJvLCBsaWtlXG5tbS9kYW1vbi9jb3JlLmM6NzkyOiAqIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoKSBkb2VzIC4gIE90aGVyd2lzZSwgZGl2aWRlLWJ5LXplcm8gd291bGRcbm1tL2RhbW9uL2NvcmUuYy03OTMtICogaGFwcGVuLlxuLS1cbm1tL2RhbW9uL2NvcmUuYz04MDE9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3Nlcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODA5LVxubW0vZGFtb24vY29yZS5jOjgxMDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy04MTEtXHRcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODQwLSAqL1xubW0vZGFtb24vY29yZS5jOjg0MTpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL2NvcmUuYy04NDItXHRcdHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLCBib29sIGFnZ3JlZ2F0aW5nKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy04NTUtXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxubW0vZGFtb24vY29yZS5jOjg1NjpcdFx0XHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoXG5tbS9kYW1vbi9jb3JlLmMtODU3LVx0XHRcdFx0XHRyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz04OTk9aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTkyOC1cbm1tL2RhbW9uL2NvcmUuYzo5Mjk6XHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKGN0eCwgYXR0cnMsIGFnZ3JlZ2F0aW5nKTtcbm1tL2RhbW9uL2NvcmUuYy05MzAtXHRjdHgtXHUwMDNlYXR0cnMgPSAqYXR0cnM7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTUyNj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTM4LVx0ICogdGhlIGNhdXRpb24gaXMgZG9jdW1lbnRlZCBvbiB0aGUgY29tbWVudCBmb3IgdGhlIGZ1bmN0aW9uLCBhbmRcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1Mzk6XHQgKiBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKCkgZG9lcyB0aGUgY2hlY2suICBTa2lwIHRoZSB0ZXN0IGluXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTQwLVx0ICogdGhlIGNhc2UuXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTU0OD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU2My1cdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwMCx9O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjU2NDpcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcdTAwMjZvbGRfYXR0cnMsIFx1MDAyNm5ld19hdHRycywgZmFsc2UpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU2NS1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCAxNSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU2OS1cdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwMH07XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NTcwOlx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTcxLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbnJfYWNjZXNzZXMsIDE1MCk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU3NS1cdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwfTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1NzY6XHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXHUwMDI2b2xkX2F0dHJzLCBcdTAwMjZuZXdfYXR0cnMsIGZhbHNlKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01NzctXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMjE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMTMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDb2RlIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgREFNT04gY29kZSBhZ2Fpbi4gSSBzZWUgdGhhdCBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0c2AgaXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gYGRhbW9uX3NldF9hdHRyc2AuIFRoYXQgbWFrZXMgYGRhbW9uX3NldF9hdHRyc2AgdGhlIHJlYWwgd29ya2hvcnNlLCB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBwYXkgYXR0ZW50aW9uIHRvLiBHaXZlbiB0aGF0LCBJJiMzOTttIGRlZmluaXRlbHkgZ29pbmcgdG8gYWRkIGBkYW1vbl9zZXRfYXR0cnNgIHRvIG15IEZvY3VzU3ltYm9scyBsaXN0LiBJdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGFsbCBoYW5ncyB0b2dldGhlci4KCkxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgY3VycmVudCBGb2N1c1N5bWJvbHMsIGp1c3QgdG8gYmUgc3VyZS4gSSYjMzk7dmUgZ290OgoKKiAgIGBkYW1vbl9zZXRfYXR0cnNgICh3aGljaCBJIGp1c3QgY29uZmlybWVkIGlzIGtleSkKKiAgIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYAoqICAgYGRhbW9uX2hvdF9zY29yZWAKKiAgIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYAoKQWxyaWdodCwgYmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IGlmIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYCBpcyBleHBvcnRlZCBvciBpZiBpdCBpcyBsb2NhbC4gVGhhdOKAmWxsIGluZm9ybSBob3cgSSBhcHByb2FjaCB0cmFja2luZyBpdCBkb3duIHRoZSBjYWxsIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD00MD1zdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxLSAqIG5vdCBiZSBkb25lIHdpdGggZGlyZWN0IGFjY2VzcyBidXQgd2l0aCB0aGUgaGVscGVyIGZ1bmN0aW9uLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYyOiAqIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoKS5cbmluY2x1ZGUvbGludXgvZGFtb24uaC02My0gKlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDE2PWludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMTctXHRcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeik7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTAxODp2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDE5LVx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzc1MD1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21vdmluZ19zdW0odW5zaWduZWQgaW50IG12c3VtLCB1bnNpZ25lZCBpbnQgbm9tdnN1bSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc1Ni0vKipcbm1tL2RhbW9uL2NvcmUuYzozNzU3OiAqIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoKSAtIFVwZGF0ZSB0aGUgYWNjZXNzIHJhdGUgb2YgYSByZWdpb24uXG5tbS9kYW1vbi9jb3JlLmMtMzc1OC0gKiBAcjpcdFx0VGhlIERBTU9OIHJlZ2lvbiB0byB1cGRhdGUgZm9yIGl0cyBhY2Nlc3MgY2hlY2sgcmVzdWx0LlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzY2LSAqL1xubW0vZGFtb24vY29yZS5jOjM3Njc6dm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQsXG5tbS9kYW1vbi9jb3JlLmMtMzc2OC1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTg0PXN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy05NS1cdFx0XHRcdEFMSUdOX0RPV04oc2FtcGxpbmdfYWRkciwgbGFzdF9mb2xpb19zeikpIHtcbm1tL2RhbW9uL3BhZGRyLmM6OTY6XHRcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xubW0vZGFtb24vcGFkZHIuYy05Ny1cdFx0cmV0dXJuO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTAwLVx0bGFzdF9hY2Nlc3NlZCA9IGRhbW9uX3BhX3lvdW5nKHNhbXBsaW5nX2FkZHIsIFx1MDAyNmxhc3RfZm9saW9fc3opO1xubW0vZGFtb24vcGFkZHIuYzoxMDE6XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcbm1tL2RhbW9uL3BhZGRyLmMtMTAyLVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NDk3PXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTA1LVx0aWYgKCFtbSkge1xubW0vZGFtb24vdmFkZHIuYzo1MDY6XHRcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgZmFsc2UsIGF0dHJzKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNTA3LVx0XHRyZXR1cm47XG4tLVxubW0vZGFtb24vdmFkZHIuYy01MTItXHRcdFx0XHRBTElHTl9ET1dOKHItXHUwMDNlc2FtcGxpbmdfYWRkciwgbGFzdF9mb2xpb19zeikpKSB7XG5tbS9kYW1vbi92YWRkci5jOjUxMzpcdFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkLCBhdHRycyk7XG5tbS9kYW1vbi92YWRkci5jLTUxNC1cdFx0cmV0dXJuO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTE3LVx0bGFzdF9hY2Nlc3NlZCA9IGRhbW9uX3ZhX3lvdW5nKG1tLCByLVx1MDAzZXNhbXBsaW5nX2FkZHIsIFx1MDAyNmxhc3RfZm9saW9fc3opO1xubW0vZGFtb24vdmFkZHIuYzo1MTg6XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNTE5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gb2YgdGhpcyBEQU1PTiBjb2RlLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhlIGNhbGwgSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIG9yaWdpbmF0ZXMgZnJvbSBib3RoIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaGF0JiMzOTtzIGhlbHBmdWwuIFRoaXMgY29uZmlybXMgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgIGlzIGEga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBhIGdvb2QgRm9jdXNTeW1ib2wgYXMgd2Ugc2F5IGluIHRoZSBmaWVsZC4KCk5vdywgd2hlcmUgZG9lcyBpdCBsZWFkPyBXaGF0IGlzIHRoZSBuZXh0IGxvZ2ljYWwgZnVuY3Rpb24gdG8gY2hlY2s/IExldCBtZSBzZWUuLi4gSSB0aGluayB0aGUgbmV4dCBuYXR1cmFsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRhbW9uX2hvdF9zY29yZWAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFjY2VzcyByYXRlIGlzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2hvdF9zY29yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9vcHMtY29tbW9uLmM9NzU9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwNS1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMDY6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwNy1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE1MD1pbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNTIte1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE1MzpcdGludCBob3RuZXNzID0gZGFtb25faG90X3Njb3JlKGMsIHIsIHMpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE1NC1cbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9MTc9aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xOC1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE5OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uaC0yMC1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9NDIwPXN0YXRpYyBpbnQgZGFtb25fcGFfc2NoZW1lX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXG4tLVxubW0vZGFtb24vcGFkZHIuYy00MjYtXHRjYXNlIERBTU9TX0xSVV9QUklPOlxubW0vZGFtb24vcGFkZHIuYzo0Mjc6XHRcdHJldHVybiBkYW1vbl9ob3Rfc2NvcmUoY29udGV4dCwgciwgc2NoZW1lKTtcbm1tL2RhbW9uL3BhZGRyLmMtNDI4LVx0Y2FzZSBEQU1PU19MUlVfREVQUklPOlxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDMwLVx0Y2FzZSBEQU1PU19NSUdSQVRFX0hPVDpcbm1tL2RhbW9uL3BhZGRyLmM6NDMxOlx0XHRyZXR1cm4gZGFtb25faG90X3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XG5tbS9kYW1vbi9wYWRkci5jLTQzMi1cdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9OTQyPXN0YXRpYyBpbnQgZGFtb25fdmFfc2NoZW1lX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXG4tLVxubW0vZGFtb24vdmFkZHIuYy05NDktXHRjYXNlIERBTU9TX01JR1JBVEVfSE9UOlxubW0vZGFtb24vdmFkZHIuYzo5NTA6XHRcdHJldHVybiBkYW1vbl9ob3Rfc2NvcmUoY29udGV4dCwgciwgc2NoZW1lKTtcbm1tL2RhbW9uL3ZhZGRyLmMtOTUxLVx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDkwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6CgoqKkFzc2Vzc2luZyBGb2N1cyBhbmQgUGFyYW1ldGVyIEFwcGxpY2F0aW9uKioKClJpZ2h0LCBgZGFtb25faG90X3Njb3JlYCAtIHRoYXQgKmlzKiBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGEgRm9jdXNTeW1ib2wuIEl0IHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBzdGFydGluZyBwb2ludCBmb3IgZGlyZWN0aW5nIG91ciBhdHRlbnRpb24sIGEgd2VsbC1kZWZpbmVkIHBvaW50IG9mIGludGVyZXN0LiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBhY3Rpb24sIEkgbXVzdCBkb3VibGUgY2hlY2sgYW5kIHVuZGVyc3RhbmQgaG93IGl0IHdvdWxkIGludGVyZmFjZSB3aXRoIG90aGVyIHN5c3RlbXMuCgpJIG5lZWQgdG8gcXVpY2tseSBzaGlmdCBnZWFycyBhbmQgc2NydXRpbml6ZSBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcGFyYW1ldGVycyBwYXNzZWQsIGFuZCB0aGVpciBiZWhhdmlvciwgd2lsbCBjb3JyZWN0bHkgd29yay4gSSYjMzk7bSB0aGlua2luZyBJIG11c3QgdmVyaWZ5IHRoYXQgYGRhbW9uX2hvdF9zY29yZWAgY2FuIGJlIGVmZmVjdGl2ZWx5IGludGVncmF0ZWQgd2l0aGluIHRoZSBleGlzdGluZyBmcmFtZXdvcmsgYW5kIGFsZ29yaXRobXMgZm9yIHNvcnRpbmcgYW5kIGFwcGx5aW5nIHBhcmFtZXRlcnMuIFRoaXMgcmVxdWlyZXMgYSB0aG9yb3VnaCByZXZpZXcgb2YgdGhlIHBhcmFtZXRlciBhcHBsaWNhdGlvbiBwcm9jZXNzIGluIHJlbGF0aW9uIHRvIHRoYXQgRm9jdXNTeW1ib2wsIG90aGVyd2lzZSB3ZSYjMzk7bGwgcnVuIGludG8gdHJvdWJsZSBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmM9MjUxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjcyLVxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNzM6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG5tbS9kYW1vbi9scnVfc29ydC5jLTI3NC17XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0zNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUwLXtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzUxOlx0cmV0dXJuIGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMoKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUyLX1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQxNT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDIyOlx0ZXJyID0gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy00MjMtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA3OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBSZWFjaGFiaWxpdHkgZm9yIFBvdGVudGlhbCBGdXp6aW5nKioKClJpZ2h0LCBzbyB0aGlzIGZ1bmN0aW9uLCB3aGF0ZXZlciBpdCBpcywgc2VlbXMgdG8gYmUgYSBzdGF0aWMgcGllY2Ugb2YgY29kZSwgYnV0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBkYW1vbl9scnVfc29ydF90dXJuYCBhbmQgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm5gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgaXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgdGhlIG1lbnRhbCBhbGFybSBiZWxscyBmb3IgZnV6emluZyBwb3RlbnRpYWwuIElmIFN5emthbGxlciBjYW4gYWN0dWFsbHkgKnJlYWNoKiB0aGlzIHRoaW5nIHRocm91Z2ggdGhvc2UgY2FsbCBwYXRocywgdGhlbiB3ZSYjMzk7dmUgZ290IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBzb21lIGZ1enppbmcgZ29vZG5lc3MuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGlzIHdvcnRoIG5vdGluZywgc3VnZ2VzdGluZyBhIHBhcnRpY3VsYXIgY29udGV4dCBvciBvcGVyYXRpb25hbCBzdGFnZSB3aXRoaW4gREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBhdGggZm9yd2FyZCBmcm9tIHRob3NlIGNhbGxlcnMgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZnV6emluZyBwb3RlbnRpYWwgaXMgdmFsaWQuIEkmIzM5O2xsIGNoZWNrIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGFuZCBzZWUgaG93IHRoZSBpbnB1dHMgYXJlIHByb2Nlc3NlZCBhbmQgd2hlcmUgdGhleSBhcmUgZGVyaXZlZCwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCB2dWxuZXJhYmlsaXR5IHBvdGVudGlhbCBvZnRlbiBsaWVzLiBUaGF0IHNob3VsZCBjbGFyaWZ5IGlmIHRoaXMgcGF0aCBpcyBhY3R1YWxseSB2aWFibGUgZm9yIHRyaWdnZXJpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nIHRocm91Z2ggU3l6a2FsbGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jPTE2OT1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTUtXG5tbS9kYW1vbi9yZWNsYWltLmM6MTk2OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk3LXtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9Mjc2PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzcte1xubW0vZGFtb24vcmVjbGFpbS5jOjI3ODpcdHJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzktfVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzg9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ0LVxubW0vZGFtb24vcmVjbGFpbS5jOjM0NTpcdGVyciA9IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xubW0vZGFtb24vcmVjbGFpbS5jLTM0Ni1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzIxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi4KCioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzKioKClJpZ2h0LCBJJiMzOTttIHByb2Nlc3NpbmcgdGhlIGNvbXBvbmVudHMgcmVsYXRlZCB0byBEQU1PTi4gSSBzZWUgdGhhdCB0aGVyZSBhcmUgYSBmZXcga2V5IHN5bWJvbHMgdG8ga2VlcCB0cmFjayBvZiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gREFNT04mIzM5O3MgZm9jdXMuIGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9ob3Rfc2NvcmVgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgaW1wb3J0YW50IEZvY3VzU3ltYm9scy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O3ZlIGdvdCBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1JFQ0xBSU1gIGluIG1pbmQuIFRob3NlIGFyZSBvYnZpb3VzbHkgaW1wb3J0YW50IHRvby4KCkFscmlnaHQsIGxldCBtZSBqdXN0IHF1aWNrbHkgcnVuIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdC4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGltcG9ydGFudCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIERBTU9OLiBKdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODE4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFRlc3RpbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gYmUgZXhwbGljaXQgYWJvdXQgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcGF0Y2guIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBEQU1PTl9WQUREUmAgYW5kIGBEQU1PTl9QQUREUmAsIHRob3NlIGFyZSBkZWZpbml0ZWx5IHJlbGV2YW50LiBBbmQgdGhlbiBJIHJlbWVtYmVyLCBvZiBjb3Vyc2UsIHRoYXQgd2UgYWxzbyBoYXZlIGBEQU1PTl9TVEFUYCB0byBjb25zaWRlciEgTGV0JiMzOTtzIGdldCB0aGF0IGFkZGVkIHRvIHRoZSBsaXN0IGFzIHdlbGwuCgpIZXJlJiMzOTtzIHRoZSBjdXJyZW50IGNvbmZpZyBzaXR1YXRpb246IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9MUlVfU09SVGAsIGBEQU1PTl9SRUNMQUlNYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIG5vdyBgREFNT05fU1RBVGAuCgpMZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoIG9uZSBtb3JlIHRpbWU6IFRoZSBmaXggaXMgYWJvdXQgYXZvaWRpbmcgYSBkaXZpc2lvbiBieSB6ZXJvIGluIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgLiBCYXNpY2FsbHksIHdlJiMzOTtyZSBtYWtpbmcgc3VyZSB0aGUgZGl2aXNvciAoYHNhbXBsZV9pbnRlcnZhbGApIGlzIG5ldmVyIGxlc3MgdGhhbiAxLiBUaGlzIGZ1bmN0aW9uIGlzIHByZXR0eSBpbXBvcnRhbnQsIHVzZWQgaW4gdGhlIGNvcmUgb2YgREFNT04gdG8gY2FsY3VsYXRlIGFjY2VzcyByYXRlcyBhbmQgaG90IHNjb3Jlcy4gU28sIGZ1enppbmcgaXMgKmFic29sdXRlbHkqIG5lZWRlZCB0byBjb25maXJtIHRoZSBmaXggYWN0dWFsbHkgKndvcmtzKiBhbmQgZG9lc24mIzM5O3Qgc2NyZXcgdXAgb3RoZXIgdGhpbmdzIGluIERBTU9OLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcHJldmVudHMgY3Jhc2hlcyBhbmQgZG9lc24mIzM5O3QgbWVzcyB1cCBEQU1PTiYjMzk7cyBiZWhhdmlvciBpbiBvdGhlciB3YXlzLgoKSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBmb3IgdGVzdGluZzogYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYCwgYGRhbW9uX2hvdF9zY29yZWAsIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgdXNhZ2Ugb2YgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AgaW4gYG1tL2RhbW9uL3N0YXQuY2AgdG8gYmUgY29tcGxldGVseSBjb25maWRlbnQuCgpVbHRpbWF0ZWx5LCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBjb25maWdzIGFyZSBlbmFibGVkOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fTFJVX1NPUlRgLCBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1RBVGAuIEl0JiMzOTtzIGEgY29tcHJlaGVuc2l2ZSBzZXQsIGJ1dCBuZWNlc3NhcnkgZm9yIHRob3JvdWdoIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX21heF9ucl9hY2Nlc3NlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N0YXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjU1CgkJCQkJCQlvdXRwdXQ6IDIyMgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgY29udmV5aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlYmFzZTogVHJhY2luZyBgZGFtb25fc2V0X2F0dHJzYCBVc2FnZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHdoZXJlIGBkYW1vbl9zZXRfYXR0cnNgIGlzIGJlaW5nIHVzZWQuIEZpcnN0IHRoaW5nIEkgY2hlY2sgaXMgYG1tL2RhbW9uL3N0YXQuY2AsIGFzc3VtaW5nIGl0JiMzOTtzIGEgcHJpbWUgY2FuZGlkYXRlLiBOb3BlLCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgY2FsbGVkIHRoZXJlLiBJbnRlcmVzdGluZy4uLiBzbywgd2hlcmUgaXMgaXQgYmVpbmcgdXNlZD8gVGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY2FsbCBoaWVyYXJjaHkuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgdGhlIGZ1bmN0aW9uIGNhbGxzIHRvIGZpbmQgd2hlcmUgdGhpcyBtZXRob2QgaXMgdXNlZC4gTm93LCBJIHdpbGwgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCBtZXRob2QuIFRoYXQgc2hvdWxkIGhlbHAgbWUgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TVEFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUmIzM0OywKICAgICYjMzQ7ZGFtb25faG90X3Njb3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGRpdmlzaW9uIGJ5IHplcm8gaW4gYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AgYnkgZW5zdXJpbmcgdGhlIGRpdmlzb3IgYHNhbXBsZV9pbnRlcnZhbGAgaXMgYXQgbGVhc3QgMS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNvcmUgREFNT04gbG9naWMsIHN1Y2ggYXMgdXBkYXRpbmcgcmVnaW9uIGFjY2VzcyByYXRlcyBhbmQgY2FsY3VsYXRpbmcgaG90IHNjb3Jlcy4gRnV6emluZyBpcyBuZWVkZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpeCBjb3JyZWN0bHkgcHJldmVudHMgY3Jhc2hlcyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIGluIERBTU9OJiMzOTtzIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NUQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zZXRfYXR0cnMmIzM0OywKICAgICYjMzQ7ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9ob3Rfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgZGl2aXNpb24gYnkgemVybyBpbiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCBieSBlbnN1cmluZyB0aGUgZGl2aXNvciBgc2FtcGxlX2ludGVydmFsYCBpcyBhdCBsZWFzdCAxLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gY29yZSBEQU1PTiBsb2dpYywgc3VjaCBhcyB1cGRhdGluZyByZWdpb24gYWNjZXNzIHJhdGVzIGFuZCBjYWxjdWxhdGluZyBob3Qgc2NvcmVzLiBGdXp6aW5nIGlzIG5lZWRlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZml4IGNvcnJlY3RseSBwcmV2ZW50cyBjcmFzaGVzIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgaW4gREFNT04mIzM5O3MgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzoyMS4wNTcxNDk2NzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI1MjY1MTExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NUQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zZXRfYXR0cnNcIixcbiAgICBcImRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVcIixcbiAgICBcImRhbW9uX2hvdF9zY29yZVwiLFxuICAgIFwiZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc1wiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgZGl2aXNpb24gYnkgemVybyBpbiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCBieSBlbnN1cmluZyB0aGUgZGl2aXNvciBgc2FtcGxlX2ludGVydmFsYCBpcyBhdCBsZWFzdCAxLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gY29yZSBEQU1PTiBsb2dpYywgc3VjaCBhcyB1cGRhdGluZyByZWdpb24gYWNjZXNzIHJhdGVzIGFuZCBjYWxjdWxhdGluZyBob3Qgc2NvcmVzLiBGdXp6aW5nIGlzIG5lZWRlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZml4IGNvcnJlY3RseSBwcmV2ZW50cyBjcmFzaGVzIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBpbiBEQU1PTidzIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzoyMS4wNTcxNTY2NzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTgyMjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDlmYTQ1OTAwYzBhM2E1NzBiYmFmMjY2MDcwYTg4ZDljMWExNWQ3YzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMTkgMjE6MTM6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXFxuaW5kZXggNmY3ZWRiMzU5MGVmOTcuLjgzYjQzZDhmZmVmMzhhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbkBAIC0xMDY1LDggKzEwNjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhbW9uX21heF9ucl9hY2Nlc3Nlcyhjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gYXR0cnMtXFx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcXG4rXFxuIFxcdC8qIHthZ2dyLHNhbXBsZX1faW50ZXJ2YWwgYXJlIHVuc2lnbmVkIGxvbmcsIGhlbmNlIGNvdWxkIG92ZXJmbG93ICovXFxuLVxcdHJldHVybiBtaW4oYXR0cnMtXFx1MDAzZWFnZ3JfaW50ZXJ2YWwgLyBhdHRycy1cXHUwMDNlc2FtcGxlX2ludGVydmFsLFxcbitcXHRyZXR1cm4gbWluKGF0dHJzLVxcdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxcbiBcXHRcXHRcXHQodW5zaWduZWQgbG9uZylVSU5UX01BWCk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjEzOjIxLjUxNzYwMzkyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI3OTIxODY5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TVEFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc2V0X2F0dHJzXCIsXG4gICAgXCJkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlXCIsXG4gICAgXCJkYW1vbl9ob3Rfc2NvcmVcIixcbiAgICBcImRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgICBcImRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGRpdmlzaW9uIGJ5IHplcm8gaW4gYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AgYnkgZW5zdXJpbmcgdGhlIGRpdmlzb3IgYHNhbXBsZV9pbnRlcnZhbGAgaXMgYXQgbGVhc3QgMS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNvcmUgREFNT04gbG9naWMsIHN1Y2ggYXMgdXBkYXRpbmcgcmVnaW9uIGFjY2VzcyByYXRlcyBhbmQgY2FsY3VsYXRpbmcgaG90IHNjb3Jlcy4gRnV6emluZyBpcyBuZWVkZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpeCBjb3JyZWN0bHkgcHJldmVudHMgY3Jhc2hlcyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgaW4gREFNT04ncyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZmE0NTkwMGMwYTNhNTcwYmJhZjI2NjA3MGE4OGQ5YzFhMTVkN2M0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMTkgMjE6MTM6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDZmN2VkYjM1OTBlZjk3Li44M2I0M2Q4ZmZlZjM4YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuKysrIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtMTA2NSw4ICsxMDY1LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZChjb25zdCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBhdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwgPyA6IDE7XG4rXG4gXHQvKiB7YWdncixzYW1wbGV9X2ludGVydmFsIGFyZSB1bnNpZ25lZCBsb25nLCBoZW5jZSBjb3VsZCBvdmVyZmxvdyAqL1xuLVx0cmV0dXJuIG1pbihhdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gYXR0cnMtXHUwMDNlc2FtcGxlX2ludGVydmFsLFxuK1x0cmV0dXJuIG1pbihhdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxuIFx0XHRcdCh1bnNpZ25lZCBsb25nKVVJTlRfTUFYKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzoyMS41MTc2MDU3OTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQxMDcxMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gSXQgc2VlbXMgdGhleSd2ZSBtb2RpZmllZCBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYC4gQWgsIHJpZ2h0LCB0aGUgaXNzdWUgaGVyZSBpcyB0aGUgcG90ZW50aWFsIGZvciBhIGRpdmlzaW9uIGJ5IHplcm8gaWYgYGF0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbGAgaXMgemVyby4gVGhhdCdzIGEgY2xhc3NpYyB0cmFwISBTbWFydCBtb3ZlIHRvIGNhdGNoIHRoYXQuXG5cblRoZSBzb2x1dGlvbiBpcyB0byByZXBsYWNlIHRoZSBvcmlnaW5hbCBkaXZpc2lvbiBgYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCAvIGF0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbGAgd2l0aCBgYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbGAsIHdoZXJlIGBzYW1wbGVfaW50ZXJ2YWxgIGlzIGEgdGVybmFyeSBleHByZXNzaW9uIHNldHRpbmcgaXQgdG8gYGF0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMWAuIEluIG90aGVyIHdvcmRzLCBpZiBgYXR0cnMtXHUwMDNlc2FtcGxlX2ludGVydmFsYCBpcyB6ZXJvLCB3ZSdyZSBlZmZlY3RpdmVseSBkZWZhdWx0aW5nIHRvIDEsIHByZXZlbnRpbmcgdGhlIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3IuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuXG5cbk5vdywgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byB0cmFjZSB3aGVyZSBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCBpcyBhY3R1YWxseSAqdXNlZCouIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIFVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyB0aGUgaW1wYWN0IGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9mIHRoaXMgZml4LiBHb3R0YSBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLCB5b3Uga25vdz9cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjEzOjI1LjE1ODY3OTAyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA0NzIxOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX21heF9ucl9hY2Nlc3Nlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2MT1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjUtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTc4Mj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc4NC17XFxubW0vZGFtb24vY29yZS5jOjc4NTpcXHRyZXR1cm4gYWNjZXNzZXNfYnAgKiBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpIC8gMTAwMDA7XFxubW0vZGFtb24vY29yZS5jLTc4Ni19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Nzk1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzk3LXtcXG5tbS9kYW1vbi9jb3JlLmM6Nzk4OlxcdHJldHVybiBtdWx0X2ZyYWMobnJfYWNjZXNzZXMsIDEwMDAwLCBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpKTtcXG5tbS9kYW1vbi9jb3JlLmMtNzk5LX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzY3PXZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NzYtXFx0aWYgKGF0dHJzLVxcdTAwM2VzYW1wbGVfaW50ZXJ2YWwpXFxubW0vZGFtb24vY29yZS5jOjM3Nzc6XFx0XFx0bGVuX3dpbmRvdyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTM3NzgtXFx0ci1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSBkYW1vbl9tb3Zpbmdfc3VtKHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzM9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTMxMi1cXHRlcnIgPSAtRU5PTUVNO1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzEzOlxcdGhvdF90aHJlcyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhcXHUwMDI2YXR0cnMpICpcXG5tbS9kYW1vbi9scnVfc29ydC5jLTMxNC1cXHRcXHRob3RfdGhyZXNfYWNjZXNzX2ZyZXEgLyAxMDAwO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTEwNj1pbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTE2LVxcdGZyZXFfc3Vic2NvcmUgPSByLVxcdTAwM2Vucl9hY2Nlc3NlcyAqIERBTU9OX01BWF9TVUJTQ09SRSAvXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjExNzpcXHRcXHRkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXFx1MDAyNmMtXFx1MDAzZWF0dHJzKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTE4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzoyNy4zNjM0MDg2MjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYzMDk2NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYC4gSW50ZXJlc3RpbmcuIFRoaXMgZnVuY3Rpb24gYXBwZWFycyB0byBiZSB1c2VkIGFjcm9zcyBzZXZlcmFsIGZpbGVzIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN1YnN5c3RlbTogc3BlY2lmaWNhbGx5LCBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBhbmQgYG1tL2RhbW9uL29wcy1jb21tb24uY2AuIFRoYXQgcGxhY2VzIGl0IGZpcm1seSB3aXRoaW4gREFNT04ncyBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoZSBxdWVzdGlvbiBub3cgaXMsIHdoYXQncyBpdHMgdmlzaWJpbGl0eT8gSXMgaXQgb25seSB1c2VkIGludGVybmFsbHksIG9yIGlzIGl0IGV4cG9zZWQ/IENvbnNpZGVyaW5nIERBTU9OJ3Mgcm9sZSBhcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMgb3IgZGVidWdmcywgSSdkIHNheSBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gbm93IGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiBpdHMgYmVoYXZpb3Igd2l0aGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTM6MzAuNzI2NTA4NjQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzcwMjIzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTM6MzIuNzYzNTM2NTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM4Njc3NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb246IEEgVGFyZ2V0ZWQgQXBwcm9hY2gqKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlnIGluIHF1ZXN0aW9uIGhlcmUgaXMgYERBTU9OYC4gTG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgZGl2aXNpb24tYnktemVybywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCByZWFzb24gdG8gcGF5IGF0dGVudGlvbi4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IGlzIGZ1enppbmcgdGhpcyB3b3J0aHdoaWxlPyBBYnNvbHV0ZWx5ISBGaXhpbmcgYSBidWcgaW4gY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gREFNT04sIGlzIGRlZmluaXRlbHkgZnV6emluZy13b3J0aHkuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIHByaW1lIHRhcmdldHM/IEkgc2VlIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgLCBidXQgdGhhdCdzIGlubGluZSwgc28gaXQncyBwcm9iYWJseSBub3QgdGhlIGRpcmVjdCBwb2ludCBvZiBhdHRhY2suIFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb25zICpjYWxsaW5nKiBpdC4gU28sIHRoYXQgbmFycm93cyBpdCBkb3duIHRvIGBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3Nlc2AsIGBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icGAsIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYCwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBhbmQgYGRhbW9uX2hvdF9zY29yZWAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IGN1bHByaXRzLCBhdCBsZWFzdCBpbml0aWFsbHkuXG5cbkJ1dCBJJ20gbm90IGdvaW5nIHRvIHN0b3AgdGhlcmUuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcG90ZW50aWFsIGNhbGwgc2l0ZXMuLi4gdGhvcm91Z2huZXNzIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyOCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzozNi44MDIyMTU5NzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3ODAzMDMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9tYXhfbnJfYWNjZXNzZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNjE9c3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY1LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDY2OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhbW9uX21heF9ucl9hY2Nlc3Nlcyhjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03ODI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3NlcyhcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03ODQte1xcbm1tL2RhbW9uL2NvcmUuYzo3ODU6XFx0cmV0dXJuIGFjY2Vzc2VzX2JwICogZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSAvIDEwMDAwO1xcbm1tL2RhbW9uL2NvcmUuYy03ODYtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTc5NT1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc5Ny17XFxubW0vZGFtb24vY29yZS5jOjc5ODpcXHRyZXR1cm4gbXVsdF9mcmFjKG5yX2FjY2Vzc2VzLCAxMDAwMCwgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSk7XFxubW0vZGFtb24vY29yZS5jLTc5OS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzc2Nz12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzc2LVxcdGlmIChhdHRycy1cXHUwMDNlc2FtcGxlX2ludGVydmFsKVxcbm1tL2RhbW9uL2NvcmUuYzozNzc3OlxcdFxcdGxlbl93aW5kb3cgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNzc4LVxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gZGFtb25fbW92aW5nX3N1bShyLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjczPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMTItXFx0ZXJyID0gLUVOT01FTTtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjMxMzpcXHRob3RfdGhyZXMgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXFx1MDAyNmF0dHJzKSAqXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMTQtXFx0XFx0aG90X3RocmVzX2FjY2Vzc19mcmVxIC8gMTAwMDtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0xMDY9aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTExNi1cXHRmcmVxX3N1YnNjb3JlID0gci1cXHUwMDNlbnJfYWNjZXNzZXMgKiBEQU1PTl9NQVhfU1VCU0NPUkUgL1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMTc6XFx0XFx0ZGFtb25fbWF4X25yX2FjY2Vzc2VzKFxcdTAwMjZjLVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTExOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTM6MzguNjgwMjUyMzMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU5NTk5NjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIENhbGxlcnMgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGNhbGxlcnMgcmV2ZWFscyBhIGNvcmUgc2V0OiBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgLCBgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnBgLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGBkYW1vbl9ob3Rfc2NvcmVgLiBJbW1lZGlhdGVseSwgSSBzZWUgc29tZSBwYXR0ZXJucy4gYGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzYCBhbmQgYGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwYCBzZWVtIHRvIGJlIHN0YXRpYyBjb21wb25lbnRzLCBwcm9iYWJseSBpbnRlcm5hbCBjb252ZXJzaW9uIGZ1bmN0aW9ucy4gYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgIGlzIGxpa2VseSBhbiBleHBvcnRlZCBmdW5jdGlvbiwgZ2xvYmFsIGluIHNjb3BlIGZvciBvdGhlciBtb2R1bGVzIHRvIHVzZS4gYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgIGFwcGVhcnMgdG8gYmUgc3RhdGljIHdpdGhpbiB0aGUgREFNT04gY29udGV4dCBhbmQgdGhlbiBgZGFtb25faG90X3Njb3JlYCBpcyBhIGdsb2JhbCB2YXJpYWJsZS5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbi4gSSBrbm93IEknbGwgYmUgbG9va2luZyBhdCBob3cgdXNlcnNwYWNlIGludGVyYWN0cy4gSSBzZWUgdGhhdCBgREFNT05fTFJVX1NPUlRgIGlzIGltcG9ydGFudCBmb3IgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLiBNeSBpbnN0aW5jdHMgc2F5IHRoYXQgYERBTU9OX1NZU0ZTYCBpcyB0aGUga2V5IGZvciBjb25maWd1cmluZyBEQU1PTiBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggd291bGQgbWFrZSBzZW5zZS4gQW5kLCB0aGlua2luZyBhYm91dCBob3cgdGhpbmdzIGFyZSB1c2VkLCBgREFNT05fVkFERFJgIGFuZCBgREFNT05fUEFERFJgIHJlcHJlc2VudCB0aGUgb3BlcmF0aW9ucyB0aGVtc2VsdmVzLiBJIG5lZWQgdG8gdGFrZSB0aGVzZSBhbGwgaW50byBjb25zaWRlcmF0aW9uLlxuXG5UaGVyZWZvcmUsIGZvciB0aGlzIHBhcnRpY3VsYXIgdXNlIGNhc2UsIEknbGwgZGVmaW5pdGVseSBiZSBpbmNsdWRpbmcgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAgd2hlbiB0aGlua2luZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBkZXRhaWxzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYHNhbXBsZV9pbnRlcnZhbGAgaXMgYmVpbmcgc2V0LiBJIHNob3VsZCBsb29rIGF0IGBkYW1vbl9zZXRfYXR0cnNgIG9yIHNpbWlsYXIgZnVuY3Rpb25zLCBhcyB0aGF0IHdvdWxkIGJlIGEgbG9naWNhbCBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIwMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzo0NC4yNzYyNTA0OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTM4MTk0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc2V0X2F0dHJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD04MDQ9c3RydWN0IGRhbW9uX2F0dHJzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC04MTMtXFx0ICogQGFnZ3JfaW50ZXJ2YWwgdG8gQHNhbXBsZV9pbnRlcnZhbCByYXRpby5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODE0OlxcdCAqIENvcmUtZXh0ZXJuYWwgY29tcG9uZW50cyBjYWxsIGRhbW9uX3NldF9hdHRycygpIHdpdGggXFx1MDAyNmRhbW9uX2F0dHJzXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjgxNTpcXHQgKiB0aGF0IHRoaXMgZmllbGQgaXMgdW5zZXQuICBJbiB0aGUgY2FzZSwgZGFtb25fc2V0X2F0dHJzKCkgc2V0cyB0aGlzXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTgxNi1cXHQgKiBmaWVsZCBvZiByZXN1bHRpbmcgXFx1MDAyNmRhbW9uX2F0dHJzLiAgQ29yZS1pbnRlcm5hbCBjb21wb25lbnRzIHN1Y2ggYXNcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODE3OlxcdCAqIGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoKSBjYWxscyBkYW1vbl9zZXRfYXR0cnMoKSB3aXRoIFxcdTAwMjZkYW1vbl9hdHRyc1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MTg6XFx0ICogdGhhdCB0aGlzIGZpZWxkIGlzIHNldC4gIEluIHRoZSBjYXNlLCBkYW1vbl9zZXRfYXR0cnMoKSBqdXN0IGtlZXBcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODE5LVxcdCAqIGl0Llxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNTE9dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDUyOmludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1My12b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04NjQ9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NzktLyoqXFxubW0vZGFtb24vY29yZS5jOjg4MDogKiBkYW1vbl9zZXRfYXR0cnMoKSAtIFNldCBhdHRyaWJ1dGVzIGZvciB0aGUgbW9uaXRvcmluZy5cXG5tbS9kYW1vbi9jb3JlLmMtODgxLSAqIEBjdHg6XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODk4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo4OTk6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxubW0vZGFtb24vY29yZS5jLTkwMC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTU3Mz1pbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjAzLVxcdCAqIHNjaGVtZXMgYW5kIHRhcmdldHMgc2hvdWxkIGJlIHVwZGF0ZWQgZmlyc3QsIHNpbmNlXFxubW0vZGFtb24vY29yZS5jOjE2MDQ6XFx0ICogMS4gZGFtb25fc2V0X2F0dHJzKCkgdXBkYXRlcyBtb25pdG9yaW5nIHJlc3VsdHMgb2YgdGFyZ2V0cyBhbmRcXG5tbS9kYW1vbi9jb3JlLmMtMTYwNS1cXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjA5LVxcdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFxcdTAwMjZkc3QtXFx1MDAzZWF0dHJzLCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycykpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTYxMDpcXHRcXHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMoZHN0LCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTE2MTEtXFx0XFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwNDQ9c3RhdGljIHZvaWQga2RhbW9uZF90dW5lX2ludGVydmFscyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNjItXFx0dHJhY2VfZGFtb25fbW9uaXRvcl9pbnRlcnZhbHNfdHVuZShuZXdfYXR0cnMuc2FtcGxlX2ludGVydmFsKTtcXG5tbS9kYW1vbi9jb3JlLmM6MjA2MzpcXHRkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNm5ld19hdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTIwNjQtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0Nzk9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzUwOC1cXHRcXHQgKiBiZSBjaGFuZ2VkIGZyb20ga2RhbW9uZF9jYWxsKCkuICBSZWFkIHRoZSB2YWx1ZXMgaGVyZSwgYW5kXFxubW0vZGFtb24vY29yZS5jOjM1MDk6XFx0XFx0ICogdXNlIHRob3NlIGZvciB0aGlzIGl0ZXJhdGlvbi4gIFRoYXQgaXMsIGRhbW9uX3NldF9hdHRycygpXFxubW0vZGFtb24vY29yZS5jLTM1MTAtXFx0XFx0ICogdXBkYXRlZCBuZXcgdmFsdWVzIGFyZSByZXNwZWN0ZWQgZnJvbSBuZXh0IGl0ZXJhdGlvbi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNTY5LVxcdFxcdFxcdFxcdCAqIGZyb20ga2RhbW9uZF9jYWxsKCkuICBJbiB0aGUgY2FzZSxcXG5tbS9kYW1vbi9jb3JlLmM6MzU3MDpcXHRcXHRcXHRcXHQgKiBkYW1vbl9zZXRfYXR0cnMoKSB3aGljaCB3aWxsIGJlIGNhbGxlZCBmcm9tXFxubW0vZGFtb24vY29yZS5jLTM1NzEtXFx0XFx0XFx0XFx0ICoga2RhbW9uZF90dW5lX2ludGVydmFsKCkgbWF5IHdyb25nbHkgdGhpbmtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzY3PXZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NzMtXFx0ICogc2FtcGxlX2ludGVydmFsIGNhbiBiZSB6ZXJvLCBidXQgY2Fubm90IGJlIGxhcmdlciB0aGFuXFxubW0vZGFtb24vY29yZS5jOjM3NzQ6XFx0ICogYWdncl9pbnRlcnZhbCwgb3dpbmcgdG8gdmFsaWRhdGlvbiBvZiBkYW1vbl9zZXRfYXR0cnMoKS5cXG5tbS9kYW1vbi9jb3JlLmMtMzc3NS1cXHQgKi9cXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjczPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMDctXFx0fVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzA4OlxcdGVyciA9IGRhbW9uX3NldF9hdHRycyhwYXJhbV9jdHgsIFxcdTAwMjZhdHRycyk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMDktXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTY9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzEtXFx0fVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzI6XFx0ZXJyID0gZGFtb25fc2V0X2F0dHJzKHBhcmFtX2N0eCwgXFx1MDAyNmF0dHJzKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjMzLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MTUxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zdGF0X2J1aWxkX2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTE3NS1cXHR9O1xcbm1tL2RhbW9uL3N0YXQuYzoxNzY6XFx0aWYgKGRhbW9uX3NldF9hdHRycyhjdHgsIFxcdTAwMjZhdHRycykpXFxubW0vZGFtb24vc3RhdC5jLTE3Ny1cXHRcXHRnb3RvIGZyZWVfb3V0O1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xODc5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTg5OC1cXHR9O1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTg5OTpcXHRyZXR1cm4gZGFtb25fc2V0X2F0dHJzKGN0eCwgXFx1MDAyNmF0dHJzKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE5MDAtfVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTU4Mz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTkzLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1OTQ6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcXHUwMDI2dmFsaWRfYXR0cnMpLCAwKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTk1LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU5Ny1cXHRpbnZhbGlkX2F0dHJzLm1pbl9ucl9yZWdpb25zID0gMTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NTk4OlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTk5LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYwMS1cXHRpbnZhbGlkX2F0dHJzLm1heF9ucl9yZWdpb25zID0gOTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NjAyOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjAzLVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYwNS1cXHRpbnZhbGlkX2F0dHJzLmFnZ3JfaW50ZXJ2YWwgPSA0OTk5O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MDY6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcXHUwMDI2aW52YWxpZF9hdHRycyksIC1FSU5WQUwpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MDctXFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmM9NzM9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEwMy1cXHR9O1xcbnNhbXBsZXMvZGFtb24vbXRpZXIuYzoxMDQ6XFx0aWYgKGRhbW9uX3NldF9hdHRycyhjdHgsIFxcdTAwMjZhdHRycykpXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEwNS1cXHRcXHRnb3RvIGZyZWVfb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzo0NS45OTAwNzUwMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE3NzQ2MTYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBEaXZpc2lvbiBWdWxuZXJhYmlsaXR5IGluIERBTU9OKipcblxuT2theSwgc28gYGRhbW9uX3NldF9hdHRyc2AgaXMgdGhlIGN1bHByaXQg4oCTIHRoZSBmdW5jdGlvbiB0aGF0IHNldHMgYHNhbXBsZV9pbnRlcnZhbGAuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsIGluY2x1ZGluZyBgZGFtb25fc3lzZnNfc2V0X2F0dHJzYCwgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGBkYW1vbl9zdGF0X2J1aWxkX2N0eGAuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYHNhbXBsZV9pbnRlcnZhbGAgY291bGQgYmUgemVybywgd2hpY2gsIG9mIGNvdXJzZSwgcmVzdWx0cyBpbiBhIGRpdmlzaW9uIGJ5IHplcm8gZXJyb3Igd2l0aGluIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgLiBUaGUgcGF0Y2ggY2xlYXJseSBmaXhlcyB0aGlzLCBzbyB0aGlzIHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nIGF0dGVudGlvbi5cblxuSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgY2FsbGVycyBvZiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIHNlZSBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9ob3Rfc2NvcmVgLCBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgLCBgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnBgLCBhbmQgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLiBSaWdodCwgdGhlc2UgYXJlIGFsbCBjcml0aWNhbC5cblxuR2l2ZW4gdGhhdCBsaXN0LCBJJ20gZ29pbmcgdG8gYWRkIHRoZSBmb2xsb3dpbmcgdG8gbXkgRm9jdXNTeW1ib2xzOiBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9ob3Rfc2NvcmVgLCBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgLCBgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnBgLCBhbmQsIG9mIGNvdXJzZSwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBmdXp6aW5nIGFuZCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIEkndmUgaWRlbnRpZmllZC4gTGV0IG1lIGNoZWNrIGlmIGBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3Nlc2AgYW5kIGBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icGAgYXJlIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgZnV6emFibGUuIEFoLCB5ZXMsIHRoZXkncmUgc3RhdGljIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gRXhjZWxsZW50LiBTeXprYWxsZXIgKmNvdWxkKiBwb3RlbnRpYWxseSBmdXp6IHRoZW0gaWYgdGhleSBhcmUgcmVhY2hhYmxlLiBIb2xkIG9uLCBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgIGJlaW5nIHN0YXRpYyBtZWFucyBpdCBtaWdodCBub3QgYmUgZGlyZWN0bHkgZXhwb3NlZCB0byBTeXprYWxsZXIsIGJ1dCBpdCdzIGNhbGxlZCBieSBvdGhlciBmdW5jdGlvbnMsIHNvIGl0IGNhbiBzdGlsbCBiZSBmdXp6ZWQgaW5kaXJlY3RseS4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIGBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3Nlc2AgaXMgY2FsbGVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHJlYWNoYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA3NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzo1My4xNjc1MzkxMzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjAwMTg3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTc3NT1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FnZV9mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBhZ2UsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzgxLS8qIGNvbnZlcnQgYWNjZXNzIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKSB0byBucl9hY2Nlc3NlcyAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3ODI6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3NlcyhcXG5tbS9kYW1vbi9jb3JlLmMtNzgzLVxcdFxcdHVuc2lnbmVkIGludCBhY2Nlc3Nlc19icCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04MDE9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04MDMte1xcbm1tL2RhbW9uL2NvcmUuYzo4MDQ6XFx0cmV0dXJuIGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxcbm1tL2RhbW9uL2NvcmUuYy04MDUtXFx0XFx0XFx0ZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjEzOjU0Ljk4NzU2Mjk4OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA5MDU1NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRyc2AgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRyc2AuIFRoZSBuYW1lIHN1Z2dlc3RzIHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBudW1iZXIgb2YgYWNjZXNzZXMgY29uc2lkZXJlZCB3aGVuIGRlYWxpbmcgd2l0aCBuZXcgYXR0cmlidXRlcyBpbiBEQU1PTi4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaXRzIHJvbGUuIE15IG5leHQgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcy4gV2hlcmUgaXMgdGhpcyB0aGluZyBhY3R1YWxseSBiZWluZyB1c2VkIGluIHRoZSBjb2RlPyBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBmdW5jdGlvbiBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlIGJldHRlci4gS25vd2luZyAqd2hlcmUqIGl0J3MgY2FsbGVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nICp3aHkqIGl0IGV4aXN0cyBhbmQgd2hhdCBpdHMgaW1wYWN0IGlzLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGVtcGxveWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzE1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTM6NTguMDk2NjIxMzI1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA2NTM4NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTc5NT1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgwMC1cXG5tbS9kYW1vbi9jb3JlLmM6ODAxOnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsXFxubW0vZGFtb24vY29yZS5jLTgwMi1cXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODEwPXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgxNC1cXHRpZiAoIWFnZ3JlZ2F0aW5nKSB7XFxubW0vZGFtb24vY29yZS5jOjgxNTpcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnMoXFxubW0vZGFtb24vY29yZS5jLTgxNi1cXHRcXHRcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTgyNC1cXHRcXHQgKi9cXG5tbS9kYW1vbi9jb3JlLmM6ODI1OlxcdFxcdHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKFxcbm1tL2RhbW9uL2NvcmUuYy04MjYtXFx0XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzo1OS45MDMxNjQyNjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MzEzMTY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdGAgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gdGhpcyBmdW5jdGlvbiwgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdGAsIGlzIGNsZWFybHkgdGhlIGtleSB0byBzb21ldGhpbmcgaW1wb3J0YW50IHdpdGhpbiB0aGUgbW9uaXRvcmluZyBzeXN0ZW0uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBpdCdzIHdoZXJlIHRoZSBtb25pdG9yaW5nIGRhdGEgZ2V0cyB1cGRhdGVkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdHJhY2UgYmFjayBpdHMgY2FsbCBwYXRocy4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBUaGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgd29ya2Zsb3cgYW5kIGlkZW50aWZ5IHRoZSB0cmlnZ2VycyBhbmQgZGVwZW5kZW5jaWVzLiBPbmNlIEkga25vdyB3aG8ncyBjYWxsaW5nIGl0LCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpc3N1ZXMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBvcHRpbWl6YXRpb25zIHdpdGhpbiB0aGlzIHNwZWNpZmljIG1vZHVsZS4gTGV0J3MgZGlnIGluIGFuZCBmaW5kIHRob3NlIGNhbGwgc2l0ZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxNDowMi44NTYyOTgxMzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDU4NzA3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz03ODI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3NlcyhcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OTEtICogQ2FsbGVycyBzaG91bGQgZW5zdXJlIGF0dHJzLmFnZ3JfaW50ZXJ2YWwgaXMgbm90IHplcm8sIGxpa2VcXG5tbS9kYW1vbi9jb3JlLmM6NzkyOiAqIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoKSBkb2VzIC4gIE90aGVyd2lzZSwgZGl2aWRlLWJ5LXplcm8gd291bGRcXG5tbS9kYW1vbi9jb3JlLmMtNzkzLSAqIGhhcHBlbi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04MDE9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04MDktXFxubW0vZGFtb24vY29yZS5jOjgxMDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtODExLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NDAtICovXFxubW0vZGFtb24vY29yZS5jOjg0MTpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9jb3JlLmMtODQyLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLCBib29sIGFnZ3JlZ2F0aW5nKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTg1NS1cXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdClcXG5tbS9kYW1vbi9jb3JlLmM6ODU2OlxcdFxcdFxcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChcXG5tbS9kYW1vbi9jb3JlLmMtODU3LVxcdFxcdFxcdFxcdFxcdHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODk5PWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTkyOC1cXG5tbS9kYW1vbi9jb3JlLmM6OTI5OlxcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoY3R4LCBhdHRycywgYWdncmVnYXRpbmcpO1xcbm1tL2RhbW9uL2NvcmUuYy05MzAtXFx0Y3R4LVxcdTAwM2VhdHRycyA9ICphdHRycztcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD01MjY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTM4LVxcdCAqIHRoZSBjYXV0aW9uIGlzIGRvY3VtZW50ZWQgb24gdGhlIGNvbW1lbnQgZm9yIHRoZSBmdW5jdGlvbiwgYW5kXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjUzOTpcXHQgKiBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKCkgZG9lcyB0aGUgY2hlY2suICBTa2lwIHRoZSB0ZXN0IGluXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU0MC1cXHQgKiB0aGUgY2FzZS5cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD01NDg9c3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU2My1cXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMTAwLCAuYWdncl9pbnRlcnZhbCA9IDEwMDAwLH07XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjU2NDpcXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXFx1MDAyNm9sZF9hdHRycywgXFx1MDAyNm5ld19hdHRycywgZmFsc2UpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01NjUtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZW5yX2FjY2Vzc2VzLCAxNSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTY5LVxcdFxcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxLCAuYWdncl9pbnRlcnZhbCA9IDEwMDB9O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1NzA6XFx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFxcdTAwMjZvbGRfYXR0cnMsIFxcdTAwMjZuZXdfYXR0cnMsIGZhbHNlKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTcxLVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01NzUtXFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwfTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NTc2OlxcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcXHUwMDI2b2xkX2F0dHJzLCBcXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU3Ny1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbnJfYWNjZXNzZXMsIDE1MCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjE0OjA0LjY2MjE3MzA2MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg3MjU3NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gQ29kZSBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBEQU1PTiBjb2RlIGFnYWluLiBJIHNlZSB0aGF0IGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzYCBpcyBkaXJlY3RseSBjYWxsZWQgZnJvbSBgZGFtb25fc2V0X2F0dHJzYC4gVGhhdCBtYWtlcyBgZGFtb25fc2V0X2F0dHJzYCB0aGUgcmVhbCB3b3JraG9yc2UsIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHBheSBhdHRlbnRpb24gdG8uIEdpdmVuIHRoYXQsIEknbSBkZWZpbml0ZWx5IGdvaW5nIHRvIGFkZCBgZGFtb25fc2V0X2F0dHJzYCB0byBteSBGb2N1c1N5bWJvbHMgbGlzdC4gSXTigJlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBhbGwgaGFuZ3MgdG9nZXRoZXIuXG5cbkxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgY3VycmVudCBGb2N1c1N5bWJvbHMsIGp1c3QgdG8gYmUgc3VyZS4gSSd2ZSBnb3Q6XG5cbiogICBgZGFtb25fc2V0X2F0dHJzYCAod2hpY2ggSSBqdXN0IGNvbmZpcm1lZCBpcyBrZXkpXG4qICAgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgXG4qICAgYGRhbW9uX2hvdF9zY29yZWBcbiogICBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2BcblxuQWxyaWdodCwgYmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IGlmIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYCBpcyBleHBvcnRlZCBvciBpZiBpdCBpcyBsb2NhbC4gVGhhdOKAmWxsIGluZm9ybSBob3cgSSBhcHByb2FjaCB0cmFja2luZyBpdCBkb3duIHRoZSBjYWxsIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxMywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxNDowOC40NDk0MzI3MzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTMxMzc5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9NDA9c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxLSAqIG5vdCBiZSBkb25lIHdpdGggZGlyZWN0IGFjY2VzcyBidXQgd2l0aCB0aGUgaGVscGVyIGZ1bmN0aW9uLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MjogKiBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKCkuXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYzLSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAxNj1pbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAxNy1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDE4OnZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDE5LVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM3NTA9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tb3Zpbmdfc3VtKHVuc2lnbmVkIGludCBtdnN1bSwgdW5zaWduZWQgaW50IG5vbXZzdW0sXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzc1Ni0vKipcXG5tbS9kYW1vbi9jb3JlLmM6Mzc1NzogKiBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKCkgLSBVcGRhdGUgdGhlIGFjY2VzcyByYXRlIG9mIGEgcmVnaW9uLlxcbm1tL2RhbW9uL2NvcmUuYy0zNzU4LSAqIEByOlxcdFxcdFRoZSBEQU1PTiByZWdpb24gdG8gdXBkYXRlIGZvciBpdHMgYWNjZXNzIGNoZWNrIHJlc3VsdC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzY2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNzY3OnZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLFxcbm1tL2RhbW9uL2NvcmUuYy0zNzY4LVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTg0PXN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTk1LVxcdFxcdFxcdFxcdEFMSUdOX0RPV04oc2FtcGxpbmdfYWRkciwgbGFzdF9mb2xpb19zeikpIHtcXG5tbS9kYW1vbi9wYWRkci5jOjk2OlxcdFxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xcbm1tL2RhbW9uL3BhZGRyLmMtOTctXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xMDAtXFx0bGFzdF9hY2Nlc3NlZCA9IGRhbW9uX3BhX3lvdW5nKHNhbXBsaW5nX2FkZHIsIFxcdTAwMjZsYXN0X2ZvbGlvX3N6KTtcXG5tbS9kYW1vbi9wYWRkci5jOjEwMTpcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcXG5tbS9kYW1vbi9wYWRkci5jLTEwMi1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NDk3PXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy01MDUtXFx0aWYgKCFtbSkge1xcbm1tL2RhbW9uL3ZhZGRyLmM6NTA2OlxcdFxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgZmFsc2UsIGF0dHJzKTtcXG5tbS9kYW1vbi92YWRkci5jLTUwNy1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTUxMi1cXHRcXHRcXHRcXHRBTElHTl9ET1dOKHItXFx1MDAzZXNhbXBsaW5nX2FkZHIsIGxhc3RfZm9saW9fc3opKSkge1xcbm1tL2RhbW9uL3ZhZGRyLmM6NTEzOlxcdFxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtNTE0LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNTE3LVxcdGxhc3RfYWNjZXNzZWQgPSBkYW1vbl92YV95b3VuZyhtbSwgci1cXHUwMDNlc2FtcGxpbmdfYWRkciwgXFx1MDAyNmxhc3RfZm9saW9fc3opO1xcbm1tL2RhbW9uL3ZhZGRyLmM6NTE4OlxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtNTE5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxNDoxMC4zNjI1NzYwNDdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNDQ5MDk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIENvZGViYXNlKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIERBTU9OIGNvZGUsIGFuZCBpdCdzIGNsZWFyIHRoZSBjYWxsIEknbSBpbnRlcmVzdGVkIGluLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIG9yaWdpbmF0ZXMgZnJvbSBib3RoIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaGF0J3MgaGVscGZ1bC4gVGhpcyBjb25maXJtcyBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAgaXMgYSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24sIGEgZ29vZCBGb2N1c1N5bWJvbCBhcyB3ZSBzYXkgaW4gdGhlIGZpZWxkLlxuXG5Ob3csIHdoZXJlIGRvZXMgaXQgbGVhZD8gV2hhdCBpcyB0aGUgbmV4dCBsb2dpY2FsIGZ1bmN0aW9uIHRvIGNoZWNrPyBMZXQgbWUgc2VlLi4uIEkgdGhpbmsgdGhlIG5leHQgbmF0dXJhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkYW1vbl9ob3Rfc2NvcmVgIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhY2Nlc3MgcmF0ZSBpcyBiZWluZyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU0NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjE0OjEzLjg5NzA2OTUwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3OTQzNzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9ob3Rfc2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vb3BzLWNvbW1vbi5jPTc1PXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwNS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTA2OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTA3LVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNTA9aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNTIte1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNTM6XFx0aW50IGhvdG5lc3MgPSBkYW1vbl9ob3Rfc2NvcmUoYywgciwgcyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE1NC1cXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uaD0xNz1pbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xOC1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxOTppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTIwLVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcyk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTQyMD1zdGF0aWMgaW50IGRhbW9uX3BhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00MjYtXFx0Y2FzZSBEQU1PU19MUlVfUFJJTzpcXG5tbS9kYW1vbi9wYWRkci5jOjQyNzpcXHRcXHRyZXR1cm4gZGFtb25faG90X3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XFxubW0vZGFtb24vcGFkZHIuYy00MjgtXFx0Y2FzZSBEQU1PU19MUlVfREVQUklPOlxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00MzAtXFx0Y2FzZSBEQU1PU19NSUdSQVRFX0hPVDpcXG5tbS9kYW1vbi9wYWRkci5jOjQzMTpcXHRcXHRyZXR1cm4gZGFtb25faG90X3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XFxubW0vZGFtb24vcGFkZHIuYy00MzItXFx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTk0Mj1zdGF0aWMgaW50IGRhbW9uX3ZhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy05NDktXFx0Y2FzZSBEQU1PU19NSUdSQVRFX0hPVDpcXG5tbS9kYW1vbi92YWRkci5jOjk1MDpcXHRcXHRyZXR1cm4gZGFtb25faG90X3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XFxubW0vZGFtb24vdmFkZHIuYy05NTEtXFx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjE0OjE1Ljc3NjUxMTg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzM3MDIwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZDpcblxuKipBc3Nlc3NpbmcgRm9jdXMgYW5kIFBhcmFtZXRlciBBcHBsaWNhdGlvbioqXG5cblJpZ2h0LCBgZGFtb25faG90X3Njb3JlYCAtIHRoYXQgKmlzKiBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGEgRm9jdXNTeW1ib2wuIEl0IHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBzdGFydGluZyBwb2ludCBmb3IgZGlyZWN0aW5nIG91ciBhdHRlbnRpb24sIGEgd2VsbC1kZWZpbmVkIHBvaW50IG9mIGludGVyZXN0LiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBhY3Rpb24sIEkgbXVzdCBkb3VibGUgY2hlY2sgYW5kIHVuZGVyc3RhbmQgaG93IGl0IHdvdWxkIGludGVyZmFjZSB3aXRoIG90aGVyIHN5c3RlbXMuXG5cbkkgbmVlZCB0byBxdWlja2x5IHNoaWZ0IGdlYXJzIGFuZCBzY3J1dGluaXplIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCwgYW5kIHRoZWlyIGJlaGF2aW9yLCB3aWxsIGNvcnJlY3RseSB3b3JrLiBJJ20gdGhpbmtpbmcgSSBtdXN0IHZlcmlmeSB0aGF0IGBkYW1vbl9ob3Rfc2NvcmVgIGNhbiBiZSBlZmZlY3RpdmVseSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgZXhpc3RpbmcgZnJhbWV3b3JrIGFuZCBhbGdvcml0aG1zIGZvciBzb3J0aW5nIGFuZCBhcHBseWluZyBwYXJhbWV0ZXJzLiBUaGlzIHJlcXVpcmVzIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBwYXJhbWV0ZXIgYXBwbGljYXRpb24gcHJvY2VzcyBpbiByZWxhdGlvbiB0byB0aGF0IEZvY3VzU3ltYm9sLCBvdGhlcndpc2Ugd2UnbGwgcnVuIGludG8gdHJvdWJsZSBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ5MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjE0OjE5LjQ1MDIxNjg1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTUyNTgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmM9MjUxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNzItXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNzM6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNzQte1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0zNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1MC17XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNTE6XFx0cmV0dXJuIGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMoKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1Mi19XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQxNT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIxLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDIyOlxcdGVyciA9IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMoKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMy1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxNDoyMS4zNTU3NzUwMjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4Mzk1NTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFJlYWNoYWJpbGl0eSBmb3IgUG90ZW50aWFsIEZ1enppbmcqKlxuXG5SaWdodCwgc28gdGhpcyBmdW5jdGlvbiwgd2hhdGV2ZXIgaXQgaXMsIHNlZW1zIHRvIGJlIGEgc3RhdGljIHBpZWNlIG9mIGNvZGUsIGJ1dCBpdCdzIGNhbGxlZCBmcm9tIGBkYW1vbl9scnVfc29ydF90dXJuYCBhbmQgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm5gLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBzZXRzIG9mZiB0aGUgbWVudGFsIGFsYXJtIGJlbGxzIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSWYgU3l6a2FsbGVyIGNhbiBhY3R1YWxseSAqcmVhY2gqIHRoaXMgdGhpbmcgdGhyb3VnaCB0aG9zZSBjYWxsIHBhdGhzLCB0aGVuIHdlJ3ZlIGdvdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3Igc29tZSBmdXp6aW5nIGdvb2RuZXNzLiBUaGUgZmFjdCB0aGF0IGl0J3MgY2FsbGVkIGZyb20gdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGlzIHdvcnRoIG5vdGluZywgc3VnZ2VzdGluZyBhIHBhcnRpY3VsYXIgY29udGV4dCBvciBvcGVyYXRpb25hbCBzdGFnZSB3aXRoaW4gREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBkaXZlIGludG8gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGF0aCBmb3J3YXJkIGZyb20gdGhvc2UgY2FsbGVycyB0byB1bmRlcnN0YW5kIGlmIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBpcyB2YWxpZC4gSSdsbCBjaGVjayBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgc2VlIGhvdyB0aGUgaW5wdXRzIGFyZSBwcm9jZXNzZWQgYW5kIHdoZXJlIHRoZXkgYXJlIGRlcml2ZWQsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgcmVhbCB2dWxuZXJhYmlsaXR5IHBvdGVudGlhbCBvZnRlbiBsaWVzLiBUaGF0IHNob3VsZCBjbGFyaWZ5IGlmIHRoaXMgcGF0aCBpcyBhY3R1YWxseSB2aWFibGUgZm9yIHRyaWdnZXJpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nIHRocm91Z2ggU3l6a2FsbGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA3OSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjE0OjI2LjAzOTczMjc2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NTY5NzA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jPTE2OT1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTE5NS1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MTk2OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxubW0vZGFtb24vcmVjbGFpbS5jLTE5Ny17XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9Mjc2PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjc3LXtcXG5tbS9kYW1vbi9yZWNsYWltLmM6Mjc4OlxcdHJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjc5LX1cXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzg9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDQtXFxubW0vZGFtb24vcmVjbGFpbS5jOjM0NTpcXHRlcnIgPSBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ2LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjE0OjI4LjAwNTQzNDY3MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcwNDE3OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgdHVybmluZy4uLlxuXG4qKkFuYWx5emluZyBEQU1PTidzIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzKipcblxuUmlnaHQsIEknbSBwcm9jZXNzaW5nIHRoZSBjb21wb25lbnRzIHJlbGF0ZWQgdG8gREFNT04uIEkgc2VlIHRoYXQgdGhlcmUgYXJlIGEgZmV3IGtleSBzeW1ib2xzIHRvIGtlZXAgdHJhY2sgb2YsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIERBTU9OJ3MgZm9jdXMuIGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9ob3Rfc2NvcmVgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgaW1wb3J0YW50IEZvY3VzU3ltYm9scy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLiBJJ3ZlIGdvdCBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1JFQ0xBSU1gIGluIG1pbmQuIFRob3NlIGFyZSBvYnZpb3VzbHkgaW1wb3J0YW50IHRvby5cblxuQWxyaWdodCwgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGltcG9ydGFudCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIERBTU9OLiBKdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcyMSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxNDozMS41NzU4NTU3MThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODUyMTUxODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTQ6MzMuNTYxMDc2NTQyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxODkzOTMzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgVGVzdGluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIG5lZWQgdG8gYmUgZXhwbGljaXQgYWJvdXQgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcGF0Y2guIEknbGwgbWFrZSBzdXJlIHRvIGluY2x1ZGUgYERBTU9OX1ZBRERSYCBhbmQgYERBTU9OX1BBRERSYCwgdGhvc2UgYXJlIGRlZmluaXRlbHkgcmVsZXZhbnQuIEFuZCB0aGVuIEkgcmVtZW1iZXIsIG9mIGNvdXJzZSwgdGhhdCB3ZSBhbHNvIGhhdmUgYERBTU9OX1NUQVRgIHRvIGNvbnNpZGVyISBMZXQncyBnZXQgdGhhdCBhZGRlZCB0byB0aGUgbGlzdCBhcyB3ZWxsLlxuXG5IZXJlJ3MgdGhlIGN1cnJlbnQgY29uZmlnIHNpdHVhdGlvbjogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX0xSVV9TT1JUYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBhbmQgbm93IGBEQU1PTl9TVEFUYC5cblxuTGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaCBvbmUgbW9yZSB0aW1lOiBUaGUgZml4IGlzIGFib3V0IGF2b2lkaW5nIGEgZGl2aXNpb24gYnkgemVybyBpbiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYC4gQmFzaWNhbGx5LCB3ZSdyZSBtYWtpbmcgc3VyZSB0aGUgZGl2aXNvciAoYHNhbXBsZV9pbnRlcnZhbGApIGlzIG5ldmVyIGxlc3MgdGhhbiAxLiBUaGlzIGZ1bmN0aW9uIGlzIHByZXR0eSBpbXBvcnRhbnQsIHVzZWQgaW4gdGhlIGNvcmUgb2YgREFNT04gdG8gY2FsY3VsYXRlIGFjY2VzcyByYXRlcyBhbmQgaG90IHNjb3Jlcy4gU28sIGZ1enppbmcgaXMgKmFic29sdXRlbHkqIG5lZWRlZCB0byBjb25maXJtIHRoZSBmaXggYWN0dWFsbHkgKndvcmtzKiBhbmQgZG9lc24ndCBzY3JldyB1cCBvdGhlciB0aGluZ3MgaW4gREFNT04uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwcmV2ZW50cyBjcmFzaGVzIGFuZCBkb2Vzbid0IG1lc3MgdXAgREFNT04ncyBiZWhhdmlvciBpbiBvdGhlciB3YXlzLlxuXG5JJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZm9sbG93aW5nIHN5bWJvbHMgZm9yIHRlc3Rpbmc6IGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9ob3Rfc2NvcmVgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gSSdsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgdXNhZ2Ugb2YgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AgaW4gYG1tL2RhbW9uL3N0YXQuY2AgdG8gYmUgY29tcGxldGVseSBjb25maWRlbnQuXG5cblVsdGltYXRlbHksIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgY29uZmlncyBhcmUgZW5hYmxlZDogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX0xSVV9TT1JUYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1NUQVRgLiBJdCdzIGEgY29tcHJlaGVuc2l2ZSBzZXQsIGJ1dCBuZWNlc3NhcnkgZm9yIHRob3JvdWdoIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxNDozOS43NTA0NzIzOTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTMyODg5NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbWF4X25yX2FjY2Vzc2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N0YXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTQ6MzkuODU5ODE1MTM0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjkzNzUyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIGNvbnZleWluZyB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlYmFzZTogVHJhY2luZyBgZGFtb25fc2V0X2F0dHJzYCBVc2FnZSoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB3aGVyZSBgZGFtb25fc2V0X2F0dHJzYCBpcyBiZWluZyB1c2VkLiBGaXJzdCB0aGluZyBJIGNoZWNrIGlzIGBtbS9kYW1vbi9zdGF0LmNgLCBhc3N1bWluZyBpdCdzIGEgcHJpbWUgY2FuZGlkYXRlLiBOb3BlLCBpdCdzIG5vdCBkaXJlY3RseSBjYWxsZWQgdGhlcmUuIEludGVyZXN0aW5nLi4uIHNvLCB3aGVyZSBpcyBpdCBiZWluZyB1c2VkPyBUaW1lIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjYWxsIGhpZXJhcmNoeS4gSSdtIGdvaW5nIHRvIHRyYWNrIHRoZSBmdW5jdGlvbiBjYWxscyB0byBmaW5kIHdoZXJlIHRoaXMgbWV0aG9kIGlzIHVzZWQuIE5vdywgSSB3aWxsIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgbWV0aG9kLiBUaGF0IHNob3VsZCBoZWxwIG1lIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NTUsIk91dHB1dFRva2VucyI6MjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTQ6NDQuMjI5MTkzMDgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1OTE3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1RBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3NldF9hdHRyc1wiLFxuICAgIFwiZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZVwiLFxuICAgIFwiZGFtb25faG90X3Njb3JlXCIsXG4gICAgXCJkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkaXZpc2lvbiBieSB6ZXJvIGluIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgIGJ5IGVuc3VyaW5nIHRoZSBkaXZpc29yIGBzYW1wbGVfaW50ZXJ2YWxgIGlzIGF0IGxlYXN0IDEuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBjb3JlIERBTU9OIGxvZ2ljLCBzdWNoIGFzIHVwZGF0aW5nIHJlZ2lvbiBhY2Nlc3MgcmF0ZXMgYW5kIGNhbGN1bGF0aW5nIGhvdCBzY29yZXMuIEZ1enppbmcgaXMgbmVlZGVkIHRvIHZlcmlmeSB0aGF0IHRoZSBmaXggY29ycmVjdGx5IHByZXZlbnRzIGNyYXNoZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIGluIERBTU9OJ3MgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TVEFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc2V0X2F0dHJzXCIsXG4gICAgXCJkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlXCIsXG4gICAgXCJkYW1vbl9ob3Rfc2NvcmVcIixcbiAgICBcImRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgICBcImRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGRpdmlzaW9uIGJ5IHplcm8gaW4gYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AgYnkgZW5zdXJpbmcgdGhlIGRpdmlzb3IgYHNhbXBsZV9pbnRlcnZhbGAgaXMgYXQgbGVhc3QgMS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNvcmUgREFNT04gbG9naWMsIHN1Y2ggYXMgdXBkYXRpbmcgcmVnaW9uIGFjY2VzcyByYXRlcyBhbmQgY2FsY3VsYXRpbmcgaG90IHNjb3Jlcy4gRnV6emluZyBpcyBuZWVkZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpeCBjb3JyZWN0bHkgcHJldmVudHMgY3Jhc2hlcyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgaW4gREFNT04ncyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow58r8x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-19 21:07:40 +0000 UTC FinishedAt: 2026-06-19 21:14:45 +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": "cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_LRU_SORT", "DAMON_RECLAIM", "DAMON_VADDR", "DAMON_PADDR", "DAMON_STAT" ], "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": "cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_LRU_SORT", "DAMON_RECLAIM", "DAMON_VADDR", "DAMON_PADDR", "DAMON_STAT" ], "series_id": "dc17a10d-920f-489a-896c-5fe65670f292" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_set_attrs", "damon_update_region_access_rate", "damon_hot_score", "damon_lru_sort_apply_parameters", "damon_reclaim_apply_parameters" ], "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+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1RBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NldF9hdHRycyYjMzQ7LAogICAgJiMzNDtkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlJiMzNDssCiAgICAmIzM0O2RhbW9uX2hvdF9zY29yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkaXZpc2lvbiBieSB6ZXJvIGluIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgIGJ5IGVuc3VyaW5nIHRoZSBkaXZpc29yIGBzYW1wbGVfaW50ZXJ2YWxgIGlzIGF0IGxlYXN0IDEuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBjb3JlIERBTU9OIGxvZ2ljLCBzdWNoIGFzIHVwZGF0aW5nIHJlZ2lvbiBhY2Nlc3MgcmF0ZXMgYW5kIGNhbGN1bGF0aW5nIGhvdCBzY29yZXMuIEZ1enppbmcgaXMgbmVlZGVkIHRvIHZlcmlmeSB0aGF0IHRoZSBmaXggY29ycmVjdGx5IHByZXZlbnRzIGNyYXNoZXMgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBpbiBEQU1PTiYjMzk7cyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlmYTQ1OTAwYzBhM2E1NzBiYmFmMjY2MDcwYTg4ZDljMWExNWQ3YzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAxOSAyMToxMzoxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDZmN2VkYjM1OTBlZjk3Li44M2I0M2Q4ZmZlZjM4YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtMTA2NSw4ICYjNDM7MTA2NSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhbW9uX21heF9ucl9hY2Nlc3Nlcyhjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGF0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcbiYjNDM7XG4gXHQvKiB7YWdncixzYW1wbGV9X2ludGVydmFsIGFyZSB1bnNpZ25lZCBsb25nLCBoZW5jZSBjb3VsZCBvdmVyZmxvdyAqL1xuLVx0cmV0dXJuIG1pbihhdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gYXR0cnMtXHUwMDNlc2FtcGxlX2ludGVydmFsLFxuJiM0MztcdHJldHVybiBtaW4oYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbCxcbiBcdFx0XHQodW5zaWduZWQgbG9uZylVSU5UX01BWCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1RBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NldF9hdHRycyYjMzQ7LAogICAgJiMzNDtkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlJiMzNDssCiAgICAmIzM0O2RhbW9uX2hvdF9zY29yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkaXZpc2lvbiBieSB6ZXJvIGluIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgIGJ5IGVuc3VyaW5nIHRoZSBkaXZpc29yIGBzYW1wbGVfaW50ZXJ2YWxgIGlzIGF0IGxlYXN0IDEuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBjb3JlIERBTU9OIGxvZ2ljLCBzdWNoIGFzIHVwZGF0aW5nIHJlZ2lvbiBhY2Nlc3MgcmF0ZXMgYW5kIGNhbGN1bGF0aW5nIGhvdCBzY29yZXMuIEZ1enppbmcgaXMgbmVlZGVkIHRvIHZlcmlmeSB0aGF0IHRoZSBmaXggY29ycmVjdGx5IHByZXZlbnRzIGNyYXNoZXMgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBpbiBEQU1PTiYjMzk7cyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWZhNDU5MDBjMGEzYTU3MGJiYWYyNjYwNzBhODhkOWMxYTE1ZDdjNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDE5IDIxOjEzOjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDZmN2VkYjM1OTBlZjk3Li44M2I0M2Q4ZmZlZjM4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaApAQCAtMTA2NSw4ICYjNDM7MTA2NSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoY29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycykKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBhdHRycy0mZ3Q7c2FtcGxlX2ludGVydmFsID8gOiAxOwomIzQzOwogCS8qIHthZ2dyLHNhbXBsZX1faW50ZXJ2YWwgYXJlIHVuc2lnbmVkIGxvbmcsIGhlbmNlIGNvdWxkIG92ZXJmbG93ICovCi0JcmV0dXJuIG1pbihhdHRycy0mZ3Q7YWdncl9pbnRlcnZhbCAvIGF0dHJzLSZndDtzYW1wbGVfaW50ZXJ2YWwsCiYjNDM7CXJldHVybiBtaW4oYXR0cnMtJmd0O2FnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWwsCiAJCQkodW5zaWduZWQgbG9uZylVSU5UX01BWCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgbW9kaWZpZWQgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AuIEFoLCByaWdodCwgdGhlIGlzc3VlIGhlcmUgaXMgdGhlIHBvdGVudGlhbCBmb3IgYSBkaXZpc2lvbiBieSB6ZXJvIGlmIGBhdHRycy0mZ3Q7c2FtcGxlX2ludGVydmFsYCBpcyB6ZXJvLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyB0cmFwISBTbWFydCBtb3ZlIHRvIGNhdGNoIHRoYXQuCgpUaGUgc29sdXRpb24gaXMgdG8gcmVwbGFjZSB0aGUgb3JpZ2luYWwgZGl2aXNpb24gYGF0dHJzLSZndDthZ2dyX2ludGVydmFsIC8gYXR0cnMtJmd0O3NhbXBsZV9pbnRlcnZhbGAgd2l0aCBgYXR0cnMtJmd0O2FnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWxgLCB3aGVyZSBgc2FtcGxlX2ludGVydmFsYCBpcyBhIHRlcm5hcnkgZXhwcmVzc2lvbiBzZXR0aW5nIGl0IHRvIGBhdHRycy0mZ3Q7c2FtcGxlX2ludGVydmFsID8gOiAxYC4gSW4gb3RoZXIgd29yZHMsIGlmIGBhdHRycy0mZ3Q7c2FtcGxlX2ludGVydmFsYCBpcyB6ZXJvLCB3ZSYjMzk7cmUgZWZmZWN0aXZlbHkgZGVmYXVsdGluZyB0byAxLCBwcmV2ZW50aW5nIHRoZSBkaXZpc2lvbi1ieS16ZXJvIGVycm9yLiBNYWtlcyBwZXJmZWN0IHNlbnNlLgoKTm93LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgIGlzIGFjdHVhbGx5ICp1c2VkKi4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIHRoZSBpbXBhY3QgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhpcyBmaXguIEdvdHRhIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUsIHlvdSBrbm93PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX21heF9ucl9hY2Nlc3NlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2MT1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY1LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA2Ny17XG4tLVxubW0vZGFtb24vY29yZS5jPTc4Mj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy03ODQte1xubW0vZGFtb24vY29yZS5jOjc4NTpcdHJldHVybiBhY2Nlc3Nlc19icCAqIGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycykgLyAxMDAwMDtcbm1tL2RhbW9uL2NvcmUuYy03ODYtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz03OTU9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzk3LXtcbm1tL2RhbW9uL2NvcmUuYzo3OTg6XHRyZXR1cm4gbXVsdF9mcmFjKG5yX2FjY2Vzc2VzLCAxMDAwMCwgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSk7XG5tbS9kYW1vbi9jb3JlLmMtNzk5LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzc2Nz12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc3Ni1cdGlmIChhdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwpXG5tbS9kYW1vbi9jb3JlLmM6Mzc3NzpcdFx0bGVuX3dpbmRvdyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMzc3OC1cdHItXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSBkYW1vbl9tb3Zpbmdfc3VtKHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzM9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMTItXHRlcnIgPSAtRU5PTUVNO1xubW0vZGFtb24vbHJ1X3NvcnQuYzozMTM6XHRob3RfdGhyZXMgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXHUwMDI2YXR0cnMpICpcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzE0LVx0XHRob3RfdGhyZXNfYWNjZXNzX2ZyZXEgLyAxMDAwO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xMDY9aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMTYtXHRmcmVxX3N1YnNjb3JlID0gci1cdTAwM2Vucl9hY2Nlc3NlcyAqIERBTU9OX01BWF9TVUJTQ09SRSAvXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTE3Olx0XHRkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXHUwMDI2Yy1cdTAwM2VhdHRycyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AuIEludGVyZXN0aW5nLiBUaGlzIGZ1bmN0aW9uIGFwcGVhcnMgdG8gYmUgdXNlZCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlcyB3aXRoaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW06IHNwZWNpZmljYWxseSwgYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9scnVfc29ydC5jYCwgYW5kIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLiBUaGF0IHBsYWNlcyBpdCBmaXJtbHkgd2l0aGluIERBTU9OJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCYjMzk7cyBpdHMgdmlzaWJpbGl0eT8gSXMgaXQgb25seSB1c2VkIGludGVybmFsbHksIG9yIGlzIGl0IGV4cG9zZWQ/IENvbnNpZGVyaW5nIERBTU9OJiMzOTtzIHJvbGUgYXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzIG9yIGRlYnVnZnMsIEkmIzM5O2Qgc2F5IGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gbm93IGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiBpdHMgYmVoYXZpb3Igd2l0aGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgREFNT04gQ29uZmlndXJhdGlvbjogQSBUYXJnZXRlZCBBcHByb2FjaCoqCgpPa2F5LCBzbyB0aGUgY29uZmlnIGluIHF1ZXN0aW9uIGhlcmUgaXMgYERBTU9OYC4gTG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgZGl2aXNpb24tYnktemVybywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCByZWFzb24gdG8gcGF5IGF0dGVudGlvbi4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IGlzIGZ1enppbmcgdGhpcyB3b3J0aHdoaWxlPyBBYnNvbHV0ZWx5ISBGaXhpbmcgYSBidWcgaW4gY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gREFNT04sIGlzIGRlZmluaXRlbHkgZnV6emluZy13b3J0aHkuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczogd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUgcHJpbWUgdGFyZ2V0cz8gSSBzZWUgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AsIGJ1dCB0aGF0JiMzOTtzIGlubGluZSwgc28gaXQmIzM5O3MgcHJvYmFibHkgbm90IHRoZSBkaXJlY3QgcG9pbnQgb2YgYXR0YWNrLiBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyAqY2FsbGluZyogaXQuIFNvLCB0aGF0IG5hcnJvd3MgaXQgZG93biB0byBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgLCBgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnBgLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGBkYW1vbl9ob3Rfc2NvcmVgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGxpa2VseSBjdWxwcml0cywgYXQgbGVhc3QgaW5pdGlhbGx5LgoKQnV0IEkmIzM5O20gbm90IGdvaW5nIHRvIHN0b3AgdGhlcmUuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwb3RlbnRpYWwgY2FsbCBzaXRlcy4uLiB0aG9yb3VnaG5lc3MgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX21heF9ucl9hY2Nlc3NlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2MT1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY1LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA2Ny17XG4tLVxubW0vZGFtb24vY29yZS5jPTc4Mj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy03ODQte1xubW0vZGFtb24vY29yZS5jOjc4NTpcdHJldHVybiBhY2Nlc3Nlc19icCAqIGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycykgLyAxMDAwMDtcbm1tL2RhbW9uL2NvcmUuYy03ODYtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz03OTU9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzk3LXtcbm1tL2RhbW9uL2NvcmUuYzo3OTg6XHRyZXR1cm4gbXVsdF9mcmFjKG5yX2FjY2Vzc2VzLCAxMDAwMCwgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSk7XG5tbS9kYW1vbi9jb3JlLmMtNzk5LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzc2Nz12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc3Ni1cdGlmIChhdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwpXG5tbS9kYW1vbi9jb3JlLmM6Mzc3NzpcdFx0bGVuX3dpbmRvdyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMzc3OC1cdHItXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSBkYW1vbl9tb3Zpbmdfc3VtKHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzM9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMTItXHRlcnIgPSAtRU5PTUVNO1xubW0vZGFtb24vbHJ1X3NvcnQuYzozMTM6XHRob3RfdGhyZXMgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXHUwMDI2YXR0cnMpICpcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzE0LVx0XHRob3RfdGhyZXNfYWNjZXNzX2ZyZXEgLyAxMDAwO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xMDY9aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMTYtXHRmcmVxX3N1YnNjb3JlID0gci1cdTAwM2Vucl9hY2Nlc3NlcyAqIERBTU9OX01BWF9TVUJTQ09SRSAvXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTE3Olx0XHRkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXHUwMDI2Yy1cdTAwM2VhdHRycyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBDYWxsZXJzIGFuZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGNhbGxlcnMgcmV2ZWFscyBhIGNvcmUgc2V0OiBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgLCBgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnBgLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGBkYW1vbl9ob3Rfc2NvcmVgLiBJbW1lZGlhdGVseSwgSSBzZWUgc29tZSBwYXR0ZXJucy4gYGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzYCBhbmQgYGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwYCBzZWVtIHRvIGJlIHN0YXRpYyBjb21wb25lbnRzLCBwcm9iYWJseSBpbnRlcm5hbCBjb252ZXJzaW9uIGZ1bmN0aW9ucy4gYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgIGlzIGxpa2VseSBhbiBleHBvcnRlZCBmdW5jdGlvbiwgZ2xvYmFsIGluIHNjb3BlIGZvciBvdGhlciBtb2R1bGVzIHRvIHVzZS4gYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgIGFwcGVhcnMgdG8gYmUgc3RhdGljIHdpdGhpbiB0aGUgREFNT04gY29udGV4dCBhbmQgdGhlbiBgZGFtb25faG90X3Njb3JlYCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24uIEkga25vdyBJJiMzOTtsbCBiZSBsb29raW5nIGF0IGhvdyB1c2Vyc3BhY2UgaW50ZXJhY3RzLiBJIHNlZSB0aGF0IGBEQU1PTl9MUlVfU09SVGAgaXMgaW1wb3J0YW50IGZvciBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AuIE15IGluc3RpbmN0cyBzYXkgdGhhdCBgREFNT05fU1lTRlNgIGlzIHRoZSBrZXkgZm9yIGNvbmZpZ3VyaW5nIERBTU9OIGZyb20gdXNlcnNwYWNlLCB3aGljaCB3b3VsZCBtYWtlIHNlbnNlLiBBbmQsIHRoaW5raW5nIGFib3V0IGhvdyB0aGluZ3MgYXJlIHVzZWQsIGBEQU1PTl9WQUREUmAgYW5kIGBEQU1PTl9QQUREUmAgcmVwcmVzZW50IHRoZSBvcGVyYXRpb25zIHRoZW1zZWx2ZXMuIEkgbmVlZCB0byB0YWtlIHRoZXNlIGFsbCBpbnRvIGNvbnNpZGVyYXRpb24uCgpUaGVyZWZvcmUsIGZvciB0aGlzIHBhcnRpY3VsYXIgdXNlIGNhc2UsIEkmIzM5O2xsIGRlZmluaXRlbHkgYmUgaW5jbHVkaW5nIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fTFJVX1NPUlRgIHdoZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGV0YWlscy4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgc2FtcGxlX2ludGVydmFsYCBpcyBiZWluZyBzZXQuIEkgc2hvdWxkIGxvb2sgYXQgYGRhbW9uX3NldF9hdHRyc2Agb3Igc2ltaWxhciBmdW5jdGlvbnMsIGFzIHRoYXQgd291bGQgYmUgYSBsb2dpY2FsIHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zZXRfYXR0cnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTgwND1zdHJ1Y3QgZGFtb25fYXR0cnMge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC04MTMtXHQgKiBAYWdncl9pbnRlcnZhbCB0byBAc2FtcGxlX2ludGVydmFsIHJhdGlvLlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjgxNDpcdCAqIENvcmUtZXh0ZXJuYWwgY29tcG9uZW50cyBjYWxsIGRhbW9uX3NldF9hdHRycygpIHdpdGggXHUwMDI2ZGFtb25fYXR0cnNcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MTU6XHQgKiB0aGF0IHRoaXMgZmllbGQgaXMgdW5zZXQuICBJbiB0aGUgY2FzZSwgZGFtb25fc2V0X2F0dHJzKCkgc2V0cyB0aGlzXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODE2LVx0ICogZmllbGQgb2YgcmVzdWx0aW5nIFx1MDAyNmRhbW9uX2F0dHJzLiAgQ29yZS1pbnRlcm5hbCBjb21wb25lbnRzIHN1Y2ggYXNcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MTc6XHQgKiBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKCkgY2FsbHMgZGFtb25fc2V0X2F0dHJzKCkgd2l0aCBcdTAwMjZkYW1vbl9hdHRyc1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjgxODpcdCAqIHRoYXQgdGhpcyBmaWVsZCBpcyBzZXQuICBJbiB0aGUgY2FzZSwgZGFtb25fc2V0X2F0dHJzKCkganVzdCBrZWVwXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODE5LVx0ICogaXQuXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNTE9dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNTI6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTMtdm9pZCBkYW1vbl9zZXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vY29yZS5jPTg2ND1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy04NzktLyoqXG5tbS9kYW1vbi9jb3JlLmM6ODgwOiAqIGRhbW9uX3NldF9hdHRycygpIC0gU2V0IGF0dHJpYnV0ZXMgZm9yIHRoZSBtb25pdG9yaW5nLlxubW0vZGFtb24vY29yZS5jLTg4MS0gKiBAY3R4Olx0XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODk4LSAqL1xubW0vZGFtb24vY29yZS5jOjg5OTppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbm1tL2RhbW9uL2NvcmUuYy05MDAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTczPWludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjAzLVx0ICogc2NoZW1lcyBhbmQgdGFyZ2V0cyBzaG91bGQgYmUgdXBkYXRlZCBmaXJzdCwgc2luY2Vcbm1tL2RhbW9uL2NvcmUuYzoxNjA0Olx0ICogMS4gZGFtb25fc2V0X2F0dHJzKCkgdXBkYXRlcyBtb25pdG9yaW5nIHJlc3VsdHMgb2YgdGFyZ2V0cyBhbmRcbm1tL2RhbW9uL2NvcmUuYy0xNjA1LVx0ICogbmV4dF9hcHBseV9zaXMgb2Ygc2NoZW1lcywgYW5kXG4tLVxubW0vZGFtb24vY29yZS5jLTE2MDktXHRpZiAoIWRhbW9uX2F0dHJzX2VxdWFscyhcdTAwMjZkc3QtXHUwMDNlYXR0cnMsIFx1MDAyNnNyYy1cdTAwM2VhdHRycykpIHtcbm1tL2RhbW9uL2NvcmUuYzoxNjEwOlx0XHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMoZHN0LCBcdTAwMjZzcmMtXHUwMDNlYXR0cnMpO1xubW0vZGFtb24vY29yZS5jLTE2MTEtXHRcdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjA0ND1zdGF0aWMgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwNjItXHR0cmFjZV9kYW1vbl9tb25pdG9yX2ludGVydmFsc190dW5lKG5ld19hdHRycy5zYW1wbGVfaW50ZXJ2YWwpO1xubW0vZGFtb24vY29yZS5jOjIwNjM6XHRkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2bmV3X2F0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0yMDY0LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzQ3OT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzUwOC1cdFx0ICogYmUgY2hhbmdlZCBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgUmVhZCB0aGUgdmFsdWVzIGhlcmUsIGFuZFxubW0vZGFtb24vY29yZS5jOjM1MDk6XHRcdCAqIHVzZSB0aG9zZSBmb3IgdGhpcyBpdGVyYXRpb24uICBUaGF0IGlzLCBkYW1vbl9zZXRfYXR0cnMoKVxubW0vZGFtb24vY29yZS5jLTM1MTAtXHRcdCAqIHVwZGF0ZWQgbmV3IHZhbHVlcyBhcmUgcmVzcGVjdGVkIGZyb20gbmV4dCBpdGVyYXRpb24uXG4tLVxubW0vZGFtb24vY29yZS5jLTM1NjktXHRcdFx0XHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXG5tbS9kYW1vbi9jb3JlLmM6MzU3MDpcdFx0XHRcdCAqIGRhbW9uX3NldF9hdHRycygpIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZyb21cbm1tL2RhbW9uL2NvcmUuYy0zNTcxLVx0XHRcdFx0ICoga2RhbW9uZF90dW5lX2ludGVydmFsKCkgbWF5IHdyb25nbHkgdGhpbmtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzc2Nz12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc3My1cdCAqIHNhbXBsZV9pbnRlcnZhbCBjYW4gYmUgemVybywgYnV0IGNhbm5vdCBiZSBsYXJnZXIgdGhhblxubW0vZGFtb24vY29yZS5jOjM3NzQ6XHQgKiBhZ2dyX2ludGVydmFsLCBvd2luZyB0byB2YWxpZGF0aW9uIG9mIGRhbW9uX3NldF9hdHRycygpLlxubW0vZGFtb24vY29yZS5jLTM3NzUtXHQgKi9cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3Mz1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTMwNy1cdH1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MzA4Olx0ZXJyID0gZGFtb25fc2V0X2F0dHJzKHBhcmFtX2N0eCwgXHUwMDI2YXR0cnMpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zMDktXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTY9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjMxLVx0fVxubW0vZGFtb24vcmVjbGFpbS5jOjIzMjpcdGVyciA9IGRhbW9uX3NldF9hdHRycyhwYXJhbV9jdHgsIFx1MDAyNmF0dHJzKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzMtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTE3NS1cdH07XG5tbS9kYW1vbi9zdGF0LmM6MTc2Olx0aWYgKGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKSlcbm1tL2RhbW9uL3N0YXQuYy0xNzctXHRcdGdvdG8gZnJlZV9vdXQ7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xODc5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE4OTgtXHR9O1xubW0vZGFtb24vc3lzZnMuYzoxODk5Olx0cmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTkwMC19XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTU4Mz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU5My1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1OTQ6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNnZhbGlkX2F0dHJzKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTk1LVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01OTctXHRpbnZhbGlkX2F0dHJzLm1pbl9ucl9yZWdpb25zID0gMTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1OTg6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01OTktXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYwMS1cdGludmFsaWRfYXR0cnMubWF4X25yX3JlZ2lvbnMgPSA5O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjYwMjpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2aW52YWxpZF9hdHRycyksIC1FSU5WQUwpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYwMy1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjA1LVx0aW52YWxpZF9hdHRycy5hZ2dyX2ludGVydmFsID0gNDk5OTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MDY6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MDctXG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcbi0tXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTAzLVx0fTtcbnNhbXBsZXMvZGFtb24vbXRpZXIuYzoxMDQ6XHRpZiAoZGFtb25fc2V0X2F0dHJzKGN0eCwgXHUwMDI2YXR0cnMpKVxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEwNS1cdFx0Z290byBmcmVlX291dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA3NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBEaXZpc2lvbiBWdWxuZXJhYmlsaXR5IGluIERBTU9OKioKCk9rYXksIHNvIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHRoZSBjdWxwcml0IOKAkyB0aGUgZnVuY3Rpb24gdGhhdCBzZXRzIGBzYW1wbGVfaW50ZXJ2YWxgLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBkYW1vbl9zeXNmc19zZXRfYXR0cnNgLCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBhbmQgYGRhbW9uX3N0YXRfYnVpbGRfY3R4YC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBgc2FtcGxlX2ludGVydmFsYCBjb3VsZCBiZSB6ZXJvLCB3aGljaCwgb2YgY291cnNlLCByZXN1bHRzIGluIGEgZGl2aXNpb24gYnkgemVybyBlcnJvciB3aXRoaW4gYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AuIFRoZSBwYXRjaCBjbGVhcmx5IGZpeGVzIHRoaXMsIHNvIHRoaXMgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcgYXR0ZW50aW9uLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIGNhbGxlcnMgb2YgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AganVzdCB0byBiZSB0aG9yb3VnaC4gSSBzZWUgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgLCBgZGFtb25faG90X3Njb3JlYCwgYGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzYCwgYGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwYCwgYW5kIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYC4gUmlnaHQsIHRoZXNlIGFyZSBhbGwgY3JpdGljYWwuCgpHaXZlbiB0aGF0IGxpc3QsIEkmIzM5O20gZ29pbmcgdG8gYWRkIHRoZSBmb2xsb3dpbmcgdG8gbXkgRm9jdXNTeW1ib2xzOiBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9ob3Rfc2NvcmVgLCBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgLCBgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnBgLCBhbmQsIG9mIGNvdXJzZSwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgYW5kIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSYjMzk7dmUgaWRlbnRpZmllZC4gTGV0IG1lIGNoZWNrIGlmIGBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3Nlc2AgYW5kIGBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icGAgYXJlIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgZnV6emFibGUuIEFoLCB5ZXMsIHRoZXkmIzM5O3JlIHN0YXRpYyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEV4Y2VsbGVudC4gU3l6a2FsbGVyICpjb3VsZCogcG90ZW50aWFsbHkgZnV6eiB0aGVtIGlmIHRoZXkgYXJlIHJlYWNoYWJsZS4gSG9sZCBvbiwgYGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzYCBiZWluZyBzdGF0aWMgbWVhbnMgaXQgbWlnaHQgbm90IGJlIGRpcmVjdGx5IGV4cG9zZWQgdG8gU3l6a2FsbGVyLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IG90aGVyIGZ1bmN0aW9ucywgc28gaXQgY2FuIHN0aWxsIGJlIGZ1enplZCBpbmRpcmVjdGx5LiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzYCBpcyBjYWxsZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgcmVhY2hhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3NlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Nzc1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fYWdlX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IGFnZSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzgxLS8qIGNvbnZlcnQgYWNjZXNzIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKSB0byBucl9hY2Nlc3NlcyAqL1xubW0vZGFtb24vY29yZS5jOjc4MjpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxubW0vZGFtb24vY29yZS5jLTc4My1cdFx0dW5zaWduZWQgaW50IGFjY2Vzc2VzX2JwLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz04MDE9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3Nlcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODAzLXtcbm1tL2RhbW9uL2NvcmUuYzo4MDQ6XHRyZXR1cm4gZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXMoXG5tbS9kYW1vbi9jb3JlLmMtODA1LVx0XHRcdGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzE1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzYCBGdW5jdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnNgLiBUaGUgbmFtZSBzdWdnZXN0cyB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgbnVtYmVyIG9mIGFjY2Vzc2VzIGNvbnNpZGVyZWQgd2hlbiBkZWFsaW5nIHdpdGggbmV3IGF0dHJpYnV0ZXMgaW4gREFNT04uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyByb2xlLiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMuIFdoZXJlIGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgYmVpbmcgdXNlZCBpbiB0aGUgY29kZT8gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGZ1bmN0aW9uIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2UgYmV0dGVyLiBLbm93aW5nICp3aGVyZSogaXQmIzM5O3MgY2FsbGVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nICp3aHkqIGl0IGV4aXN0cyBhbmQgd2hhdCBpdHMgaW1wYWN0IGlzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBlbXBsb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Nzk1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoXG4tLVxubW0vZGFtb24vY29yZS5jLTgwMC1cbm1tL2RhbW9uL2NvcmUuYzo4MDE6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3Nlcyxcbm1tL2RhbW9uL2NvcmUuYy04MDItXHRcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmM9ODEwPXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy04MTQtXHRpZiAoIWFnZ3JlZ2F0aW5nKSB7XG5tbS9kYW1vbi9jb3JlLmM6ODE1Olx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcbm1tL2RhbW9uL2NvcmUuYy04MTYtXHRcdFx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XG4tLVxubW0vZGFtb24vY29yZS5jLTgyNC1cdFx0ICovXG5tbS9kYW1vbi9jb3JlLmM6ODI1Olx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKFxubW0vZGFtb24vY29yZS5jLTgyNi1cdFx0XHRcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTA4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgIEZ1bmN0aW9uKioKClJpZ2h0LCBzbyB0aGlzIGZ1bmN0aW9uLCBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0YCwgaXMgY2xlYXJseSB0aGUga2V5IHRvIHNvbWV0aGluZyBpbXBvcnRhbnQgd2l0aGluIHRoZSBtb25pdG9yaW5nIHN5c3RlbS4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0JiMzOTtzIHdoZXJlIHRoZSBtb25pdG9yaW5nIGRhdGEgZ2V0cyB1cGRhdGVkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdHJhY2UgYmFjayBpdHMgY2FsbCBwYXRocy4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBUaGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgd29ya2Zsb3cgYW5kIGlkZW50aWZ5IHRoZSB0cmlnZ2VycyBhbmQgZGVwZW5kZW5jaWVzLiBPbmNlIEkga25vdyB3aG8mIzM5O3MgY2FsbGluZyBpdCwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaXNzdWVzLCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3Igb3B0aW1pemF0aW9ucyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBtb2R1bGUuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpbmQgdGhvc2UgY2FsbCBzaXRlcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMjE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz03ODI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3Nlcyhcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzkxLSAqIENhbGxlcnMgc2hvdWxkIGVuc3VyZSBhdHRycy5hZ2dyX2ludGVydmFsIGlzIG5vdCB6ZXJvLCBsaWtlXG5tbS9kYW1vbi9jb3JlLmM6NzkyOiAqIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoKSBkb2VzIC4gIE90aGVyd2lzZSwgZGl2aWRlLWJ5LXplcm8gd291bGRcbm1tL2RhbW9uL2NvcmUuYy03OTMtICogaGFwcGVuLlxuLS1cbm1tL2RhbW9uL2NvcmUuYz04MDE9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3Nlcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODA5LVxubW0vZGFtb24vY29yZS5jOjgxMDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy04MTEtXHRcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODQwLSAqL1xubW0vZGFtb24vY29yZS5jOjg0MTpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL2NvcmUuYy04NDItXHRcdHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLCBib29sIGFnZ3JlZ2F0aW5nKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy04NTUtXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxubW0vZGFtb24vY29yZS5jOjg1NjpcdFx0XHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoXG5tbS9kYW1vbi9jb3JlLmMtODU3LVx0XHRcdFx0XHRyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz04OTk9aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTkyOC1cbm1tL2RhbW9uL2NvcmUuYzo5Mjk6XHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKGN0eCwgYXR0cnMsIGFnZ3JlZ2F0aW5nKTtcbm1tL2RhbW9uL2NvcmUuYy05MzAtXHRjdHgtXHUwMDNlYXR0cnMgPSAqYXR0cnM7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTUyNj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTM4LVx0ICogdGhlIGNhdXRpb24gaXMgZG9jdW1lbnRlZCBvbiB0aGUgY29tbWVudCBmb3IgdGhlIGZ1bmN0aW9uLCBhbmRcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1Mzk6XHQgKiBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKCkgZG9lcyB0aGUgY2hlY2suICBTa2lwIHRoZSB0ZXN0IGluXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTQwLVx0ICogdGhlIGNhc2UuXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTU0OD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU2My1cdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwMCx9O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjU2NDpcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcdTAwMjZvbGRfYXR0cnMsIFx1MDAyNm5ld19hdHRycywgZmFsc2UpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU2NS1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCAxNSk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU2OS1cdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwMH07XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NTcwOlx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTcxLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbnJfYWNjZXNzZXMsIDE1MCk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU3NS1cdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwfTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1NzY6XHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXHUwMDI2b2xkX2F0dHJzLCBcdTAwMjZuZXdfYXR0cnMsIGZhbHNlKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01NzctXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMTkgMjE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMTMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDb2RlIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgREFNT04gY29kZSBhZ2Fpbi4gSSBzZWUgdGhhdCBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0c2AgaXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gYGRhbW9uX3NldF9hdHRyc2AuIFRoYXQgbWFrZXMgYGRhbW9uX3NldF9hdHRyc2AgdGhlIHJlYWwgd29ya2hvcnNlLCB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBwYXkgYXR0ZW50aW9uIHRvLiBHaXZlbiB0aGF0LCBJJiMzOTttIGRlZmluaXRlbHkgZ29pbmcgdG8gYWRkIGBkYW1vbl9zZXRfYXR0cnNgIHRvIG15IEZvY3VzU3ltYm9scyBsaXN0LiBJdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGFsbCBoYW5ncyB0b2dldGhlci4KCkxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgY3VycmVudCBGb2N1c1N5bWJvbHMsIGp1c3QgdG8gYmUgc3VyZS4gSSYjMzk7dmUgZ290OgoKKiAgIGBkYW1vbl9zZXRfYXR0cnNgICh3aGljaCBJIGp1c3QgY29uZmlybWVkIGlzIGtleSkKKiAgIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYAoqICAgYGRhbW9uX2hvdF9zY29yZWAKKiAgIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYAoKQWxyaWdodCwgYmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IGlmIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYCBpcyBleHBvcnRlZCBvciBpZiBpdCBpcyBsb2NhbC4gVGhhdOKAmWxsIGluZm9ybSBob3cgSSBhcHByb2FjaCB0cmFja2luZyBpdCBkb3duIHRoZSBjYWxsIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD00MD1zdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxLSAqIG5vdCBiZSBkb25lIHdpdGggZGlyZWN0IGFjY2VzcyBidXQgd2l0aCB0aGUgaGVscGVyIGZ1bmN0aW9uLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYyOiAqIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoKS5cbmluY2x1ZGUvbGludXgvZGFtb24uaC02My0gKlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDE2PWludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMTctXHRcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeik7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTAxODp2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDE5LVx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzc1MD1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21vdmluZ19zdW0odW5zaWduZWQgaW50IG12c3VtLCB1bnNpZ25lZCBpbnQgbm9tdnN1bSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc1Ni0vKipcbm1tL2RhbW9uL2NvcmUuYzozNzU3OiAqIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoKSAtIFVwZGF0ZSB0aGUgYWNjZXNzIHJhdGUgb2YgYSByZWdpb24uXG5tbS9kYW1vbi9jb3JlLmMtMzc1OC0gKiBAcjpcdFx0VGhlIERBTU9OIHJlZ2lvbiB0byB1cGRhdGUgZm9yIGl0cyBhY2Nlc3MgY2hlY2sgcmVzdWx0LlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzY2LSAqL1xubW0vZGFtb24vY29yZS5jOjM3Njc6dm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQsXG5tbS9kYW1vbi9jb3JlLmMtMzc2OC1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTg0PXN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy05NS1cdFx0XHRcdEFMSUdOX0RPV04oc2FtcGxpbmdfYWRkciwgbGFzdF9mb2xpb19zeikpIHtcbm1tL2RhbW9uL3BhZGRyLmM6OTY6XHRcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xubW0vZGFtb24vcGFkZHIuYy05Ny1cdFx0cmV0dXJuO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMTAwLVx0bGFzdF9hY2Nlc3NlZCA9IGRhbW9uX3BhX3lvdW5nKHNhbXBsaW5nX2FkZHIsIFx1MDAyNmxhc3RfZm9saW9fc3opO1xubW0vZGFtb24vcGFkZHIuYzoxMDE6XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcbm1tL2RhbW9uL3BhZGRyLmMtMTAyLVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NDk3PXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTA1LVx0aWYgKCFtbSkge1xubW0vZGFtb24vdmFkZHIuYzo1MDY6XHRcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgZmFsc2UsIGF0dHJzKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNTA3LVx0XHRyZXR1cm47XG4tLVxubW0vZGFtb24vdmFkZHIuYy01MTItXHRcdFx0XHRBTElHTl9ET1dOKHItXHUwMDNlc2FtcGxpbmdfYWRkciwgbGFzdF9mb2xpb19zeikpKSB7XG5tbS9kYW1vbi92YWRkci5jOjUxMzpcdFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkLCBhdHRycyk7XG5tbS9kYW1vbi92YWRkci5jLTUxNC1cdFx0cmV0dXJuO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTE3LVx0bGFzdF9hY2Nlc3NlZCA9IGRhbW9uX3ZhX3lvdW5nKG1tLCByLVx1MDAzZXNhbXBsaW5nX2FkZHIsIFx1MDAyNmxhc3RfZm9saW9fc3opO1xubW0vZGFtb24vdmFkZHIuYzo1MTg6XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNTE5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gb2YgdGhpcyBEQU1PTiBjb2RlLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhlIGNhbGwgSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIG9yaWdpbmF0ZXMgZnJvbSBib3RoIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaGF0JiMzOTtzIGhlbHBmdWwuIFRoaXMgY29uZmlybXMgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgIGlzIGEga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBhIGdvb2QgRm9jdXNTeW1ib2wgYXMgd2Ugc2F5IGluIHRoZSBmaWVsZC4KCk5vdywgd2hlcmUgZG9lcyBpdCBsZWFkPyBXaGF0IGlzIHRoZSBuZXh0IGxvZ2ljYWwgZnVuY3Rpb24gdG8gY2hlY2s/IExldCBtZSBzZWUuLi4gSSB0aGluayB0aGUgbmV4dCBuYXR1cmFsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRhbW9uX2hvdF9zY29yZWAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFjY2VzcyByYXRlIGlzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2hvdF9zY29yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9vcHMtY29tbW9uLmM9NzU9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwNS1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMDY6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwNy1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE1MD1pbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNTIte1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE1MzpcdGludCBob3RuZXNzID0gZGFtb25faG90X3Njb3JlKGMsIHIsIHMpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE1NC1cbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9MTc9aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xOC1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oOjE5OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uaC0yMC1cdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9NDIwPXN0YXRpYyBpbnQgZGFtb25fcGFfc2NoZW1lX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXG4tLVxubW0vZGFtb24vcGFkZHIuYy00MjYtXHRjYXNlIERBTU9TX0xSVV9QUklPOlxubW0vZGFtb24vcGFkZHIuYzo0Mjc6XHRcdHJldHVybiBkYW1vbl9ob3Rfc2NvcmUoY29udGV4dCwgciwgc2NoZW1lKTtcbm1tL2RhbW9uL3BhZGRyLmMtNDI4LVx0Y2FzZSBEQU1PU19MUlVfREVQUklPOlxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDMwLVx0Y2FzZSBEQU1PU19NSUdSQVRFX0hPVDpcbm1tL2RhbW9uL3BhZGRyLmM6NDMxOlx0XHRyZXR1cm4gZGFtb25faG90X3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XG5tbS9kYW1vbi9wYWRkci5jLTQzMi1cdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9OTQyPXN0YXRpYyBpbnQgZGFtb25fdmFfc2NoZW1lX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXG4tLVxubW0vZGFtb24vdmFkZHIuYy05NDktXHRjYXNlIERBTU9TX01JR1JBVEVfSE9UOlxubW0vZGFtb24vdmFkZHIuYzo5NTA6XHRcdHJldHVybiBkYW1vbl9ob3Rfc2NvcmUoY29udGV4dCwgciwgc2NoZW1lKTtcbm1tL2RhbW9uL3ZhZGRyLmMtOTUxLVx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDkwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6CgoqKkFzc2Vzc2luZyBGb2N1cyBhbmQgUGFyYW1ldGVyIEFwcGxpY2F0aW9uKioKClJpZ2h0LCBgZGFtb25faG90X3Njb3JlYCAtIHRoYXQgKmlzKiBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGEgRm9jdXNTeW1ib2wuIEl0IHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBzdGFydGluZyBwb2ludCBmb3IgZGlyZWN0aW5nIG91ciBhdHRlbnRpb24sIGEgd2VsbC1kZWZpbmVkIHBvaW50IG9mIGludGVyZXN0LiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBhY3Rpb24sIEkgbXVzdCBkb3VibGUgY2hlY2sgYW5kIHVuZGVyc3RhbmQgaG93IGl0IHdvdWxkIGludGVyZmFjZSB3aXRoIG90aGVyIHN5c3RlbXMuCgpJIG5lZWQgdG8gcXVpY2tseSBzaGlmdCBnZWFycyBhbmQgc2NydXRpbml6ZSBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcGFyYW1ldGVycyBwYXNzZWQsIGFuZCB0aGVpciBiZWhhdmlvciwgd2lsbCBjb3JyZWN0bHkgd29yay4gSSYjMzk7bSB0aGlua2luZyBJIG11c3QgdmVyaWZ5IHRoYXQgYGRhbW9uX2hvdF9zY29yZWAgY2FuIGJlIGVmZmVjdGl2ZWx5IGludGVncmF0ZWQgd2l0aGluIHRoZSBleGlzdGluZyBmcmFtZXdvcmsgYW5kIGFsZ29yaXRobXMgZm9yIHNvcnRpbmcgYW5kIGFwcGx5aW5nIHBhcmFtZXRlcnMuIFRoaXMgcmVxdWlyZXMgYSB0aG9yb3VnaCByZXZpZXcgb2YgdGhlIHBhcmFtZXRlciBhcHBsaWNhdGlvbiBwcm9jZXNzIGluIHJlbGF0aW9uIHRvIHRoYXQgRm9jdXNTeW1ib2wsIG90aGVyd2lzZSB3ZSYjMzk7bGwgcnVuIGludG8gdHJvdWJsZSBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmM9MjUxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjcyLVxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNzM6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG5tbS9kYW1vbi9scnVfc29ydC5jLTI3NC17XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0zNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUwLXtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzUxOlx0cmV0dXJuIGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMoKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUyLX1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQxNT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDIyOlx0ZXJyID0gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy00MjMtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA3OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBSZWFjaGFiaWxpdHkgZm9yIFBvdGVudGlhbCBGdXp6aW5nKioKClJpZ2h0LCBzbyB0aGlzIGZ1bmN0aW9uLCB3aGF0ZXZlciBpdCBpcywgc2VlbXMgdG8gYmUgYSBzdGF0aWMgcGllY2Ugb2YgY29kZSwgYnV0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBkYW1vbl9scnVfc29ydF90dXJuYCBhbmQgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm5gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgaXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgdGhlIG1lbnRhbCBhbGFybSBiZWxscyBmb3IgZnV6emluZyBwb3RlbnRpYWwuIElmIFN5emthbGxlciBjYW4gYWN0dWFsbHkgKnJlYWNoKiB0aGlzIHRoaW5nIHRocm91Z2ggdGhvc2UgY2FsbCBwYXRocywgdGhlbiB3ZSYjMzk7dmUgZ290IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBzb21lIGZ1enppbmcgZ29vZG5lc3MuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGlzIHdvcnRoIG5vdGluZywgc3VnZ2VzdGluZyBhIHBhcnRpY3VsYXIgY29udGV4dCBvciBvcGVyYXRpb25hbCBzdGFnZSB3aXRoaW4gREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBhdGggZm9yd2FyZCBmcm9tIHRob3NlIGNhbGxlcnMgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZnV6emluZyBwb3RlbnRpYWwgaXMgdmFsaWQuIEkmIzM5O2xsIGNoZWNrIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGFuZCBzZWUgaG93IHRoZSBpbnB1dHMgYXJlIHByb2Nlc3NlZCBhbmQgd2hlcmUgdGhleSBhcmUgZGVyaXZlZCwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCB2dWxuZXJhYmlsaXR5IHBvdGVudGlhbCBvZnRlbiBsaWVzLiBUaGF0IHNob3VsZCBjbGFyaWZ5IGlmIHRoaXMgcGF0aCBpcyBhY3R1YWxseSB2aWFibGUgZm9yIHRyaWdnZXJpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nIHRocm91Z2ggU3l6a2FsbGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jPTE2OT1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTUtXG5tbS9kYW1vbi9yZWNsYWltLmM6MTk2OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk3LXtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9Mjc2PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzcte1xubW0vZGFtb24vcmVjbGFpbS5jOjI3ODpcdHJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzktfVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzg9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ0LVxubW0vZGFtb24vcmVjbGFpbS5jOjM0NTpcdGVyciA9IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xubW0vZGFtb24vcmVjbGFpbS5jLTM0Ni1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzIxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi4KCioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzKioKClJpZ2h0LCBJJiMzOTttIHByb2Nlc3NpbmcgdGhlIGNvbXBvbmVudHMgcmVsYXRlZCB0byBEQU1PTi4gSSBzZWUgdGhhdCB0aGVyZSBhcmUgYSBmZXcga2V5IHN5bWJvbHMgdG8ga2VlcCB0cmFjayBvZiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gREFNT04mIzM5O3MgZm9jdXMuIGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9ob3Rfc2NvcmVgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgaW1wb3J0YW50IEZvY3VzU3ltYm9scy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O3ZlIGdvdCBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1JFQ0xBSU1gIGluIG1pbmQuIFRob3NlIGFyZSBvYnZpb3VzbHkgaW1wb3J0YW50IHRvby4KCkFscmlnaHQsIGxldCBtZSBqdXN0IHF1aWNrbHkgcnVuIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdC4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGltcG9ydGFudCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIERBTU9OLiBKdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODE4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFRlc3RpbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gYmUgZXhwbGljaXQgYWJvdXQgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcGF0Y2guIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBEQU1PTl9WQUREUmAgYW5kIGBEQU1PTl9QQUREUmAsIHRob3NlIGFyZSBkZWZpbml0ZWx5IHJlbGV2YW50LiBBbmQgdGhlbiBJIHJlbWVtYmVyLCBvZiBjb3Vyc2UsIHRoYXQgd2UgYWxzbyBoYXZlIGBEQU1PTl9TVEFUYCB0byBjb25zaWRlciEgTGV0JiMzOTtzIGdldCB0aGF0IGFkZGVkIHRvIHRoZSBsaXN0IGFzIHdlbGwuCgpIZXJlJiMzOTtzIHRoZSBjdXJyZW50IGNvbmZpZyBzaXR1YXRpb246IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9MUlVfU09SVGAsIGBEQU1PTl9SRUNMQUlNYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIG5vdyBgREFNT05fU1RBVGAuCgpMZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoIG9uZSBtb3JlIHRpbWU6IFRoZSBmaXggaXMgYWJvdXQgYXZvaWRpbmcgYSBkaXZpc2lvbiBieSB6ZXJvIGluIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgLiBCYXNpY2FsbHksIHdlJiMzOTtyZSBtYWtpbmcgc3VyZSB0aGUgZGl2aXNvciAoYHNhbXBsZV9pbnRlcnZhbGApIGlzIG5ldmVyIGxlc3MgdGhhbiAxLiBUaGlzIGZ1bmN0aW9uIGlzIHByZXR0eSBpbXBvcnRhbnQsIHVzZWQgaW4gdGhlIGNvcmUgb2YgREFNT04gdG8gY2FsY3VsYXRlIGFjY2VzcyByYXRlcyBhbmQgaG90IHNjb3Jlcy4gU28sIGZ1enppbmcgaXMgKmFic29sdXRlbHkqIG5lZWRlZCB0byBjb25maXJtIHRoZSBmaXggYWN0dWFsbHkgKndvcmtzKiBhbmQgZG9lc24mIzM5O3Qgc2NyZXcgdXAgb3RoZXIgdGhpbmdzIGluIERBTU9OLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcHJldmVudHMgY3Jhc2hlcyBhbmQgZG9lc24mIzM5O3QgbWVzcyB1cCBEQU1PTiYjMzk7cyBiZWhhdmlvciBpbiBvdGhlciB3YXlzLgoKSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBmb3IgdGVzdGluZzogYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYCwgYGRhbW9uX2hvdF9zY29yZWAsIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgdXNhZ2Ugb2YgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AgaW4gYG1tL2RhbW9uL3N0YXQuY2AgdG8gYmUgY29tcGxldGVseSBjb25maWRlbnQuCgpVbHRpbWF0ZWx5LCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBjb25maWdzIGFyZSBlbmFibGVkOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fTFJVX1NPUlRgLCBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fU1RBVGAuIEl0JiMzOTtzIGEgY29tcHJlaGVuc2l2ZSBzZXQsIGJ1dCBuZWNlc3NhcnkgZm9yIHRob3JvdWdoIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX21heF9ucl9hY2Nlc3NlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N0YXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzE5IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjU1CgkJCQkJCQlvdXRwdXQ6IDIyMgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgY29udmV5aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlYmFzZTogVHJhY2luZyBgZGFtb25fc2V0X2F0dHJzYCBVc2FnZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHdoZXJlIGBkYW1vbl9zZXRfYXR0cnNgIGlzIGJlaW5nIHVzZWQuIEZpcnN0IHRoaW5nIEkgY2hlY2sgaXMgYG1tL2RhbW9uL3N0YXQuY2AsIGFzc3VtaW5nIGl0JiMzOTtzIGEgcHJpbWUgY2FuZGlkYXRlLiBOb3BlLCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgY2FsbGVkIHRoZXJlLiBJbnRlcmVzdGluZy4uLiBzbywgd2hlcmUgaXMgaXQgYmVpbmcgdXNlZD8gVGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY2FsbCBoaWVyYXJjaHkuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgdGhlIGZ1bmN0aW9uIGNhbGxzIHRvIGZpbmQgd2hlcmUgdGhpcyBtZXRob2QgaXMgdXNlZC4gTm93LCBJIHdpbGwgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCBtZXRob2QuIFRoYXQgc2hvdWxkIGhlbHAgbWUgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8xOSAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TVEFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUmIzM0OywKICAgICYjMzQ7ZGFtb25faG90X3Njb3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGRpdmlzaW9uIGJ5IHplcm8gaW4gYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AgYnkgZW5zdXJpbmcgdGhlIGRpdmlzb3IgYHNhbXBsZV9pbnRlcnZhbGAgaXMgYXQgbGVhc3QgMS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNvcmUgREFNT04gbG9naWMsIHN1Y2ggYXMgdXBkYXRpbmcgcmVnaW9uIGFjY2VzcyByYXRlcyBhbmQgY2FsY3VsYXRpbmcgaG90IHNjb3Jlcy4gRnV6emluZyBpcyBuZWVkZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpeCBjb3JyZWN0bHkgcHJldmVudHMgY3Jhc2hlcyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIGluIERBTU9OJiMzOTtzIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NUQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zZXRfYXR0cnMmIzM0OywKICAgICYjMzQ7ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9ob3Rfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgZGl2aXNpb24gYnkgemVybyBpbiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCBieSBlbnN1cmluZyB0aGUgZGl2aXNvciBgc2FtcGxlX2ludGVydmFsYCBpcyBhdCBsZWFzdCAxLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gY29yZSBEQU1PTiBsb2dpYywgc3VjaCBhcyB1cGRhdGluZyByZWdpb24gYWNjZXNzIHJhdGVzIGFuZCBjYWxjdWxhdGluZyBob3Qgc2NvcmVzLiBGdXp6aW5nIGlzIG5lZWRlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZml4IGNvcnJlY3RseSBwcmV2ZW50cyBjcmFzaGVzIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgaW4gREFNT04mIzM5O3MgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzoyMS4wNTcxNDk2NzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI1MjY1MTExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NUQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zZXRfYXR0cnNcIixcbiAgICBcImRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVcIixcbiAgICBcImRhbW9uX2hvdF9zY29yZVwiLFxuICAgIFwiZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc1wiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgZGl2aXNpb24gYnkgemVybyBpbiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCBieSBlbnN1cmluZyB0aGUgZGl2aXNvciBgc2FtcGxlX2ludGVydmFsYCBpcyBhdCBsZWFzdCAxLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gY29yZSBEQU1PTiBsb2dpYywgc3VjaCBhcyB1cGRhdGluZyByZWdpb24gYWNjZXNzIHJhdGVzIGFuZCBjYWxjdWxhdGluZyBob3Qgc2NvcmVzLiBGdXp6aW5nIGlzIG5lZWRlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZml4IGNvcnJlY3RseSBwcmV2ZW50cyBjcmFzaGVzIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBpbiBEQU1PTidzIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzoyMS4wNTcxNTY2NzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTgyMjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDlmYTQ1OTAwYzBhM2E1NzBiYmFmMjY2MDcwYTg4ZDljMWExNWQ3YzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMTkgMjE6MTM6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXFxuaW5kZXggNmY3ZWRiMzU5MGVmOTcuLjgzYjQzZDhmZmVmMzhhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbkBAIC0xMDY1LDggKzEwNjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhbW9uX21heF9ucl9hY2Nlc3Nlcyhjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gYXR0cnMtXFx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcXG4rXFxuIFxcdC8qIHthZ2dyLHNhbXBsZX1faW50ZXJ2YWwgYXJlIHVuc2lnbmVkIGxvbmcsIGhlbmNlIGNvdWxkIG92ZXJmbG93ICovXFxuLVxcdHJldHVybiBtaW4oYXR0cnMtXFx1MDAzZWFnZ3JfaW50ZXJ2YWwgLyBhdHRycy1cXHUwMDNlc2FtcGxlX2ludGVydmFsLFxcbitcXHRyZXR1cm4gbWluKGF0dHJzLVxcdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxcbiBcXHRcXHRcXHQodW5zaWduZWQgbG9uZylVSU5UX01BWCk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjEzOjIxLjUxNzYwMzkyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI3OTIxODY5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TVEFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc2V0X2F0dHJzXCIsXG4gICAgXCJkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlXCIsXG4gICAgXCJkYW1vbl9ob3Rfc2NvcmVcIixcbiAgICBcImRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgICBcImRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGRpdmlzaW9uIGJ5IHplcm8gaW4gYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AgYnkgZW5zdXJpbmcgdGhlIGRpdmlzb3IgYHNhbXBsZV9pbnRlcnZhbGAgaXMgYXQgbGVhc3QgMS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNvcmUgREFNT04gbG9naWMsIHN1Y2ggYXMgdXBkYXRpbmcgcmVnaW9uIGFjY2VzcyByYXRlcyBhbmQgY2FsY3VsYXRpbmcgaG90IHNjb3Jlcy4gRnV6emluZyBpcyBuZWVkZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpeCBjb3JyZWN0bHkgcHJldmVudHMgY3Jhc2hlcyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgaW4gREFNT04ncyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZmE0NTkwMGMwYTNhNTcwYmJhZjI2NjA3MGE4OGQ5YzFhMTVkN2M0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMTkgMjE6MTM6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDZmN2VkYjM1OTBlZjk3Li44M2I0M2Q4ZmZlZjM4YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuKysrIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtMTA2NSw4ICsxMDY1LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZChjb25zdCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBhdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwgPyA6IDE7XG4rXG4gXHQvKiB7YWdncixzYW1wbGV9X2ludGVydmFsIGFyZSB1bnNpZ25lZCBsb25nLCBoZW5jZSBjb3VsZCBvdmVyZmxvdyAqL1xuLVx0cmV0dXJuIG1pbihhdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gYXR0cnMtXHUwMDNlc2FtcGxlX2ludGVydmFsLFxuK1x0cmV0dXJuIG1pbihhdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxuIFx0XHRcdCh1bnNpZ25lZCBsb25nKVVJTlRfTUFYKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzoyMS41MTc2MDU3OTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQxMDcxMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaW5jbHVkZS9saW51eC9kYW1vbi5oYC4gSXQgc2VlbXMgdGhleSd2ZSBtb2RpZmllZCBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYC4gQWgsIHJpZ2h0LCB0aGUgaXNzdWUgaGVyZSBpcyB0aGUgcG90ZW50aWFsIGZvciBhIGRpdmlzaW9uIGJ5IHplcm8gaWYgYGF0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbGAgaXMgemVyby4gVGhhdCdzIGEgY2xhc3NpYyB0cmFwISBTbWFydCBtb3ZlIHRvIGNhdGNoIHRoYXQuXG5cblRoZSBzb2x1dGlvbiBpcyB0byByZXBsYWNlIHRoZSBvcmlnaW5hbCBkaXZpc2lvbiBgYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCAvIGF0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbGAgd2l0aCBgYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbGAsIHdoZXJlIGBzYW1wbGVfaW50ZXJ2YWxgIGlzIGEgdGVybmFyeSBleHByZXNzaW9uIHNldHRpbmcgaXQgdG8gYGF0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMWAuIEluIG90aGVyIHdvcmRzLCBpZiBgYXR0cnMtXHUwMDNlc2FtcGxlX2ludGVydmFsYCBpcyB6ZXJvLCB3ZSdyZSBlZmZlY3RpdmVseSBkZWZhdWx0aW5nIHRvIDEsIHByZXZlbnRpbmcgdGhlIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3IuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuXG5cbk5vdywgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byB0cmFjZSB3aGVyZSBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCBpcyBhY3R1YWxseSAqdXNlZCouIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIFVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyB0aGUgaW1wYWN0IGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9mIHRoaXMgZml4LiBHb3R0YSBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLCB5b3Uga25vdz9cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjEzOjI1LjE1ODY3OTAyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA0NzIxOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX21heF9ucl9hY2Nlc3Nlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2MT1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjUtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTc4Mj1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc4NC17XFxubW0vZGFtb24vY29yZS5jOjc4NTpcXHRyZXR1cm4gYWNjZXNzZXNfYnAgKiBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpIC8gMTAwMDA7XFxubW0vZGFtb24vY29yZS5jLTc4Ni19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Nzk1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzk3LXtcXG5tbS9kYW1vbi9jb3JlLmM6Nzk4OlxcdHJldHVybiBtdWx0X2ZyYWMobnJfYWNjZXNzZXMsIDEwMDAwLCBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpKTtcXG5tbS9kYW1vbi9jb3JlLmMtNzk5LX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzY3PXZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NzYtXFx0aWYgKGF0dHJzLVxcdTAwM2VzYW1wbGVfaW50ZXJ2YWwpXFxubW0vZGFtb24vY29yZS5jOjM3Nzc6XFx0XFx0bGVuX3dpbmRvdyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTM3NzgtXFx0ci1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSBkYW1vbl9tb3Zpbmdfc3VtKHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzM9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTMxMi1cXHRlcnIgPSAtRU5PTUVNO1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzEzOlxcdGhvdF90aHJlcyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhcXHUwMDI2YXR0cnMpICpcXG5tbS9kYW1vbi9scnVfc29ydC5jLTMxNC1cXHRcXHRob3RfdGhyZXNfYWNjZXNzX2ZyZXEgLyAxMDAwO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTEwNj1pbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTE2LVxcdGZyZXFfc3Vic2NvcmUgPSByLVxcdTAwM2Vucl9hY2Nlc3NlcyAqIERBTU9OX01BWF9TVUJTQ09SRSAvXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjExNzpcXHRcXHRkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXFx1MDAyNmMtXFx1MDAzZWF0dHJzKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTE4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzoyNy4zNjM0MDg2MjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYzMDk2NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYC4gSW50ZXJlc3RpbmcuIFRoaXMgZnVuY3Rpb24gYXBwZWFycyB0byBiZSB1c2VkIGFjcm9zcyBzZXZlcmFsIGZpbGVzIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN1YnN5c3RlbTogc3BlY2lmaWNhbGx5LCBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBhbmQgYG1tL2RhbW9uL29wcy1jb21tb24uY2AuIFRoYXQgcGxhY2VzIGl0IGZpcm1seSB3aXRoaW4gREFNT04ncyBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoZSBxdWVzdGlvbiBub3cgaXMsIHdoYXQncyBpdHMgdmlzaWJpbGl0eT8gSXMgaXQgb25seSB1c2VkIGludGVybmFsbHksIG9yIGlzIGl0IGV4cG9zZWQ/IENvbnNpZGVyaW5nIERBTU9OJ3Mgcm9sZSBhcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMgb3IgZGVidWdmcywgSSdkIHNheSBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gbm93IGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiBpdHMgYmVoYXZpb3Igd2l0aGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTM6MzAuNzI2NTA4NjQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzcwMjIzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTM6MzIuNzYzNTM2NTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM4Njc3NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb246IEEgVGFyZ2V0ZWQgQXBwcm9hY2gqKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlnIGluIHF1ZXN0aW9uIGhlcmUgaXMgYERBTU9OYC4gTG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgZGl2aXNpb24tYnktemVybywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCByZWFzb24gdG8gcGF5IGF0dGVudGlvbi4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IGlzIGZ1enppbmcgdGhpcyB3b3J0aHdoaWxlPyBBYnNvbHV0ZWx5ISBGaXhpbmcgYSBidWcgaW4gY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gREFNT04sIGlzIGRlZmluaXRlbHkgZnV6emluZy13b3J0aHkuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIHByaW1lIHRhcmdldHM/IEkgc2VlIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgLCBidXQgdGhhdCdzIGlubGluZSwgc28gaXQncyBwcm9iYWJseSBub3QgdGhlIGRpcmVjdCBwb2ludCBvZiBhdHRhY2suIFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb25zICpjYWxsaW5nKiBpdC4gU28sIHRoYXQgbmFycm93cyBpdCBkb3duIHRvIGBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3Nlc2AsIGBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icGAsIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYCwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBhbmQgYGRhbW9uX2hvdF9zY29yZWAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IGN1bHByaXRzLCBhdCBsZWFzdCBpbml0aWFsbHkuXG5cbkJ1dCBJJ20gbm90IGdvaW5nIHRvIHN0b3AgdGhlcmUuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcG90ZW50aWFsIGNhbGwgc2l0ZXMuLi4gdGhvcm91Z2huZXNzIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyOCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzozNi44MDIyMTU5NzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3ODAzMDMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9tYXhfbnJfYWNjZXNzZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNjE9c3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY1LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDY2OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhbW9uX21heF9ucl9hY2Nlc3Nlcyhjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03ODI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3NlcyhcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03ODQte1xcbm1tL2RhbW9uL2NvcmUuYzo3ODU6XFx0cmV0dXJuIGFjY2Vzc2VzX2JwICogZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSAvIDEwMDAwO1xcbm1tL2RhbW9uL2NvcmUuYy03ODYtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTc5NT1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc5Ny17XFxubW0vZGFtb24vY29yZS5jOjc5ODpcXHRyZXR1cm4gbXVsdF9mcmFjKG5yX2FjY2Vzc2VzLCAxMDAwMCwgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSk7XFxubW0vZGFtb24vY29yZS5jLTc5OS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzc2Nz12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzc2LVxcdGlmIChhdHRycy1cXHUwMDNlc2FtcGxlX2ludGVydmFsKVxcbm1tL2RhbW9uL2NvcmUuYzozNzc3OlxcdFxcdGxlbl93aW5kb3cgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNzc4LVxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gZGFtb25fbW92aW5nX3N1bShyLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjczPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMTItXFx0ZXJyID0gLUVOT01FTTtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjMxMzpcXHRob3RfdGhyZXMgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXFx1MDAyNmF0dHJzKSAqXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMTQtXFx0XFx0aG90X3RocmVzX2FjY2Vzc19mcmVxIC8gMTAwMDtcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0xMDY9aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTExNi1cXHRmcmVxX3N1YnNjb3JlID0gci1cXHUwMDNlbnJfYWNjZXNzZXMgKiBEQU1PTl9NQVhfU1VCU0NPUkUgL1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMTc6XFx0XFx0ZGFtb25fbWF4X25yX2FjY2Vzc2VzKFxcdTAwMjZjLVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTExOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTM6MzguNjgwMjUyMzMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU5NTk5NjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIENhbGxlcnMgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGNhbGxlcnMgcmV2ZWFscyBhIGNvcmUgc2V0OiBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgLCBgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnBgLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGBkYW1vbl9ob3Rfc2NvcmVgLiBJbW1lZGlhdGVseSwgSSBzZWUgc29tZSBwYXR0ZXJucy4gYGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzYCBhbmQgYGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwYCBzZWVtIHRvIGJlIHN0YXRpYyBjb21wb25lbnRzLCBwcm9iYWJseSBpbnRlcm5hbCBjb252ZXJzaW9uIGZ1bmN0aW9ucy4gYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgIGlzIGxpa2VseSBhbiBleHBvcnRlZCBmdW5jdGlvbiwgZ2xvYmFsIGluIHNjb3BlIGZvciBvdGhlciBtb2R1bGVzIHRvIHVzZS4gYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgIGFwcGVhcnMgdG8gYmUgc3RhdGljIHdpdGhpbiB0aGUgREFNT04gY29udGV4dCBhbmQgdGhlbiBgZGFtb25faG90X3Njb3JlYCBpcyBhIGdsb2JhbCB2YXJpYWJsZS5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbi4gSSBrbm93IEknbGwgYmUgbG9va2luZyBhdCBob3cgdXNlcnNwYWNlIGludGVyYWN0cy4gSSBzZWUgdGhhdCBgREFNT05fTFJVX1NPUlRgIGlzIGltcG9ydGFudCBmb3IgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLiBNeSBpbnN0aW5jdHMgc2F5IHRoYXQgYERBTU9OX1NZU0ZTYCBpcyB0aGUga2V5IGZvciBjb25maWd1cmluZyBEQU1PTiBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggd291bGQgbWFrZSBzZW5zZS4gQW5kLCB0aGlua2luZyBhYm91dCBob3cgdGhpbmdzIGFyZSB1c2VkLCBgREFNT05fVkFERFJgIGFuZCBgREFNT05fUEFERFJgIHJlcHJlc2VudCB0aGUgb3BlcmF0aW9ucyB0aGVtc2VsdmVzLiBJIG5lZWQgdG8gdGFrZSB0aGVzZSBhbGwgaW50byBjb25zaWRlcmF0aW9uLlxuXG5UaGVyZWZvcmUsIGZvciB0aGlzIHBhcnRpY3VsYXIgdXNlIGNhc2UsIEknbGwgZGVmaW5pdGVseSBiZSBpbmNsdWRpbmcgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAgd2hlbiB0aGlua2luZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBkZXRhaWxzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYHNhbXBsZV9pbnRlcnZhbGAgaXMgYmVpbmcgc2V0LiBJIHNob3VsZCBsb29rIGF0IGBkYW1vbl9zZXRfYXR0cnNgIG9yIHNpbWlsYXIgZnVuY3Rpb25zLCBhcyB0aGF0IHdvdWxkIGJlIGEgbG9naWNhbCBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIwMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzo0NC4yNzYyNTA0OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTM4MTk0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc2V0X2F0dHJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD04MDQ9c3RydWN0IGRhbW9uX2F0dHJzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC04MTMtXFx0ICogQGFnZ3JfaW50ZXJ2YWwgdG8gQHNhbXBsZV9pbnRlcnZhbCByYXRpby5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODE0OlxcdCAqIENvcmUtZXh0ZXJuYWwgY29tcG9uZW50cyBjYWxsIGRhbW9uX3NldF9hdHRycygpIHdpdGggXFx1MDAyNmRhbW9uX2F0dHJzXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjgxNTpcXHQgKiB0aGF0IHRoaXMgZmllbGQgaXMgdW5zZXQuICBJbiB0aGUgY2FzZSwgZGFtb25fc2V0X2F0dHJzKCkgc2V0cyB0aGlzXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTgxNi1cXHQgKiBmaWVsZCBvZiByZXN1bHRpbmcgXFx1MDAyNmRhbW9uX2F0dHJzLiAgQ29yZS1pbnRlcm5hbCBjb21wb25lbnRzIHN1Y2ggYXNcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODE3OlxcdCAqIGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoKSBjYWxscyBkYW1vbl9zZXRfYXR0cnMoKSB3aXRoIFxcdTAwMjZkYW1vbl9hdHRyc1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MTg6XFx0ICogdGhhdCB0aGlzIGZpZWxkIGlzIHNldC4gIEluIHRoZSBjYXNlLCBkYW1vbl9zZXRfYXR0cnMoKSBqdXN0IGtlZXBcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODE5LVxcdCAqIGl0Llxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNTE9dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDUyOmludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1My12b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04NjQ9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NzktLyoqXFxubW0vZGFtb24vY29yZS5jOjg4MDogKiBkYW1vbl9zZXRfYXR0cnMoKSAtIFNldCBhdHRyaWJ1dGVzIGZvciB0aGUgbW9uaXRvcmluZy5cXG5tbS9kYW1vbi9jb3JlLmMtODgxLSAqIEBjdHg6XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODk4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo4OTk6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxubW0vZGFtb24vY29yZS5jLTkwMC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTU3Mz1pbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjAzLVxcdCAqIHNjaGVtZXMgYW5kIHRhcmdldHMgc2hvdWxkIGJlIHVwZGF0ZWQgZmlyc3QsIHNpbmNlXFxubW0vZGFtb24vY29yZS5jOjE2MDQ6XFx0ICogMS4gZGFtb25fc2V0X2F0dHJzKCkgdXBkYXRlcyBtb25pdG9yaW5nIHJlc3VsdHMgb2YgdGFyZ2V0cyBhbmRcXG5tbS9kYW1vbi9jb3JlLmMtMTYwNS1cXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjA5LVxcdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFxcdTAwMjZkc3QtXFx1MDAzZWF0dHJzLCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycykpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTYxMDpcXHRcXHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMoZHN0LCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTE2MTEtXFx0XFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwNDQ9c3RhdGljIHZvaWQga2RhbW9uZF90dW5lX2ludGVydmFscyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNjItXFx0dHJhY2VfZGFtb25fbW9uaXRvcl9pbnRlcnZhbHNfdHVuZShuZXdfYXR0cnMuc2FtcGxlX2ludGVydmFsKTtcXG5tbS9kYW1vbi9jb3JlLmM6MjA2MzpcXHRkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNm5ld19hdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTIwNjQtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0Nzk9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzUwOC1cXHRcXHQgKiBiZSBjaGFuZ2VkIGZyb20ga2RhbW9uZF9jYWxsKCkuICBSZWFkIHRoZSB2YWx1ZXMgaGVyZSwgYW5kXFxubW0vZGFtb24vY29yZS5jOjM1MDk6XFx0XFx0ICogdXNlIHRob3NlIGZvciB0aGlzIGl0ZXJhdGlvbi4gIFRoYXQgaXMsIGRhbW9uX3NldF9hdHRycygpXFxubW0vZGFtb24vY29yZS5jLTM1MTAtXFx0XFx0ICogdXBkYXRlZCBuZXcgdmFsdWVzIGFyZSByZXNwZWN0ZWQgZnJvbSBuZXh0IGl0ZXJhdGlvbi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNTY5LVxcdFxcdFxcdFxcdCAqIGZyb20ga2RhbW9uZF9jYWxsKCkuICBJbiB0aGUgY2FzZSxcXG5tbS9kYW1vbi9jb3JlLmM6MzU3MDpcXHRcXHRcXHRcXHQgKiBkYW1vbl9zZXRfYXR0cnMoKSB3aGljaCB3aWxsIGJlIGNhbGxlZCBmcm9tXFxubW0vZGFtb24vY29yZS5jLTM1NzEtXFx0XFx0XFx0XFx0ICoga2RhbW9uZF90dW5lX2ludGVydmFsKCkgbWF5IHdyb25nbHkgdGhpbmtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzY3PXZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NzMtXFx0ICogc2FtcGxlX2ludGVydmFsIGNhbiBiZSB6ZXJvLCBidXQgY2Fubm90IGJlIGxhcmdlciB0aGFuXFxubW0vZGFtb24vY29yZS5jOjM3NzQ6XFx0ICogYWdncl9pbnRlcnZhbCwgb3dpbmcgdG8gdmFsaWRhdGlvbiBvZiBkYW1vbl9zZXRfYXR0cnMoKS5cXG5tbS9kYW1vbi9jb3JlLmMtMzc3NS1cXHQgKi9cXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjczPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMDctXFx0fVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzA4OlxcdGVyciA9IGRhbW9uX3NldF9hdHRycyhwYXJhbV9jdHgsIFxcdTAwMjZhdHRycyk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMDktXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTY9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzEtXFx0fVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzI6XFx0ZXJyID0gZGFtb25fc2V0X2F0dHJzKHBhcmFtX2N0eCwgXFx1MDAyNmF0dHJzKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjMzLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MTUxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zdGF0X2J1aWxkX2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTE3NS1cXHR9O1xcbm1tL2RhbW9uL3N0YXQuYzoxNzY6XFx0aWYgKGRhbW9uX3NldF9hdHRycyhjdHgsIFxcdTAwMjZhdHRycykpXFxubW0vZGFtb24vc3RhdC5jLTE3Ny1cXHRcXHRnb3RvIGZyZWVfb3V0O1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xODc5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTg5OC1cXHR9O1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTg5OTpcXHRyZXR1cm4gZGFtb25fc2V0X2F0dHJzKGN0eCwgXFx1MDAyNmF0dHJzKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE5MDAtfVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTU4Mz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTkzLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1OTQ6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcXHUwMDI2dmFsaWRfYXR0cnMpLCAwKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTk1LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU5Ny1cXHRpbnZhbGlkX2F0dHJzLm1pbl9ucl9yZWdpb25zID0gMTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NTk4OlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTk5LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYwMS1cXHRpbnZhbGlkX2F0dHJzLm1heF9ucl9yZWdpb25zID0gOTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NjAyOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjAzLVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYwNS1cXHRpbnZhbGlkX2F0dHJzLmFnZ3JfaW50ZXJ2YWwgPSA0OTk5O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MDY6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NldF9hdHRycyhjLCBcXHUwMDI2aW52YWxpZF9hdHRycyksIC1FSU5WQUwpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MDctXFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmM9NzM9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEwMy1cXHR9O1xcbnNhbXBsZXMvZGFtb24vbXRpZXIuYzoxMDQ6XFx0aWYgKGRhbW9uX3NldF9hdHRycyhjdHgsIFxcdTAwMjZhdHRycykpXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEwNS1cXHRcXHRnb3RvIGZyZWVfb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzo0NS45OTAwNzUwMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE3NzQ2MTYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBEaXZpc2lvbiBWdWxuZXJhYmlsaXR5IGluIERBTU9OKipcblxuT2theSwgc28gYGRhbW9uX3NldF9hdHRyc2AgaXMgdGhlIGN1bHByaXQg4oCTIHRoZSBmdW5jdGlvbiB0aGF0IHNldHMgYHNhbXBsZV9pbnRlcnZhbGAuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsIGluY2x1ZGluZyBgZGFtb25fc3lzZnNfc2V0X2F0dHJzYCwgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGBkYW1vbl9zdGF0X2J1aWxkX2N0eGAuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYHNhbXBsZV9pbnRlcnZhbGAgY291bGQgYmUgemVybywgd2hpY2gsIG9mIGNvdXJzZSwgcmVzdWx0cyBpbiBhIGRpdmlzaW9uIGJ5IHplcm8gZXJyb3Igd2l0aGluIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgLiBUaGUgcGF0Y2ggY2xlYXJseSBmaXhlcyB0aGlzLCBzbyB0aGlzIHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nIGF0dGVudGlvbi5cblxuSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgY2FsbGVycyBvZiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIHNlZSBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9ob3Rfc2NvcmVgLCBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgLCBgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnBgLCBhbmQgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLiBSaWdodCwgdGhlc2UgYXJlIGFsbCBjcml0aWNhbC5cblxuR2l2ZW4gdGhhdCBsaXN0LCBJJ20gZ29pbmcgdG8gYWRkIHRoZSBmb2xsb3dpbmcgdG8gbXkgRm9jdXNTeW1ib2xzOiBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9ob3Rfc2NvcmVgLCBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgLCBgZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnBgLCBhbmQsIG9mIGNvdXJzZSwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBmdXp6aW5nIGFuZCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIEkndmUgaWRlbnRpZmllZC4gTGV0IG1lIGNoZWNrIGlmIGBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3Nlc2AgYW5kIGBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icGAgYXJlIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgZnV6emFibGUuIEFoLCB5ZXMsIHRoZXkncmUgc3RhdGljIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gRXhjZWxsZW50LiBTeXprYWxsZXIgKmNvdWxkKiBwb3RlbnRpYWxseSBmdXp6IHRoZW0gaWYgdGhleSBhcmUgcmVhY2hhYmxlLiBIb2xkIG9uLCBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgIGJlaW5nIHN0YXRpYyBtZWFucyBpdCBtaWdodCBub3QgYmUgZGlyZWN0bHkgZXhwb3NlZCB0byBTeXprYWxsZXIsIGJ1dCBpdCdzIGNhbGxlZCBieSBvdGhlciBmdW5jdGlvbnMsIHNvIGl0IGNhbiBzdGlsbCBiZSBmdXp6ZWQgaW5kaXJlY3RseS4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIGBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3Nlc2AgaXMgY2FsbGVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHJlYWNoYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA3NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzo1My4xNjc1MzkxMzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjAwMTg3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTc3NT1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FnZV9mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBhZ2UsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzgxLS8qIGNvbnZlcnQgYWNjZXNzIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKSB0byBucl9hY2Nlc3NlcyAqL1xcbm1tL2RhbW9uL2NvcmUuYzo3ODI6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3NlcyhcXG5tbS9kYW1vbi9jb3JlLmMtNzgzLVxcdFxcdHVuc2lnbmVkIGludCBhY2Nlc3Nlc19icCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04MDE9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04MDMte1xcbm1tL2RhbW9uL2NvcmUuYzo4MDQ6XFx0cmV0dXJuIGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxcbm1tL2RhbW9uL2NvcmUuYy04MDUtXFx0XFx0XFx0ZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjEzOjU0Ljk4NzU2Mjk4OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA5MDU1NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRyc2AgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRyc2AuIFRoZSBuYW1lIHN1Z2dlc3RzIHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBudW1iZXIgb2YgYWNjZXNzZXMgY29uc2lkZXJlZCB3aGVuIGRlYWxpbmcgd2l0aCBuZXcgYXR0cmlidXRlcyBpbiBEQU1PTi4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaXRzIHJvbGUuIE15IG5leHQgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcy4gV2hlcmUgaXMgdGhpcyB0aGluZyBhY3R1YWxseSBiZWluZyB1c2VkIGluIHRoZSBjb2RlPyBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBmdW5jdGlvbiBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlIGJldHRlci4gS25vd2luZyAqd2hlcmUqIGl0J3MgY2FsbGVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nICp3aHkqIGl0IGV4aXN0cyBhbmQgd2hhdCBpdHMgaW1wYWN0IGlzLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGVtcGxveWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzE1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTM6NTguMDk2NjIxMzI1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA2NTM4NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTc5NT1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgwMC1cXG5tbS9kYW1vbi9jb3JlLmM6ODAxOnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsXFxubW0vZGFtb24vY29yZS5jLTgwMi1cXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODEwPXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgxNC1cXHRpZiAoIWFnZ3JlZ2F0aW5nKSB7XFxubW0vZGFtb24vY29yZS5jOjgxNTpcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnMoXFxubW0vZGFtb24vY29yZS5jLTgxNi1cXHRcXHRcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTgyNC1cXHRcXHQgKi9cXG5tbS9kYW1vbi9jb3JlLmM6ODI1OlxcdFxcdHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKFxcbm1tL2RhbW9uL2NvcmUuYy04MjYtXFx0XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxMzo1OS45MDMxNjQyNjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MzEzMTY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdGAgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gdGhpcyBmdW5jdGlvbiwgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdGAsIGlzIGNsZWFybHkgdGhlIGtleSB0byBzb21ldGhpbmcgaW1wb3J0YW50IHdpdGhpbiB0aGUgbW9uaXRvcmluZyBzeXN0ZW0uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBpdCdzIHdoZXJlIHRoZSBtb25pdG9yaW5nIGRhdGEgZ2V0cyB1cGRhdGVkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdHJhY2UgYmFjayBpdHMgY2FsbCBwYXRocy4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBUaGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgd29ya2Zsb3cgYW5kIGlkZW50aWZ5IHRoZSB0cmlnZ2VycyBhbmQgZGVwZW5kZW5jaWVzLiBPbmNlIEkga25vdyB3aG8ncyBjYWxsaW5nIGl0LCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpc3N1ZXMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBvcHRpbWl6YXRpb25zIHdpdGhpbiB0aGlzIHNwZWNpZmljIG1vZHVsZS4gTGV0J3MgZGlnIGluIGFuZCBmaW5kIHRob3NlIGNhbGwgc2l0ZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxNDowMi44NTYyOTgxMzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDU4NzA3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz03ODI9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3NlcyhcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OTEtICogQ2FsbGVycyBzaG91bGQgZW5zdXJlIGF0dHJzLmFnZ3JfaW50ZXJ2YWwgaXMgbm90IHplcm8sIGxpa2VcXG5tbS9kYW1vbi9jb3JlLmM6NzkyOiAqIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoKSBkb2VzIC4gIE90aGVyd2lzZSwgZGl2aWRlLWJ5LXplcm8gd291bGRcXG5tbS9kYW1vbi9jb3JlLmMtNzkzLSAqIGhhcHBlbi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04MDE9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04MDktXFxubW0vZGFtb24vY29yZS5jOjgxMDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9jb3JlLmMtODExLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NDAtICovXFxubW0vZGFtb24vY29yZS5jOjg0MTpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9jb3JlLmMtODQyLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLCBib29sIGFnZ3JlZ2F0aW5nKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTg1NS1cXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdClcXG5tbS9kYW1vbi9jb3JlLmM6ODU2OlxcdFxcdFxcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChcXG5tbS9kYW1vbi9jb3JlLmMtODU3LVxcdFxcdFxcdFxcdFxcdHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9ODk5PWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTkyOC1cXG5tbS9kYW1vbi9jb3JlLmM6OTI5OlxcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoY3R4LCBhdHRycywgYWdncmVnYXRpbmcpO1xcbm1tL2RhbW9uL2NvcmUuYy05MzAtXFx0Y3R4LVxcdTAwM2VhdHRycyA9ICphdHRycztcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD01MjY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTM4LVxcdCAqIHRoZSBjYXV0aW9uIGlzIGRvY3VtZW50ZWQgb24gdGhlIGNvbW1lbnQgZm9yIHRoZSBmdW5jdGlvbiwgYW5kXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjUzOTpcXHQgKiBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKCkgZG9lcyB0aGUgY2hlY2suICBTa2lwIHRoZSB0ZXN0IGluXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU0MC1cXHQgKiB0aGUgY2FzZS5cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD01NDg9c3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU2My1cXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMTAwLCAuYWdncl9pbnRlcnZhbCA9IDEwMDAwLH07XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjU2NDpcXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXFx1MDAyNm9sZF9hdHRycywgXFx1MDAyNm5ld19hdHRycywgZmFsc2UpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01NjUtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZW5yX2FjY2Vzc2VzLCAxNSk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTY5LVxcdFxcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxLCAuYWdncl9pbnRlcnZhbCA9IDEwMDB9O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo1NzA6XFx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFxcdTAwMjZvbGRfYXR0cnMsIFxcdTAwMjZuZXdfYXR0cnMsIGZhbHNlKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNTcxLVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC01NzUtXFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwfTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NTc2OlxcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcXHUwMDI2b2xkX2F0dHJzLCBcXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTU3Ny1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbnJfYWNjZXNzZXMsIDE1MCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjE0OjA0LjY2MjE3MzA2MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg3MjU3NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gQ29kZSBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBEQU1PTiBjb2RlIGFnYWluLiBJIHNlZSB0aGF0IGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzYCBpcyBkaXJlY3RseSBjYWxsZWQgZnJvbSBgZGFtb25fc2V0X2F0dHJzYC4gVGhhdCBtYWtlcyBgZGFtb25fc2V0X2F0dHJzYCB0aGUgcmVhbCB3b3JraG9yc2UsIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHBheSBhdHRlbnRpb24gdG8uIEdpdmVuIHRoYXQsIEknbSBkZWZpbml0ZWx5IGdvaW5nIHRvIGFkZCBgZGFtb25fc2V0X2F0dHJzYCB0byBteSBGb2N1c1N5bWJvbHMgbGlzdC4gSXTigJlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBhbGwgaGFuZ3MgdG9nZXRoZXIuXG5cbkxldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUgY3VycmVudCBGb2N1c1N5bWJvbHMsIGp1c3QgdG8gYmUgc3VyZS4gSSd2ZSBnb3Q6XG5cbiogICBgZGFtb25fc2V0X2F0dHJzYCAod2hpY2ggSSBqdXN0IGNvbmZpcm1lZCBpcyBrZXkpXG4qICAgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgXG4qICAgYGRhbW9uX2hvdF9zY29yZWBcbiogICBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2BcblxuQWxyaWdodCwgYmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IGlmIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYCBpcyBleHBvcnRlZCBvciBpZiBpdCBpcyBsb2NhbC4gVGhhdOKAmWxsIGluZm9ybSBob3cgSSBhcHByb2FjaCB0cmFja2luZyBpdCBkb3duIHRoZSBjYWxsIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxMywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxNDowOC40NDk0MzI3MzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTMxMzc5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9NDA9c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxLSAqIG5vdCBiZSBkb25lIHdpdGggZGlyZWN0IGFjY2VzcyBidXQgd2l0aCB0aGUgaGVscGVyIGZ1bmN0aW9uLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MjogKiBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKCkuXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYzLSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAxNj1pbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAxNy1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDE4OnZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDE5LVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM3NTA9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tb3Zpbmdfc3VtKHVuc2lnbmVkIGludCBtdnN1bSwgdW5zaWduZWQgaW50IG5vbXZzdW0sXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzc1Ni0vKipcXG5tbS9kYW1vbi9jb3JlLmM6Mzc1NzogKiBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKCkgLSBVcGRhdGUgdGhlIGFjY2VzcyByYXRlIG9mIGEgcmVnaW9uLlxcbm1tL2RhbW9uL2NvcmUuYy0zNzU4LSAqIEByOlxcdFxcdFRoZSBEQU1PTiByZWdpb24gdG8gdXBkYXRlIGZvciBpdHMgYWNjZXNzIGNoZWNrIHJlc3VsdC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzY2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNzY3OnZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLFxcbm1tL2RhbW9uL2NvcmUuYy0zNzY4LVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTg0PXN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTk1LVxcdFxcdFxcdFxcdEFMSUdOX0RPV04oc2FtcGxpbmdfYWRkciwgbGFzdF9mb2xpb19zeikpIHtcXG5tbS9kYW1vbi9wYWRkci5jOjk2OlxcdFxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xcbm1tL2RhbW9uL3BhZGRyLmMtOTctXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xMDAtXFx0bGFzdF9hY2Nlc3NlZCA9IGRhbW9uX3BhX3lvdW5nKHNhbXBsaW5nX2FkZHIsIFxcdTAwMjZsYXN0X2ZvbGlvX3N6KTtcXG5tbS9kYW1vbi9wYWRkci5jOjEwMTpcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcXG5tbS9kYW1vbi9wYWRkci5jLTEwMi1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NDk3PXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy01MDUtXFx0aWYgKCFtbSkge1xcbm1tL2RhbW9uL3ZhZGRyLmM6NTA2OlxcdFxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgZmFsc2UsIGF0dHJzKTtcXG5tbS9kYW1vbi92YWRkci5jLTUwNy1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTUxMi1cXHRcXHRcXHRcXHRBTElHTl9ET1dOKHItXFx1MDAzZXNhbXBsaW5nX2FkZHIsIGxhc3RfZm9saW9fc3opKSkge1xcbm1tL2RhbW9uL3ZhZGRyLmM6NTEzOlxcdFxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtNTE0LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNTE3LVxcdGxhc3RfYWNjZXNzZWQgPSBkYW1vbl92YV95b3VuZyhtbSwgci1cXHUwMDNlc2FtcGxpbmdfYWRkciwgXFx1MDAyNmxhc3RfZm9saW9fc3opO1xcbm1tL2RhbW9uL3ZhZGRyLmM6NTE4OlxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtNTE5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxNDoxMC4zNjI1NzYwNDdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNDQ5MDk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIENvZGViYXNlKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIERBTU9OIGNvZGUsIGFuZCBpdCdzIGNsZWFyIHRoZSBjYWxsIEknbSBpbnRlcmVzdGVkIGluLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIG9yaWdpbmF0ZXMgZnJvbSBib3RoIGBtbS9kYW1vbi9wYWRkci5jYCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaGF0J3MgaGVscGZ1bC4gVGhpcyBjb25maXJtcyBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAgaXMgYSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24sIGEgZ29vZCBGb2N1c1N5bWJvbCBhcyB3ZSBzYXkgaW4gdGhlIGZpZWxkLlxuXG5Ob3csIHdoZXJlIGRvZXMgaXQgbGVhZD8gV2hhdCBpcyB0aGUgbmV4dCBsb2dpY2FsIGZ1bmN0aW9uIHRvIGNoZWNrPyBMZXQgbWUgc2VlLi4uIEkgdGhpbmsgdGhlIG5leHQgbmF0dXJhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkYW1vbl9ob3Rfc2NvcmVgIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhY2Nlc3MgcmF0ZSBpcyBiZWluZyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU0NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjE0OjEzLjg5NzA2OTUwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3OTQzNzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9ob3Rfc2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vb3BzLWNvbW1vbi5jPTc1PXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwNS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTA2OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTA3LVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNTA9aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNTIte1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNTM6XFx0aW50IGhvdG5lc3MgPSBkYW1vbl9ob3Rfc2NvcmUoYywgciwgcyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE1NC1cXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uaD0xNz1pbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xOC1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxOTppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTIwLVxcdFxcdFxcdHN0cnVjdCBkYW1vcyAqcyk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTQyMD1zdGF0aWMgaW50IGRhbW9uX3BhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00MjYtXFx0Y2FzZSBEQU1PU19MUlVfUFJJTzpcXG5tbS9kYW1vbi9wYWRkci5jOjQyNzpcXHRcXHRyZXR1cm4gZGFtb25faG90X3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XFxubW0vZGFtb24vcGFkZHIuYy00MjgtXFx0Y2FzZSBEQU1PU19MUlVfREVQUklPOlxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00MzAtXFx0Y2FzZSBEQU1PU19NSUdSQVRFX0hPVDpcXG5tbS9kYW1vbi9wYWRkci5jOjQzMTpcXHRcXHRyZXR1cm4gZGFtb25faG90X3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XFxubW0vZGFtb24vcGFkZHIuYy00MzItXFx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTk0Mj1zdGF0aWMgaW50IGRhbW9uX3ZhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy05NDktXFx0Y2FzZSBEQU1PU19NSUdSQVRFX0hPVDpcXG5tbS9kYW1vbi92YWRkci5jOjk1MDpcXHRcXHRyZXR1cm4gZGFtb25faG90X3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XFxubW0vZGFtb24vdmFkZHIuYy05NTEtXFx0Y2FzZSBEQU1PU19NSUdSQVRFX0NPTEQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjE0OjE1Ljc3NjUxMTg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzM3MDIwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZDpcblxuKipBc3Nlc3NpbmcgRm9jdXMgYW5kIFBhcmFtZXRlciBBcHBsaWNhdGlvbioqXG5cblJpZ2h0LCBgZGFtb25faG90X3Njb3JlYCAtIHRoYXQgKmlzKiBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGEgRm9jdXNTeW1ib2wuIEl0IHNlZW1zIGxpa2UgYSBzZW5zaWJsZSBzdGFydGluZyBwb2ludCBmb3IgZGlyZWN0aW5nIG91ciBhdHRlbnRpb24sIGEgd2VsbC1kZWZpbmVkIHBvaW50IG9mIGludGVyZXN0LiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBhY3Rpb24sIEkgbXVzdCBkb3VibGUgY2hlY2sgYW5kIHVuZGVyc3RhbmQgaG93IGl0IHdvdWxkIGludGVyZmFjZSB3aXRoIG90aGVyIHN5c3RlbXMuXG5cbkkgbmVlZCB0byBxdWlja2x5IHNoaWZ0IGdlYXJzIGFuZCBzY3J1dGluaXplIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCwgYW5kIHRoZWlyIGJlaGF2aW9yLCB3aWxsIGNvcnJlY3RseSB3b3JrLiBJJ20gdGhpbmtpbmcgSSBtdXN0IHZlcmlmeSB0aGF0IGBkYW1vbl9ob3Rfc2NvcmVgIGNhbiBiZSBlZmZlY3RpdmVseSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgZXhpc3RpbmcgZnJhbWV3b3JrIGFuZCBhbGdvcml0aG1zIGZvciBzb3J0aW5nIGFuZCBhcHBseWluZyBwYXJhbWV0ZXJzLiBUaGlzIHJlcXVpcmVzIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBwYXJhbWV0ZXIgYXBwbGljYXRpb24gcHJvY2VzcyBpbiByZWxhdGlvbiB0byB0aGF0IEZvY3VzU3ltYm9sLCBvdGhlcndpc2Ugd2UnbGwgcnVuIGludG8gdHJvdWJsZSBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ5MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjE0OjE5LjQ1MDIxNjg1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTUyNTgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmM9MjUxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNzItXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNzM6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNzQte1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0zNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1MC17XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNTE6XFx0cmV0dXJuIGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMoKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1Mi19XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQxNT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIxLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDIyOlxcdGVyciA9IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMoKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMy1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxNDoyMS4zNTU3NzUwMjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4Mzk1NTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFJlYWNoYWJpbGl0eSBmb3IgUG90ZW50aWFsIEZ1enppbmcqKlxuXG5SaWdodCwgc28gdGhpcyBmdW5jdGlvbiwgd2hhdGV2ZXIgaXQgaXMsIHNlZW1zIHRvIGJlIGEgc3RhdGljIHBpZWNlIG9mIGNvZGUsIGJ1dCBpdCdzIGNhbGxlZCBmcm9tIGBkYW1vbl9scnVfc29ydF90dXJuYCBhbmQgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm5gLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBzZXRzIG9mZiB0aGUgbWVudGFsIGFsYXJtIGJlbGxzIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSWYgU3l6a2FsbGVyIGNhbiBhY3R1YWxseSAqcmVhY2gqIHRoaXMgdGhpbmcgdGhyb3VnaCB0aG9zZSBjYWxsIHBhdGhzLCB0aGVuIHdlJ3ZlIGdvdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3Igc29tZSBmdXp6aW5nIGdvb2RuZXNzLiBUaGUgZmFjdCB0aGF0IGl0J3MgY2FsbGVkIGZyb20gdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGlzIHdvcnRoIG5vdGluZywgc3VnZ2VzdGluZyBhIHBhcnRpY3VsYXIgY29udGV4dCBvciBvcGVyYXRpb25hbCBzdGFnZSB3aXRoaW4gREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBkaXZlIGludG8gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGF0aCBmb3J3YXJkIGZyb20gdGhvc2UgY2FsbGVycyB0byB1bmRlcnN0YW5kIGlmIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBpcyB2YWxpZC4gSSdsbCBjaGVjayBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgc2VlIGhvdyB0aGUgaW5wdXRzIGFyZSBwcm9jZXNzZWQgYW5kIHdoZXJlIHRoZXkgYXJlIGRlcml2ZWQsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgcmVhbCB2dWxuZXJhYmlsaXR5IHBvdGVudGlhbCBvZnRlbiBsaWVzLiBUaGF0IHNob3VsZCBjbGFyaWZ5IGlmIHRoaXMgcGF0aCBpcyBhY3R1YWxseSB2aWFibGUgZm9yIHRyaWdnZXJpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nIHRocm91Z2ggU3l6a2FsbGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA3OSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjE0OjI2LjAzOTczMjc2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NTY5NzA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jPTE2OT1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTE5NS1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MTk2OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxubW0vZGFtb24vcmVjbGFpbS5jLTE5Ny17XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9Mjc2PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjc3LXtcXG5tbS9kYW1vbi9yZWNsYWltLmM6Mjc4OlxcdHJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjc5LX1cXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzg9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDQtXFxubW0vZGFtb24vcmVjbGFpbS5jOjM0NTpcXHRlcnIgPSBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ2LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTE5VDIxOjE0OjI4LjAwNTQzNDY3MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcwNDE3OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgdHVybmluZy4uLlxuXG4qKkFuYWx5emluZyBEQU1PTidzIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzKipcblxuUmlnaHQsIEknbSBwcm9jZXNzaW5nIHRoZSBjb21wb25lbnRzIHJlbGF0ZWQgdG8gREFNT04uIEkgc2VlIHRoYXQgdGhlcmUgYXJlIGEgZmV3IGtleSBzeW1ib2xzIHRvIGtlZXAgdHJhY2sgb2YsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIERBTU9OJ3MgZm9jdXMuIGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9ob3Rfc2NvcmVgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgaW1wb3J0YW50IEZvY3VzU3ltYm9scy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLiBJJ3ZlIGdvdCBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1JFQ0xBSU1gIGluIG1pbmQuIFRob3NlIGFyZSBvYnZpb3VzbHkgaW1wb3J0YW50IHRvby5cblxuQWxyaWdodCwgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGltcG9ydGFudCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIERBTU9OLiBKdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcyMSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxNDozMS41NzU4NTU3MThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODUyMTUxODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTQ6MzMuNTYxMDc2NTQyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxODkzOTMzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgVGVzdGluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIG5lZWQgdG8gYmUgZXhwbGljaXQgYWJvdXQgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcGF0Y2guIEknbGwgbWFrZSBzdXJlIHRvIGluY2x1ZGUgYERBTU9OX1ZBRERSYCBhbmQgYERBTU9OX1BBRERSYCwgdGhvc2UgYXJlIGRlZmluaXRlbHkgcmVsZXZhbnQuIEFuZCB0aGVuIEkgcmVtZW1iZXIsIG9mIGNvdXJzZSwgdGhhdCB3ZSBhbHNvIGhhdmUgYERBTU9OX1NUQVRgIHRvIGNvbnNpZGVyISBMZXQncyBnZXQgdGhhdCBhZGRlZCB0byB0aGUgbGlzdCBhcyB3ZWxsLlxuXG5IZXJlJ3MgdGhlIGN1cnJlbnQgY29uZmlnIHNpdHVhdGlvbjogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX0xSVV9TT1JUYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBhbmQgbm93IGBEQU1PTl9TVEFUYC5cblxuTGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaCBvbmUgbW9yZSB0aW1lOiBUaGUgZml4IGlzIGFib3V0IGF2b2lkaW5nIGEgZGl2aXNpb24gYnkgemVybyBpbiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYC4gQmFzaWNhbGx5LCB3ZSdyZSBtYWtpbmcgc3VyZSB0aGUgZGl2aXNvciAoYHNhbXBsZV9pbnRlcnZhbGApIGlzIG5ldmVyIGxlc3MgdGhhbiAxLiBUaGlzIGZ1bmN0aW9uIGlzIHByZXR0eSBpbXBvcnRhbnQsIHVzZWQgaW4gdGhlIGNvcmUgb2YgREFNT04gdG8gY2FsY3VsYXRlIGFjY2VzcyByYXRlcyBhbmQgaG90IHNjb3Jlcy4gU28sIGZ1enppbmcgaXMgKmFic29sdXRlbHkqIG5lZWRlZCB0byBjb25maXJtIHRoZSBmaXggYWN0dWFsbHkgKndvcmtzKiBhbmQgZG9lc24ndCBzY3JldyB1cCBvdGhlciB0aGluZ3MgaW4gREFNT04uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwcmV2ZW50cyBjcmFzaGVzIGFuZCBkb2Vzbid0IG1lc3MgdXAgREFNT04ncyBiZWhhdmlvciBpbiBvdGhlciB3YXlzLlxuXG5JJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZm9sbG93aW5nIHN5bWJvbHMgZm9yIHRlc3Rpbmc6IGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBkYW1vbl9ob3Rfc2NvcmVgLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gSSdsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgdXNhZ2Ugb2YgYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AgaW4gYG1tL2RhbW9uL3N0YXQuY2AgdG8gYmUgY29tcGxldGVseSBjb25maWRlbnQuXG5cblVsdGltYXRlbHksIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgY29uZmlncyBhcmUgZW5hYmxlZDogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX0xSVV9TT1JUYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1NUQVRgLiBJdCdzIGEgY29tcHJlaGVuc2l2ZSBzZXQsIGJ1dCBuZWNlc3NhcnkgZm9yIHRob3JvdWdoIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0xOVQyMToxNDozOS43NTA0NzIzOTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTMyODg5NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbWF4X25yX2FjY2Vzc2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N0YXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTQ6MzkuODU5ODE1MTM0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjkzNzUyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIGNvbnZleWluZyB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlYmFzZTogVHJhY2luZyBgZGFtb25fc2V0X2F0dHJzYCBVc2FnZSoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB3aGVyZSBgZGFtb25fc2V0X2F0dHJzYCBpcyBiZWluZyB1c2VkLiBGaXJzdCB0aGluZyBJIGNoZWNrIGlzIGBtbS9kYW1vbi9zdGF0LmNgLCBhc3N1bWluZyBpdCdzIGEgcHJpbWUgY2FuZGlkYXRlLiBOb3BlLCBpdCdzIG5vdCBkaXJlY3RseSBjYWxsZWQgdGhlcmUuIEludGVyZXN0aW5nLi4uIHNvLCB3aGVyZSBpcyBpdCBiZWluZyB1c2VkPyBUaW1lIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjYWxsIGhpZXJhcmNoeS4gSSdtIGdvaW5nIHRvIHRyYWNrIHRoZSBmdW5jdGlvbiBjYWxscyB0byBmaW5kIHdoZXJlIHRoaXMgbWV0aG9kIGlzIHVzZWQuIE5vdywgSSB3aWxsIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgbWV0aG9kLiBUaGF0IHNob3VsZCBoZWxwIG1lIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NTUsIk91dHB1dFRva2VucyI6MjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMTlUMjE6MTQ6NDQuMjI5MTkzMDgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1OTE3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1RBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3NldF9hdHRyc1wiLFxuICAgIFwiZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZVwiLFxuICAgIFwiZGFtb25faG90X3Njb3JlXCIsXG4gICAgXCJkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBkaXZpc2lvbiBieSB6ZXJvIGluIGBkYW1vbl9tYXhfbnJfYWNjZXNzZXNgIGJ5IGVuc3VyaW5nIHRoZSBkaXZpc29yIGBzYW1wbGVfaW50ZXJ2YWxgIGlzIGF0IGxlYXN0IDEuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBjb3JlIERBTU9OIGxvZ2ljLCBzdWNoIGFzIHVwZGF0aW5nIHJlZ2lvbiBhY2Nlc3MgcmF0ZXMgYW5kIGNhbGN1bGF0aW5nIGhvdCBzY29yZXMuIEZ1enppbmcgaXMgbmVlZGVkIHRvIHZlcmlmeSB0aGF0IHRoZSBmaXggY29ycmVjdGx5IHByZXZlbnRzIGNyYXNoZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIGluIERBTU9OJ3MgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TVEFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc2V0X2F0dHJzXCIsXG4gICAgXCJkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlXCIsXG4gICAgXCJkYW1vbl9ob3Rfc2NvcmVcIixcbiAgICBcImRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgICBcImRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGRpdmlzaW9uIGJ5IHplcm8gaW4gYGRhbW9uX21heF9ucl9hY2Nlc3Nlc2AgYnkgZW5zdXJpbmcgdGhlIGRpdmlzb3IgYHNhbXBsZV9pbnRlcnZhbGAgaXMgYXQgbGVhc3QgMS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNvcmUgREFNT04gbG9naWMsIHN1Y2ggYXMgdXBkYXRpbmcgcmVnaW9uIGFjY2VzcyByYXRlcyBhbmQgY2FsY3VsYXRpbmcgaG90IHNjb3Jlcy4gRnV6emluZyBpcyBuZWVkZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpeCBjb3JyZWN0bHkgcHJldmVudHMgY3Jhc2hlcyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgaW4gREFNT04ncyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow58r8x[1] Phase: Succeeded StartedAt: 2026-06-19 21:15:06 +0000 UTC FinishedAt: 2026-06-19 21:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-19 21:15:06 +0000 UTC FinishedAt: 2026-06-19 21:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2] Phase: Succeeded StartedAt: 2026-06-19 21:15:06 +0000 UTC FinishedAt: 2026-06-20 01:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:15:06 +0000 UTC FinishedAt: 2026-06-20 01:12:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:15:06 +0000 UTC FinishedAt: 2026-06-19 21:15:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:15:06 +0000 UTC FinishedAt: 2026-06-19 21:15:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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-workflow58r8x/series-workflow58r8x-convert-artifact-2679546423/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:15:16 +0000 UTC FinishedAt: 2026-06-19 21:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:15:16 +0000 UTC FinishedAt: 2026-06-19 21:36:13 +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:*33bdf2da-3666-4b95-a90e-4981a7176ddc,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-workflow58r8x/series-workflow58r8x-convert-artifact-2679546423/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": "509c2a32-85bf-43b7-b27a-195f07fa20c7", "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-workflow58r8x/series-workflow58r8x-build-action-3369861517/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:15:16 +0000 UTC FinishedAt: 2026-06-19 21:36:03 +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:*33bdf2da-3666-4b95-a90e-4981a7176ddc,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-workflow58r8x/series-workflow58r8x-convert-artifact-2679546423/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": "509c2a32-85bf-43b7-b27a-195f07fa20c7", "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-workflow58r8x/series-workflow58r8x-build-action-3369861517/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:36:13 +0000 UTC FinishedAt: 2026-06-19 21:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:36:13 +0000 UTC FinishedAt: 2026-06-19 21:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:36:13 +0000 UTC FinishedAt: 2026-06-19 21:36:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:36:13 +0000 UTC FinishedAt: 2026-06-19 21:36:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-workflow58r8x/series-workflow58r8x-convert-artifact-1392331878/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:36:23 +0000 UTC FinishedAt: 2026-06-19 21:38:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:36:23 +0000 UTC FinishedAt: 2026-06-19 21:38:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*509c2a32-85bf-43b7-b27a-195f07fa20c7,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-workflow58r8x/series-workflow58r8x-build-action-3369861517/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-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:38:15 +0000 UTC FinishedAt: 2026-06-19 21:38:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:38:15 +0000 UTC FinishedAt: 2026-06-19 21:38:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:38:15 +0000 UTC FinishedAt: 2026-06-19 22:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:38:15 +0000 UTC FinishedAt: 2026-06-19 22:03:25 +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:*33bdf2da-3666-4b95-a90e-4981a7176ddc,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-workflow58r8x/series-workflow58r8x-convert-artifact-1392331878/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": "984cb74c-2828-496d-85db-4ffce6d2a63a", "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-workflow58r8x/series-workflow58r8x-build-action-1138098730/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 21:38:15 +0000 UTC FinishedAt: 2026-06-19 22:03:15 +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:*33bdf2da-3666-4b95-a90e-4981a7176ddc,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-workflow58r8x/series-workflow58r8x-convert-artifact-1392331878/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": "984cb74c-2828-496d-85db-4ffce6d2a63a", "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-workflow58r8x/series-workflow58r8x-build-action-1138098730/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:03:25 +0000 UTC FinishedAt: 2026-06-19 22:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:03:25 +0000 UTC FinishedAt: 2026-06-19 22:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:03:25 +0000 UTC FinishedAt: 2026-06-19 22:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:03:25 +0000 UTC FinishedAt: 2026-06-19 22:05:29 +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:*984cb74c-2828-496d-85db-4ffce6d2a63a,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-workflow58r8x/series-workflow58r8x-build-action-1138098730/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-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:05:38 +0000 UTC FinishedAt: 2026-06-20 01:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:05:38 +0000 UTC FinishedAt: 2026-06-20 01:12:13 +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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"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:*509c2a32-85bf-43b7-b27a-195f07fa20c7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*984cb74c-2828-496d-85db-4ffce6d2a63a,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-workflow58r8x/series-workflow58r8x-build-action-3369861517/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-workflow58r8x/series-workflow58r8x-build-action-1138098730/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:05:38 +0000 UTC FinishedAt: 2026-06-19 22:05:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:05:38 +0000 UTC FinishedAt: 2026-06-19 22:05:43 +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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"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-workflow58r8x/series-workflow58r8x-convert-artifact-3474324139/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:05:38 +0000 UTC FinishedAt: 2026-06-19 22:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:05:38 +0000 UTC FinishedAt: 2026-06-19 22:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:05:38 +0000 UTC FinishedAt: 2026-06-19 22:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:05:48 +0000 UTC FinishedAt: 2026-06-20 01:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58r8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"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":["damon_set_attrs","damon_update_region_access_rate","damon_hot_score","damon_lru_sort_apply_parameters","damon_reclaim_apply_parameters"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_LRU_SORT","DAMON_RECLAIM","DAMON_VADDR","DAMON_PADDR","DAMON_STAT"],"series_id":"dc17a10d-920f-489a-896c-5fe65670f292","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-06-19 22:05:48 +0000 UTC FinishedAt: 2026-06-20 01:12:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*509c2a32-85bf-43b7-b27a-195f07fa20c7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*984cb74c-2828-496d-85db-4ffce6d2a63a,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-workflow58r8x/series-workflow58r8x-build-action-3369861517/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-workflow58r8x/series-workflow58r8x-build-action-1138098730/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-workflow58r8x/series-workflow58r8x-convert-artifact-3474324139/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,}